2013/07/22

Perl and Email #3 ``Haineko'' at Kyoto.pm #5

開催日、近所の山鉾@室町通
祇園祭の山鉾がそろそろ立ち並ぶ頃、7月13日土曜日にはてなさんで開催されたKyoto.pm 05に行ってきました。近所なので歩いて十五分、近いです。

Kyoto.pmなので毎回京都市内で開催されてますが、仏事と重なったり仕事の納期が厳しいときと重なったりして、実は久しぶりの参加です。

当日、そろそろ会場に向かうかって時に激しい夕立が来ましたが、出る頃には止んでいて丁度よい打ち水になった感じでした。

さて、参加するからには本TalkでもLTでも、どこかで何か喋ること(発表)を心がけているので、「Perl and Email #3」という題目で20分程発表する機会を頂きました。

Perl and Email #3 ``Haineko''

そろそろ梅雨が明けて夏になるかという頃、Hainekoという名前でメール送信用のAPIを提供するHTTPdをMojoliciousで実装しました。Kyoto.pmの発表ではそれの話を、完成している範囲でざっくりと発表してきました。Kyoto.pmの開催に間に合うようにcommitしてgithubにpushしたので、発表当日のバージョンは0.0.1で、一応それなりに動くのですが完成度はまだまだ低めです。



スライドも、発表で使ったのは当日急いで作ったもので、画像が抜けてたりページが飛んでたり順序がおかしかったりしたので、後日加筆修正したものをslideshareに置いてきました。

名前について

無関係の猫
Hainekoという名前は、最初HTTP::API::ESMTPとかMail::API::HTTPとかSMTP::API::HTTPとか、そういう名前のモジュールにしようと思っていました。

しかしながら、Perlの名前空間に於けるルールとか暗黙の了解(?がよくわからんのと、モジュール名にHTTPとSMTPが同居しているのもどっちが主体かわからん感じで、また、単一のアプリケーションサーバとして動作するのでモジュールとはちょっと違うかなぁと思い、とりあえず機能的な部分の頭文字(HTTP API INTO ESMTP)を拾って、何かを足してHainekoになりました。猫は関係ありません。

実装の背景

蝎、はさみのところが太くてかわいい。
そろそろ梅雨入りするかなぁという頃、Javascriptでメールを送る方法について相談を受けて、それについて調べていました。

案外、汎用的な方法が存在していなくて、実際はサイトの構造に合わせて jQuery と jQuery-JSON (←そろそろjQuery本体に取り込んで欲しい)でうまいことデータを渡すようにしているというのが殆どみたいでしたし、その時もJSONでPOSTしてきたデータをうまいことメールで送るってコードで対応しました。

汎用的な方法がないようやったので、あったら多少は需要あるかなぁってのと、蛇蝎のごとく嫌われてる感じのSMTPを多少なりとも扱いやすくって事でHainekoを実装してみました。

あと、自分でコードを書くときは Net::SMTP, Net::SMTPS を使ってますが、SMTPセッションを開く前にMIMEエンコードしたり、それようのヘッダを作ったり、SMTPを知っていてもわりと面倒なので未来の自分が楽を出来るようにという意図もあります。

スライドの副題に書いている``Emailクラウド風''は、SendGridやPostmark,MailChimpのようなメール配信サービスが持っているAPIを指していて、それ自体は新しいものでも珍しいものでもありません。AmazonSESはXMLでメールのデータを送るので、APIという点は同じですが、JSONではないので方言の違うAPIってとこでしょうか。

Haineko 0.0.2

発表した直後のツイートや懇親会で、JPAさんの講師派遣プログラムでいらした@nekokakさんと@songmuさんにいろいろとアドバイスを頂きました。SMTPはわりと長い事扱っているのでそれなりに知ってる事も多いのですが、HTTPの事は然程でもないので、建設的な意見を貰えて良かったです。

何より、メールとかSMTPの事に興味ある人はいないやろうなぁと思っていたので、次に実装しようとしている点も含めて言及して頂いたのはありがたい限りです。






頂いた意見のうち、すぐに着手出来そうなのを実装して数日後にHaineko 0.0.2としてgithubにpushしました。頂いたコードのIndent styleへのダメ出しもなるべくpull requestを貰いやすいように次のコミットでPerl標準に従うよう変更しました。長年幅8TABの{は改行した後としていた僕にとっては革命的な変更でもありますが、やってみるとコードの景色が変わって新鮮でした。コミュニティの集まりや勉強会は、こういった意見が直接聞けるのも良いところの一つですね。

YAPC::Asia Tokyo 2013にむけて

もうちょいいろいろ実装して、YAPC::Asia Tokyo 2013に応募中のTalk「Perl and SMTP | Mojoliciousでメール送信APIを作った話」が万が一採用されでもしたら、秋ごろに開発出来ているところまでのHainekoについて40分喋ります。Talksページ内の場所はメール系モジュールの大御所RJBSさんの上になっています。

気になった発表

最近のDB開発とTengとちょっとだけRedis

songmuさんがTeng::Plugin::SearchJoinedってのを作ったと仰ってました。少し前からDBを扱うときは先ずTengを選択しているので興味深く聞きました。最近はどうしても面倒やったり同じコードが量産されそうなところだけinflate,deflateを使ってそれ以外はなるべく速度を重視したコードを書くように心がけています。JOINもSQLでJOINせずに予め必要な分だけSELECTしたのをキャッシュとして持っておいて、それを参照したり、滅多に(年単位で)変化しない値は読込むモジュールにハードコードしたりしてます。

Oneman

tamashiroyujiさんのOnemanってプロダクト。PSGIは名前を知っている程度やけど、コアモジュールのみで動作するpreforking PSGI server(Windowsでも動く!)、これは結構凄いのではないかと思う。本題とは関係ないですが、スライドで掲示されてたURLがtamashi.roとなっていて、ルーマニアのccTLDやったのが印象的でした。

Perlで有意差検定

skozawaさん。Statistics::*を使ったABテストで有意差検定。いつも統計処理はRを使っているので、Perlでも出来るなら慣れている分工数少なく出来るかも。あと、WebアプリのABテストでは95%でなくても90%信頼区間で検定してもよいのではって意見が興味深い。

まとめ

懇親会にも出席して、珍しい外国の瓶ビールとピザでいろいろ話をして、終わってからもう一件ぐらい酒飲みに行きたかったところではありますが、その後は冥府魔道な夜間メンテが予定されているので風呂屋で酔いと眠気を飛ばしてから仕事に戻りました。
今回もKyoto.pm面白かったです、@shiba_yu36さん開催お疲れさまでした!

0 件のコメント:

コメントを投稿