Выпуск №4

Java 20 лет, PHP 20 лет 8 июня, PHP 7 timeline, RFC: Context Sensitive Lexer, Symfony 2.7 LTS, GitHub Trending, php7mar — Migration Assistant Report, JoliNotif, florianv/business, Pushman, DevConf: Демонизированный PHP — before it was cool, Хорошие и плохие практики подавления сообщений об ошибках с помощью собачки, PHP Backup Utility, DesignPatternsPHP, WordPress: Sage и Bedrock, uWebDesign, @5minphp

Всем привет!

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

Внезапно, начну этот выпуск со слова Java! Java исполнилось 20 лет — отличный промышленный язык с большой экосистемой.

Ну а что PHP? А то, что 8 июня этого года исполнится тоже 20 лет!
20 лет со дня первой публикации исходников PHP. Тогда это называлось «Personal Home Page Tools» и основной целью Расмуса Лердорфа (автора PHP) было отслеживание просмотров его онлайн-резюме (более подробную историю языка читайте на сайте php.net). Не забудем отпраздновать эту знаменательную дату!

И перейдём к новостям в расписании релизов PHP7: 11 июня выйдет первая альфа, 25 июня — вторая альфа, а финальный релиз ждём 12 ноября.

Что-то уже планируется на будущие версии, например, PHP 7.1. Одно из таких предложений называется «Context Sensitive Lexer». В PHP существует 64 глобально-зарезервированных слова: callable, class, trait, extends, implements, static, abstract, final, public, protected, private, const и т.д., не буду перечислять все. Некоторые из них мы иногда хотели бы использовать в качестве имён методов в наших классах, но не можем. Согласитесь, было бы удобно и логично в некоторых случаях создать методы с именами foreach или list? Или метод include в классе какого нибудь шаблонизатора? Или фабричный метод с именем new? Или константу CONTINUE? Теперь это станет возможным и код будет выглядеть мягким и шелковистым.
Кстати, в 2013 году был похожий RFC от другого автора, но в тот раз он не прошел, требовались слишком координатные изменения. Нынешнее голосование прошло успешно. Ждём в PHP 7.1.

Тем временем вышла LTS версия Symfony 2.7. Эта версия с расширенным сроком поддержки в 36 месяцев (до мая 2019 года). И, сюрприз-сюрприз, Symfony теперь поддерживает PSR-7, о котором я рассказывал в одном из предыдущих выпусков, при этом не ломает совместимость с предыдущими версиями. Поддержка сделана через через специальный PSR HTTP Message Bridge, который конвертирует Symfony Request/Response объекты в PSR-7 совместимые объекты. Более подробно читайте в отдельном блог-посте в блоге Symfony посвящённом PSR-7.

В ноябре этого года планируется выпустить сразу две версии Symfony: 2.8 (которая станет последней в ветке 2.х) и 3.0. Ожидается, что версия 3.0 будет требовать минимум PHP 5.5.

Позволю себе краткий обзор нескольких новых библиотек из GitHub Trending. Всем рекомендую заглядывать туда время от времени для расширения кругозора.

Первая библиотека называется php7mar — Migration Assistant Report. Это консольная утилита, которой можно передать php файл или папку и она проверит код на совместимость с PHP 7, выведет список проблем с номерами строк, предполагаемыми фиксами и ссылками на документацию — очень удобно.

JoliNotif — библиотека, которая позволяет отправить нативное сообщение на ваш рабочий стол.
Где это может пригодиться? В консольных утилитах написанных на PHP. Например, удобно было бы получить уведомление об окончании длительной установки через composer или после отработки тестов. Плагины для Composer и PHPUnit уже в наличии.
Но как это работает? На самом деле в популярных десктопных ОС: Windows, OS X и Linux существуют встроенные системы нотификаций к которым можно обратиться из консоли. Даже в Windows! Естественно, интерфейсы этих систем везде разные, но библиотека JoliNotif знает о них всё и выбирает доступный на данной машине.

Ещё один репозиторий florianv/business — библиотека для расчёта дат и времени рабочих часов. Сначала вы задаёте рабочее расписание: дни недели и конкретные интервалы часов. Дополнительно можно отметить праздничные дни, которые выбиваются из основного расписания. После этого вам доступны удобные методы расчёта:
— within проверяет, является ли конкретная дата и время рабочими
— timeline возвращает все рабочие дни в указанном интервале
— closest покажет ближайший рабочий день
Библиотека свежая, надеюсь будет развиваться и пополнится новыми методами!
В моей практике был проект — калькулятор расчёта стоимости хранения груза. Цена подрядчика зависела от того, рабочий это день или нет. Если бы у меня была такая библиотека под рукой, не пришлось бы писать свой велосипед!

Pushman — WebSocket Event Manager на PHP. Работает поверх другой популярной WebSocket библиотеки на PHP — Ratchet, но предоставляет более высокоуровневый сервис, по сути готовый сервер обмена сообщениями с готовым продуманным json протоколом, каналами и авторизацией. Внутри используется Laravel 5 и ZeroMq. Обратите внимание, что последний требует установки расширения для PHP. Так что не всё так просто.

И, как вы понимаете, такое PHP приложение должно работать на сервере постоянно, а не запускаться и умирать при каждом запросе от клиента. Тема долгоживущих приложений на PHP последние годы набирает популярность, хотя изначально язык под это не затачивался.

DevConf 2015
На грядущей конференции DevConf 2015, которая пройдёт в Москве 19 июня, планируется доклад на эту тему: «Демонизированный PHP — before it was cool». Автор расскажет про свой многолетний опыт использования libevent, phpDaemon и ReactPHP для написания демонов без сторонних инструментов. Лично я обязательно пойду на эту конференцию и попробую взять небольшие интервью в формате пятиминутки на интересные темы. Если хотите поучаствовать, пишите мне podcast@5minphp.ru!
А продолжая тему DevConf на прошлой неделе было опубликовано пару видео записей с прошлогодней конференции про асинхронный PHP и про хорошие и плохие практики подавления сообщений об ошибках с помощью собачки. В прошлом году я не смог посетить конференцию и только что посмотрел видео про собачек — отличное видео, всем рекомендую к просмотру!

Следующая утилита — PHPBU (PHP Backup Utility) — фреймворк для создания, шифрования и загрузки бекапов на различные облачные сервисы. Умеет делать как бекапы файлов, так и различных баз (MySQL, MongoDb, в планах PostgreSQL). Проводит валидацию бекапов по минимальному размеру или сравнением с предыдущим бекапом. Загружает на S3, copy.com, Dropbox или на ваш сервер по rsync и SFTP. Удаляет старые бекапы через Х дней, либо при превышении определённого размера, либо хранит только N последних файлов. Конфигурация заданий описывается в xml. Так что не забываем делать бекапы, в том числе, бекап конфигурации бекапа!

Рекомндую к изучению репозиторий DesignPatternsPHP — хорошие описания паттернов проектирования с примерами на PHP и конкретными реализациями в известных фреймворках. Всего в репозитории описаны 34 паттерна:

  1. AbstractFactory
  2. Builder
  3. FactoryMethod
  4. Multiton
  5. Pool
  6. Prototype
  7. SimpleFactory
  8. Singleton
  9. StaticFactory
  10. Adapter
  11. Bridge
  12. Composite
  13. DataMapper
  14. Decorator
  15. DependencyInjection
  16. Facade
  17. FluentInterface
  18. Proxy
  19. Registry
  20. ChainOfResponsibilities
  21. Command
  22. Iterator
  23. Mediator
  24. Memento
  25. NullObject
  26. Observer
  27. Specification
  28. State
  29. Strategy
  30. TemplateMethod
  31. Visitor
  32. Delegation
  33. ServiceLocator
  34. Repository

Недавно также начался процесс перевода на различные языки (в смысле разговорные языки), принимаются Pull Request’ы. Уже есть один человек взявшийся за перевод на русский. Присоединяйтесь!

Два популярных WordPress-ориентированных проекта Sage и Bedrock выстрелили на GitHub trendig — (оба из организации roots).
Sage — это стартовая тема построенная на HTML5 Boilerplate и Bootstrap с использованием таких современных фронтенд-инструментов как gulp, Bower, Sass и Less, BrowserSync.
Второй проект — Bedrock — это современный стек для разработки под WordPress, больше ориентированный на бекендеров. С помощью Bedrock вы как-бы разрабатываете WordPress сайт, но на самом деле чувствуете себя крутым чуваком использующим Vargrant для окружения разработки, Ansible для конфигурации сервера, composer для обновления самого WordPress и установленных плагинов. Обещают, что они умеют обновлять любые плагины с помощью composer’а, если только в этих плагинах не прописаны какие-то жесткие пути. Про оба эти проекта рекомендую послушать недавний выпуск подкаста Changelog за номером 156 от 22 мая. Но это англоязычный подкаст.

Если же вам хочется узнать побольше про разработку под WordPress на русском языке и с юморком, то рекомендую подписаться на uWebDesign. Помимо горячих новостей из мира IT и WordPress-оринтированных тем, ребята обсуждают современные тренды в веб-дизайне, проводят разбор какого-нибудь сайта и, что мне особо нравится, подкаст выходит не только в формате аудио, но и видео. Каждый выпуск можно прослушать и посмотреть, где будут наглядно показаны обсуждаемые темы: дизайны сайтов, WordPress плагины и прочее.

Ну а вам спасибо, что слушаете подкаст «Пятиминутка PHP». У подкаста появился twitter аккаунт @5minphp, подписывайтесь! Буду публиковать ссылки на новые выпуски. А может и просто ссылки на горячие темы из мира PHP.