Posterous theme by Cory Watilo

Perl, который не даёт покоя многим

Мне нравятся личности, у которых есть своё мнение, которое может даже в корне не совпадать с моим. Они любят троллить и быть троллимы :)

Или уважаемый господин слоник только может производить кучи говна пропорционально выбранному ник-нейму?

http://slonik-v-domene.livejournal.com/106083.html

 

use Perl or die;

 

DBD::mysql и асинхронные запросы

Оказывается, в августе в DBD::mysql была добавлена поддержка асинхронной работы в prepare. За что спасибо Робу Хоельцу (Rob Hoelz). Теперь с версии 4.019 можно пользоваться этой фичей.

Пример асинхронной работы с mysql в Perl, используя DBD::mysql и AnyEvent http://hoelz.ro/blog/asynchronous-mysql-queries-in-perl-using-dbdmysql-and-anyevent.

В комментах я увидел, что Рокко Капутто, некогда мной любимый, жив и предлагает свои варианты на POE и Reflex. POE, привет! :-)

Это прекрасно, интересно теперь проверить стабильность работы данного решения.

 

use Perl or die;

 

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
 

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

 

Posterous, Perl, социальная активность среди разработчиков

Все у меня спрашивали, почему я переехал именно на Posterous? Странно, что это было не очевидно.

Ну во-первых, это модно :-)

Во-вторых, посещения Perl-постов (которые мигрировали с ЖЖ) резко выросли:

__2011-08-23__0

В-третьих, на Posterous появляется много блогов разных известных и/или крутых дядек. Так сходу вспомню только: kraihcoderwall, dotcloud и др.

В-четвертых, красивый интерфейс API, в который сразу влюбляешься.

И наконец-таки, что-то глючит, не работает, нельзя подключить домен с зоны ru (vs. Tumblr) и я это понимаю, сам же разработчик :-)

 

Сегодня хотел написать про апдейты своих модулей, про что-то еще, связанное с Perl, про то, как я не поехал на YAPC::Europe 2011, которое явно удалось, про опыт с MongoDB и Mojolicious + Plack::Middleware. Но решил, что это неинтересно, вот что интересно:

https://metacpan.org/author/SHARIFULN

http://coderwall.com/sharifulin (пока 5 ачивментов)

http://www.github-meets-cpan.com/ (на 82м месте)

Если я когда-то любил CPAN TS и мерился со всеми (сейчас этот сервис как-то не работает и совсем несовременный), то сейчас обращаю пристальное внимание к Github и социальным играм для разработчиков :)

 

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