Архив за месяц: Июль 2012

Мысли про null…

Послушал сегодня очередной «радиот» — довольно такой интересный выпуск получился. Громко кричали и шумели со словами «PHP — говно!», но к этому можно уже привыкнуть и пропускать мимо ушей. Если инструмент меня кормит —  пусть он будет хоть трижды говном. Был там еще очень любопытный момент. Всем известный Бобук рассказывал про такой тип данных как null в  Smalltalk. Хочу заметить, что в этом самом смалтолке реализован этот null довольно интересно. Передам как я это понял. Null в смалталке это такой объект, у которого можно вызвать любой метод и этот метод вернет….правильно null! Гениально! Сразу же отпадает необходимость проверки на возвращаемый тип и сразу же пропадают пхп-шные ошибки типа «null is not object…». Удобно же!

Мысли про проверки, зависимости, фреймворки, php и perl …

Продолжаю выкладывать свои мысли и соображения о php и perl (первая серия вот тут). Сегодня хотелось бы поговорить про проверку зависимостей («чекеры»так называемые). Написать эту заметку меня заставил чекер зависимостей Symfony2. Возьмем, к примеру, пхпшный Yii (или Symfony2) в дистрибутивах всех этих фреймворков есть специальная страничка/скриптик, который проверяет наличие всех необходимых расширений и системное окружение, в которое фреймворк установлен.  Почему таких страничек нет в перловых фреймворках Mojolicious, Catalyst и т.д. ?  На мой взгляд, все эти, так называемые, зависимости должны проверяться  и валидироваться при установке фреймворка/библиотеки. Беда в том, что в мире php установка, в большинстве случаев, сводится к простому копированию файлов на сервер (ну нету пока у php центрального хранилища модулей и библиотек). Как-то же необходимо узнать «правильно» ли мы все скопировали, все ли у нас теперь заработает ? Вот для этого такие странички «чекеры» и необходимы. При таком подходе к установке очень часто возникают ситуации, когда все кажется сделано: фреймворк залит, приложение залито, запускаем….ничего не работает, смотрим наш «чекер» и видим, что не хватает какого-то PDO расширения или драйвера для memcache. Отсутствующие библиотеки — это еще пол беды. Самое интересное когда работа фреймворка зависит от конфигурации php (всем известен php.ini c его сотнями параметров ? ). Т.е. имея установленный php, имея установленные все необходимые модули, наше приложение может не заработать из-за конфигурации языка программирования (!). Вот и чекер Symfony2 выдал мне варнинги (хорошо хоть не фатальные) с просьбой подкорректировать настроечки в php.ini. Наличие у языка программирования централизованного файла настроек, на мой взгляд, очень сомнительная штуковина, добавляющая лишние проблемы при распространении приложения (вот маленький пример, возникший при разработке Юпи! https://github.com/yupe/yupe/issues/203 ). А что же Perl ? А тут все просто: ставим пакеты из CPAN, при установке автоматом проверяются и ставятся все зависимости, если что-то пошло не так — установка просто закончится неудачей и нам не придется гадать «а заработает ли?». Конечно, и тут бывают проблемы, но значительно реже. У перла нет никакого конфигурационного файла, что решает еще одну проблему с установкой. Есть конечно опции компиляции, которые могут отличаться от сервера к серверу, но это настолько редко было в мой практике, что я не беру это в расчет. И снова забыл про тестирование. При установке Mojolicious (как пример) прогоняются все тесты, которые только есть в дистрибутиве фреймворка и зависимостях. Автоматическая проверка зависимостей,  их установка и прогон тестов практически всегда гарантируют работоспособность расширения на данной конкретной машине. Мысли кончились…

В заключении поделюсь ссылкой на статью Фабьена (разработчика Symfony) http://fabien.potencier.org/article/64/php-is-much-better-than-you-think