Обновить
124.11

C# *

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

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

OpenCV на С# (OpenCVSharp)

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели2.1K

Вероятно после прочтения заголовка у многих возникнет вопрос как OpenCV связан с C#, почему не python? На самом деле ответ простой, потому что нет такого опыта программирования на python, а потребность в OpenCV возникла. OpenCV - прекрасная библиотека для обработки изображений. А OpenCVSharp - это оболочка .NET для библиотеки компьютерного зрения OpenCV, которая позволяет нам с комфортом использовать её из приложения .NET на Windows, Linux или других OS.

Для начала вспомним о том, что изображение в коде выглядит как набор двухмерных матриц яркостей палитры RGB. Всегда возникает вопрос, как с этим работать? Библиотека OpenCV предоставляет прекрасные возможности для обработки изображений, а также покадровой обработки видео. 

Читать далее

Представление иерархии и выполнение иерархических запросов в ClickHouse с использованием хешей

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели880

Привет, Хабр! Достаточно часто используются иерархические фильтры или отчеты с иерархией, и представление иерархии может быть актуально как для UI (например, иерархических фильтров), так и для отчетов или дашбордов. Если рассматривать только структуру запроса с иерархией, без расчета промежуточных итогов и т.д., то сохранение структуры иерархического UI элемента при большом уровне вложенности, а также передача этой иерархии с UI на бэкенд и дальше, например, в виде SQL запроса в СУБД может быть относительно нетривиальной задачей. При относительно большом уровне вложенности (например, иерархия в 10 уровней), при решении «в лоб» и сохранении всех 10 выбранных значений на последнем уровне иерархии, станет неудобно хранить и передавать в качестве параметров с UI на бэкенд (для 1000 строк и 10 уровней вложенности может быть уже условно 10000 параметров), также растет и количество параметров в SQL, и проблемы усугубляются в случае микросервисной архитектуры, когда запрос SQL не сразу отправляется, например, в ClickHouse, а ещё эти 10000 параметров «путешествуют» из UI в один или несколько микросервисов, пока не попадут в ClickHouse. В связи с этим хочу рассмотреть одно из возможных решений проблемы с помощью хеширования на примере C# и ClickHouse, но это «не идеи, проверенные на продакшене», больше тема к обсуждению. Тем, кому интересно решение проблем иерархических запросов на примере C# и ClickHouse — добро пожаловать под кат :)

Читать далее

Мои правила

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

Можно считать эту статью второй частью в неком цикле про мои принципы в работе. В первой части я писал про какие-то неважные для меня вещи на примере code-style. Теперь логично рассказать о том, что для меня важно, про некоторые правила, которые помогают мне в работе. Это не только про написание кода, но и про процесс разработки в целом.

Читать далее

Архитектура диалоговой системы в Unity

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

Когда я начинал разработку своей игры, то не смог найти каких‑то внятных гайдов с описанием архитектуры диалоговой системы. Зачастую авторы упоминали верстку да логику UI, но не отвечали на вопросы «как менять сюжетные стейджи», «как работать с разными типами диалогов», «как менять статус персонажам на сцене» и т. п. Мне не хватало найденной информации и я потратил какое‑то время на написание диалоговой системы самостоятельно. Для опыта конечно же… но и, будем честными, денег я зажал на готовые плагины. Надеюсь, что эта статья поможет таким же новичкам в Unity как и я, кто решил учиться разработке через практику и прототипирование. Небольшая оговор очка: я занимаюсь автоматизацией тестирования и мой основной язык python. Так что заранее прошу извинить за не самые лучшие конструкции C#. Также хочу упомянуть, что статья эта не про код, а про архитектуру, так что первого в принципе будет не так уж и много. А что за игру я делаю? Сюжетное 2д приключение, где я решил брать не механиками, а историей.

Часть 1. Планирование архитектуры

Без четкого ТЗ результат ХЗ. Для начала планируем и фиксируем, что хочется вообще сделать. На моем примере:

1) Система линейная, диалоги без вариантов ответа;

2) Каждая сцена — это грубо говоря отдельная игра, которая не связана с другими сценами, их все можно запускать независимо. Сохранения реализованы в момент перехода между сценами;

3) На каждой сцене есть n стейджей. На каждом стейдже m диалогов. Заканчиваются стейджи — на этой сцене заканчивается сюжет, можно переходить на новую сцену;

Читать далее

Графический переполох: что таит в себе ScottPlot?

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

ScottPlot — библиотека под .NET для построения графиков. Из-за специфики подобных проектов их код нередко бывает запутанным. Сегодня мы попробуем распутать его и отыскать проблемные места с помощью статического анализатора

Читать далее

Уменьшаем размер двоичного файла на C# в 90 раз

Уровень сложностиСредний
Время на прочтение24 мин
Охват и читатели7.4K

Я написал на C# консольный клон Wordle, но попытался сделать двоичный файл максимально крошечным.

Я взял популярную игру Wordle с такими правилами:

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

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

В работе с консолью мне помогла игра Console Games - Snake

Проект запускается в новой консоли dotnet.

Читать далее

Не только для «обхода». Что такое Http Upgrade и как его использовать в .NET

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

Недавно на Хабре вышел обзор того-о-чём-не-стоит-говорить-в-этом-блоге. И, в числе прочих способов того-о-чём-не-стоит-говорить, автор упомянул использование «транспорта HttpUpgrade».

Так как я использую заголовок Upgrade на практике, меня смутило, что в поиске в русскоязычном сегменте интернета найти корректное описание механизма непросто. Конечно, метод является достаточно редко используемым «вчистую» (то есть не в паре с протоколом WebSocket), но тем не менее.

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

Я расскажу о том, что есть «HttpUpgrade», как наш ЦК использует его для создания соединения, по которому клиент и сервер могут обмениваться пакетами: клиент запрашивает видео, а сервер передаёт клиенту пакеты. Ну и разумеется, поделюсь кодом клиента и сервера, создающим между собой «апгрейднутое» соединение в .NET 8.

Меня зовут Андриевский Леонид, я тимлид команды .NET в ЦК Видеонаблюдения Ростелеком. Давайте приступим!

Читать далее

Введение в микросервисы C# + шаблон

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

Думаешь, микросервисы — это сложно? В этой статье я коротко и простыми словами объясняю как написать микросервис на .NET, какие технологии использовать и как избежать типичных ошибок.

📌 Что разберем:

Как правильно разделять логику: CQRS, слои приложения

Какие инструменты использовать: MediatR, MassTransit, MinimalApi и др.

Настройка инфраструктуры: базы данных, документирование API

Практические примеры: разберем код, покажу, как все работает

Начать изучение

Автоматизируй всё! Настройка CI-CD в Unity Часть вторая. Сборка Unity Cloud build

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели721

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

Собираешь билды вручную и теряешь кучу времени? Эта статья позволит тебе автоматизировать процесс сборок в с помощью Unity Cloud Build. Одна кнопка — и билд готов!

В этой статье мы по шагами пройдемся и настроим сборку на Unity Cloud build.

Читать далее

Разбор рендера фейковых теней (и не только) в Танки Онлайн

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

Привет! Меня зовут Артур, я работаю разработчиком в команде Unity компании Альтернатива Гейм. В этой статье я расскажу, как мы реализовали технику фейковых blob-теней в нашей игре Танки Онлайн на Nintendo Switch, используя проекционные меши, а также о том, какие еще применения мы нашли для этой техники.

Читать далее

PVS-Studio в разработке на Unity: новые специализированные диагностики

Уровень сложностиПростой
Время на прочтение12 мин
Охват и читатели703

По сей день Unity остаётся популярен у тысяч разработчиков. На этом движке созданы многие популярные игры, такие как V Rising, Beat Saber, Hearthstone, Genshin Impact и прочие. Насколько полезен был бы анализатор PVS-Studio разработчикам таких проектов? Какие ошибки и возможности для оптимизации кода он мог бы помочь найти? Давайте узнаем!

Читать далее

Педагогика на роботах: может ли помочь RPA в обучении программированию?

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели819

Привет! Я Кирилл Пронин, разработчик PIX RPA из PIX Robotics. А еще я семь лет преподавал основы программирования детям в частных технопарках в рамках дополнительного профессионального образования, а также студентам колледжей и вузов. Чтобы завлечь детей (и упростить работу себе — но об этом чуть позже) я стал внедрять программных роботов в процесс обучения. И понял, что RPA — отличная платформа для старта в разработке. Любой. Но обо всем по порядку. Здесь я расскажу, как продукт по написанию программных роботов может сделать обучение более эффективным и увлекательным, а также проанализируем, какие педагогические методы могут быть адаптированы для работы с RPA. Кроме того, я расскажу о собственном опыте внедрения этих технологий в образовательный процесс и дам несколько полезных советов, которые, надеюсь, помогут вам в вашей практике!

Читать далее

.NET Digest #6

Время на прочтение5 мин
Охват и читатели3K

Добро пожаловать на шестой выпуск нашего дайджеста, посвящённого новостям и событиям в мире .NET! В этот раз набралось множество нового материала, так ещё и вышла предварительная версия .NET 10. Команда PVS-Studio рада представить вам подборку самых интересных и полезных материалов. Поехали!

Читать далее

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

Переезд с TeamCity на GitLab CI + K8s

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели1.9K

Привет, Хабр! Меня зовут Даниил Мильков, я старший C# разработчик. Сразу хочу предупредить читателей, что про взаимодействие с k8s здесь сказано достаточно мало, разве что в разделе Kubernetes и PVC. На эту тему будет отдельная статья.

Начнём. Однажды наша команда решила перейти с TeamCity на GitLab CI…

Читать далее

Разработка конструктора для конфигурирования производственных этикеток в системе второго уровня TWS ТПЦ

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели833

В статье представлен опыт создания специализированного редактора этикеток для технологического персонала Трубопрокатного цеха (ТПЦ), направленного на устранение ограничений стандартного решения Danieli. Ранее процесс создания шаблонов для различных ГОСТов требовал ручного проектирования уникальных макетов, что снижало гибкость и увеличивало трудозатраты. Разработанный конфигуратор позволяет динамически формировать этикетки на основе универсального ZPL-шаблона, интегрирует параметры ГОСТ, а также обеспечивает централизованное хранение и доступ к шаблонам через систему TWS. Реализация включает визуальный интерфейс для операторов, логику динамической подстановки данных (вес, длина, сорт и др.) и поддержку нормативных стандартов.

Читать далее

Moq: пара фич для упрощения тестов, о которых знают не все

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

Пишете unit-тесты в .NET? Значит, скорее всего, пользуетесь Moq. На первый взгляд, это простой и легковесный фреймворк, про который все всё знают.

Но знаете ли вы, как сделать ваши тесты проще? В этой статье я расскажу о нескольких фичах Moq, которые помогут сделать ваши тесты чище, лаконичнее и удобнее для сопровождения. Погнали!

Читать далее

Copy-paste на большом экране: разбор ошибок и странных мест Radarr

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

Писать одно и то же — невероятно муторное занятие! Поэтому программисты регулярно используют copy-paste, но, помимо экономии времени, также растет и количество ошибок. Чтобы в этом убедиться, мы разберём ошибки и странные места проекта Radarr.

Читать далее

Как превратить сырые данные в аналитический отчет

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

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

Читать далее

Реверсивный Proxy в C#

Время на прочтение7 мин
Охват и читатели3K

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

Сегодня расскажу о паттерне «Реверсивный Proxy» на примере онлайн‑магазина кормов для котиков. Суть паттерна проста: вместо обычного прокси, который просто передаёт вызовы, мы можем динамически менять логику выполнения методов. Под катом — теория, примеры и объяснение кода.

Читать далее

XR-технологии на практике: создаем иммерсивное приложение в Unity

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

Будущее за иммерсивными технологиями? Уже сейчас они стремительно развиваются и находят применение в различных сферах жизни — здравоохранении, образовании, развлечениях и бизнесе. Расширенная реальность, XR (Extended Reality) открывает новые горизонты взаимодействия человека с окружающим миром, объединяя виртуальную (VR), дополненную (AR) и смешанную реальность (MR). 

Привет, Хабр! Меня зовут Андрей, я С#-разработчик в компании SimbirSoft. В этой статье хочу поделиться практикой создания простых приложений в Unity, где реализуются XR-технологии. Для наглядности и более детального понимания особенностей разработки рассмотрим их применение в промышленной сфере на примере станка TV16. По нашему замыслу (с командой) с помощью XR-технологий можно демонстрировать его потенциальным клиентам, а также обучать новых сотрудников.

Читать далее 🦾

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