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

Брат, вся сила в модулях!

Многие разработчики (и не только они) который год уже твердят, что Perl мертв, холиваров на эту тему хватает на любом форуме/сообществе. О «смерти» Perl-а кричат все кому ни лень, начиная от «питонистов» и «рубистов» и заканчивая «пхпшниками». Так уж получилось, что мне приходится писать и на Perl и на PHP (в связи с этим про Python и Ruby ничего не могу сказать) и я могу сделать кое-какие выводы на основании личного опыта. Поливать гразью я никого не собираюсь =)

Когда перед разработчиком встает какая-либо задача первое, что он делает (должен!)  —  ищет уже готовое решение. Для чего изобретать свой велосипед если уже все изобретено до нас (отговорки про модуль «с барышнями и шампанским» не принимаются) !? И вот встала передо мной простая задачка: необходимо написать  программку, которая бы просто напросто парсила почтовые сообщения на сервере, сообщения эти лежат как простые файлики в файловой системе. Почта приходит от совершенно разных отправителей, в совершенно разных кодировках  и т.д. Писать необходимо на PHP. Вариантов несколько. Взять старые и добрые PCRE и распарсить все самому (не хочу описывать всю головную боль этого подхода — просто возьмите и попробуйте это сделать ) ! Вариант второй — поискать готовый модуль/пакет/класс. И вот тут я начинаю понимать всю силу перла, не зря говорят, что CPAN — это перловская киллер-фича. В случае работы с перлом — все просто. Заходим на https://metacpan.org/, вбиваем в поиск «EMAIL» и получаем второй ссылкой вот такой вот модулек https://metacpan.org/module/Email::MIME, который прекрасно делает все то, что нам необходимо. CPAN — это такое единое и общее  хранилище перловых модулей (для тех, кто не слышал про Perl и CPAN). Отмечу, что слова «единое» и «общее» выделены не просто так. Что мы имеем когда необходимо проделать тоже самое, но для PHP !? Идем на http://pear.php.net/ — это вроде как «CPAN для PHP» и пытаемся там найти нужный нам модуль. Находим вот такую «штуковину» http://pear.php.net/package/Mail_mimeDecode (на мой взгляд это единственное, что может подойти для нашей задачи). Я даже не беру в расчет тот факт, что последнее обновление этого модуля было в 2010 (работает — не тронь), мне хватает просмотра документации (http://pear.php.net/manual/en/package.mail.mail-mimedecode.mail-mimedecode.php) из которой, лично мне, абсолютно ничего не понятно (сравните с примерами из https://metacpan.org/module/Email::MIME)! Итак, на  http://pear.php.net/ нам ничего не подошло, тогда мы идем в гугл и ищем «php email parser», в выдаче видим ссылку на http://stackoverflow.com/questions/12896/parsing-raw-email-in-php (я, как правило, доверяю stackoverflow), читаем и видим ссылку на https://github.com/plancake/official-library-php-email-parser

Как вам название «official-library-php-email-parser» !? Если ты «official» почему тебя нет на pear !? Как мне поставить, а потом при необходимости обновлять модуль (git pull — для меня зло) !? Ну да ладно. Скачал, поставил. Попробовал использовать. Если коротко — адский ад! Проблемы с кодировкой и перекодировкой писем, проблемы с использованием строк как массивов (метод «getCc» и прочие).  Нет ни одного теста, НИ ОДНОГО! Сравните с 1364 тестами на разных версия Perl и на разных платфомах (http://www.cpantesters.org/distro/E/Email-MIME.html#Email-MIME-1.910) Плевался, плевался и пошел искать дальше… А дальше я попал на http://www.phpclasses.org/ — ну что это, простите, за помойка !? Для того чтобы скачать архив с кодом необходима регистрация! «The registration requirement is an option of the package author. This package has that option set.» — wtf ? Блоки гугл адсенс постоянно пестрят какими-то банерами, такое ощущение, что попал на какой-то «шаре-варе» сервер, который вот вот насажает тебе пачку троянов!  Теперь сравните все это «добро» с отлично выполненной главной страницей https://metacpan.org/…Есть разница ? Искал я искал и в итоге не нашел ничего более подходящего, чем описанный выше модуль с гитхаба (пришлось вбить в него парочку костылей/заплаток после чего он более или менее заработал).

Подведем итог. PHP — хороший язык (особенно если использовать фреймворки, например Yii), но я вот в упор не понимаю почему нельзя сделать единый репозиторий модулей с удобным консольным клиентом для установки, чтобы из одного источника я мог сразу обновить всю систему в пару кликов (слышал про Composer — но не то это). Почему тот же Yii нельзя поставить и обновлять через что-то похожее на CPAN !? Почему нельзя сделать приятную глазу и функциональную веб-морду для поиска всех этих модулей ?

В качестве финального аккорда приведу ссылку на http://www.modulecounts.com/ — счетчик количества модулей в репозиториях для разных языков. Цифра 588 во всех строчках для PHP — меня поразила. Perl с его 25114 явно выигрывает.

Точка!

 

Ruby ??? или Ruby !!!

Мне давно хотелось изучить что-то новое, прямо вот хотелось и все тут. С питоном любовь не получилась, ну не мое это и все. Не понравился мне его синтаксис, его «полу-объектная» модель ну и т.д. и т.п. После долгих лет разработки на Perl хотелось чего-то такого же распиздяйского офигенно красивого, такого где кроме «if» есть еще и «unless», такого где «ифы можно писать после самого выражения». Одновременно со всеми этими хотелками, очень хочется чтобы этот новый язык/инструмент был востребован на рынке, был, так сказать в тренде, чтобы на нем можно было писать веб-аппликухи, всякие консольные скриптики и утилиты, чтобы у него была куча различных фреймворков и «серверов приложений», чтобы было активное сообщество ну и еще много чего хотелось =)

Выбор пал на Ruby других вариантов я не нашел  (если только посмотреть в сторону node.js и всей около него темы, но пока не мое это).

И наткнулся я вчера вот на такую ссылку http://ruby.hasbrains.ru/ — скринкасты по Руби, замечу, что не по Рельсам, а именно по Руби,по самым основам и азам. Да, да, многие кидаются учить и понимать рельсы не зная о существовании руби — это примерно тоже самое как в 90-е многие учились «писать на CGI», не понимая, что в большинстве своем они пишут на Perl (это я в какой-то умной книжке вычитал, так как сам в то время еще ничего не писал и не учил). Хочу сказать, что эти скринкасты рассчитаны на самых новичков не только в Руби, но и в программировании вообще, автор довольно подробно, хоть и быстро, все излагает. Приятное впечатление от выпусков.

Просмотрел я пока первые 7 выпусков…уж очень из руби торчат перловые корни, но я этого и хотел, это и искал, мне все нравится =)

Подводя итоги. Для начала посмотрю все эти выпуски, думаю они дадут хороший старт для начального знакомства с Ruby, ну а потом будет видно стоит оно того или нет.