<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" >

  <channel>
    <title><![CDATA[Все статьи подряд / .NET / Хабр]]></title>
    <link>https://habr.com/ru/hubs/net/articles/</link>
    <description><![CDATA[.NET – хаб со знаниями про .NET]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Wed, 13 May 2026 16:01:49 GMT</pubDate>
    
    
      <image>
        <link>https://habr.com/ru/</link>
        <url>https://habrastorage.org/webt/ym/el/wk/ymelwk3zy1gawz4nkejl_-ammtc.png</url>
        <title>Хабр</title>
      </image>
    

    
      
        
    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Проектирование с помощью типов]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1033910/</guid>
      <link>https://habr.com/ru/articles/1033910/?utm_campaign=1033910&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/164/165/0ae/1641650aeb090f2776b1ad1d9c10647f.png" /><p>Здесь я (переводчик) собрал ссылки на все части цикла, написанного Скоттом Влащиным. И заодно перевёл предисловие, буквально, три абзаца.</p><p>Если вы захотите поделиться переводом, сбрасывайте ссылку именно на этот пост, потому что в нём есть все остальные ссылки.</p> <a href="https://habr.com/ru/articles/1033910/?utm_campaign=1033910&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 12 May 2026 10:00:43 GMT</pubDate>
      <dc:creator><![CDATA[markshevchenko]]></dc:creator>
      
      <category>f#</category><category>функциональное программирование</category><category>.net</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Голос в текст, текст в перевод: строим десктопное приложение для распознавания речи с Azure Speech SDK и NAudio]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1034136/</guid>
      <link>https://habr.com/ru/articles/1034136/?utm_campaign=1034136&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/d5f/6aa/eb4/d5f6aaeb41245be31186b8743631071e.png" /><p>Голос в текст, текст в перевод: строим десктопное приложение для распознавания речи с Azure Speech SDK и NAudio</p> <a href="https://habr.com/ru/articles/1034136/?utm_campaign=1034136&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 12 May 2026 09:15:36 GMT</pubDate>
      <dc:creator><![CDATA[TheMysteriousStranger90]]></dc:creator>
      
      <category><![CDATA[.net]]></category><category><![CDATA[c#]]></category><category><![CDATA[avaloniaui]]></category><category><![CDATA[azure speech services]]></category><category><![CDATA[naudio]]></category><category><![CDATA[reactiveui]]></category><category><![CDATA[транскрибация]]></category><category><![CDATA[диаризация]]></category><category><![CDATA[распознавание речи]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[BLE для Arduino: пишем команды, а не дескрипторы]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1033638/</guid>
      <link>https://habr.com/ru/articles/1033638/?utm_campaign=1033638&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/97f/d39/dd7/97fd39dd7bbe5e0839c9f6818ed9a317.png" /><p>Разработать Bluetooth LE устройство на Arduino не так уж сложно. А вот на стороне клиента организовать нормальный обмен командами и ответами — тут начинается настоящая боль. Хочется просто отправить команду и сразу получить ответ. Или чтобы устройство само отправляло координаты, пока едет машинка. Без погружения в GATT и без асинхронных танцев с бубном.</p><p>Я подготовил две библиотеки — для <a href="https://github.com/andrey-val-rodin/BleCommands.Arduino" rel="noopener noreferrer nofollow">Arduino</a> и для <a href="https://github.com/andrey-val-rodin/BleCommands" rel="noopener noreferrer nofollow">.NET (MAUI, WPF, WinForms, Console)</a>, которые скрывают все сложности BLE за простым текстовым протоколом.</p> <a href="https://habr.com/ru/articles/1033638/?utm_campaign=1033638&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 12 May 2026 06:12:15 GMT</pubDate>
      <dc:creator><![CDATA[AndreyRodin]]></dc:creator>
      
      <category><![CDATA[Bluetooth LE]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] 8. Проектирование с помощью типов: Заключение]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1033886/</guid>
      <link>https://habr.com/ru/articles/1033886/?utm_campaign=1033886&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/210/4f3/269/2104f3269074bb4509920008d0090dc4.png" /><p>Что ж, завершается цикл статей о проектировании, основанном на типах. Скотт показывает изначальный код (короткий) и сравнивает его с финальным кодом (длинным). И объясняет, почему размер&nbsp;— это хорошо.</p><p>Есть повод для размышлений!</p> <a href="https://habr.com/ru/articles/1033886/?utm_campaign=1033886&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 12 May 2026 06:00:12 GMT</pubDate>
      <dc:creator><![CDATA[markshevchenko]]></dc:creator>
      
      <category>f#</category><category>функциональное программирование</category><category>.net</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Подводные камни gRPC]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1033838/</guid>
      <link>https://habr.com/ru/articles/1033838/?utm_campaign=1033838&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/bac/f86/077/bacf860777a834defe0ca3ccc86a6883.jpeg" /><p>gRPC кажется простым только до первого реального проекта. В этой статье - практические решения для типичных подводных камней: nullable, decimal, DateTime, наследование, дженерики и enum. Всё на основе реального опыта переноса сотни моделей с REST и WCF на gRPC. Обновлено под protoc v34.1 и dotnet 10.</p> <a href="https://habr.com/ru/articles/1033838/?utm_campaign=1033838&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 11 May 2026 16:15:35 GMT</pubDate>
      <dc:creator><![CDATA[poly_sladkiy]]></dc:creator>
      
      <category><![CDATA[Grpc]]></category><category><![CDATA[protobuf]]></category><category><![CDATA[c#]]></category><category><![CDATA[.net]]></category><category><![CDATA[Grpc.Tools]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Архитектура MassTransit: как устроена библиотека под капотом]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1033712/</guid>
      <link>https://habr.com/ru/articles/1033712/?utm_campaign=1033712&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/e2b/a1e/712/e2ba1e712aeb8759f1f3e0fffa6ad57d.png" /><p>Мне давно было интересно, как устроена библиотека MassTransit изнутри. Хотелось разобраться в её архитектуре, понять, как она развивалась, и почему порой в ней бывает непросто ориентироваться.</p><p>Если вам тоже интересно, что скрывается за consumers, publishers и sagas - приглашаю к чтению.</p> <a href="https://habr.com/ru/articles/1033712/?utm_campaign=1033712&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 11 May 2026 10:15:37 GMT</pubDate>
      <dc:creator><![CDATA[fufkasss]]></dc:creator>
      
      <category><![CDATA[MassTransit]]></category><category><![CDATA[Sagas]]></category><category><![CDATA[StateMachine]]></category><category><![CDATA[SagaStateMachine]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[От XML-отчёта до 3D-обрезки в Revit: как я сделал сервис для управления BIM-коллизиями]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1033602/</guid>
      <link>https://habr.com/ru/articles/1033602/?utm_campaign=1033602&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/898/533/2e0/8985332e012b96ed43d173152b6c7365.png" /><p>Navisworks хорошо находит BIM‑коллизии, а&nbsp;Revit&nbsp;— инструмент для&nbsp;исправления. Но&nbsp;между ними часто остаётся хаос: XML и HTML‑отчёты, Excel, переписки, ручной поиск ID и вопросы руководителей в&nbsp;стиле «ну как&nbsp;там с&nbsp;коллизиями?».</p><p>Я расскажу, как&nbsp;из&nbsp;этой боли вырос внутренний web‑сервис Clash Analytics: импорт XML‑отчётов Navisworks, аналитика по&nbsp;проектам, история коллизий, статусы, комментарии, назначение отделам и локальный Revit Bridge, который открывает проблемное место в&nbsp;модели за&nbsp;один клик.</p> <a href="https://habr.com/ru/articles/1033602/?utm_campaign=1033602&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sun, 10 May 2026 19:20:13 GMT</pubDate>
      <dc:creator><![CDATA[Aliklisss]]></dc:creator>
      
      <category><![CDATA[BIM]]></category><category><![CDATA[Revit]]></category><category><![CDATA[Navisworks]]></category><category><![CDATA[Autodesk]]></category><category><![CDATA[коллизии]]></category><category><![CDATA[Revit API]]></category><category><![CDATA[XML]]></category><category><![CDATA[дашборды]]></category><category><![CDATA[автоматизация проектирования]]></category><category><![CDATA[BIM-координация]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Генерация типов в Runtime]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1033564/</guid>
      <link>https://habr.com/ru/articles/1033564/?utm_campaign=1033564&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Иногда в разработке возникают задачи, требующие создания типов в рантайме. Чаще всего это необходимо при написании декларативных сервисов, высокопроизводительных мапперов или систем с динамическим проксированием.</p><p>В этой статье расмотрим как создавать типы используя <code>Reflection.Emit</code> и реализовывать методы через <code>Expression Trees</code></p> <a href="https://habr.com/ru/articles/1033564/?utm_campaign=1033564&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sun, 10 May 2026 15:45:37 GMT</pubDate>
      <dc:creator><![CDATA[Energizet]]></dc:creator>
      
      <category><![CDATA[c#]]></category><category><![CDATA[.net]]></category><category><![CDATA[reflection]]></category><category><![CDATA[reflection.emit]]></category><category><![CDATA[expression trees]]></category><category><![CDATA[метапрограммирование]]></category><category><![CDATA[кодогенерация]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Разработка настольных приложений в 2026 с использованием Avalonia UI и EMXControls]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/eremexru/articles/1033002/</guid>
      <link>https://habr.com/ru/companies/eremexru/articles/1033002/?utm_campaign=1033002&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/451/ecc/712/451ecc712142129e1437fce60dc1639e.png" /><p>В этой статье мы подводим итоги первых двух лет EMXControls на рынке, отвечаем на часто задаваемые вопросы, и приглашаем всех профессиональных NET разработчиков попробовать наш продукт и присоединиться к экосистеме EMXControls.</p> <a href="https://habr.com/ru/articles/1033002/?utm_campaign=1033002&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">далее</a>]]></description>
      
      <pubDate>Fri, 08 May 2026 10:26:20 GMT</pubDate>
      <dc:creator><![CDATA[xtraroman (ЭРЕМЕКС)]]></dc:creator>
      
      <category><![CDATA[eremex]]></category><category><![CDATA[emxcontrols]]></category><category><![CDATA[avalonia]]></category><category><![CDATA[avaloniaui]]></category><category><![CDATA[winforms]]></category><category><![CDATA[wpf]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] 7. Проектирование с помощью типов: Нестроковые типы]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1032342/</guid>
      <link>https://habr.com/ru/articles/1032342/?utm_campaign=1032342&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/1fb/739/11e/1fb73911ec7ac889a6dbe607be9a5e3a.png" /><p>Можно ли использовать размеченные объединения с одним вариантом (SCDU, Single Case Descriminated Unions) не только со строками, но и с другими типами? Можно ли накладывать бизнес-ограничения на такие штука, как количество позиций в заказе или дата рождения?</p><p>Скотт Влащин делится секретами разработки бизнес-логики на языке с алгебраическими типами. Подробности внутри.</p> <a href="https://habr.com/ru/articles/1032342/?utm_campaign=1032342&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 07 May 2026 06:30:50 GMT</pubDate>
      <dc:creator><![CDATA[markshevchenko]]></dc:creator>
      
      <category>f#</category><category>функциональное программирование</category><category>.net</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Вы неправильно используете IDisposable: почему using не спасает, когда объект утекает в другой поток]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/otus/articles/1028972/</guid>
      <link>https://habr.com/ru/companies/otus/articles/1028972/?utm_campaign=1028972&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/c5e/ee0/ef5/c5eee0ef5301f0f9c20ecce224824047.png" /><p><code>using</code> в&nbsp;C# выглядит как&nbsp;универсальная страховка от&nbsp;утечек ресурсов, пока объект живёт строго внутри одного метода. Но&nbsp;стоит вернуть его наружу, передать в&nbsp;фоновую задачу, положить в&nbsp;коллекцию или&nbsp;доверить DI‑контейнеру&nbsp;— и привычное правило начинает работать против вас. </p><p>В&nbsp;статье разберём типичные сценарии, где <code>IDisposable</code> превращается в&nbsp;источник нестабильных багов: закрытые раньше времени соединения, гонки с <a href="http://Task.Run"><code>Task.Run</code></a>, утечки обработчиков и тот самый <code>HttpClient</code>, который лучше не&nbsp;создавать на&nbsp;каждый запрос.</p> <a href="https://habr.com/ru/articles/1028972/?utm_campaign=1028972&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 05 May 2026 14:50:33 GMT</pubDate>
      <dc:creator><![CDATA[badcasedaily1 (OTUS)]]></dc:creator>
      
      <category><![CDATA[C#]]></category><category><![CDATA[.NET]]></category><category><![CDATA[IDisposable]]></category><category><![CDATA[using]]></category><category><![CDATA[Dispose]]></category><category><![CDATA[IAsyncDisposable]]></category><category><![CDATA[HttpClient]]></category><category><![CDATA[DI-контейнер]]></category><category><![CDATA[управление ресурсами]]></category><category><![CDATA[ObjectDisposedException]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] 6. Проектирование с помощью типов: Типизированные строки]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1031496/</guid>
      <link>https://habr.com/ru/articles/1031496/?utm_campaign=1031496&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/d7b/367/30f/d7b36730fa1446dc73cbd72f7e917470.png" /><p>На всех парах движемся к завершению цикла. В шестой главе Скотт Влащин рассказывает о типизированных строках, которые позволяют хранить значения, удовлетворяющие ограничениям,  например, электронные адреса, почтовые индексы и т. д.</p><p>Разберёмся, как это выглядит в языках с алгебраическими типами.</p> <a href="https://habr.com/ru/articles/1031496/?utm_campaign=1031496&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 05 May 2026 06:41:36 GMT</pubDate>
      <dc:creator><![CDATA[markshevchenko]]></dc:creator>
      
      <category>f#</category><category>функциональное программирование</category><category>.net</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Статический архетип в ECS: локальность данных без неявных перемещений компонент]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1031234/</guid>
      <link>https://habr.com/ru/articles/1031234/?utm_campaign=1031234&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/fc2/b3a/392/fc2b3a392f88651b5d6a9aba202ef231.png" /><p>У архетипов в ECS есть неотъемлимое преимущество перед обычными sparse set'ами - локальность данных. Но есть и существенная проблема - хаотическое копирование данных при миграции из одного архетипа в другой. Что если попробовать избавиться от этого недостатка, оставив локальность данных? Предлагаю рассмотреть статический архетип, который требует явного вызова метода для миграции данных.</p> <a href="https://habr.com/ru/articles/1031234/?utm_campaign=1031234&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 04 May 2026 13:03:30 GMT</pubDate>
      <dc:creator><![CDATA[Tidehunter]]></dc:creator>
      
      <category><![CDATA[ecs]]></category><category><![CDATA[c#]]></category><category><![CDATA[gamedev]]></category><category><![CDATA[open-source]]></category><category><![CDATA[unity]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[CraftHub для VS Code: редактируй JSON как таблицу прямо в редакторе]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1030994/</guid>
      <link>https://habr.com/ru/articles/1030994/?utm_campaign=1030994&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/c99/b72/1ce/c99b721ce44edfd6ab8901d60402fd52.png" /><p>Если вы хоть раз ловили себя на том, что ищете нужную строку в 300-строчном JSON — эта статья для вас. CraftHub теперь живёт прямо в VS Code: открыл файл, переключился в таблицу, поправил, переключился обратно</p> <a href="https://habr.com/ru/articles/1030994/?utm_campaign=1030994&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 04 May 2026 06:33:14 GMT</pubDate>
      <dc:creator><![CDATA[c3n9]]></dc:creator>
      
      <category><![CDATA[json]]></category><category><![CDATA[typescript]]></category><category><![CDATA[vscode extension]]></category><category><![CDATA[vscode]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[MarkMello: быстрый Markdown viewer для тех, кто каждый день живёт в .md]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1030954/</guid>
      <link>https://habr.com/ru/articles/1030954/?utm_campaign=1030954&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/156/d9b/bae/156d9bbae1a40c606e631234264b5883.png" /><p>В последнее время я почти каждый день работаю с Markdown-файлами.</p><p>Документация, спецификации, ADR, планы реализации, инструкции для AI-агентов — всё это удобно держать в .md. Формат простой, читаемый, хорошо ложится в git и нормально работает как для человека, так и для модели.</p><p>Но есть бытовая проблема.</p><p>Чтобы быстро посмотреть Markdown-файл, часто приходится открывать IDE. Разумеется да, любая нормальная IDE умеет показывать .md. Но запускать ради этого полноценную среду разработки — избыточно. Особенно если задача простая: кликнуть по файлу, быстро прочитать, скопировать кусок текста, закрыть.</p><p>Я начал искать лёгкий Markdown viewer и понял, что большинство найденных вариантов меня не устраивают.</p> <a href="https://habr.com/ru/articles/1030954/?utm_campaign=1030954&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 04 May 2026 01:37:03 GMT</pubDate>
      <dc:creator><![CDATA[yermolaev]]></dc:creator>
      
      <category><![CDATA[markdown]]></category><category><![CDATA[markdown viewer]]></category><category><![CDATA[open source]]></category><category><![CDATA[.net]]></category><category><![CDATA[avalonia]]></category><category><![CDATA[native aot]]></category><category><![CDATA[desktop application]]></category><category><![CDATA[developer tools]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Виртуальная экранная клавиатура, реализация через GDI+]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1030360/</guid>
      <link>https://habr.com/ru/articles/1030360/?utm_campaign=1030360&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/e1c/5d4/280/e1c5d4280998078a162f0ed2da9ba8ab.png" /><p>Реализация экранной клавиатуры на C# с использованием GDI+.</p><p>В статье рассказано, как создать пользовательский отрисованный элемент управления аналогичный встроенной клавиатуре Windows, но с более гибкими настройками.</p> <a href="https://habr.com/ru/articles/1030360/?utm_campaign=1030360&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 01 May 2026 06:15:55 GMT</pubDate>
      <dc:creator><![CDATA[Practical_Developer]]></dc:creator>
      
      <category><![CDATA[c#.net]]></category><category><![CDATA[.net development]]></category><category><![CDATA[winforms]]></category><category><![CDATA[windows]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Unity Builder — как мы победили боль с ручными сборками и написали своё приложение]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1029938/</guid>
      <link>https://habr.com/ru/articles/1029938/?utm_campaign=1029938&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/0d1/e65/201/0d1e6520159cd7668aeada74c0168895.png" /><p>Как мы автоматизировали сборку Unity-проектов под несколько платформ: прошли через Jenkins, GitHub Actions с game-ci и сорокаминутные билды — и в итоге написали собственный инструмент.</p><p>В статье:</p><p>Почему Jenkins и GitHub Actions не подошли</p><p>Что такое Unity Builder и какую боль закрывает</p><p>Визуальный пайплайн, параллельные задачи, FTP-интеграция</p> <a href="https://habr.com/ru/articles/1029938/?utm_campaign=1029938&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 30 Apr 2026 11:26:13 GMT</pubDate>
      <dc:creator><![CDATA[c3n9]]></dc:creator>
      
      <category><![CDATA[pipline]]></category><category><![CDATA[avalonia]]></category><category><![CDATA[unity]]></category><category><![CDATA[actions]]></category><category><![CDATA[lifehack]]></category><category><![CDATA[desktop]]></category><category><![CDATA[cicd]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] 5. Проектирование с помощью типов: Делаем состояние явным]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1030016/</guid>
      <link>https://habr.com/ru/articles/1030016/?utm_campaign=1030016&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/f9f/965/6cc/f9f9656cc557d573aa3867cff746f039.png" /><p>Пятый пост Скотта Влащина посвящён конечным автоматам (они же машины состояний или даже стейт-машины). Функциональные языки хорошо подходят для реализации конечных автоматов, а конечные автоматы хорошо подходят для реализации бизнес-логики.</p><p>Попробуем?</p> <a href="https://habr.com/ru/articles/1030016/?utm_campaign=1030016&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 30 Apr 2026 09:16:32 GMT</pubDate>
      <dc:creator><![CDATA[markshevchenko]]></dc:creator>
      
      <category>f#</category><category>функциональное программирование</category><category>.net</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Мал, да удал: почему пять строк рефакторинга могут сказать о разработчике больше, чем весь его GitHub]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1029692/</guid>
      <link>https://habr.com/ru/articles/1029692/?utm_campaign=1029692&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/ce6/266/484/ce626648484543747e7a7746bf03682b.jpg" /><p>Привет, Хабр! Жизнь не стоит на месте, как и мое исследование, так что пришла пора пересмотреть то, как я оцениваю код.</p><p><a href="https://habr.com/ru/articles/995822/" rel="noopener noreferrer nofollow">Изначально</a> я опиралась на анализ целых репозиториев — мы вычисляли семантическую плотность и классические метрики кода. Результаты были многообещающими, но на практике я столкнулась с «шумом», который невозможно игнорировать:  </p> <a href="https://habr.com/ru/articles/1029692/?utm_campaign=1029692&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 29 Apr 2026 13:57:33 GMT</pubDate>
      <dc:creator><![CDATA[Dozorova_Alyona]]></dc:creator>
      
      <category><![CDATA[GrafCodeBert]]></category><category><![CDATA[c#.net]]></category><category><![CDATA[machine-learning]]></category><category><![CDATA[грейды]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Магия dotnet test. Как запускаются ваши тесты в .NET?]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/dododev/articles/1026014/</guid>
      <link>https://habr.com/ru/companies/dododev/articles/1026014/?utm_campaign=1026014&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/13d/16d/778/13d16d77863de655f78d67d5df1fbf15.jpg" /><p>Вы когда-нибудь задумывались о том, как работают тестовые фрймворки в .NET? Ну вот когда вы пишите функцию, кликаете в IDE на треугольник, а потом — бац! — и получаете пару зелёных галочек. Вот как это происходит? Магия? Ну... отчасти да.</p><p>Привет! Меня зовут Дима Афонченко, я — техлид в Dodo Engineering. Сегодня расскажу, как устроена работа тестовых фреймворков в .NET и причём тут, собственно, магия. Будет интересно, поехали!</p> <a href="https://habr.com/ru/articles/1026014/?utm_campaign=1026014&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 28 Apr 2026 13:25:00 GMT</pubDate>
      <dc:creator><![CDATA[Indermove (Dodo Engineering)]]></dc:creator>
      
      <category><![CDATA[.net]]></category><category><![CDATA[nunit]]></category><category><![CDATA[mtp]]></category><category><![CDATA[test]]></category><category><![CDATA[test automation]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Interceptors и SourceGenerators: отказываемся от IL-инъекций]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/tbank/articles/1028724/</guid>
      <link>https://habr.com/ru/companies/tbank/articles/1028724/?utm_campaign=1028724&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/ca7/983/af6/ca7983af690336d3723bff9498030340.jpg" /><p>Привет! Я Дмитрий Сипаков, ведущий разработчик в Госсервисах Т-Банка. Расскажу про относительно новую фичу .NET — Interceptors: как они работают вместе со Source Generators и как с их помощью можно избавиться от бойлерплейта без IL-инъекций и сторонней магии.</p> <a href="https://habr.com/ru/articles/1028724/?utm_campaign=1028724&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 28 Apr 2026 08:20:40 GMT</pubDate>
      <dc:creator><![CDATA[dmitry-sipakov (Т-Банк)]]></dc:creator>
      
      <category><![CDATA[.NET]]></category><category><![CDATA[Interceptors]]></category><category><![CDATA[SourceGenerators]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[WebAssembly: обзор технологии, эксперименты с числами и мечты о браузере без JS]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/psb/articles/1028368/</guid>
      <link>https://habr.com/ru/companies/psb/articles/1028368/?utm_campaign=1028368&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/780/ae1/491/780ae149132076cddca7b87dc302ec1c.png" /><p>WebAssembly находится в разработке уже более 8 лет. Технология прошла долгий путь развития и недавно разработчики из Bytecode Alliance <a href="https://webassembly.org/news/2025-09-17-wasm-3.0/">выкатили версию 3.0</a>.</p><p>О WebAssembly уже много материалов, но сегодня нам важна сама суть. У нас есть возможность, воспользовавшись <a href="https://webassembly.org/getting-started/developers-guide/">любым из доступных</a> языков программирования, написать модуль с необходимой нам логикой и запустить в исполняемой среде браузера. Разработчики обещают: модули будут быстрее и безопаснее, чем JavaScript, а также созданные ранее технологии, наподобие <a href="https://developer.mozilla.org/en-US/docs/Games/Tools/asm.js?source=post_page">asm.js</a>.</p><p>На связи Борис Мещеряков, frontend-разработчик в ПСБ и чаще всего мне приходится работать с javascript-фреймворками - React, Angular и прочими. Узнав о WebAssembly, я какое-то время наблюдал за его развитием. Мне стало интересно, может ли новая технология помочь мне уже сейчас? Какие ее возможности существуют на данный момент и какие реальны в будущем?</p><p>Разберёмся вместе?</p> <a href="https://habr.com/ru/articles/1028368/?utm_campaign=1028368&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 28 Apr 2026 06:40:55 GMT</pubDate>
      <dc:creator><![CDATA[TheMadLord (ПСБ)]]></dc:creator>
      
      <category><![CDATA[webassembly]]></category><category><![CDATA[js]]></category><category><![CDATA[javascript]]></category><category><![CDATA[обзор]]></category><category><![CDATA[обзор технологии]]></category><category><![CDATA[браузеры]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] 4. Проектирование с помощью типов: Исследуем новые концепции]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1028876/</guid>
      <link>https://habr.com/ru/articles/1028876/?utm_campaign=1028876&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/1b6/ebe/456/1b6ebe4567931298354ed99e4b5bd8ff.png" /><p>Четвёртый пост из серии Скотта Влащина посвящена предметной области. Как с помощью типов описывать бизнес-правила? Как типы позволяют углубить понимание предметной области?</p><p>Узнаем прямо сейчас.</p> <a href="https://habr.com/ru/articles/1028876/?utm_campaign=1028876&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 28 Apr 2026 06:12:31 GMT</pubDate>
      <dc:creator><![CDATA[markshevchenko]]></dc:creator>
      
      <category>f#</category><category>функциональное программирование</category><category>.net</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Как использовать Rust внутри приложений на .NET MAUI]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1028322/</guid>
      <link>https://habr.com/ru/articles/1028322/?utm_campaign=1028322&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/198/d01/17c/198d0117c7e384f8e4a47dbe4f70168e.jpg" /><p>Когда производительность начинает иметь значение</p><p>По производительности Rust находится в той же лиге, что и C++, но с заметно более дружелюбной моделью безопасности. Возможно, вы уже слышали о командах, которые постепенно переходят на <strong>Rust</strong>, заменяя существующий код. А если вам уже приходилось бороться с лагами от GC или пытаться сделать плавную анимацию, отсутствие сборщика мусора начинает выглядеть особенно заманчиво.</p><p>Но можно ли сделать так, чтобы использовать <strong>Rust</strong> внутри приложения <strong>.NET</strong> для <strong>Android, iOS, MacCatalyst и Windows</strong> было действительно удобно?</p> <a href="https://habr.com/ru/articles/1028322/?utm_campaign=1028322&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 28 Apr 2026 05:54:52 GMT</pubDate>
      <dc:creator><![CDATA[nickkovalsky]]></dc:creator>
      
      <category><![CDATA[maui]]></category><category><![CDATA[rust]]></category><category><![CDATA[ffi]]></category><category><![CDATA[interop]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[CraftHub — или как я устал редактировать JSON вручную и написал редактор]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1028818/</guid>
      <link>https://habr.com/ru/articles/1028818/?utm_campaign=1028818&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/6d0/620/85d/6d062085d2643d6931a80b7008090ef7.png" /><p>Всё началось с моего друга. Он занимался разработкой игр на Unity, и в какой-то момент подкинул мне идею — точнее, жалобу, которая быстро переросла в идею.</p><p>Огромное количество времени у него уходило не на саму разработку, а на редактирование JSON-файлов. Конфиги предметов, параметры врагов, таблицы балансировки, локализации — всё это JSON. И всё это нужно было либо править руками в текстовом редакторе, рискуя сломать структуру одной лишней запятой, либо писать очередной одноразовый скрипт-конвертер, который через неделю уже никто не помнит где лежит.</p> <a href="https://habr.com/ru/articles/1028818/?utm_campaign=1028818&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 27 Apr 2026 20:27:21 GMT</pubDate>
      <dc:creator><![CDATA[c3n9]]></dc:creator>
      
      <category><![CDATA[json]]></category><category><![CDATA[avalonia]]></category><category><![CDATA[avaloniaui]]></category><category><![CDATA[c#]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Распознавание лиц с потока камеры в .NET MAUI]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1027582/</guid>
      <link>https://habr.com/ru/articles/1027582/?utm_campaign=1027582&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/069/d7e/c28/069d7ec280f8283cde003a17ca577b2a.jpg" /><p>Сегодняшние приложения для мобильных и настольных устройств умеют распознавать на изображениях почти что угодно, - от QR-кодов до количества калорий в еде на на фото. На платформах, которые поддерживает <strong>.NET MAUI</strong>, для этого можно использовать разные варианты, как локальные ML-движки вроде <strong>TensorFlow Lite</strong>, нативные SDK для конкретной платформы, типа <strong>ARKit</strong> на iOS, так и разные Vision API. Далее все зависит уже от реализации в приложении.</p><p>И вот, когда речь идет пойдет о распознавании изображений от камеры, наш вариант - пакет <code>DrawnUi.Maui.Camera</code>. В <a href="https://../VideoRecording/" rel="noopener noreferrer nofollow">предыдущей статье</a> я показывал, как использовать <code>SkiaCamera</code> для анализа аудио с AI в реальном времени, а сегодня займемся видео: разберем на примере <strong>распознавания лиц</strong>.</p> <a href="https://habr.com/ru/articles/1027582/?utm_campaign=1027582&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 24 Apr 2026 13:45:45 GMT</pubDate>
      <dc:creator><![CDATA[nickkovalsky]]></dc:creator>
      
      <category><![CDATA[maui]]></category><category><![CDATA[распознавание лиц]]></category><category><![CDATA[распознавание]]></category><category><![CDATA[mediapipe]]></category><category><![CDATA[drawnui]]></category><category><![CDATA[skiacamera]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как мы строили MVP data lineage системы в ЮMoney]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/yoomoney/articles/1027068/</guid>
      <link>https://habr.com/ru/companies/yoomoney/articles/1027068/?utm_campaign=1027068&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/0d4/09f/0d1/0d409f0d144db870cc379021b4ed5c46.png" /><p>Привет, меня зовут Юля, я дата-инженер в департаменте аналитических решений ЮMoney. Мы разрабатываем и поддерживаем ETL(ELT)-процессы загрузки данных для BI-продуктов компании: отчётов, дашбордов, витрин, API и других.</p><p>В этой статье поделюсь, как мы разрабатывали MVP для построения data lineage системы и к каким выводам пришли, — так вы сможете адаптировать подход под свои процессы.</p><p>Проблема, которая привела нас к разработке MVP, заключается в том, что в начале работы над большинством задач требуется подготовительная аналитика: восстановить путь происхождения данных, чтобы понимать, какие ETL(ELT)-процессы будут затронуты и на что повлияют изменения. Это увеличивает время выполнения задачи. Но, что ещё существеннее, процесс достаточно рутинный: каждый раз необходимо проводить статический анализ кода и изучать документацию (при её наличии). Мы решили автоматизировать эту работу, чтобы иметь под рукой инструмент для построения пути данных по точкам их обработки и применения, — то есть создать data lineage систему.</p> <a href="https://habr.com/ru/articles/1027068/?utm_campaign=1027068&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 23 Apr 2026 12:38:02 GMT</pubDate>
      <dc:creator><![CDATA[jatitaeva (ЮMoney)]]></dc:creator>
      
      <category><![CDATA[data lineage]]></category><category><![CDATA[etl]]></category><category><![CDATA[elt]]></category><category><![CDATA[dwh]]></category><category><![CDATA[neo4j]]></category><category><![CDATA[kafka]]></category><category><![CDATA[cypher]]></category><category><![CDATA[data governance]]></category><category><![CDATA[mvp]]></category><category><![CDATA[метаданные]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] 3. Проектирование с помощью типов: Делаем недопустимые состояния непредставимыми]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1026858/</guid>
      <link>https://habr.com/ru/articles/1026858/?utm_campaign=1026858&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/6f4/bf1/925/6f4bf1925b3b858c599e0ef0cc0d1670.png" /><p>Новая глава из цикла Скотта Влащина. Обсуждаем, как сделать код надёжным с помощью развитых типов из F#.</p> <a href="https://habr.com/ru/articles/1026858/?utm_campaign=1026858&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 23 Apr 2026 06:44:54 GMT</pubDate>
      <dc:creator><![CDATA[markshevchenko]]></dc:creator>
      
      <category>f#</category><category>функциональное программирование</category><category>.net</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Шестидесятилетний заключённый и лабораторная крыса. F# на Godot. Часть 14. RenderingServer на полную]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/first/articles/1026100/</guid>
      <link>https://habr.com/ru/companies/first/articles/1026100/?utm_campaign=1026100&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/9db/562/703/9db562703834a61a63d85416907ce975.png" /><p>В <a href="https://habr.com/ru/companies/first/articles/1001216/">прошлой главе</a> мы собрали базовый проект, который предполагалось использовать в качестве основы во всех следующих статьях. На его базе я собрал песочницу по тайловым мирам:</p><p><code>&lt;Картинка не влезла в превью.&gt;</code></p><p>Разобрав её детально, я планирую размашисто закончить этот цикл статей. Хардкора не будет — только применение уже пройденного материала, приправленное малоизвестными техническими деталями движка.</p><p>За остаток цикла мы должны выяснить, как можно строить среднеразмерные игровые сцены на F#, а также почему этот цикл называется так, как называется. Конкретно в этой главе мы разберёмся с <code>RenderingServer</code>-ом (бывший <code>VisualServer</code>), но не с нуля, а с позиций достигнутых в <a href="https://habr.com/ru/articles/553742/">»Godot — рисование без правил»</a> и <a href="https://habr.com/ru/articles/554960/">»Прямоугольные тайловые миры»</a>. Если вы уже прочитали эти статьи, то вам должно быть известно, что рисование через <code>RenderingServer</code> — это довольно экзотический подход, который воспринимает хождение сквозь стены как рядовое событие. Авторы движка этому не препятствуют, но и не содействуют, поэтому документации по этому серверу — кот наплакал. Мне так и не удалось выудить ответы на все интересующие меня вопросы в словесной форме и их пришлось выковыривать при помощи живых экспериментов. Последние ни в статью, ни в проект не влезли, но тут важна сама парадигма, при которой мы всегда отталкиваемся от практики, а не от теории, которой пока просто нет.</p> <a href="https://habr.com/ru/articles/1026100/?utm_campaign=1026100&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 22 Apr 2026 09:29:03 GMT</pubDate>
      <dc:creator><![CDATA[kleidemos (FirstVDS)]]></dc:creator>
      
      <category><![CDATA[f#]]></category><category><![CDATA[godot]]></category><category><![CDATA[godot engine]]></category><category><![CDATA[.net]]></category><category><![CDATA[rendering]]></category><category><![CDATA[rendering server]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[От слов к числам: как математически отличить Middle от Senior]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1026186/</guid>
      <link>https://habr.com/ru/articles/1026186/?utm_campaign=1026186&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/186/427/426/1864274267eb170c8385c1a2175e8de5.png" /><p>Привет, Хабр! В своей <a href="https://habr.com/ru/articles/986036/" rel="noopener noreferrer nofollow">первой статье </a>про анализ вакансий C#/.Net разработчиков на рынке я выделила очень интересное замечание, которое определило тему сегодняшней статьи – «<em>не количество навыков делает из мидла синьора, а образ его мышления</em>». Построить граф связности компетенций для синьора это конечно хорошо, но к сожалению, на практике применить его достаточно сложно. </p><p>Сделав упор на навыки в своем исследовании, я получила зашумленный датасет, не поддающийся адекватной кластеризации. Так что пришло время попытаться пересмотреть подход к использованию полученных данных и попытаться вычленить из них тот качественный скачок, который отделит мидла от синьора.</p> <a href="https://habr.com/ru/articles/1026186/?utm_campaign=1026186&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 21 Apr 2026 14:54:28 GMT</pubDate>
      <dc:creator><![CDATA[Dozorova_Alyona]]></dc:creator>
      
      <category><![CDATA[c#]]></category><category><![CDATA[грейды]]></category><category><![CDATA[теория]]></category><category><![CDATA[data science]]></category><category><![CDATA[data engineering]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] 2. Проектирование с помощью типов: одновариантные типы-объединения]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1026094/</guid>
      <link>https://habr.com/ru/articles/1026094/?utm_campaign=1026094&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/91b/d90/364/91bd903646fd24d99c450d3e9ccf12b4.png" /><p>Продолжаем перевод цикла статей Скотта Влащина, посвящённого проектированию программ в языках с развитой системой типов. В этой главе поговорим о том, как размеченные объединения помогают писать безопасный код.</p> <a href="https://habr.com/ru/articles/1026094/?utm_campaign=1026094&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 21 Apr 2026 12:09:07 GMT</pubDate>
      <dc:creator><![CDATA[markshevchenko]]></dc:creator>
      
      <category>f#</category><category>функциональное программирование</category><category>.net</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Шифруем ID сетью Фейстеля: защита API без правок в базе]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1025858/</guid>
      <link>https://habr.com/ru/articles/1025858/?utm_campaign=1025858&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/5bf/6a7/a7e/5bf6a7a7ee558c0a0eeed9d8de6c38a2.jpg" /><p>Куча API до сих пор светит в URL инкрементные ID — один curl в цикле, и у атакующего вся таблица. Ровно на этом в апреле 2025 погорела APCOA. Разбираю дешёвую вторую линию обороны: шифруем ID сетью Фейстеля. Сорок строк, ни миграций, ни новых зависимостей.</p> <a href="https://habr.com/ru/articles/1025858/?utm_campaign=1025858&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 21 Apr 2026 05:13:49 GMT</pubDate>
      <dc:creator><![CDATA[livirov]]></dc:creator>
      
      <category><![CDATA[шифрование]]></category><category><![CDATA[сеть фейстеля]]></category><category><![CDATA[web]]></category><category><![CDATA[restapi]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Labeled break and continue в C# 15 — разбор плохого примера и поиск реального кейса]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1025794/</guid>
      <link>https://habr.com/ru/articles/1025794/?utm_campaign=1025794&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/91e/d3f/617/91ed3f617dd270f5234e779d76d28653.png" /><p>Всем привет. В последнее время в одной профессиональной соцсети я все чаще стал натыкаться на посты, связанные с dotnet C# тематикой. К сожалению, эти посты в большинстве своем не содержат полезной информации. Скорее всего они создаются для охвата аудитории с целью привлечения трафика на сторонние платформы по продаже курсов для разработчиков. По-моему, этот способ называется "воронка продаж" (поправьте, если я ошибаюсь). Как правило, эти посты затрагивают какую-то не очень сложную тему и содержат примеры кода. Недавно мне попался очередной пост, в котором автор пытался показать пример использования новой фичи <code>labeled break and continue</code>. Это новая фича, которую добавили в C# 15 (dotnet 11). На момент написания она была принята в Working Set, но финального релиза ещё не было. Ниже код, похожий на оригинал из поста. Он разделен на 2 секции: "как делали раньше" и "как сделать используя новый подход":</p><p>Стандартный способ:</p> <a href="https://habr.com/ru/articles/1025794/?utm_campaign=1025794&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать разбор</a>]]></description>
      
      <pubDate>Mon, 20 Apr 2026 18:45:37 GMT</pubDate>
      <dc:creator><![CDATA[hahaton]]></dc:creator>
      
      <category><![CDATA[C# 15]]></category><category><![CDATA[labeled break]]></category><category><![CDATA[continue]]></category><category><![CDATA[вложенные циклы]]></category><category><![CDATA[switch]]></category><category><![CDATA[goto]]></category><category><![CDATA[cognitive complexity]]></category><category><![CDATA[рефакторинг]]></category>
    </item>
  

  

  

	
  

  

  

    

  

  

	
  

  
    <item>
      <title><![CDATA[[Перевод] Выделение регистров процессора при помощи генетического алгоритма]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1025788/</guid>
      <link>https://habr.com/ru/articles/1025788/?utm_campaign=1025788&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/8f7/6bd/b44/8f76bdb443ac456619618e63cfd17c78.png" /><p>Эксперимент, который многое объясняет</p><p>Оригинал этого поста также вошёл в число документов по проектированию платформы .NET:&nbsp;<a href="https://github.com/dotnet/runtime/blob/0a4dde9f1c30c1a4bfa54a68872a6425982e146e/docs/design/coreclr/jit/lsra-heuristic-tuning.md" rel="noopener noreferrer nofollow">lsra-heuristic-tuning</a>. </p> <a href="https://habr.com/ru/articles/1025788/?utm_campaign=1025788&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 20 Apr 2026 18:33:25 GMT</pubDate>
      <dc:creator><![CDATA[Sivchenko_translate]]></dc:creator>
      
      <category>исследования</category><category>оптимизация</category><category>процессор</category><category>алгоритмы</category><category>arm</category><category>intel</category>
    </item>
  

  

    
    <item>
      <title><![CDATA[Как мы добавили ИИ-ассистента в рабочий чат и что из этого вышло]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1025690/</guid>
      <link>https://habr.com/ru/articles/1025690/?utm_campaign=1025690&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/1ac/918/621/1ac918621f62331ebd11134b56067665.png" /><p>У нас небольшая IT-компания - SaaS-продукт, 5 разработчиков, 4 менеджера, CEO. Обычный стек: PHP + Vue, MySQL, GitHub, Telegram для коммуникации. Ничего революционного.</p> <a href="https://habr.com/ru/articles/1025690/?utm_campaign=1025690&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 20 Apr 2026 14:19:07 GMT</pubDate>
      <dc:creator><![CDATA[SmartAgent]]></dc:creator>
      
      <category><![CDATA[ai-assistant]]></category><category><![CDATA[chatops]]></category><category><![CDATA[llm]]></category><category><![CDATA[claude]]></category><category><![CDATA[github]]></category><category><![CDATA[автоматизация]]></category><category><![CDATA[it-процессы]]></category><category><![CDATA[devops]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Discriminated Unions: Что не так с реализациями объединений в C#?]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1025098/</guid>
      <link>https://habr.com/ru/articles/1025098/?utm_campaign=1025098&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/05f/9ee/f1b/05f9eef1b6e439b7f36e3abc44575a27.jpg" /><p>В&nbsp;жизни каждого программиста рано или&nbsp;поздно наступает момент, когда хочется вернуть из&nbsp;функции «либо то,&nbsp;либо это». Правильным языком это называется Discriminated Union (далее DU). Его суть проста: тип должен представлять одно значение из&nbsp;нескольких возможных (поэтому реализации называют «OneOf», т.е «один из»).</p><p>Казалось бы, что это довольно станадртная ситуация и нечего тут бухтеть, но именно c# кажется особенным в&nbsp;этом плане по&nbsp;сравнению с&nbsp;другими языками. Давайте разберёмся как&nbsp;устроены DU в&nbsp;других языках программирования.</p><p>Одним из&nbsp;самых простых примеров без «но» является Си. Действительно, язык просто содержит ключевое слово union, которое позволяет на&nbsp;один участок памяти наложить типы. эта возможность просто комбинируется с&nbsp;enum или&nbsp;int тегом, чтобы различать, что&nbsp;мы записали. Проблема заключается в&nbsp;том, что&nbsp;по&nbsp;большей части никто ничего не&nbsp;гарантирует: программист сам обязан проверять каждый из&nbsp;вариантов и следить, чтобы случайно не&nbsp;создать невалидное состояние.</p> <a href="https://habr.com/ru/articles/1025098/?utm_campaign=1025098&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sat, 18 Apr 2026 18:46:24 GMT</pubDate>
      <dc:creator><![CDATA[SashaGonch]]></dc:creator>
      
      <category><![CDATA[c#]]></category><category><![CDATA[.net]]></category><category><![CDATA[Discriminated unions]]></category><category><![CDATA[DU]]></category><category><![CDATA[source generators]]></category><category><![CDATA[optimization]]></category><category><![CDATA[high performance]]></category><category><![CDATA[unity]]></category><category><![CDATA[serialization]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Обучение LLM с нуля на c# и экспорт в GGUF. OpenCL против CUDA]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1017484/</guid>
      <link>https://habr.com/ru/articles/1017484/?utm_campaign=1017484&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/596/1f3/8dd/5961f38dda95e44f3231fce605217a76.png" /><p>Напишем с нуля на <strong>c#</strong> маленькую модель размером 422 Кб, сохраним в <strong>GGUF</strong> и запустим в <strong>LM Studio</strong>.</p><p>А в этом нам поможет всего один единственный компонент: <strong>ILGPU</strong>, позволяющий обучать модель на <strong>OpenCL</strong>. А точнее - на встройке AMD.</p><p>Ну а если у вас есть видеокарта NVidia - компонент позволяет обучать модель с помощью <strong>CUDA</strong>.</p> <a href="https://habr.com/ru/articles/1017484/?utm_campaign=1017484&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 17 Apr 2026 16:23:50 GMT</pubDate>
      <dc:creator><![CDATA[virex]]></dc:creator>
      
      <category><![CDATA[opencl]]></category><category><![CDATA[ии и машинное обучение]]></category><category><![CDATA[ai]]></category><category><![CDATA[c#]]></category><category><![CDATA[ии-модель]]></category><category><![CDATA[разработка]]></category><category><![CDATA[windows]]></category><category><![CDATA[cuda]]></category><category><![CDATA[ml]]></category><category><![CDATA[train]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Кастомные WPF-контролы, часть 3: ListBox с поддержкой drag’n’drop, масштабирования и различной сортировкой содержимого]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1024652/</guid>
      <link>https://habr.com/ru/articles/1024652/?utm_campaign=1024652&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/cff/e57/e06/cffe57e06fc8b09d58881ace6d952593.png" /><p><a href="https://habr.com/ru/articles/942822/" rel="noopener noreferrer nofollow">часть 1: стили, кнопки и переключатели</a> </p><p><a href="https://habr.com/ru/articles/962224/" rel="noopener noreferrer nofollow">часть 2: ComboBox с фильтрацией содержимого, TimePicker, DateTimePicker</a> </p><p>В этой статье я расскажу про разработку панели с поддержкой анимированного переноса элементов и какстомной сортировкой содержимого. Это, пожалуй, была одна из самых сложных задач, связанных с WPF контролами. Достаточно долго я не знал, с какой стороны к ней подступиться, пока не нашел несколько примеров: один на <a href="https://github.com/rulyotano/wpf-drag-animated-panel" rel="noopener noreferrer nofollow">github</a>, другой на &nbsp;<a href="https://www.codeproject.com/Tips/721158/WPF-Animated-Arrange-Panel" rel="noopener noreferrer nofollow">codeproject</a> (оставлю ссылку, хотя сейчас сайт недоступен). В них было реализовано примерно то, что мне было нужно. Так же я нашел неплохую &nbsp;<a href="https://professorweb.ru/my/WPF/Template/level18/18_11.php" rel="noopener noreferrer nofollow">статью</a> на professorweb. Этой информации хватило, чтобы написать свой контрол с функционалом, который меня устроил. </p><p>Для реализации необходимой функциональности потребуется не один, а два контрола: </p><p>1.&nbsp;&nbsp;&nbsp;&nbsp; ExtendedListBox - наследник от ListBox с поддержкой масштабирования</p><p>2.&nbsp;&nbsp;&nbsp;&nbsp; DragAnimatedPanel - панель с поддержкой различных типов сортировки и drag’n’drop&nbsp; </p> <a href="https://habr.com/ru/articles/1024652/?utm_campaign=1024652&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 17 Apr 2026 13:03:16 GMT</pubDate>
      <dc:creator><![CDATA[Alex063]]></dc:creator>
      
      <category><![CDATA[.net]]></category><category><![CDATA[wpf]]></category><category><![CDATA[c#]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как я построил автоматизированный рекрутинг в Claude Code на базе Playwright и субагентов]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1023648/</guid>
      <link>https://habr.com/ru/articles/1023648/?utm_campaign=1023648&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/b27/cd0/e57/b27cd0e571259cf6980cf893a6e1812d.jpeg" /><p>Построил автоматизированный рекрутинг в Claude Code: Playwright-агент за 10 раундов прочесал 1000+ резюме на hh.ru, собрал шорт-лист из 50 кандидатов и помог найти разработчика, который уже делал нужные нам интеграции с МФО-вендорами.</p> <a href="https://habr.com/ru/articles/1023648/?utm_campaign=1023648&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 15 Apr 2026 07:49:09 GMT</pubDate>
      <dc:creator><![CDATA[georgii-motrenko]]></dc:creator>
      
      <category><![CDATA[Claude Code]]></category><category><![CDATA[Playwright]]></category><category><![CDATA[AI]]></category><category><![CDATA[рекрутинг]]></category><category><![CDATA[hh.ru]]></category><category><![CDATA[.NET]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Ставим Claude Code на Windows как профессионалы]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1022624/</guid>
      <link>https://habr.com/ru/articles/1022624/?utm_campaign=1022624&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/007/879/383/007879383dfc3a1cc44928aeca03a86b.jpg" /><p>У нас в команде AWS 9 человек — решения в AWS, 150+ аккаунтов в AWS Organizations. Один из нас работает на macOS, шестеро на Linux, двое на Windows (включая меня).</p><p>За год работы с Claude Code выработались правила: как поставить и что настроить. Правила менялись по мере выхода новых версий — появлялись новые возможности, отваливались старые костыли. Этот документ отражает актуальное состояние на апрель 2026.</p><p>На Linux не пересаживаюсь намеренно. Мои Windows-компетенции в команде востребованы: я единственный, кто имеет солидный опыт с Microsoft, кто отладит Lambda-парсер для обработки Windows Events, кто напишет и будет поддерживать большой PowerShell скрипт или SSM-документ с ним.</p><p>Claude Code у меня под Windows должен работать без ошибок и с максимально возможной производительностью, несмотря на то, что большую часть времени я работаю на linux-специфичное окружение.</p> <a href="https://habr.com/ru/articles/1022624/?utm_campaign=1022624&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 14 Apr 2026 10:39:45 GMT</pubDate>
      <dc:creator><![CDATA[wmlab]]></dc:creator>
      
      <category><![CDATA[claude-code]]></category><category><![CDATA[powershell]]></category><category><![CDATA[wsl]]></category><category><![CDATA[wsl2]]></category><category><![CDATA[windows]]></category><category><![CDATA[windows 11]]></category>
    </item>
  

  

  

	
  

  

  

      

      

      

    
  </channel>
</rss>
