Деплоймент нескольких ASP.Net Core-приложений на VPS сервере и настройка доступа к ним по доменному имени 3-го уровня

Деплоймент нескольких ASP.Net Core-приложений на VPS сервере с Ubuntu и настройка доступа к ним по доменному имени 3-го уровня.

Хаб со знаниями про .NET

Деплоймент нескольких ASP.Net Core-приложений на VPS сервере с Ubuntu и настройка доступа к ним по доменному имени 3-го уровня.

Очень люблю играть в шахматы. Давно играю десятиминутки на chess.com. Но мой предел — в районе рейтинга 1500. И все потому, что много «зеваю». Вот если ли бы рядом был советчик, уберегающий от глупых зевков... А что, если прикрутить шахматный движок, чтобы он подсказывал в трудной позиции? Это нечестная игра, но с ботами любого рейтинга в качестве обучения — не возбраняется. То есть нужно поставить движок, как-то прочитать шахматную позицию из браузера, передать ее движку, получить ответ за разумное время.

Долгое время в метод Contains(), который используется в Entity Framework для фильтрации данных по списку значений, не вносили изменения. До выхода Entity Framework 8 коллекция с этим методом внутри оператора запросов where LINQ транслировалась в значения в виде констант внутри оператора IN для SQL. Если количество элементов равно одному, то преобразование происходило в выражение с оператором ‘=’ на стороне MS SQL Server. Аналогично транслируется и метод расширения Where() LINQ.
Использование в EF8 функции OPENJSON устраняет часть проблем с кэшем планов запросов для SQL Server, но не применимо к старым версиям (compatibility level) баз данных. Да и оптимальность генерируемого ею кода в некоторых случаях вызывает сомнения.
В недавно вышедшем Entity Framework 9 добавили больше настроек для возможности транслирования метода Contains() коллекций как с помощью OPENJSON, так и «по-старому» — в виде констант.

Pure.DI — это не фреймворк или библиотека, а генератор исходного кода C# для создания композиций объектов в парадигме чистого DI. Последняя статья о Pure.DI выходила в апреле 2024 года. С тех пор прошло больше чем пол года, за это время основные усилия были сосредоточены на исправлении ошибок, увеличении производительности генерации кода и на удобстве использования. Давайте пройдемся по новым возможностям.

Ежегодно Microsoft выпускает новую версию .NET. Это большое событие, к которому мы выпускаем версию PVS-Studio с поддержкой нововведений. Сегодня речь пойдёт про боль PVS-Studio при обновлении Roslyn — неотъемлемой части .NET.

В течение 2024 года команда PVS-Studio активно делилась статьями о проверке открытых C# проектов. Мы решили продолжить традицию и отобрали для вас 10 самых интересных ошибок, обнаруженных за этот период. Приятного чтения!

С релизом PVS-Studio 7.34 в анализаторе появились новые диагностические правила: taint для Java, множество Unity-диагностик для C#, углубление в OWASP и многое другое! Расскажем о них в этой статье.

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

Всем привет! Сегодня я бы хотел рассказать вам про свое приложение Profitocracy, которое помогает мне следить за личными расходами, а также автоматически планировать бюджет на месяц.
Данный проект является open source, так что, если вам интересно сразу перейти к коду, то вы можете ознакомиться с его исходниками на GitHub.

Какие задачи решает лидер команды, какими навыками необходимо обладать и как развиваться в карьере? Если вы метите на позицию тимлида, но не знаете, как к ней подступиться, то эта статья — для вас.
Привет, Хабр! Меня зовут Радик Нургалиев, я руководитель команды .NET-разработчиков IBS. В этой статье расскажу про свой карьерный рост от начинающего программиста до руководителя в компаниях разного масштаба. Понятно, что у каждой ИТ-компании свои представления о прекрасном и свои схемы карьерных треков сотрудников, а значит, не может быть некой единой для всех разработчиков инструкции «Как стать тимлидом за Х лет». Я поделюсь личным опытом. Надеюсь, кому-нибудь он поможет повторить мою траекторию: начинающий программист → разработчик со стажем 1–3 года → опытный разработчик → куратор команды → тимлид.
Сразу оговорюсь, что я не использую условные понятия типа «Middle» или «Senior», потому что в каждой компании под ними понимают свой набор компетенций.

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

Уже стало традицией, что выход очередной версии .NET становится поводом для выпуска новой версии WebMarkupMin. Обычно подобные выпуски WebMarkupMin сопровождаются обновлением расширений для ASP.NET Core и этот раз не стал исключением. Многие ожидали, что с появлением .NET 9 появится новый модуль WebMarkupMin.AspNetCore9, но этого не произошло. В этой статье я расскажу о причинах такого решения. Кроме того, в этот раз в ASP.NET Core-расширениях довольно много изменений, а поскольку для большинства разработчиков основным источником информации об этих расширениях является уже немного устаревшая статья Эндрю Лока «HTML minification using WebMarkupMin in ASP.NET Core», то я постараюсь разъяснить некоторые неочевидные моменты.

Доброго времени суток всем!
Вот и настал очередной этап рассказать о моем проекте и куда в итоге он меня привел. Предыдущие мио публикации по данной теме можно найти в моем профиле. С момента последней публикации прошло 7 лет, за это время произошло очень много всего, как вокруг моей разработки, так и того, чему она стала инициатором. После выпуска 2-й версии системы в 2017-м году, она достаточно успешно показала себя в нескольких крупных внедрениях. Объем поддержки и разработки системы ощутимо вырос и стал достаточно много требовать моего личного времени. Кроме того – меня пригласил один крупный холдинг создать им некую отраслевую скада—систему, поэтому времени на свое хобби, в рамках которого так и продолжал развиваться мой проект, стало не очень много. Поэтому в 2020-м году я объявил в кругах АСУТП, что буду не против дать проекту возможность встать на коммерческие рельсы. Неспешно пошли предложения, и также не спешно шел процесс их обсуждений и анализа продукта заинтересованными сторонами. В конечном итоге, на меня вышла группа ИТ-компаний, которые очень заинтересовались продуктом и возможностью диверсифицировать с его помощью бизнес еще и на рынок АСУТП. Так в июле 2022-го года родилась компания-вендор, в основу которой вошла интеллектуальная база проекта с исходным кодом 2-й версии моей разработки. Я вошел в состав ее учредителей и сейчас занимаю должность технического директора компании. За полтора года была сформирована отличная команда: разработчиков, инженеров и менеджеров. Первоочередной задачей, которая была поставлена перед нами – было создание новой версии скады, которая бы удовлетворяла текущим тенденциям и ситуациям, которые происходили в это самое время. А события, как вы понимаете, в этот период сыпались как из рога изобилия, и с каждым из них мы всей командой все больше понимали, что именно сейчас мы делаем то, что нужно нашему рынку автоматизации и это то, что нужно уже сейчас. Насколько у нас это получилось – теперь можно будет оценить, ведь буквально в начале февраля этого года мы выпустили официальный первый релиз нашего нового продукта: SCADA+ 3.0! И выпущен он уже компанией-вендором, которая теперь специализируется на его разработке, поддержке и сопровождении.

Как-то так получилось, что я никогда не воспринимал Android-телефон как объект, содержимым которого можно управлять из обычного .fsx. Все данные туда и обратно я таскал исключительно ручками при помощи USB и проводника. Дальше на стороне компа их мог раскидывать скрипт, но в зону телефона я не лез. Максимум, мог написать мобильное приложение для систематических операций с загрузкой на сервер и обратно. Однако недавно нужда заставила меня проникнуть из скрипта в обе области сразу, и это оказалось настолько проще, чем я предполагал, что теперь я испытываю злость и сожаление (как будто проморгал выигрышную комбинацию и додавливал противника лишние 4 хода).
Дисклеймер: До этого всё, что я публиковал на Хабре, касалось тем, которые мне известны очень хорошо. Ну или как минимум, затрагиваемое пространство всегда было заметно меньше известного. В этот раз ситуация обратная. Я случайно набрёл на интересную нишу и поверхностно изучил её. Так как я благополучно решил все свои задачи, то вряд ли буду раскапывать тему дальше. Но раз уж мне удалось неявно закрыть несколько запылившихся ишуев на Гитхабе, то мне показалось полезным просуммировать в тексте собранные знания, а также некоторые исторические наработки. Считайте, что я на секунду появился в дверях вашей комнаты, сказал нечто вроде «Посоны, там-то и там-то есть что-то интересное» и свалил.

Пул объектов (Object Pool) — это паттерн, который позволяет повторно использовать объекты вместо создания новых. Это может быть полезно в ситуациях, когда инициализация объектов затратна. Паттерн широко применяется в разработке игр и приложениях, где важно минимизировать использование памяти. В этой статье мы рассмотрим, как этот шаблон реализован в C#, и как он может улучшить производительность.
Написание этой статьи навеяно статьёй "Task изнутри: управление потоками в .NET и создание своих планировщиков". Одна из проблем озвученная в данной статье это ограничение числа одновременно выполняемых задач.
В указанной статье для таких целей использовался кастомный планировщик. Полагаю многим пришла в голову мысль о возможности создании решения на основе SemaphoreSlim, а я же решил его воплотить и проверить насколько проще такое решение, чем кастомный планировщик.

В новостных сводках, каналах, изданиях мы все чаще наблюдаем за успехами оптимизации, автоматизации и внедрения новых систем ТОиР промышленного оборудования. На больших предприятиях оборудование принято называть активами, подчеркивая их важность для достижения целей компании.
Да, промышленное оборудование - безусловно критически важное оборудование инфраструктуры предприятия и от надежности такого оборудования во многом зависит доход компании.
А что же с активами банков? Нет, не теми финансовыми инструментами, которыми они пользуются, а «железными» активами, которые также помогают банкам работать. Как же быть с обслуживанием инженерного оборудования или оборудования противопожарных систем, а еще и кассовой техники? - зададимся мы вопросом. Почему про процессы обслуживания этого оборудования мы мало где можем найти информацию? Ведь оно также является немаловажным звеном основной цепочки бизнес-процесса предприятия, и от его бесперебойной работоспособности зависит многое.
Возьмем например банк. Инженерные системы и системы противопожарной безопасности банка – это «сердце», жизненно важный элемент объекта. Кассовая техника – это «стержень» кассового узла, центра пересчета. Исправное и безотказное состояние элементов инженерных систем обеспечивает удобство, уют и комфорт сотрудникам и клиентам банка, а кассовой техники – непрерывность процесса пересчета и, как следствие, напрямую влияет на прибыль.
Наша команда Банка ВТБ давно занимается этими вопросами и мы хотим рассказать об одной такой истории автоматизации процессов ТОиР в банковской сфере.
В 2020 году Банк ВТБ, как и положено крупным компаниям, обновлял программное обеспечение и переходил на обновленную версию SAP S4. Управление эксплуатации Административного департамента банка, проанализировав текущие процессы ТОиР, вынесла предложение включить в новую сборку программы SAP дополнительный модуль PM (ТОРО). Руководство компании поддержало идею цифровизации технического обслуживания и ремонта. Так началась история автоматизации ТОиР в Банке ВТБ.

Каждый .NET разработчик сталкивается с выбором оптимального алгоритма для решения той или иной задачи, а также с выбором структур данных для его реализации.
Платформа .NET предлагает множество встроенных типов, которые упрощают процесс разработки. В статье описано, какой тип в каком случае следует выбирать и как производительность алгоритма может меняться в зависимости от выбранных структур данных и методов. В статье приведены must-have понятия для написания эффективных алгоритмов.
Краткое содержание:
1. Нотация О большое для оценки сложности алгоритмов
2. Структуры данных и их применение в алгоритмах
3. Некоторые рекомендации для разработки на .NET

Здравствуйте! Меня зовут Антон Боев, я исполнительный директор компании DD Planet. В статье поделюсь опытом работы с платформой .NET в условиях санкций и расскажу о нашем взгляде на перспективы импортозамещения ПО в России после ухода Microsoft.
В марте 2022 года корпорация Microsoft присоединилась к антироссийским санкциям и объявила о прекращении поддержки своего программного обеспечения. Вплоть до начала 2024-го, в связи с уходом вендора, мы отметили тенденцию к замораживанию множества проектов, которые планировалось разрабатывать на .NET. Хотя наша компания на протяжении 20 лет успешно реализовывает масштабные решения на .NET и входит в топ-5 интеграторов разработки ПО на этой платформе, за последние два года мы также неоднократно обсуждали возможность переквалификации специалистов на другие технологии и прежде всего рассматривали прямого конкурента — Java. Однако мы не сделали этот шаг по ряду причин.
Давайте разбираться, почему наш выбор продолжать разработку на .NET полностью оправдан.
Наверное я один из немногих, которые желают опубликовать материал не просто, чтобы было, или чтобы высказать свое «авторитетное» мнение по тем или иным вопросам, а чтобы получить обратную связь. И за эту самую связь в комментариях я был бы весьма признателен!