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

.NET *

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

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

Создаём DolbyDigital Surround аудио-плеер

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

Статья для .NET разработчиков о том как привязать сторонний стриминговый сервис к своему приложению и запустить прослушивание музыки и подкастов в формате DolbyDigital Surround 5,1.

Читать далее
Всего голосов 6: ↑4 и ↓2 +2
Комментарии 1

Новости

Календарь семьи на MudBlazor с авторизацией и развертыванием на Ubuntu

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

Введение:

MudBlazor - это амбициозная библиотека компонентов для Blazor, основанная на дизайне Material и с акцентом на простоту использования и четкую структуру. Она идеально подходит для разработчиков .NET, которые хотят быстро создавать веб-приложения, не сталкиваясь с проблемами CSS и JavaScript. MudBlazor полностью написан на C#, что позволяет вам легко адаптировать, исправлять или расширять фреймворк. https://mudblazor.com/

Задачей была разработать полезное приложение для нашей семьи, названное "Семейный календарь", которое объединяет функциональность от Google, Yandex и Mail для удобного ведения семейного расписания. Я хотел создать приложение, которое позволит нам легко планировать и отслеживать события, задачи и важные даты в нашей семье.

Читать далее
Всего голосов 5: ↑3 и ↓2 +1
Комментарии 8

Блеск и нищета паттерна «Спецификация» в С#. Оцениваем планы запросов

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

О паттерне «Спецификация», который позволяет улучшить структуру приложения, и, следовательно, увеличить гибкость, уменьшив при этом объем кода, а значит — сократить количество ошибок, но это не точно. Почему? - читаем ниже. 

Читать далее
Всего голосов 27: ↑26 и ↓1 +25
Комментарии 39

Минимализм / Минималист / TMUX.config

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

Заметили, что мир становится намного красочнее, пестрее, ярче и контрастнее?

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

Сейчас же парадигма сместилась в сторону скроллинга ярких картинок, фотографии и видео, и на первый план вышло яркое представление, а не качество внутри.

В ИТ мире тоже происходит такой сдвиг, программы для разработки (IDE) походят больше на елку с гирляндой или какие-то детские квесты из 2000-х. Странность заключается в том, что центр внимания программиста смещается со знаний, на все что угодно, но только не на написание качественного кода, изучения алгоритмов или разобраться как же все таки работает Garbage Collector (.Net мем). Становятся популярны какие-то странные супер фичи будущего, выбор красивой подсветки ошибок, умные помощники и т.д. Но самое странное все начинают называть себя экспертами всех этих ценностей.

https://github.com/paulbuzakov/tmuxconfig

Читать далее
Всего голосов 24: ↑19 и ↓5 +14
Комментарии 37

Истории

Async/await, There is no thread – легко обмануть тех, кто сам обманываться рад

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

Когда нам показывают на некотором примере, что асинхронная операция не создает потока, нам пытаются внушить, что асинхронная операция НИКОГДА не создает потока и в принципе не может его создать, но это не правда! Простой пример с работающим кодом доказывает обратное. Давайте разберем этот пример.

Логика тех, кто поддается такому внушению мне вполне понятна, они хотят упростить себе жизнь, сократить объем теории, с которой надо разбираться.

Интересно было бы понять логику тех, кто поддерживает такое внушение, выдавая обрезанную теорию за полноценную, вполне осознавая, что все не так просто, как хотелось бы.

Читать далее
Всего голосов 14: ↑9 и ↓5 +4
Комментарии 38

Формализуем процесс создания нового API в микросервисах на .NET

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

Мы работаем с ИТ-продуктами в сфере логистики и e-commerce. Большинство таких проектов крупные с точки зрения архитектуры – включают в себя множество сервисов, необходимых для исправной работы целостных систем. 

Поговорим о том, как организовать взаимодействие микросервисов в большом продукте-долгожителе синхронно и асинхронно. 

Читать далее
Всего голосов 10: ↑9 и ↓1 +8
Комментарии 12

Как быстро и качественно импортозаместить UI

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

Всем привет.

Хочу рассказать о своем опыте импортозамещения UI.

Не предлагаю ничего нового, известный подход, приложенный к конкретной задаче.

Кратко задачу можно описать так:

Есть: Исходный проект с множеством таблиц и форм.

Задача: Нужно в целевом проекте создать аналогичные таблицы и формы по другой технологии. По сути много однотипных классов и файлов, отличающихся заранее известными частями.

Решение:

1.       Автоматически собрать необходимую информацию из исходного проекта в файл.

2.       Дополнить этот файл в той части которую не получилось собрать автоматически.

3.       Создавать нужные файлы по шаблону заменяя подстановочные символы в шаблоне значениями из файла. Полученные файлы могут быть если необходимо доработаны.

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

Очевидные для меня плюсы такого подхода:

1) На порядок быстрее.

2) Код максимально однообразен.

3) Код можно легко покрыть автоматически созданными тестами.

4) В случае внесения в шаблон изменений, а это обязательно случится и не раз, можно быстро пересоздать код.(если шаблон доработан, то используя систему контроля версий можно быстро поправить как надо)

 

Читать далее
Всего голосов 12: ↑0 и ↓12 -12
Комментарии 24

Обзор библиотеки FluentValidation. Часть 7.1. Встроенные валидаторы

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

Рассматриваем часть встроенных валидаторов:

NotNull (значение не равно null)
Null (значение равно null)
NotEmpty (значение не равно null, пустой строке, пробелам, 0 элементам коллекции)
Empty (значение равно null, пустой строке, пробелам, 0 элементам коллекции)
NotEqual (значение не равно определённому либо не равно указанному свойству)
Equal (значение равно определённому либо равно указанному свойству)

Читать далее
Всего голосов 9: ↑4 и ↓5 -1
Комментарии 14

Rule-based AI + Unity

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

Привет! В прошлой статье мы уже говорили про искусственный интеллект и трудности его выбора. В этой мы поговорим как начать его писать так чтобы потом не выстрелить себе в жопу ногу.

Читать далее
Всего голосов 4: ↑3 и ↓1 +2
Комментарии 6

Тот самый RAT-троян за 200 рублей: как защититься от RADX

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

Всем привет! Меня зовут Валерий Слезкинцев, в Positive Technologies я руковожу направлением реагирования на конечных точках в отделе обнаружения вредоносного ПО в PT Expert Security Center. Наша команда занимается исследованиями MaxPatrol EDR в части выявления и реагирования на вредоносную активность на хостах. Мы пишем корреляционные правила для покрытия новых техник злоумышленников, анализируем существующие технологии и подходы к обнаружению и реагированию на угрозы. Так, недавно мы заинтересовались новой серией кибератак с использованием трояна удаленного доступа под названием RADX. Об этом вы могли читать в различных статьях, например на SecurityLab. И конечно же, нам стало интересно, как MaxPatrol EDR обнаруживает этот троян и реагирует на него. Что мы в итоге узнали, расскажем и покажем в этой статье.

Подробнее
Всего голосов 4: ↑4 и ↓0 +4
Комментарии 8

Самый простой и подробный гайд по конкурентным коллекциям в C#

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


Когда несколько потоков обращаются к общим ресурсам, должна быть обеспечена потокобезопасность, чтобы избежать повреждения данных и неожиданного поведения.

Конкурентные коллекции в C# предлагают встроенные механизмы для обработки конкурентного доступа, что делает их мощным инструментом в программировании с конкурентным доступом.

В рамках статьи я попробую объяснить System.Collections.Concurrent настолько, насколько это возможно, включая примеры и сценарии использования. Также будет затронута тема сравнения с неизменяемыми (immutable) и замороженными (frozen) коллекциями.
Читать дальше →
Всего голосов 60: ↑58 и ↓2 +56
Комментарии 23

Большой код. Учимся генерировать F#-исходники с помощью Fantomas. Часть 4. Расширения, обобщения и методы

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

В прошлой части мы научились определять собственные типы и модули. Мы облекли все достопримечательности в конкретные типы и теперь можем снабдить их индивидуальными свойствами-ребрами (см. рисунок ниже).

В этой части речь в первую очередь пойдёт про Fluent API, но мы также поковыряем тему параметров в дженериках и функциях. Это последняя статья, где детально разбирается AST. Я определённо будут возвращаться к кодогену, но предметом разбирательств будут принципы формирования выходного кода, а их реализация ввиду их линейности будет выноситься за скобки.

Читать далее
Всего голосов 11: ↑9 и ↓2 +7
Комментарии 0

Другой способ понять, как работает async/await в C#

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

Про закулисье async/await написано предостаточно. Как правило, авторы декомпилируют IL-код, смотрят на IAsyncStateMachine и объясняют, вот дескать какое преобразование случилось с нашим исходным кодом. Из бесконечно-длинной прошлогодней статьи Стивена Тауба можно узнать мельчайшие детали реализации. Короче, всё давно рассказано. Зачем ещё одна статья?

Я приглашаю читателя пройти со мной обратным путём. Вместо изучения декомпилированного кода мы поставим себя на место дизайнеров языка C# и шаг за шагом превратим async/await в код, который почти идентичен тому, что синтезирует Roslyn.

Читать далее
Всего голосов 16: ↑16 и ↓0 +16
Комментарии 26

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

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн

Обзор библиотеки FluentValidation. Часть 6. Внедрение зависимостей

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

Библиотеку FluentValidation можно использовать с любой библиотекой внедрения зависимостей. В этой части будут примеры на библиотеке Microsoft.Extensions.DependencyInjection. У нас есть следующие валидаторы:

Читать далее
Всего голосов 8: ↑4 и ↓4 0
Комментарии 0

Обзор библиотеки FluentValidation. Часть 5. Условия

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

Вы можете задавать условия через методы расширения When и Unless для определения, должны ли выполняться все предыдущие валидаторы (до вызова метода расширения) либо конкретный валидатор в правиле RuleFor. Применение метода расширения When:

Читать далее
Всего голосов 5: ↑3 и ↓2 +1
Комментарии 2

Семантические ловушки асинхронности: Ключи к разгадке и эффективному освоению тем Task, Синхронность, Асинхронность

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

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

Такая ситуация имеет место когда начинающий программист знакомится с темами Task, Синхронность, Асинхронность. Ситуация усугубляется тем что зачастую, более опытные коллеги применяют в жаргоне выражения из разряда «Синхронное/Асинхронное выполнение задачи».

Для того, чтобы распутать этот «Гордиев узел», давайте подойдем к проблеме издалека: рассмотрим ее на примере работы симфонического оркестра. Сравним при этом значения проблемных терминов с точки зрения людей, обладающих различной профессиональной ориентацией.

Читать далее
Всего голосов 15: ↑12 и ↓3 +9
Комментарии 14

Обзор библиотеки FluentValidation. Часть 4. Сообщения об ошибках. Локализация

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

Прямо "из коробки" доступны переводы сообщений об ошибках на разных языках для встроенных валидаторов. Есть возможность частично переопределять сообщения об ошибках для встроенных валидаторов под нужную локаль. Также возможно локализовать свои кастомные сообщения об ошибках (например через файлы ресурсов).

Исследуем:
1. Свойство ValidatorOptions.Global.LanguageManager.Culture
2. Свойство CultureInfo.CurrentUICulture
3. Свойство CultureInfo.CurrentCulture
4. Тип LanguageManager
5. Тип IStringLocalizer

Читать далее
Всего голосов 7: ↑3 и ↓4 -1
Комментарии 2

Обзор библиотеки FluentValidation. Часть 3. Сообщения об ошибках

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

В этом обзоре про:

1. Переопределение сообщения об ошибке WithMessage

2. Заполнители для сообщения об ошибке {PropertyName}, {PropertyValue}, {PropertyPath}

3. Переопределение названия свойства в сообщении об ошибке WithName, OverridePropertyName

Читать далее
Всего голосов 12: ↑6 и ↓6 0
Комментарии 2

Обзор библиотеки FluentValidation. Часть 2. Коллекции

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

Способы описания правил валидаций для элементов коллекций.

Метод RuleForEach
Комбинация методов RuleForEach + ChildRules
Комбинация методов RuleFor + ForEach

Читать далее
Всего голосов 14: ↑8 и ↓6 +2
Комментарии 4

Обзор библиотеки FluentValidation. Часть 1. Первые шаги

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

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

Читать далее
Всего голосов 16: ↑10 и ↓6 +4
Комментарии 16

Вклад авторов

Работа

.NET разработчик
64 вакансии