О CodeFest X
2019-04-07
По традиции каждый год в конце марта мы с друзьями едем в Новосибирск на CodeFest. Этот CodeFest оказался юбилейным. Десятым (на самом деле двенадцатым). Поэтому — CodeFest X (следующий, вероятно, будет XS или XR).
На открытии организаторы попытались найти долгожителей. Просили поднять руки тех, для кого это первый, второй, третий и так далее Кодефест. Я оказался где-то в пятёрке самых старичков. Потом я вспомнил точно, что в первый раз я поехал на Кодефест, когда он впервые переехал в Экспоцентр, и было это в 2012 году. Получается, CodeFest X для меня уже восьмой.
Мы приехали в Новосибирск ещё в пятницу. Устроили пешую и не только прогулку по Академгородку и Технопарку. Попали в замечательный частный интегральный музей повседневности Академгородка. Сходили в кино на фильм про Микеланджело. Выпили.
А потом — конференция. Поехали.
Громадный-громадный ангар. Новый внезапный зал на CodeFest. И секция Future в нём. Только ради этой секции и стоило ехать. Впрочем, я, в угоду сиюминутным меркантильным интересам, эту секцию почти всю пропустил. Ходил в основном на Backend.
Григорий Кошелев рассказал про Кафку. Не ту, которая в голове, а которая Apache Kafka. Я в очередной раз не понял, зачем эта Kafka нужна. Нужна очередь? Берите очередь. Нужно хранить всё? Храните всё. Зачем смешивать?
А вообще обожаю такое, когда докладчик нежно и вдохновлённо рассказывает о родной и выстраданной технологии, но половину доклада смакует её недостатки. Сам грешен. Ибо в жизни так и есть. Продолжаешь грызть кактус.
Здесь же проблемы с Apache Kafka живо мне напомнили наши проблемы с Apache Spark. Пока всё по рецептам и туториалам, всё работает. Но любой шаг в сторону приводит к невообразимым глюкам, дням гугления и копания кода и нахождению какого-то известного заброшенного бага, который никто не собирается фиксить. Это особенность всех проектов на Scala? Или всех проектов Apache?
Максим Чечель
рассказал про Go.
Про декораторы в Go.
Как взять,
и добавить метрики, логи и всё такое,
что в обычных языках делается декораторами
или в обычных фреймворках делается через middleware.
Добавить в любые интерфейсы на Go.
Так как в Go нет наследования и нет generics,
то, чтобы не писать повторяющийся код
добавления этих самых декораторов,
пришлось заняться кодогенерацией.
Сделать gowrap.
Оказывается, кодогенерация,
в виде go generate
,
уже давно является частью
ифраструктуры сборки в Go.
В данном случае gowrap предоставляет шаблоны
для кодогенерации типовых декораторов
для микросервисов.
Микросервисы уже не являются темой конференции. Все и так уже пишут микросервисы. Теперь идут доклады про то, как писать микросервисы лучше.
Ася Казанцева на секции Future была, как всегда, великолепна. Говорю «как всегда», хотя, на самом деле, это её первое выступление, что я вижу, и книг её я не читал. Но ведь клёво же рассказывает. И очень интересные вещи.
Идеальное «Оно», с крупными окрашенными нейронами. Как на самом деле растут синапсы. Нейрон Дженифер Энистон. Фармакологическое стирание боязни паучков. Про сон. Про мышек. Про обучение с точки зрения нейрофизиолога. Срочно надо почитать асины книжки.
Виктор Грищенко снова отжёг. После его докладов мир всегда переворачивается. В этот раз доклад был про децентрализованный веб.
Дело в том, что у нас уже есть отличные алгоритмы и протоколы для контроля за изменениями. Git, BitTorrent, blockchain, всё это есть и работает. У нас уже есть технологии для доставки контента, те же самые CDN. Де-факто веб уже децентрализован, контент не скачивается с того самого сервера, контент уже находится рядом с юзером. Осталось децентрализовать его де-юре. Убрать ненужный адрес сервера и путь из URL, оставить лишь хэш.
IPFS — InterPlanetary(!) File System. Протокол dat://. IPLD. RFC 7574. Вот это вот всё.
На этом докладе впервые прозвучала аббревиатура CRDT — Conflict-free replicated data type. В лице RON — Replicated Object Notation. Но об этом попозже.
Вот в этом весь Виктор. В одном докладе на тебя сваливается такой громадный ушат чего-то совершенно нового, что переваривать потом приходится ещё долго.
Максим Аршинов выдал обширный обзор архитектурных подходов. Чтобы лучше писать микросервисы, конечно же. И снова всё свёл к декораторам. Все примеры и рассуждения были исключительно из мира C# и .NET. Никаких примеров из других платформ не было, так что всё выглядело как изобретение велосипедов для C#. Я всё ждал, когда будут упомянуты акторы, или хотя бы передача сообщений. Но нет, не дождался.
Павел Финкельштейн рассказал про Kotlin. В продакшине. Со Spring и не только. Ну нормально. Рад слышать, что кто-то тоже успешно использует Kotlin. Да, некоторые проблемы встречаются, но они вовсе не фатальны, и нормально решаются. Котлину — быть.
Первый день конференции закончился. Началась вечеринка, по недоразумению называемая afterparty. Выпивали. Говорили. Дёргали за пуговицы докладчиков и организаторов. Слушали песни Дилана Битти про это наше ИТ. На этот раз в исполнении целой рок-банды из самого Дилана и нескольких докладчиков и ведущих CodeFest. Хорошо. Дилан неплохо выговаривает русские слова в песне про дачу и фигачить.
День второй. Посещение мною Backendа продолжилось. Поэтому я пропустил и Максима Дорофеева, и Павла Мочалкина, и Александра Орлова. Надо будет видосики посмотреть. Говорят, Дорофеев лишь один раз сказал слово «жопа».
Дмитрий Александров рассказал про Microprofile.io. Оказывается, J2EE не умер, а из него выросло несколько спецификаций. Одна из них, для микросервисов опять-таки, живёт под крылышком Eclipse, и называется MicroProfile. Это чудо пока ещё легковеснее Spring. И выглядит почти как Spring Boot, такие же (но другие) аннотации, и всё такое. И его поддерживают все популярные сервера приложений. Кстати, этих серверов, оказывается, туева хуча...
Владимир Плизга отлично показал, как взять и перейти с Java 8 на Java 11 в Spring Boot приложении. Переходить придётся, рано или поздно, так или иначе. Потому что Oracle уже прекратил поддержку Java 8, а следующей LTS является как раз Java 11. Забавно, что больше всего проблем порождает не смена версии Java, а смена версии Spring и Spring Boot, которую придётся проделать для поддержки этой самой Java 11. Там какая-то муть с сериализацией и JPA. И переход на Kotlin таки может многих проблем избежать, за счёт своих особенностей перехода :)
Антон Чапоргин рассказал, как они в Яндексе сделали многопользовательский онлайн редактор на основе того самого CRDT — Conflict-free replicated data type. В Google Docs можно редактировать один документ нескольким пользователям одновременно. И эти пользователи не передерутся за буковки друг с другом, и все увидят один и тот же результат благодаря Operational transformations (OT). OT — штука сложная в реализации, и не всегда выдаёт правильный результат. Но, оказывается, есть альтернатива: CRDT.
CRDT — это такая особая структура данных, часто в виде дерева, над которой можно применять операции в произвольном порядке, но результат будет одинаков. Можно просто рассылать произведённые операции между всеми участниками совместного редактирования по мере того, как это возможно. И у всех участников обмена всё сойдётся к одному результату. Очень клёво для синхронизации. И вроде как эта сходимость доказана. И вроде как CRDT запрограммировать довольно просто. По крайней мере, у Яндекса получилось. Дважды.
Иван Ямщиков отлично показал, что такое искусственный интеллект прямо сейчас. Оказывается, этот наш ИИ уже здесь. Любое сканирование документов, анализ больших массивов данных, распознавание номеров и штрих-кодов — это уже ИИ. Везде, где нужно думать головой (нужны когнитивные способности), но человеку слишком скучно, уже есть ИИ. С этим мы уже живём, это надо уже уметь готовить. И развивать дальше, конечно же.
Илья Матвеев рассказал, как обстоят дела с мультиплатформенной сборкой в Kotlin. Kotlin же у нас уже компилируется под JVM, в JS и в нативный код (чтобы под iOS можно было цеплять). И можно писать проекты, где будет общий код на чистом Kotlin и платформоспецифичные реализации. И собирать этот проект под разные платформы. Это уже работает в Kotlin 1.3. Пока только через сборку через Gradle. Пока не без огрехов. Но работает.
Александр Тоболь совершенно отжёг про протоколы. TCP умер, да здравствует QUIC. (На самом деле нет). Очень подробно рассказал, что не так с TCP, почему он плохо работает в сетях с большими задержками и даже небольшими потерями (и джиттером). Как можно сделать TCP лучше, но почему это не получается. (Потому что фиг обновишь клиентскую реализацию на миллионах не обновлящихся андроидных устройств).
Выход видится один: делать свой протокол поверх UDP с реализацией в user space. Оказывается, «Одноклассники» уже пару лет пилят целых два таких протокола: для раздачи видосиков и для доступа к API. И есть конкретный профит от этого, в виде увеличения количества просмотров и, соответственно, бабок.
Ну а Гугль пилит свой QUIC. Для которого клиентская реализация есть только в Chromium, а серверная реализация — на серверах Гугла. И нет нормальной открытой серверной реализации для всех. Но, тем не менее, QUIC уже отъёл 12% мирового трафика (на Youtube, в основном). И он продолжает активно развиваться.
Похоже, уходит эпоха универсальных протоколов. Приходит эпоха частных проприетарных протоколов под конкретные задачи. Хорошо ли это — не понятно. Но точно будет интересно.
С UDP, да ещё и в user space, конечно, есть свои проблемы. Они-то как раз и будут решаться (и уже решаются) сейчас.
Евгений Черешнев закрывал конференцию. Рассуждал про профессии, которые уже умерли, которые будут жить, и которые появятся. Порадовало, что HRы останутся, как «управляющие талантами». Где будут программисты, непонятно. Вроде будут, как инженеры и архитекторы новых странных виртуальных штук.
Вечером воскресенья снова выпивали. Помянул TCP.
CodeFest X прошёл. Было улётно.