Обновить
128K+

C# *

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

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

MonoGame — игровой движок для тех, кто любит изобретать велосипеды

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

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

Основные кандидаты у всех на слуху: Unity, Unreal Engine и Godot.

Но кроме них существует ещё немало движков второго эшелона, про которые мало кто знает.

Собственно, про один из них - под названием MonoGame - я и хочу рассказать.

Читать далее

Новости

Как я сделал утилиту для автоматизации ручных тестов

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

Привет, меня зовут Алексей и я C# разработчик. Однажды передо мной стояла задача написать утилиту для взаимодействия с различными UI-элементами в Windows и во всех популярных браузерах. Сама утилита не была связана с тестированием, но вполне годилась для автоматизации некоторых действий на машине, так как была простой в управлении и интуитивно понятной. Мне понравилось работать в этом направлении и возникла идея создания инструмента, который не будет перегружен широким функционалом RPA решений, но возьмёт от них всё что нужно для тестирования интерфейсов, чтобы получился действительно полезный инструмент-помощник для QA с низким порогом входа.

Читать далее

Как автоматизировать повторную обработку сообщений из архива в DATAREON Platform

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

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

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

В статье покажу, как реализовать механизм повторной отправки сообщений из архива в обработку с использованием DATAREON Platform.

Читать далее

Arguments to Config — простая и мощная библиотека для парсинга аргументов в CLI-приложении на C#

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

В одной из прошлых статей я писал о том, как рефакторил CLI-сервис на C#, в котором не был реализован маппинг аргументов в класс конфигураций. Пришлось писать свой.

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

Читать далее

Книга: «Head First. Изучаем C# и .NET. 5-е изд.»

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

Привет, Хаброжители! Революционный гид по программированию на C# поможет превратить занудную учебу в захватывающее приключение.

Вы научитесь использовать классы и объектно-ориентированное программирование, создавать 3D-игры в Unity, работать с данными через LINQ-запросы. И все это — решая головоломки, выполняя практические упражнения, создавая реальные приложения.

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

Читать далее

Фреймворк GameFramework.Pro (.Net)

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

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

Читать далее

Async/Await в C# это синтаксический сахар для конечного автомата

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

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

Читать далее

Как я автоматизировал UI в Windows: UIAutomation и Win32

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

Привет, меня зовут Алексей, я C# разработчик. Я разрабатывал библиотеку для автоматизации взаимодействия с различными UI‑элементами и их захвата. Одной из поддерживаемых сред в такой библиотеке обязательно должна быть Windows и в ней так же требуется: находить кнопки, поля, окна, списки, нажимать на них, читать значения, вводить текст и в целом обращаться с интерфейсом не как пользователь с мышкой, а как программа.

На первый взгляд задача звучит просто: нашли элемент, кликнули, пошли дальше. Но в реальных приложениях у элемента может не быть (считай не будет) нормального AutomationId, у нескольких окон может быть один и тот же заголовок, дерево интерфейса может прогружаться не сразу, а старое desktop‑приложение вообще не предназначено для взаимодействия с современными API для автоматизации.

В итоге в моей библиотеке появилось два основных Windows‑подхода:

Читать далее

Голос в текст, текст в перевод: строим десктопное приложение для распознавания речи с Azure Speech SDK и NAudio

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

Голос в текст, текст в перевод: строим десктопное приложение для распознавания речи с Azure Speech SDK и NAudio

Читать далее

Подводные камни gRPC

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

gRPC кажется простым только до первого реального проекта. В этой статье - практические решения для типичных подводных камней: nullable, decimal, DateTime, наследование, дженерики и enum. Всё на основе реального опыта переноса сотни моделей с REST и WCF на gRPC. Обновлено под protoc v34.1 и dotnet 10.

Читать далее

Архитектура MassTransit: как устроена библиотека под капотом

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

Мне давно было интересно, как устроена библиотека MassTransit изнутри. Хотелось разобраться в её архитектуре, понять, как она развивалась, и почему порой в ней бывает непросто ориентироваться.

Если вам тоже интересно, что скрывается за consumers, publishers и sagas - приглашаю к чтению.

Читать далее

Генерация типов в Runtime

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

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

В этой статье расмотрим как создавать типы используя Reflection.Emit и реализовывать методы через Expression Trees

Читать далее

Почему if/else убивает ИИ врагов в Unity и как от этого уйти

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

ИИ врагов в Unity часто начинается с пары аккуратных if/else, а заканчивается кодом, где новое поведение ломает старое, приоритеты конфликтуют, а отладка превращается в раскопки.

В статье разберём, почему такая логика быстро перестаёт масштабироваться, где FSM тоже начинает буксовать, и как Behaviour Tree помогает собрать поведение врага из понятных, переиспользуемых узлов — на C#-примерах с Selector, Sequence, Decorator, Blackboard и типичными ошибками, которые всплывают уже в реальном проекте на Unity.

Разобрать подход

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

Свой маленький GIS: приложение для мультиспектральных и гиперспектральных снимков

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

Привет, Хабр. Меня зовут Алексей, я C#-разработчик. В этой статье хочу рассказать о своём дипломном проекте очень запавшем мне в душу, который я делал на тему обработки изображений, GIS и дистанционного зондирования Земли. Даже спустя годы мне интересна данная тема и она по-прежнему остаётся очень перспективной в различных отраслях.

Идея была в том, чтобы собрать небольшое настольное приложение, которое умеет работать с реальными спутниковыми данными: Landsat 8, Sentinel-2 и AVIRIS. То есть открывать не готовую RGB-картинку, а набор спектральных каналов, собирать из них естественные и псевдоцветные изображения, считать растровые индексы, выделять эталоны прямо на снимке, классифицировать пиксели, сегментировать изображение и пробовать более исследовательские вещи вроде EMD-разложения.

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

Читать далее

Вы неправильно используете IDisposable: почему using не спасает, когда объект утекает в другой поток

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

using в C# выглядит как универсальная страховка от утечек ресурсов, пока объект живёт строго внутри одного метода. Но стоит вернуть его наружу, передать в фоновую задачу, положить в коллекцию или доверить DI‑контейнеру — и привычное правило начинает работать против вас.

В статье разберём типичные сценарии, где IDisposable превращается в источник нестабильных багов: закрытые раньше времени соединения, гонки с Task.Run, утечки обработчиков и тот самый HttpClient, который лучше не создавать на каждый запрос.

Читать далее

Статический архетип в ECS: локальность данных без неявных перемещений компонент

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

У архетипов в ECS есть неотъемлимое преимущество перед обычными sparse set'ами - локальность данных. Но есть и существенная проблема - хаотическое копирование данных при миграции из одного архетипа в другой. Что если попробовать избавиться от этого недостатка, оставив локальность данных? Предлагаю рассмотреть статический архетип, который требует явного вызова метода для миграции данных.

Читать далее

Как я в 17 лет кратно увеличил производительность компании крупного застройщика Чебоксар

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

Мой знакомый работал в компании, которая занимается проектированием (эта организация принадлежит крупнейшему застройщику Чебоксар, но я не называю её по правилам Хабра). Он рассказал, что расчёты удельных мощностей занимают очень много времени и неудобны. А таких расчётов в компании — десятки в день.

Проблема была в следующем: сотрудник вводит одну величину, а по ней ищет другие в таблицах. Пока человек найдёт нужное значение в таблице, внесёт его в ячейку Excel — и так ещё 4 раза на один расчёт — проходит реально много времени. А если он ошибётся (что вполне вероятно при рутине)? Расчёты придётся переделывать.

Читать далее

CraftHub для VS Code: редактируй JSON как таблицу прямо в редакторе

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

Если вы хоть раз ловили себя на том, что ищете нужную строку в 300-строчном JSON — эта статья для вас. CraftHub теперь живёт прямо в VS Code: открыл файл, переключился в таблицу, поправил, переключился обратно

Читать далее

Рассказ о поездке на конференцию инди‑разработчиков «Игровая индустрия 2026» в Минске

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

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

Читать далее

Виртуальная экранная клавиатура, реализация через GDI+

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

Реализация экранной клавиатуры на C# с использованием GDI+.

В статье рассказано, как создать пользовательский отрисованный элемент управления аналогичный встроенной клавиатуре Windows, но с более гибкими настройками.

Читать далее
1
23 ...