Обновить
117.55

C# *

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

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

Business Intelligence — быстрый старт

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

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

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

С учетом опыта над зарубежными (MercerInsight) и отечественными (Visiology) BI продуктами, а также над оригинальными BI системами для крупных отечественных IT компаний, у меня, честно говоря, сложилось впечатление, что популярным решением для визуализации и чуть ли не стандартом де-факто являются HighCharts. Безусловно, есть альтернативы (даже условно CrystalReports, DevExpress и т.д.), в этой статье будут использованы именно HighCharts, мы увидим их особенности и преимущества. Также для простоты будет просто обычный JS, но обычно в реальных проектах используются HighCharts в связке с одним из TypeScript фронтендным фреймворком.

Создадим новый MVC .NET проект (например, .NET 8) из .NET CLI и добавим dev HTTPS сертификаты:

Читать далее

Наш опыт мультиаутентификации в приложениях ASP.NET Core

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

Привет, Хабр! На связи разработчик АО АльфаСтрахование. В этой статье я хочу рассказать о мультиаутентификации в ASP.NET Core приложениях.

Нам довольно часто нужно писать .NET Core приложения. Нередко они используются для интеграции крупных систем. А в этих системах частенько свой собственный набор учетных записей (далее УЗ) и инструментов по управлению доступа к ним.

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

Читать далее

Outlook как сервер микросервисов

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

Доброго времени суток. 

Ты ж у нас один программист !!!
Небольшая вводная. Я для друзей, по их запросам, выгружаю данные из MS SQL Server'а. Друзья дают исходные данные, для которых надо сделать выгрузку в файлах .csv. Исходных данных (ИД) может быть от 1 до ... строк. Я загружал данные в sql таблицу с помощью задачи или Task в английской версии в SQL Server Management Studio (SSMS). Исторически сложилось, что все sql файлы со скриптами хранятся на моем ПК. Я файлы открывал в SSMS и запускал на выполнение. Результаты записывал в файл и отправлял сообщение, что обработка выполнена. Друзья забирали файлы с результатами. 

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

Читать далее

Async/Await в C#. Часть 3. Чем Tasks(Задачи) лучше чем IAsyncResult. О чем не написал Stephen Toub

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

В этот раз я достаточно внимательно прочитал перевод главы про задачи(Tasks) из этого Поста, чтобы выяснить, что он не очень точно передает смысл исходного текста. Я попробую пересказать содержание так, как я его понял, в том числе полагаясь на свой практический опыт программирования многопоточных приложений и embedded приложений с множеством прерываний.

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

Пару ссылок на предыдущие работы по этой теме вы тоже найдете под катом.

Читать далее

Пример для иллюстрации принципов SOLID который я (кажется) понял

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

Это перевод вступления из электронной книги - документа.

Авторы утверждают что:

В этой главе вы увидите, как можно удовлетворить некоторые из распространенных требований корпоративных приложений (приложений для бизнеса), таких как низкая стоимость (простота) сопровождения и тестируемость, применяя слабосвязанный дизайн для вашего приложения. Вы увидите очень простую иллюстрацию этого подхода в примерах кода, которые показывают два разных способа реализации зависимости между классами ManagementController и TenantStore. Вы также увидите, как принципы объектно-ориентированного программирования SOLID связаны с теми же проблемами (имеются ввиду проблемы стоимости сопровождения = исправления ошибок + возможности расширения функциональности и тестируемости).

Читать далее

Обзор библиотек для Hangfire

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

Hangfire — распределенный и расширяемый планировщик задач для приложений на.NET.

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

Читать далее

Многопоточность в Photon Plugin

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

Плагины в фотоне предназначены для того, чтобы запускать какую-то свою логику на своём Photon облаке. Так же даже если используется Photon SDK плагин является более быстрым способом, получить что-то работающее без погружения в дебри SDK.

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

Читать далее

Работа с Gradient через jobs + burst

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

В Unity есть класс Gradient, который предоставляет удобные средства для управления градиентом в рантайме и редакторе. Но т.к. это класс, а не структура использовать его через Job system и burst нельзя. Это первая проблема. Вторая проблема — это работа с ключами градиента. Получение значений осуществляется через массив, который создаётся в куче. И как следствие напрягает сборщик мусора.

Сейчас я покажу как можно решить эти проблемы. И в качестве бонуса получить увеличение производительности до 8 раз при выполнении метода Evaluate.

Читать далее

Путь к Инновационному Тестированию с Selenium и C#: Мастерство и Качество

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

"В современном мире программной разработки качество продукта играет ключевую роль. В процессе разработки надежное функционирование веб-приложений становится неотъемлемой частью обеспечения высокого качества программного обеспечения. Автоматизированное тестирование — это эффективный способ обеспечить надежность и стабильность веб-приложений. И здесь на сцену выходят Selenium и язык программирования C#."

Читать далее

Система сохранения на Unity для начинающих

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

Привет, Хабр! Меня зовут Игорь, и я Unity Developer. В этой статье попытаюсь максимально просто рассказать и показать, как написать систему сохранения в игре в Unity. Скажу сразу, статья ориентирована для тех, кто только начинает свой путь в освоении разработки игр. Поэтому некоторые архитектурные принципы будут нарушены с целью упрощения кода. Ближе к концу статьи покажу как сохранять миссии, про которые писал ранее. Ну что ж, поехали...

Читать далее

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

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

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

Читать далее

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

Использование библиотеки MediatR при реализации бизнес-логики в проектах, реализуемых на базе .NET

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

Использование библиотеки MediatR при реализации бизнес‑логики в проектах, реализуемых на базе.NET

На просторах интернета появились библиотеки, позволяющие упростить и ускорить построение бизнес‑логики разрабатываемого приложения. Одна из таких библиотек — MediatR. В данной статье я хочу описать небольшой пример из реального проекта. Проект, web приложение, предназначен для автоматизации некоторого бизнес‑процесса. В рамках данного проекта была реализована задача по согласованию, где использовался инструментарий библиотеки MediatR. Я не буду уделять особого внимания моментам, связанным с установкой и настройкой данной библиотеки в проекте, выделю только то, что необходимо для решения нашей задачи.

Читать далее

Преимущества изучения C# для начинающих программистов

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

Приветствую, дорогой хаброжитель! В этой статье я расскажу тебе про прекрасный мир C# (произносится "Си-шарп"). Если ты новичок в программировании или только хочешь начать свое путешествие с C#, у меня есть десять отличных фактов про этот язык, с помощью которых я попробую доказать, что язык C# должен стать твоим основным языком программирования.

Читать далее

IEntityTypeConfiguration в EF Core, или отделим отделимое

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

Почти каждый разработчик программного обеспечения работал с СУБД, по крайней мере каждый слышал о них. В мире существует множество способов для работы с базами данных и один из них - это ORM (англ. Oblect-Relational Mapping). Для разработчиков приложений, особенно бизнес-приложений, различного рода реализации данного способа стали в прямом смысле "спасательным кругом" в грубом мире работы с базами данных. Ещё начиная с .Net Framework компания Microsoft кидала такой круг разработчикам, который носил название Entity Framework (EF). И теперь, в .NET есть кроссплатформенная реализация старенького EF - Entity Framework Core (EF Core).

В EF Core существует несколько способов конфигурирования сущностей, все они рассмотрены в моей предыдущей статье - https://habr.com/ru/post/649647/. Лучший из них на мой взгляд - это реализация IEntityTypeConfiguration<>. Он позволяет отделить модель предметной области от хранилища, сделать структуру проекта более упорядоченной, а само решение более гибким. Далее по статье мы рассмотрим все преимущества данного способа. Итак, пришло время на не реальном реальном проекте разобраться наконец с этим способом описания отношений полей и сущностей.

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

Имеем несколько таблиц Cars, EquipmentOptions, Makes, Models. Все они имеют поля, которые являются системными, имеют один и тот же тип и называются одинаково. Это поля Id, CreatedDateTime, UpdatedDateTime. Для описания этих полей, мы создадим базовую модель для будущих сущностей BaseEntity:

Читать далее

Своя криптосистема с открытым ключом. Задача о рюкзаке. Часть I — пакет

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

Все мы знаем популярную задачу о рюкзаке. Все мы также знаем, что такое асимметричное шифрование и для чего оно используется. А если не знаете - то вот и повод узнать, потому что в этой статье мы попытаемся на основе задачи о рюкзаке написать свою систему шифрования с открытым ключом на C#. Основную логику криптосистемы спрячем в отдельный NuGet-пакет, который затем используем для написания собственного простого web-сервера (тоже на C#, конкретней на ASP.NET Core) с БД. Этот сервер будет представлять собой мессенджер, где пользователи смогут регистрироваться и посылать друг другу сообщения, а также проверять свою почту на наличие оных. Собственная система шифрования позволит нам обмениваться информацией между клиентами и сервером, а в случае перехвата противник не сможет её дешифровать (или, по крайней мере, сможет, но не сразу).

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

Пристегнуться!

Nullable reference types в Unity простыми словами

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

С выходом Unity 2021 LTS в полной степени стал доступен Nullable reference types. Коротко расскажу о том, как включить поддержку Nullables в Unity, и с какими проблемами вы можете встретиться.

Читать далее

Самописные компоненты в конвейере обработчиков ASP.NET Core: подключение и доступ к сервисам

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


В этой статье я хочу рассказать о том, как расширяются возможности ASP.NET Core по обработке запросов к веб-серверу с помощью самостоятельно написанных компонентов конвейера обработки.


Обычно для разработки серверной части веб-приложений (по-простому — бэка) с помощью ASP.NET Core имеет смысл использовать базирующиеся на нем фреймворки высокого уровня: MVC Core, Razor Pages и т.д.: они позволяют с минимумом усилий решать типовые задачи. Но встречаются задачи нетиповые, которые требуют для своего решения перейти на более низкий уровень (или, по крайней мере, понимать, что на этом уровне происходит) — на уровень базовых возможностей ASP.NET Core. И в этой статье как раз рассказывается об использовании одной из этих базовых возможностей — компонентов middleware, из которых создается конвейер обработки запросов к веб-серверу. Далее в статье я буду называть их компонентами-обработчиками, потому что официальный перевод из документации от MS — "ПО промежуточного слоя" — он некрасив и не описывает их функции. Конкретно в статье рассматривается, какие средства предоставляет фреймворк ASP.NET Core для создания самописных компонентов-обработчиков. И особое внимание уделено тому, как эти компоненты могут получить доступ к другой базовой возможности ASP.NET Core — сервисам, которые зарегистрированы в контейнере сервисов (он же — "DI-контейнер"), как к стандартным для ASP.NET Core, так и к самописным.

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

Секретики Unity3d. Зачем нужен флаг STARTER_ASSETS_PACKAGES_CHECKED в стартовых ассетах

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

Кто устанавливал офицальные ассеты от Unity "Starter Assets - Third Person Character Controller" или "Starter Assets - First Person Character Controller" возможно замечал что в настройках проета (Project settings -> Player -> Other settings -> Script Compilation) появляется флаг STARTER_ASSETS_PACKAGES_CHECKED, но зачем он нужен? Давайте разбираться.

Читать далее

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