Чтобы добавлять сообщения и комментарии, .

@dionys:
dionys

В Mojolicious 1.17 убрали поддержку черновика hixie-76 (http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76) протокола WebSocket. Однако последняя версия Safari (1.5.1) работает с WebSocket именно так, как описано в этом черновике.

Для поддержки Safari в проекте на основе Mojolicios написал модуль MojoX::Transaction::WebSocket76 (https://github.com/SetupRu/mojox-transaction-websocket76), реализующий поддержку WebSocket, как это описано в черновике hixie-76. Пока готова только серверная часть, в клиентской нужды не было.

@sharifulin:
sharifulin

Современный perldoc mojolicio.us

@und3f:
und3f

Моя статья об асинхронном Redis клиенте на Mojo tinyurl.com

@sharifulin:
sharifulin

Обновил Mojolicious::Plugin::Mail, расширил документацию, добавил пример github.com Проще отправить письмо, по-моему, невозможно :) github.com

@sharifulin:
sharifulin

Теперь в шаблонах при выводе переменных не будет ворнингов. Ура! :) github.com

@und3f:
und3f

github.com асинхронный Redis клиент на Mojo стероидах

@und3f:
und3f

Кто-то использовал upload файлов на mojo? При загрузке на mojo сервер все работает хорошо, но когда mojo запускается через apache( посредством FastCgiServer ) файлы приходят недогруженными.

@sharifulin:
sharifulin

Проверка на валидность урлы в любом скрипте: Mojo::URL->new( $link)->to_abs;

@sharifulin:
sharifulin

Как же круто, что в Mojolicious приложениях можно использовать свои плагины, например, плагин, контексный проекту и подключающий различные хелперы по форматированию и прочее. $self->plugin('App::Helpers'); Включу эту примочку в новую версию генератора SharifulinApp.

@sharifulin:
sharifulin

Внезапно вышла новая версия плагина Mojolicious::Plugin::ShareHelpers, с поддержкой share в Мой Мир. github.com

@sharifulin:
sharifulin

Сегодня обновил Mojolicious::Plugin::Mail github.com Отправка писем стала еще проще, в стиле mojo :) Спасибо всем кому это интересно github.com

@sharifulin:
sharifulin

Первый раз оправдано в шаблоне использовал //. В TT и CTPP2 вам такого даже не снилось :)

@sharifulin:
sharifulin

Внезапно понимаешь, что код на Perl стал проще, чем код на PHP. Сравните github.com vs. ufacode.ru И еще раздавать свой код, через zip – чисто похапешная тема? :)

@helg:
helg

И что, всем пофиг на эту фичу? groups.google.com

@sharifulin:
sharifulin

Получился вот такой модуль для отправки почты в Mojolicious – Mojolicious::Plugin::Mail github.com Предыдущие renderer-ы удалил, т.к. глючали и были без тестов. Можете тестировать :)

@spleenjack:
spleenjack

Обновил Mojolicious. Обнаружил, что для некоторых методов Test::Mojo удалена возможность указать свой description. Долго думал, но смысла в таком удалении не нашел.

@sharifulin:
sharifulin

Сегодня день багрепортов starman + mojo = fail, nginx + mojo = fail groups.google.com groups.google.com Пока mojo app запускаю под plackup :)

@sharifulin:
sharifulin

Сделал плагин для mail рендеринга github.com

@sharifulin:
sharifulin

Устал копипастить, сделал свой generate для Mojolicious-приложений github.com

@sharifulin:
sharifulin

Если кайф использовать в Mojolicious-контроллере другой контроллер, то можно сделать так gist.github.com shift – весь объект self передаем в новый контроллер, чтобы app, req, res и прочее было доступно

@und3f:
und3f

У mojo очень приятная асинхронность. Есть модуль, задача которого отправить результаты ввода пользователя в другую систему с помощью нескольких HTTP запросов (к которые входят авторизация в другой системе и отправка формы с результатами).
В результате вырисовывается такой код: pastebin.ca
В случае, если модуль будет запущен из Mojo окружения (mojo веб сервер) запросы будут выполнены асинхронно с выполнением остального кода. Если приложение будет запущено из среды, где не используется Mojo — данная процедура будет выполнена в блокирующем режиме.

@sharifulin:
sharifulin

Приколько переписал API-сервер с Mojolicious::Lite на Mojolicious. Заработало с первой попытки :)

@spleenjack:
spleenjack

Пытался построить цепочки вложенных роутов с условиями по методу запроса — не вышло. С такой цепочкой: $self->routes->waypoint('/user/:user')->via('get')->to('user#read')->route('/profile')->via('post')->to('profile#create') — POST-запрос до user:user/profile никогда не дойдет. Приходится делать два отдельных роута.

@sattellite:
sattellite

Русская документация по mojolicious почти готова :) translated.by

@sharifulin:
sharifulin

Mojo::Base – очень крут, создает конструктор new и умеет работать с атрибутами (аксесоры) чтение-запись. Создавать объекты очень просто: package Foo; use base 'Mojo::Base'; __PACKAGE__->attr('db'); ...

@sharifulin:
sharifulin

Настроить таймаут на коннект в Mojo::Client легко: $client->ioloop->connect_timeout(15);

@sharifulin:
sharifulin

Если Mojo::Client не работает с https:// урлами, поставьте IO::Socket::SSL. Все заработает.

@sharifulin:
sharifulin

Если все офигевали от названия Mojo, то теперь радуйтесь – появился модуль ojo.pm Использовать оч просто: perl -Mojo -e' ... '

@sharifulin:
sharifulin

Теперь мои модули так начинаются gist.github.com и снабжены тестами (Test::More и/или Test::Mojo достаточно).

@spleenjack:
spleenjack

Решил добавить проверку на тип значения в распарсенном JSON (число или строка). Test::Deep::num и str тип зачем-то меняют. Выяснилось, что можно проверять по наличию флагов IOK, NOK и POK у скаляра. В итоге написал две реализации: чистый XS и с использованием B::Flags. Накалякал 52 теста, вроде работает. Не покидает чувство, что изобрел велосипед. (Спасибо @mvuets за помощь!) Кстати, оказалось, что Mojo::Json из чисел делает строки :-/

@sharifulin:
sharifulin

Мелочь, а приятно github.com Определение, аякс-не аякс

@sattellite:
sattellite

Объясните мне, дураку, как всей этой мощью воспользоваться. А то вот через Mojolicious::Lite, создается демон-сервер и всё работает, а через Mojolicious::Template просто выхлоп в терминал, а в браузере пусто. Хочется создать скрипт, который будет обрабатываться моим сервером и отдавать страницу, как CGI. Но я, что-то не пойму как это сделать.

@sharifulin:
sharifulin

Выложил на github.com Mojolicious-плагин для определения географического месторасположения, испольуя координаты или IP-адрес github.com

@sharifulin:
sharifulin

Сделал плагин Mojolicious::Plugin::GeoLocation для определения местоположения по геокоординатам или IP. Помоему круто получилось, надо потестить и потом выложить. Зависимости: Geo::IP, Geo::IP::Base::RU, Geo::Geocoder (это мой для гугла и яндекса).

@sharifulin:
sharifulin

Пишу API сервер на Mojolicious::Lite, формат данных JSON. Решил сделать автоматическое преобраование в XML, причём в виде плагина, чтобы код приложения не менять. Получился плагин Mojolicious::Plugin::JsonToXml, который сам все делает :) Сразу написал тесты к нему, работает)) Также пишу тесты для тестирования API. Очень нравится, получается быстро и удобно. Скоро выложу на github.com

@sharifulin:
sharifulin

Вчера писал на Mojolicious TCP-клиент, сегодня HTTP-клиент и использование CSS3 селекторов. Пока тяжело, но получается)

@sharifulin:
sharifulin

Балуюсь с plack и starman для Mojolicious-приложений. Starman рвет все, mojo daemon в 20 раз :) Очень круто, starman быстрее FCGI, plack по умолчанию равносилен FCGI.

@sharifulin:
sharifulin

Если нужно выполнить какие-нибудь действия до или после всех контроллеров, используйте хуки. Например, код перед всеми контроллерами: app->plugins->add_hook(before_dispatch => sub {
my($self, $c) = @_;

$c->stash(last => app->db->select('select * from cpan order by -id limit 1')->[0]);
});

@sharifulin:
sharifulin

Сегодня прокачался в направление I18N для Mojo-приложений. Написал свой плагин i18n, использовал код @vti плюс свои наработки. Познакомился с search.cpan.org Сначала понравилось. Но вопрос со склонениями в русском языке и форматами дат остается открытым. Мне не нравится хранить все переводы в модуле (хеше), причем без вложеностей. Два раза уже писал свою систему локализации, пришел к выводу, что напишу и в третий раз :)

@sharifulin:
sharifulin

Себастьян Ридель сделал парсинг в XML в Mojo, используя CSS3-селекторы :) Это очень круто! github.com $t->get_ok('/foo')->element_is('foo.bar > baz', 'Hello World!');/b423e23d16395f1e5112d53f6fb1eadcb2a274c5