Как стать автором
Обновить
55.43

.NET *

Хаб со знаниями про .NET

Сначала показывать
Порог рейтинга
Уровень сложности

История о том как абсолютное оружие оказалось никому не нужным

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров3.7K

Все началось с того что к нам в офис приехал директор иногороднего филиала.

Он подошел ко мне и сказал примерно следующее:

“Я переписываюсь с генеральным директором с помощью mail.ru.

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

Я озаботился вопросом и достаточно быстро выяснил, что стандартом является шифрование с помощью шифра AES и аутентификация с помощью шифра RSA. Все мессенджеры предусматривают регистрацию, имеют свои сервера и хранят историю переписки.

Кроме того, я выяснил, что все существующие средства шифрования, которые доступны официально, должны иметь лицензию ФСБ (Постановление 313 https://base.garant.ru/70164728/). Одно из условий выдачи такой лицензии – предоставление ключей для доступа к переписке. (Вспоминаем историю с запретом Telegram в РФ).

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

Проанализировав ситуацию, я вывел рецепт идеального (защищенного) мессенджера.

Он должен состоять из следующих элементов:

1. Алгоритм шифрования с абсоютной криптостойкостью.

2. Надежный способ передачи ключей.

3. Надежный способ аутентификации (не RSA).

И не иметь своих серверов, не требовать регистрации, не хранить историю переписки.

Далее началась реализация.

Элемент  1. Шифр с абсолютной криптостойкостью.

Бытует мнение что взломать можно любой шифр. Хотя бы теоретически - брутфорсом.

И я почему-то уверен, что мало кто из читателей этого текста знает что такое алгоритм Вернама. (По крайней мере, я не знал).

Читать далее

Новости

Minimal API: Избавляемся от устаревающих контроллеров в ASP.NET Core

Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров2.4K

Я, думаю, многие уже слышали о появившихся в .NET 6 Minimal API - легковесной замене контроллеров/MVC. Кто-то уже успел ознакомиться и задался вопросом: "Ваше API в 3 строчки, это, конечно, здорово, но как это будет работать в реальном проекте с сотнями эндпоинтов, кучей фильтров, аттрибутов, расширениями OpenAPI/Swagger и прочих радостях?"

В этой статье я хочу ответить на этот вопрос: пройдемся от основ, преимуществ, недостатков, и закончим нюансами работы и проблемами, которые обязательно возникнут при миграции с контроллеров на Minimal API в крупном проекте.

А забегая чуть вперед: если думаете, стоит ли переводить проект на Mini API, вот вам сразу полезная информация: они могут жить в проекте вместе, причем даже без дублирования инфраструктуры: не обязательно переводить все разом - подробнее под катом.

Бонусом, заменим SwaggerGen на реализацию OpenAPI от Microsoft.

Читать далее

Яркие моменты из истории проекта WebMarkupMin

Уровень сложностиСредний
Время на прочтение23 мин
Количество просмотров497

За 13,5 лет я создал 12 опенсорс-проектов для платформы .NET и особое место среди них для меня занимает проект WebMarkupMin. Я не могу точно сказать, что мне больше всего нравится в нем: интересная исследовательская работа, лавры первопроходца на платформе .NET или не уходящая с годами актуальность.

В этой статье будет мало технических подробностей, потому что подобных статей о WebMarkupMin написано предостаточно. Здесь будет сделан акцент на разработке концепции опенсорс-проекта, его продвижении и взаимодействии с другими людьми.

Читать далее

Создание контрола Avalonia/WPF для двухцветных векторных Bootstrap Icons

Уровень сложностиСложный
Время на прочтение33 мин
Количество просмотров866

В мире разработки приложений, будь то веб или десктоп, использование иконок является неотъемлемой частью пользовательского интерфейса. Векторные иконки предпочтительнее растровых, так как они масштабируются без потери качества. Одной из популярных коллекций векторных иконок является Bootstrap Icons, содержащая более 2000 готовых иконок. Хотя коллекция Bootstrap Icons доступна как npm-пакет bootstrap-icons и ориентирована на веб-разработку, её можно эффективно использовать в десктопных приложениях.

Создадим с нуля контрол BootstrapIcon для удобного использования двухцветных векторных иконок в приложениях на Avalonia/WPF. Сами изображения, в основном берем из SVG-файлов библиотеки bootstrap-icons, отсюда и название нашего контрола.

Туториал ориентирован на разработчиков, знакомых с Avalonia на базовом уровне. Основной упор в реализации контрола делается на Avalonia. Вариант для WPF, надеюсь, будет полезен для тех, кто переходит с WPF на Avalonia.

🔗 Полученные контролы BootstrapIcon для Avalonia и WPF с примерами использования размещены на GitHub.

👉 Продолжение следует...
Планируется публикация ещё пары туториалов, в которых будет пошаговое руководство для создания главного меню приложения и аналога ToolBar с использованием BootstrapIcon.

Читать далее

Vertical Slice Architecture на примере C# — простая и удобная архитектура для небольших (и не только) пректов

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров4.3K

Простой вопрос: делая задачу, касающуюся API - вы чаще работаете с одним эндпоинтом, или пишете, условные, репозитории, которые используются сразу в нескольких эндпоинтах? Скорее всего, первое, тогда почему мы разбиваем проект по слоям, а не по фичам (эндпоинтам)?

Это видно в часто используемых нынче архитектурных подходах: Layered, Clean Architecture, Onion, и так далее. Не буду выделять что-то конкретное и объясню общую разницу в подходах:
Vertical Slice Architecture (VSA) строится вокруг каждого отдельного feature-слайса (эндпоинта, как самый простой пример), а не вокруг слоев.

То есть, если код относится к конкретному эндпоинту, мы не размазываем его по всему проекту в папках Commands/Services/Repositories/DTOs и т.п., а кладем в одно место, там где и будет находиться эндпоинт

Главный принцип - уменьшаем связанность между слайсами (фичами), увеличиваем связанность внутри слайса

Читать далее

Введение в OAuth и OpenID Connect

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров3.4K

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

Аутентификация — предоставление доказательств, что вы на самом деле есть тот, кем идентифицировались (от слова “authentic” - истинный, подлинный). В качестве доказательства может использоваться паспорт, для подтверждения личности в банке, либо ввод пароля на сайте.

Авторизация — проверка, что вам разрешен доступ к запрашиваемому ресурсу.

Читать далее

ZLinq — Zero-Allocation LINQ-библиотека для.NET

Уровень сложностиСложный
Время на прочтение20 мин
Количество просмотров4.6K

В прошлом месяце я зарелизил ZLinq v1 — революционную LINQ-библиотеку, которая достигает zero allocation на структурах и дженериках. Она может похвастаться такими расширениями, как LINQ to Span, LINQ to SIMD, LINQ to Tree (FileSystem, JSON, GameObject и т.д.), drop-in replacement Source Generator для произвольных типов, поддержкой нескольких платформ, включая .NET Standard 2.0, Unity и Godot и на данный момент ZLinq имеет более 2000 звезд на GitHub.

Читать далее

RESTful API server на Unreal Engine на примере Input через HTTP

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров1.3K

Недавно передо мной встала интересная задача: организовать удалённый запуск сценариев в приложении на Unreal Engine с мобильного устройства.

Представим упрощённую ситуацию: на компьютере запущено приложение на Unreal Engine (назовём это инсталляцией), а у нас есть мобильное устройство, с которого необходимо передавать команды на эту инсталляцию. Это может быть как сложная мультимедийная инсталляция уровня змейка на фасаде здания, так и более простой пример — управление игровым персонажем с телефона, как с геймпада.

Читать далее

Красно-зеленые деревья: обзор

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров3.3K

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

Читать далее

T-SQL в .NET Core EF Core: Гибридный подход к производительности и гибкости (Переосмысление с учетом обсуждения)

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров3.4K

Секретное оружие в .NET Core: Почему вы игнорируете мощь T-SQL?

Ваши LINQ-запросы становятся громоздкими? Производительность упирается в потолок? Возможно, вы упускаете нечто важное.

Эта статья — приглашение взглянуть на привычные инструменты под новым углом. Мы исследуем гибридный подход, который позволяет использовать весь потенциал Microsoft SQL Server, выходя за рамки стандартного взаимодействия через EF Core. Узнайте, как T-SQL может упростить сложные задачи, повысить производительность и сделать вашу архитектуру более гибкой.

Это не просто технический трюк, а переосмысление роли СУБД в современном приложении. Готовы узнать, как использовать "скрытые" возможности MSSQL и почему это может быть именно то, что нужно вашему проекту?

Читать об этом

Работа с семантическими сетями с помощью пакета AabSemantics

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров572

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

Читать далее

Пишем парольный менеджер с помощью ChatGPT

Время на прочтение2 мин
Количество просмотров2.2K

Хотел давно написать простенький парольный менеджер на C#, но было очень лень его вспоминать. Самые первые модели ChatGPT выдавали не работающий код, но несколько дней назад ChatGPT выдал практически идеально работающий код, правки были минимальны. Приложу ссылку на GitLab.

Читать далее

Scalar вместо Swagger UI. Надо ли оно нам?

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров6.1K

С выходом .NET 9 пакет Swashbuckle.AspNetCore выпилили из шаблона Web API. Это означает, что при создании нового приложения ASP.NET Core Web API у нас больше нет привычного зеленого пользовательского интерфейса Swagger для тестирования endpoint-ов. В статье — краткий разбор, почему это произошло, и обзор альтернативы Scalar.

Хочу разобраться

Ближайшие события

Creepy Support: танец на граблях при создании нелинейной текстовой игры

Время на прочтение11 мин
Количество просмотров1.7K

В программирование меня изначально привело желание делать игры, но как-то так получилось, что за 16 лет карьеры я успел позанимался чем угодно, но не ими. Десктоп, фуллстек-разработка, бэкенд, мобильные приложения, в создания которых я влюбился с головой… Но желание делать игры не пропадало, а просто ждало где-то в сторонке — и спустя столько лет таки дождалось своего часа! Демоверсия уже загружена в Steam, и меня прямо таки распирает от желания рассказать… нет, не о самой игре, а о набитых шишках и о том, как меняется игровой процесс после столкновения с первыми плейтестами.


Читать дальше →

Утечки памяти, связанные с неверным использованием API Microsoft.Extensions.Configuration в .NET под Windows

Время на прочтение12 мин
Количество просмотров1.9K

В этом посте описана одна из причин, по которой растёт расход памяти и возникают утечки, что при работе под Windows может приводить к исключениям OutOfMemoryException. Проблема может возникать после того, как приложение обновится с версии .NET 6 или ниже до .NET 7 или выше, но также встречается и в новых или необновлённых приложениях.

Мне не раз приходилось сталкиваться с данной конкретной проблемой, когда я работал в техподдержке. Поскольку я отвечаю, в основном, за веб-составляющую приложений, мне такие вещи встречались только в приложениях ASP.NET. Однако, эта проблема характерна не только для ASP.NET Core и может произойти в любом приложении под .NET.

Она может возникать в .NET 6 и ниже, но чётче проявляется и лучше просматривается в .NET 7 и выше. Дело в том, что в этих версиях .NET иначе, чем прежде, обращается с блоками памяти, отводимыми под кучи для сборщиков мусора. Разница такова: в .NET 6 и ниже (а также в .NET Framework) используются сравнительно крупные сегменты, для каждой кучи — свои. А в .NET 7+ для этой цели применятся более мелкие регионы, доступные для повторного использования. Если вы хотите подробнее почитать о сегментах и регионах, посмотрите пост от Маони Стивенс, которая занимается архитектурой сборщика мусора в .NET: https://devblogs.microsoft.com/dotnet/put-a-dpad-on-that-gc/

Кроме того, по-видимому, именно такие утечки возникают только в Windows. Я прихожу к такому выводу, изучив релевантный исходный код .NET. Правда, не поленитесь пролистать эту статью даже в случае, если ваше приложение хостится на какой-нибудь другой платформе.

Читать далее

eb#0: Квалификаторы и машины состояний, или Высокотипизированная магия в .NET

Уровень сложностиСложный
Время на прочтение51 мин
Количество просмотров2.4K

Двое мужчин на КДПВ искренне удивляются чувству вайб-кодинга без применения искуственного интелекта.

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

Всё это органично сочетается во фреймворке EmptyBox.

Внутри рассматриваются квалифицированные машины состояний, расширения для них, и как это вообще программируется.

Заглянуть внутрь коробки

Убийство разработки: Опыт похорон .net

Время на прочтение4 мин
Количество просмотров9K

Генеральный директор Microsoft заявил, что до 30% кода компании было написано ИИ*

Ожидание стейкхолдеров от внедрения LLM расходится с обозреваемой реальностью. Именно поэтому реальность приходится постоянно модифицировать. Так делают политики, так делают и менеджеры.

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

Читать далее

Пример использования библиотеки EMX Controls для создания финансовых кроссплатформенных приложений

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров905

Не так давно мы успешно портировали проект CryptoTradingFramework на Avalonia UI с использованием библиотеки визуальных контролов EMX Controls. На примере клиентского приложения CryptoMarketClient мы хотели бы рассказать о возможностях библиотеки EMX Controls для разработки GUI для финансовых приложений.

Читать далее

Арбитраж криптовалют — или переливаем из пустого в порожнее

Уровень сложностиПростой
Время на прочтение15 мин
Количество просмотров16K

В настоящий момент тема арбитража криптовалют в значительной степени скомпрометирована, и этот факт не может не вызывать сожаления. Первые же несколько Telegram‑каналов, найденные при беглом поиске по ключевым словам, оказались мошенническими проектами. На практике, таких ресурсов в социальных сетях на порядки больше. Фактически, это заботливо расставленные сети для ловли очередных доверчивых пользователей, стремящихся к быстрому и лёгкому заработку. И на волне очередного хайпа в теме криптовалют таких становится все больше и больше.

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

Мне интересно

.NET Digest #7

Время на прочтение5 мин
Количество просмотров3.2K

Добро пожаловать на седьмой выпуск нашего дайджеста, посвящённого новостям и событиям в мире .NET! В этот раз мы расскажем про .NET 10 preview 2 и 3, новый релиз Mono, множество интересных статей и, конечно же, AI. Команда PVS-Studio рада представить вам подборку самых интересных и полезных материалов. Поехали!

Читать далее
1
23 ...