<?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>Fri, 13 Nov 2026 16:18:53 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[Вакуумная установка на ноутбуке: open-source система управления с эмулятором и MCP]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1107534/</guid>
      <link>https://habr.com/ru/articles/1107534/?utm_campaign=1107534&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/35/73/63/357363e8f6ee8a6ace5a99042bae8046.png" /><p>После статей про <a href="https://habr.com/ru/articles/1082742/" rel="noopener nofollow">напыление рентгеновского зеркала с помощью LLM</a> и <a href="https://habr.com/ru/articles/1105356/" rel="noopener nofollow">локальную Qwen 3.8 в роли оператора</a> возникал вопрос: как проверить агента на управлении вакуумной установкой, если нет ни самой установки, ни ПЛК? Мы выложили под лицензией Apache-2.0 пакет <a href="https://github.com/APS-Techno/Control-Community" rel="noopener nofollow">APS Control Community</a> — нашу рабочую программу управления напылением, физический эмулятор оборудования и сервер MCP.</p><p>Программа работает на обычном ПК с Windows и не требует прав администратора. В комплекте идут три конфигурации: простая камера с двумя магнетронами (Sputter), установка со шлюзом загрузки из нашей прошлой статьи (ADS) и четырёхкамерный кластер с транспортным роботом (Cluster). Управлять клапанами и запускать рецепты можно вручную из окна оператора, а можно подключить через MCP локальную модель или Claude Code.</p> <a href="https://habr.com/ru/articles/1107534/?utm_campaign=1107534&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 13 Nov 2026 12:30:30 GMT</pubDate>
      <dc:creator><![CDATA[koreec]]></dc:creator>
      
      <category><![CDATA[асу тп]]></category><category><![CDATA[эмуляция оборудования]]></category><category><![CDATA[вакуумное напыление]]></category><category><![CDATA[магнетронное распыление]]></category><category><![CDATA[плк]]></category><category><![CDATA[siemens s7]]></category><category><![CDATA[c#]]></category><category><![CDATA[.net]]></category><category><![CDATA[mcp]]></category><category><![CDATA[ии-агенты]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как легально разблокировать штатное удаление Edge и управлять компонентами Bing через реестр и PowerShell]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1107476/</guid>
      <link>https://habr.com/ru/articles/1107476/?utm_campaign=1107476&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Под капотом DMA в Windows: как легально разблокировать штатное удаление Edge и управлять компонентами Bing через реестр и PowerShell</p><p>Каждый, кто пытался полностью избавиться от Microsoft Edge в Windows 10 или 11, сталкивался с тем, что кнопка «Удалить» в системных настройках заблокирована. В сети популярны радикальные скрипты, которые «с мясом» вырезают папки браузера, но такой подход деструктивен: он ломает связанные системные компоненты (например, веб-виджеты) и приводит к ошибкам при установке ежемесячных накопительных обновлений Windows.</p><p>Между тем, в самой ОС уже заложен <strong>штатный и безопасный механизм деинсталляции</strong>. С вступлением в силу Закона о цифровых марках (DMA) в Европейской экономической зоне (EEA), Microsoft была вынуждена официально разрешить европейцам удалять Edge, отключать Bing-поиск и гибко управлять компонентами системы.</p><p>В этой статье мы разберем техническую изнанку региональных ограничений Windows, научимся точечно переключать внутренние политики без сторонних твикеров, работать с Appx-пакетами Bing и безопасно автоматизировать эти процессы.</p><p>1. Анатомия региональной политики Windows</p><p>За применение правил регуляторов на уровне ОС отвечает специальная подсистема конфигурации. Её поведение диктуется конфигурационным файлом, расположенным по пути:<code>C:\Windows\System32\IntegratedServicesRegionPolicySet.json</code></p><p>Если открыть этот JSON-файл, можно обнаружить глобальную структуру политик, привязанных к конкретным GUID. За доступность деинсталляции Microsoft Edge отвечает строго определенная запись:<code>{1bca278a-5d11-4acf-ad2f-f9ab6d7f93a6}</code></p> <a href="https://habr.com/ru/articles/1107476/?utm_campaign=1107476&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 13 Nov 2026 10:30:03 GMT</pubDate>
      <dc:creator><![CDATA[fs85]]></dc:creator>
      
      <category><![CDATA[microsoft edge]]></category><category><![CDATA[windows 10]]></category><category><![CDATA[windows 11]]></category><category><![CDATA[деинсталляция]]></category><category><![CDATA[удаление]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как разбирать HTML в 10–30 раз быстрее HtmlAgilityPack и AngleSharp: список вместо DOM]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1106746/</guid>
      <link>https://habr.com/ru/articles/1106746/?utm_campaign=1106746&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/fb/c4/25/fbc425cf6fbbc1e564ea9d6ff2825efd.png" /><p>Много лет занимаюсь парсингом: каталоги, цены, карточки товаров, объявления. Всё это время из проекта в проект кочевал мой самописный HTML-парсер. Он стабильно работал на миллионах страниц, но показывать его наружу было как-то неловко: тесты покрывали только нужные мне сайты, комментарии были на двух языках вперемешку, документации не было вовсе. Появилась иишка и доделала то что мне было лень и я выложил nuget: z3l.FastHtmlParser</p><p>Ниже разбираемся, почему стандартные библиотеки на таких задачах впустую тратят процессорное время, как уйти от аллокаций DOM и где проходят границы применимости легковесного подхода.<br><br><strong>Почему DOM избыточен для парсинга</strong></p><p>Парсинг — это работа с объёмами. Когда через сервис проходят миллионы страниц в сутки, разбор разметки оказывается самым горячим циклом, а затраты на серверы растут пропорционально.</p><p>Лидеры рынка в .NET — HtmlAgilityPack и AngleSharp — отличные библиотеки, но решают более общую задачу браузерного уровня. Они строят полноценный DOM: создают отдельный объект на каждый узел, достраивают неявные &lt;html&gt;, &lt;head&gt;, &lt;tbody&gt;, держат дерево для мутаций и обхода CSS-селекторами.</p><p>Для извлечения данных почти ничего из этого не нужно. Задача простая: найти элемент, забрать текст или значение атрибута и перейти к следующей странице. Всё остальное превращается в лишнюю работу процессора и сборщика мусора (GC).</p><p>Отсюда простая идея: не строить то, что не будет использовано. Документ можно представить как просто список кусков исходной строки.<br><br><strong>Бенчмарки</strong></p><p>Тестовый стенд: BenchmarkDotNet 0.15.8, .NET 10, Intel Xeon E-2236, Windows Server 2025. Страницы настоящие, сохранённые с <a href="http://books.toscrape.com" rel="noopener nofollow">books.toscrape.com</a>, <a href="http://quotes.toscrape.com" rel="noopener nofollow">quotes.toscrape.com</a> и <a href="http://webscraper.io/test-sites" rel="noopener nofollow">webscraper.io/test-sites</a>. Версии библиотек: AngleSharp 1.10.0, HtmlAgilityPack 1.13.1.</p> <a href="https://habr.com/ru/articles/1106746/?utm_campaign=1106746&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 11 Nov 2026 15:43:20 GMT</pubDate>
      <dc:creator><![CDATA[romanti3172]]></dc:creator>
      
      <category><![CDATA[html parser]]></category><category><![CDATA[парсинг]]></category><category><![CDATA[web scraping]]></category><category><![CDATA[.NET]]></category><category><![CDATA[C#]]></category><category><![CDATA[HtmlAgilityPack]]></category><category><![CDATA[AngleSharp]]></category><category><![CDATA[производительность]]></category><category><![CDATA[BenchmarkDotNet]]></category><category><![CDATA[zero allocation]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Что нового в .NET 11?]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/articles/1106470/</guid>
      <link>https://habr.com/ru/companies/pvs-studio/articles/1106470/?utm_campaign=1106470&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/10/0e/6a/100e6aa3e68a614bfee6b1d93d5b7c6f.png" /><p>Совсем недавно вышел .NET 11, и это значит, что пора обновлять свои проекты. Но сначала посмотрим, стоят ли нововведения в C# 15, Runtime Async, JIT-оптимизации и многое другое того, чтобы спешить с переходом на новую версию.</p> <a href="https://habr.com/ru/articles/1106470/?utm_campaign=1106470&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 11 Nov 2026 09:15:38 GMT</pubDate>
      <dc:creator><![CDATA[zinduro (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[C#]]></category><category><![CDATA[C# 15]]></category><category><![CDATA[.NET]]></category><category><![CDATA[.NET 11]]></category><category><![CDATA[dotnet]]></category><category><![CDATA[нововведения .net]]></category><category><![CDATA[PVS-Studio]]></category><category><![CDATA[c# union]]></category><category><![CDATA[runtime]]></category><category><![CDATA[sdk]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Человек-ракета. Реактивный базис на F# и Godot. Ступень 1. По стопам прогресса]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/first/articles/1105918/</guid>
      <link>https://habr.com/ru/companies/first/articles/1105918/?utm_campaign=1105918&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/48/e0/4b/48e04b2e622456e144c162936d5aa899.png" /><p>Пару месяцев назад я закончил здоровенный <a href="https://habr.com/ru/companies/first/articles/1054164/">цикл</a> по неочевидным особенностям F# в декорациях Godot. Под конец я пообещал выпустить ещё несколько статей по реактивному программированию на стыке тех же технологий. Момент исполнения обещания наступил с опозданием. Нас ждут три статьи, в ходе которых я познакомлю вас со своей рабочей лошадкой. Ей суждено появиться во всех моих статьях по Godot.</p><p>Именно поэтому я использовал в заглавии слово «базис», однако до этого там стояло слово «эксперименты». Оно появилось там, отнюдь не потому что я не уверен в собственных действиях, а потому что хотел подчеркнуть своеволие и своеобразие последующих шагов. Мне не нравится доминирующая парадигма, зафиксированная в виде библиотеки <code>System.Reactive</code>, и в этом цикле я буду регулярно явно или неявно оспаривать некоторые её положения. При этом у меня нет стремления воздвигнуть собственную парадигму, и уж тем более я не собираюсь публиковать её на nuget.org. Наоборот, я хочу показать, что реактивные системы лучше всего строить на базе «колоды» примитивов, которая подбирается и пишется специально под проект. Создание универсальной библиотеки при таком подходе полностью противопоказано.</p><p>Правда, неуниверсальная библиотека нам тоже не понадобится. В конце весь код займёт всего несколько сотен строк. В основном благодаря особенностям F#, о которых мы либо говорили, либо только будем говорить. Но нам также поможет достаточно высокая база, которую дают <code>dotnet</code> и <code>System.Reactive</code>.</p> <a href="https://habr.com/ru/articles/1105918/?utm_campaign=1105918&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 11 Nov 2026 08:20:22 GMT</pubDate>
      <dc:creator><![CDATA[kleidemos (FirstVDS)]]></dc:creator>
      
      <category><![CDATA[godot]]></category><category><![CDATA[godot engine]]></category><category><![CDATA[fsharp]]></category><category><![CDATA[.net]]></category><category><![CDATA[реактивное программирование]]></category><category><![CDATA[rx]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[QRP SSB-передатчик с полярной модуляцией (EER) на STM32F411, Si5351, RD16HHF1 или BS170]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1106364/</guid>
      <link>https://habr.com/ru/articles/1106364/?utm_campaign=1106364&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/5c/d9/76/5cd976375a4e6cc375ae97848562224b.png" /><p>После приёмной части (<a href="https://habr.com/ru/articles/1019090/" rel="noopener nofollow">SDR RX стенд на STM32H723</a>) логично было взяться за передающую. Для отладки решил сделать отдельный стенд. Однополосная модуляция формируется полярным (EER) методом. Впервые этот метод был предложен Леонардом Канном в 1952 году. Долгое время он оставался в тени классических фильтровых или фазовых методов из-за сложности реализации в аналоговую эпоху, однако сегодня переживает «второе рождение» в современных цифровых трансиверах (например, uSDX, QRP Labs QMX, FlexRadio Aurora (AU-510/520, новинка 2025–26)), благодаря SDR-технологиям и цифровым сигнальным процессорам (DSP). Классический метод Канна превратился в доминирующую промышленную технологию 4G/5G и Wi-Fi благодаря двум факторам — кремниевой интеграции (CMOS) и колоссальному скачку в скорости цифровой обработки сигналов.</p> <a href="https://habr.com/ru/articles/1106364/?utm_campaign=1106364&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 11 Nov 2026 07:03:51 GMT</pubDate>
      <dc:creator><![CDATA[R9OFG]]></dc:creator>
      
      <category><![CDATA[EER]]></category><category><![CDATA[Si5351]]></category><category><![CDATA[RD16HHF1]]></category><category><![CDATA[SSB]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Язык выражений redb.Route, часть 2: от строки до IL, обращения к реестру и проверка маршрутов до запуска]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1106126/</guid>
      <link>https://habr.com/ru/articles/1106126/?utm_campaign=1106126&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/5b/f9/6c/5bf96cb63a76756e526114e69ae13daf.png" /><p>Что происходит с header.a &gt; 10 между файлом маршрута и первым сообщением, как связывается bean:svc.Check(body), почему шаблоны никогда не выполняют код и что проверка пакета сообщает с номером строки и колонки.  <br></p><p><a href="https://redb.ru/articles/route-expressions" rel="noopener nofollow">Первая часть</a>&nbsp;рассказала о языке выражений redb.Route в целом. Там была одна грамматика для условий, значений и шаблонов, компиляция в делегат вместо разбора на каждом сообщении, одно правило истинности и места, где выражения живут: шаблоны интеграции и адреса конечных точек. Эта часть заглядывает внутрь. Что именно происходит со строкой вроде&nbsp;<code>header.a &gt; 10</code>. Как шаблон решает, где кончается подстановка. Как маршрут добирается до ваших сервисов и до окружения. Что язык отказывается делать, когда текст пришёл из данных, а не от разработчика. И что проверка пакета сообщает о файле маршрута ещё до развёртывания.</p><p>Сначала о том, откуда взяты результаты ...</p> <a href="https://habr.com/ru/articles/1106126/?utm_campaign=1106126&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 10 Nov 2026 13:05:20 GMT</pubDate>
      <dc:creator><![CDATA[grelikt]]></dc:creator>
      
      <category><![CDATA[dotnet]]></category><category><![CDATA[integration]]></category><category><![CDATA[eip]]></category><category><![CDATA[apache-camel]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Как ломается модульный монолит и как с этим бороться]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1105034/</guid>
      <link>https://habr.com/ru/articles/1105034/?utm_campaign=1105034&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/78/52/78/7852785a8b7fe9887ae10cfd7dea974d.jpg" /><p>В микросервисах логические границы удерживаются границами процесса и хранилища. Для пересечения надо явно написать удаленный вызов, сделать контракт и обновить как минимум два сервиса. В монолите нет механизма контроля логических границ. Одна часть кода в любой момент может сослаться на другую, сборка и тесты это пропустят. Даже в рантайме может может все работать без ошибок. Но таких ссылок станет много и монолит превратится в big-ball-of-mud.</p><p>Эти же явные границы микросервисов помогают настраивать деплой. Структура сервисов и их зависимости видны в коде (не всегда очевидно, но всегда явно) и “случайно” их нарушить сложно. В модульном монолите структура деплоя не отражена вообще.</p><p><a href="https://habr.com/ru/articles/1104050/" rel="noopener nofollow">В прошлой статье</a> я описал как сделать контроль зависимостей между модулями в рантайме, но хотелось бы раньше. Закончил статью списком поломок, которые не замечают ни сборка, ни локальная отладка.</p><p>В этой статье я покажу как превратить ошибки нарушения границ и деплоя в <strong>ошибки компиляции и красные тесты</strong>.</p> <a href="https://habr.com/ru/articles/1105034/?utm_campaign=1105034&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 10 Nov 2026 07:34:31 GMT</pubDate>
      <dc:creator><![CDATA[gandjustas]]></dc:creator>
      
      <category><![CDATA[C#]]></category><category><![CDATA[dotnet]]></category><category><![CDATA[ef]]></category><category><![CDATA[roslyn]]></category><category><![CDATA[roslyn analyzers]]></category><category><![CDATA[roslyn source generators]]></category><category><![CDATA[модульный монолит]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[От уравнений Максвелла к анимации: реализация FDTD на PascalABC.NET]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1074684/</guid>
      <link>https://habr.com/ru/articles/1074684/?utm_campaign=1074684&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/getpro/habr/upload_files/e42/e28/2b2/e42e282b297232f5127fd6b6efef993d.png" /><p>Заглавная иллюстрация — про электростатику; в статье же речь пойдёт о динамике: мы будем моделировать распространение электромагнитных волн и численно решать уравнения Максвелла.</p><p>При этом подойдём к этой задаче более профессионально, чем в предыдущих материалах: я учёл справедливую критику и замечания читателей по поводу выбора и обоснования численного метода, оценил корректность и реалистичность схемы и результатов моделирования, привёл необходимые начальные и граничные условия для воспроизводимости. </p><p>В системе СИ уравнения Максвелла записываются следующим образом:</p> <a href="https://habr.com/ru/articles/1074684/?utm_campaign=1074684&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sat, 07 Nov 2026 10:38:04 GMT</pubDate>
      <dc:creator><![CDATA[Maximka200]]></dc:creator>
      
      <category><![CDATA[уравнения максвелла]]></category><category><![CDATA[ландавшиц]]></category><category><![CDATA[теория поля]]></category><category><![CDATA[электромагнетизм]]></category><category><![CDATA[электромагнитные волны]]></category><category><![CDATA[delphi]]></category><category><![CDATA[паскаль]]></category><category><![CDATA[анимация]]></category><category><![CDATA[конечно-разностные методы]]></category><category><![CDATA[волна]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Стал ли код Microsoft хуже с приходом ИИ: замеры .NET-библиотек от 6.0 до 11 RC]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1104356/</guid>
      <link>https://habr.com/ru/articles/1104356/?utm_campaign=1104356&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/35/dd/ec/35ddec9e56b44ab9e107e8a80bc40a57.png" /><p>В ноябре 2022 года с разницей в три недели вышли .NET 7 и ChatGPT. Получилась удобная точка отсчёта: .NET 7 стал последним релизом, написанным до ChatGPT. А в мае 2025 года в dotnet/runtime пришёл Copilot coding agent и к концу октября 2026-го открыл там 1734 pull request’а, 1205 из них смержены.</p><p>Портит ли ИИ код, спорить можно долго, а производительность можно просто измерить. Я замерил DI, конфигурацию, логирование, кэш и EF Core: 46 операций, шесть мажорных версий, 30 раундов. Заодно по истории Git проверил, кто трогал горячие методы, а две просадки в 11 RC проследил до конкретных коммитов. Самую крупную внёс человек одной строкой. Вторая, поменьше, пришла с PR от Copilot coding agent, который чинил дедлок.</p> <a href="https://habr.com/ru/articles/1104356/?utm_campaign=1104356&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 06 Nov 2026 08:44:20 GMT</pubDate>
      <dc:creator><![CDATA[anechways]]></dc:creator>
      
      <category><![CDATA[.net]]></category><category><![CDATA[производительность]]></category><category><![CDATA[бенчмарки]]></category><category><![CDATA[github copilot]]></category><category><![CDATA[ef core]]></category><category><![CDATA[искусственный интеллект]]></category><category><![CDATA[dotnet runtime]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[OpenTelemetry в .NET: трассировка, которая помогает расследовать ошибки]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/ru_mts/articles/1103818/</guid>
      <link>https://habr.com/ru/companies/ru_mts/articles/1103818/?utm_campaign=1103818&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/69/b7/49/69b7491c5bf19056ffefd1a0c3222170.png" /><p>Привет, Хабр! В прошлом<a href="https://habr.com/ru/companies/ru_mts/articles/1045448/"> материале</a> про поиск причин сбоев мы разбирали структурированное логирование, BeginScope и классификацию событий на примере передачи актов в Единый реестр интернет-рекламы (ЕРИР). Продолжим тему.</p><p>Логи помогают узнать подробности события, но путь запроса через несколько сервисов по ним не соберешь. Особенно когда непонятно, куда ушло время: на проверку данных, на сохранение документа или на ожидание ответа внешней системы. Распределенная трассировка помогает это понять. Настроим ее через OpenTelemetry и разберем, какие операции создавать самому, что к ним добавлять и как проверить, что все работает.</p><p>За основу мы взяли <a href="https://github.com/AlekseenkoAndrw/demo/tree/main/OrdTracingDemo">демо-проект</a> OrdTracingDemo: он содержит два<a href="http://asp.net"> </a><a href="http://ASP.NET">ASP.NET</a> Core приложения на .NET 10, OpenTelemetry Collector и Jaeger. Запросы можно отправлять через Swagger, а задержку и ошибку внешнего сервиса включать параметрами.&nbsp;</p><p>Работать будем с передачей креативов, актов и статистики. Шлюз здесь учебный: к настоящему ЕРИР он не ходит, а маршруты в демо не совпадают с теми, что в WebAPI Медиаскаута. Дальше покажем настройку и ключевые решения на коротких примерах кода. Полную реализацию можно посмотреть и запустить из репозитория.</p> <a href="https://habr.com/ru/articles/1103818/?utm_campaign=1103818&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 06 Nov 2026 07:10:49 GMT</pubDate>
      <dc:creator><![CDATA[alekseenko_andrey (МТС)]]></dc:creator>
      
      <category><![CDATA[OpenTelemetry]]></category><category><![CDATA[распределённая трассировка]]></category><category><![CDATA[.NET]]></category><category><![CDATA[ASP.NET Core]]></category><category><![CDATA[Jaeger]]></category><category><![CDATA[OTLP]]></category><category><![CDATA[observability]]></category><category><![CDATA[мониторинг микросервисов]]></category><category><![CDATA[логирование]]></category><category><![CDATA[Docker Compose]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Модульная модель данных в EF Core]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1104050/</guid>
      <link>https://habr.com/ru/articles/1104050/?utm_campaign=1104050&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/da/58/6f/da586f85b1c4653ef09f8ecd5df67a41.jpg" /><p><a href="https://habr.com/ru/articles/1103286/" rel="noopener nofollow">В прошлой статье</a> мы разобрали какие средства для создания модульных приложений есть в ASP.NET. Каждый модуль может регистрировать свои сервисы и использовать свои эндпоинты и страницы. Но данные у каждого модуля свои.</p><p>На практике даже если у каждого модуля своя база данных, то живут они все на одном сервере (кластере). Причин этому несколько. Во-первых серверы баз данных гораздо проще и дешевле масштабировать горизонтально, чем вертикально. Во-вторых один сервер баз данных вполне может обслужить десяток веб-серверов сравнимой мощности, если запросы оптимальные, на веб-серверы используют кэширование, а аналитическая нагрузка идет на реплики.</p><p>Поддерживать разные хранилища данных для разных модулей когда у вас весь проект пилит одна команда, а в эпоху ИИ — один AI-инженер, выглядит совсем плохой идеей.</p><p>Поэтому сегодня разберем как сделать модульную модель данных, когда каждый модуль видит свое подмножество сущностей, а хост собирает это все в одну базу данных.</p> <a href="https://habr.com/ru/articles/1104050/?utm_campaign=1104050&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 06 Nov 2026 06:02:50 GMT</pubDate>
      <dc:creator><![CDATA[gandjustas]]></dc:creator>
      
      <category><![CDATA[asp.net]]></category><category><![CDATA[C#]]></category><category><![CDATA[модульный монолит]]></category><category><![CDATA[модульная архитектура]]></category><category><![CDATA[efcore]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Модульный монолит в ASP.NET из коробки]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1103286/</guid>
      <link>https://habr.com/ru/articles/1103286/?utm_campaign=1103286&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/a3/9f/91/a39f915fb64f744137a42f99bd1693fe.jpg" /><p><a href="https://habr.com/ru/articles/1102904/" rel="noopener nofollow">Прошлую статью</a> я закончил на том, что Google в 2023 году выпустил фрейморк для модульных приложений <a href="https://serviceweaver.dev/" rel="noopener nofollow">Service Weaver</a>. Можно писать и запускать приложение как монолитное, а потом в конфиге указать какие компоненты на каких машинах запускать и приложение становилось распределенным.</p><p>Вы удивитесь, но в ASP.NET встроена модульность начиная с версии Core 2.0 (2017 год). Вы можете сделать сделать приложение которое загружает сервисы, контроллеры, страницы и даже EF модели из разных сборок в один хост. Все это собирается в один исполняемый образ. Переменная окружения при запуске задает какие модули загружать.</p><p>Загрузили все модули — получили монолит, в котором заказы и клиенты джойнятся одним SQL-запросом. Оставили в одном контейнере модуль заказов, а в другом модуль клиентов — получили два сервиса, которые ходят друг к другу по HTTP. Пересобирать ничего не нужно, в Program.cs нет ни слова о модулях, а всё целиком запускается и отлаживается по F5. Решение «резать или не резать» становится обратимым.</p><p>Все это без единого стороннего NuGet-пакета — только ASP.NET Core и EF Core. В конце разберём, почему у Google то же самое не взлетело, и какую цену за «из коробки» придётся заплатить.</p> <a href="https://habr.com/ru/articles/1103286/?utm_campaign=1103286&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 05 Nov 2026 11:19:28 GMT</pubDate>
      <dc:creator><![CDATA[gandjustas]]></dc:creator>
      
      <category><![CDATA[asp.net]]></category><category><![CDATA[c#]]></category><category><![CDATA[модульный монолит]]></category><category><![CDATA[ef core]]></category><category><![CDATA[mvc]]></category><category><![CDATA[razor]]></category><category><![CDATA[razor pages]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[redb Route XML для VS Code: проекты из шаблонов, разметка, граф и диаграммы Mermaid]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1103666/</guid>
      <link>https://habr.com/ru/articles/1103666/?utm_campaign=1103666&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/55/e7/ab/55e7ab67ab781347c6113f4fed52c727.png" /><p>Расширение для VS Code в Marketplace: проект из шаблона, подсказки по схеме, ссылки на бины, дерево и граф маршрутов, Mermaid, путь до воркера Tsak.  </p><p>Интеграционный маршрут в redb.Route можно написать на C#, а можно разметкой: файл&nbsp;<code>.route.xml</code>&nbsp;кладётся в пакет, пакет в папку воркера Tsak, и маршрут начинает работать. Формату редактор не нужен, это обычный XML, который сервис грузит как есть. Но писать его руками по памяти неудобно: какие у коннектора опции, как называется элемент, на какой бин сослаться, куда пойдёт сообщение, если ни одна ветка не подошла.</p><p>Для этого есть расширение&nbsp;<strong>redb Route XML</strong>&nbsp;для VS Code. С конца октября оно в Visual Studio Marketplace, текущая версия 0.2.26. Ниже весь путь с ним: от пустой папки и проекта из шаблона через разметку, подсказки и граф до диаграммы для документации и модуля на воркере.</p> <a href="https://habr.com/ru/articles/1103666/?utm_campaign=1103666&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 04 Nov 2026 23:54:31 GMT</pubDate>
      <dc:creator><![CDATA[grelikt]]></dc:creator>
      
      <category><![CDATA[dotnet]]></category><category><![CDATA[vscode]]></category><category><![CDATA[xml]]></category><category><![CDATA[integration]]></category><category><![CDATA[eip]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Akbura beta-6: ускорение компилятора в 2,5 раза и реактивный биндинг C#-выражений]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1103390/</guid>
      <link>https://habr.com/ru/articles/1103390/?utm_campaign=1103390&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/c7/72/28/c77228715dc960cea74c9981a569e08b.png" /><p>Выпустил шестую бету Akbura — декларативного языка разметки для Avalonia.</p><p>В этот раз удалось ускорить холодную генерацию кода в 2,5 раза и сократить количество аллокаций почти втрое. Но самое интересное! Это то что добавил реактивные привязки произвольных C#-выражений, которые автоматически отслеживают изменения вложенных свойств.</p><p>В статье расскажу, что изменилось, покажу результаты бенчмарков и примеры новой функциональности.</p> <a href="https://habr.com/ru/articles/1103390/?utm_campaign=1103390&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 04 Nov 2026 04:59:30 GMT</pubDate>
      <dc:creator><![CDATA[Popou]]></dc:creator>
      
      <category><![CDATA[avalonia]]></category><category><![CDATA[avaloniaui]]></category><category><![CDATA[desktop]]></category><category><![CDATA[akbura]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[EF Core vs redb: граф объекта против 54 таблиц и Include]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1103216/</guid>
      <link>https://habr.com/ru/articles/1103216/?utm_campaign=1103216&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/1d/ad/f6/1dadf6dff8665b01b4856d9fc8cfb475.png" /><p>Сотрудник с адресами, контактами и словарями: в EF Core это 54 таблицы и 31 Include, в <strong>redb</strong> Pro один класс. Замеры на 100 тыс. объектов: где кто быстрее.</p><p>Один сотрудник из наших примеров в EF Core читается 62 SQL-запросами и почти две секунды. В redb Pro тот же сотрудник, на тех же данных и в том же виде, читается за 131 мс и девять запросов, а в повторном прогоне за 36 мс и пять. Разница не в том, что один движок «быстрый», а другой «медленный». Разница в том, сколько таблиц приходится собрать, чтобы получить из базы один бизнес-объект.</p><p>Ниже разбор: что именно сравнивали, почему граф дорог в нормальной форме, как redb Pro научился читать его без полной свёртки, и где EF Core честно быстрее. Таких мест немало, и они тоже в таблицах.</p> <a href="https://habr.com/ru/articles/1103216/?utm_campaign=1103216&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 03 Nov 2026 13:03:43 GMT</pubDate>
      <dc:creator><![CDATA[grelikt]]></dc:creator>
      
      <category><![CDATA[dotnet]]></category><category><![CDATA[efcore]]></category><category><![CDATA[postgresql]]></category><category><![CDATA[mssql]]></category><category><![CDATA[sqlite]]></category><category><![CDATA[performance]]></category><category><![CDATA[orm]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Модульность без микросервисов: почему она того стоит]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1102904/</guid>
      <link>https://habr.com/ru/articles/1102904/?utm_campaign=1102904&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/52/f6/95/52f6950889ba26aded8aebf6db8592cd.jpg" /><p>Монолит пилят на микросервисы вводят ради четырёх обещаний: <strong><em>производительности</em></strong>, <strong><em>отказоустойчивости</em></strong>, <strong><em>чистых границ</em></strong> и <strong><em>независимых релизов</em></strong>. А потом оказывается, что команда одна, база одна, язык один, а сервисов больше, чем разработчиков, — и ни одно из обещаний толком не выполняется.</p><p>Это не только моё впечатление. Инженеры Google во главе с Санджаем Гемаватом, соавтором <em>MapReduce</em> и <em>Bigtable</em>, разобрали, почему микросервисы не дают того, ради чего их вводят, и пришли к выводу, что некоторые их проблемы прямо противоречат обещанным выгодам. Для проверки они сложили в один процесс настоящий интернет-магазин из 11 микросервисов и получили <strong>в 9 раз меньше ядер и в 14 раз меньшую задержку</strong>.</p><p>Я повторил опыт на самом простом примере, какой смог придумать, — функции, которая складывает два числа. Через HTTP и gRPC её вызов стоит <strong>в 3,5 раза</strong> больше CPU и памяти, чем прямой, через RabbitMQ — <strong>в 6,3 раза</strong>. Бизнес-логики там ноль: это цена одного только вызова.</p><p>А потом проверил на настоящем .NET-приложении — eShop, эталонном микросервисном приложении Microsoft. После перевода на модули оно занимает <strong>в 4 раза меньше памяти</strong>, вместо десяти развёртываемых единиц стало три, RabbitMQ не понадобился, а кода стало на 39% меньше. По дороге нашлись несколько дефектов исходной версии, которые возникали из-за несогласованности кода сервисов.</p><p>Ниже разберём каждое из четырёх обещаний и посмотрим, что происходит на практике.</p> <a href="https://habr.com/ru/articles/1102904/?utm_campaign=1102904&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 03 Nov 2026 06:49:02 GMT</pubDate>
      <dc:creator><![CDATA[gandjustas]]></dc:creator>
      
      <category><![CDATA[dotnet]]></category><category><![CDATA[c#]]></category><category><![CDATA[go]]></category><category><![CDATA[service weaver]]></category><category><![CDATA[asp.net]]></category><category><![CDATA[микросервисы]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Всем привет!  Я ранее писал о своей библиотеке ArgsToConfig для C#. Напомню, что она позволяет преобразовать входящие в...]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1102426/</guid>
      <link>https://habr.com/ru/articles/1102426/?utm_campaign=1102426&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Всем привет!</p><p>Я <a href="https://habr.com/en/articles/1037556/" rel="noopener nofollow">ранее писал</a> о своей библиотеке <a href="https://github.com/Mansiper/ArgsToConfig" rel="noopener nofollow">ArgsToConfig</a> для C#. Напомню, что она позволяет преобразовать входящие в консольное приложение аргументы в пользовательский класс согласно заданным правилам через атрибуты. Всего 22 атрибута, покрывающие, пожалуй, все возможные случае (и даже больше). Из коробки поддерживает коллекции, кортежи и не базовые типы, вроде <code>TimeStamp</code> или пользовательские.</p><p>Вот один из примеров (все примеры можно посмотреть в Readme и тестах):</p> <a href="https://habr.com/ru/articles/1102426/?utm_campaign=1102426&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать дальше &rarr;</a>]]></description>
      
      <pubDate>Mon, 02 Nov 2026 03:48:24 GMT</pubDate>
      <dc:creator><![CDATA[ProgerMan]]></dc:creator>
      
      <category><![CDATA[cli]]></category><category><![CDATA[мапинг аргументов]]></category><category><![CDATA[arguments mapping]]></category><category><![CDATA[nuget package]]></category><category><![CDATA[c#]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[FAIRouter вышел на NuGet. Выбираем языковую модель под задачу в несколько строк на C#]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1101942/</guid>
      <link>https://habr.com/ru/articles/1101942/?utm_campaign=1101942&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/9e/3c/49/9e3c49300495adb259c5f0b1acbe7e41.png" /><p>Наш open source маршрутизатор ИИ-моделей FAIRouter (C# версия) вышел на NuGet. Цель проекта обеспечить оптимальный баланс скорости, стоимости и качества, т.е. получать ответ достаточного качества быстрее и дешевле. Показываю, как поставить пакет, отправить первый запрос, обучить маршрутизатор LLM и агентов на отзывах, а также подключить своих кандидатов.</p> <a href="https://habr.com/ru/articles/1101942/?utm_campaign=1101942&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sat, 31 Oct 2026 08:53:46 GMT</pubDate>
      <dc:creator><![CDATA[Zachar_5]]></dc:creator>
      
      <category><![CDATA[NuGet]]></category><category><![CDATA[open source]]></category><category><![CDATA[LLM]]></category><category><![CDATA[AI]]></category><category><![CDATA[c#]]></category><category><![CDATA[маршрутизатор ии-моделей]]></category><category><![CDATA[ai-агенты]]></category><category><![CDATA[ии-агенты]]></category><category><![CDATA[.net]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Два клика — одна оплата: Форсаж вокруг платежного шлюза]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1102012/</guid>
      <link>https://habr.com/ru/articles/1102012/?utm_campaign=1102012&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/a5/6d/b7/a56db733832f0930233af4ed8ef6e81f.jpg" /><p>Два клика по&nbsp;кнопке оплаты. Два запроса к&nbsp;провайдеру. И внезапно один заказ превращается в&nbsp;две платежные сессии.</p><p>В&nbsp;этой статье разберём реальный кейс рефакторинга платёжной интеграции: начнём с&nbsp;наивного Create, попробуем локальные блокировки, столкнёмся с&nbsp;несколькими экземплярами сервиса и доберёмся до&nbsp;PostgreSQL advisory locks, идемпотентности и конкурентных Check/Cancel.</p><p>Немного C#, много PostgreSQL и чуть‑чуть «Форсажа». Посмотрим, как&nbsp;устроить гонку запросов так, чтобы победитель был только один.</p> <a href="https://habr.com/ru/articles/1102012/?utm_campaign=1102012&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Press W</a>]]></description>
      
      <pubDate>Sat, 31 Oct 2026 08:20:49 GMT</pubDate>
      <dc:creator><![CDATA[LittleDeveloper-CSharp]]></dc:creator>
      
      <category><![CDATA[PostgreSQL]]></category><category><![CDATA[.NET]]></category><category><![CDATA[race condition]]></category><category><![CDATA[конкурентность]]></category><category><![CDATA[advisory lock]]></category><category><![CDATA[идемпотентность]]></category><category><![CDATA[платежный шлюз]]></category><category><![CDATA[микросервисы]]></category><category><![CDATA[блокировки]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Интеграция без хаоса: почему настроить обмены между системами недостаточно]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/sofros/articles/1102000/</guid>
      <link>https://habr.com/ru/companies/sofros/articles/1102000/?utm_campaign=1102000&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/34/ff/60/34ff60b39c6485808fe94874275584df.jpg" /><p>На первый взгляд, интеграционный проект выглядит довольно понятно: есть несколько информационных систем, между ними нужно организовать обмен данными. Определяем форматы, настраиваем маршруты, проверяем передачу — можно запускать в эксплуатацию. Но в реальной корпоративной среде всё обычно сложнее. Системы развивались в разное время, часть интеграций создавалась под конкретные задачи, где-то работают собственные механизмы обмена, а где-то остались решения, о которых нынешняя ИТ-команда знает далеко не всё. Пока количество взаимодействий невелико, с этим можно жить. Проблемы становятся заметны, когда бизнес меняет процессы, появляются новые системы, растёт нагрузка или требуется заменить один из компонентов ИТ-ландшафта. Типовые проблемы компании в этой ситуации мы свели в одну картинку</p> <a href="https://habr.com/ru/articles/1102000/?utm_campaign=1102000&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sat, 31 Oct 2026 07:09:01 GMT</pubDate>
      <dc:creator><![CDATA[MarBra (SOFROS)]]></dc:creator>
      
      <category><![CDATA[интеграция систем]]></category><category><![CDATA[интеграция приложений]]></category><category><![CDATA[интеграция данных]]></category><category><![CDATA[интеграция с 1с]]></category><category><![CDATA[интеграционная платформа]]></category><category><![CDATA[datareon platform]]></category><category><![CDATA[low-code]]></category><category><![CDATA[проектирование]]></category><category><![CDATA[проектирование взаимодействия]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Заметочник для Windows на Markdown без WebView: C#, Avalonia и AvaloniaEdit, запуск за секунду]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1101886/</guid>
      <link>https://habr.com/ru/articles/1101886/?utm_campaign=1101886&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/cc/de/b3/ccdeb3ba43014146c1d78e36f22a9281.png" /><p>Я хотел заметочник, где заметки — обычные <code>.md</code>-файлы в обычной папке, есть <code>[[ссылки]]</code> с обратными ссылками и поиск, а текст сразу выглядит оформленным, без отдельной панели предпросмотра. И чтобы он запускался быстро, не тащил в память целый браузер и не требовал аккаунта. Готовые варианты почти все построены на WebView или Electron. Я написал свой: Leaflet, C# и Avalonia, без единой веб-страницы внутри. Расскажу, как он устроен и где пришлось повозиться.</p> <a href="https://habr.com/ru/articles/1101886/?utm_campaign=1101886&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 30 Oct 2026 17:20:56 GMT</pubDate>
      <dc:creator><![CDATA[OlegChe77]]></dc:creator>
      
      <category><![CDATA[markdown]]></category><category><![CDATA[avalonia]]></category><category><![CDATA[avaloniaedit]]></category><category><![CDATA[заметки]]></category><category><![CDATA[c#]]></category><category><![CDATA[skiasharp]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Статистика скачиваний релизов GitHub одним окном: WinForms-утилита в одном .cs-файле без Visual Studio]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1101148/</guid>
      <link>https://habr.com/ru/articles/1101148/?utm_campaign=1101148&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/c1/31/16/c13116946d1a2fd3a6bb245ec0ab1f5c.png" /><p>GitHub показывает звёзды и форки, но не показывает, сколько раз скачали файлы из релизов. Цифра есть в API, поле <code>download_count</code> у каждого ассета. Я захотел видеть её сразу по всем своим проектам, да ещё с историей, и написал утилиту. Ниже — как она устроена и на что я налетел.</p> <a href="https://habr.com/ru/articles/1101148/?utm_campaign=1101148&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Thu, 29 Oct 2026 10:30:12 GMT</pubDate>
      <dc:creator><![CDATA[OlegChe77]]></dc:creator>
      
      <category><![CDATA[github]]></category><category><![CDATA[github-api]]></category><category><![CDATA[winforms]]></category><category><![CDATA[c#]]></category><category><![CDATA[статистика]]></category><category><![CDATA[csc]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Macroscop Archive Tool]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1101108/</guid>
      <link>https://habr.com/ru/articles/1101108/?utm_campaign=1101108&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/5a/f8/a9/5af8a9e7f6d3e2a4f5bc7800413f4dac.png" /><p>На одном из 22 архивных дисков видеосервера посыпались ошибки SMART. На диске — 760 ГБ записей за полтора месяца, а штатный путь Macroscop «перестань писать на диск и дождись, пока архив устареет» занимает 90 дней.</p><p>Рассказываю, как мы перенесли архив в виртуальный диск, остановив Macroscop всего на несколько минут. Что нашлось в архиве по дороге: камеры, которые занимают лицензии и ничего не пишут, гигабайты забытых копий конфигурации, старый PostgreSQL. И почему из этого получилась открытая утилита для администраторов Macroscop — с отчётами, очисткой и мониторингом в Zabbix.</p><p>Исходный код: <a href="https://github.com/D3vil787/MacroscopArchiveTool" rel="noopener nofollow">github.com/D3vil787/MacroscopArchiveTool</a></p> <a href="https://habr.com/ru/articles/1101108/?utm_campaign=1101108&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Как мы это сделали</a>]]></description>
      
      <pubDate>Thu, 29 Oct 2026 09:33:53 GMT</pubDate>
      <dc:creator><![CDATA[Markovich_Anton]]></dc:creator>
      
      <category><![CDATA[Macroscop]]></category><category><![CDATA[видеонаблюдение]]></category><category><![CDATA[видеоархив]]></category><category><![CDATA[iSCSI]]></category><category><![CDATA[VHDX]]></category><category><![CDATA[Zabbix]]></category><category><![CDATA[Windows Server]]></category><category><![CDATA[C#]]></category><category><![CDATA[open source]]></category><category><![CDATA[вывод диска]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Поддержка нескольких реляционных СУБД в одном проекте: PostgreSQL и MSSQL]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1101106/</guid>
      <link>https://habr.com/ru/articles/1101106/?utm_campaign=1101106&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/3c/99/39/3c99398a40edf46f0dd67a0384bb159c.png" /><p><strong>Как поддерживать PostgreSQL и MSSQL в одном приложении, сохраняя единую кодовую базу? </strong></p><p>На примере iLocks Online разбираем выбор провайдера в EF Core, отдельные наборы миграций, различия в последовательностях, типах данных и именовании объектов. Рассказываем, что необходимо проверять на обеих СУБД и почему подключения двух провайдеров недостаточно для полноценной совместимости.</p> <a href="https://habr.com/ru/articles/1101106/?utm_campaign=1101106&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать кейс</a>]]></description>
      
      <pubDate>Thu, 29 Oct 2026 09:30:20 GMT</pubDate>
      <dc:creator><![CDATA[iLocks]]></dc:creator>
      
      <category><![CDATA[PostgreSQL]]></category><category><![CDATA[MSSQL]]></category><category><![CDATA[Entity Framework Core]]></category><category><![CDATA[C#]]></category><category><![CDATA[.NET]]></category><category><![CDATA[LINQ]]></category><category><![CDATA[миграции]]></category><category><![CDATA[СУБД]]></category><category><![CDATA[интеграционное тестирование]]></category><category><![CDATA[iLocks Online]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Где Runtime Async в .NET 11 экономит память, а где нет]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/otus/articles/1088900/</guid>
      <link>https://habr.com/ru/companies/otus/articles/1088900/?utm_campaign=1088900&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/fa/f7/92/faf7925ecc7ab63f00dfdcba16c06bac.png" /><p>В.NET 11&nbsp;привычный механизм <code>async/await</code> меняется: управление приостановкой методов переходит к&nbsp;рантайму, а&nbsp;JIT получает новые возможности для&nbsp;оптимизации. Но&nbsp;насколько это снижает аллокации в&nbsp;реальном коде и почему результаты замеров иногда противоречат друг другу? Разбираем Runtime Async на&nbsp;примере бенчмарков, сравниваем результаты с&nbsp;классической реализацией и выясняем, в&nbsp;каких сценариях выигрыш действительно заметен.</p> <a href="https://habr.com/ru/articles/1088900/?utm_campaign=1088900&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Изучить результаты тестов</a>]]></description>
      
      <pubDate>Wed, 28 Oct 2026 14:46:29 GMT</pubDate>
      <dc:creator><![CDATA[sproshchaev (OTUS)]]></dc:creator>
      
      <category><![CDATA[.NET 11]]></category><category><![CDATA[Runtime Async]]></category><category><![CDATA[C#]]></category><category><![CDATA[асинхронное программирование]]></category><category><![CDATA[оптимизация памяти]]></category><category><![CDATA[производительность .NET]]></category><category><![CDATA[JIT-компиляция]]></category><category><![CDATA[аллокации памяти]]></category><category><![CDATA[BenchmarkDotNet]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[.NET MAUI-приложение падает после сборки в Xcode 27: UIScene, плавающая панель iOS 26 и что ещё пришлось поправить]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1100476/</guid>
      <link>https://habr.com/ru/articles/1100476/?utm_campaign=1100476&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/21/9a/ce/219aceeaa8fead591611e422c9313ce6.jpg" /><p>Собрала .NET MAUI-приложение в Xcode 27, поставила на iPad — и оно упало сразу при запуске. А после того как я это починила, оказалось, что интерфейс не дружит с плавающей панелью вкладок из iOS 26: под ней пустая полоса, линия-разделитель висит в воздухе, карта обрезается.</p><p>В этой статье — что именно сломалось и как я это исправила: переход на UIScene, без которого приложение не запускается, и адаптация страниц под плавающую панель через <code>SafeAreaEdges</code>. Весь код — из рабочего приложения для торговых представителей, о котором я писала в <a href="https://habr.com/ru/articles/1098426/" rel="noopener nofollow">первой</a> и <a href="https://habr.com/ru/articles/1099326/" rel="noopener nofollow">второй</a> статьях.</p><p>Спойлер: платформенного кода получилось немного — один класс на 60 строк, один стиль и пара файлов для запуска. А ушло на всё два с половиной дня</p> <a href="https://habr.com/ru/articles/1100476/?utm_campaign=1100476&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Узнать, как это задизайнено</a>]]></description>
      
      <pubDate>Wed, 28 Oct 2026 08:53:16 GMT</pubDate>
      <dc:creator><![CDATA[ol1vvvka]]></dc:creator>
      
      <category><![CDATA[.NET MAUI]]></category><category><![CDATA[iOS 26]]></category><category><![CDATA[Liquid Glass]]></category><category><![CDATA[Xcode 27]]></category><category><![CDATA[UIScene]]></category><category><![CDATA[SafeAreaEdges]]></category><category><![CDATA[Shell]]></category><category><![CDATA[TabBar]]></category><category><![CDATA[iPad]]></category><category><![CDATA[WebView]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[DDD в веб-консоли для LDAP: что сработало, что пришлось выкинуть и почему границы слоёв теперь проверяют тесты]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1099938/</guid>
      <link>https://habr.com/ru/articles/1099938/?utm_campaign=1099938&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/34/c7/61/34c761018bb861161f3af7f790194b0e.png" /><p>Axia — open-source веб-консоль для Active Directory и OpenLDAP на .NET 10. Начиналась она с учебного DDD: агрегаты, доменные события, MediatR. После нескольких ревью безопасности от этого осталась половина. Главная причина: данные принадлежат каталогу, а не нам, и агрегат User с инвариантами оказался фикцией. Рассказываю, что окупилось (value objects, порты и адаптеры, тесты на границы слоёв), что пришлось выкинуть (аудит на доменных событиях) и почему самое важное правило безопасности так и не поместилось в домен.</p> <a href="https://habr.com/ru/articles/1099938/?utm_campaign=1099938&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 27 Oct 2026 09:01:14 GMT</pubDate>
      <dc:creator><![CDATA[Nurlan-Turkpenbay]]></dc:creator>
      
      <category><![CDATA[ldap]]></category><category><![CDATA[ldapadmin]]></category><category><![CDATA[ldaps]]></category><category><![CDATA[activedirectory]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Очередь на Postgres: масштабирование, inbox и сравнение с Kafka и RabbitMq]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1099894/</guid>
      <link>https://habr.com/ru/articles/1099894/?utm_campaign=1099894&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/fb/4a/fb/fb4afbb67f31e039d47e2301285e2a32.jpg" /><p><a href="https://habr.com/ru/articles/1082062/" rel="noopener nofollow">В прошлой статье</a> я утверждал, что Kafka не нужна, если событие и результат бизнес-операции пишутся в PostgreSQL одной транзакцией. Только ленивый не написал <em>Главное Возражение</em> в комментариях: слот логической репликации не делится между читателями, каждый вычитывает журнал целиком — значит, читатели и станут узким местом.</p><p>Я решил проверить это утверждение. Сравнить сколько ресурсов потребляют консьюмеры очередей по сравнению сравнению с чтением логической репликации при увеличении их количества.</p><p>Это не вердикт по выбору транспорта: в конце будут условия, при которых брокер нужен, и они следуют из тех же цифр.</p> <a href="https://habr.com/ru/articles/1099894/?utm_campaign=1099894&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 27 Oct 2026 08:20:24 GMT</pubDate>
      <dc:creator><![CDATA[gandjustas]]></dc:creator>
      
      <category><![CDATA[Postgres]]></category><category><![CDATA[WAL]]></category><category><![CDATA[лоигческая репликация]]></category><category><![CDATA[kafka]]></category><category><![CDATA[rabbitmq]]></category><category><![CDATA[dotnet]]></category><category><![CDATA[c#]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[C# теперь в GigaIDE: бесплатно и в одном окне]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/sberbank/articles/1098358/</guid>
      <link>https://habr.com/ru/companies/sberbank/articles/1098358/?utm_campaign=1098358&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/40/db/0e/40db0edd48d41d34d18db62ec9e81d69.jpg" /><p>Типичная картина: в одном проекте Backend на Java, вспомогательные сервисы на Python, интерфейс на TypeScript, а один микросервис — на C#. Знакомо? Последний компонент часто означает вторую IDE, другие горячие клавиши, отдельные настройки и постоянные переключения между средами. <strong><a href="https://gitverse.ru/features/gigaide/marketplace/?plugin=com.gigaide.csharp">В GigaIDE появилась поддержка C# и .NET</a></strong>. C# больше не требует отдельной IDE: разработка ведётся в единой среде, без переключений и потери контекста. <strong><a href="https://gitverse.ru/features/gigaide/desktop/download/">Функция доступна бесплатно в Community-режиме</a></strong>.</p> <a href="https://habr.com/ru/articles/1098358/?utm_campaign=1098358&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Mon, 26 Oct 2026 09:49:30 GMT</pubDate>
      <dc:creator><![CDATA[GIGAIDECommunity (Сбер)]]></dc:creator>
      
      <category><![CDATA[gigaide]]></category><category><![CDATA[c#]]></category><category><![CDATA[c#.net]]></category><category><![CDATA[базы данных]]></category><category><![CDATA[community]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Почему тормозят списки в .NET MAUI: замеры на слабом планшете и что реально помогло]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1099326/</guid>
      <link>https://habr.com/ru/articles/1099326/?utm_campaign=1099326&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/4c/e6/fe/4ce6feae9a0d1fba4b3d6e9ab75a0ae6.jpg" /><p>В <a href="https://habr.com/ru/articles/1098426/" rel="noopener nofollow">прошлой статье</a> я рассказывала, как переводила приложение для торговых представителей с Xamarin.Forms на .NET MAUI. Там был короткий раздел про жалобы агентов на «тормоза»: бенчмарки показывали, что логика работает быстро, а проблема была в отрисовке списков. В этой статье — подробно: как я это мерила, что делала три с половиной месяца и что в итоге получилось в цифрах.</p><p>Спойлер: на слабом планшете новая версия листает каталог почти в 4 раза быстрее старой. Но идеала я не достигла, и про это тоже расскажу честно.</p> <a href="https://habr.com/ru/articles/1099326/?utm_campaign=1099326&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Узнать, что горит</a>]]></description>
      
      <pubDate>Mon, 26 Oct 2026 06:33:49 GMT</pubDate>
      <dc:creator><![CDATA[ol1vvvka]]></dc:creator>
      
      <category><![CDATA[.NET MAUI]]></category><category><![CDATA[CollectionView]]></category><category><![CDATA[производительность]]></category><category><![CDATA[Android]]></category><category><![CDATA[RecyclerView]]></category><category><![CDATA[gfxinfo]]></category><category><![CDATA[оптимизация UI]]></category><category><![CDATA[Xamarin.Forms]]></category><category><![CDATA[мобильная разработка]]></category><category><![CDATA[C#]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Вайбкодинг: что дальше?]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1098676/</guid>
      <link>https://habr.com/ru/articles/1098676/?utm_campaign=1098676&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/e7/30/85/e73085cf86df47de2cab819a00965a6c.png" /><p>Агенты стали новой средой разработки, которая фактически заменяет существующие IDE. Новые методы разработки (вайбкодинг, промпт инженеринг, харнесс инженеринг) заменяют прежние подходы. Статья относится к агентской разработке и описывает скилл, который позволяет решать большие и сложные задачи.</p> <a href="https://habr.com/ru/articles/1098676/?utm_campaign=1098676&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 23 Oct 2026 15:33:46 GMT</pubDate>
      <dc:creator><![CDATA[AlexeyShirshov]]></dc:creator>
      
      <category><![CDATA[software engineering]]></category><category><![CDATA[skills для ai-агентов]]></category><category><![CDATA[opencode]]></category><category><![CDATA[dotnet]]></category><category><![CDATA[prompt-engineering]]></category><category><![CDATA[harness engineering]]></category><category><![CDATA[vibecoding]]></category><category><![CDATA[vibe coding]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Публикуем .NET MAUI‑приложение в RuStore: от унаследованного Xamarin‑проекта до первого релиза]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1098426/</guid>
      <link>https://habr.com/ru/articles/1098426/?utm_campaign=1098426&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/e7/3e/9d/e73e9d9f6816984c4ed7dae6253ca1d5.jpg" /><p>Миграция с&nbsp;Xamarin.Forms на.NET MAUI, десятки тысяч строк чужого кода, несколько неудачных попыток переписывания и первая публикация приложения в&nbsp;RuStore. Расскажу, как&nbsp;проходил этот путь, с&nbsp;какими трудностями столкнулась и что&nbsp;стоит учесть при&nbsp;подготовке Android‑приложения к&nbsp;публикации. А&nbsp;в&nbsp;конце&nbsp;— о&nbsp;том, что&nbsp;ждёт впереди: переход на&nbsp;новую версию на&nbsp;iPad.</p> <a href="https://habr.com/ru/articles/1098426/?utm_campaign=1098426&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать про миграцию и RuStore</a>]]></description>
      
      <pubDate>Fri, 23 Oct 2026 11:10:31 GMT</pubDate>
      <dc:creator><![CDATA[ol1vvvka]]></dc:creator>
      
      <category><![CDATA[.NET MAUI]]></category><category><![CDATA[Xamarin.Forms]]></category><category><![CDATA[миграция]]></category><category><![CDATA[RuStore]]></category><category><![CDATA[C#]]></category><category><![CDATA[Android]]></category><category><![CDATA[публикация приложения]]></category><category><![CDATA[CollectionView]]></category><category><![CDATA[мобильная разработка]]></category><category><![CDATA[iPad]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Реверс‑инжиниринг и криптография: заставляем десктопные USB‑токены работать на Android]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1098398/</guid>
      <link>https://habr.com/ru/articles/1098398/?utm_campaign=1098398&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/35/46/09/354609327d1617161700881f1cb7a10a.png" /><p>Адаптируем десктопные USB‑токены для&nbsp;работы на&nbsp;мобильных устройствах. Даже если производитель не&nbsp;закладывал поддержку мобильных устройств, это исправимо.</p> <a href="https://habr.com/ru/articles/1098398/?utm_campaign=1098398&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Fri, 23 Oct 2026 10:36:27 GMT</pubDate>
      <dc:creator><![CDATA[summertime_fun]]></dc:creator>
      
      <category><![CDATA[криптография]]></category><category><![CDATA[информационная безопасность]]></category><category><![CDATA[реверс-инжиниринг]]></category><category><![CDATA[криптографические протоколы]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Почему число это плохой адрес для инструкции?]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1097574/</guid>
      <link>https://habr.com/ru/articles/1097574/?utm_campaign=1097574&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/18/97/05/189705a4b6345bf186739fb98a976cb4.png" /><p>В какой-то момент <a href="https://github.com/Stepami/hydrascript" rel="noopener nofollow">HydraScript</a> перестал справляться со своей основной задачей — выполнять программы. Статический анализ падал на корректном коде, и его пришлось отключить. Кодогенерация назначала инструкциям неверные адреса: виртуальная машина зацикливалась или падала с исключением.</p><p>Логика анализа и генерации кода была размазана по иерархии узлов AST. Добавлять возможности языка становилось всё сложнее, а разобраться в очередном баге было отдельной задачей. Пришлось остановиться и подумать, как вообще дальше развивать проект. Я решил отделить операции от дерева и выбрал для этого Visitor.</p> <a href="https://habr.com/ru/articles/1097574/?utm_campaign=1097574&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 21 Oct 2026 21:32:46 GMT</pubDate>
      <dc:creator><![CDATA[Stefanio]]></dc:creator>
      
      <category><![CDATA[компиляторы]]></category><category><![CDATA[compilers]]></category><category><![CDATA[codegen]]></category><category><![CDATA[кодогенерация]]></category><category><![CDATA[адрес]]></category><category><![CDATA[addressing]]></category><category><![CDATA[инструкция]]></category><category><![CDATA[instruction]]></category><category><![CDATA[intermediate representation]]></category><category><![CDATA[трехадресный код]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Обзор нововведений в C# 15]]></title>
      <guid isPermaLink="true">https://habr.com/ru/companies/pvs-studio/articles/1097064/</guid>
      <link>https://habr.com/ru/companies/pvs-studio/articles/1097064/?utm_campaign=1097064&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/a7/17/45/a7174582047b9550b4494308ea58eb0b.png" /><p>Совсем скоро нам станет полноценно доступна новая версия C#, и мы продолжаем наш ежегодный цикл обзора нововведений. В этот раз команда Microsoft приготовила нам ряд очень интересных и ожидаемых изменений. Предлагаю рассмотреть их подробно.</p> <a href="https://habr.com/ru/articles/1097064/?utm_campaign=1097064&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Wed, 21 Oct 2026 06:50:41 GMT</pubDate>
      <dc:creator><![CDATA[zinduro (PVS-Studio)]]></dc:creator>
      
      <category><![CDATA[C#]]></category><category><![CDATA[C# 15]]></category><category><![CDATA[csharp]]></category><category><![CDATA[dotnet]]></category><category><![CDATA[.NET]]></category><category><![CDATA[нововведения C#]]></category><category><![CDATA[PVS-Studio]]></category><category><![CDATA[C# union]]></category><category><![CDATA[C# union типы]]></category><category><![CDATA[C# closed hierarchies]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Веб-консоль для Active Directory и OpenLDAP: как не дать хелпдеску сбросить пароль администратору]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1096656/</guid>
      <link>https://habr.com/ru/articles/1096656/?utm_campaign=1096656&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/b2/e9/11/b2e91153bbbf5b7561762a5a0044b08c.jpg" /><p>Почти в каждой компании с Active Directory или OpenLDAP есть одна и та же рутина: завести сотрудника, сбросить пароль, добавить в группу, отключить уволенного. Её хочется отдать хелпдеску, но так, чтобы хелпдеск не мог сделать себя администратором, а каждое действие оставляло след.</p><p>Под эту задачу я пишу Axia — веб-консоль и REST API для AD и OpenLDAP с открытым кодом. Статья не про её возможности, а про грабли: пять мест, где очевидная реализация оказалась дырой или багом, — от переноса OU, который позволял сбросить пароль администратору, до атаки LDAP pass-back.</p> <a href="https://habr.com/ru/articles/1096656/?utm_campaign=1096656&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 20 Oct 2026 09:43:08 GMT</pubDate>
      <dc:creator><![CDATA[Nurlan-Turkpenbay]]></dc:creator>
      
      <category><![CDATA[active directory]]></category><category><![CDATA[openldap]]></category><category><![CDATA[аудит]]></category><category><![CDATA[.net]]></category><category><![CDATA[open source]]></category><category><![CDATA[ldap]]></category><category><![CDATA[делегирование прав]]></category><category><![CDATA[эскалация привилегий]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Scrutor: логирование отменённых HTTP-запросов]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1096632/</guid>
      <link>https://habr.com/ru/articles/1096632/?utm_campaign=1096632&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<p>Представьте клиент-серверную архитектуру, где фронтенд написан на React, бэкенд — на ASP.NET Core, а для логирования на стороне бэкенда используется <a href="https://github.com/nlog/NLog" rel="noopener nofollow">NLog</a>.</p><p>Иногда может происходить следующий сценарий: пользователь находится на веб-странице и выполняет какое-то действие (например, нажимает на кнопку «Обновить»). В этот момент фронтенд присылает HTTP запрос на бэкенд, и по какой-то причине этот запрос начинает долго обрабатываться на бэкенде. В это время пользователь уходит со страницы, браузер присылает отмену запроса, бэкенд получает сигнал отмены (<a href="https://github.com/dotnet/dotnet/blob/b0f34d51fccc69fd334253924abd8d6853fad7aa/src/runtime/src/libraries/System.Private.CoreLib/src/System/Threading/CancellationToken.cs" rel="noopener nofollow"><code>CancellationToken</code></a>), выбрасывается <a href="https://github.com/dotnet/dotnet/blob/b0f34d51fccc69fd334253924abd8d6853fad7aa/src/runtime/src/libraries/System.Private.CoreLib/src/System/OperationCanceledException.cs" rel="noopener nofollow"><code>OperationCanceledException</code></a>, и в логи улетает полноценная ошибка.</p><p>С точки зрения observability такие логи — чистый шум: это штатная ситуация, ошибки бэкенда тут нет, и реагировать на неё технической поддержке или разработчикам не на что. Но сам факт таких логов — это проблема: они засоряют файлы, на основе которых строятся отчёты о работоспособности системы, и приучают команду игнорировать алерты («опять эти отмены»).</p><p>Рассказываю, почему стандартные фильтры NLog или кастомные Middleware не решают эту проблему системно. Разбираем, как с помощью библиотеки <a href="https://github.com/khellang/Scrutor" rel="noopener nofollow">Scrutor</a> динамически декорировать <a href="https://github.com/dotnet/dotnet/blob/3551975be08744f0418857c5bed8ab1545c5dd47/src/runtime/src/libraries/Microsoft.Extensions.Logging.Abstractions/src/ILoggerProvider.cs" rel="noopener nofollow"><code>ILoggerProvider</code></a> и глушить логи отмен на уровне рантайма без размазывания <code>try/catch</code> по контроллерам. Внутри — анализ подводных камней, бенчмарки и ссылка на репозиторий с тестами.</p> <a href="https://habr.com/ru/articles/1096632/?utm_campaign=1096632&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 20 Oct 2026 09:06:03 GMT</pubDate>
      <dc:creator><![CDATA[alexeysp11]]></dc:creator>
      
      <category><![CDATA[c#]]></category><category><![CDATA[.net]]></category><category><![CDATA[asp.net core]]></category><category><![CDATA[logging]]></category><category><![CDATA[dependency injection]]></category><category><![CDATA[ioc]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[Оптимизируем отпуск как инженеры: искусство продавать выходные]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1096432/</guid>
      <link>https://habr.com/ru/articles/1096432/?utm_campaign=1096432&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/46/ad/e8/46ade8a294c145f5725e952569be8115.jpg" /><p>Каждую осень HR просит запланировать отпуска на следующий год. Обычно люди сразу берут между майскими, кто-то подбирает даны под день народного единства, а многие просто ставят на декабрь, чтобы потом двигать можно было.</p><p>А я задался вопросом - можно ли найти оптимальный отпуск под запросы и открыл VS Code\Jupiter с F# (пока оно еще работает). Всё живёт в Jupyter-ноутбуке с ядром .NET Interactive — да, F# умеет в ноутбуки, питонисты, не ревнуйте.</p><p>Спойлер: солвер нашёл способ заработать на отпуске 85 тысяч. Мне не понравилось.</p> <a href="https://habr.com/ru/articles/1096432/?utm_campaign=1096432&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Tue, 20 Oct 2026 07:52:50 GMT</pubDate>
      <dc:creator><![CDATA[gandjustas]]></dc:creator>
      
      <category><![CDATA[f#]]></category><category><![CDATA[dotnet]]></category><category><![CDATA[ortools]]></category><category><![CDATA[cp-solver]]></category><category><![CDATA[math.net numerics]]></category><category><![CDATA[отпуск]]></category><category><![CDATA[c#]]></category>
    </item>
  

  

  

	
  

  

  

    
    <item>
      <title><![CDATA[300 тысяч job в час: как неправильный порядок Dispose в Serilog устроил утечку памяти]]></title>
      <guid isPermaLink="true">https://habr.com/ru/articles/1095836/</guid>
      <link>https://habr.com/ru/articles/1095836/?utm_campaign=1095836&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
      <description><![CDATA[<img src="https://habrastorage.org/extt/38/3b/b1/383bb1ef402ef39704b668ca8ff16e63.png" /><p>Периодически срабатывали алерты по памяти и CPU. Я начал расследование. Но расследование в итоге привело совсем в другое место – к Serilog.Context.</p><p>В результате удалось решить две независимые проблемы:</p> <a href="https://habr.com/ru/articles/1095836/?utm_campaign=1095836&amp;utm_source=habrahabr&amp;utm_medium=rss#habracut">Читать далее</a>]]></description>
      
      <pubDate>Sun, 18 Oct 2026 12:30:52 GMT</pubDate>
      <dc:creator><![CDATA[zig8953]]></dc:creator>
      
      <category><![CDATA[hangfire]]></category><category><![CDATA[dump]]></category><category><![CDATA[job]]></category><category><![CDATA[serilog]]></category><category><![CDATA[c#]]></category><category><![CDATA[.net]]></category>
    </item>
  

  

  

	
  

  

  

      

      

      

    
  </channel>
</rss>
