суббота, 24 декабря 2011 г.

PHP 5.4 приближается

В то время, как народ начал потихоньку переезжать на 5.3, незаметно приблизился новый PHP 5.4

Что радует, так это наличие в дереве портов этой версии, возможно hard-masked.

Можно успокоить себя мыслью о том, что 5.3 была переходной версией, вносящая кардинальные перемены и это давало нам шанс перестроить свою архитектуру в правильное русло. Это отчасти так, но те кто остается на ветке 5.2, надеясь, что 5.4 или 6, 7 будет круче и тогда они честно перейдут сразу в новый мир пушистых зверьков, вероятно находятся в некотором заблуждении.

5.3 был сделан как раз для того, чтобы можно было с минимальными потерями перебраться на новые версии, потому как дальше терпеть эту архитектуру нет никаких сил. Ход конем оправдан в некоторых ситуациях, но мы имеем дело в основном с эволюционированием плавными итерациями. И цена которую придется заплатить более поздним переходом будет высока.

Среди кардинальных проблем перехода на новые версии PHP являются:


  •  бардак подключаемых модулей через include-hell (читайте тут: http://talks.php.net/show/w2e09 )
  • возврат значений по ссылке
  • строгий контроль ошибок
  • глобальные имена
  • пространство имен
  • консервативность пакетных систем дистрибутивов
  • тонны быдло-кода и вместе с быдло-фреймворками не готовые к переходу на 5.3+
  • ущербность некоторых ключевых архитектурных решений в самом движке PHP
  • pear-hell
Фреймворки успевшие попасть в стрим 5.3 симфони2 и зенд, типо3 провели фундаментальную работу по переходу на 5.3 и это им в большей степени удалось. Однако это привело к некоторым в корне неверным решениям и попыткой привнести и сохранить старую идеологию в новые версии, но тем не менее качество решений остается на приемлемом уровне. Мне лично не нравится очень большой уровень вложенности каталогов, эмулирующих пространство имен.

Задаваясь вопросом о характерных признаках правильно 5.3-арзитектуры можно отметить следующие:
  • 99% использование splautoload
  • 99% использование итераторов
  • активное применение "замыкание" closure 
  • spl
  • активное применение непрерывного цикла интеграции и разработки в купе с юнит-тестами и гитом, влкючая подъем рабочих юнит тестов одним "пинкомy" как говорится "заводится с пол-оборота"

Что делать?
Ответ прост: думать, рефакторить, думать, читать, изучать, придумывать и кодить. Основная проблема это определение приоритетов. Нужно строить систему таким образом, в первую очередь реализуя то,без чего система бессмысленна. Это как правило функционал. Остальное приложится.

Итак что нового в 5.4?

Много нового в общем.

В настоящий момент: traits (типа примеси) , встроенный веб-сервер, значительные удобства работы с массивами типа в стиле jquery, замыкания в классах и улучшенный контекст их работы и что-то там еще.
http://jburrows.wordpress.com/2011/12/17/what-to-look-for-in-php-5-4-0/

миграция с 5.3 на 5.4: http://php.net/manual/en/migration54.php (документ в разработке)


что хотелось бы видеть в новом php?
побольше функциональщины
некоторые возможности, приближающиеся к erlang
tuples, lists
"прозрачный" интерфейс взаимодействия с расширениями и их разработка
удобство интеграции в дистрибутивы

у меня накопилось множество ссылок по материалам php, php53

http://www.delicious.com/dancecodes/php
http://www.delicious.com/dancecodes/php53
http://www.delicious.com/dancecodes/php54




суббота, 4 декабря 2010 г.

Обновлена документация для PHP на сайте gentoo.org

Как сообщает Ole Markus в своем блоге, обновилась документация для пакета dev-lang/php

С выходом версии 5.3 и его поддержкой в генту добавилось много изменений, незнание которых может вызвать ряд проблем при устновке php на gentoo. В частности, теперь возможна установка в генту нескольких версий php одновременно в так называемых "слотах", используя вспомогательный пакет app-admin/eselect-php

Как это сделать, теперь более внятно разъясняется в php-guide на сайте генту в секции Slotting используя специальную переменную PHP_TARGETS. И тем не менее полностью не удается избежать проблем. В частности, это касается пакета phpunit например. Утилита /usr/bin/phpunit содержит некорректный путь к интерпретатору php. Фрагмент "неправильного" кода из /usr/bin/phpunit :


#!/usr/lib/php5/bin/php


Воспользовавшись командой whereis php мы получаем следущий код:


whereis php
php: /usr/bin/php /etc/php /usr/lib/php5.3 /usr/share/php


соответственно, путь должен быть таким

#!/usr/lib/php5.3/bin/php
...



Возможно, переустановка пакета phpunit будет содержать правильный путь в /usr/bin/phpunit
Не пробовал. Использую собственную сборку phpunit в виде исполняемого phar-архива.

Кроме того, в документации упоминается о SAPI, поддерживаемых через USE-флаги.
Это флаги: cgi, cli, apache2, fpm (PHP FastCgi Process Manager), embed (встроенный embedded PHP client) Наиболее интересные флаги конечно это fpm и embed. Теретически Embed-флаг позволяет "встраивать" php в другие языки, например python, C

Затронута так-же в двух словах о переустановке pecl-расширений при слоттинге php-версий

Ссылки:
  • Документация по апгрейду PHP


  • Блог Ole Markus


  • Ссылка на статью об обновлении документации PHP
  • воскресенье, 31 октября 2010 г.

    Поведение php-5.3.3 и sqlite, sqlite2, sqlite3, pdo в gentoo

    Есть статья посвященная этой теме. Смысл в том, что надо использовать USE-флаг sqlite3 для предотвращения возможных проблем со старыми драйверами pdo-sqlite. Новый PDO работает теперь только с sqlite3.

    Просто сделайте USE="-sqlite sqlite3" emerge -v php. После, чтобы увидеть эффект этого, просто выполните emerge --depclean -av и увидите, что sqlite2 будет выкинут из системы. Если вы установите php без корректировки USE-флагов sqlite sqlite3, то получите обе работающих библиотеки. В дальнейшем такая конфигурация будет сопровождаться генерацией нотиса в php при работе приложения.

    На мой взгляд имеет смысл отказаться заблаговременно от использования старых версий sqlite. И по возможности использовать только sqlite3. Но реально воспользоваться этой возможностью можно только перейдя на php53.

    Новый sqlite3 поддерживает юникод (UTF-8), что отражается на корректной сортировке данных. Версии sqlite ниже <3 br="">
    В общем для решения этих проблем просто установите генту с последними версиями sqlite и пхп...

    ;)

    ключевые слова:
    драйвер, сортировка, юникод, установка, генту, sql, sqlite, sqlite3, data, php, php53, php5.3, portage, gentoo, ebuild, emerge, pdo, unicode, utf

    upd 2013:
    warning: this article actual for old gentoo versions - latest builds may work not such

    внимание: данная статья актуальна для очень старых сборок - последние версии gentoo могут иметь другое поведение с этими флагами. Наблюдалось не очень логичное поведение portage - пришлось несколько раз пересобирать, возможно это просто мешали старые флаги или не поддерживаемые пакеты. 

    upd 2013:
    warning for advertisers: if you want place backlink here or something other please contact me or/and use donate button.

    dev-lang/php-5.3.3-r1 наконец-то стал стабильным для всех веток arch!

    Об этом замечательном событии сообщает Ole Markus в своем блоге. Этот пакет в gentoo теперь поддерживает многие фичи в стабильной ветке: FPM (FastCGI Process Manager) и другие .

    А другие фичи это в основном особенности новшеств языка давно известные (LSB (Late Static Binding), Closures, Тернарный оператор с "умолчательным" значением). Например фрагмент кода:

    return 'gentoo is cool' ?: 'who wants to read this, anyway?';
    вернет "gentoo is cool", потому-что ненулевая длина строки 'gentoo is cool' вычисляется как true с точке зрения приведения к boolean-значению.

    Новые и удобные функции работы с датами (date_add(), date_diff() and date_sub()) и многое другое.
    Конечно-же эти фичи просто возможности языка,а не возможности сборки пакетов, но то что позволяет делать генту при сборке пакетов было бы не возможно без системы portage и ebuilds для php.

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

    В блоге Маркуса также есть интересные статьи решающие различные задачи установки для PHP и PHP53. В частности приводится техника установки нескольких различных версий PHP на один сервер. Новая концепция установки pecl-расширений через слоты

    Спасибо всем тестерам и командам arch-веток, кто сделал это возможным, пишет Ole Markus.

    среда, 16 июня 2010 г.

    Подборка пакетов для PHP 5.3

    • Экспериментальное расширение для загрузки классов PHP53 с бенчмарками:
      SplClassLoader php extension benchmarks Исходный текст пакета тут Автор утверждает, что все работает очень быстро, но небольшие тормоза есть при использовании имен файлов без путей. Хотя разница незначительная.

    • Экспериментальный скрипт "полуавтоматической" миграции с php5 на php53. Ссылка В общем скрипт "помогает/облегчает" процесс адаптации кода для работы в среде php53, пытается выявить узкие места.

    • Одна из реализаций библиотек для работы с CouchDB с использованием php53. По всем признакам это пока пробный шар. Автор недавно перебрался на 5.3 и пока используются только базовые возможности. Пространства имен не используются, но радует, что народ начинает подтягиваться ;) Да и сама CouchDB очень прикольная вещь. На мой взгляд весь интерфейс для работы с диваном можно сделать через curl...

    понедельник, 31 мая 2010 г.

    Установка нового php-5.3.2.ebuild из оффициального дерева портов Gentoo

    ВНИМАНИЕ! ВНИМАНИЕ! ВНИМАНИЕ!

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

    Сейчас 53 достаточно стабилен и установка достаточно тривиальна.

    Смотрите руководства по установке/обновлению php на сайте gentoo.org

    Статьи на сайтах gentoo-wiki также выглядят устаревшими. Лично мое мнение: надо использовать в полный рост PHP 5.4 и готовиться к PHP 5.5+

    ===============================================


    Установка и остальные тесты моих приложений прошли без каких-либо приключений, за исключением переустановки pecl-расширений и размаскировки dev-php5/pecl-syck

    В стабильной ветке данного ebuild требуется USE = spl, а для >=5.3.2 он не нужен. Соответственно в masked dev-php5/pecl-syck стоит проверка версии php.

    В общем все работает :)

    WARNING!!!
    Данный ebuild пока p.masked и для его установки Вам необходимо в /usr/portage/package.mask закомментировать строчку содержащую =dev-lang/php-5.3* Ожидается, что статус пакета предположительно сменится через пару недель с момента публикации.

    суббота, 29 мая 2010 г.

    PHP 5.3 в дереве портов Gentoo!

    Вчера, появилась тестовая ветка dev-lang/php в официальном дереве портов.

    Пока пакет /dev-lang/php/php-5.3.2.ebuild замаскирован, но прогресс на лице :) Спасибо разработчикам.

    Gentoo PHP team просит протестировать новый ebuild и внести посильную помощь, а также предупреждает о некоторых возможных проблемах с поддержкой mysql и других багах. Надеюсь, разверывание нового ebuild-а пройдет гладко ;) Ожидаю некоторые проблеms с PEAR, PECL, но они решаемы...

    Всех, кто интересуется данной темой - мои поздравления!