Обновить
128K+

.NET *

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

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

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

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

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

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

Читать далее

Новости

Unity Builder — как мы победили боль с ручными сборками и написали своё приложение

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

Как мы автоматизировали сборку Unity-проектов под несколько платформ: прошли через Jenkins, GitHub Actions с game-ci и сорокаминутные билды — и в итоге написали собственный инструмент.

В статье:

Почему Jenkins и GitHub Actions не подошли

Что такое Unity Builder и какую боль закрывает

Визуальный пайплайн, параллельные задачи, FTP-интеграция

Читать далее

5. Проектирование с помощью типов: Делаем состояние явным

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

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

Попробуем?

Читать далее

Мал, да удал: почему пять строк рефакторинга могут сказать о разработчике больше, чем весь его GitHub

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

Привет, Хабр! Жизнь не стоит на месте, как и мое исследование, так что пришла пора пересмотреть то, как я оцениваю код.

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

Читать далее

Магия dotnet test. Как запускаются ваши тесты в .NET?

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

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

Привет! Меня зовут Дима Афонченко, я — техлид в Dodo Engineering. Сегодня расскажу, как устроена работа тестовых фреймворков в .NET и причём тут, собственно, магия. Будет интересно, поехали!

Читать далее

Interceptors и SourceGenerators: отказываемся от IL-инъекций

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

Привет! Я Дмитрий Сипаков, ведущий разработчик в Госсервисах Т-Банка. Расскажу про относительно новую фичу .NET — Interceptors: как они работают вместе со Source Generators и как с их помощью можно избавиться от бойлерплейта без IL-инъекций и сторонней магии.

Читать далее

WebAssembly: обзор технологии, эксперименты с числами и мечты о браузере без JS

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

WebAssembly находится в разработке уже более 8 лет. Технология прошла долгий путь развития и недавно разработчики из Bytecode Alliance выкатили версию 3.0.

О WebAssembly уже много материалов, но сегодня нам важна сама суть. У нас есть возможность, воспользовавшись любым из доступных языков программирования, написать модуль с необходимой нам логикой и запустить в исполняемой среде браузера. Разработчики обещают: модули будут быстрее и безопаснее, чем JavaScript, а также созданные ранее технологии, наподобие asm.js.

На связи Борис Мещеряков, frontend-разработчик в ПСБ и чаще всего мне приходится работать с javascript-фреймворками - React, Angular и прочими. Узнав о WebAssembly, я какое-то время наблюдал за его развитием. Мне стало интересно, может ли новая технология помочь мне уже сейчас? Какие ее возможности существуют на данный момент и какие реальны в будущем?

Разберёмся вместе?

Читать далее

4. Проектирование с помощью типов: Исследуем новые концепции

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

Четвёртый пост из серии Скотта Влащина посвящена предметной области. Как с помощью типов описывать бизнес-правила? Как типы позволяют углубить понимание предметной области?

Узнаем прямо сейчас.

Читать далее

Как использовать Rust внутри приложений на .NET MAUI

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

Когда производительность начинает иметь значение

По производительности Rust находится в той же лиге, что и C++, но с заметно более дружелюбной моделью безопасности. Возможно, вы уже слышали о командах, которые постепенно переходят на Rust, заменяя существующий код. А если вам уже приходилось бороться с лагами от GC или пытаться сделать плавную анимацию, отсутствие сборщика мусора начинает выглядеть особенно заманчиво.

Но можно ли сделать так, чтобы использовать Rust внутри приложения .NET для Android, iOS, MacCatalyst и Windows было действительно удобно?

Читать далее

CraftHub — или как я устал редактировать JSON вручную и написал редактор

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

Всё началось с моего друга. Он занимался разработкой игр на Unity, и в какой-то момент подкинул мне идею — точнее, жалобу, которая быстро переросла в идею.

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

Читать далее

Распознавание лиц с потока камеры в .NET MAUI

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

Сегодняшние приложения для мобильных и настольных устройств умеют распознавать на изображениях почти что угодно, - от QR-кодов до количества калорий в еде на на фото. На платформах, которые поддерживает .NET MAUI, для этого можно использовать разные варианты, как локальные ML-движки вроде TensorFlow Lite, нативные SDK для конкретной платформы, типа ARKit на iOS, так и разные Vision API. Далее все зависит уже от реализации в приложении.

И вот, когда речь идет пойдет о распознавании изображений от камеры, наш вариант - пакет DrawnUi.Maui.Camera. В предыдущей статье я показывал, как использовать SkiaCamera для анализа аудио с AI в реальном времени, а сегодня займемся видео: разберем на примере распознавания лиц.

Читать далее

Как мы строили MVP data lineage системы в ЮMoney

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

Привет, меня зовут Юля, я дата-инженер в департаменте аналитических решений ЮMoney. Мы разрабатываем и поддерживаем ETL(ELT)-процессы загрузки данных для BI-продуктов компании: отчётов, дашбордов, витрин, API и других.

В этой статье поделюсь, как мы разрабатывали MVP для построения data lineage системы и к каким выводам пришли, — так вы сможете адаптировать подход под свои процессы.

Проблема, которая привела нас к разработке MVP, заключается в том, что в начале работы над большинством задач требуется подготовительная аналитика: восстановить путь происхождения данных, чтобы понимать, какие ETL(ELT)-процессы будут затронуты и на что повлияют изменения. Это увеличивает время выполнения задачи. Но, что ещё существеннее, процесс достаточно рутинный: каждый раз необходимо проводить статический анализ кода и изучать документацию (при её наличии). Мы решили автоматизировать эту работу, чтобы иметь под рукой инструмент для построения пути данных по точкам их обработки и применения, — то есть создать data lineage систему.

Читать далее

3. Проектирование с помощью типов: Делаем недопустимые состояния непредставимыми

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

Новая глава из цикла Скотта Влащина. Обсуждаем, как сделать код надёжным с помощью развитых типов из F#.

Читать далее

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

Шестидесятилетний заключённый и лабораторная крыса. F# на Godot. Часть 14. RenderingServer на полную

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

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

<Картинка не влезла в превью.>

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

За остаток цикла мы должны выяснить, как можно строить среднеразмерные игровые сцены на F#, а также почему этот цикл называется так, как называется. Конкретно в этой главе мы разберёмся с RenderingServer-ом (бывший VisualServer), но не с нуля, а с позиций достигнутых в »Godot — рисование без правил» и »Прямоугольные тайловые миры». Если вы уже прочитали эти статьи, то вам должно быть известно, что рисование через RenderingServer — это довольно экзотический подход, который воспринимает хождение сквозь стены как рядовое событие. Авторы движка этому не препятствуют, но и не содействуют, поэтому документации по этому серверу — кот наплакал. Мне так и не удалось выудить ответы на все интересующие меня вопросы в словесной форме и их пришлось выковыривать при помощи живых экспериментов. Последние ни в статью, ни в проект не влезли, но тут важна сама парадигма, при которой мы всегда отталкиваемся от практики, а не от теории, которой пока просто нет.

Читать далее

От слов к числам: как математически отличить Middle от Senior

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

Привет, Хабр! В своей первой статье про анализ вакансий C#/.Net разработчиков на рынке я выделила очень интересное замечание, которое определило тему сегодняшней статьи – «не количество навыков делает из мидла синьора, а образ его мышления». Построить граф связности компетенций для синьора это конечно хорошо, но к сожалению, на практике применить его достаточно сложно.

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

Читать далее

2. Проектирование с помощью типов: одновариантные типы-объединения

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

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

Читать далее

Шифруем ID сетью Фейстеля: защита API без правок в базе

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

Куча API до сих пор светит в URL инкрементные ID — один curl в цикле, и у атакующего вся таблица. Ровно на этом в апреле 2025 погорела APCOA. Разбираю дешёвую вторую линию обороны: шифруем ID сетью Фейстеля. Сорок строк, ни миграций, ни новых зависимостей.

Читать далее

Labeled break and continue в C# 15 — разбор плохого примера и поиск реального кейса

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

Всем привет. В последнее время в одной профессиональной соцсети я все чаще стал натыкаться на посты, связанные с dotnet C# тематикой. К сожалению, эти посты в большинстве своем не содержат полезной информации. Скорее всего они создаются для охвата аудитории с целью привлечения трафика на сторонние платформы по продаже курсов для разработчиков. По-моему, этот способ называется "воронка продаж" (поправьте, если я ошибаюсь). Как правило, эти посты затрагивают какую-то не очень сложную тему и содержат примеры кода. Недавно мне попался очередной пост, в котором автор пытался показать пример использования новой фичи labeled break and continue. Это новая фича, которую добавили в C# 15 (dotnet 11). На момент написания она была принята в Working Set, но финального релиза ещё не было. Ниже код, похожий на оригинал из поста. Он разделен на 2 секции: "как делали раньше" и "как сделать используя новый подход":

Стандартный способ:

Читать разбор

Выделение регистров процессора при помощи генетического алгоритма

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

Эксперимент, который многое объясняет

Оригинал этого поста также вошёл в число документов по проектированию платформы .NET: lsra-heuristic-tuning.

Читать далее

Как мы добавили ИИ-ассистента в рабочий чат и что из этого вышло

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

У нас небольшая IT-компания - SaaS-продукт, 5 разработчиков, 4 менеджера, CEO. Обычный стек: PHP + Vue, MySQL, GitHub, Telegram для коммуникации. Ничего революционного.

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