Joker 2016: Вертикальное масштабирование
Помимо «чисел Joker 2016», перечисленных нами заранее, теперь можно назвать ещё одно: на конференции наши фотографы сделали более 5000 снимков. Неудивительно, что на обработку ушло ощутимое время, и на Хабре уже успел появиться отзыв глазами участника от dbelob —, а теперь мы публикуем свой.
Резкие отличия Joker 2016 от предыдущих «Джокеров» бросались в глаза сразу. В чём они состояли, о чём рассказывали на конференции в этот раз, и какие доклады по зрительским оценкам оказались лучшими?
Первый день
Иногда не требуется даже дожидаться открытия конференции, чтобы ощущить её отличие от прошлогодней: в случае с Joker 2015 достаточно было просто прийти на площадку. В этот раз, собрав более 1000 человек, петербургская конференция переросла размеры «Park Inn Пулковской» и прошла в «ЭкспоФоруме». Оказавшись под его высоченными потолками, сложно было не впечатлиться масштабом. Можно сказать, что у конференции произошло вертикальное масштабирование во всех смыслах.
В разы увеличилась площадь. Это позволило размахнуться как следует, разместив множество нового: от ретро-компьютеров и фотобудки до отдельного мини-трека для IT-директоров и конкурса iCanCode. На одном и том же мероприятии присутствовали и шлем виртуальной реальности VFX1 из 90-х, и появившийся в 2016-м HTC Vive, так что можно было лично оценить путь, проделанный VR за двадцать лет. И, наконец, с площадью увеличилось главное: число треков возросло с четырёх до целых шести.
Ещё одно отличие возникло с открытием конференции, и оно имело значение не для присутствовавших в «ЭкспоФоруме», а для всех остальных: впервые в истории Joker видеотрансляция одного из треков была бесплатной. Но в этом случае, кроме новых возможностей, появились и новые сложности. С трансляцией возникли технические проблемы (предоставленный нам канал на upload оказался меньше, чем должен был), заставившие немало людей побегать в мыле. Позже ситуацию удалось исправить, но некоторое время всё ощущалось так, как на этом нашем твите.
Коротко о трансляции #jokerconf 2016 pic.twitter.com/7FQdnRVCdB
— JUG.ru (@JUGru) October 15, 2016
Тем временем за официальным открытием последовал кейноут от Алексея Шипилёва о производительности. Поскольку формат кейноута не предполагает адского хардкора, выступление было менее техническим и более обзорным, чем его обычные доклады. А значит, давало отличную возможность всем, кто давно хотел послушать Шипилёва живьём, но боялся.
Что до содержания доклада, то ключевым его слайдом стала «Кривая им. Ш». Разделив работу над оптимизацией на несколько разных «зон», Шипилёв решительно заявил, что поначалу речь идёт «просто о том, какую часть говнокода переписывать в первую очередь». Это означает, что полезен будет любой профайлер, а все слова про «преждевременную оптимизацию как корень всех зол» не более чем ментальная ловушка. Вот позже, когда очевидные ошибки устранены и проект уже перешёл из «зелёной зоны» в «жёлтую», всё становится сложнее.
А после кейноута пришло время расходиться по залам, и тут ощущалась ещё одна сложность. Поскольку на этом Joker треков было целых шесть, выбор стал гораздо богаче, а в результате сделать его стало сложнее: куда ни пойди, упускаешь что-то интересное. И в этом тексте тоже упомянута лишь небольшая часть докладов, иначе его попросту сложно было бы дочитать. Но всем бы такие сложности, как «слишком много интересного»! В конце концов, всё пропущенное участники смогут посмотреть в записи.
Так что много любопытного происходило параллельно: пока в одном из залов тему производительности развивал Андрей apangin Паньгин (Одноклассники), в другом выступление Баруха jbaruch Садогурского (JFrog) и Виктора gAmUssA Гамова (Hazelcast) тоже перекликалось с кейноутом, но совсем иначе. Их предыдущие выступления с Groovy-паззлерами были так тепло приняты, что теперь они выступали уже с третьей порцией паззлеров, и в одном из них предлагали определить, какого докладчика выбрал бы для кейноута такой groovy-код:
Интересные факты о Kotlin можно было узнать ещё до начала доклада Андрея abreslav Бреслава (JetBrains), руководящего разработкой этого языка: в ожидании времени начала Андрей охотно отвечал на вопросы из зала. Поэтому зрители узнали любопытные детали не только о корутинах, которым был посвящён доклад (язык обзаведётся ими в 2017-м с релизом версии 1.1), но и о другом. Например, что работа над JavaScript в Kotlin продвигается полным ходом, а вот цель добавить в язык pattern matching не ставится: «На заре проекта пытались сделать, но тогда от этого отказались, а сейчас мы без этого не страдаем, да и люди в целом тоже. Потребность в полноценном pattern matching есть в основном у тех, кто пользовался Haskell или Scala и теперь считает, что это must have».
Когда пришло время обеда, не обошлось без очередей, но при этом в зале для обеда и кофе-брейков была оборудована сцена подкаста «Разбор полётов» — так что, ожидая своей очереди, можно было слушать бодрые диалоги резидентов и гостей «Разбора». Видеозаписи этих диалогов уже доступны зрителям Joker, а спецвыпуск самого подкаста, записанный на конференции, доступен всем.
У Тагира lany Валеева (JetBrains) собрался полный зал на «причудах Stream API», показывавших, сколько в этом API контринтуитивных ситуаций. Это вызывало реакцию «я-то считал использование стримов безопасным, как наивен я был», получался забавный результат: доклад одного из главных в мире энтузиастов стримов отпугивал людей от них. Более того: в YouTrack можно найти тикет, по которому получается, что с помощью Тагира IntelliJ IDEA станет помогать людям убирать стримы из кода. Что дальше, Мартин Одерски начнёт помогать людям мигрировать со Scala?
Рассказ об invokedynamic был от Чарльза Наттера (Red Hat). Понятно, что эта тема близка человеку, много лет работающему над JRuby («до появления invokedynamic JVM была построена вокруг Java, а другим языкам приходилось прибегать к грязным трюкам»). Но любопытно было узнать из его слайда, что он ещё в 2011-м твитнул «это изменит лицо платформы», сделав довольно точный прогноз: спустя пять лет invokedynamic называют «секретным оружием» Java, проторившим дорогу лямбдам.
А закрывающий кейноут первого дня органично переходил в вечеринку. Сначала Сэм Аарон объяснял, почему создал инструмент для музыкального лайвкодинга Sonic Pi: «Использовать языки программирования только для задач энтерпрайза — это всё равно что использовать русский или английский только для юридических документов». Затем демонстрировал основные принципы работы с ним и призвал желающих помочь с переводом туториала на русский (проект ориентирован и на детей, так что английского тут недостаточно).
Затем, переместившись в другой зал, он принялся за собственно лайвкодинг, отыграв двухчасовой сет. Код крупно выводился на экран, и временами Аарон обращался к зрителям с помощью комментариев в нём. Наттер, стоявший во время сета в первом ряду, снял фрагмент выступления телефоном в 4K-разрешении:
Второй день
Большую сцену следующим утром занял тот же Чарльз Наттер, открывая день кейноутом «From Java to Assembly: Down the Rabbit Hole». На втором дне были студенческие треки, так что среди зрителей было много начинающих — и доклад соответствовал этому, начинаясь с объяснения ключевых терминов вроде «байткода». Но по мере углубления в кроличью нору у «взрослых» тоже появлялось о чём послушать: многие ли пользуются PrintAssembly?
Ожидалось, что далее пути студентов и «взрослых» полностью разойдутся по разным трекам. Однако жизнь внесла свои коррективы: оказалось, что опытные разработчики жаждут слушать Владимира vlkrasil Красильщика даже в том случае, когда его доклад ориентирован на начинающих. В итоге на его выступлении «Анти-введение в Big Data» был аншлаг: там собрались и новички, и профессионалы.
Резко контрастировало с этим выступление Алексея Шипилёва о Java Memory Model: поскольку разжёвывать основы было некогда, доклад сразу требовал от зрителей определённого уровня понимания JMM, и там начинающим делать было нечего. Тем временем предыдущее выступление Шипилёва продолжало откликаться в сердцах. Например, Алексей zaleslaw Зиновьев в своём докладе о Spark 2.0 объяснял: «После кейноута все только и говорят о том, у кого оптимизация в какой зоне находится. Так вот, в бигдате вам повезёт, если вы окажетесь хоть в какой-то зоне!»
А между докладами зрители пользовались продолжительными кофе-брейками для двух вещей. Во-первых, можно было как следует изучить всё находящееся на большой территории: и подойти к стендам спонсоров, и сфотографироваться с со «спикерами-супергероями». А во-вторых, как следует поспрашивать самих спикеров в дискуссионных зонах, не опаздывая на следующий доклад.
Позже среди самих этих «следующих докладов» было выступление Сандера Мака о модулях Java 9, а мало кто в мире знает о них столько: сейчас Мак пишет о них книгу, а по работе давно столкнулся с фреймворком OSGi, предвосхитившим Jigsaw. Опираясь на свой опыт, он объяснял: «Зачем вообще понадобился Jigsaw при существовании OSGi? Потому что без Jigsaw не модуляризовать непосредственно JDK. А почему тогда не использовать его только для JDK, оставив OSGi для всего остального? Хороший вопрос, вообще-то можно было бы сделать и так, но сказывается то, что OSGi не пользуется большой популярностью».
Олега m0nstermind Анастасьева из «Одноклассников» можно было увидеть в этом докладе на первом ряду, а он только недавно заявил нам «переход к модулям в нашем случае не даст преимуществ, оправдывающих его». Тут было не удержаться от вопроса «Ну как, Мак не переубедил в этом?» Ответ Олега оказался примерно таким:
Любителям Gradle на этом Joker и так было что послушать (речь о нём заходила многократно), но доклад о нововведениях ветки 3.x был особенным: рассказывал непосредственно участник команды Gradle Рене Грошке. Для начала он уточнил, почему версия 3.0 получила такой номер, если не лопается от новых возможностей: «У нас major release делается не в связи с новыми фичами, а в связи с прекращением поддержки deprecated-фич. Поэтому версия 2.0 в своё время многих разозлила!»
Если слайды о composite builds из недавней версии 3.1 вопросов ни у кого не вызывали, то изображение ниже Грошке показал со словами «Это первая конференция, на которой я ожидаю, что люди узнают изображённое». А вы узнаёте или нет? Почему посетители петербургской Joker знают это лучше других?
Тем временем конференция подошла к концу, и завершал её кейноут Гиля Тене (Azul Systems) о «прагматичном перфомансе». Тене призывал оторваться от миллисекунд и задуматься, что нам вообще нужно: «Глупо сравнивать скорость в отрыве от практических задач. Возьмём спортивный автомобиль и мопед — что из них быстрее? А теперь сравним их в условиях пробки: на чём реально быстрее доберёшься до работы? С перфомансом то же самое. То, сколько запросов в секунду может обрабатывать система — это теоретический подход. Прагматичный такой: «Должны ли все её ответы до единого быть правильными?»
Остаётся подвести итоги — вот какие доклады конференции стали лучшими по оценкам зрителей:
- Близкие Контакты JMM-степени — Алексей Шипилёв (Red Hat)
- Причуды Stream API — Тагир Валеев (JetBrains)
- Анти-введение в Big Data — Владимир Красильщик (Яндекс)
- Advanced search for your legacy application — David Pilato (elastic)
- Асинхронно, но понятно: сопрограммы в Kotlin — Андрей Бреслав (JetBrains)
В общем, масштабирование произошло успешно: без сложностей не обошлось, но их в таком случае стоит ожидать, и в итоге они были преодолены. Теперь будем ждать Java-разработчиков весной в Москве и Новосибирске: уже открыт приём докладов и на JPoint, и на JBreak. А напоследок — интересный штрих: спикер Рафаэль Уинтерхалтер (Scienta) в твиттере поделился тем, что дала конференция ему. Такое за деньги не купишь, да.
@lukaseder @sjmaple Two VM engineers debugged a segfault for me. Another one helped me understand a GC problem. Can’t pay for that.
— Rafael Winterhalter (@rafaelcodes) October 16, 2016