Мои впечатления от конференции ADD-3

Конец этой недели, 11 и 12 мая, я провел в Москве на конференции Application Developer Days 3 (ADD-3). Поэтому решил написать отчет сразу по горячим следам. Я побывал на этой конференции впервые, хотя порывался съездить и в прошлом году. В этот раз я был с докладом на тему облачной разработки, но об этом позже.

Лететь из Киева мне пришлось в одиночку, потому что никто из знакомых туда не собирался. Это немного расстроило. Возможно, причиной стала высокая стоимость участия и отсутствие дефицита в мероприятиях в самой Украине, к чему мы сами сильно прикладываем руки. 🙂 Так или иначе, проснувшись в 4:40 утра, я отправился в дальний путь. Благодаря разнице во времени, даже не смотря на ранний рейс, на открытие и первый доклад я не успел. По дороге позавидовал москвичам за наличие аэроэкспресса из аэропорта, потолкался как пингвин в метро, очередной раз порадовался тому, что живу в Киеве. 🙂

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

Стоит отметить очень высокий уровень места проведения – Международный Информационно-Выставочный Центр “ИнфоПространство”. Все было отлично – качественные микрофоны, звук, мониторы для показа презентации, трибуны для докладчиков, удобные стулья. Отдельно порадовали вкусный обед и кофе паузы. Было вдоволь всего, а сервис не вызывал нареканий.

Я еще отметил для себя удивительную вещь. Атмосфера и участники очень сильно отличались от украинских мероприятий. У нас обычно народ жалуется на трудную жизнь в аутсорс-проекте, невозможность внедрения новых технологий, редко когда люди хвастают своими навыками сразу в нескольких языках программирования. На ADD-3 я тут и там встречал людей, которые знают Python, C++ (обязательно), Java и периодически играются с Erlang. На конференции практически не освещались подходы к разработке, все доклады были техническими, некоторые на чересчур узкие темы. Маловато было выступлений на тему архитектурных решений в распределенных и высоконагруженных системах, слабовато были представлены современные NoSQL решения и разработка клиентских приложений. Это еще одно отличие от Украины – у нас эти темы очень популярны.

Теперь о докладах, на которых мне удалось побывать. Начал я с доклада Дмитрия Лазаренко “Облачные платформы Java: как они устроены и чем отличаются”. Сразу объединю свои впечатления с посещением его второго доклада “Облачная платформа Jelastic c точки зрения конечных пользователей: проблемно-ориентированный подход”. Для меня оба доклада были очень похожими и мало что дали из новой полезной информации. Нам постоянно намекали или говорили прямо как крут Jelastic, хотя без масштабирования уровня данных, возможности менять некоторые характеристики без рестарта и некоторых других возможностей Jelastic может сгодиться разве что небольшим проектам. Хотелось бы больше деталей о том, как это реализовано внутри, но докладчик постоянно ссылался на отсутствие у него подобных знаний. А некоторые вещи выглядели на презентации как “чудо” в Java мире. Я был бы рад узнать, как они победили некоторые насущные для Java проектов проблемы, чтобы применить это на практике.

Следующим в моем списке был доклад Константина Данилова Библиотеки и фреймворки для построения клаудов. Краткий вывод – слишком сложно! Рассказ был о низкоуровневых инструментах и приемах, в то время как половина аудитории вообще не понимала для чего это все нужно. В итоге, слышал много отзывов, что было мало что понятно.

Дальше я отправился на доклад Артура Орлова “DVCS как конвейер IT-производства”. Доклад был очень живой и мне понравился. Докладчик представил несколько моделей использования VCS в проектах разного типа и показал, как распределенные системы Git и Mercurial помогают справиться с проблемами легче и эффективнее. Подискуссировали на тему полезности команды ‘rebase’ и несет ли она потенциальный вред, а также можно ли работать без роли branch maintainer и кто тогда несет ответственность.

Следующим был Александр Долгарев с докладом “Сравнение AMQP и ZeroMQ”. В качестве реализации протокола AMQP рассматривался RabbitMQ. С ним я знаком и мы давно запланировали переход на него с текущего JMS провайдера, как только сделаем надежный механизм поиска и перепосылки потерянных сообщений. ZeroMQ показался очень интересным. Это “socket на стероидах”. Многое надо писать самому руками, но очень быстрое и гибкое взаимодействие между отправителем и получателем следует из самой технологии.

Дальше настала моя очередь поделиться знаниями об облачной разработке на AWS в моем докладе “Разработка распределенных приложений на AWS”. Я был очень удивлен такому небольшому количеству участников в зале. Потом узнал, что параллельно выступал человек-легенда в мире разработчиков России – Дмитрий Завалишин. Он, к слову, получил первый приз за лучший доклад по голосованию участников. Надеюсь, я не подвел тех, кто выбрал мой доклад. Еще минут 20 после доклада я отвечал на вопросы участников и никто не разбегался на кофе. Пересказывать доклад смысла нет. Вот презентация, а скоро сделаю из нее слайдкаст:

С последнего доклада я ушел погулять по городу и заселиться в отель. Усталость и ранний утренний подъем давали о себе знать, поэтому на следующий день я решил выспаться и не пойти на первый доклад. Тем более, что Андрей Бреслав будет у нас в гостях 19 мая на JEEConf, а остальные доклады мне не особо были интересны.

Первым докладом во второй день конференции я посетил “Картография в Windows Phone” от Александра Сороколетова и Алексея Страха. Ребята приехали из Минска и я их хорошо знаю. Доклад был очень легкий и приятный. Я для себя узнал в каком формате хранятся карты у современных провайдеров, а также как устроены картографические сервисы. Оказалось, что написать свое приложение с картами внутри очень-очень просто, по крайней мере на базе Windows Phone 7. 🙂

После обеда я реально разрывался. На всех трех сценах были интересные доклады. Я все таки выбрал доклад Романа Елизарова “Пишем самый быстрый хэш для кэширования данных”. Доклад немного разочаровал – я ожидал больше стратегий по кэшированию, выявлению мест для потенциального применения кэшей и, возможно, существующих решений. А весь доклад свелся к тому, что для реализации быстрых алгоритмов надо читать Кнута (совет от КЭПа), а еще при определенных обстоятельствах (когда ключ является частью самого значения) можно сделать свою реализацию классической мапы с прямой адресацией. Да, она будет давать очень быстрый get, но часто очень медленный put. Вопрос в том, какому количеству участников реально нужно тратить время на подобную реализацию. Ведь у 99.9% гораздо больше времени уходит на вычитывание самого объекта из памяти, чем на поиск его в кэше. Есть естественно критические приложения, где это очень важно, но их мало.

Дальше я снова разрывался, но выбрал доклад Вадима Цесько “Потоковая обработка данных с помощью модели акторов (Actor Model)”. Я уже не раз присматривался к этой модели и ее реализации – Akka. Очень хотелось посмотреть, как люди в большой компании применяют ее на практике. Первая половина доклада все больше подталкивала меня к внедрению, но вторая половина вернула в реальный мир. Обработка ошибок, ненадежная доставка сообщений, возможные падения по памяти либо блокировки из-за ограниченного размера почтовых ящиков, неявные дедлоки и т.д. Еще сильно тормозящим фактором является применение именно в Java. Там далеко не все так красиво как в Scala, а ради этого переводить проект на сравнительно новый язык безумно. Но доклад был очень интересным, с множеством примеров и детальным описанием модели.

Потом я отправился на доклад Дмитрия Грошева “Обработка ошибок — общие соображения и грязные подробности”. По-моему докладчик перемудрил с избавлением от исключений – система получилась очень сложная и не работает в общем случае. А так в очередной раз потерли тему нужны ли исключения, вред от возвращения null, панацея ли unchecked исключения.

Я возлагал большие надежды на доклад Александра Чистякова “Практический опыт использования некоторых современных решений репликации MySQL”. Тема мне особенно интересна, потому что без репликации в облачной разработке никуда, а мы постоянно выдумываем свои костыли для MySql. Да и база у нас измеряется терабайтами. Доклад был очень живым и интересным. Видно, что докладчику очень наболело и он делился своими попытками сделать адекватное решение. Я записал себе несколько новых идей. Жаль, что заключением доклада было “адекватного способа делать надежную репликацию нет”. Так доклад заканчивать нельзя. Даже мы придумали некоторые решения, которые вроде как работают. 🙂

Последим докладом я выбрал “Как готовить MySQL” от Андрея Аксенова. Доклад будет очень полезен тем, кто начинает работать с MySql или на собеседовании не может толком объяснить как настроить InnoDB. Небольшая, но очень важная тема, четкий детальный анализ с примерами из жизни, живое выступление. Обязательно рекомендую пересмотреть доклад на видео, а также проверить все настройки в своем проекте. 😉

Это был последний доклад на конференции. Дальше закрытие, розыгрыш призов и слова благодарности всем-всем-всем. Я не рассказал о соревнованиях в программировании роботов, но деталей не знаю – зашел только один раз поглазеть.

В целом, конференция получилась интересная. Не все темы для меня были актуальны, но тут на всех не угодишь. Ждите видео и обязательно уделите время на просмотр выбранных докладов. Спасибо всем, кто пришел на мой доклад, не смотря на интересные выступления на других сценах. Очень рад, что получил опыт “погружения” в такую атмосферу и общения с новым интересными людьми. Приглашаем разработчиков из России к нам в гости на XP Days Ukraine и JEEConf!

Обсуждение (4)

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

Да нет, какие обиды, вы что — мне интересно, что люди думают по поводу доклада 🙂
Проблема в том, что подобный “валидационный контекст” должен либо быть неявным и изменяемым, либо должен передаваться из функции в функцию явно (что удобно только при использовании монад). Если я всё правильно понимаю, другого способа сделать такой контекст в сочетании с referential transparent (не знаю, как адекватно перевести на русский) валидаторами нет. Поэтому можно построить конструкцию, подобную описанной мной, и получить похожее поведение без каких либо нелокальных изменений состояния (как происходит при изменении внешнего контекста).

Не обижайтесь, возможно я просто не проникся так сильно идеей. В вашем примере, где происходит валидация данных от пользователя, вам стоило лучше воспользоваться шаблоном валидатора. В этом случае каждый валидатор записывал бы свою ошибку в валидационный контекст и в случае проблем вы бы просто выбросили исключение на нужном шаге или пропустили бы важные действия с данными. Так работает большая часть MVC фреймворков, чтобы избегать множества if-else.

Само же решение вынуждает принимать решение сразу на следующем уровне как реагировать на проблемы в предыдущем уровне. Это не всегда возможно и вам приводили пример с ошибками сети и т.д.

Доброго дня. Можно чуть подробнее про то, что не понравилось в моём докладе (об ошибках)? Мне очень интересен негативный фидбек, позитивный обычно высказывают проще 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *