🔐 «Не одобряй собственные расходы» — такое правило нужно проверять на сервере
Тайсир Джуде показывает, как защитить MCP-сервер на ASP.NET Core через Microsoft Entra ID.
На примере приложения для учёта расходов автор разбирает:
• Регистрацию сервера и клиента в Entra ID.
• Вход пользователя и проверку JWT-токенов.
• Разницу между scope - разрешением приложению действовать от имени пользователя — и ролью, позволяющей одобрять расходы.
• Ограничение доступа к отдельным MCP-инструментам и фильтрацию списка доступных tools.
Самый показательный момент: пользователь с ролью согласующего может одобрить чужой отчёт, но свой сервер отклонит. Личность определяется по токену, а бизнес-правило проверяется в коде.
Модель выбирает, какой инструмент вызвать. Сервер решает, разрешено ли выполнить действие.
📖 https://bitoftech.net/2026/10/13/securing-mcp-server-microsoft-entra-id/
#aspnetcore #dotnet #mcp
Тайсир Джуде показывает, как защитить MCP-сервер на ASP.NET Core через Microsoft Entra ID.
На примере приложения для учёта расходов автор разбирает:
• Регистрацию сервера и клиента в Entra ID.
• Вход пользователя и проверку JWT-токенов.
• Разницу между scope - разрешением приложению действовать от имени пользователя — и ролью, позволяющей одобрять расходы.
• Ограничение доступа к отдельным MCP-инструментам и фильтрацию списка доступных tools.
Самый показательный момент: пользователь с ролью согласующего может одобрить чужой отчёт, но свой сервер отклонит. Личность определяется по токену, а бизнес-правило проверяется в коде.
Модель выбирает, какой инструмент вызвать. Сервер решает, разрешено ли выполнить действие.
📖 https://bitoftech.net/2026/10/13/securing-mcp-server-microsoft-entra-id/
#aspnetcore #dotnet #mcp
«Ускорь этот C#-код» — полезнее просить ИИ вместе с инструкцией, как измерять результат.
BlazingFastDotnet — сборник приёмов оптимизации .NET 10 и 11, упакованный в
Внутри:
- Поиск узких мест:
- Память и многопоточность: аллокации, GC, конкуренция за блокировки и false sharing.
- Настройка выполнения: ThreadPool, сокеты, JIT и параметры NativeAOT.
- Оптимизация C#: SIMD, работа со строками и ASP.NET Core.
Автор предлагает подключать документ по необходимости, когда появилась конкретная задача ускорения.
Порядок работы простой: замерить исходную производительность → найти причину → менять по одному параметру → сохранять только измеримый выигрыш.
Часть рекомендаций рассчитана прежде всего на бенчмарки. Настройки могут обменивать память на скорость или увеличивать нагрузку на CPU, поэтому переносить их в продакшен стоит после проверки на своей нагрузке.
https://github.com/EgorBo/BlazingFastDotnet
BlazingFastDotnet — сборник приёмов оптимизации .NET 10 и 11, упакованный в
SKILL.md для ИИ-агентов. Его можно читать и как обычный технический справочник.Внутри:
- Поиск узких мест:
dotnet-counters, dotnet-trace, Linux perf и анализ машинного кода JIT.- Память и многопоточность: аллокации, GC, конкуренция за блокировки и false sharing.
- Настройка выполнения: ThreadPool, сокеты, JIT и параметры NativeAOT.
- Оптимизация C#: SIMD, работа со строками и ASP.NET Core.
Автор предлагает подключать документ по необходимости, когда появилась конкретная задача ускорения.
Порядок работы простой: замерить исходную производительность → найти причину → менять по одному параметру → сохранять только измеримый выигрыш.
Часть рекомендаций рассчитана прежде всего на бенчмарки. Настройки могут обменивать память на скорость или увеличивать нагрузку на CPU, поэтому переносить их в продакшен стоит после проверки на своей нагрузке.
https://github.com/EgorBo/BlazingFastDotnet
💻️️️️️️ Rate Limiting в ASP.NET Core: четыре алгоритма, которые ограничивают нагрузку по-разному.
Антон Мартынюк разобрал их с примерами на C# и сценариями применения.
Fixed Window – фиксированное окно
Например, 100 запросов за минуту. После сброса счётчика лимит доступен заново. Подвох: 100 запросов перед границей окна и ещё 100 сразу после могут пройти почти одновременно.
Sliding Window – скользящее окно
Делит окно на сегменты и постепенно освобождает использованные разрешения. Сглаживает всплески на границах окон; точность зависит от размера сегментов.
Token Bucket – корзина токенов
Каждый запрос расходует токен, запас регулярно пополняется. Позволяет отдельно настроить размер допустимого всплеска и устойчивую интенсивность запросов.
Concurrency Limiter – ограничение параллельности
Например, не больше пяти одновременно выполняющихся экспортов. Новое разрешение появляется после завершения запроса. Число последовательных запросов в минуту этот алгоритм не ограничивает.
В статье есть и практические ловушки:
- Именованная политика сама по себе не создаёт отдельный лимит каждому клиенту. Нужны разделы по IP, пользователю или API-ключу.
- За reverse proxy необходимо корректно настроить доверенные forwarded headers.
- Счётчики хранятся в памяти процесса. Несколько экземпляров приложения не получают общий лимит автоматически.
- Ответ 429 и обработку
https://antondevtips.com/blog/aspnet-core-rate-limiting-algorithms-explained
Антон Мартынюк разобрал их с примерами на C# и сценариями применения.
Fixed Window – фиксированное окно
Например, 100 запросов за минуту. После сброса счётчика лимит доступен заново. Подвох: 100 запросов перед границей окна и ещё 100 сразу после могут пройти почти одновременно.
Sliding Window – скользящее окно
Делит окно на сегменты и постепенно освобождает использованные разрешения. Сглаживает всплески на границах окон; точность зависит от размера сегментов.
Token Bucket – корзина токенов
Каждый запрос расходует токен, запас регулярно пополняется. Позволяет отдельно настроить размер допустимого всплеска и устойчивую интенсивность запросов.
Concurrency Limiter – ограничение параллельности
Например, не больше пяти одновременно выполняющихся экспортов. Новое разрешение появляется после завершения запроса. Число последовательных запросов в минуту этот алгоритм не ограничивает.
В статье есть и практические ловушки:
- Именованная политика сама по себе не создаёт отдельный лимит каждому клиенту. Нужны разделы по IP, пользователю или API-ключу.
- За reverse proxy необходимо корректно настроить доверенные forwarded headers.
- Счётчики хранятся в памяти процесса. Несколько экземпляров приложения не получают общий лимит автоматически.
- Ответ 429 и обработку
Retry-After нужно настроить явно.https://antondevtips.com/blog/aspnet-core-rate-limiting-algorithms-explained
C# в WebAssembly: около 48 КБ вместе с рантаймом и сборщиком мусора
NetWasm - независимый компилятор и SDK, который превращает C# в компактный Wasm-модуль. Для запуска достаточно WebAssembly-хоста: устанавливать .NET на целевой машине не нужно.
Компилятор оставляет только используемый код и необходимые части собственного рантайма. В поставку не попадают Mono,
В тесте автора программа, выводящая
- NetWasm — 47 895 байт, включая GC.
- Rust — 53 635 байт с настройками оптимизации размера.
Оба результата — компоненты WASI Preview 2. Это сравнение одной небольшой программы, а не универсальная победа C# над Rust.
Уже доступны LINQ, HTTP, JSON, XML, Regex, экспорт в JavaScript и запуск в Web Workers.
Ограничения есть: проект ещё до версии 1.0, поддерживает часть .NET API; нет полноценной runtime-рефлексии,
https://github.com/zion-sati/NetWasm
NetWasm - независимый компилятор и SDK, который превращает C# в компактный Wasm-модуль. Для запуска достаточно WebAssembly-хоста: устанавливать .NET на целевой машине не нужно.
Компилятор оставляет только используемый код и необходимые части собственного рантайма. В поставку не попадают Mono,
dotnet.js и DLL приложения.В тесте автора программа, выводящая
42, занимает:- NetWasm — 47 895 байт, включая GC.
- Rust — 53 635 байт с настройками оптимизации размера.
Оба результата — компоненты WASI Preview 2. Это сравнение одной небольшой программы, а не универсальная победа C# над Rust.
Уже доступны LINQ, HTTP, JSON, XML, Regex, экспорт в JavaScript и запуск в Web Workers.
Ограничения есть: проект ещё до версии 1.0, поддерживает часть .NET API; нет полноценной runtime-рефлексии,
dynamic и управляемых потоков. Совместимость с NuGet зависит от используемых API. У компилятора отдельная Community License с условиями для коммерческого использования.https://github.com/zion-sati/NetWasm
📄️️️️️️ G# - язык для .NET с синтаксисом в духе Go и Python и возможностями Kotlin и Swift.
Идея проекта - предложить другой способ писать под CLR, сохранив доступ к библиотекам .NET и NuGet.
Пример кода:
Что ещё есть:
- Контроль `null`: отдельный тип
- Конкурентность: каналы
- Совместимость с .NET: LINQ, P/Invoke, события и обычные сборки, доступные из C# и F#.
- Инструменты: языковой сервер, расширения для VS Code и Visual Studio, REPL, форматтер и конвертер C# → G#.
Для запуска нужен .NET 10 SDK:
Проект открыт под MIT. Производительность и полноту совместимости стоит оценивать отдельно: сам набор возможностей ещё не доказывает готовность языка к вашему проекту.
https://github.com/DavidObando/gsharp
Идея проекта - предложить другой способ писать под CLR, сохранив доступ к библиотекам .NET и NuGet.
Пример кода:
package hello
import System
data class Point(X int32, Y int32)
let origin = Point(0, 0)
let moved = origin with { X = 3 }
Console.WriteLine(moved == Point(3, 0))
// True
data class даёт структурное сравнение, а with создаёт копию с изменёнными полями.Что ещё есть:
- Контроль `null`: отдельный тип
T?, конструкции if let, guard let, операторы ?. и ??.- Конкурентность: каналы
chan, запуск задач через go и блоки scope, которые дожидаются дочерних задач и передают их ошибки.- Совместимость с .NET: LINQ, P/Invoke, события и обычные сборки, доступные из C# и F#.
- Инструменты: языковой сервер, расширения для VS Code и Visual Studio, REPL, форматтер и конвертер C# → G#.
Для запуска нужен .NET 10 SDK:
dotnet new install Gsharp.Templates
dotnet new gsharp-console -n MyApp
cd MyApp
dotnet run
Проект открыт под MIT. Производительность и полноту совместимости стоит оценивать отдельно: сам набор возможностей ещё не доказывает готовность языка к вашему проекту.
https://github.com/DavidObando/gsharp
🕵️ Проверь, сколько ты стоишь для злоумышленника
Твоя почта, пароли и история заказов где-то уже продаются оптом. Вопрос только в том, понимаешь ли ты, как это работает и как с этим быть.
CyberYozh собрал ответ в бесплатный мини-курс прямо в Telegram. Без сайтов и регистраций: открыл приложение в мессенджере и проходишь в своём темпе.
➡️ Запустить курс в Telegram
Четыре коротких модуля:
Внутри ещё можно бесплатно записаться на личный разбор карьерного трека в ИБ.
Твоя почта, пароли и история заказов где-то уже продаются оптом. Вопрос только в том, понимаешь ли ты, как это работает и как с этим быть.
CyberYozh собрал ответ в бесплатный мини-курс прямо в Telegram. Без сайтов и регистраций: открыл приложение в мессенджере и проходишь в своём темпе.
➡️ Запустить курс в Telegram
Четыре коротких модуля:
🟦 за какими данными на самом деле охотятся;
🟦 как собирается цепочка "угроза → уязвимость → атака" на реальных примерах;
🟦 базовый алгоритм, чтобы защитить себя и свои системы;
🟦 какие профессии есть в ИБ, кто чем занимается и сколько платят.
Внутри ещё можно бесплатно записаться на личный разбор карьерного трека в ИБ.
C#-ловушка
Всего несколько строк. Никаких потоков,
Что выведет этот код?
Варианты ответа:
А)
Б)
В) Ошибка компиляции
Г)
Какой вариант выбираете?
Всего несколько строк. Никаких потоков,
async/await или хитрых библиотек.Что выведет этот код?
var h = new Holder();
h.Counter.Inc();
Console.WriteLine(h.Counter.Value);
struct Counter
{
public int Value;
public void Inc() => Value++;
}
class Holder
{
public Counter Counter { get; set; }
}
Варианты ответа:
А)
0 Б)
1 В) Ошибка компиляции
Г)
NullReferenceExceptionКакой вариант выбираете?
ИИ за сутки подготовил 90 оптимизаций ASP.NET Core всего за $230
Дэвид Фаулер из Microsoft провёл эксперимент: запустил AI-агентов на базе Claude Opus 5.5, чтобы найти узкие места в ASP.NET Core и предложить исправления.
За один день агенты подготовили около 90 Pull Request с оптимизациями производительности.
Что удалось улучшить:
- Kestrel - уменьшить аллокации при обработке HTTP-запросов.
- Middleware - оптимизировать кеширование, сжатие и обработку запросов.
- Blazor - сократить накладные расходы при рендеринге.
- SignalR - ускорить обработку протоколов и сообщений.
- Identity - снизить расходы памяти при аутентификации.
Использовалась новая поддержка облачных агентов GitHub, представленная на GitHub Universe.
Стоимость эксперимента - около $230 за токены.
Причём агенты не ограничились генерацией кода: каждый PR сопровождается сравнительными бенчмарками BenchmarkDotNet.
На момент публикации изменения ещё проходили ревью и не были объединены с основной веткой. Реальный прирост производительности предстоит подтвердить.
90 потенциальных оптимизаций за день и $230. Интересно, сколько времени на такой объём исследований потребовалось бы команде разработчиков.
https://github.com/dotnet/aspnetcore/issues/70219
Дэвид Фаулер из Microsoft провёл эксперимент: запустил AI-агентов на базе Claude Opus 5.5, чтобы найти узкие места в ASP.NET Core и предложить исправления.
За один день агенты подготовили около 90 Pull Request с оптимизациями производительности.
Что удалось улучшить:
- Kestrel - уменьшить аллокации при обработке HTTP-запросов.
- Middleware - оптимизировать кеширование, сжатие и обработку запросов.
- Blazor - сократить накладные расходы при рендеринге.
- SignalR - ускорить обработку протоколов и сообщений.
- Identity - снизить расходы памяти при аутентификации.
Использовалась новая поддержка облачных агентов GitHub, представленная на GitHub Universe.
Стоимость эксперимента - около $230 за токены.
Причём агенты не ограничились генерацией кода: каждый PR сопровождается сравнительными бенчмарками BenchmarkDotNet.
На момент публикации изменения ещё проходили ревью и не были объединены с основной веткой. Реальный прирост производительности предстоит подтвердить.
90 потенциальных оптимизаций за день и $230. Интересно, сколько времени на такой объём исследований потребовалось бы команде разработчиков.
https://github.com/dotnet/aspnetcore/issues/70219
Campfire перенесли с Rails на C# и получили до 33× больше запросов в секунду.
По данным автора, версия совместима с исходной базой, файлами и cookies. В общем бенчмарке она лидирует в трёх сценариях, опережая реализации на Rust и C.
Ускорение обеспечила связка ИИ-агентов и профилировщика: найти узкое место, внести одно изменение, проверить результат.
Помогли изменения кеширования и работы с SQLite, повторное использование криптографических контекстов и сокращение логирования.
Основную прибавку дали архитектурные решения. На других маршрутах быстрее оказались C, Rust и Go.
Разбор в 11 частях: learninglinqpad.com/blog/2026/10/20/campfire-csharp-port-debrief/
Код, бенчмарки и результаты: github.com/ryanrodemoyer/once-campfire-csharp
По данным автора, версия совместима с исходной базой, файлами и cookies. В общем бенчмарке она лидирует в трёх сценариях, опережая реализации на Rust и C.
Ускорение обеспечила связка ИИ-агентов и профилировщика: найти узкое место, внести одно изменение, проверить результат.
Помогли изменения кеширования и работы с SQLite, повторное использование криптографических контекстов и сокращение логирования.
Основную прибавку дали архитектурные решения. На других маршрутах быстрее оказались C, Rust и Go.
Разбор в 11 частях: learninglinqpad.com/blog/2026/10/20/campfire-csharp-port-debrief/
Код, бенчмарки и результаты: github.com/ryanrodemoyer/once-campfire-csharp
Как Джон Кармак заставил DOOM работать без вычисления синусов и косинусов
В оригинальном DOOM 1993 года углы хранились в виде 32-битных целых чисел (`angle_t`), а полный оборот соответствовал \(2^{32}\) значениям.
Вместо постоянных вычислений тригонометрических функций движок использовал заранее подготовленные таблицы.
Например, чтобы получить синус угла, достаточно было обратиться к массиву:
Здесь происходит обычный битовый сдвиг и чтение элемента массива. Никаких вызовов
Для вычисления углов между точками использовалась другая таблица:
В реальном коде
Почему это было важно? В 1993 году процессоры не могли позволить себе тысячи дорогих тригонометрических вычислений на каждом кадре. Целочисленная арифметика и lookup-таблицы помогали поддерживать высокую скорость рендеринга.
По сути, Кармак обменял немного памяти на вычислительную производительность.
Сегодня подобный подход всё ещё встречается в embedded-разработке, DSP, игровых движках и других системах, где важна предсказуемая скорость вычислений.
В оригинальном DOOM 1993 года углы хранились в виде 32-битных целых чисел (`angle_t`), а полный оборот соответствовал \(2^{32}\) значениям.
Вместо постоянных вычислений тригонометрических функций движок использовал заранее подготовленные таблицы.
Например, чтобы получить синус угла, достаточно было обратиться к массиву:
typedef unsigned angle_t;
fixed_t sine =
finesine[angle >> ANGLETOFINESHIFT];
Здесь происходит обычный битовый сдвиг и чтение элемента массива. Никаких вызовов
sin() во время выполнения.Для вычисления углов между точками использовалась другая таблица:
return tantoangle[
SlopeDiv(y2 - y1, x2 - x1)
];
В реальном коде
R_PointToAngle2 также учитывает квадранты, чтобы правильно обрабатывать направления.Почему это было важно? В 1993 году процессоры не могли позволить себе тысячи дорогих тригонометрических вычислений на каждом кадре. Целочисленная арифметика и lookup-таблицы помогали поддерживать высокую скорость рендеринга.
По сути, Кармак обменял немного памяти на вычислительную производительность.
Сегодня подобный подход всё ещё встречается в embedded-разработке, DSP, игровых движках и других системах, где важна предсказуемая скорость вычислений.
10 Open Source инструментов для создания игр с помощью ИИ
Отдельный полезный проект для разработчиков, работающих с инфраструктурой: GoKubeDownscaler. Позволяет автоматически масштабировать Kubernetes-приложения в нерабочее время и сокращать расходы на серверы.
https://github.com/caas-team/GoKubeDownscaler
А для разработки самих игр пригодятся следующие инструменты:
1. Godot - движок для создания 2D- и 3D-игр.
https://github.com/godotengine/godot
2. Stable Baselines3 - обучение игровых агентов с подкреплением.
https://github.com/DLR-RM/stable-baselines3
3. Unity ML-Agents - обучение поведения NPC.
https://github.com/Unity-Technologies/ml-agents
4. ComfyUI - генерация текстур, концепт-артов и изображений.
https://github.com/comfyanonymous/ComfyUI
5. TripoSR - создание 3D-моделей по изображениям.
https://github.com/VAST-AI-Research/TripoSR
6. OpenVoice - генерация голосов персонажей.
https://github.com/myshell-ai/OpenVoice
7. Whisper - распознавание речи для голосовых диалогов.
https://github.com/openai/whisper
8. RVC - преобразование голоса для озвучивания NPC.
https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI
9. Blender - моделирование, анимация и подготовка 3D-ресурсов.
https://github.com/blender/blender
10. Ren'Py - разработка визуальных новелл на Python.
https://github.com/renpy/renpy
Этого набора достаточно, чтобы собрать прототип игры с собственными персонажами, графикой, озвучкой и обучаемыми NPC. Дальнейшая интеграция и доработка всё равно потребуют навыков разработки.
Отдельный полезный проект для разработчиков, работающих с инфраструктурой: GoKubeDownscaler. Позволяет автоматически масштабировать Kubernetes-приложения в нерабочее время и сокращать расходы на серверы.
https://github.com/caas-team/GoKubeDownscaler
А для разработки самих игр пригодятся следующие инструменты:
1. Godot - движок для создания 2D- и 3D-игр.
https://github.com/godotengine/godot
2. Stable Baselines3 - обучение игровых агентов с подкреплением.
https://github.com/DLR-RM/stable-baselines3
3. Unity ML-Agents - обучение поведения NPC.
https://github.com/Unity-Technologies/ml-agents
4. ComfyUI - генерация текстур, концепт-артов и изображений.
https://github.com/comfyanonymous/ComfyUI
5. TripoSR - создание 3D-моделей по изображениям.
https://github.com/VAST-AI-Research/TripoSR
6. OpenVoice - генерация голосов персонажей.
https://github.com/myshell-ai/OpenVoice
7. Whisper - распознавание речи для голосовых диалогов.
https://github.com/openai/whisper
8. RVC - преобразование голоса для озвучивания NPC.
https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI
9. Blender - моделирование, анимация и подготовка 3D-ресурсов.
https://github.com/blender/blender
10. Ren'Py - разработка визуальных новелл на Python.
https://github.com/renpy/renpy
Этого набора достаточно, чтобы собрать прототип игры с собственными персонажами, графикой, озвучкой и обучаемыми NPC. Дальнейшая интеграция и доработка всё равно потребуют навыков разработки.
.NET 11: нативный async, union types и Zstandard
Microsoft обновила обзор .NET 11 до RC2. Финальный релиз ожидается в ноябре 2026 года.
Одно из крупных изменений - Runtime Async. Среда выполнения получает встроенную поддержку асинхронности: меньше накладных расходов, компактнее сгенерированный код и понятнее стеки вызовов. Для проектов под
В C# 15 появились union types, закрытые иерархии, extension-индексаторы и именованные
В стандартные библиотеки добавили Zstandard,
NativeAOT ускоряет вызовы через интерфейсы. JIT лучше убирает проверки границ массивов, лишние ветвления и виртуальные вызовы.
Из повседневного:
Перед обновлением стоит проверить серверы: в .NET 11 повышены минимальные требования к наборам инструкций процессора.
https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-11/overview
Microsoft обновила обзор .NET 11 до RC2. Финальный релиз ожидается в ноябре 2026 года.
Одно из крупных изменений - Runtime Async. Среда выполнения получает встроенную поддержку асинхронности: меньше накладных расходов, компактнее сгенерированный код и понятнее стеки вызовов. Для проектов под
net11.0 больше не требуется включать EnablePreviewFeatures.В C# 15 появились union types, закрытые иерархии, extension-индексаторы и именованные
break и continue. А System.Text.Json получил поддержку объединений C# и F#, а также вывод JSON Lines.В стандартные библиотеки добавили Zstandard,
FullJoin в LINQ и типы Decimal32, Decimal64, Decimal128 по стандарту IEEE 754. Новые потоки позволяют оборачивать данные в памяти без копирования.NativeAOT ускоряет вызовы через интерфейсы. JIT лучше убирает проверки границ массивов, лишние ветвления и виртуальные вызовы.
Из повседневного:
dotnet run -e для переменных окружения, #:include для приложений из нескольких файлов и новые возможности dotnet test.Перед обновлением стоит проверить серверы: в .NET 11 повышены минимальные требования к наборам инструкций процессора.
https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-11/overview
Labcoat - веб-интерфейс для .NET-тестов с интеграцией в Aspire.
Эрик Либен сделал инструмент, который находит тестовые проекты, собирает их и позволяет запускать тесты и разбирать результаты прямо в браузере.
Что умеет:
- Перезапускать упавшие тесты и запускать проверки, затронутые изменениями кода.
- Показывать покрытие, историю прогонов и нестабильные тесты.
- Отображать различия в snapshot-тестах.
- Связывать интеграционный тест с трассировками и логами сервисов в Aspire — чтобы быстрее найти причину сбоя.
Работает отдельно или как ресурс в AppHost. Поддерживает MSTest, NUnit, xUnit v3 и TUnit при использовании Microsoft.Testing.Platform 2.
Для запуска нужен .NET 10 SDK, для интеграции - Aspire 13.4.5+. Лицензия MIT.
https://eriklieben.com/posts/labcoat-test-ui-for-dotnet/
Эрик Либен сделал инструмент, который находит тестовые проекты, собирает их и позволяет запускать тесты и разбирать результаты прямо в браузере.
Что умеет:
- Перезапускать упавшие тесты и запускать проверки, затронутые изменениями кода.
- Показывать покрытие, историю прогонов и нестабильные тесты.
- Отображать различия в snapshot-тестах.
- Связывать интеграционный тест с трассировками и логами сервисов в Aspire — чтобы быстрее найти причину сбоя.
Работает отдельно или как ресурс в AppHost. Поддерживает MSTest, NUnit, xUnit v3 и TUnit при использовании Microsoft.Testing.Platform 2.
Для запуска нужен .NET 10 SDK, для интеграции - Aspire 13.4.5+. Лицензия MIT.
https://eriklieben.com/posts/labcoat-test-ui-for-dotnet/
🔴 Открытое собеседование на Middle C# | 10 ноября, 19:00 мск
Senior C# разработчик проведёт техническое интервью в прямом эфире. Посмотришь, как всё устроено изнутри, какие задания предлагают кандидатам и насколько ты готов к такому формату.
Как всё будет проходить:
📂 Интервьюер: Александр Моргунов, Senior C# разработчик с опытом 7+ лет в европейских высоконагруженных сервисах. В роли кандидата - разработчик-доброволец.
📂 Никакого сценария: Александр задаст вопросы и предложит задачи, которые использует на технических интервью. Кандидат заранее их не знает.
📂 В конце Александр пообщается со зрителями и ответит на их вопросы
Участие бесплатное!
Эфир проходит в рамках менторской программы ШОРТКАТ для разработчиков, которые хотят сменить работу, вырасти в грейде и зарплате или прокачать технические навыки
Переходи в бота, чтобы получить ссылку на эфир → @shortcut_csharp_bot
Реклама.
О рекламодателе.
Senior C# разработчик проведёт техническое интервью в прямом эфире. Посмотришь, как всё устроено изнутри, какие задания предлагают кандидатам и насколько ты готов к такому формату.
Как всё будет проходить:
📂 Интервьюер: Александр Моргунов, Senior C# разработчик с опытом 7+ лет в европейских высоконагруженных сервисах. В роли кандидата - разработчик-доброволец.
📂 Никакого сценария: Александр задаст вопросы и предложит задачи, которые использует на технических интервью. Кандидат заранее их не знает.
📂 В конце Александр пообщается со зрителями и ответит на их вопросы
Участие бесплатное!
Эфир проходит в рамках менторской программы ШОРТКАТ для разработчиков, которые хотят сменить работу, вырасти в грейде и зарплате или прокачать технические навыки
Переходи в бота, чтобы получить ссылку на эфир → @shortcut_csharp_bot
Реклама.
О рекламодателе.
В Unix 1979 года команда `file` определяла английский текст по частоте букв.
В исходниках Unix V7 есть функция
- Гласные:
- Частые буквы:
- Редкие буквы:
Финальная проверка выглядела так:
То есть гласных должно быть достаточно относительно числа символов без пробелов, а частые буквы должны встречаться минимум в десять раз чаще редких.
Были и дополнительные фильтры: слишком короткие фрагменты не проверялись, учитывались пунктуация и символы, характерные для кода.
Это эвристика, а не полноценное распознавание языка. Но для практической задачи - отличить похожий на английскую прозу текст от других данных – хватало нескольких счётчиков и простых условий.
https://www.tuhs.org/cgi-bin/utree.pl?file=V7%2Fusr%2Fsrc%2Fcmd%2Ffile.c
В исходниках Unix V7 есть функция
english(). Она считала три группы символов:- Гласные:
a, e, i, o, u.- Частые буквы:
e, t, a, i, o, n.- Редкие буквы:
v, j, k, q, x, z.Финальная проверка выглядела так:
return (
vow * 5 >= n - ct[' '] &&
freq >= 10 * rare
);
То есть гласных должно быть достаточно относительно числа символов без пробелов, а частые буквы должны встречаться минимум в десять раз чаще редких.
Были и дополнительные фильтры: слишком короткие фрагменты не проверялись, учитывались пунктуация и символы, характерные для кода.
Это эвристика, а не полноценное распознавание языка. Но для практической задачи - отличить похожий на английскую прозу текст от других данных – хватало нескольких счётчиков и простых условий.
https://www.tuhs.org/cgi-bin/utree.pl?file=V7%2Fusr%2Fsrc%2Fcmd%2Ffile.c
⌨️ C# и векторный поиск
Приглашаем на открытый урок.
🗓 18 ноября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «C#-разработчик. Продвинутый уровень».
На открытом уроке разберём работу с векторными хранилищами и посмотрим, какие возможности для этого предоставляет .NET.
В практической части реализуем семантический поиск и соберём минимальное RAG-приложение на C#.
На вебинаре рассмотрим:
✔️ работу с векторными хранилищами в .NET;
✔️ основные абстракции .NET для векторного поиска;
✔️ реализацию семантического поиска;
✔️ создание минимального RAG-приложения.
🔗 Ссылка на регистрацию: https://otus.pw/GZ7b/?erid=2W5zFH21qhc
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
Приглашаем на открытый урок.
🗓 18 ноября в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «C#-разработчик. Продвинутый уровень».
На открытом уроке разберём работу с векторными хранилищами и посмотрим, какие возможности для этого предоставляет .NET.
В практической части реализуем семантический поиск и соберём минимальное RAG-приложение на C#.
На вебинаре рассмотрим:
✔️ работу с векторными хранилищами в .NET;
✔️ основные абстракции .NET для векторного поиска;
✔️ реализацию семантического поиска;
✔️ создание минимального RAG-приложения.
🔗 Ссылка на регистрацию: https://otus.pw/GZ7b/?erid=2W5zFH21qhc
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
# .NET 11 вышел: C# 15, Union Types и новые возможности для ИИ-агентов
Microsoft выпустила .NET 11. Обновление затрагивает C#, ASP.NET Core, EF Core, MAUI, производительность runtime и инструменты разработки.
Главные изменения:
C# 15
- Union Types: объединение нескольких типов в один с проверкой всех вариантов компилятором.
- Closed Hierarchies: ограничение наследования для более строгой проверки типов.
- Collection Expression Arguments.
- Extension Indexers и именованные
Пример Union Types:
Производительность и SDK
- Native AOT CLI Host для ускорения запуска команд.
- Постоянно работающий MSBuild Server.
- Сотни оптимизаций JIT и runtime.
- Улучшения Native AOT и аппаратных инструкций.
ASP.NET Core и Blazor
- Асинхронная валидация.
- OpenAPI 3.2 по умолчанию.
- Улучшения SignalR и Blazor.
- Новые экспериментальные компоненты для создания агентных интерфейсов.
ИИ и агенты
- Шаблон MCP Server:
- Microsoft.Extensions.AI для интеграции моделей.
- Microsoft Agent Framework для агентов и рабочих процессов.
- Интеграция агентных интерфейсов с Blazor через AG-UI.
Другие изменения
- EF Core 11: улучшения LINQ, SQL и поддержка векторных индексов SQL Server.
- .NET MAUI переходит на CoreCLR в качестве стандартного runtime.
- Встроенная поддержка Zstandard.
- Новые API для работы с JSON, процессами и памятью без лишнего копирования.
.NET 11 относится к ветке STS и получает два года поддержки. .NET 10 остаётся вариантом LTS.
Релиз: https://devblogs.microsoft.com/dotnet/announcing-dotnet-11/
Документация: https://learn.microsoft.com/dotnet/core/whats-new/dotnet-11/
Microsoft выпустила .NET 11. Обновление затрагивает C#, ASP.NET Core, EF Core, MAUI, производительность runtime и инструменты разработки.
Главные изменения:
C# 15
- Union Types: объединение нескольких типов в один с проверкой всех вариантов компилятором.
- Closed Hierarchies: ограничение наследования для более строгой проверки типов.
- Collection Expression Arguments.
- Extension Indexers и именованные
break / continue.Пример Union Types:
public union Result(Product, ProductNotFound);
var result = new Product(42, "Keyboard");
string message = result switch
{
Product p => p.Name,
ProductNotFound e => $"Not found: {e.Id}"
};
Производительность и SDK
- Native AOT CLI Host для ускорения запуска команд.
- Постоянно работающий MSBuild Server.
- Сотни оптимизаций JIT и runtime.
- Улучшения Native AOT и аппаратных инструкций.
ASP.NET Core и Blazor
- Асинхронная валидация.
- OpenAPI 3.2 по умолчанию.
- Улучшения SignalR и Blazor.
- Новые экспериментальные компоненты для создания агентных интерфейсов.
ИИ и агенты
- Шаблон MCP Server:
dotnet new mcpserver.- Microsoft.Extensions.AI для интеграции моделей.
- Microsoft Agent Framework для агентов и рабочих процессов.
- Интеграция агентных интерфейсов с Blazor через AG-UI.
Другие изменения
- EF Core 11: улучшения LINQ, SQL и поддержка векторных индексов SQL Server.
- .NET MAUI переходит на CoreCLR в качестве стандартного runtime.
- Встроенная поддержка Zstandard.
- Новые API для работы с JSON, процессами и памятью без лишнего копирования.
.NET 11 относится к ветке STS и получает два года поддержки. .NET 10 остаётся вариантом LTS.
Релиз: https://devblogs.microsoft.com/dotnet/announcing-dotnet-11/
Документация: https://learn.microsoft.com/dotnet/core/whats-new/dotnet-11/