12-13 ноября (то есть всего через пару недель) состоится DotNext 2017 Moscow, крупнейшая в России конференция, посвященная разработке на платформе .NET. Среди наших докладчиков — ведущие отраслевые эксперты из России, Европы и США. Основные темы конференции — внутренности работы платформы (CLR, GC, JIT), лучшие практики по использованию инструментов, профилирование и оптимизация производительности, многопоточное программирование, нововведения платформы, решения сложных кейсов.


Под катом — детальный разбор программы, несколько слов о нововведениях этого года и секретный промокод со скидкой.


Возвращение хардкора


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


Прошлый DotNext в Питере проводился в удивительное время — вышло или готовилось к выходу множество новых технологий. Почти все доклады были про это, что автоматически означало уменьшение сложности материала. Как показал опрос, людей не особо интересовали идеи типа копания во внутренностях GC и починки разваливающихся профилировщиков (любимые занятия джавистов), но очень интересовало, как внедрить безумно хайпанувшие Doсker и Kubernetes в готовую .NET-инфраструктуру. Просто было такое время.


На DotNext 2017 Moscow хардкор возвращается назад. Копаться в GC мы все так же не собираемся — зато собираемся обсуждать модель памяти, performance-тестирование и оптимизации, тонкости отладки, и даже отладки на Линуксе. Для особых ценителей есть два доклада об использовании функционального программирования. Теперь хардкорных докладов — ровно треть от общего количества.


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


Совершенно очевидно, что такой объем информации не поместится в один день, поэтому теперь DotNext занимает два дня и три параллельных трека. Открытие происходит в 10 утра (в первый день регистрация с 9 часов), закрытие — в 7 вечера, т.е. по 9 часов на каждый трек. Чтобы мозги не расплавились от такого объема, можно запланировать посещение не только максимально сложных докладов, но разбавить их более лайтовыми. А вот как попасть на всё, что запланировал — об этом будет написано ниже.


Вкалывают роботы, а не человек


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


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


Поверх OptaPlanner был написан свой движок под названием ConfPlanner. В особенности за это нужно поблагодарить Владимира Ситникова. Владимир — перфоманс-архитектор в NetCracker и участник программных комитетов JUG.ru Group. В результате получился открытый проект, посмотреть исходники которого можно на гитхабе.


Суть в том, что мы задаем ограничения в виде YAML-файла и на выходе получаем готовое решение.


capacity: 400
languages:
- name: ru
- name: en
rooms:
- name: 1
  capacity: 300
- name: 2
  capacity: 200
days:
- name: 1
  date: 2017-10-04
timeslots:
- name: 1
  day: 1
  start: 11:00
  duration: 50
- name: 2
  day: 1
  start: 14:00
  duration: 50
- name: 3
  day: 1
  start: 18:00
  duration: 50
topics:
- name: Case study
- name: Tricks
speakers:
- name: Speaker A
  arriveTime: 2017-10-04T12:00:00+03:00
- name: Speaker B
  leaveTime: 2017-10-04T16:00:00+03:00
talks:
- name: 'How to arrive late'
  language: en
  speakers: Speaker A
  topics: Tricks
- name: 'How to depart early'
  language: ru
  speakers: Speaker B
  topics: Tricks
- name: 'Coffee time'
  language: en
  speakers:
  - Speaker A
  - Speaker B
  topics:
  - Case study
  - Tricks

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


Например, человек хочет пойти на 3 доклада и так получилось, что они выстроились «в одну линию» (совпадают по времени). Такая комбинация допустима, но за нее начисляются штрафные баллы. Суть решения задачи составления оптимального расписания докладов — минимизация функции начисления штрафа.


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


Обещанный секретный промокод


Вначале я хотел вставить промокод куда-нибудь в завершающую часть статьи, или в середину списка докладов, чтобы его пришлось немножко поискать. Быстро выяснилось, что количество докладов достаточно велико, чтобы его не нашел никто. Поэтому вот, держите код:


LastCallPromo

Использовав этот код на странице регистрации, можно получить скидку до конца недели.


Содержание программы


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


  • Перфоманс и низкоуровневые подробности
    • Сетевой код
    • Отладка
  • Кластеры и облака
    • Транспортные системы
  • Язык, инструменты и методы программирования
    • Функциональное программирование
  • Разное
    • Машинное обучение и матчасть
    • Безопасность
    • Мониторинг, эксплуатация и DevOps
    • Философия (!)

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


Перфоманс и низкоуровневые подробности


Кейноут: Поговорим про performance-тестирование


Андрей Акиньшин, JetBrains


У кейноута есть несколько целей, в том числе — передать дух и суть того, что будет твориться ближайшую пару дней. Этот доклад будет посвящен типичным проблемам тестирования производительности и возможным подходам к их решению. Андрей Акиньшин работает над проектом Rider, является мантейнером BenchmarkDotNet и вообще — знает толк в микрооптимизациях.


Patterns for high-performance C#: from algorithm optimization to low-level techniques


Federico Lois, Corvalius


В этом докладе мы рассмотрим техники и паттерны, используемые для написания высокопроизводительного кода — начиная с анализа и вплоть до конкретного воплощения оптимизации. Разберемся, как понять, какие оптимизации нужно использовать, и какие проблемы обычно возникают при оптимизации кода базы данных. Многие из этих приёмов были придуманы и заполированы до зеркального блеска при разработке RavenDB 4.0 — свежей версии NoSQL движка для платформы .NET. RavenDB — это довольно сложная штука, в которой оптимизации давно идут на наносекунды, и оптимизировать приходится по времени, IO и процессору одновременно. Большинство обсуждаемых в этом докладе приемов можно применить где угодно, вне зависимости от языка или фреймворка.


Федерико прошел большой путь, чтобы иметь возможность рассказать о своих открытиях. Он не только является сооснователем компаний Corvalius и Codealike, но и реально работал над перфомансом алгоритмов последние десять лет, в качестве железа используя как CPU, так и всевозможное хитрое железо вроде GPU. Это человек, которого не пугает работа с бинарными данными, регистрами и низкоуровневой оптимизацией, и одновременно увлеченный технологиями параллелизма и современной компьютерной графикой. В общем, если кто и может рассказать доклад о низкоуровневых оптимизациях на C#, то это именно он.


Модель памяти .NET


Валерий Петров, Sidenis


У кого-то еще остались вопросы после доклада Федерико? Может, кого-то пугает concurrency (и не зря)? Валерий Петров облегчит нашу участь подробным рассказом о модели памяти.


Интересно, что на работе Валерий в основном занимается «кровавым энтерпрайзом», и существует миф, что «энтерпрайзные» программисты такими вещами не интересуются, не разбираются в них, и вообще на работе это не нужно. Ну что ж, миф разрушен!


Так в чем же дело и почему это нас вообще должно интересовать? Программы обычно пишутся людьми, а исполняются компьютером. За время существования ЭВМ была проделана огромная работа по снижению порога вхождения в программирование: сейчас не требуется знать, как работает компьютер, чтобы суметь заставить его сделать какое-то действие. Однако ничего не даётся даром, и за высокоуровневыми языками скрыто много восхитительных вещей. В некоторых случаях незнание того, что творится «внизу», может приводить к печальным последствиям. А когда речь идёт о concurrency и кроссплатформенности, то и вовсе кругом драконы с подводными граблями.


В этом докладе Валерий расскажет, что такое модель памяти, какая она в .NET, что нам гарантирует спецификация, что даёт платформа, какие можно ожидать проблемы при выходе из зоны комфорта: уход в сторону lock-free, запуск на других архитектурах (например, ARM). Также будет показано, что некоторые проблемы могут быть найдены несложным статическим анализом (доклад не про статический анализ, поэтому подробности отдельно). Среди прочего, будет показано, что в .NET тоже бывают баги.


Поединок: .NET Core против Java


Виталий Езепчук, Фаст Репортс


Даже в перфоманс-разделе существуют приятные легкие доклады. В этом докладе Виталий займется сравнением производительности рантаймов .NET Core и Java, в операционных Linux и Windows. Целевая аудитория: разработчики высокопроизводительных и ресурсоёмких приложений… Ну или кто угодно, кому интересно посмотреть, как .NET порвет Java на британский флаг. (А вдруг не получится?)


 High performance Networking in .NET Core


Karel Zikmund, Microsoft


В топе, посвященном производительности, есть два доклада про производительность сети.


Первый из них ведет англоязычный спикер Karel Zikmund, известный тем, что является Software Engineering Manager в командах .NET Framework team и .NET Core, и является менеджером CoreFX по направлениям Networking, Crypto, Collections, Process, и т.п.


Karel расскажет об архитектуре и конкретной реализации сетевого стека .NET Core, в особенности — о производительности и переносимости. Будут освещены следующие темы:


  • Основные идеи и цели, лежащие за архитектурой и реализацией сетевой подсистемы
  • Какой прогресс был достигнут, какое состояние текущей разработки
  • Как добиваются максимальной производительности
  • Текущие результаты работ по улучшению производительности + сравнение относительно различных технологий и операционных систем


Approaches for application request throttling


Maarten Balliauw, JetBrains


Второй доклад, касающийся произвольности сети. Возможно, его стоило отнести к «облакам», про которые написано ниже.


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


В этом докладе Maarten расскажет о простом, и одновременно — таком сложном мире ограничителей запросов. Мы должны решить, что именно и где ограничивать — в приложении, на сервере, на реверс-прокси типа nginx, на внешних сервисах типа Azure или CloudFlare и так далее. В результате и волки сыты, и овцы целы — и сервис работает нормально, и пользователи счастливы.


Debugging and Profiling .NET Core Apps on Linux


Sasha Goldshtein, Sela Group


В нашей хардкорный «низкоуровневой» секции есть два доклада, касающихся отладки. И оба — про кроссплатформенные приложения.


Первый доклад ведет Саша Гольдштейн — выдающийся перфоманс-инженер, неизменно занимающий топовые позиции на всех конференциях, где бы он ни выступал. Мы несколько раз брали у него интервью, советую ознакомиться: пара видеозаписей 2015 годавидеозаписи 2016 годаинтервью о работе с перфомансом и обзор инструментов .NET перфоманс-инженера.


В этом докладе Саша расскажет примерно о следующем. Представьте, что-таки удалось запустить на Linux ваше любимое ASP.NET-приложение или даже что-то с консольным интерфейсом. Что дальше? Счастливый конец? О, нет. По факту, придется встретиться с утечками памяти, странными падениями, проблемами с производительностью и многими другими неприятностями — и что делать, когда всё это происходит на продакшне? На Windows у нас есть куча интересных инструментов, но в Linux они работать не будут, и простых альтернатив пока не существует. В этом докладе Саша расскажет о том как сейчас выглядит отладка и профилирование приложений .NET Core на Linux. Как проводить расследования с помощью perf, как LTTNG используется в качестве замены для событий ETW, как собирать и понимать трейсы LTTNG, и многое другое. Саша расскажет о сборе core dumps, и как достать из них интересную для .NET-разработчика информацию с помощью lldb и SOS. Этот доклад будет очень непростым путешествием сквозь дебри недоделанных утилит и особой магии командной строки, но в конце концов мы приедем к счастливому концу! (но это не точно).


Тонкости отладки Mono-приложений


Елизавета Голенок, Готех


Второй доклад об отладке, и снова кроссплатформа. Впрочем, после доклада Саши уже понятно, что на Линуксе простой жизни нам не видать :-)


Этот доклад — сугубо практический. Одна из реальных рабочих задач Елизаветы на этот год — сделать существующий legacy-проект (WCF, Web API, MVC, Web Forms) кроссплатформенным. Задача эта достаточно классическая, однако, в процессе переноса возникает множество проблем, одна из которых — отладка Mono-приложений.


Елизавета расскажет, как сделать процесс отладки Mono-приложений более удобным/комфортным, покажет, как в действительности происходит процесс отладки. По ходу дела мы познакомимся со следующими технологиями:


Отладчики:


  • Soft Debugger;
  • GNU Debugger для решения низкоуровневых проблем;
  • LLDB;

Профайлеры:


  • Mono Log Profiler;
  • Valgrind;
  • HeapShot;

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


Кластеры и облака


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


Назад в будущее: построение эффективных облачных сервисов с помощью Orleans


Сергей Быков, Microsoft


Этот доклад посвящен Microsoft Orleans — фреймворку, разработанному в Microsoft Research.


Расскажет о нем руководитель разработки Orleans. Сергей Быков начинал проект Orleans в Microsoft Research и продолжает руководить его разработкой в open source в подразделении Xbox. 


Orleans предоставляет радикально новый подход к построению систем, который даёт разработчикам эффективность stateful-архитектуры и массу других важных преимуществ через простую и интуитивную модель программирования. Orleans успешно применяется в играх-блокбастерах Halo, Gears of War, Age of Empires, в Skype, Azure и других системах Microsoft, для IoT, финансового анализа и во многих других сферах. Клоны Orleans, созданные для JVM, Go и Erlang, являются лишним подтверждением успеха Orleans.


I have a microservices architecture and I didn't know


Dino Esposito, JetBrains


Как вы уже знаете, микросервисы — вертикальные слои функциональности, независимые друг от друга с точки зрения технологий, парадигм, и даже, в какой-то мере — данных. Как и любой другой изолированный модуль, микросервис можно легко заменить или переписать, или даже горизонтально масштабировать без риска возникновения регрессий. Микросеврисы могут являться слабосвязанной частью распределенной архитектуры, но их можно использовать и по-отдельности, сами по себе. У такой архитектуры множество плюсов, и не так много минусов. Что важнее, она встречается гораздо чаще, чем об этом принято говорить. «Микросервисы» — это просто специальное название для чего угодно, что не является хорошо проработанной, всеобъемлющей системой.


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


Дино — известный тренер, консультант и евангелист, CTO быстро развивающейся IT-компании. Он написал множество известных книг для Microsoft Press. Этот доклад продолжает славную традицию, по которой Дино рассказывает, как правильно превозмогать весь этот беспорядок, который мы сами наворотили.


Напоминаю, что у Дино есть еще один доклад — завершающий кейноут, на него определенно стоит сходить.


Serverless compute with .NET based Azure Functions


Alex Thissen, Xpirit


Если уж мы заговорили о облаках и микросервисах, первая ассоциация из мира продуктов Microsoft — это Azure.


Azure Functions можно использовать для создания бессерверных облачных сервисов, и по сути — это новая ступень эволюции распределенных вычислений и хостинга. Для того, чтобы объяснить нам детали использования этой технологии, к нам приезжает Alex Thissen — консультант по разработке современных распределенных приложений, 10-кратный обладатель MVP, и конечно — эксперт в Azure Functions.


В этом докладе Алекс покажет, как разрабатывать с помощью Azure Functions и C#, и как все это потом собирать, тестировать и деплоить на Azure. Будут разобраны детали программирования на .NET, подробности архитектуры и внутренней реализации. Кроме того, Алекс покажет, как все это запустить и хостить на локальной машине, так что сразу после доклада вы сможете самостоятельно придумывать и писать крутые приложения с использованием Azure Functions.


12-factor apps in .NET Core


Ian Cooper, Huddle


Вы, наверное, уже слышали о Cloud Native: о continuous deployment и простом масштабировании серверного кода. Вы слышали о Docker и микросервисах. Но что такое «12-факторные приложения», о которых идет речь в заголовке? Эта методология, изначально выработанная инженерами, занимавшимися разворачиванием на Heroku, является «рецептом успеха» при написании кода для любых облачных платформ. В этом докладе описывается суть метода и демонстрируется, как написать для .NET приложение, которое соответствовало бы всем требованиям этого метода. Абсолютно точно будут живые примеры с использованием ASP.NET Core, обрисованы светлые и темные стороны приложений, построенных подобным образом; будет показано как это можно развертывать и без сервера, и с использованием Azure Service Fabric.


К концу доклада вы обретете более глубокое понимание Cloud Native, а поможет вам в этом Ian Cooper  — архитектор из Лондона с более чем 20-летним стажем, основатель #ldnug и известный спикер, специализирующийся на вопросах правильной архитектуры, паттернов и хороших практик проектирования.


Apache Kafka и реактивные микросервисы на .NET Core


Денис Иванов, 2ГИС


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


На всякий случай напомним, что Apache Kafka — это open source-платформа для обработки потоков сообщений. Абстракция распределённого лога, лежащая в основе Kafka, даёт возможность использовать её в качестве системы очередей, но при этом даёт некоторые очень полезные преимущества, недоступные даже решениям ESB-уровня.


В этом докладе мы, под чутким руководством Дениса Иванова, разберём основные принципы, на которых построена Apache Kafka, узнаем, как и в каких случаях её использование позволяет решать задачи просто и эффективно.


Но самое главное, мы рассмотрим реальное применение Apache Kafka в системе, имеющей микросервисную архитектуру и бэкенды которой реализованы на .NET Core и Scala. Будет рассказано про замечательную библиотеку Reactive Extensions и показано, как применение реактивного подхода позволяет сохранить код простым, надёжным и крайне производительным.


В докладе не забыты особенности и нюансы, которых всегда очень много, когда мы делаем микросервисные приложения, да ещё с таким набором технологий. Будет описан реальный опыт, полученный в большом проекте. Денис работает в 2ГИС над системами продаж и рекламными сервисами, пишет код на C# в Windows и macOS, а компилирует его и разворачивает приложения в Linux — поэтому не понаслышке знает, о чем говорит. Нам, слушателям доклада, всё это позволит быстро сориентироваться, если потребуется решать похожие задачи.


NServiceBus or MassTransit? .NET ServiceBus frameworks compared


Roland Guijt, R.M.G. Holding B.V.


Продолжая тему архитектур с использованием передачи сообщений для реализации микросервисов, нужно вспомнить о сервисных шинах. Есть несколько вариантов, но как между ними выбрать? Для .NET есть MassTransit и NServiceBus, и обе они работают замечательно. Но несмотря на внешнее сходство, у них есть и существенные отличия.


В этом докладе Рональд проведет нас по основным фичам и API MassTransit и NServiceBus, подмечая сходства и различия. В конце этого соревнования мы сможем выбрать победителя — того, кто наиболее подходит для вашего приложения. (Ставки можно делать прямо сейчас!)


Akka Streams для простых смертных


Вагиф Абилов, Miles


Как можно несколькими строками кода распечатать непрерывный поток сообщений из Твиттера, добавив в него данные о погоде в местах проживания их авторов? И как при этом ограничить скорость запросов к провайдеру метеоусловий, чтобы они не внесли нас в черный список? Все это можно будет увидеть в демо из финальной части доклада.


А перед этим мы познакомимся с технологией Akka Streams, позволяющей работать с потоками данных в реальном времени так же просто, как программисты работают с LINQ-выражениями, не требуя при этом ручной реализации ни отдельных акторов, ни интерфейсов Reactive Streams.


Вагиф — супер-профессионал с 30-летним опытом программирования. Вы можете знать его по красивому юзернейму на Github — @object. В настоящее время он занимается разработками систем на F# и C#. Вагиф часто выступает на конференциях, принимает участие в опенсорс-проектах и поддерживает Simple.OData.Client.


Язык, инструменты и методы программирования


Runtime code generation techniques in real life scenarios


Raffaele Rialdi, Vevy Europe


Генерация кода в рантайме — очень мощная и хорошо изученная техника, но многие разработчики все еще неохотно её используют. Обычно изучение Expression Trees начинают с какого-нибудь простого примера типа создания предиката (фильтра) или математического выражения. Но не Expression Trees единым жив .NET разработчик. Совсем недавно появилась возможность генерировать код, используя сам компилятор — это делается с помощью API библиотек Roslyn/CodeAnalisys, предоставляющих, кроме всего прочего, еще и парсинг, обход и генерацию исходников.


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


Рафаэль — практикующий архитектор, консультант и спикер, имеющий MVP в категории Developer Security начиная с 2003 года, который прямо сейчас занимается бэкендами enterprise-проектов, специализируясь на генерации кода и кроссплатформенной разработки для C# и C++. Иначе говоря, Рафаэль именно тот человек, которому в дискуссионной зоне можно задать почти любой вопрос про кодогенерацию, и не только про .NET, и с большой вероятностью он ответит.


Mono + .NET Core = ?


Егор Богатов, Microsoft


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


Развитие открытого кроссплатформенного .NET Core идёт полным ходом и большое внимание уделяется другим платформам. А как же Mono и мобильные платформы? В этом докладе мы, вместе с Егором, поговорим о текущем состоянии дел Mono и его месте в экосистеме .NET. Расскажем, как мы используем код .NET Core в Mono и наоборот, а также о новых возможностях и инструментах, таких как Embeddinator.


Егор — разработчик в компании Xamarin (Microsoft) из команды Mono BCL. Работает над улучшением Mono и объединением его с .NET Core. По сути, вся информация из этого доклада — из первых рук. Кому все-таки захочется жести, сможет свободно выловить Егора в дискуссионной зоне и задать все животрепещущие вопросы.


TDD вверх ногами


Егор Бугаенко, Zerocracy


Егор — единственный обладатель значка «дичь» на джава-конференциях. В смысле, кроме стандартных вариантов сложности (легко — «смузи», средне — «бородач», сложно — «коза»), специально для него был изготовлен значок «дичь» с изображением жареной курицы. Мы вас предупредили.


Итак, специально для DotNext, Егор разработал более спокойный и академичный доклад, но выбранная тема, тем не менее, разожжет сердце любого эксперта по хорошим практикам программирования. Егор — автор книги «Elegant Objects», CEO в Zerocracy и Java архитектор в нескольких open source проектах (Rultor, Takes, JCabi).


Разработка через тестирование (a.k.a. TDD) была заново открыта Кентом Беком и подробно разобрана в его знаменитой книге в 2002. В 2014 году Дэвид Хайнемайер Ханссон (создатель Ruby on Rails) сказал, что TDD не работает и только вредит архитектуре. Роберт Мартин (создатель SOLID-принципов) не согласился с этим и объяснил, что TDD может не срабатывать лишь в определённых случаях. Через какое-то время он даже сравнил важность TDD с важностью мытья рук в медицине и добавил, что «его не удивит, если однажды TDD приобретёт силу закона». Два года спустя, а для нас — пару месяцев назад, он написал об этом ещё раз, и ещё, и ещё. Это горячая тема для обсуждения. У нас, конечно, есть своё мнение по этому поводу.


Life, liberty and the pursuit of APIness: the secret to happy code


Dylan Beattie, Spotlight


Это будет весьма философский, и вместе с тем — сугубо практический доклад. Его будет вести Dylan Beattie — человек с таким количеством рабочих достижений и интересных проектов, что полный список проще прочитать на нашем сайте. В контексте доклада интересно, что Дилан — системный архитектор, который прямо сейчас занимается вопросами построения сложных современных распределенных приложений, и соответственно — вопросами разработки правильных API для них. А еще он, наверное, сыграет нам на гитаре, на вечеринке после первого дня DotNext вместе с Вагифом.


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


Осознаем мы или нет, каждый раз при создании новых программ мы создаем и user experience. Люди будут взаимодействовать с нашим кодом — как конечные пользователи, или может быть — как члены команды разработки. А может быть, они — разработчики мобильного приложения, использующие твое API, или это кто-то кому нужно ехать в ночь, чтобы исправлять возникшие проблемы. Со стороны это может казаться совершенно разными кейсами, но на самом деле у них есть кое-что общее. Дилан называет это словом «discoverability». (Я специально не перевожу это слово, потому что доклад все равно будет на английском языке, а в английском языке оно имеет больше значений, чем русский эквивалент «понятность»).


В этом докладе Дилан обрисует идеи и открытия, касающиеся user experience, дизайна API, психологии и психологии обучения, и покажет как можно интегрировать идею discoverability на всех архитектурных уровнях приложения. Будут иллюстрации на настоящих больших проектах, с объяснениями, как discoverability работает с различными парадигмами взаимодействия. Неважно, создаете ли вы базы данных или системные библиотеки, hypermedia API или мобильные приложения — однажды случится момент, когда кто-то начнет взаимодействовать с вашим кодом — и когда это произойдет — лучше чтобы они остались довольны, верно?


Провайдеры типов без боли и магии


Роман Неволин, EPAM


Newtonsoft.Json — самый популярный пакет в NuGet. А рядом с ним, на третьем месте, — Entity Framework. Пожалуй, это неплохо демонстрирует, насколько часто .NET разработчики обрабатывают разнообразные данные. И для каждого типа данных — своя библиотека, а еще куча классов-оберток, которые приходится писать ради получения всех благ строгой типизации. И делать это нужно для каждого нового источника данных.


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


Если вы хотите узнать, как использовать провайдеры типов, какие проблемы они решают, как работают и как написать собственный провайдер для ваших задач, — приходите на этот доклад!


Знание F# не обязательно. Роман занимается исследованиями в области Machine Learning и разработкой собственных инструментов машинного обучения, поэтому умеет простыми словами объяснять сложные вещи.


Функциональное программирование


В этот раз у нас есть два доклада про функциональное программирование. Внедрение этих идей вначале продвигалось медленно и трудно, и вот, судя по количеству докладов — будущее наступило.


From dependency injection to dependency rejection


Mark Seemann, blog.ploeh.dk


У функционального программирования есть одна большая проблема — о нем очень непросто рассказывать. Попытки донести людям что-то с использованием терминов типа «зигохистоморфный препроморфизм» легко сводят неподготовленного слушателя с ума.


Марк — автор популярной книги Dependency Injection in .NET, автор бесчисленных блог-постов, и спикер на таком количестве конференций, что ему пришлось завести публичное расписание на своем сайте. Причем рассказывает он каждый раз все больше и больше нового. Если кто и может рассказать о ФП, так это он.


О чем же пойдет речь в этом докладе?
В объектном-ориентированном проектировании часто используют dependency injection — этот паттерн очень популярен, но тем не менее, является довольно сложным подходом к решению проблемы разделения связанных сущностей. В функциональном программировании есть способы куда проще и эффективней.


В этом докладе Марк рассмотрит применение dependency injection в классическом объектно-ориентированном дизайне и объяснит, почему его необязательно (даже нежелательно) использовать в функциональном программировании. Следом за этим будет наглядно показано, как использование приемом функционального программирования устраняет необходимость в использовании моков и стабов в модульном тестировании, и позволяет полностью выбросить мусор из прямого перечисления зависимостей.


Функциональное программирование для C# разработчиков


Николай Гусев, Deutsche Bank Technology Centre


Функциональное программирование набирает популярность с каждым днем. Тут и там выходят новые библиотеки, фреймворки и языки, вдохновлённые функциональными концепциями. Всё больше программистов начинают ценить неизменяемое состояние и чистые функции, простую и удобную композицию конструкций и компилятор, находящий львиную долю ошибок ещё до запуска приложения. Язык C# с каждым годом вбирает в себя новые идеи из мира функционального программирования. Мы уже привыкли к удобному Linq и к передаче функций как параметров. А иногда C# и сам становится колыбелью новых идей, например, Reactive Extensions (спасибо Эрику Мейеру).


Интересно, какие ещё конструкции функционального программирования можно было бы использовать в C#? Об этом расскажет в своем докладе Николай Гусев. Заодно узнаем, как обрабатывать ошибки в стиле функционального программирования, как избавиться от Null Reference Exception, как ещё можно использовать Linq и многое другое.


Вопросы безопасности


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


ASP.NET Core: Механизмы предотвращения атак 2.0


Михаил Щербаков


Как известно, на коференциях JUG.ru Group не приветствуются повторы докладов. Вы уже могли слышать первую версию доклада, и это — не повтор.


Версия 2.0 доклада будет про встроенные механизмы предотвращения атак в ASP.NET, дополненная и расширенная после выхода .NET Core 2.0. Мы посмотрим на новый веб-фреймворк Microsoft с точки зрения безопасности.


В докладе Михаил расскажет о различиях в security features ASP.NET разных версий и разберём, как теперь работают встроенные механизмы защиты от XSS и CSRF, какие возможности криптографии доступны из коробки, как устроено управление сессиями.


Доклад будет интересен в первую очередь разработчикам, пишущим защищённые ASP.NET-приложения, специалистам, проводящим security review .NET-проектов, и всем желающим разобраться в реализации компонентов безопасности на примере этой платформы. То есть, это доклад для специалистов, идти на него стоит хорошо осознавая обсуждаемые проблемы.


Побеждая инъекции


Владимир Кочетков, Positive Technologies


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


Доклад посвящен проблеме уязвимостей .NET-приложений к атакам инъекций в языки различных грамматик (HTML, JavaScript, URL, SQL, Path и т.п).


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


Вторая часть посвящена обзору открытой библиотеки LibProtection, позволяющей разработчикам безопасно использовать привычный API для работы с форматными и интерполируемыми строками при работе с входными данными и скрывающей за ним полнофункциональный инструмент встраиваемой защиты времени выполнения.


Machine Learning & Матчасть


Machine Learning сейчас — очень горячая тема. Такая горячая, что мы даже сделали про это специальную конференцию — SmartData, которая прошла неделю назад. Но и DotNext не обошла участь сия!


Искусственный интеллект и нейросети для .NET-разработчиков


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


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


Дмитрий —  технологический евангелист компании Майкрософт,  специализирующийся в области интернета вещей, в разработке универсальных приложений Windows и в области функционального программирования.


В этом докладе Дмитрий покажет, как .NET-разработчики могут использовать возможности ИИ в своих проектах: начиная от готовых когнитивных сервисов, работающих в облаке, заканчивая обучением нейросетей на .NET-языках и запуском сложных нейросетевых моделей на компактных устройствах типа Raspberry Pi.


Self-aware applications: automatic production monitoring


Dina Goldshtein, Google


Дорога к дзену — использование приложений с автоматическим мониторингом, который может понизить затраты времени на диагностику и починку проблем на продавшене. В этом докладе Дина расскажет, как писать такие приложения, которые смогут сами себя мониторить, диагностировать в случае проблем, и даже самостоятельно восстанавливаться. В докладе будет использовано много магии типа ETW для аккуратного низкоуровневого мониторинга и библиотеки CLRMD для проверки собственных потоков, объектов на куче и боков. Прямо во время доклада будет представлено множество демок: автоматический мониторинг GC, автоматическое профилирование по CPU, автоматический анализ кучи, и так далее. Совсем недавно Дина работала в Riverbed и участвовала в разработке инструментов мониторинга для компьютеров и мобильных устройств, так что все эти рассуждения и примеры — не пустые слова, а вполне проверенные решения, которые можно использовать самостоятельно.


Мониторинг, эксплуатация и DevOps


Не обошлось без докладов, которые рассказывают не просто о кодировании, но и о тесной работе с эксплуатацией продуктовых систем. Кроме «Self-aware applications», которая в общем-то тоже созвучна с этой темой, есть еще три доклада.


The Metrix has you…


Анатолий Кулаков, Paladyne Systems
Для многих разработчиков процесс релиза их продукта похож на выбрасывание слепого котёнка в пасти диких псов. После этого главная задача авторов — отбиваться от случайно долетевших до них багов. На самом деле, приложение не заканчивает свой жизненный путь в зубах пользователей, а только начинает его. И ему нужна помощь разработчиков не меньше, чем во время становления и тестирования.


В этом докладе Анатолий расскажет, каким образом можно наблюдать за работой продукта и его боевым окружением, покажет как собирать жизненно необходимые метрики и представлять их в удобоваримом виде. Мы узнаем, что такое Time Series и как они могут помочь нашим и сторонним приложениям в процессе диагностики. Подробно познакомимся с лидерами рынка инструментов для мониторинга, специализированным хранилищем InfluxDB и системой визуализации данных Grafana.


NUKE: Build automation for C# developers


Matthias Koch, JetBrains


Матиас — разработчик из JetBrains, который кроме основной работы, последние 5 лет занимается собственными open source проектами, такими как  TestFx, TestLinker и NUKE.


NUKE — система автоматизации сборки, основанная на  C# DSL. Она позволяет автоматизировать процессы типа компиляции, сборки артефактов или деплоя приложений. NUKE отличается от аналогов тем, что встраивается в общую инфраструктуру как обычный проект на C#, и это позволяет на полную катушку использовать любимые возможности IDE вроде отладки, автодополнения, навигации по коду и умных рефакторингов. В этом докладе расскажет об этих и других возможностях  NUKE и способах его использования. Мы получим эту информацию из первых рук — от создателя технологии!


Непрерывное развёртывание .NET Core приложений и инфраструктуры в Linux среде


Кирилл Ветчинкин, TYME


Многие ли из нас на практике используют Linux? А вот Кирилл — руководитель отдела разработки в компании TYME, все проекты в котором он ведет, используя .NET Core на Linux.
В докладе будет продемонстрирован практический опыт организации процесса разработки и развёртывания .NET Core приложений на Linux, а также настройка самих сред из кода. Для этого мы будет использоваться связка таких средств, как: GitLab, TeamCity, Ansible, Octopus Deploy, Docker. Будет показана связь данных технологий для формирования единого конвейера. Также будут проговариваться плюсы и минусы, которые в TYME извлекли от перехода на Linux.


Немного философии


Завершающий кейноут: Unchain my heart


Dino Esposito, JetBrains


Представим себя в 2048 году. Что будет считаться искусством? Как мы будет заниматься привычными делами, как будем делать бизнес?


Дино расскажет нам историю — вымышленную историю — которую можно считать научной фантастикой. Или особой сотовой фантастикой. В 2008 году один парень сделал Bitcoin. Чтобы управлять Bitcoin, нужно использовать общий реестр — Blockсhain. Блокчейн — это публичный реестр для транзакций — в перспективе, транзакций любого типа. Представьте, что кто-то пошел дальше, на парочку уровней. Блокчейн распространился по миру, и стал основой для совершенно всего. Банки, нотариусы, органы государственного управления — короче, любые сторонние удостоверяющие органы — оказались на грани катастрофы.


Представьте, что в 2048 году весь мир оказался целиком основан на Блокчейне, и любая транзакция в нём видна, отслеживаема и проверяема кем угодно. Представьте мир, в котором люди одеваются в одежду, прочипованную RFID, подключенными к Блокчейну. За любым твоим шагом тоже следят (кстати, сейчас в 2017 они следят тоже!). Твое местоположение всем хорошо известно, все действия я записаны. Представьте мир, в котором компьютеры занимаются большинством наиболее нудных задач, которые ты когда-либо встречал в жизни — они делают за тебя решения, ведут за тебя машину, заказывают за тебя билеты на самолет, покупают для тебя разные вещи — и даже пишут за тебя программы.


Представьте мир, в котором только мысли и сны всё действительно твои, и они — единственная приятная вещь, которая у тебя еще есть. (Нет, я не думаю, что компьютеры будут заниматься за тебя сексом, даже в 2048!). Это будет утопия или анти-утопия? Мир без обмана, зависти и преступлений. Полный честности, свободы, любви. (И да, свободная любовь — типа той, о которой хиппи мечтали в 70х, но гораздо лучше). Время покажет, и время летит очень быстро.

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


  1. 23derevo
    31.10.2017 18:32
    +2

    ConfPlanner — люто! Давно хотел. Забавно, что я узнаю об этом из нашей же статьи на хабре :)

    Вопрос к vladimirsitnikov: у него в основе что? Генетический алгоритм?


  1. sndr
    01.11.2017 00:07

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


  1. Aloraman
    01.11.2017 01:31

    Промокод в ноябре задействует октябрьские цены?

    Размер скидки 31 октября
    image


    1. olegchir Автор
      01.11.2017 01:34

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


  1. werevolff
    01.11.2017 08:56

    спросонья прочитал ".NET" — Возвращение Хардкода. Подумал, что тут ошибка, и хотели написать ASP.net. Даже не удивился. Потом только увидел, что речь идёт о хардкоре, а не о хардкоде.


    1. olegchir Автор
      01.11.2017 11:31

      ммм… а в каких частях на аспе вы хардкодите чаще всего?


      1. werevolff
        01.11.2017 12:16

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


    1. KvanTTT
      01.11.2017 13:29

      .NET — возвращение хардрока :)


      1. werevolff
        01.11.2017 14:03

        win-метал


  1. Terras
    01.11.2017 14:44

    Учитывая то, что компания занимается организацией встреч, как для .net, так и для Java, то данный доклад выглядит весьма сомнительно «Поединок: .NET Core против Java» — да и описание пафосное


    1. olegchir Автор
      01.11.2017 15:27

      Самое клевое — это когда два разработчика .NET и Java (в смысле, не прикладных разраба с использованием .NET, а разрабов самих технологий типа из Microsoft и RedHat) сталкиваются друг с другом в дискуссионной зоне и начинается мощное обсуждение.

      Мне кажется, тут нет никакой проблемы. Мы в первую очередь не разработчики Java и .NET, а разработчики управляемых динамических рантаймов и языков программирования, и прикладных приложений для них. Мы делаем общее дело. Любое различие в технологиях является следствием сложных инженерных компромиссов, даже компромиссных выборов. Каждый такой выбор имеет свой контекст, историю, результаты (выраженные в балансе перфоманса, или форме синтаксиса, или еще чем-то). Изучать все это интересно, полезно, и правильно.