北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

Yokohama Perl Mongers テクニカルトーク #1

横浜人ですので。例のごとくログとります。

yokohama.pmの成り立ち / clouderさん

  • zigorouさんがCatalystをやろうと言っていた
  • twitterで流してIRC立ち上げた
  • いつのまにかリーダーになっていた

DIS られない Catalyst とのつきあい方 / ikasam_aさん

  • Plugin
    • Pluginを作ると・・・「CPANは幼稚園児の砂場じゃない」
    • Pluginを使うと・・・「多くの人がひどい目にあうものを勧めるのか」
    • リクエストのライフサイクルでは、必要 ← IRCやMLでネゴるとDISられない
  • Pluginを避けて、Componentsをいじる
    • 拡張Controller
    • Catalyst::Contorller::FormBuilder, Catalyst::Contorller::Resources等
  • Modelの拡張
  • Viewの拡張
    • Catalyst::View::TTとかCatalyst::View::Emailとか
    • Catalyst::View::TT が良くも悪くも手本となる
    • $cとか、stash->{template}が混ざってるのが嫌とか
  • Catalyst::View::Templated が去年出た
    • $cが嫌 → Catalyst::Component::ACCEPT_CONTEXT
    • stash->{template}が嫌 → View固有のキーを利用
    • ほぼTTッポク使える
  • Catalyst::View::Tenjin
  • DISられないためには
    • 「例えば、Catalystを避ける」
    • WAFを作る環境は揃っている

FormValidator::LazyWay / tomyheroさん

  • 読み方は、「とぅまいひーろー」
  • FormValidator::LazyWay
    • DRYな感じ ← アプリケーション全体で、フィールド名ごとに設定
    • 検証モジュールがメッセージを持ってる。i18n
    • 気軽に使える
  • サンプルコード紹介
    • メールアドレスとユーザIDとかのバリデート
    • Q. メールアドレスの@の前に.があると?
    • A. エラーになります。
    • Q. DoCoMoに飛ばないですね
    • A. 使ってないので。でも、ルールをEmail::email_looseにすればいけます
    • regex_mapで、正規表現でバリデートを指定できる
    • Data::Form::Validator と同じ使い方
    • want_arrayで配列指定ができる
    • lnag: で複数言語が対応可能
    • 自作のモジュールも指定可能
  • 今後の予定
    • 入力をfilterする機能
    • 複数フィールドを合成してvalidate
    • 検証後に値を変更
    • 実運用経験
  • Q. 指定されてないフィールドが入ってくるとまずいのでは?
  • A. validate対象ではない物は渡って来ない
  • Q. 国際化に関して、Googleクローラーが来ても大丈夫?
  • A. 指定した言語のみになるので、OK
  • Q. 国際化の文言の調整は?
  • A. yamlには依存してないので、大丈夫
  • codereposにソースは上がってる

Imager / clouderさん

  • Imager
    • Tony Cookさんによる、イメージ操作ライブラリ
    • wikiもあり、podも充実
  • GD、Image::Magickが競合
  • Imager
    • インストールが楽 / libjpegとかは必要だけど、他はいらない
    • APIが奇麗、Perlっぽい
    • 拡張が楽(PurePerl or XS)
  • 弱点
    • 複雑なことをするには、画像変換の知識が必要
    • 処理速度が遅い
    • バギー(mod_perlと使うと、変なことになることもあるっぽい)
  • コード例
    • 大きさ変更
    • 文字の描画(フォントファイルを指定、日本語も大丈夫)
  • Imager::Inline
    • インラインCが利用できる
    • ピクセルの評価も出来る
  • インラインCではなく、XSで作る
    • .xsを作って、XSLoaderから呼ぶ
  • Q. 指定できるフォントは?
  • A. Trueタイプとか普通にいけます
  • Q. 縦書きは?
  • A. やってません

Introduction Parse::Yapp / ZIGOROuさん

  • Lexer / 字句解析機。Talkenに分割する
  • Parser / 広義ではLexer + Parser。構文儀を作成する
  • パーザのアルゴリズム
    • LL(k) | 文字列を左から右に読み、左端検出。トップダウン構文解析
    • LR(k) | LLの逆
    • LALR(k) | 先読み型。一番普及。LR(k)との違いは微妙?
  • CPANにあるパーザ
    • Parse::RecDescent / 再帰下降パーザ, Damian さん, Lexerも入ってる, actionも文字列
    • Parse::Yapp *1 / yaccとほぼ同じ。TT syntaxパーザはこれで作られていた
  • BNF記法
    • EBNFとかABNFもあり、世間でよく見るのはEBNF。Parse::YappではBNF
  • JSONの配列の例
    • ABNFでは
array = begin-array [ value *( value-separator value ) ] end-array
array:
  begin_array value_list end_array
  ;
value_list:
  /* empty */ |
  value value_list_after
  ;
value_list_after
  /* empty */ |
  value_separator value value_list_after
  ;
  • 例題: JSONの配列、中身は数値(int)のみ。パーズしてこれをPerlにする。
    • 0と1〜9は分けて定義する(始まりは0じゃないので)
    • まずはBNFを作る
  • shiftとreduce
    • shift / ルールを構成するサブルールの状態が遷移すること
    • たとえば、end_arrayが確定した後value_listにうつる場合
    • reduce / 特定のルールが満たされたこと
    • 例えば、array: ルールが満たされたこと
  • ypファイルを、yappコマンドでpmファイルを作る
  • ypファイル
    • ヘッダ、ルール、フッタ(%%行区切り)
    • ヘッダで、use宣言等
    • ルールは、BNFとアクション
    • フッタはyylex関数や必要な処理
    • BNFに、アクションを書く
    • WSやNUMBERは、レクサ側でシンボルとしてトークンにしている
  • 今回は話さなかった
    • レクサは? → Perse::LexやXSで
    • ヘッダセクションでヒントが使える
    • shift/reduce, reduce/reduce のコンフリクト
    • yyerror / エラーハンドリング
  • 速習yaccがおすすめ(Rubyソース完全解説、より)
  • Q. パースの逆は出来る?
  • A. 飲み会で
  • Q. デバグは?
  • A. アクションにデバグコードを差し込む
  • Q. reduce, shift と アクションの関係は?
  • A. reduceのタイミングでアクションが実行される
  • Q. Perlオブジェクトをトークンとして返せる?
  • A. やればできるはず
  • Q. yaccとの速度の関係は?
  • A. Cの方が100倍速い
  • Q. shift/reduceの競合のデバグは?
  • A. 確かshift優先になる。reduce/reduceは致命的なので起こらないようにルールを書くこと。Yappは教えてくれない。少しずつルールを追加してYappを実行すべし。どーんと書くのは絶対辞めた方がいい。
  • %expect でヒントを書ける

YAPC::Asiaの開き方 / 台場さん

  • 始まり → id:TAKESAKO さんより、nothingmuchさんの来日情報
  • 後援者の選び方は、この話の対象外
  • 開催場所と開催日時
    • 収容人数、交通、値段、年齢
    • 渋谷シダックスホール(高い)、法学館(NET駄目)、秋葉原コンベンションホール(高級)、津田ホール
  • Seasar Confarensで法政大学でやってたことを参考に、大学を当たった
  • 大学の難点 → 年度をまたがると、話しがうまく進まない
  • 金勘定
    • 赤字分は、小山さんによる補填
    • チケットサービスの手数料は先に払い、払い戻しは興行終了後なため
    • 今年はPaypal。赤字にならなかった。ビジネスアカウントにする。
  • Paypalの難点
    • 手元に紙チケットがないので、CHECKINが大変
    • 支払いのフローのシステム化 → Act を利用
  • ACTの難点
    • ACTのサーバは世界でひとつ。そこにコードを入れないとNG。クローラが日本語拾わない
    • 一括メール送信機能がない(支払い換気用)
    • Talk内容の投票機能が欲しい
    • CHECKIN機能がない。id:miyagawaさんが前日にCGI書いた。
    • ACTでPayPal使ったのは世界初。id:miyagawaさんがフランスにも行ったらしい。
    • ACT Cook book希望
  • 備品
    • プロジェクター。4000ルーメン。
    • スクリーン。1週間前にあわてて調達
  • 便利なお店
    • eタマヤ(プロジェクタ)、ダスキンレントオール(スクリーン)
    • 印刷関連 → やすいや、バンフー
  • 搬入搬出
    • 前夜祭は、搬入場所確保のため場所が余ってたからやったらしい
  • ゴミ問題
    • 段ボール150箱、ラーメン食べ残しとか
  • 次回の課題 → 京都だろうから気にしなくていいw
  • リスク管理
    • 雨天のランチ。Yappoさんの怪我。
  • そろそろ組織化が必要
  • Q. カンファレンスのために、チェックシートがあるといい
  • A. 毎回作ろうとしているが、面倒だから作れていない
  • Q. QRコードは外国人さんは使えなかったのでは?
  • A. 日本のQRコードを外国に見せつけたかった

Test::Declare / nekokakuさん

  • 横浜の紹介
  • テストがないと、激しくDISられる
  • Test::Baseで書きにくい部分をDeclare的に
  • Test::Declare
    • DSL風、必要モジュールを一発use、planの数を自動で
    • blocks テストメソッドの数を数える
    • describe テストの大枠
    • init 前処理。setup
    • test テスト実行
    • cleanup 後処理
  • TODO
    • plan数のカウントをPPIでもっとなんとかできない?
    • Test::* のfunctionのラップが甘いかも
  • gihyo.jpでPerlのテスト手法の記事書いた
  • Q. no_planでは駄目?
  • A. 途中でdieしても、失敗扱いにならない

できるXIRCD / kanさん

  • XIRCD
    • POEベース、プラガブル
  • POE::Sessionの例。お約束の処理が面倒
  • MooseX::POEの恩恵 : event 'event name' => sub
  • Mooseなattributeに設定を記述すると読み込まれる
  • post_message nick => message と書ける
  • 将来
    • Componentのテストを簡単に書ける
    • POCO::Client::HTTPをもっと気軽に
    • Plugin機構(ログ、翻訳)
    • IRCクライアントからの変更
    • tiarra, mobircイラネ の状態にする
  • Q. POEだとメモリとかで落ちたりしないか?
  • A. 手元では落ちてない。問題ない
  • Q. twitterのエラーで落ちたりしない?
  • A. JSONだと思って処理するが、ステータス200で返ってくるエラーメッセージのため
  • Q. コンポーネント追加は無停止ではできない?
  • A. 現状はまだできない。reloadとかは実装したい

Email::Address::Loose, Email::Address::JP::Mobile / tomi-ruさん

  • MobileCat プロジェクト
    • Catalystを中心に、モバイルサイト構築について考える
    • ないものは作る
  • 表題のモジュールはcodereposにある
  • Email::Address::Loose
    • Email::Address の Loose版
    • DocomoとかAUのメールがパースできない
    • foo..bar@docomo.ne.jp → bar@docomo.ne.jp とパースされる
  • 既存の物 Email::Valid::Loose → パースは出来ない
  • XMl::Liberalな機能
  • Email::Address::JP::Mobile
    • HTTP::MobileAgentのメール版
    • Mail::Address::MobileJpでも可能だが

yusukebeさん

PCがつながらなかったので、次回。

懇親会で発表したお!

*1:Yappoではない