
Сложная и тяжелая статья с непропорционально простым выводом. Вспомним фон Неймана, затронем процессорный кеш, поговорим про регистры и компиляторы. Тем, кому не хочется погружаться в детали, достаточно прочитать только Введение и Выводы.
Объектно-ориентированный язык программирования
Сложная и тяжелая статья с непропорционально простым выводом. Вспомним фон Неймана, затронем процессорный кеш, поговорим про регистры и компиляторы. Тем, кому не хочется погружаться в детали, достаточно прочитать только Введение и Выводы.
Я, думаю, многие уже слышали о появившихся в .NET 6 Minimal API - легковесной замене контроллеров/MVC. Кто-то уже успел ознакомиться и задался вопросом: "Ваше API в 3 строчки, это, конечно, здорово, но как это будет работать в реальном проекте с сотнями эндпоинтов, кучей фильтров, аттрибутов, расширениями OpenAPI/Swagger и прочих радостях?"
В этой статье я хочу ответить на этот вопрос: пройдемся от основ, преимуществ, недостатков, и закончим нюансами работы и проблемами, которые обязательно возникнут при миграции с контроллеров на Minimal API в крупном проекте.
А забегая чуть вперед: если думаете, стоит ли переводить проект на Mini API, вот вам сразу полезная информация: они могут жить в проекте вместе, причем даже без дублирования инфраструктуры: не обязательно переводить все разом - подробнее под катом.
Бонусом, заменим SwaggerGen на реализацию OpenAPI от Microsoft.
Простой вопрос: делая задачу, касающуюся API - вы чаще работаете с одним эндпоинтом, или пишете, условные, репозитории, которые используются сразу в нескольких эндпоинтах? Скорее всего, первое, тогда почему мы разбиваем проект по слоям, а не по фичам (эндпоинтам)?
Это видно в часто используемых нынче архитектурных подходах: Layered, Clean Architecture, Onion, и так далее. Не буду выделять что-то конкретное и объясню общую разницу в подходах:
Vertical Slice Architecture (VSA) строится вокруг каждого отдельного feature-слайса (эндпоинта, как самый простой пример), а не вокруг слоев.
То есть, если код относится к конкретному эндпоинту, мы не размазываем его по всему проекту в папках Commands/Services/Repositories/DTOs и т.п., а кладем в одно место, там где и будет находиться эндпоинт
Главный принцип - уменьшаем связанность между слайсами (фичами), увеличиваем связанность внутри слайса
В прошлом месяце я зарелизил ZLinq v1 — революционную LINQ-библиотеку, которая достигает zero allocation на структурах и дженериках. Она может похвастаться такими расширениями, как LINQ to Span, LINQ to SIMD, LINQ to Tree (FileSystem, JSON, GameObject и т.д.), drop-in replacement Source Generator для произвольных типов, поддержкой нескольких платформ, включая .NET Standard 2.0, Unity и Godot и на данный момент ZLinq имеет более 2000 звезд на GitHub.
Пол года назад я начал копаться в исходном коде рослина, что бы понять, что такое красно-зеленые деревья, и вот это моя выжимка, и то что я бы хотел прочитать полгода назад.
"В этой статье я расскажу о правильной организации кода автотестов для десктопных приложений. Поделюсь опытом создания архитектуры, которая делает тесты стабильными и поддерживаемыми. Рассмотрим Controller Pattern и его применение в автоматизации десктопных приложений."
Секретное оружие в .NET Core: Почему вы игнорируете мощь T-SQL?
Ваши LINQ-запросы становятся громоздкими? Производительность упирается в потолок? Возможно, вы упускаете нечто важное.
Эта статья — приглашение взглянуть на привычные инструменты под новым углом. Мы исследуем гибридный подход, который позволяет использовать весь потенциал Microsoft SQL Server, выходя за рамки стандартного взаимодействия через EF Core. Узнайте, как T-SQL может упростить сложные задачи, повысить производительность и сделать вашу архитектуру более гибкой.
Это не просто технический трюк, а переосмысление роли СУБД в современном приложении. Готовы узнать, как использовать "скрытые" возможности MSSQL и почему это может быть именно то, что нужно вашему проекту?
Давайте будем честны: как Unity-разработчики, мы все пишем код, который может содержать ошибки. Это касается и меня, и вас, и даже искусственного интеллекта.
Многие разработчики программного обеспечения считают модульное (или unit) тестирование важнейшим инструментом для раннего выявления и предотвращения регрессий. Но действительно ли оно эффективно в контексте разработки Unity-проектов?
В этой статье я поделюсь с вами нашим опытом внедрения тестов в Virtual Maker. Мы рассмотрим разницу между модульными, интеграционными и сквозными тестами, а также обсудим, почему вам не следует (по моему мнению) прибегать к последним в ваших проектах.
Хотел давно написать простенький парольный менеджер на C#, но было очень лень его вспоминать. Самые первые модели ChatGPT выдавали не работающий код, но несколько дней назад ChatGPT выдал практически идеально работающий код, правки были минимальны. Приложу ссылку на GitLab.
Я работаю в одной региональной государственной организации, в которой потребовалось внедрить онлайн систему управления документами, умеющую работать с документами формата docx и xlsx.
Конечно прежде чем что-то внедрять происходит анализ существующих решений и целесообразность их внедрения. Казалось бы тут как нельзя кстати походит Р7 офис корпоративный сервер, так как это решение входит в реестр отечественного ПО и нацелено как раз на этот рынок.
Был сделан запрос цены в АО «Р7», но когда руководство увидело предложение от правообладателя Р7, то сразу отклонило это предложение, ведь оказалось, что цена на 2 порядка выше, чем себе это представлял руководитель. Я могу понять правообладателя, ведь он потратил деньги на сертификацию, программистов и т. д., но нашему руководству этого не понять у них бюджет строго ограничен.
Итак задача изменена на внедрить онлайн систему управления документами но настолько дешево насколько это возможно, а лучше бесплатно но удовлетворяющую требованиям безопасности. Из альтернатив остается только применение open source решения only office server вкупе с выполнением рекомендаций по запуску не доверенного ПО в защищенных средах.
Задача усложняется тем, что базовые сервера работают на ОС AStra linux 1.8. Казалось бы в чем сложность? бери готовые docker образы, разворачивай и будет тебе счастье, но не все так просто – согласно одниму из требований по безопасности docker образ должен быть на базе ОС astra linux.
Итак для безопасности применяем 2 системы: система контейнеризации docker, работающая на основе встроенных в ядро linux механизмов изоляции и МКЦ в ОС astra linux. С docker все стандартно, а вот с запуском docker на пониженном уровне целостности пришлось повозиться. Включаем запуск командой sudo astra-docker-isolation enable, запускаем любой образ и получаем ошибку запуска docker. Путем анализа логов удалось обнаружить, что не удается пробросить порт, так как docker не имеет на это прав. После долгих поисков найдено решение написать политику разрешения доступа к firewalld для процесса docker.
С выходом .NET 9 пакет Swashbuckle.AspNetCore выпилили из шаблона Web API. Это означает, что при создании нового приложения ASP.NET Core Web API у нас больше нет привычного зеленого пользовательского интерфейса Swagger для тестирования endpoint-ов. В статье — краткий разбор, почему это произошло, и обзор альтернативы Scalar.
Представьте: вы — инженер-программист из 60-х. Ваш код — это дикие прерии, где goto
прыгает через функции как ковбой через барную стойку, а память — ваше личное ранчо. Вас внезапно переносят в 2023 год. Вас окружают фразы вроде «SOLID», «иммутабельность», «реактивные потоки». Вы пытаетесь написать пару строк на Python, но слышите: «Стоп. Мутировать переменные? В 2023-то? Это же грех!».
Что случилось с нашей свободой?
За последние 70 лет программирование из искусства постепенно превращалось в ремесло со своими жёсткими требованиями и правилами. Мы больше не взламываем реальность — мы строим мосты по ГОСТу.
В этом посте описана одна из причин, по которой растёт расход памяти и возникают утечки, что при работе под Windows может приводить к исключениям OutOfMemoryException. Проблема может возникать после того, как приложение обновится с версии .NET 6 или ниже до .NET 7 или выше, но также встречается и в новых или необновлённых приложениях.
Мне не раз приходилось сталкиваться с данной конкретной проблемой, когда я работал в техподдержке. Поскольку я отвечаю, в основном, за веб-составляющую приложений, мне такие вещи встречались только в приложениях ASP.NET. Однако, эта проблема характерна не только для ASP.NET Core и может произойти в любом приложении под .NET.
Она может возникать в .NET 6 и ниже, но чётче проявляется и лучше просматривается в .NET 7 и выше. Дело в том, что в этих версиях .NET иначе, чем прежде, обращается с блоками памяти, отводимыми под кучи для сборщиков мусора. Разница такова: в .NET 6 и ниже (а также в .NET Framework) используются сравнительно крупные сегменты, для каждой кучи — свои. А в .NET 7+ для этой цели применятся более мелкие регионы, доступные для повторного использования. Если вы хотите подробнее почитать о сегментах и регионах, посмотрите пост от Маони Стивенс, которая занимается архитектурой сборщика мусора в .NET: https://devblogs.microsoft.com/dotnet/put-a-dpad-on-that-gc/
Кроме того, по-видимому, именно такие утечки возникают только в Windows. Я прихожу к такому выводу, изучив релевантный исходный код .NET. Правда, не поленитесь пролистать эту статью даже в случае, если ваше приложение хостится на какой-нибудь другой платформе.
Двое мужчин на КДПВ искренне удивляются чувству вайб-кодинга без применения искуственного интелекта.
Что такое квалификаторы и для чего они нужны? Как это связано с машинами состояний? Откуда берётся магия в .NET?
Всё это органично сочетается во фреймворке EmptyBox.
Внутри рассматриваются квалифицированные машины состояний, расширения для них, и как это вообще программируется.
В современном мире анализ рынка труда становится критически важным как для соискателей, ищущих актуальные возможности, так и для компаний, изучающих конкурентную среду. Для решения этой задачи были выбраны два ключевых ресурса — HH.ru и SuperJob.
В этой статье мы разберем, как объединить мощь C# для бэкенда и элегантность WPF для фронтенда, чтобы создать инструмент, который не только собирает данные, но и превращает их в ценную информацию.
На дворе 2025 год, а я всё ещё продолжаю делать видеоигры. Если верить archive.org, я начал заниматься этим двадцать лет назад! Достаточно долгий срок для одного увлечения...
Когда я рассказываю о том, над чем работаю, люди часто спрашивают меня, как я делаю игры, и их часто удивляет (а иногда и тревожит?), когда я говорю, что не пользуюсь коммерческими игровыми движками. Существует какой-то стереотип, что если ты делаешь игры не в популярном инструменте наподобие Unity или Unreal, это значит, что ты чуть ли не вручную пишешь ассемблерный код.
Я искренне считаю, что создание игр без огромного «многофункционального» движка может быть проще и интереснее, а часто и позволяет оптимальнее тратить вычислительные ресурсы. Я не делаю игру, в которой «есть всё», поэтому мне не нужны 90% фич, предоставляемых движками. Все мои игры обладают конкретным стилем и у меня есть конкретные способы работы с моими инструментами. Часто оказывается так, что используемым по умолчанию реализациям фич в крупных движках наподобие Unity не хватает столь многого, что мне всё равно приходится писать их самостоятельно. В конечном итоге, мои проекты по большей мере оказываются моими собственными инструментами и системами, а движок становится необходим лишь для создания удобного UI и части рендеринга...
Тут можно задаться вопросом, а зачем вообще использовать движок? Что он даёт? Зачем я позволяю инструменту потенциально препятствовать моей работе, когда его владельцы внезапно принимают неэтичные и ужасные бизнес-решения? Или выпускают обновление, которое требуется для запуска моей игры на консолях, но ломает всю систему в игре, заставляя переписывать её? Зачем я ежедневно борюсь с этим для работы с движком, пока я постепенно заменяю все его стандартные системы и он постепенно становится только загрузчиком ресурсов и фреймворком UI редактора?
Подборка авторских Telegram-каналов про разработку
Приветствую, Хабр. На связи агент того самого анализатора, и сегодня я предлагаю вам изучить Telegram-каналы крутых айтишников, которые познали себя не только в коде, но и блогинге. Переворошила Telegram, чтобы вам не пришлось. Надеюсь, они помогут вам преисполниться в своём познании....
В настоящий момент тема арбитража криптовалют в значительной степени скомпрометирована, и этот факт не может не вызывать сожаления. Первые же несколько Telegram‑каналов, найденные при беглом поиске по ключевым словам, оказались мошенническими проектами. На практике, таких ресурсов в социальных сетях на порядки больше. Фактически, это заботливо расставленные сети для ловли очередных доверчивых пользователей, стремящихся к быстрому и лёгкому заработку. И на волне очередного хайпа в теме криптовалют таких становится все больше и больше.
Я решил проверить — существуют ли в действительности арбитражные возможности, насколько сложно их найти, и что не менее важно — можно ли извлечь из них реальную финансовую выгоду? С этой целью за пару выходных был собран простой арбитражный сканер, позволивший получить некоторую статистику и сделать определенные выводы. Для тех, кому интересны результаты этого эксперимента — расскажу подробнее.
Мне стало интересно: насколько глубоко системный аналитик уровня Senior должен разбираться в программном коде? Где проходит грань между бизнес-фокусом и технической вовлечённостью?
Чтобы ответить на этот вопрос, я провёл исследование и опросил почти 200 системных аналитиков. Мы выяснили, какие технические навыки сегодня считаются must-have, а какие по-прежнему остаются "по желанию".
В статье я делюсь результатами опроса, реальными кейсами, мнениями коллег и выводами о том, как трансформируется роль системного аналитика в современных командах. Если вы аналитик, тимлид или архитектор - будет интересно.
Пишешь игру на Unity? Нужна производительность?
UniTask – решение!
Просто о сложном в этой статье. (Примеры про роботов, лего и машинки уже тут)