2011年08月18日

Plack::Middleware::ErrorpageRedirectloopDefence

たまたまhttp://twitter.com/kazeburo/status/103842813548040192を見かけたのでネタで作ってみただけのコード。

https://github.com/yappo/p5-Plack-Middleware-ErrorpageRedirectloopDefence

今回のリクエストが前回みてたURLと同じなのに関わらず、エラーページを返しちゃう場合にブラウザ側でのコンテンツの更新を抑止する為のmiddleware。
サンプルはhttps://github.com/yappo/p5-Plack-Middleware-ErrorpageRedirectloopDefence/blob/master/sample.psgiみたいなかんじ。

普通にplackupした時に http://localhost:5000/ok にアクセスすると3秒毎にリロードが発生しますが、 http::/localhost:5000/error とかにアクセスすると、リロードが一回しか行われないのが解るとおもいます。

エラーページを表示しているのに、自分自身をリロードする事になってしまう理由は色々考えられますが、エラーページを何回もリロードする意味は無いよねと思って作ってみただけです。

マジレスすると


  • この仕組みを使わなければいけないケースは、何かが間違っている

  • ライブカメラ等の、同じURLに対してmeta-refreshが必須なページに導入すると、たまたまエラーが発生した時にユーザにエラーであると通知する手段がなくなる


等の理由により使うべきではないです。

Posted by Yappo at 02:00 | Comments (0) | TrackBack

2011年08月16日

App::Ikachan - 様々なサーバのバッチ処理の結果等を IRC のチャンネルに通知するサーバ

皆さんは、日々のお仕事の中で様々なバッチ処理やデプロイツールまたはCIツールを動かすと思います。
一般的なネット系のエンジニアは仕事のコミュニケーション手段として IRC を用いているというのが有名ですが、これらバッチ処理の処理状況等を普段の生活環境である IRC に流せたら便利です。

実際に前の会社では、 deploy tool, ci tool, etc batch script の処理結果を社内 IRC channel に通知するような物を hirose31 さんが作ってくれて、とても便利でございました。

とはいえ、各種スクリプトが独自に IRC server に繋ぎに行く事は大げさですし、バッチが走る都度 join/part されたらうざいです。
そこで前の会社では、 IRC server につながりっぱなしなサーバを立てて置いて、 iDC などのインフラからいつでも何処でも IKC を使ってメッセージを送ると指定したチャンネルにメッセージを投げてくれると言う便利な物がありました。

実際自分が担当していないプロジェクトでも、今現在他のサービスでどんな作業が行われてるかをリアルタイムで把握出来るのは、その会社で働いている上でとても役に立つ事が多いです。

狙いとしては、こうした簡単に通知を行うインフラが整う事で、気軽に各種処理状況が共有出来るようになる事により、今まで何かの処理スクリプトを叩いて IRC とかで手作業で結果報告していたような類いの要件も、全自動化される事により飯が捗るといった事を期待しています。

実際 deploy tool とかに仕込んどくだけでもだいぶ便利ですけどね。

と言うような事をもんもんと思っていたのでさっき作りました。
https://github.com/yappo/p5-App-Ikachan
依存モジュールも、 AnyEvent, Plack, Twigyy, AnySan 程度で且つ、実際は1つの小さいスクリプトファイルなので扱いやすいとは思います。
(とはいえ AnySan が github にしかなくて install 面倒いので、そろそろ CPAN にうpりますが。。。)

使い方もとても簡単で

 $ ikachan -S irc_server_address -N nickname[ -K irc_server_password][ -P irc_server_port]
という形でサーバを立ち上げるだけです。
デフォルトでは http://localhost:4979/ に http server が立ち上がります。
API 仕様などはサーバにブラウザでアクセスした時に表示されます。
http server の address/port が気に食わなければ
$ ikachan -h http_host -p http_port
といったオプションも利用可能です。

チャンネルに入るには

$ curl -F channel=\#catalyst-ja http://localhost:4979/join
が使えます。

チャンネルを抜けるには

$ curl -F channel=\#catalyst-ja http://localhost:4979/leave
が使えます。

チャンネルにポストするには

$ curl -F channel=\#catalyst-ja -F message=こんにちわこんにちわ! http://localhost:4979/notice
が使えます。

ikachan はどのチャンネルに join したか等の情報をストレージに保存しないので、一度プロセスを殺したら、まえ入っていたチャンネルが解らなくなります。( http://localhost:4979/channel_list の内容をバックアップしとけばいいけど )
なので、 notice コマンドを送る時には join コマンドを一緒に送る事をお勧めします。

$ curl -F channel=\#catalyst-ja http://localhost:4979/join
$ curl -F channel=\#catalyst-ja -F message=こんにちわこんにちわ! http://localhost:4979/notice

ikachan を操作するプロトコルは HTTP なので、様々な言語や環境で扱いやすいんじゃないかなと思います。ので、これを機に是非お試し下さい。

作って早々、 kazeburo さんに社内サーバに設置してもらって、作り途中の開発支援ツールに導入して便利になった予定です!

作った後に、まったく同じ事をする kan さんが作った App::donburi の存在に気づいたのですが、ちょっとおおがかりだし founder が irc 使わない会社に転職したりで、やっぱり知ってても使わなかったと思った。

Posted by Yappo at 22:13 | Comments (0) | TrackBack

2011年08月15日

Devel::GlobalDestruction

Perl 終了時のゴミ回収フェーズに入ってるかどうかを調べるモジュール。
くわしくはhttp://perl-users.jp/expert_perl/hentai_modules.htmlでも見ればおk。

一番したに貼付けたサンプルコードを見ると、きっちり END フェーズの後にフラグが立ってるのがわかる。

しかし、 do と normal の実行順序が違うのが気になった。これは do ブロックの中に文を追加すると想定通りの実行順になるので、 perl 側でなんか最適化してるのかなーとかおもた。

ので B::Deparse さんの出番だとおもったけど https://gist.github.com/1145662よーわからん。

あ、 perl 5.14.1

Posted by Yappo at 12:31 | Comments (0) | TrackBack

2011年08月04日

Joining livedoor

So, here's the update I promised this week: I'm thrilled to join livedoor as a software engineer, starting Aug.

co-workers with lestrrat, nipotan, kazeburo, mala(bulkneets), 941(YAPC::Asia 2011 coordinator) And too many perl hackers ;)

みんなが感動するような転職エントリを書こうと頑張っていたのですが、僕の才能では無理だったようなのでもう書きます。自社サービスのブログでお知らせしたとおり8月1日からライブドアに通っております。

20人以上いる会社で働くのが9年ぶりくらいなので緊張するかと思ったのですが、よく考えたら周りを気にしないタイプだったのでなんも問題ありませんでした。中に入ってから色々な事は大体理解しました。

Perlのお仕事を引き続きやるかと思いきや入社して最初にやった事がGyazo.appを社内gyazo serverで使えるようにrubyのファイルをいじって、それの配布用の.dmgファイル作ったり、開発環境を快適にするbash scriptを書いたりしててPerlを書く事を忘れてましたが(というか業務と全然関係なくて自分が欲しいから作っただけ)、今日からまじめにお仕事するのでPerlを書くとおもいまする。

すったもんだがありまして80日くらいニート生活をしてたので、献本していただいた本の書評を書いたりwebアプリを書いたりする予定だったのですがダメ人間先輩と同じでなんもバリューだせませんでした。
ただ、僕はダメ人間先輩と違って日帰り伊豆半島一周ツアーしたり、温泉行ったり海行ったりと遠くに遊びに行ってて、遊ぶのに忙しくて出来なかっただけですけども。
この色々遊びに行きまくった時の経験も仕事に生かせたらいいなと思う次第。

人生で初めての就職をする事になってしまったので、本気で就職活動の仕方がわからなかったので色々な会社訪問をさせてもらいました。
お世話になった皆様がたがた色々と無理なお願いを聞いていただいてありがとうございます!
今回は本当に本当に沢山の方々に支えていただいて就職できたと思っております。ので、さっそくこの経験をOpen&ShareすべくYAPC::AsiaのLTで今回の就職の話についてtalkしたいなーとおもいます。(rejectされなければ)

昨夜tomi-ruさんに「yappoの転職先とか興味ないし、どーせお前はどこいってもお前のまんまだからどーでもいいよ」とも言われましたが、みなさま今後ともよろしくですね。

Posted by Yappo at 12:20 | Comments (0) | TrackBack

Lion の絵文字を Encode::JP::Mobile で扱う研究会

Mac OS X 10.7 から普通に💩💩💩💩💩などの絵文字が取り扱えるようになりましたので Encode::JP::Mobile で扱えるのかどうか調べたらいいのかなと思ったのでメモ。

このへん kawanet さんが詳しそう。

Posted by Yappo at 11:18 | Comments (0) | TrackBack

2011年08月02日

life

I was laid off by last employer at July 2011. I got a new Job from August, 1st, 2011.
I'm still writing perl5 code.

Posted by Yappo at 01:51 | Comments (0) | TrackBack