DotNext 2017 Moscow: возвращение хардкора

kaa0tzgefky-s9g34kc0ytekeim.png


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


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


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


Federico Lois, Corvalius


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


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


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


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


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


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


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


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


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


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


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


 High performance Networking in .NET Core


Karel Zikmund, Microsoft


epphd7mm-3i_e7oqb-ovq1ffj-u.jpeg В топе, посвященном производительности, есть два доклада про производительность сети.


Первый из них ведет англоязычный спикер 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


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


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


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


Debugging and Profiling .NET Core Apps on Linux


Sasha Goldshtein, Sela Group


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


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


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


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


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


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


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


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


Отладчики:


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


Профайлеры:


  • Mono Log Profiler;
  • Valgrind;
  • HeapShot;


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


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

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


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


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


neaktkgojjqyvjwq7o7jo1f1voc.jpeg Этот доклад посвящен 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


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


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


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


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


Serverless compute with .NET based Azure Functions


Alex Thissen, Xpirit


d4mqvk7tp9eiguf4-wnssmhpivw.jpeg Если уж мы заговорили о облаках и микросервисах, первая ассоциация из мира продуктов 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


wftpxj43lh5d13i7kx7yy-_kios.jpeg Вы, наверное, уже слышали о 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ГИС


u2sadspxno5unyefykp8mtqcnuc.jpeg Среди «облачных» докладов выделяется группа из трех историй, посвященных транспортным системам. Сложно было в этом обзоре докладов не поставить на первое место Кафку — такую популярную и любимую в .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.


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


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


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


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


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


А перед этим мы познакомимся с технологией 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


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


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


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


Mono + .NET Core = ❤


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


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


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


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


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


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


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


Итак, специально для 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


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


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


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


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


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

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


From dependency injection to dependency rejection


Mark Seemann, blog.ploeh.dk


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


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


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


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


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


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


kdbxo67zxevczqqgcfg-qjt3pmg.jpeg Функциональное программирование набирает популярность с каждым днем. Тут и там выходят новые библиотеки, фреймворки и языки, вдохновлённые функциональными концепциями. Всё больше прогр

© Habrahabr.ru