Tags: ironman

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

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

Всем привет!

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

habrahabr.ru/blogs/perl/117665/

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

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


use Perl or die;

JFDI

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


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

Я счастливый Perl-программист

Я счастливый Perl-программист!

Спасибо Андрею Шитову, что напомнил (23 минута). Это действительно так :)

ЗЫ: Возобновляю Iron Man в своём блоге. Либо раз в 10 дней, либо по понедельникам в вашем RSS-фиде или ленте "Can haz Perl?" или "use Perl or die;" от "счастливого программиста".


use Perl or die;

JFDI

Perl. Mojolicious and Internal Server Error

Меня всегда бесила 500я страница в Apache – Internal Server Error, много текста и если что, спрашивайте у админа.
Чтобы узнать, что была за ошибка – нужно было посмотреть error.log, а там заветная фраз: Premature end of script headers.

Тяжелые времена Apache для меня давно прошли, уже второй год я использую Mojolicious, чему безумно рад :)

В Mojolicious-приложениях, если возникает ошибка, то она корректно обрабатывается движком и в ответ рендерится шаблон exception.html.ep.
По умолчанию, шаблон в дев-моде выдает корректное сообщение об ошибке, указывая номер строки, в которой произошла ошибка,  кусок кода и все stash-параметры. Очень удобно при отладке. При переходе в продакшен – выводится короткое сообщение, что произошла ошибка. При желание такую страницу можно отверстать и получить красивую и стильную 500ю ошибку.

Я пошёл дальше. Мне интересно первым узнавать, какие возникают ошибки в проекте. Если пользователь вам не сообщит об ошибке, то вы наверно не скоро найдете её (конечно, если не мониторите каждый день error-логи, или не имитируете работу 1000 пользователей). Поэтому в шаблоне exception.html.ep я вызвал один единственный хелпер:

% mail(to => 'sharifulin@gmail.com', template => 'exception', format => 'mail');

который при возникновении ошибки отправляет письма мне на почту, причем шаблон письма (и тема письма) хранятся в другом шаблоне – exception.mail.ep (здесь используется плагин Mojolicious::Plugin::Mail):
% layout 'default', subject => 'Error 500 ' . url_for();


% my $e = delete $self->stash->{'exception'};

<p><%= $e->message %></p>

<p>
	... строчки кода, где произошла ошибка ...
</p>

<p><pre><%= dumper $self->stash %></pre></p>

<p><pre><%= $self->req->to_string %></pre><p>

Из шаблона видно, что указывается весь запрос, на котором сервер упал, ответив 500й ошибкой, и шаблон с ошибкой пропускается через шаблон с дизайном для писем – layouts/default.mail.ep. Так что все письма стилизованы под проект.

Очень коротко и очень удобно!
Скоро выложу все свои наработки в публичный доступ.

Хейтерам привет, а мне очень нравится, результат на лицо, точнее в почтовом ящике :)


use Mojolicious or die;

use Perl or die;

JFDI

Uploadify and Mojolicious

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

Для меня всегда была проблема сделать прогресс-бар загрузки файлов, пару раз делали серверную реализацию (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

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

Perl. Использование Mojolicious-приложения в отдельных скриптах

Появилась идея, использовать функционал Mojolicious-приложений в отдельных скриптах, не запуская Mojolicious.
Для чего? Все просто: для работы с конфигом приложения, коннектом к БД приложения, для вызова хелперов, рендеринга шаблонов и  отправки почты.

Посмотрел исходники, написал следующий код:

http://gist.github.com/604897

Без хака не обошлось: отключение записи логов в файл (пусть все валится в STDOUT скрипту) и переопределение пути до шаблонов (у меня путь был относительным в конфиге).

Все хорошо, все работает.

Единственное некрасиво получается инициализация транзакции tx, я предложил сделать транзакцию по умолчанию –  HTTP, сделал патч, отправил Себастьяну, а он что-то не хочет принимать, не понимая для чего это http://github.com/kraih/mojo/pull/26

Ну и с этим смириться можно. Хотя я все еще жду :)


use Mojolicious or die;

use Perl or die;

JFDI

Хотел написать про Starman/Plack, но пост о другом :)

Хотел написать пост про Starman/Plack и запуск Mojolicious-приложений, но об этом в следующий раз.

Сегодня потребовалось для баша написать код для преобразования строки – обычный URL escape (требования: строка через аргумент передается).
Проще всего это сделать на Perl :)

perl -MURI::Escape -E'say uri_escape_utf8 shift' "..."

perl -Mojo -E'say b(shift)->url_escape' "..."


Первый вариант – без дополнительных зависимостей.
Второй варинат – на ojo, который без зависимостей :)


Привет, хейтерам Perl!

use Mojolicious or die;

use Perl or die;

JFDI