Обновить
113.15

C# *

Объектно-ориентированный язык программирования

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

Полное руководство по повышению безопасности вашего Asp.Net Core веб-приложения и API

Время на прочтение8 мин
Количество просмотров10K
Салют, хабровчане! Подготовили для вас перевод полезного руководства в преддверии старта курса «C# ASP.NET Core разработчик».





С каждым обновлением .Net Core Microsoft доказывает тот факт, что .Net Core является самым мощным, универсальным и полным фреймворком, доступным для разработки мощных десктопных, мобильных, облачных и веб-приложений. В отличие от десктопного или мобильного приложения, веб-приложение работает по общедоступному адресу, что является одной из причин, по которым безопасность веб-приложения имеет огромную важность. Хотя Asp.Net Core разработан с учетом лучших практик безопасности, тем не менее, все же существуют некоторые уязвимости, за которыми мы должны следить до и после релиза нашего Asp.Net Core приложения.

В этой статье мы рассмотрим несколько пробелов в безопасности Asp.Net Core веб-приложений и их возможные решения. Давайте начнем с перечисления некоторых важных моментов для обеспечения безопасности нашего .Net Core приложения.
Читать дальше →

Интеграция с «Госуслугами». Место СМЭВ в общей картине (часть I)

Время на прочтение4 мин
Количество просмотров26K
«Госуслуги» прочно вошли в нашу жизнь как средство взаимодействия с органами власти. Больше не нужно стоять в очередях, чтобы заменить паспорт, оплатить налог или записаться на прием к врачу — достаточно внести личные данные и сделать пару кликов. Однако все эти операции включают в себя шаги и состояния, скрытые от пользователя за простыми записями и оповещениями.

В цикле статей мы, команда Gems Development, расскажем о работе с «Госуслугами» по ту сторону экрана и о том, как оформить эффективное взаимодействие органов государственной власти с порталом.
Читать дальше →

Идеальный график отпусков. Естественные алгоритмы. Поведение роя пчёл

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


Естественные (или эволюционные) алгоритмы – это направление в искусственном интеллекте, которое моделирует процессы естественного отбора, мутации и воспроизводства.

Одним из видов естественных алгоритмов является метод роя пчел. Его целью является концентрация бОльшего количества пчел в областях с наибольшей плотностью цветов.


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

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

Обновления .NET Core за июль 2020 года — 2.1.20 и 3.1.6

Время на прочтение2 мин
Количество просмотров3K
На прошлой неделе вышло июльское обновление .NET Core. Оно содержит исправления безопасности и улучшения надежности. См. индвидуальные примечания к выпуску для получения подробной информации об обновленных пакетах. В этой статье расскажем об улучшениях безопасности в совокупности.

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

Сквозной функционал через обертки

Время на прочтение10 мин
Количество просмотров4.2K
При разработке мы не редко сталкиваемся с ситуацией, когда при выполнении какой-либо бизнес-логики требуется записать логи, аудиты, разослать оповещения. В общем реализовать некоторый сквозной функционал.

Когда масштабы производства небольшие, можно особо не усердствовать и все это делать прямо в методах. Постепенно, конструктор сервиса начинает обрастать входящими сервисами для выполнения БЛ и сквозного функционала. А это уже ILogger, IAuditService, INotifiesSerice.
Не знаю как Вы, а я не люблю много инъекций и большие методы, которые выполняют много действий за раз.

Можно накрутить на код какую либо реализацию АОП. В стеке .NET такие реализации делают инъекции в ваше приложение в нужные места, внешне похожи на магию 80 уровня и, зачастую, имеют проблемы с типизацией и отладкой.

Я попытался найти золотую середину. Если данные проблемы не обошли вас стороной, добро пожаловать под кат.
Читать дальше →

Ускоряемся в Entity Framework Core

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

Не будь жадиной!


При выборке данных выбирать нужно ровно столько сколько нужно за один раз. Никогда не извлекайте все данные из таблицы!

Неправильно:

using var ctx = new EFCoreTestContext(optionsBuilder.Options);                
// Мы возвращаем колонку ID с сервера, но никогда не используем и это неправильно!
ctx.FederalDistricts.Select(x=> new { x.ID, x.Name, x.ShortName }).ToList();

Правильно:

using var ctx = new EFCoreTestContext(optionsBuilder.Options);  
// Мы не возвращаем колонку ID с сервера и это правильно!
ctx.FederalDistricts.Select(x=> new { x.Name, x.ShortName }).ToList();
ctx.FederalDistricts.Select(x => new MyClass { Name = x.Name, ShortName = x.ShortName }).ToList();

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

.NET Core + RabbitMQ

Время на прочтение4 мин
Количество просмотров33K
При разработке микросервисов возникает вопрос о предоставлении информации от одного сервиса другим сервисам по мере возникновения каких-либо событий. При этом важно иметь систему без привязки отправителя к получателям. В этом случае используется паттерн Publisher-Subscriber.

На рынке существует множество продуктов для обмена сообщениями, которые поддерживают паттерн Publisher-Subscriber, например Azure Service Bus, RabbitMQ или Apache Kafka.

Недавно мною были опубликованы две NuGet библиотеки для быстрой и удобной настройки event-based communication с использованием Azure Service Bus и RabbitMQ. В этой короткой how-to статье описаны шаги для использования последней.
Читать дальше →

Elastic APM в приложении

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

Мной давно не публиковались статьи и вот опять… Данная статья получилась не очень большой, но, надеюсь, полезной. Когда-то мы решили использовать для сбора метрик Prometheus, но… Спустя время, мы решили перейти на Elastic APM, т. к. весь стек для Elastic у нас уже был и мы решили поддерживать метрики в рамках этого стека.

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

Blazor Client Side Интернет Магазин: Часть 1 — Авторизация oidc (oauth2) + Identity Server4

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

Привет, Хабр! Таки да, в прошлой своей статье я попробовал сделать Todo List на Blazor Wasm и остался доволен. Теперь я решил взяться за что-то по серьезней, чтобы опробовать его в деле. Буду делать простенький SPA UI на Blazor для простого вымышленного интернет магазина. Максимально приближенный к боевому применению вариант. Начну я с того что запилю авторизацию пользователей и разделения их по ролям т. е. чтобы админ и обычный пользователь видели немного разный интерфейс. Еще я это все в docker образы собрал и на docker registry выложил. За подробностями добро пожаловать под кат.
Читать дальше →

Какую цену мы платим за использование async/await в языках JS / C# / Rust

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

Привет, Хабр !


Работая с Javascript / Typescript, я давно заметил, что асинхронное API работает медленней чем аналогичное синхронное, и даже знал что так должно быть. Но в последнем проекте асинхронная работа с файловой системой стала узким местом, и я озаботился замерами.


Известно, что await можно использовать только внутри функций или блоков async, а это значит, что если у нас самый нижний уровень API асинхронный, то придется использовать async/await практически везде, даже там, где оно очевидно не нужно.


К примеру, мы пишем сервисную функцию, которая достает из хранилища объект по ключу. В качестве хранилища мы можем использовать файл, БД, микросервис, то есть медленный источник с асинхронным интерфейсом. Для улучшения производительности — внутри нашей функции мы кэшируем ранее извлеченные объекты (складываем их в Map). По мере работы программы реальных обращений к хранилищу становится все меньше, объекты отдаются из быстрого кэша, но интерфейс функции остается асинхронным!


Какую цену мне приходится платить за каждый асинхронный вызов?
Результаты тестов удручают...

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

Бот нам поможет

Время на прочтение6 мин
Количество просмотров2.5K
image

Год назад наш любимый HR отдел обратился с просьбой: написать чат бота, который поможет в адаптации новичков в компании.

Оговоримся, что мы не разрабатываем собственных продуктов, но клиентам оказываем полный спектр услуг по разработке. Рассказ пойдет о нашем внутреннем проекте, для которого заказчиком является не сторонняя компания, а наш собственный HR. И главная задача при ограниченной доступности людей, ресурсов, времени выполнить проект в срок и выпустить продукт.
Читать дальше →

Универсально храним настройки приложения через IConfiguration

Время на прочтение7 мин
Количество просмотров5.7K
image

В рамках разработки продукта Docs Security Suit мы столкнулись с задачей хранения множества разнотипных настроек приложения как в БД, так и в конфигах. Да и еще так, чтобы их можно было удобно читать-писать. Здесь нам поможет интерфейс IConfiguration, тем более, что он универсальный и удобный для использования, что позволит хранить всевозможные настройки в одном месте
Читать дальше →

System.Console, Mono и NCurses

Время на прочтение2 мин
Количество просмотров5.2K
Всем привет, в своей работе (а ранее и в учебе) я часто использую C# и этот язык стал мне, что называется, привычным. Решив немного потренироваться в программировании, я написал консольный текстовый редактор для Linux. Вкратце опишу полученный опыт.

В Mono класс System.Console поддерживается не полностью, но Mono замечателен тем, что также как и в .NET можно использовать P/Invoke, для вызова методов нативных C/C++ Linux библиотек.

В моем случае это была библиотека ncurses. Выглядит это так:
Читать дальше →

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

Как просто подключить и начать печатать через портативный Bluetooth принтер EPS/POS в приложении Xamarin Android

Время на прочтение2 мин
Количество просмотров4.2K
С чего же мы начнём?

Добавим в проект Nuget пакет для работы с EPS/POS командами. Для этого откройте Package Manager Console и добавьте Zebra.Printer.SDK командой

Install-Package Zebra.Printer.SDK

По сути, не имеет значения какую модель принтера вы используете и кто производитель. Вам нужно убедиться в том, что принтер поддерживает работу с EPS/POS командами (их большинство). В этом случае библиотека сможет работать с ним без проблем.

Все дальнейшие действия описаны с предположением того, что вы зашли в настройки Android устройства и подключились к принтеру.

В первую очередь добавим разрешения в файл AndroidManifest.xml:

<manifest ....>
...
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
...
</manifest>
Читать дальше →

Облака слов из ВК на колене

Время на прочтение2 мин
Количество просмотров3.2K
Недавно мне резко захотелось узнать, как часто слово «кофе» встречается в паблике моей знакомой, а так же построить красивое облако слов, опираясь на частоту их появления в постах.
Если вас заинтересовало, как это сделать буквально на колене, используя C#, то прошу под кат.
Читать дальше →

Unity & Vive: Tutorial

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

Решил в отпуске изучить разработку под Vive в Unity3D. Погуглил парочку примеров и начал пробовать, но почему то не работало. Начав подробней разбираться и обнаружил, что Valve выкатили недавно обновление плагина для Unity3D — новая, сильно переделанная версия. В ней появилось парочка принципиальных новшеств, которые сделали старые tutorial'ы не актуальными. Решил написать новый


Открытый вебинар «Игра «2048»

Время на прочтение1 мин
Количество просмотров3.7K
Всем привет!

Мы открыли новый курс — «Разработчик игр на C#» (который, в целом, больше, чем только разработка игр), а создатель и преподаватель курс Евгений Волосатов уже провёл первый открытый урок. На нём он показал на примере создания игры «2048» весь жизненный цикл создания программы: планирование, создание модуля логики игры, интерфейса пользователя, подбор музыкальных эффектов, перенос игры на Android или iPhone.



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

Использование Reflection.Emit для предварительной компиляции выражений в MSIL

Время на прочтение6 мин
Количество просмотров8.9K
Привет, Хабр! Представляю вашему вниманию перевод статьи "Using Reflection.Emit to Precompile Expressions to MSIL" автора Steve Marsh.

Введение


Классы в этом проекте позволяют анализировать текстовые выражения, введенные пользователем, и компилировать их на сборку .NET. Эта сборка может выполняться «на лету» или сохраняться в DLL. Предварительная компиляция выражений позволяет обеспечить высокий уровень переносимости и позволяет очень эффективно оценивать введенную пользователем логику. Кроме того, мы можем использовать средство ildasm.exe от Microsoft для открытия и проверки создаваемого базового кода MSIL. Есть много интересных функций, которые поставляются с платформой .NET, на мой взгляд пространство имен Reflection.Emit предлагает куда больше, чем вы сможете найти. Пространство имен Reflection.Emit позволяет создавать собственный код .NET во время выполнения, динамически создавая типы .NET и вставляя инструкции MSIL в тело. MSIL — промежуточный язык Microsoft для платформы .NET. IL — это то, во что ваш код C # и VB.NET компилируется и отправляется в JIT-компилятор при запуске .NET-программ. MSIL — очень низкоуровневый язык, который очень быстрый, и работа с ним дает вам исключительный контроль над вашими программами. Я не буду вдаваться в подробности о MSIL в этой статье, но есть несколько других ресурсов, доступных в Интернете, и если вам интересно узнать побольше, я включил некоторые ссылки в конце этой статьи.
Читать дальше →

Заметки по соответствию требованиям платформ VR

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


В этой статье я бы хотел поделится с вами небольшими решениями которые, я применял в разработке развлекательного приложения для нескольких VR – платформ. Само приложение представляет из себя проигрыватель видео (360/4K, FullHD/2D, 2K/3-Screen, стриминг видеопотока, закачка в файл для offline-воспроизведения). Меню приложения выполнено в стилизированных 3D сценах под конкретный фильм. 3-Screen — это Barco Escape формат, где видео состоит из трех экранов.

Мне необходимо было разработать приложения для платформ:

  • Oculus Rift
  • Oculus/Samsung GearVR
  • Steam HTC Vive
  • Google Daydream
  • iOS Cardboard
  • Viveport HTC Vive
Читать дальше →

Работаем с долгими API в ASP.NET Core правильно или тонкости переезда на новую платформу

Время на прочтение9 мин
Количество просмотров20K
Microsoft очень постарался, создавая новую платформу для веб-разработки. Новый ASP.NET Core похож на старенький ASP.NET MVC только, быть может, самой MVC-архитектурой. Ушли сложности и привычные вещи из старой платформы, появился встроенный DI и легковесные view-компоненты, HTTP модули и хэндлеры уступили место middleware и т.д. Вкупе с кроссплатформенностью и хорошей производительностью всё это делает платформу очень привлекательной для выбора. В этой статье я расскажу, как мне удалось решить специфическую задачу логирования длительных запросов к сторонним API для повышения удобства анализа инцидентов.
Читать дальше →

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