Perl Beginners #2 参加してきた

主催者の方のレポート、他の参加者のレポートは、こちらから。
http://www.perl-beginners.org/2012/04/perl-beginners-2.html


以下レポートと感想など。各セッションのタイトルは曖昧ですすみません。

Beginners Session

Perlでの動的ページの作り方(@ctyoさん)

Q.Ajaxjsonを返すようなCGIを作ってみたけど、リクエスト毎のif文でいっぱいになっちゃう
A.

  • WAF使うと簡便な書き方ができるので楽だよ(@irmrさん)
  • json出力は、CPANにそれ用のモジュールがあるので使うといいよ。(@ytnobodyさん)
  • リクエストに対して処理を割り当てることを、URLのマッピングというよ。(@ytnobodyさん)
    • それをやるためのCPANモジュールもあるよ。
    • ディスパッチャという言葉もあるよ。


感想
僕ははじめからWAFを使っていたので、ディスパッチャの実装なんて考えたこともなく、結構新鮮だった。
ディスパッチャのCAPNモジュールがWAFの中でも使われてるっていうのは、考えたら当たり前だけど、どんなモジュール使ってるか意識したことなかったなあ。amon2だとAmon2::Web::Dispatcher::Liteという独自のを使ってるのね。
Amon2::Web::Dispatcher::Lite - Sinatra like dispatcher for Amon2 - metacpan.org

サーバにもモジュールを入れたい(@i4djunichiさん)

Q.サーバにもモジュールを入れたい。cpanmとlocal::libを使えばできるっぽい。

  • でもplackupできない……

A.

  • やりたいことはperlbrewとDarkPANでできると思う。(@ZIGOROuさん)
    • イントラネットに独自のCPANを作るのを、DarkPANと言う。その実装としてOrePANがある。
    • 以前はrpmで管理してた。そのバージョンを入手してOrePANリポジトリを作った。
  • 自社ではOrePANを使ってやってる(@ytnobodyさん)
  • local::libでやりたいことはperlbrewでできると思う。(@ZIGOROuさん)


感想
内容あんまり理解できてないので、上で的外れなこと書いてるかもしれない……
というか、最初はさくらのレンタルサーバーみたいな非root環境でCPAN使ってモジュール入れたいみたいな話かと思って聞いてた。それならあたしもlocal::libで苦労して環境整えたこともあるし、そのあとperlbrew入れてその手軽さに驚いたこともある。
OrePANは使ったことないけど、自作のモジュールを登録できるのは勉強になりそう。

休憩

休憩中は、隣の席になった@ctyoさんとお話しさせてもらった。
mod_perlなどメモリに常駐するものだとリソースを食うので、ちょっとしたものだったらCGIで動かした方がいいのではと思い、CGIで実装したのだとか。この辺のリソースの消費量というのも、意識したことがなかった。比較とかあるのでしょうかね。
あと、CGIとかhttpdとかplackとかの役割が二人ともよくわかっておらず、話しながら「?」「?」となった。この辺は後ろで。

LT

PSGIへの誘い(@ytnobodyさん)
  • 最近のperl製webアプリケーションではよく使われてる。
  • 普通のCGI, CGI.pm, PSGIでの書き方を比較
    • PSGIはシンプルな書き方ができるよ。
  • デプロイ*1比較
    • CGI:HTTPデーモンで設定する。特定のパス以下へのリクエストがきた場合に動かす指定をする。
    • PSGI:plackなら、サーバにplackをインストールし、plackupコマンドで起動する。HTTPデーモン不要。
  • PSGIライブコーディング
  • 質問:受けられるplackでリクエストは?
    • 理想的環境だと数千。実際はそれより低くなる。ベンチマークとるのが一番。(@ZIGOROuさん)
    • QPSの肌感覚はある程度知っておくべき。DBとAPだとオーダーが一桁違う(@ZIGOROuさん)


感想
PSGIは仕様、Plackは実装」というのを何度も聞いているんだけれども、PSGIの仕様に沿ったコーディングというのを見て、その辺の区別がようやく実感として得られた。
そしてCGI。これも仕様なんですね。PSGIと並べるとわかりやすい。

ストーカー力(@poohtarouさん)
  • @kazeburoさんを追っかけてたらストーカー認定された
    • ストーキング力
  • Kossy(WAF)初心者向けの題材として最適
  • 質問:導入されてるサービスは?
    • 回答:NHNさんの内部システムで使われてる
  • 質問:ポート番号を表に出したくないけど、どうやってる?
    • 回答:リバースプロキシ*2を使ってる。Apacheならmod_proxyを使う。内部的にはいろんなポート番号を使ってる。


感想
ストーカー名乗るならブログ二年分読んでからにしろということだと思います。

decode_contentを読む(@irmr_logさん)


感想
CPANモジュールのコードを読むのが勉強になるだろうとは思っていたけど、いざ読もうと思うと規模が大きくてどこから手を付けていいのかわからん。そういう意味で、decode_contentに絞ってというのはいい規模感だったのではなかろうか。
順を追って一緒に読むというのは、コードリーディングの入門としてよい経験になったと思う。

JPAセッション(@ZIGOROuさん)

  • 人生初の技術系じゃない発表
  • JPAの今年の活動
    • ジョブボード作ります
      • 企業の採用サイトのリンク集
      • 将来的にはperlを使ってる企業に開放したい
    • perldoc.jpを移管してJPAで運営します。
    • 著名pmを地域に派遣。移動宿泊費を出してます。
    • HOME | YAPC::Asia Tokyo 2012決まりました。
      • ボランティアさん募集中
        • irc.freenode.org で連絡とってます。
  • 質問:perldoc jpの翻訳ボランティアはできますか?


感想
地域pmや、今回のPerlBeginnersなど、Perlコミュニティが盛況である影には、JPAさんがいると思うのです。JPA++

懇親会

には参加せず。お金用意するの忘れた。
本編参加者に女性がおられたのでガチホモ合コン回避かと思われましたが、懇親会は無事ガチホモ合コンになったようでなによりです。

おまけ

休憩中の会話で、perlがwebサーバ上で動く仕組みがわかってなかったことがわかった。ビギナーズセッションで聞けばよかったです。で、その辺のことを調べてみた。

  • CGI, mod_perl, FastCGIというのは、Perl*3とwebサーバが連携するための仕様。インタフェースの決めごと。
  • Apache, lighttpd, nginxなどのwebサーバにはこれらのインタフェースでperlを動かすための機能が実装されていたりいなかったりする。

そしてPSGIについても。

  • インタフェースが違えば、Perlの書き方も変えなきゃならない。
    • それぞれ使いたいインタフェースを考慮して書く必要がある。
    • めんどうじゃね?
  • そこでPSGI
    • PSGIは共通インタフェース仕様
      • 同じコードをCGI, mod_perl, FastCGIなどの異なる環境で動かすためのもの
    • そしてPlack
      • PSGIで書かれたコードが動かせるwebサーバ
      • CGI, mod_perlなどのインタフェースをPSGIに変換し、PSGIで書かれたコードを実行できるようにする
      • といったあたりが実装されている。

まとめ

自分がちゃんと理解できてないところが、いくつか明確になったのが、今回の収穫だった。前回もそうだった気がする。
ビギナーズセッションを聞いたり、それに対しての答えを考えたりしていると、自分の中でスルーしてた疑問が掘り起こされる。

結構いい経験だと思う。

*1:プログラムを利用可能な状態にすること

*2:リクエストを振り分ける機能

*3:に限らないけど