В Харькове прошел PHP Meetup

опубликовано 2017-07-10 08:04:33

17 мая состоялся MobiDev PHP meetup о том, как добавить “enterprise” подходы к классическим PHP проектам. Участники обсудили методы написания аккуратного кода, его тестирования и автоматизации. С докладами выступили четыре эксперта MobiDev: Евгений Кузьминов, Ruby Team Leader, Алексей Васильченко, Web Group Leader and Project Manager, Анатолий Легкий, Web Developer и Олег Сичевский, Web Technical Lead.

Евгений Кузьминов говорил о “Railway-ориентированном программировании PHP на практике”

Он отличился как самой темой, так и подачей — Женя был единственным, кто выступал на украинском языке.

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

Это реализуется на основе абстракции двух путей выполнения программы: “успешном” (по умолчанию шаги выполняются друг за другом, передавая далее свой результат) и “ошибочном” (при возникновении ошибки в каком-либо шаге цепочки мы пропускаем все остальные шаги "успешного" пути).

Процесс перехода потока исполнения цепочки операций аналогичен переключению стрелок на железной дороге. Отсюда и название подхода — Railway oriented programming.

Также рассматривались примеры инкапсуляции Railway цепочки бизнес логики в изолированные сущности операции для улучшения реюзабельности и тестирования кода в приложении.

Подробное объяснение и образцы кода вы можете увидеть в видео доклада Евгения.

Второй спикер Алексей Васильченко представил доклад на тему “PHP и время. Храним и используем данные привязанные ко времени”

Алексей говорил о проблеме, на которую не всегда обращают внимание - привязка данных ко времени.

Люди привыкли ориентироваться на астрономические циклы, которые не совпадают с секундами. Например, чтобы синхронизировать даты с временами года Цезарь внедрил Юлианский календарь. Но, несмотря на все рассчеты они не смогли обнаружить отклонение во времени на 11 с небольшим минут. Пофиксили этот баг только в 1582 году, когда приняли григорианский календарь и ввели високосный год.

Вращение Земли замедляется, а на астрономический год влияют другие тела Солнечной Системы. Иногда по астрономическим наблюдениям нужно добавлять 1 секунду координации. Это хоть и косвенно, но затрагивает разработчиков.

Само понятие секунды тоже относительно, но люди не могут пользоваться атомным временем.

Абсолютно точное время есть на NTP-серверах, которые синхронизируются с атомными часами. Эти сервера получают информацию о введении секунды коррекции, а к нам время подтягивается по NTP-протоколу. Без синхронизации по NTP наше время в проектах будет хромать.

Затем рассмотрели список таймзон и средства их получения в php, а также общие подходы к хранению даты и времени. Алексей предпочитает и рекомендует использовать Unix Time Stamp, т.к. он понятен разработчикам на всех технологиях.

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

Анатолий Легкий обратил внимание на важность проведения тестирования параллельно с написанием кода


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

Главные рекомендации:

  • начинать писать тесты с любого этапа развития проекта, не обязательно только с начала.
  • закладывать в эстимейт на тестирование +25-50% от всего времени задачи.
  • покрывайте тестами самые важные и ломкие моменты, начинайте тестирование с самых слабых звеньев.

Детальнее о тестировании, плюсах и минусах вы можете узнать, посмотрев видео выступления.

После обсуждения третьего доклада во время небольшого перерыва, к выступлению перешел Олег Сичевский с темой “Continuous integration: готовим и подаём к чаю”


Для аудитории понятие Continuous Integration является знакомым, но достаточно новым. Интересным и актуальным вопросом стало применение на проектах системы контроля версий.

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

Рассматривая CI как инструмент, Олег обратился к Трем законам робототехники для инструментов, сформулированным Айзеком Азимовым в своём "Эссе о роботах".

  1. Инструмент должен быть безопасным для использования. В нашем контексте, CI может использовать скрипты с правами администратора. Это может навредить, если код написан неправильно, т.к. он может удалить все данные с сервера. Восстановление займет время, что означает потерю денег для клиента.
  2. Инструмент должен выполнять свои функции, при условии, что они не противоречат Первому Закону. Это означает, что мы рассматриваем основные функции и пишем для деплоя и тестирования.
  3. Инструмент должен оставаться в целости и сохранности.

Тут вступает в действие человеческий фактор. Допустим, есть сервер, выделенный под CI и ваш коллега предлагает залить утилиту на этот сервер. Ключевая мысль: не стоит заливать на сервер ничего вручную, этим должен заниматься CI.

Олег выделил основные проблемы CI. Это сервер контроля версий GitLab, сервер с asible ролями для ручного сбора и тестирования, выделенный сервер под CI, затраты времени на поддержку и человеческий фактор.

Преимущества: быстрое выявление проблем интеграции, постоянное наличие последней версии сборки и автоматическая прогонка тестов.

Схема работы CI:

Разработчик делает пуш в репозиторий. Гитлаб запускает у себя Git hook пост-ресив, который посылает запрос на запуск билда на админ сервер который в свою очередь прогоняет сборку и тесты.

Посмотрев видео доклада Олега Сичевского, вы узнаете о принципах интеграции, о том, как можно построить архитектуру на админ сервере и детальный разбор интересующих вопросов.

Такой php-митап проводится уже второй раз и постепенно становится одной из традиций MobiDev.

С презентациями и видео докладов вы можете ознакомиться на сайте митапа.

Также, предоставляем фотоотчет.

Ждем вас на следующей встрече!

Другие новости: