О CodeFest 2016

2016-04-03

Надо писать про очередной КодеФест. Я опять на него не хотел ехать. Но твиты с анонсами ключевых докладов как-то убедили. Ну и не пожалел.

CodeFest

В прошлый раз кодефестили на тему DDD и CQRS. В этот раз, как Орта Терокс задал тему открытости, так все про оперсорц и поминали. Либо прям: «Мы тут фигачим фиговину на GitHub под BSD лицензией». Либо как минимум: «Это наш внутренний продукт, но некоторые части мы скоро выложим на GitHub». Почти в каждом докладе. Мне, как адепту свободного ПО, было немного обидно, что термин «оперсорц» употребляют налево и направо, а про «свободное ПО» не сказали ни разу.

Сам Орта говорил не только об открытости кода. Он говорил об открытости всего процесса разработки, которого они добились в своей компании. Код открыт на Гитхабе, багтрекер открыт на Гитхабе, открыты документация и блоги. Любой желающий может, если не непосредственно присоединиться к разработке, то хотя бы передать публичный привет разработчикам. И такая открытость влияет на самоощущение, даже на качество кода. Уже нельзя запушить говнокод, уже нельзя забить на баг. Всё видно.

Такая открытость, пожалуй, и прекрасна. Но им повезло с бизнесом. Сам код, а это приложения для iOS, которые предоставляют доступ к художественным галереям, не имеет ценности. Денежную ценность в их случае имеет контент, те самые картины. А доступ к контенту довольно легко контролировать и монетизировать.

Алексей Фёдоров из Одноклассников отлично рассказал про магический способ синхронизации через CAS инструкции современных процессоров. Справедливости ради, я знал об их существовании. Однако было интересно узнать подробности, а также недостатки. Основной недостаток в том, что при большом числе конкурирующих потоков, они будут долго крутиться в бесполезных циклах, пока последовательно не сделают, что хотели. И, кстати, synchronized секции в нашей любимой Java далеко не всегда представляют собой тяжёлые блокирующие мониторы. В некоторых случаях JIT может использовать здесь как раз CAS инструкции. Слышал я это давно, кажется на каком-то Java Day в том же Новосибирске.

Андрей Акиньшин из JetBrains похвастался новой разработкой нашей любимой компании: Project Rider. Это кросплатформенная IDE для .Net. Не то, чтобы я сильно любил .Net, но последние пару лет приходилось иметь с ним дело. И как раз Riderа очень сильно не хватало. Ребята замутили жуткий костыль, но иначе быстро сделать было нельзя. Гуй от IDEA, на Java с дописками на Kotlin, лезет через сеть к бэкенду от ReSharper на C#, запущенному под модифицированным Mono. Получилось переиспользовать наработки и IDEA, и ReSharper. К сожалению, в силу костыльной природы проекта, Rider пока не может войти как плугин в IDEA Ultimate.

Чуток застал доклад Вадима Макеева из Opera Software. И понял, как бесконечно далёк я от фронтенда. Кажется, время, когда можно было ручками писать HTML и чуток сдабривать его CSS, безвозвратно прошло. Ну а Вадим рассказал про магию свежей модной молодёжной грид-раскладки. Мне понравилось. Но всё же жутко любопытно, как оно работает. О боже, это наш грядущий стандарт!

Денис Иванов из 2ГИС долго и нудно объяснял азы CQRS. Зачем? Ведь год назад всё уже разжевали лучше некуда. К тому же в контексте секретного сервера на акторах, который мы пилим, CQRS выглядит как вчерашняя полумера. Мы поймали Дениса после доклада и попытались убедить. Не получилось.

Александр Казаков из СКБ Контура выдал потрясающий доклад про... Ну я для себя его назвал: «Про таймауты». В теории с горизонтальным масштабированием всё просто. Берём несколько stateless сервисов, ставим перед ними балансировщик, и всё ок. На практике не всё так просто. Нужно согласовывать таймауты, чтобы клиент не решил, что всё пропало, раньше, чем балансировщик решит, что сервис сдох. Нужно думать над стратегией обращения балансера к сервисам, как он будет определять, что сервис умер, когда будет обращаться к следующему, опять-таки тщательно учитывая таймауты. Иначе легко получить такой кластер, который для внешнего клиента работает даже медленнее одной машины. Очень интересно и поучительно. И есть раздолье для математиков и статистиков, если что. Чтобы высчитывать оптимальные стратегии исходя из наблюдаемых данных.

Сергей Белов из Digital Security, после докладов которого я обычно боюсь даже подумать о том, чтобы выйти в Интернет или запустить хоть какую-нибудь программу (ведь везде уязвимости!), на этот раз рассказал про некоторые инструменты для поиска уязвимостей. Самый скучный доклад Сергея, но всё равно полезненько.

Антон Галицын из 2ГИС поделился опытом развёртывания OpenStack. Молодцы. Подвиг совершили, я считаю. Если понадобится разворачивать OpenStack, я теперь знаю, к кому обратиться за консультациями.

Тимурку Шевлякова я пропустил. Как оно там было?

Зато послушал старого тролля Никиту Липского из Excelsior. Эти ребята из Новосибирска уже давно пилят свою JVM. Со статической компиляцией в нативный код. Одну из немногих JVM, официально одобренных ещё Sun. В отличие от андроидных оных. Мало кто знает внутренности JVM как они. Так что если будут хитрые вопросы про Java — готу к ним. У нас пара вопросов было, спросили. На докладе не было ничего кардинально нового для меня. Но, полагаю, для Java разработчиков, которые почему-то обошли вниманием Java Virtual Machine Specification, было полезно.

Уважаемые организаторы, с обедами в этот раз было хорошо. Всё-таки нормальный рис и котлетки — это сильно лучше авиационного обеда. Если бы это всё было бы ещё и раза в два дешевле, как оно положено быть в хорошей столовке, то было бы совсем отлично.

Star Wars

На второй день с утра выступала знаменитая Дорофея. Мы, в попытке нормально позавтракать, опоздали. Но, думаю, я ничего не пропустил. Макс обладает чудесной способностью из раза в раз повторять одно и то же, но разными словами. И весело. На этот раз с обезьяной. И ещё брать за это деньги. Завидую.

Антон Турецкий из Badoo рассказал про внедрение Dockerа. Нормальная история внедрения. Хороший рассказчик.

Доклад Игната Ковальчука из Google про Kubernetes в меня как-то не вошёл. Не помню, о чём он был. Помню только, что про Kubernetes была лишь треть доклада.

Никита Арыков из Pushwoosh ненавязчиво прорекламировал свою компанию в связи со смертью Parse.com. Parse — это такой облачный бэкенд для мобильных приложений, где можно (было) ничего не программируя, заполучить REST API для своих сущностей и пуш уведомления. Проект был куплен Фейсбуком и закрыт. Сейчас частично заоперсорсился и, при желании, обрезанную версию можно запустить на Heroku.

Александр Золотарёв потрясающе интересно рассказал про свою MAPS.ME. Я для себя открыл это приложение лишь недавно. В моём рейтинге картографических приложений MAPS.ME делят второе место с Яндекс.Навигатором, после 2ГИС. Алекандр рассказал, как всё начиналось, как росло, как они зарабатывали деньги, как дружили с YotaPhone, как продались Mail.ru и стали бесплатными. Но было и несколько технических деталей. Как они берут данные OpenStreetMap и «сжимают» их, чтобы мобильным юзерам меньше надо было качать. Классный доклад.

Гарный хлопец Андрей Светлов порадовал упоротых питонистов. Они пилят библиотеку aiohttp — HTTP фиговина поверх asyncio. Как я понял, это очередная инкарнация идей Twisted, Tornado и иже с ними. Наверное, это хорошо.

Константин Осипов из Mail.ru рассказал про Tarantool. Это такая in-memory NoSQL СУБД, родившаяся в недрах Mail.ru для их внутренних нужд. Про Tarantool на Кодефесте постоянно рассказывают уже года четыре подряд. И у меня постоянно возникало недоумение: зачем ещё одна СУБД, зачем в памяти, зачем превращать СУБД в application server на Lua? Но в этот раз, кажется, впервые, речь зашла о внутреннем устройстве Тарантула. Во-первых, они очень трепетно относятся к транзакциям. Во-вторых, у них там внутри акторы. Прозвучало волшебное слово, и доклад сразу стал интересным.

У них три толстеньких актора. Первый отвечает за сетевые взаимодействия с клиентами, принимает от них запросы на исполнение транзакций. Второй выполняет транзакции, в него встроена Lua машина. Все транзакции выполняются в единственном потоке, а значит, строго последовательно и изолированно. Третий отвечает за запись журнала транзакций на диск. Здесь транзакции накапливаются, чтобы получился некий batch, который одной операцией сбрасывается на диск. Если запись прошла успешно, только отсюда отсылается клиенту сообщение о том, что транзакция завершилась успешно. Протокол взаимодействия с клиентом — асинхронный. Если при записи журнала произошла ошибка, все транзакции из batch откатываются.

Очень приятно, что ребята натолкнулись на похожие проблемы и пришли к тем же решениям, что и мы в акторном сервере. Так что будем дружить. Как минимум надо будет попробовать прикрутить Тарантула к нашим акторам.

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

Me

Но это был не конец Кодефеста. По традиции Павел Мочалкин из 2ГИС выдал секретный доклад. На этот раз в леопольдовом стиле, про дружбу, и в дорофеевом стиле, что никто не... дурак, и прежде, чем обвинять, остановитесь и подумайте. Ну ок. В утомлённый за два дня мозг такие доклады входят хорошо.

Общение бесценно