Posterous theme by Cory Watilo

Filed under: mojolicious

Mojolicious и Dancer

Если честно, то наболело. Хочу положить конец дискуссии про Mojolicious и Dancer.

Сравнивать эти два фреймворка вообще бессмысленно, поэтому я умышленно не написал в название vs.

  1. Mojolicious — это не микро-фреймворк, в отличии Dancer, а инструмент для написания современных веб-приложений и не только (хотя автор всё-таки ориентируется на веб).
  2. Если всё-таки хочется сравнить процесс (особенности) написания небольших веб-приложения, то стоит сравнивать Mojolicious::Lite и Dancer. Но это такое же сравнение, как iPhone и Android, Mac OS X и Windows, Playstation и Xbox соответственно. Любое соперничество идёт на пользу каждому участнику состязания.
  3. Mojolicious::Lite — это всего лишь вершина айсберга, обёртка над фреймворком Mojolicious. Предназначен для написания небольших простых веб-приложений, а также для обучения Mojolicious и Perl (другими словами — снижает порог вхождения).
  4. Mojolicious — это одновременно название дистрибутива и название фреймворка, стОит отличать это в контексте разговора.
  5. Поэтому Mojolicious (дистрибутив, "веб в коробке") — это

    — набор компонент и иструментов, основные из них: Mojo::Base (создание объектов), Mojo::Log (логирование), Mojo::UserAgent (полноценный HTTP и websocket клиент), Mojo::DOM (работа с DOM), Mojo::JSON (работа с JSON), Mojo::Template (шаблонизатор), Mojo::Util (вспомогательные функции), Mojo::IOLoop (событийная машина), Mojo::Server (CGI, FastCGI, PSGI, HTTP и websocket сервер) и Test::Mojo (автоматизация тестирования),

    — три фреймворка: Mojo (HTTP запрос-ответ сервер), Mojolicious (mVC веб-фреймворк, идея позаимствована у RoR) и Mojolicious::Lite (простой веб-фреймворк, идея позаимствована у sinatra).

  6. Фреймворк Mojolicious — полноценный веб-фреймворк, с богатым и гибким функционалом (роутеры, хелперы, плагины), подходящий для решения сложных веб-проектов.
  7. Кроме того, Mojolicious (инструмент, продукт):

    — без зависимостей (действительно, без зависимостей, всё, что нужно для запуска есть в CORE-библиотеках Perl),

    — стабильная версия ядра (тут многие могут поспорить, приведя кучу примеров того, что в недавних версиях сломалась совместимость c Mojo::IOLoop, но я повторюсь — основной акцент всё-таки был на веб, и чтобы код был впредь лучше, автор пошёл на конфликты с предыдущими версиями, а код веб-проектов, написанных год назад, работают на последней версии Mojolicious),

    — есть хорошая документация и вики,

    — живое и достаточно большое сообщество ("ты совсем не одинок, когда сталкиваешься с проблемой"),

    — красивый современный сайт, красивый — ключевое слово, меня и большинство сильно отпугивают "страшные" сайты, которые пытаются продвигать какой-либо продукт (я серьёзно, меня просто раздражает дефолтные стили и авто-генерируемые страницы Dancer, серый фон "попахивает" 90ми).

    — понятные и опять же красивые скринкасты Mojocast (я сравниваю со скринкастом от Габора Жабо про блог, это ужас),

    — и так далее.

Оценив популярность и тенденции в сообществе языка Perl, могу сделать вывод, что:

  1. Dancer выбирают программисты:

    — за 35 лет (если нет, то выглядят на такой возраст),
    — сидевшие очень долго под mod_perl или CGI,
    — делают совсем небольшое количество проектов, где фреймворком был либо CGI::Application, либо свой велосипед (который уже стал таким крутым, что с ним жалко расставаться и что-либо сделать на нём новое очень сложно или невозможно),
    — совсем не могут избавиться от Template Toolkit,
    — им кажется, что вот наконец-таки можно избавиться от копипаста в виде my $self = shift; и везде в коде писать DSL (params, database, ..),
    — не парятся по поводу серого фона и синих ссылок на своих проектах,
    — не видят смысла в социализации интернета и своих разработок,
    — думают, что умеют танцевать, но это совсем не так,
    — и, наконец, те, кто ненавидят Mojolicious, автора и/или sharifulin :-)

  2. Mojolicious выбирают:

    — молодые и активные разработчики (если нет, то считающие себя в душе таковыми),
    — нет желания (нет времени) сейчас писать свой собственный шаблонизатор, роутер, событийную машины и/или фреймворк,
    — попробовавшие раз, и не пытавшиеся обновить на работающем Mojo-проекте дистрибутив Mojolicious, хотя они знали, что не безопасно использовать внутреннее API (например, Mojo::IOLoop, который сильно внутри поменялся несколько месяцев назад),
    — доверяющие мнению тех, кто про Mojolicious рассказывает или подписанные на новости sharifulin :-)

  3. С Catalyst очень сложно слезть, хотя у некоторых получается :-)


Прочитав этот список, можно сделать вывод, что начать писать на Dancer сложнее, т.к. больше требований.

Два замечания про скорость и альтернативу в виде Plack.

  1. В сети есть несколько тестов, где приведены результаты бенчмарков "Hello world"-конструкций, и Mojolicious часто на последних местах. Да это так, но это ничего не меняет:

    — Mojolicious::Lite — это обёртка над Mojolicious, а тот в свою очередь над Mojo, поэтому в таких тестах Dancer будет выигрывать,

    — Встроенный в Mojolicious HTTP-сервер (хоть и асинхронный, но однопоточный) написан на Perl и не претендует на высокие показатели производительности или отказоустойчивое решение при больших нагрузках.

    — Сама суть Mojolicious — в удобстве, скорости разработки и поддержки кода (прикладные задачи), но не подумайте, что на производительность забили, это не так.

    — Не меняя код, Mojolicious-приложение можно запустить под FastCGI и/или PSGI (starman, starlet) и вы забываете про то, что именно ядро Mojolicious может быть медленным, т.к. вся проблема сводиться к логике, которую вы реализуете.

    — Любой достаточно популярный сайт, веб-сервис или стартап можно написать на Mojolicious и проблем с производительностью не будет (если, конечно, это не Rambler-почта).

  2. Plack/PSGI — отличный инструмент/протокол, который позволил Perl "омолодиться", стать удобным в использование языком. Но это всё-таки кирпичики, из которых самому можно собрать свой фреймворк, который будет заточен под ряд шаблонных задач, работать быстро. Можно попытаться написать пародию на фреймворк Mojolicious или Mojolicious::Lite, получить от этого фан, сделать свой ("правильный") open-source продукт и создать конкуренцию Mojolicious. Это всё хорошо и я рад наличию такой альтернативы.

    Но здесь так же не стОит сравнить Plack с Mojolicious, это разные вещи. Наоборот, Plack (Plack::Middleware) могут дополнять приложения Mojolicious, запущенные под PSGI интерфейсом (понятно, что можно придраться к двойному парсингу запроса, но это не суть).

Если вкратце, то это всё.


use Mojolicious or die;

use Perl or die;

JFDI
 

ЗЫ: Когда я решил написать этот пост, в голове были только жёсткие высказывания и ненормативная лексика, рад что пост получился не таким :-)

 

Экспорт записей с LiveJournal, переход на Posterous

Posterous умеет на автомате экспортировать записи из различных блог-движков, кроме LiveJournal, что странно (хотя может быть из-за "хорошей" работы последнего они этого не сделали).

Я написал скрипт на Mojolicious и MongoDB, который забекапил все записи с моего ЖЖ (236 записей).

И затем написал скрипт, который используя Posterous API (кстати, очень красиво сделали интерфейс API, сразу можно послать запрос и получить ответ, удобно), загрузил все записи. Я только забыл про автоматический постинг в социальные сети и мои друзья словили 236 сообщений в Twitter и Facebook :-)

Posterous API иногда прглючивало, возращало вместо кода ответа 201 — 404, но запись создавалась, получались дубли, пришлось разобраться с удалением и созданием заново всех постов. Поэтому отсылку постов пришлось делать пачками.

 

use Perl or die;

JFDI

YAPC::Russia 2011

14–15 мая 2011 года прошла конференция YAPC::Russia 2011 в Москве.
В этом году было меньше посетителей, чем в прошлом, зато место проведения было круче – Digital October.
Мы не были готовы к вещанию презентаций через камеру (вторая половина первого дня) и расшариванию экрана через Skype (второй день), зато было весело и интересно как всегда :-)

5 мая (5.14) вышел Perl 5.14, как раз в этот день Андрей Шитов рассказал про новшества в Perl 5.14.
Вячеслав Матюхив рассказал про "Поиск по блогам Яндекса", оказывается, команда – 8 Perl-программистов и до "пиздариков" в Я. Perl еще далеко.

В первый день прошла серия блиц-докладов, мне запомнились два блиц-доклада: Облачные хостинги (почти про зло) и Мой Modern Perl.

Во второй день хороший доклад был про no threads; Ничего нового, но всё по полочкам разложено. Основная мысль: Coro и AnyEvent (или any event) – стОит использовать.

Ну и конечно доклад про Mojolicious – "Почему Mojolicious?" :-)


Все прошло быстро, на одном дыхание, большое количество кулуарных разговоров про Perl, Mojolicious, booking.com, Perl 6 и, конечно, YAPC::Europe 2011, куда большинство собирается поехать (я в том числе) :-)

К сожалению, у меня ни фото, ни видео нет, только воспоминания.


use Perl or die;

JFDI
Original post http://sharifulin.livejournal.com/64845.html

Perl. YAPC::Russia 2011. MojoX::Loader

Начинаю готовиться к конференции YAPC::Russia 2011, на которой я буду выступать с тремя докладами :)

Сегодня сделал то, что давно хотел – модуль MojoX::Loader, который позволяет загрузить в скрипт Mojolicious-контроллер и использовать все методы, хелперы из контроллера, а также рендеринг шаблонов. Просто и удобно при автоматизации работы веб-проекта: создание e-mail рассылок, построение графиков и прочая работа с базой, точнее с веб-приложением, написанном на Mojolicious.


Original post http://sharifulin.livejournal.com/64530.html

Perl. Подкаст и ВКонтакте группа

Всем привет!

На днях с парнями из Воронеж.pm записали подкаст про Mojolicious и Perl.

habrahabr.ru/blogs/perl/117665/

ЗЫ: [info]slonik_v_domene прости, конечно же, Андрей Шетухин, а не Алексей.

ЗЫ2: Вконтакте группа Perl получила красивый адрес vkontakte.ru/perl5


use Perl or die;

JFDI

Original post http://sharifulin.livejournal.com/64353.html

Perl. Любители фреймворков

Так сложилось, что каждый Perl-программист в своей жизни должен сделать три вещи:
  1. Написать свой фреймворк
  2. Написать свой шаблонизатор
  3. Написать свою событийную машину
На сегодняшний день вопрос с фреймворками в Perl особо животрепещущий.
Если раньше было полтора фреймворка: Catalyst и Jifty, то сейчас их целых три: Catalyst, Mojolicious и Dancer.
Последние два – пользуются особой популярность среди разработчиков, т. к. впитали всё (почти всё) самое лучшее из фреймворков на языках Ruby и Python.

Соответственно, появились многочисленные холивары среди Perl-программистов.
Последний холивар  – в сообществе ru_perl .

На самом деле, меня это радует и пусть фреймворков будет ещё больше (с появлением PSGI и Plack к этому всё и идёт).
Не зря же TIMTOWTDI :)


use Mojolicious or die;

use Perl or die;

JFDI

ЗЫ: Мой выбор очевиден)


Original post http://sharifulin.livejournal.com/64249.html

Perl. Mojolicious 1.0 Вот и случилось, долгожданная стабильная версия

Я безумно рад, вчера 26 декабря 2010 года Себастьян Ридель опубликовал Mojolicious версии 1.0 – долгожданная стабильная версия.
Очень много изменений, убраны все рудименты, добавлено много красивостей и многое другое.

На Github https://github.com/kraih/mojo/tree/v1.0

На CPAN http://search.cpan.org/~kraih/Mojolicious-1.0/


Больше всего приятно, что 25 декабря мы нашли маленький, но неприятный баг в загрузке файлов и за день до релиза Себастьян все исправил.

Красивый сайт Mojolicious с документацией ждёт вас по адресу http://mojolicio.us/


Viva la revolution!

use Mojolicious or die;

use Perl or die;

JFDI
Original post http://sharifulin.livejournal.com/62882.html

Uploadify and Mojolicious

В последнее время очень рад за Open Source.

Для меня всегда была проблема сделать прогресс-бар загрузки файлов, пару раз делали серверную реализацию ([info]pavel_kudinov -style для Киномедиа и я свою в дипломном модуле HTTP::Request::Interface).

Затем загрузку файлов стал делать на jquery (через какой-то плагин, но без прогресса, через iframe) и на какой-то очень сложной библиотеке JavaScript (что-то типа SWF Upload).

И вот сейчас вновь появилась такая задача и есть новое модное решение – uploadify.
Это библиотека на jQuery, позволяет делать всё (ну почти всё), простая в использование и красивая :)
Сегодня 1 ноября вышла новая версия – 2.1.1, именно её я и решил попробовать. Сразу нашёл баг в отрисовке прогресс-бара, но он совсем небольшой, его несложно пофиксить, что команда разработчиков и сделает на днях (нужно заменить animate на css ;)

Серверная часть – тоже очень простая, в примерах библиотеки есть два скрипта на PHP (check.php и uploadify.php).
Я её написал на Mojolicious::Lite, по-моему, симпатично, и понятней, чем на PHP (субъективное мнение? :)

Пример на Mojolicious::Lite

Можно сделать такой плагин для Mojolicious, чтобы добавить к проекту красивую загрузку было бы просто.
Будет время сделаю и опубликую.


use Mojolicious or die;

use Perl or die;

JFDI

Original post http://sharifulin.livejournal.com/62065.html

Mojolicious and send mail

Вот же круто получилось, я теперь могу слать письма из standalone скрипт так же, как и с веб-приложения на Mojolicious без допольнительных настроек. 
Причем само письмо и тема письма лежат в шаблоне и все это пропускается через шаблон с дизайном, т.е. ресурсы используются одни и те же.
Отправка письма:
$self->mail(from => 'support@frod.io', to => 'sharifulin@gmail.com', template => 'invite/send');

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

Вот так вот :)

ЗЫ: Новая версия Mojolicious::Plugin::Mail скоро на CPAN.


use Mojolicious or die;

use Perl or die;

JFDI

Original post http://sharifulin.livejournal.com/61734.html