ZFCONF Ukraine 2010 & Mageconf: Фотоотчет и личные впечатления
Вечер. 26 ноября 2010. Москва. Все идут с работы домой, а мы садимся на поезд до Киева. А что же в Киеве? – Мы едем на ZFConf, конференции, посвящённой Zend Framework!
Прошлый Zend Framework Conf в Санкт-Петербурге мне ооочень понравился. Множество интересных докладов, общение с умными людьми, идеи, которые витают в воздухе и всеобщий позитивный настрой прямо таки вдохновляет на подвиги. В это раз я ожидал что-то подобного… и не ошибся 🙂
Утром мы приехали на вокзал, зашли в Киевское метро. Порадовали жетончики, воспоминания из детства. Внизу очень удивило, что прямо на стену тоннеля транслируется видео, а когда поезд приезжает – выводится сообщение. Прямо хай-тек. Доехали до метро Нивки, ну а там и Киев Экспо Плаза недалеко.
Вошли в павильон. Сказать что он был большой – ничего не сказать. Огромнейший павильон, а в углу тусит кучка айтишников. Очень здорово, что сразу перед конференцией был кофе-брейк. Мы после дороги смогли попить кофейку и немного придти в себя. Главным спонсором меорприятия была Magento, поэтому не удивительно, что они раздавали чашки у себя на стенде, которые надо сказать пользовались успехом. Мне тоже удалось отхватить одну 🙂
Программа мероприятия была насыщенная. Кто помнит, я постил её несколько дней назад. Было три потока: Zend Framework, PHP, Magento. Потом, за пару дней к ним добавился еще один поток – MIX.
После кофе-брейка все собрались в большом зале, где Александр Махомет, Степан Танасийчук и Евгений Македон открыли мероприятие. Я честно говоря не ожидал, что соберется так много народа. Обернувшись, я с удивлением увидел, что многим даже мест не хватило. Единственное, что расстроило, так это то, что было плохо видно нижнюю часть экрана. После открытия мы направились в зал потока “PHP”.
Первый доклад, на который я пошел был ” 10 000 ведер или в погоне за Ключем от всех дверей” Виталия Коротуна. Повествование было оформлено в виде сказки, на слайдах то и дело мелькали персонажи из Буратино и Пиннокио. Сначала было очень необычно, я вообще не мог понять, при чем тут детская сказка, но постепенно начал чувствовать паралллели, которые проводит Виталий. Получается, мы, PHP программисты, каждый день как папа Карло кодим такие вот “дрова”, которые в воде не тонут 🙂 Это печально. Виталий говорил, что простота языка развращает программистов, что в отсутствии единого стиля и широкого простора для творчества появляется множество диалектов PHP. Каждый понимает язык по-своему, непременно пишет свою CMS’ку. Кстати, надавно имел небольшой опыт общения с одной такой CMSкой на PHP, это был тихий ужас. Не стану раскрывать имен, дабы авторам не было стыдно.
Дальше Виталий перечислил “Вражин”, а именно причин, которые мешают “идеальным программистам писать идеальный код”:
- Отсутствие времени на инновации и развитие. Приходится сделать “чтобы работало и побыстрее”, а не исследовать проблему со всех сторон. Ведь на это у заказчика нет времени. Не нужно нам тестирование, профилирование и эта ваша документация. Главное – чтобы работало. А то что потом даже маленькую фишечку будет настолько стожно добавить, что придется переписывать тонны кода – так это никого не волнует!
- Высокая текучесть кадров. Человек приходит, учится и уходит. Или же просто устает от рутинного исправления багов. Или просто “перегорает” из-за постоянных аврвлов, что тоже плохо. А по мне, так многие из таких людей просто слабые. Мне вот нравится решать нестандартные задачки, прибивать багов. Хотя да, иногда это надоедает и я морально устаю. Все циклично.
- Нежелание компаний концентрировать большое количество высококлассных специалистов в одном месте. Цитирую Виталия: “Много умных людей иметь опасно – могут что-то придумать!” 🙂
Потом Виталий затронул тему рефакторинга. Получается, что программист пишет код, находит баги, рефакторит – плодит еще баги, исправляет, плодит баги … и т.д… А почему, ответ прост – отсутствие тестирования. Грамотные автотесты сразу снимут львиную долю багов. Но тесты писать либо лень, – либо на это нет времени. Вот почему сейчас TDD (Test Driven Development – разработка через тестирование) набирает обороты. На первом этапе – куча проблем, зато потом писать будте приятно, удобно и главное – будет в разы меньше багов. В этом плане мне кажется Rails на грамотном пути, там создана очень удобная инфраструктура для создания тестов. Было бы здорово, если бы в Zend Framework теств создавались бы вместе с приложением (может быть так оно и есть, дайте знать если что в комментах).
Очень порадовала такая фраза “Если делать рефакторинг конечного количества строк кода нескончаемое число раз, то в итоге, на пенсии, вы обнаружите, что всё в этом мире суета” 🙂
После темы рефакторинга Виталий рассказывал о велосипедах, точнее о фреймворках. Сейчас те разные слили написания приложений начали сливаться в большие потоки, ими стали софременные фреймворки – Zend Framework, Syfony и т.д. Но между собой они НЕСОВМЕСТИМЫ. Нельзя написать бандл для Symfony и использовать его в ZF. Тут надо сказать, что пару месяцев назад я слышал о каком-то проекте, где авторы хотели сделать такую штуку. Пока не знаю, чем дело закончилось.
Создание фреймворков производится для универсиализации и стандартизации а в результатах получилось 8 разных фреймворков. Расширение одного – не совместимо с другими. Где же ключ от всех дверей? – Его пока нет, но надо искать, иначе в мире PHP настенет полная анархия. Я думаю, что в будущем буду тразработаны стандарты, и мне кажется что именно ZF коммюнити должно сделать это.
После доклада я пошел послушать доклад “Встречайте Zend Framework 2.0” Александра Веремьева. Там он рассказывал о том, что же нас ждет во второй версии. Все пытались узнать у него сроки выхода, но он так и не смог прояснить это.
Дальше в секции вопросов и ответов я спросил его, планируется ли интеграция ZF со Sphinx, также как это сделано с Lucene.Александр сказал, что пока всеобъемлющей интеграции нет, но можно смело использовать класс-клиент для Sphinx. Напоследок мне удалось сфотографироваться с ним. После этого мы ненадолго зашли в зал Magento, где Евгений Ивашин читал доклад “1000 миллисекунд из жизни Magento”, но он быстро закончился.
Следующей моей целью был доклад “Опыт построения High Load интернет-магазинов” Данила Кочерка. Кстати, это опечатка или его действительно зовут Данил а не Даниил?
Тема доклада была многообещающей, но вот содержание меня расстроило. Во-первых потому, что оно представляло собой тестирование Magento и результаты тестов. Никакого опыта в нём, к сожалению не было. Во-вторых потому, что результаты тестов были не очень. Я не помню цифр, но на очень мощном железе (8 процессорных ядер) производительность была очень низкая (для такого железа). Естественно посыпалась куча вопросов – почему так медленно? – разве это Highload? Сложилось такое впечатление, что все винили Данила в том что тормозит Magento. А он как бы особо тут не при чем. Самое интересное что Enterprise Edition Magento показывает лучшие результаты чем обычная, но оно и логично с другой стороны. Успел записать вероятности посещения пользователем определённой страницы интернет-магазина.
- Home – 61
- Category – 71
- Account – 12
- Static – 5,1
- Checkout – 1
- Cart – 1
Доклад оказался короткий, и после него мы пошли на “Эволюция ZF: архитектура, шаблоны, рефакторинг” Виктора Фараздаги.
На этот доклад попали на самый конец, и судя по всему многое пропустили. Так что будем длать, когда выложат видео и презентацию. Потом пошли на доклад из секции Magento “Все дороги ведут в Checkout”, где рассматривались вопросы построеня биллинг системы Magento. Скажу, этот доклад был одним из тех, которые были мне важны по работе.
Он открыл мне глаза на многие проблемы, о которых я раньше не подозревал. В частности, что при продаже товаров в онлайне и доставки их в другую страну (даже если это виртуальные товары) надо учитывать налогооблажения по стране billing-адресу покупателя, а налогов этих – тьма тьмущая. Много думал.
Также докладчик показал интересный прием по Rounding Deltas, исправлению ошибок округления. Смысл в том, что в цикле накапливается ошибка, и если она больше допустимой величины, то она отнимается(или прибавляется) к итоговому числу.
Первая часть конференции кончилась и мы пошли на обед. Тут оказалось, что обедать особо негде, и мы пошли по окрестностям искать кафешки. Жаль, что не было списка близлещайщих кафешек, как на ZFConf в Санкт-Петербурге. Но, как мне позже пояснил Александр Махомет, их рядом и не было 🙁 Волею случая, мы набрели на одну и даже неплохо покушали там. Правда минут на 40 опоздали на доклады. Пройдясь по ним мы заглянули на “Преимущества компонент-ориентированной архитектуры для написания Magento Extensions”, где Виталий Коротун продолжал свой ктренний доклад. Смысл был в том, что надо писать фреймворко-независимые компоненты, которые будут работать и на Zend Framework, и на Symfony, и на Magento. Это и есть – ключ от всех дверей! Но сама Magento не может взять на себя такую огромную ответственность, поэтому все ожидания (как мне кажется) направлены в сторону ZF комьюнити, т.е. нас 🙂
Затем, отведав чайку еще разок, мы двинулись в сторону доклада “Doctrine 2” Валерия Рабиевского, где он рассказывал о новых фишках доктрины.
Большая их часть основывается на Reflection API, и позволяет декларативно (в стиле Rails) описывать ассоциации и другие свойства моделей. Мне кажется – это несомненное движение вперед, и ZF 2 + Doctrine 2 еще свернут горы. Ну а затем мы пришли на, пожалуй, самый неординарный доклад “NoSQL и Zend Framework” Никиты Грошина и Ростислава Михайлива.
Что же в нем было неординарного? – Много. Прежде всего в нём почти ни слова не было о Zend Framework. В начале вышел Ростислав, и начал рассказывать про NoSQL, но получилось это у него не очень. Сразу видно, программист хороший, но докладчик, посредственный. Каждый слайд он комментировал словами “дешево, удобно” и ничего не говорил по теме слайда. Вообще его лексикон состоял преимущественно из слов: “ни хрена, до хера, говно, ну и хрен с ним, дешево, удобно”. Я вообще ничего понят не смог, т.к. слайды он листал очень быстро, не комментируя их. Потом он ушел со сцены, и я подумал, что следующий товарищ скажет что-то более-менее адекватное, но стало еще хуже. Сначала Никита показал слайд где он бухает. “Да, мы все в Геометрии такие”. Хм… Потом он крикнул “СИСЬКИ!”, после чего сказал, что из-за сисек у них очень большие проблемы 🙂
Домохозяйки загружают свои фотки с сиськами и перегружают их систему. Но нас спасет NoSQL. Дальше Никита листал слайды со словами, “Хм… ОК… ну этим у нас занимаются админы”, “Хм… ОК… ну это я вообще на знаю что такое”. Зачем же ты тогда на сцену вышел, если не знаешь, то, что у тебя в слайде написано? Некоторую ясность внес их коллега в очках. К сожалению не смог запомнить его имя.
Он рассказал про опыт падения MongoDB и ответил на вопросы из зала.Основные моменты, которые я успел записать.
- NO JOIN -> NO SQL, т.к. мы не можем сделать JOIN к другому серверу, то не будет масштабируемости. Ну только разве через репликацию. Про NDBCluster пока говорить не буду, т.к. не щупал его. NOSQL коллекции же можно спокойно шардить.
- В NOSQL базах нет проблемы с автоинкрементными ключами. Уникальность ключей в пределах кластера серверов БД гарантируется тем, что в состав ключа входит MAC-адрес генерируешего его сервера.
- В новом MongoDB есть автошардинг. Вот это клёво!
- NOSQL базы нужно разогревать, чтобы индексы вышли в память.
- Если индекс > объем памяти, БД нужно шардить на несколько хостов.
- CouchDB простой, с GUIвиной, но медленный и на продакшене его использовать будет плохо.
- MongoDB, сцука, быстрый. Пишет в память и операции в основном делает там же, поэтому и быстрый. При этом асинхронно сбрасывает дампы на диск.
- В MongoDB нельзя сделать бекап(?) Есть какой-то механизм снапшотов по таймауту.
Доклады закончились и мы пошли на afterparty, которое было в ресторане выставочного центра. Эх жаль, мы его днем не нашли. Хотя, он всё равно был закрыт 🙂
А вот и наше комьюнити!
Хочу сказать большое спасибо Александру Махомету, Степану Танасийчуку, Евгению Македону и Magento за организацию такого классного мероприятия! Другие фотки вы можете посмотреть на страничке Жени Македона.
Спасибо за позитивный отчет ;).
Видео сегодня будет. Уже заканчиваем.
Классно! Жду с нетерпением!