Как снизить вероятность ошибок в коде? Что нового в .NET и C#? Как правильно работать со статистикой при замерах производительности? Как научить ребёнка программировать?
Эти вопросы выглядят совершенно разношёрстными. Но у них есть общее: все они получат ответы на ближайшем DotNext. Программа конференции составлена, и мы представляем её Хабру.
А сам DotNext начнётся уже на следующей неделе. Дни 3-4 ноября будут полностью онлайновыми, а вот 20 ноября — на выбор участников: можно прийти на офлайн-часть в Москве, можно подключиться к ней удалённо.
Оглавление
Best practices
Евгений Пешков
Тинькофф
Факапы на бэкенде периодически случаются у всех. Части этих факапов можно избежать, если провести нагрузочное тестирование, определить пределы возможностей сервиса и заранее ограничить количество одновременно обрабатываемых запросов. Это позволяет сгладить неравномерность нагрузки и справиться с обработкой хотя бы части запросов, что гораздо лучше полного падения сервиса.
Решить задачу Rate Limiting помогает примитив синхронизации под названием семафор. Он пропускает внутрь заданное количество потоков, а остальные ставит в очередь. Однако современные приложения — асинхронные, использовать в них обычный семафор неэффективно. И здесь у разработчиков фреймворков и highload-сервисов появляется необходимость выбора алгоритма реализации семафора, работающего не на уровне потоков, а на уровне асинхронных задач. Неудачно выбранный алгоритм еще больше нагрузит сервис, который и так работает под нагрузкой на пределе возможностей.
Распределенный трейсинг OpenTelemetry вместо логирования всего подряд
Вагиф Абилов
Miles
Сколько сервисов разрабатывают в вашей организации? И сколькими различными маршрутами могут проходить сообщения между ними? Если ответ на первый вопрос — «больше десяти», то ответом на второй будет «больше ста», а то и «больше тысячи».
Трейсинг ошибок процесса обработки данных или поиск источника замедления работы распределенной системы требует немало времени. А опыт использования кастомных дашбордов и индексов логов для решения этих задач сложно обобщить для применения вне конкретного проекта. Но все не так безнадежно.
OpenTelemetry устанавливает общие стандарты экспорта метрик и трейсов приложений, позволяющие агрегировать их в распределенной среде на разных платформах. А также визуализировать с использованием популярных бэкендов и дашбордов — Datadog, Jaeger, Elastic/Kibana и Application Insights.
Спикер рассмотрит основные принципы трейсинга в OpenTelemetry, разберет примеры использования в веб-сервисах, базах данных, очередях и покажет, как все это экспортировать в различные бэкенды.
Пишем приложения, которые не ломаются в продакшене
Роман Неволин
Sytac
Любой разработчик в своей работе учитывает много метрик качества: производительность, читаемость, расширяемость. Однако чтобы все это было важно, приложение для начала должно просто работать.
Об этом и пойдет речь: о написании кода, который уменьшает вероятность ошибки, о его тестировании и деплое. Разберем, как на каждом из этапов разработки уменьшить вероятность возникновения багов, как отслеживать их на тестировании и что делать, если вы все-таки задеплоили некорректный код.
Пишем код, когда пишем код: source generator'ы
Олег Сафонов
Тинькофф
Решаем задачу сравнения и логирования объектов, содержащих чувствительные данные. Рассматриваем разные варианты решения: рефлексию, написание кода, генерацию кода.
Используем source generator для решения задачи, обсуждаем интересные проблемы, возникающие при реализации, смотрим, какие проблемы могут демотивировать при написании генератора и как их решить.
Резюмируем результат применения source generator’ов и выделим признаки задач, для которых они могут стать оптимальным решением.
Александр Кузнецов
Это обзорный доклад о технологии 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 и C# обновляются, что это нам несёт?
Пиши, как тиктокер, а не как дед. Новые конструкции языка C# в бою
Анатолий Жмур
Broadridge
За 20 лет эволюции вышло много версий языка С#, постепенно набор конструкций расширялся. К сожалению, не многие могут охватить в голове это разнообразие и продолжают писать как «деды писали на Си». В докладе будет много примеров, как можно переписать старый код по-новому, и как не увлекаться этим делом.
Internals
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-программистов — посмотрим на простом примере прикладной задачи расчета выручки сети супермаркетов.
Александр Катин
Сегодня разработка без написания тестов немыслима, и для удобства широко используются тестовые фреймворки. Для своей работы существующие тестовые фреймворки используют атрибуты, применимость которых из-за их реализации в .NET имеет существенные ограничения. Но в новой версии C# произошла маленькая революция этого особенного типа — они стали обобщёнными, и это невообразимо расширило их потенциал. Например, теперь стало возможным писать более эффективные и выразительные обобщённые тесты. Из коробки популярные тестовые фреймворки не позволяют работать с обобщёнными методами, но предоставляют гибкий функционал для воплощения в жизнь такой возможности. Тому, как подружить т с обобщениям при помощи редко используемых возможностей тестовых фреймворков, и будет посвящен доклад.
Архитектура
Интересные подходы в реализации паттернов проектирования
Дмитрий Нестерук
За годы исследований паттернов проектирования в C# удалось выявить некоторые интересные подходы, которые креативно используют возможности языка. В этом докладе посмотрим на то, как некоторые паттерны проектирования Банды Четырех могут быть реализованы весьма необычным путем.
Андрей Ганичев
Dodo Engineering
Когда речь заходит о более или менее сложной системе, для которой предполагается длительное существование, а главное, развитие, вопрос архитектуры становится крайне важным. Но как в процессе жизни системы контролировать правила, которые предполагает та или иная архитектура?
Спикер рассмотрит различные варианты и подробно остановится на одном из них — архитектурных тестах.
С точки зрения реализации, архитектурные тесты — это автоматические тесты, написанные с использованием привычных фреймворков для юнит-тестирования. Архитектурные тесты обладают всеми достоинствами автотестов: быстрый фидбек, наглядная фиксация правил в тестах и возможность встраивания в CI-пайплайн. В докладе обсудим саму идею, поговорим о том, что именно можно тестировать, и рассмотрим существующие OS-инструменты.
Думай как архитектор: майндшифт инженера
Дмитрий Таболич
ИТ1
Рассказ Дмитрия — это свободные размышления на тему профессионального карьерного роста инженера на пути к архитектурной дисциплине и практике. Рассмотрим часто встречающиеся барьеры и сложности, а также способы их преодоления. Формат рассуждений позволяет раскрыть базовые различия в мышлении инженера и архитектора на примерах реальных ситуаций.
Андрей Парамонов
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.