読者です 読者をやめる 読者になる 読者になる

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

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

今日は Hokkaido.pm#9 の日です

レポート perl hokkaidopm

実家に帰るついでに、久々にHokkaido.pmへふらっと立ち寄ります。

マイクスタンドを借りたのでライブコーディングでも安心です。

cpanfile / @aloelight さん

  • cpanファイルとは?
    • Ruby Gemfileの移植
    • 依存モジュールのバージョン
    • cpanmとcartonで利用可能
    • アプリ向け
  • cpanfile以前は、Makefile.PLへ書いていた
    • cpanm -L local --installdeps -n .
    • -Mlib::core::only -Mlib=local/lib/perl5
    • LWP6.02からLWP::protocol::https が分離されて使えなくなったりする(<= 指定ができない)
  • cpanfile では requires で '== 6.00' みたいな指定ができる
    • carton install、もしくは cpanm -L local --installdepth .
    • carton exec
  • cpanmコマンドはbackpanとかからもとってくれるから安心
  • cpanfileの構文
    • $FUNC $NAME, $VERSION;
  • $FUNC
    • モジュールのインストールの段階
      • author_requires(開発時)
      • configure_requires(perl Makefile, make test)
      • build_requires(make, make test)
      • requires(make, make test, make install)
      • test_requires (make test)
    • on $phase => {定義; ... 定義;};
    • recommends => あるといいもの(Starman など)
    • suggests, conflicts => 使っているのは一部なので気にしない
  • $VERSION
    • 0だと指定しない。 >= != == などなど
    • カンマ区切りだとAND扱い
  • 詳細は CPAN::Meta::Spec を参照
  • $NAME
    • cpanm に指定できる物
    • 通常指定、PAUSE ID+Filename指定、URL指定、CPAN URI(cpan:///みたいなの)、ローカルファイル
    • git:// とか .../XXX.git なURL
      • @タグ、@ブランチ名 のような指定
    • 注意: cpanmの仕様。cpanfileがどこまでサポートするかは未知数
  • ツール類
    • cpanm (--installdeps オプションが必要。アプリ向けなのでこんな仕様なんでしょう)
    • carton (v0.9.10 からcpanfile が必須。Makefile.PLなどは見ない)
    • CPAN Distributionに使いたいとき (あまりそういう流れにはなってないケド)
      • Module::Build::Pluggable::CPANfile
      • Module::Install::CPANfile

私は如何にして心配するのを止めて自分でコードを書くようになったか / @shinotra さん

  • perlを使い始めて1年ほど。本業がプログラマではない
  • Webアプリの紹介: 勉強会を探すため。名札を作る。
  • エンジニアと向き合うためにまずは自分のスキルアップ
    • 勉強会に色々出たい → ATND 地域検索
    • 合コンとか地域が変だったり要らない結果が出てくる
    • ゆーすけべーさんの本を読んで衝撃を受けた → 自作
  • ツイッターのフレンドが参加する勉強会を出せばいいだろう
    • TwitterのFriendをとってきて、ATNDとMash up
    • Net::Twitter + LWP::UserAgent
    • celeron 1.5MHzのサーバで動かしてるので遅い
    • Hokkaido.pm の面々には好評!
  • ATND参加者のTwitter の名前や画像から全員分の名刺を自動生成
    • 年賀状印刷業会で培った用紙の知識!!
  • 苦労した点
    • API毎の名前の違い(screen_nameとtwitter_idとか)
    • postscriptの座標系(左下原点)
  • まとめ
    • ソーシャルアプリにはヒントがいっぱい
    • ぐだぐだ言ってないでコードを書けよ、ハゲ
    • http://telegnosis.orz.hm/
    • 「しゃべる冷蔵庫」もよろしく!
  • 質疑応答
    • Q. ハマった点は?
    • A. 特にない。テストファーストもhokkaido.pm casualで教わったし
    • Q. ツール便利だと思うけど実用的な環境にリプレース予定とかは?
    • A. 検討中

Games::* – Perlで「ゲーム」しよう / @xtetsuji さん

  • 顕在化するmod_perlリスクについては懇親会で
  • ゲーム「する」
    • play, make, solve, create
  • Games::* 名前空間
    • Play, Make, Solve がありそう
  • CPANについて
    • 「幼稚園児の砂場じゃねぇ!」・・・"誰が言い出したか"
    • なんとかpanとかよくわからない
    • ハードルが高くて貢献者が減るのは勿体ない
    • Acmeモジュールは寛容「常夏のビーチ」
    • Games:: も同じような場所になればなあ
  • モジュール数は Games:: より Acme:: の方が圧倒的に多い
  • Games:: でデビューするといいのでは
  • 数独(ナンプレ)
    • 縦、横、3x3、それぞれに数字がダブらないように
    • たくさんCPANにモジュールがあるが、@charsbarさんのくらいしか難問は解けない
    • 変則的な数独に対応できてない
    • Google画像検索でも解けるらしい(google ゴーグル)
  • スリザーリンク
    • 数字の周りにその数字の数だけ線を引く
    • CPAN上にもプログラムもない
    • Games::Slitherlink・・・はまだ完成してない
    • アルゴリズムを考えてる段階
  • 福引きサイトで福引きを引き続けて金儲け
    • WWW::Mechanize + JS
  • 我々にはプログラミングがゲーム
    • ただし、節度を持って
  • 最近はソーシャルゲームは楽しい → 色々なゲームしたい
  • Games:: 名前空間に期待すること
    • OpenCVCurses、複雑なソルバー、ソシャゲーのテンプレ
  • まとめ : Sudokuでcharsbarさんに続け!

最近使ってるモジュールの話 / @xaicron さん

  • こんなとき何使う?って聞きまくって貰えればCPAN上のを見せるよ
  • 2008年 CPANソムリエになる方法 / tokuhiromさん
    • 更新日、テストの量、バグレポート
  • プラス、xaicronさん基準
    • 作者、依存が少ない、no Moose(Mooに期待)、コード量少ない、やりたいことが明確、遅くなさそうなの
    • 最終的にはケースバイケース
  • Any::Moose は使わないこと
    • Moo で
    • Mouse を使うのであれば、単体で
  • Mouseはsyntax suggerとして利用している
  • 実行中にモジュールをuse
    • Module::Load → v5.9.4 から core
    • Class::Load → inner classをロードできるが、ごつい
    • Plack::Until::load_class → webアプリならいいかなあ
  • HTTPリクエスト投げたい
    • LWP::UserAgent → デファクトだけどオブジェクト作り過ぎ
    • HTTP::Tiny → v5.13.9からcore
    • Furl → 速い。timeout指定
  • Furlの最近追加された機能
    • SSL周り、basic認証URI、X-Internal-Response、Furl::Request
    • keep_request で $res->request みたいに Furl::Request を受け取れる
    • Furl::Request::Common 誰か書いて
  • DB接続したい
    • DBIx::Connector → コールバックでわかりやすい。コードが肥大化してる
    • DBIx::Handler → DBIx::Connectorのライト版。DBIx::TransactionManagerを中で利用
    • DBIx::Sunny → mysql使う時はこう使う、などのノウハウ
  • テンプレートエンジン
    • Template::Toolkit → 時代遅れ
    • Text::Xslate → 速い。直せるのがgfxさんだけ
    • Text::MicroTemplate → Pure Perlで割と速い。コードジェネレータにいいかも
  • スクレイピング
  • シリアライズ
    • Storable → OS、プロトコルバージョン間で互換がない
    • YAML → 複数モジュールがあり、互換性がない
    • JSON → PPは遅いのでXSを
    • Data::MessagePack → サイズ小さいのでKVSに突っ込むのに良い
  • モジュールのビルダ
    • ExtUtils::MakeMaker → coreだけどめんどい、make必須
    • Module::Install → DSL。travisCIと相性悪い。cpanfileと相性が悪い(configure_requiresに入れた方がよい)
    • Module::Build → v5.9.4からcore。make要らない。
  • ファイル操作
    • File::Spec → OS差を吸収。デフォルト。ごつい
    • Path::Class → オブジェクトでファイル操作
    • Path::Tiny → ライトな感じで良さげ。slurpもある。iteraterはどうなの?
      • ディレクトリに大量にファイルあるとまずいのでこういう実装 (by charsbarさん)
      • callbackでもいいのでは?(by xaicronさん)
  • 並列処理
    • ithread → segv吐くためのモジュール(win以外で使うべきでない)
    • Parallel::ForkManager → forkの最大数をキープしてくれる
    • AnyEvent → イベントドリブン。逐次処理に弱い。学習コストは高い。
    • Coro → AnyEventのシンタックスは覚えなくてよい
  • まとめ
    • Perlについて色んな情報が散らばってるのを、わかりやすく話してみた
    • Perlにこだわらず使いたい物を使えばいいんじゃないか

Lightning Talks

CurryとHokkaido.pm / @hiratara

カリー化の話をしました。

PureDataPerlで鳴らしてみる/ @techno_neko さん
  • オブジェクトをパッチで繋ぐと音が出る
  • Net::OpenSoundControl
  • PureDataは安定しないんで、プロセス殺すとよい
  • Any::Eventでライブ
  • Term::ReadKeyで楽器に
BigShip / @xaicronさん
  • 北海道の人はビックシップと言う名前を聞いただけで爆笑する
    • 今の名前はグルメシップ
  • "ship"なのでデプロイツール
    • Cinnamonクローン
    • 並列でデプロイする
  • 各サーバでの進捗を表示してくれる
  • .bigshipディレクトリにログを残す
  • たぶんCinnamonに統合されるので世に出ることはなさそう
Quality Assurance Hackathon / @charsbarさん
  • 今年も行きます → CPANTSのメンテしてくる
    • 「残念なデザイン」「これ今年のページなんですか!?」
  • 検索エンジン作りたい
  • Groonga::API → 現段階で200以上のAPIをサポート