Как снизить вероятность ошибок в коде? Что нового в .NET и C#? Как правильно работать со статистикой при замерах производительности? Как научить ребёнка программировать?  Эти вопросы выглядят совершенно разношёрстными. Но у них есть общее: все они получат ответы на ближайшем DotNext. Программа конференции составлена, и мы представляем её Хабру. А сам DotNext начнётся уже на следующей неделе. Дни 3-4 ноября будут полностью онлайновыми, а вот 20 ноября — на выбор участников: можно прийти на офлайн-часть в Москве, можно подключиться к ней удалённо. Best practices Internals Архитектура Расширяем горизонты Напоследок Алгоритмы троттлинга запросов Тинькофф Факапы на бэкенде периодически случаются у всех. Части этих факапов можно избежать, если провести нагрузочное тестирование, определить пределы возможностей сервиса и заранее ограничить количество одновременно обрабатываемых запросов. Это позволяет сгладить неравномерность нагрузки и справиться с обработкой хотя бы части запросов, что гораздо лучше полного падения сервиса.  Решить задачу Rate Limiting помогает примитив синхронизации под названием семафор. Он пропускает внутрь заданное количество потоков, а остальные ставит в очередь. Однако современные приложения — асинхронные, использовать в них обычный семафор неэффективно. И здесь у разработчиков фреймворков и highload-сервисов появляется необходимость выбора алгоритма реализации семафора, работающего не на уровне потоков, а на уровне асинхронных задач. Неудачно выбранный алгоритм еще больше нагрузит сервис, который и так работает под нагрузкой на пределе возможностей. Распределенный трейсинг OpenTelemetry вместо логирования всего подряд Miles Сколько сервисов разрабатывают в вашей организации? И сколькими различными маршрутами могут проходить сообщения между ними? Если ответ на первый вопрос — «больше десяти», то ответом на второй будет «больше ста», а то и «больше тысячи». Трейсинг ошибок процесса обработки данных или поиск источника замедления работы распределенной системы требует немало времени. А опыт использования кастомных дашбордов и индексов логов для решения этих задач сложно обобщить для применения вне конкретного проекта. Но все не так безнадежно. OpenTelemetry устанавливает общие стандарты экспорта метрик и трейсов приложений, позволяющие агрегировать их в распределенной среде на разных платформах. А также визуализировать с использованием популярных бэкендов и дашбордов — Datadog, Jaeger, Elastic/Kibana и Application Insights. Спикер рассмотрит основные принципы трейсинга в OpenTelemetry, разберет примеры использования в веб-сервисах, базах данных, очередях и покажет, как все это экспортировать в различные бэкенды. Пишем приложения, которые не ломаются в продакшене Sytac Любой разработчик в своей работе учитывает много метрик качества: производительность, читаемость, расширяемость. Однако чтобы все это было важно, приложение для начала должно просто работать. Об этом и пойдет речь: о написании кода, который уменьшает вероятность ошибки, о его тестировании и деплое. Разберем, как на каждом из этапов разработки уменьшить вероятность возникновения багов, как отслеживать их на тестировании и что делать, если вы все-таки задеплоили некорректный код. Пишем код, когда пишем код: source generator'ы Тинькофф Решаем задачу сравнения и логирования объектов, содержащих чувствительные данные. Рассматриваем разные варианты решения: рефлексию, написание кода, генерацию кода. Используем source generator для решения задачи, обсуждаем интересные проблемы, возникающие при реализации, смотрим, какие проблемы могут демотивировать при написании генератора и как их решить. Резюмируем результат применения source generator’ов и выделим признаки задач, для которых они могут стать оптимальным решением. Введение в Microsoft SignalR  Это обзорный доклад о технологии Microsoft SignalR. Александр расскажет о том, для чего предназначена эта технология и на практике рассмотрит ее возможности и ограничения. Загадочный EF Core, или Как написать свое расширение CUSTIS В EF Core много полезных фич по работе с базами данных, но что, если этих возможностей не хватает?  Фреймворк из коробки не умеет создавать вьюшки и отслеживать изменения их исходного кода. А нам могут понадобиться не только вьюшки, но еще и синонимы, гранты и DB link’и как на производственной БД, так и в интеграционных тестах. Из доклада вы узнаете про загадочный внутренний мир фреймворка: про ключевые интерфейсы, отвечающие за генерацию и применение миграций, про то, как можно подменить эти интерфейсы, и, самое главное, почему тут не поможет контейнер, создаваемый в Startup. Также поговорим про основные объекты EF Core — что такое модель и зачем нужен снэпшот, из чего состоит миграция и зачем нужно транслировать операции в SQL. Доклад будет интересен как разработчикам, которые столкнулись с задачами создания и обновления вьюшек, синонимов и других SQL-объектов, так и тем, кто хочет написать свое расширение. Мир EF Core станет для вас менее загадочным, но не менее интересным. Тестируем код, взаимодействующий с базой данных Инжиниринговый дивизион Госкорпорации «Росатом» Как тестировать код, взаимодействующий с базой данных? Сначала нужно понять, какой именно зависимостью является база данных. Управляемой (а значит, деталь реализации) или нет? Спикер рассмотрит способы разворачивания и доставки изменений до тестовых экземпляров баз данных, расскажет, какие базы данных лучше всего использовать в тестах, и изучит существующие решения: jbogard/Respawn EfCore.TestSupport J.P.Smith Testcontainers-dotnet И попробует самостоятельно создать инфраструктуру для запуска теста в Docker. В большинстве случаев стремитесь тестировать на такой же базе, как в production, только запускайте ее изолировано. Обновляйте базу данных при помощи миграций и раскатывайте их при помощи специальных инструментов (вроде Liquibase). Что нового в .NET 7 и C# 11 Ланит-Терком Монополия Тут название говорит само за себя: .NET и C# обновляются, что это нам несёт? Пиши, как тиктокер, а не как дед. Новые конструкции языка C# в бою Broadridge За 20 лет эволюции вышло много версий языка С#, постепенно набор конструкций расширялся. К сожалению, не многие могут охватить в голове это разнообразие и продолжают писать как «деды писали на Си». В докладе будет много примеров, как можно переписать старый код по-новому, и как не увлекаться этим делом. lock(_sync): иллюзия идеального выбора ЦРТ Ввиду того, что lock является конструкцией языка, которая лаконично и понятно создает секцию монопольного исполнения кода, это создает иллюзию единственно верного решения. Станислав рассмотрит алгоритм его работы и ответит на вопрос: так ли это? Instruction pipelining от 8086 до 2022: как работает конвейер в современных процессорах  Контур Superscalar pipeline, µop cache, branch prediction, pattern recognition, Out-Of-Order pipeline, re-order buffer, да и просто hyper-threading — все эти механизмы и технологии добавляются в современные процессоры для ускорения выполнения инструкций и улучшения производительности конечных программ. Но глобально современные архитектуры мало чем отличаются от первых Пентиумов и очень похожи на процессоры 8086. Как работают RISC-процессоры в 2022 году и как это влияет на .NET-программистов — посмотрим на простом примере прикладной задачи расчета выручки сети супермаркетов. [Test] + <T> = ❤️  Сегодня разработка без написания тестов немыслима, и для удобства широко используются тестовые фреймворки. Для своей работы существующие тестовые фреймворки используют атрибуты, применимость которых из-за их реализации в .NET имеет существенные ограничения. Но в новой версии C# произошла маленькая революция этого особенного типа — они стали обобщёнными, и это невообразимо расширило их потенциал. Например, теперь стало возможным писать более эффективные и выразительные обобщённые тесты. Из коробки популярные тестовые фреймворки не позволяют работать с обобщёнными методами, но предоставляют гибкий функционал для воплощения в жизнь такой возможности. Тому, как подружить т с обобщениям при помощи редко используемых возможностей тестовых фреймворков, и будет посвящен доклад. Интересные подходы в реализации паттернов проектирования  За годы исследований паттернов проектирования в C# удалось выявить некоторые интересные подходы, которые креативно используют возможности языка. В этом докладе посмотрим на то, как некоторые паттерны проектирования Банды Четырех могут быть реализованы весьма необычным путем. Архитектурные тесты Dodo Engineering Когда речь заходит о более или менее сложной системе, для которой предполагается длительное существование, а главное, развитие, вопрос архитектуры становится крайне важным. Но как в процессе жизни системы контролировать правила, которые предполагает та или иная архитектура? Спикер рассмотрит различные варианты и подробно остановится на одном из них — архитектурных тестах. С точки зрения реализации, архитектурные тесты  — это автоматические тесты, написанные с использованием привычных фреймворков для юнит-тестирования. Архитектурные тесты обладают всеми достоинствами автотестов: быстрый фидбек, наглядная фиксация правил в тестах и возможность встраивания в CI-пайплайн. В докладе обсудим саму идею, поговорим о том, что именно можно тестировать, и рассмотрим существующие OS-инструменты. Думай как архитектор: майндшифт инженера ИТ1 Рассказ Дмитрия — это свободные размышления на тему профессионального карьерного роста инженера на пути к архитектурной дисциплине и практике. Рассмотрим часто встречающиеся барьеры и сложности, а также способы их преодоления. Формат рассуждений позволяет раскрыть базовые различия в мышлении инженера и архитектора на примерах реальных ситуаций. MediatR не нужен Dodo Engineering Dodo Engineering В индустрии использование MediatR считается хорошим тоном. Поработав с большим количеством сервисов, в которых его применяли, спикеры поняли, что в 99% случаев он вреден. Почему так и этому есть доказательства — обо всем этом вы узнаете из доклада. Zero-downtime deployment и базы данных Тинькофф, DevBrothers Микросервисы уже давно и прочно вошли в нашу жизнь. Они позволяют реализовывать масштабируемые и отказоустойчивые решения. Но при деплое новой версии на кластер иногда возникают ошибки, связанные с обновлением базы данных. Спикер разберет популярные способы деплоя на кластер. Покажет типовые проблемы, возникающие при обновлении базы данных, и пути их решения. Также разберемся, чем обновление NoSQL баз данных отличается традиционных реляционных баз. Rich Model и Anemic Model: враги или друзья DevBrothers В сообществе много холиваров о том, какую модель лучше использовать — Rich или Anemic. При этом лагерь консультантов активно топит за Rich Model, а среди разработчиков популярна Anemic Model. Поговорим о модели без предрассудков и с практической точки зрения. Для начала определимся с понятиями, что принято называть терминами Rich Model и Anemic Model, по каким критериям их можно отличить. Посмотрим, стоит ли использовать две модели данных: бизнес-модель для бизнес-логики и отдельную data-модель для маппинга на базу. Увидим, какие кейсы невозможно реализовать в канонической Rich-модели. Обсудим, так ли страшна анемичная модель, как ее ругают. И придем к прагматичной модели, которая чаще всего встречается на практике. Поговорим об описательной статистике перформанс-распределений  Метрики производительности приложений никогда не описываются одним числом. Они являются случайными значениями из некоторого распределения. Но как нам это распределение описать? Как стабильно вычислить среднее значение и степень вариации? Как высчитать квантили и построить график плотности распределения? Что делать с мультимодальностью и экстремальными выбросами? Для каждой из этих задач существуют десятки различных методов, каждый из которых обладает собственными характеристиками. В этом докладе мы погрузимся в увлекательный мир описательной статистики и обсудим многообразие доступных математических инструментов. А после доклада у вас появится общее понимание проблематики этой области и адекватности применения тех или иных подходов, что защитит вас от распространённых ошибок при агрегации замеров производительности. Как научить вашего ребенка программировать (и не только) МАИ / НИУ ВШЭ Дискуссия о том, надо ли всем ли современным детям нужно изучать программирование, ведь «программирование — это вторая грамотность», ведется с середины прошлого века Попробуем слегка расширить эту дискуссию и посмотреть, какую роль компьютер, как инструмент, может сыграть в формировании у детей стиля мышления и современного научного мировоззрения. Поговорим не только о программировании, но и о генеративном искусстве, Data Science, мейкерстве и об искусственном интеллекте. Open source с точки зрения юриста МОНОПОЛИЯ Open source — неюридическая тема, в основе которой лежит юридическая проблематика. Мы поговорим о том, почему юрист становится лучшим «другом» разработчика, и как избежать неожиданных рисков для компании при использовании компонентов или ПО с открытым кодом. Также поговорим о тенденциях в области привлечения к ответственности за нарушения, связанные с неправомерным использованием open source. Узнаем, как это происходит и почему вообще мы должны об этом переживать, разрабатывая ПО в России. Анализ C# кода на Roslyn: от теории к практике PVS-Studio LLC Roslyn помогает достаточно легко анализировать C# код, но азы знать все равно полезно. Зачем нужны синтаксические деревья? А семантическая модель? И как использовать все это для решения практических задач? Ответим на эти вопросы, поговорим о подводных камнях и узнаем, что нужно, чтобы написать свой анализатор для C#.  SkillsFlow: разработка системы управления навыками и компетенциями Райффайзенбанк Спикер расскажет о создании системы развития и оценки навыков SkillsFlow. Вы узнаете о глобальной структуре навыков и компетенций для цифрового мира и о том, как реализовать систему непрерывной оценки навыков, начиная с входного интервью кандидата и заканчивая путём развития сотрудника в организации. По технике будут продемонстрированы возможности ASP.NET Core (кэширование и сжатие ответов, отслеживание изменений конфигурации в K8S без перезагрузки, аутентификация и авторизация OIDC, OAuth, политики авторизации и авторизация на основе ресурсов), ML.NET, развёртывание, управление секретами и конфигурацией в K8S. Пишем функционально на C# и F# CraftTalk В течение последних пятнадцати лет создатели C# добавили в язык много функциональных возможностей: лямбда-функции, вывод типов, записи, деревья выражений и сопоставление с образцом. Может показаться, что теперь F# в .NET не нужен, потому что всё уже есть в C#, а если нет, то появится в ближайшее время. Так ли это? Попробуем разобраться. Исследуем малоизвестные возможности C# и попробуем написать на F# код, для которого нет функциональных средств в C#. В конечном итоге попробуем понять, нужен ли F# в современных .NET-проектах. Доклады — не единственное, что будет на конференции. Помимо часовых монологов, будут и более диалоговые форматы, вроде обсуждения «Объединяем .NET-разработчиков: Как запустить и развить гильдии в компании». Сразу четыре лидера гильдий из разных компаний поговорят о том, что это вообще такое, какие преимущества дают гильдии и как их реализовать. Будут и другие обсуждения («Обучение от 0+» и «Best practices для разработки Application Layer»), и интервью с некоторыми спикерами. Но важно ещё вот что: сидеть и молча смотреть — не единственное, что можно делать на конференции. Во время каждого доклада можно задавать вопросы в чате, после завершения доклада — в «дискуссионной зоне» со спикером (офлайновой или в формате видеозвонка), и порой там разгораются оживлённые обсуждения. А уж те участники, кто соберутся в Москве очно, наверняка воспользуются возможностью как следует пообщаться друг с другом и спикерами. А нам остаётся напомнить, что остальные подробности о конференции (вроде точного расписания) и билеты — на сайте DotNext.  Program Team Lead / JUG Ru Group