tag:blogger.com,1999:blog-53995401525972364462024-03-06T01:57:11.214+02:00koorchik's Perl blog || Перл блогЗдесь хранятся разные советы, интересные куски кода, информация о полезных модулях ... и так далее :)koorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.comBlogger78125tag:blogger.com,1999:blog-5399540152597236446.post-75310499727700834642014-07-27T09:53:00.001+03:002014-07-27T10:44:25.186+03:00Фотографии с Perl-хакатона в Киеве (2014)
В Киеве 19-20 июля 2014 прошел Perl-хакатон. Мероприятие посетил Марк Леманн - автор AnyEvent, Core, JSON::XS и libev. Думаю, многие слашали про node.js, но мало кто знает, что в нем по-началу использовался libev.
Хакатон прошел в дружественной атмосфере, vti подобрал хорошее место для мероприятия и было, как говорится, уютно и комфортно. Единственное, чего мне хватило, так это кофе. Нет koorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.com5tag:blogger.com,1999:blog-5399540152597236446.post-42936949370766536072012-05-19T12:07:00.000+03:002012-05-19T12:09:55.111+03:00Try::Tiny и диспетчеризация исключений
Проблема
Многие используют Try::Tiny. Все в этом модуле хорошо, только не хватает вот чего-то вроде:
try {
die Class1->new();
}
catch('Class1') {
# Catch all exceptions of Class1
}
catch('Class2') {
# Catch all exceptions of Class2
}
catch {
# Catch other exceptions
}
К сожалению, сделать такой синтаксис, не убрав "::Tiny" с названия модуля, не так просто. Кроме того, koorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.com0tag:blogger.com,1999:blog-5399540152597236446.post-69829460804762593742012-05-15T08:58:00.001+03:002012-05-15T08:58:18.295+03:00Mojolicious::Plugin::RenderFile для отдачи файлов
Стояла задача дать пользователю возможность скачать файл. Покопавшись в документации, я нашел 2 варианта - хелперы "render_data" и "render_static".
Оба варианта мне не подошли.
"render_data" - принимает строку, а я не хотел вычитывать весь файл в память.
"render_static" - отдает файлы с "public" директории.
render_file
Интернет предложил различные варианты решения проблемы, но koorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.com8tag:blogger.com,1999:blog-5399540152597236446.post-18019238172277116242012-05-14T13:44:00.000+03:002012-05-14T13:44:23.321+03:00Немного фотографий с Perl Mova 2012
Конференция удалась: был масштаб, интересные доклады, крутые монгеры, пиво от спонсоров, дружественная атмосфера, отличная организация.
Собственно фотки
Еще пару ссылок:
Небольшой отчет от vti - Perl Mova / YAPC::Russia 2012 is over!
Ссылка на мою презентацию -&koorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.com0tag:blogger.com,1999:blog-5399540152597236446.post-59479334439969535792012-04-17T20:20:00.000+03:002012-04-17T20:20:55.437+03:00Посещение iforum
Сегодня я со своими орлами посетил в очередной раз iforum. В этот году, если я не ошибаюсь, зарегистрировалось более 4 тыс. человек. Мероприятие - про бизнес, рекламу, продвижение, технологии в Интернет. Изначально, я собирался посетить техническую секцию доклады Дмитрия Сатина. Техническую секцию конечно сложно назвать откровением, но было вполне неплохо с расчета на массовую koorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.com2tag:blogger.com,1999:blog-5399540152597236446.post-39588261248603265422012-02-17T13:14:00.001+02:002012-02-17T13:14:15.185+02:00Первая техническая втреча Kiev.pm
16 Февраля 2012 года, в 19:30 в помещении GL Club, Киев состоялась техническая встреча Kiev.pm - группы пользователей Perl. Посетило встречу около 12 человек. Провели 2 доклада, на остальные не хватило времени и решили перенести на следующий раз.
Доклады:
"Nginx. По следам мастер-класса Игоря Сысоева" Денис Жданов. Презентация
"Redis. Protocol::Redis" Сергей Засенко. koorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.com0tag:blogger.com,1999:blog-5399540152597236446.post-66349367411862619742012-01-13T16:21:00.001+02:002012-01-16T11:41:02.215+02:00Валидация данных в Mojolicious
Написал небольшой плагин для Mojolicious - Mojolicious::Plugin::ValidateTiny. По сути - это обертка над Validate::Tiny с дополнительными удобными плюшками.
Для валидации входящий параметров мы просто используем хелпер:
$self->do_validation($validate_rules);
$validate_rules - это описание проверок в формате Validate::Tiny.
По-умолчанию, включена опция "autofields", которая позволяет koorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.com11tag:blogger.com,1999:blog-5399540152597236446.post-76836088666041337962012-01-05T19:19:00.000+02:002012-01-06T09:49:24.170+02:00Быстрая установка зависимостей Perl-приложения
Имеется приложение на Perl, которое имеет множество зависимостей. Задача - упростить установку зависимостей такого приложения.
Есть несколько подходов к решению данной задачи, но я расскажу лишь про тот вариант, который я использую и он мне нравится больше всего.
Все модули я ставлю с CPAN в локальную директорию пользователя, использую для этого "local::lib".
Предварительно koorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.com5tag:blogger.com,1999:blog-5399540152597236446.post-7274700819411812412011-11-08T21:03:00.000+02:002011-11-08T21:03:50.903+02:00Теперь постом можно поделиться в социальных сетяхЯ наконец-то добавил кнопки публикации информации про пост в социальных сетах. Пришлось немного порыться в интернетах, а то у меня используется нестандартный шаблон для блога и блогспот не мог к нему автоматически добавить эти кнопочки.
Теперь можно поставить +1 любому понравившемуся посту. Пользуемся, не стесняемся ;).koorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.com0tag:blogger.com,1999:blog-5399540152597236446.post-33348979396808639942011-11-08T08:30:00.000+02:002011-11-08T08:30:04.227+02:00Mojlicious: Использование роутов в javascript
Мне нравится, как реализованы роуты в Mojolicious и особенно мне нравится то, что их можно именовать. Именую я роуты всегда в соответствии с именем контроллера и метода.
Например,
$r->get('/messages/:id')->to('messages#show')->name('messages_show');
$r->post('/messages/:id/delete')->to('messages#delete')->name('messages_delete');
И затем в контроллере:
$self->redirect_to('koorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.com10tag:blogger.com,1999:blog-5399540152597236446.post-58345985227321868022011-11-01T08:35:00.006+02:002011-11-01T08:35:00.439+02:00Mojolicious и защита от Cross Site Request Forgery (CSRF)Немного теорииЯ полагаю многие знают, что такое CSRF. Но для новичков озвучу. CSRF (Cross Site Request Forgery) - это межсайтовая подделка запросов. И происходит она следующим образом.
Допустим, на вашем сайте, назовем его "mysite.com", есть ссылка, которая удаляет сообщение. Ссылка вида - "http://mysite.com/myprofile/delete?message=123".
Злоумышленник может вставить эту ссылку на свой koorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.com16tag:blogger.com,1999:blog-5399540152597236446.post-87631063971815404022011-10-26T08:55:00.001+03:002011-10-27T12:26:39.567+03:00Интересности PerlКак-то совсем давно я ничего не писал, думаю уже пора :). Не так давно прошла конференция BlackPerl 2011. Я думаю, что уже многие в курсе относительного этого события.
Я на конференцию ехал без доклада, просто с желанием познакомится с Perl-комьюнити, послушать других и пофотографировать сие действо. Но вдохновленный докладчиками, решил и сам соорудить небольшое выступление. Поскольку, koorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.com5tag:blogger.com,1999:blog-5399540152597236446.post-58460653334742472032011-08-09T20:26:00.001+03:002011-08-09T20:26:39.831+03:00IGAL - создаем фотогалерею за 5 минутУ меня стояла задача раздать всем фотки после праздника. Логичнее всего раздать их через интернет. Следовательно возникли следующие требования:
Фотографии должны быть доступны для скачивание только определенному кругу людей.
Фотографии должны быть доступны в полном размере( не ужатые )
Должна быть возможность предварительного просмотра фотографий.
Должна быть возможность пакетного скачивания koorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.com1tag:blogger.com,1999:blog-5399540152597236446.post-8272938375416328572011-07-01T22:59:00.001+03:002011-07-01T22:59:52.199+03:00Тест на понимание Perl: Вопрос 5ВопросЧто выведет следующий код?
$MODE = 'debug';
sub is_debug { $MODE =~ /debug/gi ? 1:0 }
print 5 if is_debug();
print 6 if is_debug();
print 7 if is_debug();
Ответ: 57
ПояснениеВызов функции is_debug будет нам по очереди возвращать то 1, то 0. Это связано с тем, что мы используем регексп с модификатором "g" в скалярном контексте. В такой ситуации при удачном совпадении Perl запоминает koorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.com1tag:blogger.com,1999:blog-5399540152597236446.post-76440525086702999562011-06-29T10:29:00.001+03:002011-06-29T11:44:37.979+03:00Ищем Perl-программистов в Киеве и Чернигове (Украина)Для Perl программистов есть 2 вакансии - одна в Киеве и одна в Чернигове.
Компания Portaone.
Описание киевской вакансии - http://www.portaone.com/company/careers/developer/
Описание черниговской вакансии - http://www.portaone.com/company/careers/web-developer/
Работать будете в команде профессионалов, начинающих программистов в компании практически нет.
Если что-то интересует&koorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.com2tag:blogger.com,1999:blog-5399540152597236446.post-13018505700101623962011-06-23T20:52:00.002+03:002011-06-24T12:29:54.862+03:00Запускаем Mojolicious/PSGI приложение: мини-тест производительности.Решил провести небольшое тестирование производительности Mojolicious в разных режимах:
Mojo::Server::Daemon (Epoll/Poll)
Mojo::Server::Hypnotoad (Epoll/Poll)
Mojo::Server::PSGI + Corona
Mojo::Server::PSGI + Starman
Mojo::Server::PSGI + Starlet
Mojo::Server::PSGI + Plack::FCGI::Handler
Хотелось еще протестировать nginx+uwsgi, но не сложилось. Возможно в следующий раз.
Как проводилось koorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.com29tag:blogger.com,1999:blog-5399540152597236446.post-90250398874193222732011-06-06T23:59:00.001+03:002011-06-07T09:25:52.148+03:00Наконец-то исправлена обработка исключений в Perl 5.14Все уже знают про выход Perl 5.14, но почему везде пишут лишь про новые плюшки?! Но то что была наконец-то решена древняя проблема с обработкой исключений, никто и не вспоминает.
В Perl мы используем die для генерации исключения и блочный eval для перехвата. Конструкция, думаю, знакома всем:
eval {
# some code
die "error";
# some code
};
if ($@) {
print "Error [$@] occured!";
koorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.com2tag:blogger.com,1999:blog-5399540152597236446.post-9708118751872381602011-05-27T00:01:00.001+03:002011-06-23T11:56:48.996+03:00Развертываем Perl приложение на DotCloudНемного про PSGIСпецификация PSGI стала очень важным(переломным) моментом в мире разработки Perl веб-приложений. По сути, произошло отделение протокола взаимодействия с веб-сервером от API фреймворка, что позволило запускать PSGI приложения в любом окружении(возможно стоит про это написать отдельный пост :) ). Все современные фреймворки поддерживают PSGI.
Как выглядит PSGI приложение?PSGI koorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.com4tag:blogger.com,1999:blog-5399540152597236446.post-22899248370797284092011-05-26T13:32:00.002+03:002011-08-23T09:39:05.744+03:00Mojo::JSON для сессий в MojoliciousСейчас Mojolicious использует Storable для сериализации сессий, но Себастьян решил перейти на Mojo::JSON и мне нравится эта идея :). Я приверженец формата JSON и уже упоминал его преимущества в посте "Как устроены сессии в Mojolicious?!". Проблемы могут возникнуть только у пользователей, которые хранят в сессии блесснутые(blessed) ссылки.
Тикет с обсуждением на гитхабе.koorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.com6tag:blogger.com,1999:blog-5399540152597236446.post-73300881689804211492011-05-17T00:48:00.001+03:002011-05-17T00:50:09.487+03:00Конвертируем HTML в PDFПредысторияЕсть некое веб-приложение(на Perl), в котором нужно было добавить определенный набор отчетов. Отчеты должны иметь два представления - HTML и PDF.
Для решения этой задачи, естественно, можно было бы воспользоваться модулями типа PDF::Reuse, PDF::API2, PDF::API2::Simple, но:
1. Это лишние временные затраты (изучение API, написания дополнительного кода)
2. Это усложнение сопровождения koorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.com4tag:blogger.com,1999:blog-5399540152597236446.post-54004884100040600252011-04-15T13:21:00.000+03:002011-04-15T13:21:20.116+03:00Mojolicious 1.16: Экстренный релиз, Всем обновляться!!!Час назад стало известно про серьезную уязвимость в Mojolicious, которая позволяет вычитать любой файл с файловой системы.
Баг уже исправлен, к сожалению баг был опубликовал в твиттере перед тем как передан Себастьяну.
Все срочно обновляемся!!!! Но учтите, что новый релиз не сразу попадет на все зеркала CPAN, лучше качайте прямо с официального сайта.
Если обновление слишком накладно, то koorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.com7tag:blogger.com,1999:blog-5399540152597236446.post-20046996858609923482011-03-28T00:36:00.001+03:002011-03-30T17:33:14.638+03:00Mojoliciuos - Производительность Mojo::JSONMojo::JSON VS JSON::PPРешил проверить производительность Mojo::JSON
Интересовала, естественно, производительность в сравнении с JSON::PP.
Колоссальная производительность JSON::XS лишает смысла сравнивать его с перловыми реализациями.
РезультатыТестирование показало, что Mojo::JSON в 1.5 раза быстрее чем JSON::PP при сериализации и в почти в 3 раза быстрее при десериализации. Очень даже неплохоkoorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.com4tag:blogger.com,1999:blog-5399540152597236446.post-67674088066758337452011-03-22T01:49:00.002+02:002011-03-23T00:04:12.332+02:00Guttman-Rosler Transform. Часть 1: Описание преобразования.Уже наверное больше года хочу написать про GRT(Guttman-Rosler Transform) и наконец-то дошли руки. Вернее, наткнулся на Sort::External::Cookbook, который и взял за основу своего поста. Повествование решил разбить на две части. Первая с описанием, вторая с результатами тестирования.
Собственно сабж.
Думаю многие знакомы с преобразованием Шварца, которое позволяет повысить эфективность koorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.com2tag:blogger.com,1999:blog-5399540152597236446.post-46832183224985763942011-02-27T20:48:00.000+02:002011-02-27T20:48:45.487+02:00Встречайте Mojolicious::Plugin::GravatarНаписал небольшой плагин для Mojolicious - Mojolicious::Plugin::Gravatar . Добавляет хелперы для работы с Gravatar.com. Думаю многие знакомы с этим сервисом( его используют cpan и github ), но кто не знаком - обратите внимание.
Для отображения аватарки - <%= gravatar $email %>
Для получения url аватарки - <%= gravatar_url $email %>
Плагин уже на GitHub koorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.com0tag:blogger.com,1999:blog-5399540152597236446.post-37806041181599066852011-02-21T09:10:00.002+02:002011-02-21T16:48:18.194+02:00Mojolicious - интервью с Себастьяном Риделем( Sebastian Riedel )Мой перевод интервью ActiveState с Себастьяном Риделем( Sebastian Riedel ), создателем веб-фреймворка Mojolicious. Это достаточно свободный перевод, но я старался не потерять суть.
14.02.2011 Себаcтьян зарелизил Mojolicious 1.1 - Perl веб-фреймворк следующего поколения. В связи с этим и состоялось интервью.
Tara: Почему ты занялся созданием Mojolicious?
Sebastian: По koorchikhttp://www.blogger.com/profile/17833110957902665733noreply@blogger.com1