Статья для .NET разработчиков о том как привязать сторонний стриминговый сервис к своему приложению и запустить прослушивание музыки и подкастов в формате DolbyDigital Surround 5,1.
.NET *
Хаб со знаниями про .NET
Новости
Календарь семьи на MudBlazor с авторизацией и развертыванием на Ubuntu
Введение:
MudBlazor - это амбициозная библиотека компонентов для Blazor, основанная на дизайне Material и с акцентом на простоту использования и четкую структуру. Она идеально подходит для разработчиков .NET, которые хотят быстро создавать веб-приложения, не сталкиваясь с проблемами CSS и JavaScript. MudBlazor полностью написан на C#, что позволяет вам легко адаптировать, исправлять или расширять фреймворк. https://mudblazor.com/
Задачей была разработать полезное приложение для нашей семьи, названное "Семейный календарь", которое объединяет функциональность от Google, Yandex и Mail для удобного ведения семейного расписания. Я хотел создать приложение, которое позволит нам легко планировать и отслеживать события, задачи и важные даты в нашей семье.
Блеск и нищета паттерна «Спецификация» в С#. Оцениваем планы запросов
О паттерне «Спецификация», который позволяет улучшить структуру приложения, и, следовательно, увеличить гибкость, уменьшив при этом объем кода, а значит — сократить количество ошибок, но это не точно. Почему? - читаем ниже.
Минимализм / Минималист / TMUX.config
Заметили, что мир становится намного красочнее, пестрее, ярче и контрастнее?
Весь мир как-будто бы сошел с ума в погоне за яркостью, красками, фактурой, контрастом, дизайном и стилем. За последние пару десятилетий появилось много такого, что не имело бы место на существование без цвета, ярких акцентом и дизайна. Я думаю далеко идти не надо и интернет без цвета так и остался бы пространством для гиков и ботанов. То время было больше для ученых, техников и просто энтузиастов, которые пытались создать виртуальный мир.
Сейчас же парадигма сместилась в сторону скроллинга ярких картинок, фотографии и видео, и на первый план вышло яркое представление, а не качество внутри.
В ИТ мире тоже происходит такой сдвиг, программы для разработки (IDE) походят больше на елку с гирляндой или какие-то детские квесты из 2000-х. Странность заключается в том, что центр внимания программиста смещается со знаний, на все что угодно, но только не на написание качественного кода, изучения алгоритмов или разобраться как же все таки работает Garbage Collector (.Net мем). Становятся популярны какие-то странные супер фичи будущего, выбор красивой подсветки ошибок, умные помощники и т.д. Но самое странное все начинают называть себя экспертами всех этих ценностей.
https://github.com/paulbuzakov/tmuxconfig
Истории
Async/await, There is no thread – легко обмануть тех, кто сам обманываться рад
Когда нам показывают на некотором примере, что асинхронная операция не создает потока, нам пытаются внушить, что асинхронная операция НИКОГДА не создает потока и в принципе не может его создать, но это не правда! Простой пример с работающим кодом доказывает обратное. Давайте разберем этот пример.
Логика тех, кто поддается такому внушению мне вполне понятна, они хотят упростить себе жизнь, сократить объем теории, с которой надо разбираться.
Интересно было бы понять логику тех, кто поддерживает такое внушение, выдавая обрезанную теорию за полноценную, вполне осознавая, что все не так просто, как хотелось бы.
Формализуем процесс создания нового API в микросервисах на .NET
Мы работаем с ИТ-продуктами в сфере логистики и e-commerce. Большинство таких проектов крупные с точки зрения архитектуры – включают в себя множество сервисов, необходимых для исправной работы целостных систем.
Поговорим о том, как организовать взаимодействие микросервисов в большом продукте-долгожителе синхронно и асинхронно.
Как быстро и качественно импортозаместить UI
Всем привет.
Хочу рассказать о своем опыте импортозамещения UI.
Не предлагаю ничего нового, известный подход, приложенный к конкретной задаче.
Кратко задачу можно описать так:
Есть: Исходный проект с множеством таблиц и форм.
Задача: Нужно в целевом проекте создать аналогичные таблицы и формы по другой технологии. По сути много однотипных классов и файлов, отличающихся заранее известными частями.
Решение:
1. Автоматически собрать необходимую информацию из исходного проекта в файл.
2. Дополнить этот файл в той части которую не получилось собрать автоматически.
3. Создавать нужные файлы по шаблону заменяя подстановочные символы в шаблоне значениями из файла. Полученные файлы могут быть если необходимо доработаны.
Первое что приходит на ум при решении такой задачи — это использовать встроенный в VisualStudio кодогенератор, он реализует похожую задачу. Я изначально рассматривал использование его. Но передумал. Получается много сложнее. Кроме того, генератор в студии предполагается использовать постоянно, мой генератор нужен одноразово что бы создать заготовку кода. Хотя я не исключаю, что буду применять его и далее.
Очевидные для меня плюсы такого подхода:
1) На порядок быстрее.
2) Код максимально однообразен.
3) Код можно легко покрыть автоматически созданными тестами.
4) В случае внесения в шаблон изменений, а это обязательно случится и не раз, можно быстро пересоздать код.(если шаблон доработан, то используя систему контроля версий можно быстро поправить как надо)
Обзор библиотеки FluentValidation. Часть 7.1. Встроенные валидаторы
Рассматриваем часть встроенных валидаторов:
NotNull
(значение не равно null
)Null
(значение равно null
)NotEmpty
(значение не равно null
, пустой строке, пробелам, 0
элементам коллекции)Empty
(значение равно null
, пустой строке, пробелам, 0
элементам коллекции)NotEqual
(значение не равно определённому либо не равно указанному свойству)Equal
(значение равно определённому либо равно указанному свойству)
Rule-based AI + Unity
Привет! В прошлой статье мы уже говорили про искусственный интеллект и трудности его выбора. В этой мы поговорим как начать его писать так чтобы потом не выстрелить себе в жопу ногу.
Тот самый RAT-троян за 200 рублей: как защититься от RADX
Всем привет! Меня зовут Валерий Слезкинцев, в Positive Technologies я руковожу направлением реагирования на конечных точках в отделе обнаружения вредоносного ПО в PT Expert Security Center. Наша команда занимается исследованиями MaxPatrol EDR в части выявления и реагирования на вредоносную активность на хостах. Мы пишем корреляционные правила для покрытия новых техник злоумышленников, анализируем существующие технологии и подходы к обнаружению и реагированию на угрозы. Так, недавно мы заинтересовались новой серией кибератак с использованием трояна удаленного доступа под названием RADX. Об этом вы могли читать в различных статьях, например на SecurityLab. И конечно же, нам стало интересно, как MaxPatrol EDR обнаруживает этот троян и реагирует на него. Что мы в итоге узнали, расскажем и покажем в этой статье.
Самый простой и подробный гайд по конкурентным коллекциям в C#
Когда несколько потоков обращаются к общим ресурсам, должна быть обеспечена потокобезопасность, чтобы избежать повреждения данных и неожиданного поведения.
Конкурентные коллекции в C# предлагают встроенные механизмы для обработки конкурентного доступа, что делает их мощным инструментом в программировании с конкурентным доступом.
В рамках статьи я попробую объяснить
System.Collections.Concurrent
настолько, насколько это возможно, включая примеры и сценарии использования. Также будет затронута тема сравнения с неизменяемыми (immutable) и замороженными (frozen) коллекциями.Большой код. Учимся генерировать F#-исходники с помощью Fantomas. Часть 4. Расширения, обобщения и методы
В прошлой части мы научились определять собственные типы и модули. Мы облекли все достопримечательности в конкретные типы и теперь можем снабдить их индивидуальными свойствами-ребрами (см. рисунок ниже).
В этой части речь в первую очередь пойдёт про Fluent
API, но мы также поковыряем тему параметров в дженериках и функциях. Это последняя статья, где детально разбирается AST
. Я определённо будут возвращаться к кодогену, но предметом разбирательств будут принципы формирования выходного кода, а их реализация ввиду их линейности будет выноситься за скобки.
Другой способ понять, как работает async/await в C#
Про закулисье async/await
написано предостаточно. Как правило, авторы декомпилируют IL-код, смотрят на IAsyncStateMachine
и объясняют, вот дескать какое преобразование случилось с нашим исходным кодом. Из бесконечно-длинной прошлогодней статьи Стивена Тауба можно узнать мельчайшие детали реализации. Короче, всё давно рассказано. Зачем ещё одна статья?
Я приглашаю читателя пройти со мной обратным путём. Вместо изучения декомпилированного кода мы поставим себя на место дизайнеров языка C# и шаг за шагом превратим async/await
в код, который почти идентичен тому, что синтезирует Roslyn.
Ближайшие события
Обзор библиотеки FluentValidation. Часть 6. Внедрение зависимостей
Библиотеку FluentValidation можно использовать с любой библиотекой внедрения зависимостей. В этой части будут примеры на библиотеке Microsoft.Extensions.DependencyInjection
. У нас есть следующие валидаторы:
Обзор библиотеки FluentValidation. Часть 5. Условия
Вы можете задавать условия через методы расширения When
и Unless
для определения, должны ли выполняться все предыдущие валидаторы (до вызова метода расширения) либо конкретный валидатор в правиле RuleFor
. Применение метода расширения When
:
Семантические ловушки асинхронности: Ключи к разгадке и эффективному освоению тем Task, Синхронность, Асинхронность
При освоении новых знаний мы, так или иначе, стараемся связать их с уже освоенными знаниями, в связи с чем при изучении и без того непростых абстракций, в терминах которых заложен свой особый смысл, нередко заходим в тупик.
Такая ситуация имеет место когда начинающий программист знакомится с темами Task, Синхронность, Асинхронность. Ситуация усугубляется тем что зачастую, более опытные коллеги применяют в жаргоне выражения из разряда «Синхронное/Асинхронное выполнение задачи».
Для того, чтобы распутать этот «Гордиев узел», давайте подойдем к проблеме издалека: рассмотрим ее на примере работы симфонического оркестра. Сравним при этом значения проблемных терминов с точки зрения людей, обладающих различной профессиональной ориентацией.
Обзор библиотеки FluentValidation. Часть 4. Сообщения об ошибках. Локализация
Прямо "из коробки" доступны переводы сообщений об ошибках на разных языках для встроенных валидаторов. Есть возможность частично переопределять сообщения об ошибках для встроенных валидаторов под нужную локаль. Также возможно локализовать свои кастомные сообщения об ошибках (например через файлы ресурсов).
Исследуем:
1. Свойство ValidatorOptions.Global.LanguageManager.Culture
2. Свойство CultureInfo.CurrentUICulture
3. Свойство CultureInfo.CurrentCulture
4. Тип LanguageManager
5. Тип IStringLocalizer
Обзор библиотеки FluentValidation. Часть 3. Сообщения об ошибках
В этом обзоре про:
1. Переопределение сообщения об ошибке WithMessage
2. Заполнители для сообщения об ошибке {PropertyName}
, {PropertyValue}
, {PropertyPath}
3. Переопределение названия свойства в сообщении об ошибке WithName
, OverridePropertyName
Обзор библиотеки FluentValidation. Часть 2. Коллекции
Способы описания правил валидаций для элементов коллекций.
Метод RuleForEach
Комбинация методов RuleForEach
+ ChildRules
Комбинация методов RuleFor
+ ForEach
Обзор библиотеки FluentValidation. Часть 1. Первые шаги
Всем привет, меня зовут Влад, я начинаю серию статей по обзору библиотеки FluentValidation на русском языке. Источником информации является официальная дока. Не могу назвать это уроком или полноценным переводом, решил назвать это обзорами.
Вклад авторов
-
sidristij 3013.4 -
XaocCPS 1863.6 -
sahsAGU 1303.2 -
olegchir 1250.6 -
mezastel 1199.6 -
SergeyT 1140.6 -
SergVasiliev 1121.0 -
phillennium 1062.6 -
marshinov 888.2 -
chernikov 822.0