Как стать автором
Поиск
Написать публикацию
Обновить
107.12

C# *

Объектно-ориентированный язык программирования

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

Scalar вместо Swagger UI. Надо ли оно нам?

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

С выходом .NET 9 пакет Swashbuckle.AspNetCore выпилили из шаблона Web API. Это означает, что при создании нового приложения ASP.NET Core Web API у нас больше нет привычного зеленого пользовательского интерфейса Swagger для тестирования endpoint-ов. В статье — краткий разбор, почему это произошло, и обзор альтернативы Scalar.

Хочу разобраться

Эволюция программирования: как парадигмы украли нашу свободу

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров9.8K

Представьте: вы — инженер-программист из 60-х. Ваш код — это дикие прерии, где goto прыгает через функции как ковбой через барную стойку, а память — ваше личное ранчо. Вас внезапно переносят в 2023 год. Вас окружают фразы вроде «SOLID», «иммутабельность», «реактивные потоки». Вы пытаетесь написать пару строк на Python, но слышите: «Стоп. Мутировать переменные? В 2023-то? Это же грех!».

Что случилось с нашей свободой?

За последние 70 лет программирование из искусства постепенно превращалось в ремесло со своими жёсткими требованиями и правилами. Мы больше не взламываем реальность — мы строим мосты по ГОСТу.

Читать далее

Утечки памяти, связанные с неверным использованием API Microsoft.Extensions.Configuration в .NET под Windows

Время на прочтение12 мин
Количество просмотров2.2K

В этом посте описана одна из причин, по которой растёт расход памяти и возникают утечки, что при работе под 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. Правда, не поленитесь пролистать эту статью даже в случае, если ваше приложение хостится на какой-нибудь другой платформе.

Читать далее

eb#0: Квалификаторы и машины состояний, или Высокотипизированная магия в .NET

Уровень сложностиСложный
Время на прочтение51 мин
Количество просмотров2.7K

Двое мужчин на КДПВ искренне удивляются чувству вайб-кодинга без применения искуственного интелекта.

Что такое квалификаторы и для чего они нужны? Как это связано с машинами состояний? Откуда берётся магия в .NET?

Всё это органично сочетается во фреймворке EmptyBox.

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

Заглянуть внутрь коробки

От данных к интерфейсу: как спарсить вакансии с HH и SuperJob на C#

Уровень сложностиСредний
Время на прочтение23 мин
Количество просмотров3.4K

В современном мире анализ рынка труда становится критически важным как для соискателей, ищущих актуальные возможности, так и для компаний, изучающих конкурентную среду. Для решения этой задачи были выбраны два ключевых ресурса — HH.ru и SuperJob.

В этой статье мы разберем, как объединить мощь C# для бэкенда и элегантность WPF для фронтенда, чтобы создать инструмент, который не только собирает данные, но и превращает их в ценную информацию.

Парсим данные

Как делать видеоигры в 2025 году (без движка)

Время на прочтение9 мин
Количество просмотров21K

На дворе 2025 год, а я всё ещё продолжаю делать видеоигры. Если верить archive.org, я начал заниматься этим двадцать лет назад! Достаточно долгий срок для одного увлечения...

Когда я рассказываю о том, над чем работаю, люди часто спрашивают меня, как я делаю игры, и их часто удивляет (а иногда и тревожит?), когда я говорю, что не пользуюсь коммерческими игровыми движками. Существует какой-то стереотип, что если ты делаешь игры не в популярном инструменте наподобие Unity или Unreal, это значит, что ты чуть ли не вручную пишешь ассемблерный код.

Я искренне считаю, что создание игр без огромного «многофункционального» движка может быть проще и интереснее, а часто и позволяет оптимальнее тратить вычислительные ресурсы. Я не делаю игру, в которой «есть всё», поэтому мне не нужны 90% фич, предоставляемых движками. Все мои игры обладают конкретным стилем и у меня есть конкретные способы работы с моими инструментами. Часто оказывается так, что используемым по умолчанию реализациям фич в крупных движках наподобие Unity не хватает столь многого, что мне всё равно приходится писать их самостоятельно. В конечном итоге, мои проекты по большей мере оказываются моими собственными инструментами и системами, а движок становится необходим лишь для создания удобного UI и части рендеринга...

Тут можно задаться вопросом, а зачем вообще использовать движок? Что он даёт? Зачем я позволяю инструменту потенциально препятствовать моей работе, когда его владельцы внезапно принимают неэтичные и ужасные бизнес-решения? Или выпускают обновление, которое требуется для запуска моей игры на консолях, но ломает всю систему в игре, заставляя переписывать её? Зачем я ежедневно борюсь с этим для работы с движком, пока я постепенно заменяю все его стандартные системы и он постепенно становится только загрузчиком ресурсов и фреймворком UI редактора?

Читать далее

Подборка авторских Telegram-каналов про разработку

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров3.5K

Подборка авторских Telegram-каналов про разработку

Приветствую, Хабр. На связи агент того самого анализатора, и сегодня я предлагаю вам изучить Telegram-каналы крутых айтишников, которые познали себя не только в коде, но и блогинге. Переворошила Telegram, чтобы вам не пришлось. Надеюсь, они помогут вам преисполниться в своём познании....

Поехали!

Арбитраж криптовалют — или переливаем из пустого в порожнее

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

В настоящий момент тема арбитража криптовалют в значительной степени скомпрометирована, и этот факт не может не вызывать сожаления. Первые же несколько Telegram‑каналов, найденные при беглом поиске по ключевым словам, оказались мошенническими проектами. На практике, таких ресурсов в социальных сетях на порядки больше. Фактически, это заботливо расставленные сети для ловли очередных доверчивых пользователей, стремящихся к быстрому и лёгкому заработку. И на волне очередного хайпа в теме криптовалют таких становится все больше и больше.

Я решил проверить — существуют ли в действительности арбитражные возможности, насколько сложно их найти, и что не менее важно — можно ли извлечь из них реальную финансовую выгоду? С этой целью за пару выходных был собран простой арбитражный сканер, позволивший получить некоторую статистику и сделать определенные выводы. Для тех, кому интересны результаты этого эксперимента — расскажу подробнее.

Мне интересно

Нужно ли системному аналитику разбираться в программировании?

Уровень сложностиПростой
Время на прочтение19 мин
Количество просмотров6.6K

Мне стало интересно: насколько глубоко системный аналитик уровня Senior должен разбираться в программном коде? Где проходит грань между бизнес-фокусом и технической вовлечённостью?

Чтобы ответить на этот вопрос, я провёл исследование и опросил почти 200 системных аналитиков. Мы выяснили, какие технические навыки сегодня считаются must-have, а какие по-прежнему остаются "по желанию".

В статье я делюсь результатами опроса, реальными кейсами, мнениями коллег и выводами о том, как трансформируется роль системного аналитика в современных командах. Если вы аналитик, тимлид или архитектор - будет интересно.

Читать далее

Объясняем UniTask так, чтобы понял даже ребенок (для Unity разработчиков и не только)

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

Пишешь игру на Unity? Нужна производительность?
UniTask – решение!
Просто о сложном в этой статье. (Примеры про роботов, лего и машинки уже тут)

Читать далее

Гайд на полиморфизм. Основные идеи

Уровень сложностиСредний
Время на прочтение24 мин
Количество просмотров15K

Полиморфизм — сколько в этом слове красивого и даже таинственного. Происходит от греческого πολύμορφος что означает — многообразный.  В программировании это понятие встречается часто и  обыденно для понимания большинством программистов. Но так ли это на самом деле? 

Читать далее

.NET Digest #7

Время на прочтение5 мин
Количество просмотров3.4K

Добро пожаловать на седьмой выпуск нашего дайджеста, посвящённого новостям и событиям в мире .NET! В этот раз мы расскажем про .NET 10 preview 2 и 3, новый релиз Mono, множество интересных статей и, конечно же, AI. Команда PVS-Studio рада представить вам подборку самых интересных и полезных материалов. Поехали!

Читать далее

Добавление слов в языковую модель Vosk

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров2K

Краткий гайд, как дополнить vosk модель распознавания речи своими словами. Для дальнейшего использования в своих проектах. Все подводные камни в использовании инструмента kaldi в 2025 году.

Принять испытание

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

readonly struct в C#

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

Привет, Хабр!

Вы, вероятно, уже сталкивались с struct в C# и задумались: а зачем нужен readonly struct и когда он реально спасает, а когда, наоборот, начинает всё тормозить? Сегодня это и рассмотрим.

Читать далее

Всё про Generic Math в C#

Уровень сложностиСложный
Время на прочтение21 мин
Количество просмотров12K


С момента своего релиза в C# 11 и .NET 7 Обобщённая Математика так и осталась тёмной лошадкой в глазах программистов. Разработчики не понимают и не используют эту фичу, статья же ответит на все вопросы и разложит всё по полочкам.

Рассмотрим с нуля концепцию Generic Math. Как она выглядит в C# и других языках программирования, почему вообще появилась. Также зароемся в «кишки» System.Numerics и узнаем, как применить в продакшне кровавого ынтэрпрайза.
Читать дальше →

Как построить надежную архитектуру B2B-системы на основе 1С

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

Здравствуйте! Меня зовут Дмитрий Гусаков, я менеджер проектов компании DD Planet. В своей статье я расскажу, почему нельзя использовать 1С как полноценный бэкенд в современных B2B-системах, с какими ограничениями могут сталкиваться разработчики, и как выстроить надёжную структуру, используя дополнительный слой бэкенда и брокеры сообщений.

В России существует острый дефицит отечественных продуктов для автоматизации бизнеса. 1С — один из немногих российских игроков на этом рынке. В условиях активного импортозамещения он стал основным кандидатом на замену западных систем, вроде Oracle CRM, ERP SAP и все больше российских компаний переходят на эту платформу. Однако сам по себе этот переход не решает всех проблем.

Читать далее

ООП или не ООП — вот в чём ревью

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров3.5K

Псевдокод, страсть и pull-request на грани добра и зла

Кто-то звал Smalltalk, кто-то бросал в нас Haskell, кто-то доставал из-под кровати подшивку статей «ECS лучше всего» — и всё это с праведной уверенностью.

Читать далее

WPF приложения на Android, iPhone, iPad, Mac и Windows

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

Уже более пяти лет мы занимаемся разработкой OpenSilveropen-source-фреймворка, который позволяет переносить приложения на базе WPF и Silverlight в современный веб. Проект стабильно развивается, активно используется в корпоративной среде, и недавно мы задумались о том, как расширить возможности наших пользователей и запустить существующие приложения ещё и на iOS и Android.

Поскольку под капотом OpenSilver использует платформу Blazor, логичным шагом стала интеграция с .NET MAUI Blazor Hybrid. В этой статье я расскажу, как прошла интеграция и какие результаты мы получили на практике. Забегая вперёд, скажу, что результатом мы остались очень довольны!

Читать далее

Как автоматизация рутинных процессов помогает не доводить клиента до истерики

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

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

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

Простота — это тоже прогресс

Как это заработало в РГС?

ООП не мертво. Вы просто пользуетесь им как молотком по клавиатуре

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров53K

После каждой новой статьи с заголовком «ООП — это обман» хочется напомнить: ООП — это не набор шаблонов из книжек, а инженерный подход. Если проект страдает от наследования и DI, возможно, проблема не в ООП. А в том, как вы его применяете.

Читать далее

Вклад авторов