Когда мы начинали делать DotNext, мы пошли по пути технического хардкора и мозголомной сложности, ровно так же, как делали это в Java-мире с Joker и JPoint. Шли годы, конференция росла, мы получали фидбеки и делали конференцию лучше, меняли программу, доклады, спикеров… И вот недавно, общаясь с людьми на DotNext и JPoint, я пришел для себя к интересному выводу — .NET разработчики не хотят упоротого хардкора:
- Здесь нет безумного зоопарка фреймворков, работу которых надо в обязательном порядке знать на уровне исходников;
- нет 5 GC, каждый из которых обладает своими особенностями;
- качество документации стандартной библиотеки и развитых фреймворков в среднем выше;
- большинство инструментов работают четко и счетчики производительности обычно не врут (это я в основном про .NET Framework говорю, с Core не все так радужно пока);
- сам язык, в конце концов приятен и понятен (хотя под JVM можно пользоваться тем же Kotlin).
Зато есть много чего другого интересного:
- Если вы работаете на низком уровне, модели памяти никуда не деваются;
- Работа над улучшением производительности и оптимизации по памяти по прежнему с нами;
- Сама платформа развивается огромными темпами — надо оставаться в курсе;
- С кроссплатформенностью приходят новые инструменты и новые проблемы.
Поэтому новую программу конференции мы решили строить немного по-другому. Получается, что DotNext 2017 Piter — уже не только хардкор. А если не хардкор, то кто? Подробности смотите под катом.
В начале был… keynote!
Jon Skeet — Back to basics: the mess we've made of our fundamental data types
Кейноут, посвященный взаимосвязи сложного внешнего мира и данных, представленных только нулями и единицами. Признайтесь, ведь вы тоже принимаете числа, текст и date/time как должное? Практически любая модель данных опирается на эти столпы. Вопрос в том, почему получается так, что Stack Overflow переполнен вопросами о «сломанной» арифметике? В своем докладе Джон (ответивший уже почти на 40 тысяч вопросов на SO) постарается рассказать, что же не так с нашим миром, найдет виновных и предложит несколько способов «не обжечься» на вот этом вот всём.
Если вы считаете, что Jon Skeet — просто очередной разработчик, почитайте интервью с Джоном по поводу текущего состояния .NET, C# и IT сообщества. Глубина и полнота его ответов на, казалось бы, простые вопросы удивляет.
Sasha goldshtn Goldshtein — The Performance Investigator's Field Guide
Проведя сотню перфоманс исследований, вы начнете нарабатывать свои паттерны в работе с производительносью, позволяющие сэкономить время и силы на поиске проблемы. В этом докладе Саша расскажет о своем опыте работы с производительностью, приобретенном за годы работы на совершенно разных проектах, и тех инструментах, которые он использовал.
Прежде всего, мы рассмотрим анти-методы проведения performance investigations и чеклист, разработанный для поиска узких мест в Windows и .NET приложениях. После этого Саша перейдет к обзору идеального инструмента для анализа производительности и покажет, насколько доступные на сегодняшний день приложения близки к идеалу: речь пойдет прежде всего об Event Tracing for Windows, но кроме него Саша покажет несколько собственных open source разработок, которые он до этого в докладах не презентовал.
В завершение доклада поговорим о дэшбордах и визуализации, а также о неочевидных ошибках, которые можно допустить, работая со статистическими данными. По ходу дела вы увидите несколько самых сложных задач, которые спикер решил на своем веку.
От себя хочу добавить, что Саша — выдающийся перфоманс-инженер, неизменно занимающий топовые позиции на всех конференциях, где бы он ни выступал. Мы несколько раз брали у него интервью, советую ознакомиться: пара видеозаписей 2015 года, видеозаписи 2016 года, интервью о работе с перомансом и обзор инструментов .NET перфоманс-инженера.
Алексей Савватеев — Задача о коллективной ответственности
Крутой кейноут, взорвавший сцену на JPoint 2017, приходит в Петербург на DotNext!
Представьте себе, что вы – дежурный милиционер в турникетном зале. Безбилетники пытаются прыгать через турникеты, Вы их ловите. Вы один, их – много. Возможно ли им задать такие «правила игры», чтобы они не смели пытаться перепрыгивать, даже если заранее известно, что поймаете вы в любом случае только одного из них? Оказывается, возможно.
Доклад о математике и теоретико-игровых основаниях, которые стоят за изобретением различных хитроумных алгоритмов контроля. На этом докладе вы не получите академического образования, вы не научитесь писать более эффективные алгоритмы. Однако вы получите представление о том, насколько богатый математический аппарат существует.
Если вам интересна тема теории игр, если вам интересно узнать об исследованиях, за которые уже несколько раз присуждали премию Нобелевского комитета по экономике, то добро пожаловать на доклад.
Платформа .NET: Настоящее и будущее
Пока Microsoft продолжает активную работу над платформой, доклады на тему последних изменений будут стабильно занимать заслуженное место в наших программах. В этот раз теме .NET Core, ASP.NET Core, .NET Standard, etc. посвящено 5 докладов.
Adam Ralph — What is .NET Standard?
.NET Standard — одна из новых технологий, вышедшая в сонме опенсорсных .NET инициатив. По сути это более эффективный и более удобный фреймворк для кроссплатформенной работы с NuGet пакетами, который в будущем способен решить много проблем, связанных с разработкой универсальных кроссплатформенных проектов. Давайте же разберемся, как это все работает и каким образом вяжется с .NET Core — в этом нам поможет Adam Ralph, мейнтейнер FakeItEasy и xBehave.net, автор первого принятого .NET Core Framework pull-request.
Alex Thissen — Shifting gears for .NET: a changed application landscape for .NET developers
Распределенные системы в последнее время активно переезжают с серверной структуры на контейнерные кластеры и serverless вычисления. Все это можно делать и на .NET в Docker, хотя первые шаги сделать не так уж и просто. В этом докладе Alex Thissen покажет, как можно строить разработку под .NET вокруг Docker и контейнеров. Вы узнаете, как создавать, упаковывать, деплоить и исполнять .NET приложения при помощи Visual Studio 2017, .NET Core и Docker.
Денис Иванов — ASP.NET Core приложения под Linux в продакшене
С релизом .NET Core для нас открылись все возможности Unix-мира. Наши приложения могут отлично работать на Linux — а значит, мы можем использовать Docker и Kubernetes для развёртывания наших сервисов. В докладе будет рассказано, как сделать REST-сервис на ASP.NET Core и запустить его в продакшен на платформе Kubernetes.
Обсудим детали инфраструктуры ASP.NET Core и нескольких популярных библиотек, поговорим про многопоточность, оптимизацию и кеширование для уменьшения времени ответа сервиса. Обсудим, как решать задачи билда приложения и сборки Docker-образов. И, конечно же, подробно остановимся на том, что такое Kubernetes, как эта технология может быть нам полезна и как её использовать.
Roland Guijt — Authentication and Authorization in ASP.NET Core
Вы скорее всего уже в курсе, как работают приложения на ASP.NET Core, только вот аутентификация и авторизация — совсем другое дело, так как Microsoft многое перепилили в области безопасности ASP.NET Core. ASP.NET Identity позволяет делать аутентификацию для одного приложения и включает в себя много фич «из коробки», но разве не лучше использовать централизованную аутентификацию с токенами на базе OpenId Connect?
В докладе Roland даст развернутый ответ на этот вопрос, а также покажет, как фреймворки ASP.NET Core identity и IdentityServer помогают написать свой токен-сервис. В итоге вы будете знать, какими способами можно реализовать аутентификацию на ASP.NET Core, как их правильно готовить и как обеспечить соблюдение правил авторизации в приложениях на ASP.NET Core.
Михаил yu5k3 Щербаков — Под капотом ASP .NET Core Security
По встроенным механизмам безопасности ASP .NET Core написано мало статей. Даже официальная документация имеет пробелы. Михаил в докладе пройдется по основным компонентам, имеющим отношение к безопасности и разберёт, как это работает внутри. Если вы используете старый добрый ASP.NET, то для вас будет полезна информация по внутреннему устройству компонентов безопасности и лучшим практикам их использования.
Доклад даст ответы на вопросы: Как реализованы современные анти-XSS механизмы и как их правильно использовать в ASP .NET Core? Как правильно работать с cookies и какие подводные камни там могут встретиться? Как был переписан механизм защиты от CSRF? Как правильно работать с криптографическими алгоритмами? Также расскажу про опыт участия в bug bounty по поиску уязвимостей в ASP .NET Core. Рекомендую перед докладом освежить в памяти атаки из списка OWASP Top 10.
Оптимизации по производительности и по памяти
Работа с производительностью — вкусный кусок пирога по имени «разработка ПО», непростой в приготовлении и поддержке. Хотя производительность не входит в тройку необходимых требований к приложению/сервису, она может стать той фичей, которая делает ваш проект особенным. Второй аспект, который я включил в этот раздел — работа с памятью, утечки могут не только привести к снижению скорости, могут вообще завесить ваше приложениие и вообще вызвать кучу головной боли.
Кроме обзорного кейноута от Саши Гольдштейна, о котором мы говорили выше, у нас есть еще 4 доклада, которые позволят вам сделать ваш код быстрее и эффективнее.
Андрей DreamWalker Акиньшин — Поговорим про память
Во многих современных приложениях производительность упирается в память. Измерять скорость работы и писать корректные бенчмарки в таком случае не так-то просто: слишком много факторов влияют на итоговое время работы. В этом докладе мы поговорим о том, из чего складывается производительность работы с памятью.
Обсудим как низкоуровеные хардварные штуки (CPU cache и его ассоциотивность, выравнивание, store forwarding, 4K aliasing, prefetching, cache/page splits, cache bank conflicts и т.п.), так и более .NET-специфичные проблемы (pinned objects, large object heap, особенности работы кучи в полном .NET Framework и Mono).
Алексей Верещагин — Удалённое профилирование приложений на CoreCLR для Linux ARM
CoreCLR дает сейчас поддержку разных архитектур и систем, включая Linux. Проблема в том, что полная поддержка профилирования для .NET Core есть только под Windows, а для других систем возможности профилирование CoreCLR сильно ограничены.
В докладе речь пойдет об инструменте, позволяющем получить информацию об исполнении С# кода в среде CoreCLR, запущенной на Linux ARM архитектуре. В частности, мы можем получать горячие методы по времени работы и выделяемой памяти, горячий путь (hot path), нагрузку на CPU, информацию о работе JIT и GC. Все это можно делать непосредственно из Visual Studio 2015.
Алексей расскажет о возможностях, которые предоставляет их инструмент, и о подходах к профилированию, которые он использовал.
Dina Goldshtein — Automate Your Dumps
Когда приложение падает, у вас есть несколько способов понять, что произошло: воспроизвести проблему, почитать логи или проанализировать крэш-дамп. В дампе вы найдете, с каким исключением упало приложение, состояние потоков, интересные вам объекты, механизмы синхронихации и многое другое… Вот только если вы будете делать это ручками, придется потратить на это десятки часов — не думаю, что разработчику нечем больше заняться, кроме как дампы копать.
Хорошо бы все это автоматизировать, или хотя бы рассортировать по группам: по компанентам, типам крэшей или еще как. В этом докладе Дина расскажет, как автоматизировать анализ .NET крэш-дампов под Windows и Linux, а также о том, как делать более глубокий анализ при помощи WinDbg, lldb, и SOS.
Сергей Щегрикович — 5 заповедей PDB
PDB-файлы — важная часть инфраструктуры отладки. Я покажу, как эффективно использовать PDB файлы, продемонстрирую их структуру и зачем они нам, покажу новый формат отладочных символов в .NET Core. Доклад поможет сэкономить время на создании инфраструктуры отладки внутри компании.
Инструменты и фреймворки
Дмитрий Иванов — JetBrains Rider IDE: навыки личной эффективности для .NET-программиста
Если вы — ленивый (в хорошем смысле) программист, который хочет экономить рабочее время, а не заниматься рутинной деятельностью снова и снова, то этот доклад для вас. Вы узнаете новые фичи IDE и посмотрите под других углом на уже знакомые. Речь пойдет о том, как использовать Rider под разными операционными системами и чем он превосходит привычные IDE. Все фичи будут показаны в разрезе рабочих задач.
Исходить будем из предположения, что основная задача программиста — не стучать по клавишам, а мыслить. Отсюда логично следует, что основная задача IDE — помочь максимально быстро материализовать пришедшую вам в голову мысль. Попробуем оптимизировать количество действий на единицу смысла. Будем решать задачки, как за минимальное число нажатий добиться желаемого результата.
Mete Atamel — Containerised ASP.NET Core apps with Docker and Kubernetes
Kubernetes — открытая платформа для оркестровки контейнеров, уже давно доступная на Linux. ASP.NET Core позволяет использовать ее под .NET. Этот доклад покажет, как заворачивать ASP.NET Core приложения в Docker-контейнеры и деплоить их в Kubernetes. Кроме того, поговорить об автоматизации развертывания приложения, масштабировании, создании кластера контейнеров и других удобных возможностях, открывающихся с Kubernetes.
Maarten Balliauw — NuGet beyond Hello World
NuGet пакетами пользуются все, так? Это несложно. А знаете ли вы, как создавать свои пакеты и делиться ими? Как на все это повлияет появление .NET Standard? Как правильно версионировать, создавать, публиковать и раздавать пакет?
На докладе Маартин ответит на эти вопросы, и погрузится еще глубже: как использовать API NuGet клиента, чтобы извлекать данные из NuGet? Можно ли на базе NuGet построить свою систему плагинов для приложения? Какие жемчужины скрываются в серверном API NuGet? Можно ли создать полную копию NuGet.org?
Tomas Herceg — Entity Framework Core: Is It Ready Yet?
Этот доклад рассчитан на тех, кто ещ не работал с Entity Framework Core, но хотел бы попробовать. Речь пойдет о различиях между Entity Framework и Entity Framework Core, а также о том, какой фреймворк выбрать для вашего проекта. Обсудим фичи Entity Framework Core, которые Томас покажет в демках на разных СУБД под Linux.
Кроме этого, взглянем на дорожную карту проекта, обсудим, чего ждать в будущем и готово ли все это к работе на продакшене.
Никита kekekeks Цуканов — AvaloniaUI: первый кроссплатформенный XAML UI-фреймворк с поддержкой .NET Core
Мы живём во время, когда стала актуальной поддержка целого зоопарка платформ и устройств, а .NET Core и .NET Standard существенно упрощают переносимость C#-кода между ними. Однако каждая из платформ предлагает какие-то собственные средства для разработки, причём большая часть из них мысленно застряла где-то во временах MFC и Windows Forms, и не имеет нормальной интеграции с C#. Есть ряд решений, пытающихся привести эти платформы к общему знаменателю и хоть как-то добавить адекватную поддержку MVVM и XAML-вёрстки, но всё это как-то… не то.
.NET-разработчики привыкли к возможности стилизовать контролы где угодно и как угодно, к нормальным привязкам списков к коллекциям, богатой системе биндингов. Именно этого и пытается достичь проект AvaloniaUI, продолжающий идеи WPF в open source. Путь проекта нелёгок и тернист — помимо системы для работы привязок, необходимо самостоятельно обрабатывать весь пользовательский ввод, думать о том, как эффективно отрисовать интерфейс, бороться с разного рода несуразностями со стороны целевых платформ, разбираться с отличиями систем отрисовки (так, из-за неадекватной поддержки ArcTo пришлось адаптировать код, изначально предназначенный для правильной отрисовки орбит комет).
О том, чего уже удалось достичь, что из этого вы уже сейчас можете использовать, а также о трудностях и интересностях при разработке такого проекта — доклад от одного из его участников.
Дмитрий Сошников — Доступный искусственный интеллект на платформе .NET: от чат-ботов и когнитивных сервисов до глубоких нейросетей
Совершившиеся в последние годы прорывы в области искусственного интеллекта и машинного обучения позволяют сравнительно просто решать когнитивные задачи, которые раньше казались чудом: распознавание возраста человека по лицу, понимание естественного языка или машинный перевод. Мы рассмотрим, как эти задачи могут по-разному решаться на платформе .NET: начиная от использования готовых когнитивных сервисов, заканчивая обучением на больших данных и глубоким обучением нейронных сетей с помощью Microsoft Cognitive Toolkit. ВНИМАНИЕ: некоторые демонстрации будут показаны на F# и могут сломать вам
Filip W — Building code analysis tools with the .NET Compiler Platform (Roslyn)
Мы любим Resharper и его прекрасные возможности по анализу кода. В этом докладе речь пойдет о том, как использовать новый .NET компилятор Roslyn для создания своих инспекций и анализаторов кода. С помощью своих инспекций вы сможете контролировать codestyle, находить логические ошибки в коде, переназначать файлы в проекте. Филип расскажет, что необходимо для создания своего анализатора кода и расскажет, может ли все это работать где-то еще, кроме как в Visual Studio.
Более подробно о Филипе и о том, чем он занимается, можно почитать в нашем Хабраинтервью с ним.
Михаил Филиппов — Учимся готовить MSBuild
MSBuild — это инструмент, который .NET разработчики используют каждый день, но далеко не все понимают, как он работает и что он может. Это продолжается до тех пор, пока разработчики не сталкиваются с непонятными проблемами или ограничениями того, что позволяет настроить Visual Studio, и в этот момент они начинают пытаться кастомизировать свои build-скрипты. А потом их билд начинает тормозить или работать неправильно.
В докладе будет рассказано, как решать различные проблемы, возникающие при написании собственных build task. Показано, как дебажить проблемы в билде — и как можно собирать проект с помощью MSBuild не только на Windows.
Подходы и паттерны
Раздел о подходах тоже не оказывается рустым никогда. В конце концов, выбор правильного паттерна/архитектуры может спасти вас от десятков часов страданий: будь то легкость поддержки, расширения или отладки вашего проекта.
Проблема в том, что если по верхам можно изучить все, то применять с пониманием тот или иной подход часто с первой попытки не получается. Доклады в этом разделе призваны показать вам наиболее современные подходы и дать вам достаточно знаний, чтобы вы не наступали на самые популярные и болезненные грабли (самыми страшными граблями, как известно, являются детские).
Вы когда-нибудь слышали об аспектно-ориентированном программировании? А пробовали применять его на практике? Мы начнем с самого начала — с теоретических определений и примеров задач, где может помочь АОП; постараемся разобраться с тем, как «завести» АОП под .NET. Также мы решим несколько задач, используя основные АОП-фреймворки: научимся генерировать врапперы во время исполнения через динамические прокси, внедрим в наши классы код во время компиляции, используя PostSharp и Fody. На закуску мы возьмем Nemerle, и, разобравшись со страшными на вид словами вроде «квази-цитирование» и «метапрограммирование», решим наши задачи АОП без фреймворков!
Dylan Beattie — Real World REST and Hands-On Hypermedia
Вот вы запилили свой HTTP API, и он вроде даже работает. И тут выясняется, что перед вами целых ворох проблем: для замены email-адреса вам надо заменять Customer полностью, рендеринг корзины требует 25 API вызовов, отрисовка веб-страницы делает 50 HTTP запросов, и как теперь искать узкие места?
Архитектура REST — понятная вещь, но далеко не всякий разработчик может переложить REST-принципы в реально работающий код. В этом докладе Дилан покажет вам элементы REST, так или иначе связанные с hypermedia и принципом HATEOAS («hypermedia as the engine of application state») — и расскажет, почему это все важно и зачем вам реализовывать все это в вашей системе. Посмотрим на инструменты, которые помогут вам проектировать, разворачивать и отлаживать ваши HTTP API и немного покодим.
Вагиф Абилов — Типизированный или динамический API? Дайте два!
Уже несколько лет разработчики могут использовать в C# элементы динамических языков, так что, определяя API, можно сделать его доступным для данных типа dynamic. Заманчиво для отдельных сценариев, но очень не хотелось бы отказываться от преимуществ статически заданных типов. Можно ли совместить два подхода? Если да, то насколько это трудоёмко? И как при таком подходе избежать дупликации кода? Этому всему и посвящен доклад. В основе презентации — принципы реализации мультиплатформенной опенсорсной библиотеки, написанной и поддерживаемой самим Вагифом. В процессе доклада показывается, как с нуля написать подобную библиотеку для обработки SQL команд.
Jon Skeet — The changing state of immutability C#
Доклад о том, что такое immutability, в чем ее преимущества и как она развивалась в C#. Кроме того, речь пойдет о различных вариантах реализации неизменяемости объектов/состояний, их плюсах и минусах (особенно в случаях, когда язык или платформа ее не поощряют), а также о том, что будет происходить с этой концепцией в будущем.
Игорь Лабутин — Межпроцессные разговоры: причины и способы
Всё больше современных приложений выходят за рамки простой модели «один процесс». Разработчики находят много причин тому, почему одного процесса мало. А если их становится несколько, возникает проблема передачи информации между ними. .NET предоставляет несколько способов организации такого взаимодействия. Мы рассмотрим, откуда может появиться задача общения процессов, обсудим способы её решения, а также убедимся, что не все способы одинаково удобны и полезны.
И кое-что ещё...
Михаил Самарин — Xbox One и HoloLens, платформы для .NET разработчиков
А вы знаете, что если у вас установлена последняя версия Visual Studio, вы можете разрабатывать как для HoloLens, так и для Xbox One без установки специальных SDK или наборов инструментов? Это обычные Windows 10-устройства для Universal Windows Platform. Приходите на доклад и узнайте об основах разработки для Xbox One и HoloLens, включая живую демонстрацию на реальной аппаратуре. Узнайте, что можно делать с Unity 3D и Windows Mixed Reality, включая новшества Windows 10 Creators Update.
Adam Sitnik — My awesome journey with Open Source
До недавних пор .NET сообщество было закрытым, но все изменилось. Теперь наш компилятор, наш рантайм, GC и многое другое стало открытым. Вы уже пробовали контрибьютить? Хотели бы, но не знаете, с чего начать? Что вы получите от OSS и зачем это вам? Чего делать не стоит, а на что стоит обращать внимание в первую очередь? Какие проекты сделают вас хорошим разработчиком? Адам ответит на эти вопросы, опираясь на собственный опыт разработки в Core CLR, BenchmarkDotNet и corefxlab.
Дамир Бейльханов — Xamarin.Forms: особенности кроссплатформенной разработки мобильных приложений
Проведем небольшой экскурс по тому, как используя ваши .NET + C# скиллы, опыт работы c XAML, Visual Studio, и Xamarin.Forms разрабатывать нативные мобильные приложения для популярных платформ. На примере простого кроссплатформенного приложения познакомимся с его структурой, посмотрим, как обстоят дела с UI, поговорим о различного рода проблемах, возникающих в процессе кроссплатформенной разработки на Xamarin.Forms. Вспомним про замечательную парочку DI&MVVM, затем отвлечемся на инструменты, которые облегчают труд разработчика и процесс разработки в целом. В конце доклада мы выберем удобную IDE для Xamarin-разработчика.
Григорий Кошелев — Интеграция виртуальных машин .NET и Java
Предположим, стоит задача в .NET-сервисе преобразовать XML в PDF, но при этом уже есть проверенное временем решение на Java — Apache FOP. Можно переписать всё на C#, воспользоваться кросс-компиляцией или использовать Java-библиотеку непосредственно из Java. Можно поднять Java-сервис и взаимодействовать с ним из .NET-приложения, а можно попытаться поднять этот же Java-сервис внутри .NET-процесса. Первый вариант не всегда подходит: под .NET может быть заточена инфраструктура, мониторинги и прочее, возникают вопросы эксплуатационного характера. Запустим виртуальную машину Java внутри .NET-процесса, попутно разберёмся с Marshal, граблями и прочими нюансами такого рода интеграции.
На этом все, кажется. Если вам интересно, как доклады расположены в 3 треках, смотрите программу на сайте конференции.
Автор: JUG.ru Group