Когда-то в прошлой жизни, до слова «коронавирус», конференция DotNext проходила в офлайне два дня подряд. Спикеры были на расстоянии вытянутой руки, кофе-брейки бурлили обсуждением докладов и не только, а вечером первого дня пространство превращалось в вечеринку с живой музыкой и тематическими дискуссиями.

С пандемией нам пришлось уйти в онлайн, в прошлом году осторожно вернули один офлайн-день. А в этом решили отбросить полумеры и впервые за четыре года проведём DotNext в классическом формате: два дня офлайна и море живого общения! Впрочем, если не получается приехать в Москву, то есть возможность поучаствовать удалённо.

А что в программе? Все доклады разделены по четырём блокам: «Архитектура», «Best practices», «Internals» (то есть внутренние «кишочки» платформы), и «Расширяем горизонты» (смежные темы, которые не строго про .NET-разработку, но дотнетчикам могут быть интересны).

О чём именно будут доклады в этих блоках? Все их описания — в этом посте.

Internals

Убийцы производительности

Евгений Пешков

Тинькофф

Одна из причин низкой производительности .NET-приложений — некачественные сторонние библиотеки или неправильное их использование. Например, обычное логирование может превратить всю программу в однопоточную, если неправильно сконфигурировано. Увы, некоторые подобные проблемы кочуют из библиотеки в библиотеку, и из проекта в проект. В докладе Евгений покажет примеры таких проблем и расскажет, как их избежать.


Когда 100% CPU ничего не значат

Станислав Флусов

Монополия

Станислав обсудит несколько уровней абстракции: виртуализацию, контейнеризацию и их влияние на производительность приложений.


Serverless. Под капотом Cloud Functions

Максим Шошин

Yandex Cloud

Доклад о внутреннем устройстве Cloud Functions в Yandex Cloud. Подобный сервис реализован у всех крупных облачных провайдеров — Azure, AWS и Google Cloud.

Доклад для тех, кто планирует использовать в своей работе serverless-сервисы и хочет глубже понимать, как устроены механизмы работы одного из самых базовых сервисов этой экосистемы. А также для тех, кто интересуется внутренним устройством высоконагруженного распределенного сервиса.

Рассмотрим:

  • Примеры использования и границы применимости сервиса Cloud Functions.

  • Распределенную архитектуру и внутреннее устройство системы.

  • Планировщик, механизм масштабирования и эвристики.

  • Проблемы, с которыми сталкивались, и пути их решения.

  • Актуальные тесты производительности.


Open Source .NET Interop Debugger

Глеб Балыков

Глеб расскажет про open source .NET debugger под названием NetCoreDbg и про его новую функциональность для interop-дебага. Режим interop-дебага позволяет отлаживать не только managed код, но и нативный код в одной и той же сессии. Подобная функциональность есть в Visual Studio Debugger, но он поддерживает только Windows x86/x64/arm64. NetCoreDbg поддерживает операционную систему Linux и архитектуры x86/x64/arm/arm64. Без подобной функциональности сложно отлаживать переходы из managed кода в нативный код и обратно, а NetCoreDbg решает данную проблему. Спикер расскажет про то, как устроен дебаггер, и покажет примеры использования NetCoreDbg в различных режимах, в том числе через интерфейс командной строки как в gdb. Будет интересно .NET-разработчикам, которые используют P/Invoke (то есть нативный код), и хоть раз встречались с проблемами взаимодействия с нативным кодом.


Архитектура

Workflow-архитектура сервисов на .NET

Михаил Дошевский

BFS

Перед командой спикера встала задача реализации софта для банкоматов. Классическое решение с WebAPI-сервисом и SPA, которое сначала решили реализовать, оказалось для этой задачи неподходящим. Поиски решения привели команду к workflow-ориентированному архитектурному подходу.

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

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


Большая распродажа грефневой кафки

Борис Кузоваткин

Ozon

В сезон распродаж, когда в 00:00 стартует акция, сотни тысяч человек заходят на сайт Ozon и за минуты сметают сток с витрины. Как технически устроены распродажи? Какой путь проходит посылка от сайта до логистики? И какие архитектурные решения позволяют системе переживать пиковые нагрузки в первые минуты распродажи? Ответы на эти вопросы — в докладе Бориса.


Укрощаем DDD на практике

Денис Пешехонов

АСЭ

Александр Химушкин

АСЭ

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

Вы узнаете про классический DDD-подход, трехслойную архитектуру Domain-Application-Infrastructure, плюсы и минусы, а также области применимости.

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


Фантастические акторы и где они обитают

Андрей Парамонов

Dodo Engineering

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


Best practices

Build as Code

Анатолий Кулаков

Монополия

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


Уязвимости при работе с XML в .NET: часть 2

Сергей Васильев

В докладе на DotNext 2022 Spring мы кратко разобрали дефекты безопасности при работе с XML — XEE и XXE.

В этот раз погрузимся глубже в тему XXE. Как атаковать приложения с помощью XML? Как защититься от атак? И действительно ли безопасны современные XML-парсеры?

Чтобы ответить на эти вопросы, придется еще глубже познакомиться с атаками, покопаться в исходниках .NET и .NET Framework, а также разобрать несколько реальных уязвимостей, в том числе — XXE из .NET 6.

Доклад будет интересен не только работающим с XML, но и интересующимся безопасностью и внутренним устройством .NET / .NET Framework.


Не EF Core единым: альтернативная ORM LINQ to DB и ее возможности

Алексей Фадеев

sibedge

Бездумное использование ORM-библиотек приводит к большому росту нагрузки на БД, администраторы баз данных не дадут соврать. Но ORM-библиотеки совершенствуются, разработчики учатся на своих и чужих ошибках, и многие научились писать код для ORM, генерирующий вполне оптимальные запросы для типовых операций. Но есть еще одна проблема ORM — ограниченность инструментов. Популярная СУБД Postgres имеет массу операторов и конструкций, выходящих за рамки стандарта SQL (да и в других СУБД такое встречается).

ORM-библиотека LINQ to DB имеет важную особенность: она позволяет очень просто (буквально в пару строк) писать расширения, реализующие любой SQL-оператор или конструкцию.

В этом докладе Алексей покажет, как строить нетипичные для ORM запросы, например, с выражениями CTE (в том числе рекурсивными), табличными функциями и LATERAL JOIN. А также приведет примеры использования специфичной для PostgreSQL функциональности: работы с массивами и jsonb, агрегатами array_agg и jsonb_object_agg, использование встроенного полнотекстового поиска, поиск по геоданным «KNN». Помимо демонстрации возможностей ORM LINQ to DB доклад может быть интересен, как раскрывающий специфическую функциональность самой СУБД Postgres, о котором многие разработчики даже не подозревали.


Метрики в .NET на примере OpenTelemetry и Prometheus

Александр Пугач

Лаборатория Касперского

В современной разработке наблюдаемость системы является неотъемлемой частью. Постоянный мониторинг сервисов в реальном времени позволяет гораздо больше узнать о том, чем на самом деле они занимаются. Сейчас существует множество инструментов, технологий и подходов для организации наблюдаемости, которые имеют свои достоинства и недостатки. OpenTelemetry устанавливает общие стандарты для логов, метрик и трейсов, которые поддерживают большое количество платформ, что позволяет использовать все их преимущества.

Спикер поделится своим опытом по работе с метриками в .NET на примере OpenTelemetry и Prometheus. Недавно OpenTelemetry API для метрик в .NET стало stable, а значит его можно использовать в своих проектах. Спикер расскажет немного про OpenTelemetry в целом и особенностях API в .NET, как добавлять метрики в свои приложения, какие есть варианты сбора метрик. Он покажет примеры кода и демо по сбору метрики с приложения в Prometheus и визуализацией в Grafana. Поделится накопленными best practices и примерами по работе с метриками в .NET.


Decode review: как ревью кода помогает улучшать процессы

Олег Сафонов

Тинькофф

Вопреки названию, код ревью помогает нам не только с кодом, но и может служить отличным индикатором того, как в целом поставлен процесс разработки.

Рассмотрим, какие признаки процесса код-ревью могут быть свидетельством того, что есть проблемы в процессах.

Олег расскажет о том, почему любит код-ревью и почему многие его не любят.


DI-контейнеры в NUnit-тестах

Вадим Мартынов

Яндекс

В автотестах разных проектов часто можно встретить повторяющиеся проблемы — код тестов сложный для чтения, навигации и рефакторинга; тесты не параллельны, и их сложно распараллеливать; запуск одного теста может вызывать длительные действия подготовки иногда не нужных ему данных; из-за хитроспелетений [SetUp]-ов и наследования сложно понять, в каком контексте работает конкретный тест.

Попробуем решить эти проблемы, используя общепризнанные практики написания кода и посмотрим, что из этого получится.


Feature Toggling — в чем польза и как начать его применять

Антон Степанов

Byndyusoft

Антон расскажет, что такое Feature Toggling: какие проблемы он решает, какие у него есть плюсы и минусы. Разберем несколько простых примеров из реального проекта.


Приемы экономии памяти в .NET

Кирилл Бажайкин

Самолет

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

Из доклада вы узнаете об основных приемах экономии памяти в современных .NET приложениях. Вспомним про ArrayPool, stackalloc и, конечно, будем много работать со Span. Цель доклада — показать и доказать, что современный .NET — это платформа, где возможно написать эффективный и быстрый код.


Реактивная сборка огромного проекта

Станислав Сидристый

При стремительном росте проекта возникает ряд трудностей не только у разработки, но и у DevOps. Спикер решил помочь коллегам и сделал очень быструю сборку всех проектов. В итоге удалось ускорить сборку с 400 машиноминут (20 агентов, 20 минут) до диапазона (30 сек, 1 мин 30 сек) в зависимости от количества изменений. Через что пришлось пройти, все неудачные варианты и результат — в докладе.


Чистый DI

Николай Пьяников

Тинькофф

Николай расскажет о проблемах, с которыми сталкиваются разработчики, и о том, как инверсия зависимостей помогает их решать.

Будет немного теории по DI. Какие есть виды DI, их достоинства и недостатки, этапы эволюции: чистый DI, DI-контейнеры на основе Dictionary, LINQ Expressions и Reflection.Emit.

Спикер расскажет о чистом DI на базе .NET Source Generators как гибриде, объединяющем достоинства разных подходов. Будут интересные детали реализации генератора исходного кода Pure.DI, а также примеры его использования в различных сценариях.


LINQ Expressions: искусство запрашивать данные

Денис Цветцих

Тинькофф

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

Денис расскажет, как решить эту задачу при помощи современной реализации паттерна «Спецификация» с использованием LINQ Expressions и с какими подводными камнями можно столкнуться при его реализации. Поговорим и о наиболее удобных для использования библиотеках, в которых «Спецификация» уже реализована, в том числе как можно сделать ее c использованием новых фич EF Core 7 или Source Generators.

Кроме того, спикер выберет наиболее удобный и эффективный способ фильтрации по вложенным коллекциям. И обсудит, как автофильтр помогает бороться с рутиной фильтрации.


Расширяем горизонты

NanoFramework, или Arduino в мире .NET

Михаил Гордеев

MTS

Погружение в embedded-разработку для .NET-программиста. Спикер расскажет, как быстро начать и что можно сделать с NanoFramework. Какие ограничения и какие преимущества есть у такого embedded на .NET. Что входит в базовую библиотеку с примерами и демонстрацией.


Размышления, стоя на краю технологической сингулярности

Станислав Сидристый

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

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


B-tree индексы в базах данных на примере .NET Entity Framework и PostgreSQL

Владимир Ситников

PostgreSQL JDBC maintainer

Доклад о том, как работают обычные™ индексы в базах данных. Доклад будет крайне полезен как тем, кто начинает работать с базами данных, так и тем, кто работал, но подзабыл. У вас бэкенд на PostgreSQL? Бегом на доклад! Если доклад попадет в золотые подборки «обязательно посмотреть на on-boarding разработчика», то цель достигнута.

Рассмотрим:

  • Как индекс ускоряет поиск

  • Нужно ли индексировать условия where

  • Нужно ли индексировать условия в order by

  • Нужно ли индексировать foreign keys

  • Что делать, если критериев поиска несколько

  • В каком порядке указывать колонки в индексе

  • Случаи, когда индекс замедляет работу, и как снизить влияние индекса на приложение


Ну что? Когда доделаете задачу?

Алексей Пименов

Neogenda

Слышали такой вопрос много раз? Даже пытались отвечать или регулярно отвечаете? И как? Попадаете в свои оценки?

В докладе поговорим о различных инструментах менеджмента, которые неплохо знать как инженерам, так и их руководителям для того, чтобы не косячить с вопросом прогнозов и попадания в них.


Система перевода в ведущие инженеры-программисты с промокодами и комиссарами

Григорий Кошелев

Контур

История о том, как построить устойчивую систему перевода в ведущие инженеры-программисты на масштабе 1000 разработчиков.

Григорий расскажет, как стать ведущим в компании из 1000 разработчиков (без варианта уволиться и устроиться заново), можно ли стать ведущим без помощи менеджера, и как измерять эффективность ведущих инженеров-программистов.


Практические задачи решаем функционально (воркшоп в двух частях)

Марк Шевченко

CraftTalk

Классический REST API тестируют с помощью curl или Postman. Более новый gRPC тестировать сложнее, потому что на входе и на выходе у него бинарные данные. Нужна утилита, которая умеет сериализовать текстовые данные в бинарные и десериализовать их обратно. Задача кажется сложной, потому что языки описания схемы и данных Protobuf — достаточно развитые. Но решается она просто, если пользоваться правильным инструментом. Мы напишем утилиту на языке программирования F#, используя библиотеку FParsec. Научимся по описанию грамматики писать код и тесты для разбора, построим абстрактное синтаксическое дерево и разберёмся, как применять его для сериализации.

Рекомендации по подготовке к воркшопу: ноутбук с установленными JetBrains Rider или Microsoft Visual Studio последней версии.


Введение в теорию функционального программирования с примерами на F#

Дмитрий Сошников

МАИ / НИУ ВШЭ

Чем дальше — тем больше функционального подхода к программированию мы видим вокруг нас. Это и функциональные компоненты в React, и пайплайны обработки данных в Apache Spark, и подход с функциональными трансформациями в JAX. Этот список можно долго продолжать.

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

Этот доклад — для тех, кто хочет немного «размять мозг», а также поговорить о том, может ли математика помочь нам писать более качественный код. Примеры в докладе будут на языке F#.


Заключение

Конечно, этими докладами конференция не ограничивается. Будет ещё, например, «Fail-митап», где можно будет не под запись честно поговорить про фейлы.

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

Но тут всё заранее в хабрапосте не опишешь: о чём и с кем вы поговорите на конференционной площадке, зависит от вас.

Так что напоследок просто напомним, что конференция пройдёт 15-16 сентября в Москве (с возможностью онлайн-участия). Если нужны ещё какие-то подробности или вы уже готовы перейти к приобретению билетов — и то, и другое доступно на сайте конференции.

Комментарии (1)


  1. Enfriz
    18.08.2023 13:50
    +1

    Очень интересно звучит доклад по DDD. Наверное, я пойду на него :)))