PHP Frameworks Day 2016 — назад к back-end

С посещением разных конференций у меня то густо, то пусто. Сейчас идет период «густо» — IT Weekend (июнь 2016), Аcross Сultures (август 2016) и PHP FD в сентябре. А вот до этого больше года никуда не ходил. Не то чтоб не было куда, а как-то не складывалось — то занят, то лень (ну как обычно бывает).

Frameworks Days проводятся уже не первый год и в моем сознании заслужили большой лимит доверия как IT-шные мероприятия. Потому я решил снова сходить. И это при том, что уже несколько лет мой профиль front-end (да-да, тот самый «разработчик переднего конца») и с back-end’ом меня связывает только один проект на первом Yii да еще парочка поделок для личного пользования. Это за последние год-два.

В субботу (3 сентября) конгресс-холл «Космополит» радушно принял ~450 посетителей, в том числе и меня с женой. Регистрация была мультипоточно, но в один стол. Раздатка включала в себя блокнотик, карандаш, спам от спонсоров, форму обратной связи, парочку наклеек и жвачку (внезапно). Классический бейджик был заменен на мини-блокнотик с двумя листиками и программой конференции.

Открытие мероприятие прошло довольно необычно. Так как конференция была в два потока, то я ожидал, что будет и два зала. Но он был один — большой. Вступительное слово от ведущей было коротким, но потом дали слово спонсорам (не припомню, чтоб раньше так делали). По завершению открытия из одного большого зала таки сделали два — раздвижная стена творит чудеса. При чем именно стена, а не ширма. Звукоизоляция была отличная — с соседнего помещения ничего не было слышно.

Получилось так, что интересные нам доклады были в потоке «Track A» и не пришлось перебегать в перерывах.

Первым был доклад от Marco Pivetta на тему «Extremely Defensive PHP». Мое личное мнение — это был лучший доклад и по качеству материала, и по его подаче. Жаль, что такой доклад был в самом начале. Времени на «раскачку» не было.

Термин «Defensive Coding» до этого был мне не знаком. А вот понятие «защита от дурака» — очень даже. Марко же использовал более распространенный вариант — «пока-ёкэ» («защита от ошибки» — ポカヨケ). А далее шел большой-большой список тезисов с краткими примерами:

  • Code is not reusable, abstractions are
  • PSR-7 рулит
  • No setters — объекты не говорят «стань таким», они говорят «сделай это»
  • No uninitialized properties
  • No optional dependencies
  • Avoid unnecessary public methods (привет, «Фасад»)
  • Avoid logic switch parameters. Флаги в параметрах — это плохо
  • Private properties by default
  • No mixed parameter types (beberlei/assert)
  • No mixed return types
  • Avoid fluent interfaces
  • Final classes by default
  • No traits
  • Ensure deep cloning — возможно, стоит даже отказаться от клонирования
  • От сериализации тоже можно отказаться
  • Unit testing — тестировать все, до чего руки дотянутся и во всех вариантах

Многие из этих советов можно (и нужно) применять во многих языках, а не только в PHP.

Что я знаю о бриллиантах профилировании и отладке? Когда-то знал, что есть XDebug. Еще знал, что var_dump тоже работает вполне неплохо. Из доклада «Профилирование в PHP» Дмитрия Науменко я узнал чуть больше. Для начала надо определить что такое «работает быстро» и «зачем оптимизировать». То есть, четко поставить цели.

Какой же инструментарий доступен разработчику — XDebug, XHprof, BlackFire (был как форк XHprof). Из доклада я сделал вывод, что первый медленный и вообще не профилировщик, второй норм, третий отличный, но не совсем бесплатный (а точнее, условно-бесплатный).

Еще в докладе мне понравилась одна идея — тестирование метрик. Проще говоря, «такой-то метод должен выполняться не дольше, чем N мс». Подобная мысль меня посетила, когда пришлось оптимизировать функцию для слияния двух коллекций Ember-объектов (#). Однако, на тот момент это осталось лишь идеей .

Последний тезис, который запомнился, гласил «не можешь оптимизировать — кешируй!».

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

Третий доклад был от Александра Махомета (одного из организаторов Frameworks Days) о мониторинге состояния сайта. Малое количество ошибок и высокое быстродействие (см. доклад №2) были выделены как цели. Что может помочь узнать о наличии ошибок? Логи. Много хороших логов (PSR-3). Автор представил большой список ПО для их обработки и уведомлению пользователя о проблемах:

  • Logstash, Elastic Search, Kibana
  • SaaS: Graylog, Loggly, Papertrail
  • Graphite
  • Grafana, Zipkin, New Relic
  • Zabbix, Nagios, Icinga

Многое было показано на живых примерах, что я видел не так часто.

Обеденный перерыв длился аж полтора часа, что позволило не спеша покушать (даже отстояв двухпоточную очередь). Кормили отлично. Реально приятно удивили.

Аббревиатура DCI до этой субботы у меня ассоциировалась только с игрой «Magic: The Gathering» (#). Игорь Карпенко внес новое значение — Data, Context, Interaction. Из того что я понял, DCI — это когда одни и те же объекты могут выполнять разные роли в зависимости от контекста. Соответственно, некоторое поведение им «навязывается» (те самые «роли»). В PHP на данный момент от DCI есть traits, множественная диспетчеризация (шаблон «Посетитель»), DI, AOP, ROP. В качестве «живого» примера DCI в PHP можно посмотреть на fatty. Еще мне запомнилось, что DCI — это не декоратор, не медиатор и не команда. В DCI происходит введение (inject) методов в объект.

Под конец доклада автор выделил одну мысль, которая применима не только к DCI, но и ко многих другим вещам. Далеко не факт, что DCI вам нужен или понадобится — это зависит от задачи.

Обычно, иностранные доклады у меня вызывают повышенный интерес. Так получилось и на этот раз. Доклад двух разработчиков из Bla Bla Car не стал исключением. Во французском английском есть свой «шарм» — мне его было труднее понять, чем английский от немцев или японцев. Весь доклад мне был похож на пресс-релиз с небольшим техническим уклоном (эволюция «one-mega-script.php» → Symfony 2). Каких-то интересных вещей я для себя не почерпнул. Хотя нет. Узнал, что есть такой сервис Bla Bla Car.

Последний доклад был от Алексея Петрова про высоконагруженные приложения на PHP. Чем нагрузка на «чтение» отличается от нагрузки на «запись»? При «чтении» (если медленно), то можно включить кеширование. Если появились глюки, то кеширование можно выключить :). Обработка нагрузки на «запись» более сложная задача. Решение зависит от размера загрузки. Алексей на просто примере с метеостанциями показал, в чем разница между 100 req/s, 1000 req/s, 10000 req/s и т.д. При чем, показанные подходы отличались как стеком технологий, так и ценой (порой очень значительно). Подача материала была в очень легкой (даже вольной) и понятной форме. Как раз то, что надо для завершения такого насыщенного дня.

Из этого доклада и доклада Александра Махомета узнал новый для себя термин — перцентиль.

Как обычно, замечаю за собой, что ближе к вечеру заметок становится все меньше. С утра еще по несколько страниц от руки, а после обеда — от силы по половине страницы.

Небольшая панельная дискуссия была со всеми участниками конференции сразу после всех докладов. Самой обсуждаемой темой стали микросервисы. А вот вопрос из зала «почему так мало девушек-разработчиков?» меня откровенно раздраконил. Любая специальность требует наличие у соискателя проф. навыков, а не тех или других первичных половых признаков. Пора бы уже и запомнить.

Выходной день 3 сентября получился очень насыщенным и познавательным. Уставший (но довольный) еду домой. Снова говорю орг. комитету «Спасибо!» за мероприятие.

, ,

4 комментария
  1. Stepan Tanasiychuk сказал(а):

    Дякуєм за такий детальний звіт! Будемо завжди раді бачити на наступних конференціях 😉

  2. Frameworks Days сказал(а):

    Благодарим за такой подробный отчет о нашей конференции, самим было очень интересно читать 🙂
    Подскажите, пожалуйста, как в вами можно связаться?

  3. vvscode сказал(а):

    А traits чем не угодили?

  4. KronuS сказал(а):

    vvscode, так Марко считает. Мнение автора заметки может отличаться 🙂

Оставить комментарий

Top ↑ | Main page | Back