Home

28 Сент, 2009

AnyEvent, AnyEvent::HTTP и Mojo::ByteStream

Удивление, удивление-два и привычка :)

Был удивлен, но оказывается AnyEvent/EV не позволяет выполнять вложенные condvar, получается рекурсия.
Вложенные кондвары не нужны, код легко модифицировать на работу либо с одним (самое главное send вызвать в самый последний момент, чтобы вся асинхронная работа была выполнена), либо с несколькими, тогда вызовы должны быть последовательными. Пример.

Так же был удивлён, что AnyEvent::HTTP автоматически заполняет заголовок Referer у запроса (для работы по умолчанию это лишнее) и не искейпит символы в урле (очень плохо, LWP::UserAgent и/или PoCo::Client::HTTP это делают на автомате, т.к. используют HTTP::Request).

За последнее время я так привык работать с Mojo (напомню, Mojo – pure perl http-фреймворк, "почти" без зависимостей, "веб в коробке"), что при возникновение задач вне окружения Mojo, которые связаны с перекодированием символом, не задумываясь, использую модуль Mojo::ByteStream. Например, для искейпинга символов в урле (проблема с AnyEvent::HTTP) использую следующий код:
Mojo::ByteStream->new($str)->url_escape

Для перевода html-последовательности символов вида Г в печатные символы использую следующий код:

Mojo::ByteStream->new($str)->encode('utf8')->html_unescape

Очень удобно и не надо вспоминать, в каком модуле реализован данный функционал.


use Perl or die;

JFDI



Метки: , , ,

11 Сент, 2009

Запуск проектов на AnyEvent и Mojo


AnyEvent


Запустили твиттеры всех пользователей СТАНЦИИ 2.0, о котором я писал в предыдущем посте.
Используем AnyEvent::Twitter::Stream. Сам API находится в альфа-тестировании, поэтому мы работаем так же :)

Получилось очень круто, иногда интересней, чем ЧАТЕГ :)
Пишите в твиттер и слушайте СТАНЦИЮ 2.0!


Mojo


На днях запустили Рыков.ру, это первый публичный проект, полностью написанный на Mojolicious, в качестве шаблонизатора простой php-like шаблонизатор Mojo::Template, в качестве интерфейса – daemon_prefork, в момент разработки –  daemon c установленной переменной окружения MOJO_RELOAD  (изменения применяются без перезапуска), профилирование – с помошью Devel::NYProf и CGI.

В тестовом режиме запустили API для Маруси. Серверная часть написана на Mojolicious::Lite + MojoX::Renderer::JSON.
Получилось очень круто и все в одном файле, всего 246 строк :)


Что можно сказать про Mojo. Нет стабильной версии, постоянно выходят новые версии без обратной совместимости, но это нормально :)
Многие фичи приходится дописывать самому, автор лоялен к обсуждению функционала Mojo, принимает патчи, фиксит баги.
Иногда меня и мои просьбы не понимает )))
В целом, мне Mojo/Mojolicious нравится, простой и очень удобный. Даже шаблонизатор мне понравился, хотя в начале я не понимал его.



use Perl or die;

JFDI


3 Сент, 2009

Риалтайм твиттер – риал? тайм!

У отличного сервиса Twitter есть хороший API, особенность – Streaming API, возможность получать данные из твиттера мгновенно, почти в реальном времени (риалтайм веб?).

Меня заинтересовала такая возможность, тем более есть необходимость получать статусы из твиттера всех пользователей СТАНЦИИ 2.0 (конечно, у кого есть твиттер) и отображать их на странице в реальном времени. Похожая идея реализована тут, только это видимость реального времени, т.к. делается один запрос на сервер, и постепенно по одному статусу показывается на странице, затем следующий запрос и так далее :)

Read more... )


10 Авг, 2009

Perl. Коротко об AnyEvent

 AnyEvent – очень крут! :)

Ссылки по теме:
Метки: ,

28 Дек, 2008

Perl. Мультиплекс и AnyEvent::HTTPD

Две недели назад нужно было написать простой (легкий) веб-сервер, решил еще раз сделать выбор между POE, IO::Lambda и AnyEvent.
IO::Lambda -- сразу не заработала, позже выяснилось, что я соединение не закрывал (спасибо автору модуля за техподдержку :)
AnyEvent. Тут я взял AnyEvent::HTTPD (не от Леманна) и поразился, что модуль написан плохо, в реврайт правилах все слеши заменены на _ (ужас :), работа с тсп по нескольким модулям размазана и работает только под 5.10 (причем использованы только именнованные значения в регекспах, даже say и given нет :). За 10 минут я полностью переписал на 5.8. Заработало, но как-то не очень.
В итоге я написал на POE, решение получилось красивым, хоть по скорости пое проигрывает (немного), но достойной замены  я еще не нашел.

Вернусь к AnyEvent:HTTPD, сегодня вышел апдейт модуля и в ченже вот, что написано:
 
0.04 Sun Dec 28 15:48:28 CET 2008
- removed TCP* classes and using AnyEvent::Handle instead.
- added size and maxlength args to the C<entry> function in Appgets
- changed the API to actually call the events for all path segments
of an URL. also removed the ugly '/' => '_' mapping for the path
seperators. Sorry for any breakage in your code ;-/
- removed Perl 5.10 dependency.

ААА, он сам понял все или я управляю людьми на расстояние  :-)
 
Метки: , , ,

23 Ноя, 2008

Perl. IO::Lambda

IO::Lambda версии 0.41 -- нет слов, просто супер: асинхронный DBI, очередь задач, форки и треды, самое интересное в eg/*.
[info]mcfist, очень круто, респект тебе :)

Read more... )
Метки: , , ,

18 Июл, 2008

Perl. AnyEvent 4.21

AnyEvent обновился до 4.21, я поучаствовал в одном багфиксе :)
список изменений

4.21 Thu Jul 17 14:40:05 CEST 2008
- INCOMPATIBLE CHANGE: AnyEvent::Util::fork_call now has a prototype
which is incompatible to previous invocation syntax.
- work around more windows perl bugs in fork_call. I cannot imagine
why anybody would bother implementing fork in such an obviously
unusable way.
- avoid calling $do_retry if the request has already finished in
AnyEvent::DNS, thus avoiding an exception (reported by Anatoly
K. Sharifulin).
Метки: ,

12 Май, 2008

Perl. Событийная машина и BDB

Только сегодня подумал, что POE не хватает клиента для работы с BerkleyDB или BDB.
И сегодня в новинках CPAN нахожу, что появился модуль AnyEvent::BDB - вот это то, что надо :)
Все больше начинаю смотреть в сторону AnyEvent, я до сих пор под впечатлением от бенчмарка.
Метки: , , , ,
sharifulin

Декабрь 2009

Вс Пн Вт Ср Чт Пт Сб
  12345
6789101112
13141516171819
20212223242526
2728293031  

Реклама

Метки

Трансляция

RSS Atom
Разработано LiveJournal.com