Обновить
70.09

.NET *

Хаб со знаниями про .NET

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

Визуализация задачи Дирихле для уравнения Лапласа/Пуассона в прямоугольнике

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

Программа визуализирует решение и промежуточные результаты задачи Дирихле для уравнения Лапласа/Пуассона в прямоугольнике на CPU и GPU.

Уравнение Пуассона(при f=0 уравнение Лапласа) :

\frac{\partial ^{2}}{\partial x}u + \frac{\partial ^{2}}{\partial y}u = -f

Задача Дирихле(краевые условия 1-го рода) - заданы значения u на границе области(в данном случае в прямоугольнике).

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

Читать далее

Новости

Написал ИИ-оверлей для прохождения собеседований

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

Написал ИИ-оверлей для прохождения собеседований

Я — .NET-разработчик, и уже некоторое время прохожу собеседования. Иногда на них задают вопросы про такие «пыльные уголки» .NET, что если я и читал про них, то лишь в самом начале своего пути, листая книги Рихтера, Троелсена и Шилдта.

А ещё встречаются откровенно странные задачи, далёкие от реальной работы.

Зачем всё это? Очевидно, чтобы отсечь новичков из онлайн-курсов и тех, кто «вкатился» в IT без должной подготовки.

Ну а раз на собеседовании всё изначально настроено так сказать «враждебно», и интервьюер подозревает, что каждый мухлюет… почему бы действительно не начать мухлевать?

Читать далее

Merge для IAsyncEnumerable<T>

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

В рамках одного из обсуждении с чатах я предложил использовать функцию Merge для  IAsyncEnumerable<T>, чтобы объединить результаты чтения однотипных данных из разных источников. Но когда попытался сделать пример оказалось что такой функции в System.Linq.Async нет. Есть аналог в Reactive Extensions, но тащить библиотеку для одного примера не захотел и решил написать сам.

Читать далее

Unity, Roslyn и code analysis. Прикладная задача визуализации графа состояний

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

В команде, большая часть серверных фич пишется с помощью стейт машин.
Стейт машина позволяет выразить окружающее состояние и то как с объектом можно взаимодействовать предельно конкретно. Хорошо составленный стейт граф позволяют понять как работает фича без глубокого погружения в код. При прохождении code review большое внимание уделяется составленному графу состояний. Часто возникает потребность в чтение или модификации уже существующего кода. Отсюда возникает потребность в ускорении процесса восстановления контекста или понимании как работает код.

На помощь приходит статический анализ кода.

Привет! Меня зовут Игорь, я занимаюсь разработкой на Unity c 2018 года.
В этой статье расскажу, как с помощью Roslyn можно автоматизировать задачи.

Читать далее

Наш опыт формирования шаблона фоновых сервисов на базе .NET

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

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

Читать далее

Вероятности и .NET: сравниваем библиотечные решения для оценки спортивных событий и не только

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

Как вычисляется шанс того, что теннисист возьмёт следующий гейм? Или что футбольная команда забьёт гол в течение пяти минут? Всё это — не просто угадайка, а работа математической модели, построенной на статистике и обрабатывающей события матча в реальном времени.

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

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

Читать далее

Почему 6 лет коммерческого опыта в .NET больше не гарантируют работу

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

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

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

Читать далее

Композиция в архитектуре тестов на примере Playwright + C#

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

Привет! Я Миша Симонов. Работаю в Контуре ведущим специалистом по тестированию и являюсь техлидом по автоматизации тестирования кластера из 18 команд.

Когда говорят про архитектуру UI-тестов на Selenium или Playwright, то ограничиваются объяснением паттерна Page Object Model. Но достаточно ли только знания POM в современном мире программирования?

В этой статье я постараюсь мягко провести вас от классического Page Object Model к архитектуре, основанной на композиции и Dependency Injection. Я убеждён, что написание тестов — это такое же программирование, как и разработка фич. Здесь нужны те же современные практики: DI, чистая архитектура, композиция, SOLID — всё, что делает код гибким и живучим.

Потому предлагаю рассмотреть значимые части архитектуры тестов и разобраться в том, что за зверь такой — композиция — и как его приготовить. А готовить мы будем на NUnit, Playwright на C# и Microsoft.DependencyInjection. 👨‍🍳

Читать далее

System.Threading.Channels: адекватные lock-free очереди для producer/consumer

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

BlockingCollection<T> долгое время был стандартом для producer/consumer в .NET. Он работает, но построен на блокирующих примитивах — когда очередь пуста, читающий поток висит на Monitor.Wait(). В мире async/await это антипаттерн: заблокированный поток — потраченный ресурс.

System.Threading.Channels грамотно решил эту проблему. Lock-free структуры данных, async API, контроль backpressure, интеграция с пайплайнами обработки данных. Это не замена BlockingCollection — это просто другой уровень.

Разберём, как Channels устроены, когда их использовать, и какие паттерны они открывают.

Читать далее

GreatEasyCert или как реализовать контейнер ключа по ГОСТу

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

Привет, Хабр! Меня зовут Гоша, я старший инженер-программист в Контуре. Практически любой сценарий ЭДО связан с использованием криптографии, будь то ЭДО с государством или контрагентами: где-то нужно подписать документы, где-то зашифровать архив с отчётом, где-то проверить подпись документа от контрагента. Каждый из таких сценариев хочется тестировать не на реальных данных, но на наиболее похожих в реальности. Помимо самих данных нам нужны сертификаты, имитирующие сертификаты участников ЭДО: организаций, физлиц, государственных органов. Ранее для генерации тестовых сертификатов мы использовали сервис на базе ПАК УЦ, проприетарной штуки, выпускающей сертификаты по определённым правилам, не позволяя издеваться над сроками действия серта как хочется.

Отсюда появилась идея в качестве эксперимента написать небольшой сервис, который мог бы генерировать какие угодно сертификаты с ГОСТ-алгоритмами, но при этом успешно работающие с КриптоПро. В этой статье хочу поделиться, какая техника скрывается под капотом такой функциональности.

Читать далее

Теневое логирование через события — полное разъединение бизнес-логики и логирования в DI среде

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

Привет, коллеги!

Хочу поделиться подходом к логированию, который радикально упрощает архитектуру и усиливает SOLID.

Сделал пример кода GitHub, чтобы показать как работает теневое логирование (shadow decoupled logging) через события C#.

Читать далее

Оптимизация рендера 2D-персонажей в MonoGame: Прагматичный подход слоёв и инстансинга

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

Теги: #monogame #gamedev #оптимизация #csharp #графика #индиразработка

Введение: Проблема падающих FPS и желание красоты

Каждый разработчик 2D-игр, мечтающий о живом, населённом мире, рано или поздно упирается в суровую реальность: рендеринг множества уникальных анимированных персонажей — это дорого. Хочется дать игроку кастомизацию, смену снаряжения, разнообразие врагов, но классический подход «нарисовать каждый спрайт отдельно» ведёт к сотням draw calls и падению производительности.

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

Часть 1: Анализ проблемы — почему «в лоб» не работает

Допустим, у персонажа 10 слоёв: тело, голова, ноги, броня, шлем, оружие в каждой руке и т.д. Если рендерить каждый слой отдельным вызовом SpriteBatch.Draw(), для 50 NPC мы получим 50 × 10 = 500 draw calls. При целевом значении в 60 FPS у нас есть всего ~16.6 мс на кадр. Если один draw call занимает ~0.1 мс, только на отрисовку персонажей уйдёт 50 мс — это в три раза больше бюджета!

Ключевой инсайт: Не всем персонажам нужна одинаковая детализация. Фоновому горожанину или стае врагов не требуется динамическая смена снаряжения. А главному герою — требуется.

Часть 2: Гибридная архитектура — 3 уровня детализации

Читать далее

Библиотека EMX Controls для Avalonia UI — Версия 1.3 — Январь 2026

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

Вчера мы выпустили крупное обновление библиотеки EMX Controls для Avalonia UI. О новых возможностях библиотеки, а также о нашей новой программе поддержки open-source проектов мы расскажем в этой статье.

Читать далее

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

Pattern matching в .NET

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

Привет, Хабр! Меня зовут Митя, я инженер-программист в Контуре. Во время написания кода анализаторы иногда предлагают заменить привычные конструкции на pattern matching. Однако то, что призвано повысить читаемость, нередко делает код более трудным для восприятия, особенно, если не понимать, во что именно разворачиваются те или иные конструкции. И в один из дней я задался вопросом: а есть ли какие-нибудь подводные камни при использовании pattern matching и во что именно его преобразует компилятор? В этой статье — мои мысли и заметки.

Читать далее

NuGet пакеты, которые ты не ожидал

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

Меня зовут Степан, я C# профессионал уже более 7 лет на рынке и рассказываю об этом в Telegram каналe StepOne. В этой статье я покажу вам личную подборку 9ти underground NuGet пакетов. Вы наверняка не встречали их на работе, потому что они либо решают конкретную специальную задачу, либо решают известные задачи нестандартным подходом, либо ещё недостаточно известны на рынке РФ. Мне же удалось затащить их на прод и пощупать в бою!

dotnet nuget add package "StepOne"

Запускаем бенчмарки всего с одним C# файлом

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

Если вы когда-нибудь задумывались, можно ли запустить бенчмарк, используя всего один C#-файл, то ответ: да, можно. Начиная с .NET 10, существует возможность создавать C#-приложения в одном *.cs‑файле. Проблема в том, что BenchmarkDotNet (BDN) не поддерживает такие бенчмарки с настройками по умолчанию. В этой статье я покажу, как обойти это ограничение, используя режим in-process.

Читать далее

Эволюция .NET-разработчика: взгляд рынка на грейды и компетенции (анализ 700+ вакансий)

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

Все мы знаем стандартную лестницу: Junior, Middle, Senior. Но где на самом деле проходит граница? Почему в одном стартапе «сеньор» — это тот, кто вчера узнал про LINQ, а в кровавом энтерпрайзе от «мидла» требуют проектировать распределенные системы под нагрузкой в миллион RPS?

Я задалась вопросом оценки собственного грейда, когда уходила со своего первого места работы. Кто я для рынка? Почему мои знания на собесе в одной компании соответствуют чуть ли не уровню Senior, а в другой – покрывают максимум вакансию Junior’a?

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

Я решила отойти от субъективности и спросить у самого рынка. В этой статье — результаты анализа 700+ актуальных вакансий .Net разработчика, графы связности навыков и ответ на вопрос: в какой момент количество выученных библиотек наконец-то превращается в качество инженера.

Читать далее

AI+RAG в системе отчетности

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

Разрабатывая новую систему отчетности, возник вопрос – а не добавить ли нам AI как-нибудь куда-нибудь? Не, ну а что – это модно, стильно, да и вообще - ни один нормальный новый проект не может вынести отсутствия AI. Задача не выглядела сильно сложной. Прокинуть вопрос пользователя из интерфейса на бэк – стандартная задача, Ollama устанавливается парой кликов, скачать и запустить модель – это 2 команды, а то и одна, если хорошо постараться. Доступ к модели возможен по web api из бэка на C#, документация по Ollama есть… Что тут может пойти не так, верно?

Читать далее

DateTimeRange .NET

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

В .NET есть обширный набор типов для работы с временем. Но нет решения для работы с интервалами времени. Я такое решение сделал и хочу о нем рассказать.

Читать далее

Развёртывание .NET Aspire в AWS

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

Aspire отлично закрывает локальный цикл разработки, но как только дело доходит до AWS, начинается вечная развилка: «или пишем отдельный IaC и живём с двойной правдой», или «деплоим руками и платим временем и деньгами». В этой статье показан рабочий компромисс: один Aspire Host, который в локальном режиме поднимает LocalStack и контейнеры, а в publish-режиме передаёт управление AWS CDK и разворачивает полноценный serverless-стек (VPC, Aurora, DynamoDB, Lambda, API Gateway) — оставаясь в C# и без зоопарка YAML-файлов.

Открыть разбор
1
23 ...