![](https://habrastorage.org/getpro/habr/upload_files/9c6/959/e6d/9c6959e6d2c5e953c7b9c884766826cc.jpeg)
Как снизить вероятность ошибок в коде? Что нового в .NET и C#? Как правильно работать со статистикой при замерах производительности? Как научить ребёнка программировать?
Эти вопросы выглядят совершенно разношёрстными. Но у них есть общее: все они получат ответы на ближайшем DotNext. Программа конференции составлена, и мы представляем её Хабру.
А сам DotNext начнётся уже на следующей неделе. Дни 3-4 ноября будут полностью онлайновыми, а вот 20 ноября — на выбор участников: можно прийти на офлайн-часть в Москве, можно подключиться к ней удалённо.
Оглавление
Best practices
![](https://habrastorage.org/getpro/habr/upload_files/75f/3c8/d23/75f3c8d23c18e54ef226b16b6a79adf1.jpeg)
Евгений Пешков
Тинькофф
Факапы на бэкенде периодически случаются у всех. Части этих факапов можно избежать, если провести нагрузочное тестирование, определить пределы возможностей сервиса и заранее ограничить количество одновременно обрабатываемых запросов. Это позволяет сгладить неравномерность нагрузки и справиться с обработкой хотя бы части запросов, что гораздо лучше полного падения сервиса.
Решить задачу Rate Limiting помогает примитив синхронизации под названием семафор. Он пропускает внутрь заданное количество потоков, а остальные ставит в очередь. Однако современные приложения — асинхронные, использовать в них обычный семафор неэффективно. И здесь у разработчиков фреймворков и highload-сервисов появляется необходимость выбора алгоритма реализации семафора, работающего не на уровне потоков, а на уровне асинхронных задач. Неудачно выбранный алгоритм еще больше нагрузит сервис, который и так работает под нагрузкой на пределе возможностей.
Распределенный трейсинг OpenTelemetry вместо логирования всего подряд
![](https://habrastorage.org/getpro/habr/upload_files/cca/9d5/a30/cca9d5a308b18713164427a2c22d46cb.jpeg)
Вагиф Абилов
Miles
Сколько сервисов разрабатывают в вашей организации? И сколькими различными маршрутами могут проходить сообщения между ними? Если ответ на первый вопрос — «больше десяти», то ответом на второй будет «больше ста», а то и «больше тысячи».
Трейсинг ошибок процесса обработки данных или поиск источника замедления работы распределенной системы требует немало времени. А опыт использования кастомных дашбордов и индексов логов для решения этих задач сложно обобщить для применения вне конкретного проекта. Но все не так безнадежно.
OpenTelemetry устанавливает общие стандарты экспорта метрик и трейсов приложений, позволяющие агрегировать их в распределенной среде на разных платформах. А также визуализировать с использованием популярных бэкендов и дашбордов — Datadog, Jaeger, Elastic/Kibana и Application Insights.
Спикер рассмотрит основные принципы трейсинга в OpenTelemetry, разберет примеры использования в веб-сервисах, базах данных, очередях и покажет, как все это экспортировать в различные бэкенды.
Пишем приложения, которые не ломаются в продакшене
![](https://habrastorage.org/getpro/habr/upload_files/889/953/c2a/889953c2ab5da6c92ba11b72287926b9.jpeg)
Роман Неволин
Sytac
Любой разработчик в своей работе учитывает много метрик качества: производительность, читаемость, расширяемость. Однако чтобы все это было важно, приложение для начала должно просто работать.
Об этом и пойдет речь: о написании кода, который уменьшает вероятность ошибки, о его тестировании и деплое. Разберем, как на каждом из этапов разработки уменьшить вероятность возникновения багов, как отслеживать их на тестировании и что делать, если вы все-таки задеплоили некорректный код.
Пишем код, когда пишем код: source generator'ы
![](https://habrastorage.org/getpro/habr/upload_files/fb9/666/5fe/fb96665fe34779fa97c46590035a0a16.png)
Олег Сафонов
Тинькофф
Решаем задачу сравнения и логирования объектов, содержащих чувствительные данные. Рассматриваем разные варианты решения: рефлексию, написание кода, генерацию кода.
Используем source generator для решения задачи, обсуждаем интересные проблемы, возникающие при реализации, смотрим, какие проблемы могут демотивировать при написании генератора и как их решить.
Резюмируем результат применения source generator’ов и выделим признаки задач, для которых они могут стать оптимальным решением.
![](https://habrastorage.org/getpro/habr/upload_files/39d/733/57d/39d73357da4119131a37a4fa8e97b9f3.jpeg)
Александр Кузнецов
Это обзорный доклад о технологии Microsoft SignalR. Александр расскажет о том, для чего предназначена эта технология и на практике рассмотрит ее возможности и ограничения.
Загадочный EF Core, или Как написать свое расширение
![](https://habrastorage.org/getpro/habr/upload_files/865/b5d/20c/865b5d20c5218eaea6ed848731080f2c.jpeg)
Игорь Шаталкин
CUSTIS
В EF Core много полезных фич по работе с базами данных, но что, если этих возможностей не хватает?
Фреймворк из коробки не умеет создавать вьюшки и отслеживать изменения их исходного кода. А нам могут понадобиться не только вьюшки, но еще и синонимы, гранты и DB link’и как на производственной БД, так и в интеграционных тестах.
Из доклада вы узнаете про загадочный внутренний мир фреймворка: про ключевые интерфейсы, отвечающие за генерацию и применение миграций, про то, как можно подменить эти интерфейсы, и, самое главное, почему тут не поможет контейнер, создаваемый в Startup. Также поговорим про основные объекты EF Core — что такое модель и зачем нужен снэпшот, из чего состоит миграция и зачем нужно транслировать операции в SQL.
Доклад будет интересен как разработчикам, которые столкнулись с задачами создания и обновления вьюшек, синонимов и других SQL-объектов, так и тем, кто хочет написать свое расширение. Мир EF Core станет для вас менее загадочным, но не менее интересным.
Тестируем код, взаимодействующий с базой данных
![](https://habrastorage.org/getpro/habr/upload_files/292/5f4/4a5/2925f44a54baf4b2946b3d1dcffcd351.jpg)
Гурий Самарин
Инжиниринговый дивизион Госкорпорации «Росатом»
Как тестировать код, взаимодействующий с базой данных? Сначала нужно понять, какой именно зависимостью является база данных. Управляемой (а значит, деталь реализации) или нет?
Спикер рассмотрит способы разворачивания и доставки изменений до тестовых экземпляров баз данных, расскажет, какие базы данных лучше всего использовать в тестах, и изучит существующие решения:
jbogard/Respawn
EfCore.TestSupport J.P.Smith
Testcontainers-dotnet
И попробует самостоятельно создать инфраструктуру для запуска теста в Docker. В большинстве случаев стремитесь тестировать на такой же базе, как в production, только запускайте ее изолировано. Обновляйте базу данных при помощи миграций и раскатывайте их при помощи специальных инструментов (вроде Liquibase).
![](https://habrastorage.org/getpro/habr/upload_files/7ea/79d/a5c/7ea79da5cbfcf1c23d618336aa090b20.jpeg)
Игорь Лабутин
Ланит-Терком
![](https://habrastorage.org/getpro/habr/upload_files/53d/ffb/445/53dffb445816923f91c8cf6503f20fb8.jpeg)
Анатолий Кулаков
Монополия
Тут название говорит само за себя: .NET и C# обновляются, что это нам несёт?
Пиши, как тиктокер, а не как дед. Новые конструкции языка C# в бою
![](https://habrastorage.org/getpro/habr/upload_files/963/e09/8f5/963e098f53c45f4dfafdf0761c77356a.jpeg)
Анатолий Жмур
Broadridge
За 20 лет эволюции вышло много версий языка С#, постепенно набор конструкций расширялся. К сожалению, не многие могут охватить в голове это разнообразие и продолжают писать как «деды писали на Си». В докладе будет много примеров, как можно переписать старый код по-новому, и как не увлекаться этим делом.
Internals
lock(_sync): иллюзия идеального выбора
![](https://habrastorage.org/getpro/habr/upload_files/860/84f/02c/86084f02c945a942fc2bb447e8674d08.jpeg)
Станислав Сидристый
ЦРТ
Ввиду того, что lock является конструкцией языка, которая лаконично и понятно создает секцию монопольного исполнения кода, это создает иллюзию единственно верного решения. Станислав рассмотрит алгоритм его работы и ответит на вопрос: так ли это?
Instruction pipelining от 8086 до 2022: как работает конвейер в современных процессорах
![](https://habrastorage.org/getpro/habr/upload_files/70c/44d/73e/70c44d73e17bff08b9f060d61769bdf5.png)
Вадим Мартынов
Контур
Superscalar pipeline, µop cache, branch prediction, pattern recognition, Out-Of-Order pipeline, re-order buffer, да и просто hyper-threading — все эти механизмы и технологии добавляются в современные процессоры для ускорения выполнения инструкций и улучшения производительности конечных программ. Но глобально современные архитектуры мало чем отличаются от первых Пентиумов и очень похожи на процессоры 8086.
Как работают RISC-процессоры в 2022 году и как это влияет на .NET-программистов — посмотрим на простом примере прикладной задачи расчета выручки сети супермаркетов.
![](https://habrastorage.org/getpro/habr/upload_files/09f/bf1/e99/09fbf1e99a9421a1429dce9150f1cda0.png)
Александр Катин
Сегодня разработка без написания тестов немыслима, и для удобства широко используются тестовые фреймворки. Для своей работы существующие тестовые фреймворки используют атрибуты, применимость которых из-за их реализации в .NET имеет существенные ограничения. Но в новой версии C# произошла маленькая революция этого особенного типа — они стали обобщёнными, и это невообразимо расширило их потенциал. Например, теперь стало возможным писать более эффективные и выразительные обобщённые тесты. Из коробки популярные тестовые фреймворки не позволяют работать с обобщёнными методами, но предоставляют гибкий функционал для воплощения в жизнь такой возможности. Тому, как подружить т с обобщениям при помощи редко используемых возможностей тестовых фреймворков, и будет посвящен доклад.
Архитектура
Интересные подходы в реализации паттернов проектирования
![](https://habrastorage.org/getpro/habr/upload_files/8aa/d13/9ac/8aad139acf02637f204f77b8f6a4214c.jpeg)
Дмитрий Нестерук
За годы исследований паттернов проектирования в C# удалось выявить некоторые интересные подходы, которые креативно используют возможности языка. В этом докладе посмотрим на то, как некоторые паттерны проектирования Банды Четырех могут быть реализованы весьма необычным путем.
![](https://habrastorage.org/getpro/habr/upload_files/b13/abc/374/b13abc37467a9ce29eba04d820e6a1a5.jpeg)
Андрей Ганичев
Dodo Engineering
Когда речь заходит о более или менее сложной системе, для которой предполагается длительное существование, а главное, развитие, вопрос архитектуры становится крайне важным. Но как в процессе жизни системы контролировать правила, которые предполагает та или иная архитектура?
Спикер рассмотрит различные варианты и подробно остановится на одном из них — архитектурных тестах.
С точки зрения реализации, архитектурные тесты — это автоматические тесты, написанные с использованием привычных фреймворков для юнит-тестирования. Архитектурные тесты обладают всеми достоинствами автотестов: быстрый фидбек, наглядная фиксация правил в тестах и возможность встраивания в CI-пайплайн. В докладе обсудим саму идею, поговорим о том, что именно можно тестировать, и рассмотрим существующие OS-инструменты.
Думай как архитектор: майндшифт инженера
![](https://habrastorage.org/getpro/habr/upload_files/d43/4af/f74/d434aff74278ca113177ca9037a7e7d8.jpeg)
Дмитрий Таболич
ИТ1
Рассказ Дмитрия — это свободные размышления на тему профессионального карьерного роста инженера на пути к архитектурной дисциплине и практике. Рассмотрим часто встречающиеся барьеры и сложности, а также способы их преодоления. Формат рассуждений позволяет раскрыть базовые различия в мышлении инженера и архитектора на примерах реальных ситуаций.
![](https://habrastorage.org/getpro/habr/upload_files/577/554/933/5775549335db86a9e1bc96bf0f10f959.jpeg)
Андрей Парамонов
Dodo Engineering
![](https://habrastorage.org/getpro/habr/upload_files/042/19d/86c/04219d86ccc09b85260be4fd38bafec8.jpeg)
Антон Оникийчук
Dodo Engineering
В индустрии использование MediatR считается хорошим тоном. Поработав с большим количеством сервисов, в которых его применяли, спикеры поняли, что в 99% случаев он вреден. Почему так и этому есть доказательства — обо всем этом вы узнаете из доклада.
Zero-downtime deployment и базы данных
![](https://habrastorage.org/getpro/habr/upload_files/2e1/86e/f31/2e186ef316601df4f8716be800016672.jpeg)
Андрей Цветцих
Тинькофф, DevBrothers
Микросервисы уже давно и прочно вошли в нашу жизнь. Они позволяют реализовывать масштабируемые и отказоустойчивые решения. Но при деплое новой версии на кластер иногда возникают ошибки, связанные с обновлением базы данных.
Спикер разберет популярные способы деплоя на кластер. Покажет типовые проблемы, возникающие при обновлении базы данных, и пути их решения. Также разберемся, чем обновление NoSQL баз данных отличается традиционных реляционных баз.
Rich Model и Anemic Model: враги или друзья
![](https://habrastorage.org/getpro/habr/upload_files/95b/9b6/431/95b9b64317fd64c489c12d696d85980d.jpeg)
Денис Цветцих
DevBrothers
В сообществе много холиваров о том, какую модель лучше использовать — Rich или Anemic. При этом лагерь консультантов активно топит за Rich Model, а среди разработчиков популярна Anemic Model. Поговорим о модели без предрассудков и с практической точки зрения. Для начала определимся с понятиями, что принято называть терминами Rich Model и Anemic Model, по каким критериям их можно отличить. Посмотрим, стоит ли использовать две модели данных: бизнес-модель для бизнес-логики и отдельную data-модель для маппинга на базу. Увидим, какие кейсы невозможно реализовать в канонической Rich-модели. Обсудим, так ли страшна анемичная модель, как ее ругают. И придем к прагматичной модели, которая чаще всего встречается на практике.
Расширяем горизонты
Поговорим об описательной статистике перформанс-распределений
![](https://habrastorage.org/getpro/habr/upload_files/d00/5be/92f/d005be92fd161dc236fa72aeb16e0f0f.jpeg)
Андрей Акиньшин
Метрики производительности приложений никогда не описываются одним числом. Они являются случайными значениями из некоторого распределения. Но как нам это распределение описать? Как стабильно вычислить среднее значение и степень вариации? Как высчитать квантили и построить график плотности распределения? Что делать с мультимодальностью и экстремальными выбросами?
Для каждой из этих задач существуют десятки различных методов, каждый из которых обладает собственными характеристиками. В этом докладе мы погрузимся в увлекательный мир описательной статистики и обсудим многообразие доступных математических инструментов. А после доклада у вас появится общее понимание проблематики этой области и адекватности применения тех или иных подходов, что защитит вас от распространённых ошибок при агрегации замеров производительности.
Как научить вашего ребенка программировать (и не только)
![](https://habrastorage.org/getpro/habr/upload_files/9f2/590/943/9f2590943b4c73d25ae1771e26929c38.jpeg)
Дмитрий Сошников
МАИ / НИУ ВШЭ
Дискуссия о том, надо ли всем ли современным детям нужно изучать программирование, ведь «программирование — это вторая грамотность», ведется с середины прошлого века
Попробуем слегка расширить эту дискуссию и посмотреть, какую роль компьютер, как инструмент, может сыграть в формировании у детей стиля мышления и современного научного мировоззрения. Поговорим не только о программировании, но и о генеративном искусстве, Data Science, мейкерстве и об искусственном интеллекте.
Open source с точки зрения юриста
![](https://habrastorage.org/getpro/habr/upload_files/ec4/603/342/ec46033425058f651a4a7cd04c0ae0fb.jpeg)
Ольга Щербакова
МОНОПОЛИЯ
Open source — неюридическая тема, в основе которой лежит юридическая проблематика. Мы поговорим о том, почему юрист становится лучшим «другом» разработчика, и как избежать неожиданных рисков для компании при использовании компонентов или ПО с открытым кодом. Также поговорим о тенденциях в области привлечения к ответственности за нарушения, связанные с неправомерным использованием open source. Узнаем, как это происходит и почему вообще мы должны об этом переживать, разрабатывая ПО в России.
Анализ C# кода на Roslyn: от теории к практике
![](https://habrastorage.org/getpro/habr/upload_files/2ba/da9/c8a/2bada9c8afbe522e12cc304687829b9d.png)
Сергей Васильев
PVS-Studio LLC
Roslyn помогает достаточно легко анализировать C# код, но азы знать все равно полезно. Зачем нужны синтаксические деревья? А семантическая модель? И как использовать все это для решения практических задач?
Ответим на эти вопросы, поговорим о подводных камнях и узнаем, что нужно, чтобы написать свой анализатор для C#.
SkillsFlow: разработка системы управления навыками и компетенциями
![](https://habrastorage.org/getpro/habr/upload_files/507/19c/5d4/50719c5d494b923608c31e2af2fe93a1.jpeg)
Роман Просин
Райффайзенбанк
Спикер расскажет о создании системы развития и оценки навыков SkillsFlow. Вы узнаете о глобальной структуре навыков и компетенций для цифрового мира и о том, как реализовать систему непрерывной оценки навыков, начиная с входного интервью кандидата и заканчивая путём развития сотрудника в организации.
По технике будут продемонстрированы возможности ASP.NET Core (кэширование и сжатие ответов, отслеживание изменений конфигурации в K8S без перезагрузки, аутентификация и авторизация OIDC, OAuth, политики авторизации и авторизация на основе ресурсов), ML.NET, развёртывание, управление секретами и конфигурацией в K8S.
Пишем функционально на C# и F#
![](https://habrastorage.org/getpro/habr/upload_files/ea6/44e/4a6/ea644e4a69576a44b1b8628cba8242af.jpeg)
Марк Шевченко
CraftTalk
В течение последних пятнадцати лет создатели C# добавили в язык много функциональных возможностей: лямбда-функции, вывод типов, записи, деревья выражений и сопоставление с образцом.
Может показаться, что теперь F# в .NET не нужен, потому что всё уже есть в C#, а если нет, то появится в ближайшее время. Так ли это? Попробуем разобраться.
Исследуем малоизвестные возможности C# и попробуем написать на F# код, для которого нет функциональных средств в C#. В конечном итоге попробуем понять, нужен ли F# в современных .NET-проектах.
Напоследок
Доклады — не единственное, что будет на конференции. Помимо часовых монологов, будут и более диалоговые форматы, вроде обсуждения «Объединяем .NET-разработчиков: Как запустить и развить гильдии в компании». Сразу четыре лидера гильдий из разных компаний поговорят о том, что это вообще такое, какие преимущества дают гильдии и как их реализовать.
Будут и другие обсуждения («Обучение от 0+» и «Best practices для разработки Application Layer»), и интервью с некоторыми спикерами.
Но важно ещё вот что: сидеть и молча смотреть — не единственное, что можно делать на конференции. Во время каждого доклада можно задавать вопросы в чате, после завершения доклада — в «дискуссионной зоне» со спикером (офлайновой или в формате видеозвонка), и порой там разгораются оживлённые обсуждения. А уж те участники, кто соберутся в Москве очно, наверняка воспользуются возможностью как следует пообщаться друг с другом и спикерами.
А нам остаётся напомнить, что остальные подробности о конференции (вроде точного расписания) и билеты — на сайте DotNext.