Обновить
134.98

C# *

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

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

Адаптируем код .NET Core под Linux

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

Введение


Однажды перед нами была поставлена задача: портировать набор приложений на C# с Windows/.NET Framework на Linux/.NET Core. Я полагаю, что для Microsoft мы были клиентом с рабочими нагрузками, которые было бы интересно поддерживать с помощью .NET Core. В то время я не понимал, насколько сильным было их стремление работать с нами. Наш подход к Open Source был решающим фактором.

Насколько сложной она может быть? Ну… в этом посте мы расскажем вам о трудностях, с которыми нам пришлось столкнуться, чтобы запускать, контролировать и отлаживать наши приложения.
Читать дальше →

RavenDB и PVS-Studio: коллаборация, от которой выигрывают все

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

Небольшая история про сотрудничество PVS-Studio и RavenDB. PVS-Studio — статический анализатор для улучшения кода. RavenDB — Open Source база данных. Как поиск ошибок в одном проекте приводит к улучшению сразу двух? Ответим на этот вопрос, а также посмотрим на исправления найденных проблем и комментарии разработчиков.

Читать далее

Как написать игру на Monogame, не привлекая внимания санитаров. Часть 5, открываем царство многоклеточных

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

Предыдущие части: Часть 0Часть 1, Часть 2, Часть 3, Часть 4

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

Читать далее

Как на самом деле работает Async/Await в C# (Часть 7)

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

Несколько недель назад в блоге «.NET Blog» появилась статья «Что такое .NET, и почему вы должны выбрать его?». В нем был представлен высокоуровневый обзор платформы, кратко описаны различные компоненты и архитектурные решения, а также обещаны более подробные посты по затронутым темам. Этот пост является первым таким продолжением, в котором подробно рассматривается история создания, архитектурные решения и детали реализации async/await в C# и .NET.

Disclaimer: Я не являюсь профессиональным переводчиком, перевод подготовлен скорее для себя и коллег. Я буду благодарен за любые исправления и помощь в переводе, статья очень интересная давайте сделаем её доступной на русском языке.

Читать далее

Пример интеграции мессенджера с DLP-системой InfoWatch Traffic Monitor через API

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

В этой статье мы расскажем, как внешние приложения и сервисы могут взаимодействовать с DLP-системой InfoWatch Traffic Monitor (далее ТМ) через API. API-интерфейс в TM разработан уже давно, но в последний год интерес к нему со стороны сторонних разработчиков значительно вырос. Интеграторы и вендоры обычно хотят интегрировать DLP- системы с нуля в ИТ-ландшафт организации, импортозаместить прежние иностранные системы, расширить количество контролируемых DLP-системой каналов и аккумулировать информацию из нескольких систем в одной. Мы анализируем кросс-продуктовые сценарии и видим, что API является наиболее эффективным и современным средством решения подобных задач. Поэтому мы решили рассказать про наш API-интерфейс и продемонстрировать его работу на практических примерах.

Сценариев интеграции довольно много, поэтому мы рассмотрим самую популярную задачу - отправку событий из корпоративного мессенджера в DLP TM на контентный анализ. Для пущей сложности мы взяли самописный мессенджер Stack chat, а еще решили отправлять в DLP не только переписку, но и пересылаемые корпоративные файлы. Не секрет, что корпоративный мессенджер - это основное оперативное средство коммуникации любой динамичной организации. А благодаря своим интеграциям со средствами телефонии, сетевыми каталогами, CRM и корпоративными порталами, он же - канал утечки конфиденциальной информации.

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

Читать далее

Бенчмаркая строки и циклы: Replace, Split и Substring

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

Уважаемые читатели, в этой статье я хочу рассказать о небольших тестах со строками и представить свои выводы. Тесты сделаны на .net 7.

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

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

Хочется начать с string.Replace, который проверяется разными вариантами, начиная с базового.

Читать далее

ASP.Net Core: реализуем проверку Google reCAPTCHA V2

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

В этой статье Мудассар Хан (Mudassar Khan) продемонстрирует нам, как реализовать проверку Google reCAPTCHA V2 (версии 2.0) в ASP.Net Core MVC. 

Приведенный в этой статье пример демонстрирует, как Google reCAPTCHA V2 проверяет ответы с капчей от пользователей, получаемые из коллбэк-функций в JavaScript.

Читать далее

Книга «ASP.NET Core Security» в правильном переводе команды DotNetRu

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

Сообщество DotNetRu совместно с издательством ДМК Пресс договорились на доработку и проверку перевода очередной книги. Напомним, что мы уже помогли выпустить три книги: «Управление памятью в .NET для профессионалов» Конрада Кокосы,  «ASP.NET Core в действии» Эндрю Лока и «EF Core в действии» Джона Смита. Издатель делает первоначальный перевод, а ребята из сообщества в качестве экспертов корректируют текст, придавая переводу оригинальный и непротиворечивый смысл.

Мы продолжили использовать хорошо зарекомендовавший себя подход — выделили каждую главу в отдельный документ, создали таблицу, в которой фиксировали процесс по каждой главе. С каждой главой независимо работали два-три редактора и предлагали свои правки. После чего отдельный редактор вычитывал главу и применял внесенные поправки к документу. Это позволило распараллелить работу и быть всем участникам максимально независимыми. После того, как перевод был готов, несколько редакторов прочли всю книгу и внесли финальные изменения.

Рады представить вам очередной результат совместных усилий: книга Кристиана Венца «Безопасность ASP.Net Core» в правильном переводе DotNetRu. В продолжении поста — впечатления о процессе перевода от непосредственных участников и промокод на скидку от издательства.

Читать далее

BTCPay Server: топ-10 ошибок в коде финансового приложения для Bitcoin

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

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

Читать далее

Решение концептуальной проблемы с Unity ECS. Messenger для System

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

Всем привет! В этой статье я подробно разобрал своё решение проблемы реализации "ивентов" в ориентированном на данные дизайне для Unity ECS. Если вы заинтересованы в Unity DOTS/ECS, то данная статья нацелена именно на вас.

Читать далее

ThreadPool. async/await

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

А вы никогда не задумывались, что async и await выглядят как-то инородно среди прочего C# кода? Больше нигде не встречается такого странного синтаксиса и таких модификаторов, кроме как в методах, работающих с Task и Task<T>.

А ещё интересно, сколько вообще стоит пользоваться async/await? И когда можно (нужно?) обходиться без них?

Читать далее

Модульная архитектура — анализ зависимостей

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

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

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

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

Читать далее

Как я адаптировал игру к экранам мобильных устройств

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

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

В процессе я получше познакомился с UI и как адаптировать его под различные размеры экранов, а так же немного погрузился в постобработку. Что, кстати, само по себе не решает проблем возникающих на некоторых экранах, если UI должен отображаться поверх объекта на сцене.

Я очень долго пробовал, пытался, искал. Мое виденье того, как должна выглядеть сцена постоянно менялось

А начал я, как и любой новичок, конечно с

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

Как на самом деле работает Async/Await в C# (Часть 6)

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

Несколько недель назад в блоге «.NET Blog» появилась статья «Что такое .NET, и почему вы должны выбрать его?». В нем был представлен высокоуровневый обзор платформы, кратко описаны различные компоненты и архитектурные решения, а также обещаны более подробные посты по затронутым темам. Этот пост является первым таким продолжением, в котором подробно рассматривается история создания, архитектурные решения и детали реализации async/await в C# и .NET.

Читать далее

Динамические методы в .NET

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

На сегодняшний день в.NET существует несколько видов кодогенерации: новомодные Source Generators, компилируемые Expression Trees, динамические сборки и динамические методы. Каждый способ имеет свои области применения, плюсы и минусы.

В этой статье я хочу рассказать про динамические методы. Мы разберёмся как создавать их, как работает стековая машина и рассмотрим некоторые базовые операции Common Intermediate Language: работу с константами, математические и битовые операции, а также работу с аргументами методов и локальными переменными.

Сразу хочу сказать, что статья не содержит какого‑то хардкора и написана в большей степени для новичков. Если к теме будет интерес, постараюсь в следующей статье рассмотреть более сложные примеры (эта и так получилась достаточно длинной).

Читать далее

Делаем свой генератор CRUD для asp.net mvc (часть 1 — получаем данные)

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

Недавно проходил очередное собеседование, попросили написать CRUD для данных из 5 таблиц с максимальной глубиной связей 3 (таблица 1->таблица 2->таблица 3).

В принципе, это по количеству работы аналог какого-нибудь форума (users, files, themes, groups, messages). Сделайте нам пожалуйста phphbb :). И слышать "Ой, а ваше решение плохо поддерживается" в ответ на труд более двух дней не хотелось.

Встроенный в VisualStudio генератор CRUD по EntityFramework тоже оказался почти бессилен.

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

Начнем

.NET 7 против российской криптографии

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

Разрабатывая один проект на свежем .NET 7 столкнулся с необходимостью подписывать данные с использованием отечественных криптоалгоритмов. Ранее, в .NET Framework хорошая поддержка работы с со сторонними криптопровайдерами, реализующими семейство алгоритмов ГОСТ (CryptoPro CSP, ViPNet CSP и пр.), шла "из коробки". К сожалению, в новые версии фреймворка часть ранее работающего функционала по работе с CMS-сообщениями не попала, и пришлось восполнять пробел надёжными дедовскими методами, т. е. с помощью старого доброго WinAPI.

Читать далее

Вам нужен медиатор

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

Этой весной в чатах и сообществах dotnet (не забываем #DropTheDot) обострились анти-медиаторные настроения. Поначалу меня это забавляло, потом удивляло: люди подхватывают лозунги, не пытаясь разобраться в вопросе. Квинтэссенцией обострения стал доклад Андрея Парамонова "MediatR не нужен”, шокирующий своей категоричностью аргументов. В докладе были зерна истины, но они к концу так и не проросли.

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

Зачем мне медиатор?

Урок на Unity. Интерактивное взаимодействие игрока с окружающими предметами в 3D с помощью меток

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

Урок на Unity. Интерактивное взаимодействие игрока с окружающими предметами в 3D с помощью меток.

Взаимодействие с окружением без коллайдеров и лучей, на простой математике.

Бонус урока. Делаем простое пианино!

Наверно всем знаком такой элемент в игре, как всплывающая иконка рядом с игровым объектом, позволяющая с ним интерактивно взаимодействовать.

Читать далее

Топ-10 докладов на С# конференциях 2019-2022 года

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

Небольшая подборка интересных докладов с конференций для C# и .NET разработчиков за последние несколько лет.

Читать далее

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