Continuous Integration with Circle CI v2 with Node.js and PHP examples
Second version of Circle CI configuration changed dramatically.
It introduced workflows, and they are used in pipes meaning.
Every workflow can include multiple steps.
Node.js example:
Непрерывная интеграция с использованием Travis CI и Behat
Эта заметка начинает цикл заметок о процессах разработки и деплоя приложений. Для начала покажу, как с помощью сервиса Travis CI можно относительно легко реализовать процесс проверки качества и работоспособности кода.
Практику постоянной проверки сборки на наличие дефектов называют Непрерывная интеграция (Continuous Integration).
Вопрос написания тестов в этой статье не будет рассмотрен - это тема другой статьи. Сделано предположение, что у вас уже настроен Behat, и тесты уже могут быть локально запущены с использованием Selenium.
Для начала, проверим, нет ли в коде нарушений установленного код стайла. Это позволит ознакомиться и начать использовать Travis CI. Если у вас нету тестов - настоятельно рекомендую использовать как минимум проверку стиля кода.
Обоснование важности консистентности кода и и его стиля можно найти во множестве мест, например, Стив Макконнелл “Совершенный код” часть 7 раздел 31.
Как в PHP узнать строку, на которой прервалось исполнение
При работе со старым кодом иногда очень сложно найти место, на котором прервалось исполнение. Конструкции типу die, exit и т.д. - очень плохая практика, но много легаси кода (и не только - я ничего плохого не говорю о Wordpress, так что молчу) ими злоупотребляют. Одна из самых больших проблем подобных конструкций - то, что их сложно найти и отладить. (Используйте exception!)
Но когда все же стоит задача найти место, где прерывается исполнение кода, можно воспользоваться следующим сниппетом:
Новое в PHP 7: оператор объединения со значением NULL
Не слишком броское имя для оператора, но раз уж php 7 принес нам удобный оператор объединения со значением NULL (англ. null coalesce operator), покажем пример.
У php 5 уже есть тернарный оператор, который проверяет выражение и потом возвращает второй элемент, если оно истинно и третий если ложно:
echo $count ? $count : 10; // выводит 10
Использование php-генераторов
Несмотря на то, что php-генераторы доступны с php 5.5.0, они все еще почти не используются. Более того, большинство разработчиков, которых я знаю, понимают, как работают генераторы, но не видят, когда они могут быть полезны в реальной жизни.
Да, генераторы определенно смотрятся хорошо, но знаете... Я не понимаю, где они могут быть полезными для меня, разве что для расчета последовательности Фибоначчи.
И они не ошибаются, ведь даже примеры в php-документации слишком упрощены. Они только объясняют, как эффективно реализовать range или итерировать по строкам файла.
Но даже с этих простых пример мы можем понять ключевые преимущества использования генераторов: они просто упрощают итераторы.
Итерация по периоду времени в php
Неоднократно приходилось работать на php со списком дат (по дням, к примеру) если есть начало и конец периода ($dateStart, $dateEnd). Например, для того, чтобы синхронизировать с бекендом рабочие/выходные дни для DatePicker из jQueryUi. Или, если нужно выводить отчеты по дням.
Предлагаю несколько вариантов решения этой задачи, как наиболее очевидным способом, так и более изящным (как мне показалось).
Паттерны проектирования (Design patterns). Часть 1: Порождающие и структурные
О паттернах проектирования слышали все программисты. Хотя... Исходя из количества стебов над php-разработчиками и видя некоторые куски кода, возможно некоторые из них (php-шников) понятия не имеют, что это такое.
Настройка PHP timezone в php.ini
Во время работы с Symfony framework получил следующее предупреждение (warning):
Warning: date_default_timezone_get(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /var/www/symfony/app/cache/prod/classes.php on line 5009
На самом деле, ничего страшного или необычного - это было вызвано обновлением PHP до версии 5.4, а так как новая версия стала рядом со старой с новыми конфигами, пришлось заново настроить PHP timezone в php.ini. Для начала, нужно узнать, в какой мы timezone. Точнее, как ее нужно указать в PHP конфиге.