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

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

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

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

レポート perl

旅行中にふらりと立ち寄ったので、内容をメモしておきます。

ustreamはこちら

「今年の夏休みは...」 / @charsbarさん

  • Hokkaido.pm 1周年おめでとう!
  • Mojolisious のプリント配布どもです
  • YAPCのネタを考えよう
  • Game Development in Perl
  • SDL モジュール(SDLのラッパー)
  • Games-Sokoban
  • Gameコンテストの作品の紹介
  • 会場にYAPCに参加する人は割といるが発表する人が少ない
    • GAMEは受けがいいので発表しやすい。作って発表してみてはいかが?
  • Sokoban はレイヤとか使えばいいはず。何かあればアドバイス欲しい
  • Q. 作ったゲームはどう配布できる?
  • A. CPANで配布できる。SDLもそのまま入るはず(Windowsでも入った)
  • Q. FrozenBubble のコードは何行ある?
  • A. コメント入れて6000行くらい

mod_perl温故知新 〜 Perl CGIの高速化からメールサーバまで〜 / @xtetsujiさん

スライドはこちら

  • Apache + mod_perlを振り返って見る
  • WAF、PSGI/Plack があればいらないのでは?
    • 知っておいて損はない。Apache2上で動かすと不具合があったりもする
    • Apacheは最も使われている。どんなディストリビューションにもある
    • 大人の事情でApache+CGIな環境をメンテしなければならない必要がある
  • Apache1.3 = mod_perl1, Apache2.x → mod_perl2
  • mod_perl1.99 は歴史の遺物なので注意
  • mod_perlの歴史
    • mod_perl1 1996、mod_perl2 2002
    • 枯れているので安心して使える
  • CGI.pm は裏でmod_perlの面倒を見てくれている
  • mod_perl1での書き方 → レスポンスハンドラ $r を処理
    • $r->send_http_header, $r->print など
  • mod_perl2での書き方 → 基本は一緒だが、APIが違う
    • ディレクティブが PerlResponseHandler となるので注意
    • $r->content_type, $r->print など。使うメソッドに合わせてuse も必要。
    • モトモト巨大だった物を、名前空間を分けたため
  • Apacheの内部処理
    • preforkの内部処理の説明 → 多い。各処理にフックができる
    • Apache Module で書ける物を Perl で書けるようにするのが mod_perl
  • リクエストサイクルに合わせて、PerlXXXHandlerのディレクティブがある
  • mod_perlの実例 : mod_rewriteリファクタリング
    • mod_rewriteは黒魔術
    • PerlTransHandler を使って mod_rewriteの仕事を書ける
    • Tr->uri を変更するハンドラを作り、 PerlTransHandler RewriteURL のように仕掛ける
    • OK ではなく DECLINED を返す (mod_rewriteに動いてもらうため)
  • 体験談
    • PerlPostReadRequestHandler → DDoS の遮断
    • PerlTransHandler → mod_rewrite の代わり
    • Access, Authen, Authz → 認証。PHPとかでも。
    • PerlTypeHandler, PerlFixupHandler → MIMEを決める
    • PerlResponseHandler → アフィリエイト
    • PerlLogHandler
  • Apache2ではHTTP意外の処理が書ける
    • PerlProcessConnectionHandler でSMTPサーバを作る例
  • qpsmtpd → Perlのメールサーバ
    • 堅い
    • Apache::Qpsmtpd もある

libperl++ / @lapis_twさん

  • 焼き鳥のお代として発表 → 発表して欲しい人には焼き鳥をごちそうしよう
  • PerlC++バインディングするライブラリ
  • libperl++ はPerlC++バインディング
    • ExtUtils::XSpp はXSのC++バージョン
    • github に移ってから活発
    • 導入がめんどくさい。サンプルはうまく動くっぽい
    • Perl5.8.1以上、 C++ 4.4以上、 Boost
  • うごかなかった!
    • GCC4.6.1 をさくらVPSでビルド
    • Boost → libperl++ ヘッダファイルのインクルードだけでOK、ビルドも必要だと1GB必要
    • ここまではOK
  • libperl++ の怪しさ
    • GCCのバージョンが POEファイルと README ファイルで異なる
    • MSVCで使えるのに、Windowsでは使えない
  • ビルドしてみた
    • 大量のエラー
    • スコープがおかしい、C++の仕様に対してill-formedな記述
    • TODO、XXX、FIXME の記述が大量
    • ackを使って TODO、XXX、FIXMEを見てみた
  • 対処法 → pull-req 送りましょう!
    • YAPC::Asia2010 のときは動いてた?? もう少し頑張る
    • libperl++のexample を動かしてたみたいだが、動かなかった
  • Q. パッチは書ける状態?
  • A. 送れるように対処中
  • Q. パッチで直せるレベルの量なの?
  • A. 微妙
  • Q. XSでもC++はできるのでは?
  • A. やろうと思えば出来るが、手続きがマジキチなので、それはちょっと。おとなしくXSでCを書いた方が・・・

エンジニアリング - 意識の共有 / @nekokakさん

スライドはコチラ

  • @akiymさんの推しのお陰で@typesterさんに勝った!(JPA推薦的な意味で)
  • 何を話すベキか @yusukebeさんに聞いてみた
    • 「なんでもいんじゃないですかねー」→ 失敗
    • スピリチュアル的なエンジニアリングな話をしたい
  • YAPC::Asia 2010の省サーバ運用のトーク → スピリチュアルな話に近かった
    • カンファレンスに来る時点で基本意識が高い → シンクロニシティ
    • 現状の振り返り、将来の指標
    • カンファレンスは、情熱をもらうところ
  • 発表後
    • 色々な方と意見が一致した。感激のメールも受け取った
    • 特別なことも難しい話もしていない
    • みんなが感じていることを、どう表現するのかが重要
  • Teng, DBIx::Skinny の話
    • 作った物を使いたい → CPANモジュールを使えないプロジェクトはある
    • 折り合いの付け方 → 自プロダクトにこだわりすぎないが、技術的な負債になる
  • 「ドックフードを食べよ」
    • 自分で作ったプロダクトを、自分で使うことが大事
    • 有りモノで満足できるなら有りモノを使う、そうでなければ自分で作るか、すごい人に作ってもらう
    • 旧暦のモジュールを@lestrratさんに「すごいねすごいね」といって作ってもらった
  • 例えばDBIx::Connector
    • 違和感があったので DBIx::Handler を作ってみた
    • OreOreが通用するかの見極めが大事
  • 尊敬するエンジニア
    • 樋口さん
      • HandlerSocket を使いたいと相談したら、InnoDBを勧められた
      • 客観的に状況を判断できる
    • @tokuhirom さん
      • 凄いとんがってる。言ってることもやってることも豪快
      • 仲間を大事にする
      • エンジニア視点でビジネスを考えられる
      • 監視業務へも積極的に参加
  • 本当にそのプロダクトが最適か。検証が重要
    • パフォーマンス、導入の難易度、運用方法
    • ビジネス要件にも最適か
    • 使ってみたいだけ、はNG
  • 物を作るだけ、使うだけのエンジニアで終わらない
    • リーマンプログラマも時には必要だが、兵隊の能力が高ければ可能性も膨らむ
    • 全ては自分次第
  • ステージはいくらでもある
    • Hokkaido.pmでの発表、YAPC::Asiaでの発表
    • 社内勉強会、学生勉強会
  • nekokakさんの歴史
    • 文系出身で2~3年はリーマンプログラマ
    • WEB+DB のPerlHacker座談会記事*1Shibuya.pm → このままでは駄目だ
    • CPANモジュールを漁る。紹介記事を書く。moduleを書く。
    • 転職
    • Shibuya.pmのLTへの応募(ここのハードルが高かった)
    • YAPC::Asiaに応募
  • DevOps
    • 開発者と運用者の垣根を取り払おう
    • 自社サービスで運用のことを考えてないのはまずい
    • 自社サービスへの愛情が必要
    • エンジニアとしての幅も広がる
  • 開発者と運用者のコラボ
    • インフラの人達の要件を聞き、一緒に必要な仕組みを作る
  • YAPC::Asia2011 の応募が始まるので、手を挙げましょう
  • PerlHackersHub への寄稿 → JobQueue
    • Yappoさんが主体
  • 北海道からコミュニティを盛り上げる
    • 北海道はいいところ。中心となって欲しい。
  • Q. 今の構成は省サーバ運用か??
  • Q. 今回はDevOpsの話だったが、WEBじゃない人とWEBの人をつなぐには?
  • A. 昔あったのは、デザイナーさんと協力して作ったものがあったが、挫折した
  • Q. 今年のYAPCで話す予定がありますか?
  • A. 最近新しい話題がないので、逆に狙い目

テスト駆動開発 / @dont_cocoaさん

(MacBook Airを持ってきているのに、)iPad2で作った資料をiPad2で発表です!

  • Perlは元々テストを大事にする言語
  • PHPは嫌いだが、相当長くなるので懇親会で。Perlが好き。
    • PHPが流行ってから、ちゃんとしたテストを知らないエンジニアが増えた
  • TDDBC → TDDを実践する
    • 1月に札幌で行われた。@t-wada さんが講師
    • 5月に1.5、6月に2.0
    • @t-wada さんより講義 → ペアプロ形式
    • 2日目はレガシーコードと戦う
  • TDDの基礎 : 仕様 → テストコード → FAILさせる → 実装 → PASS
  • 実践例 : Personクラス、 walk, say, stop
    • 先にテストを書く use_ok "Person"; → FAIL
    • package Person; 1; のみを実装 → PASS
    • new_ok Person → sub new { bless {}, shift}
    • can_ok $p, Person → sub walk{}, sub stop{}, sub say{}
    • is $p->say, "止まっています" → sub say {..実装..}
    • 細かくテストを作成、実装を繰り返す
    • 仕様変更「runメソッドの追加」 → 同様にテスト、実装
  • 不具合への対処
    • バグを再現するテストを書く → FAIL → 修正 → PASS
  • 実践した感想
    • テストを書きやすいコード = 見通しのよいコードを書くようになった
    • 肯定の進捗を把握しやすくなった
    • 作業量は変わっていない → 慣れるとコストが減る
    • 品質が向上(ただし、これは副産物)
  • Q. 正常系のテストは書けるけど、異常系はどうしますか?
  • A. 品質のテストは意識していない。品質が必要な場合は、異常系のテストも居るだろう。切り分けて考える必要があるかも。
  • Q. テストにコメントがあるといいのでは
  • A. 急いで作った資料なので、ほんとはつけた方が
  • Q. バージョン管理システムとの辛みは??
  • A. バージョン管理、テスト、自動化、の3つが重要。@t-wada さん曰く、バージョン管理が重要かも
  • Q. 成功したときだけコミットした方がいい

LT

Base64を再実装する / @akiymさん

@onagataniさんから、「高校生をアピールして下さい!」という指示が。スライドはこちらです。

  • 「高校生」Amon2::Setup::Flavor::Teng 書いたり、WWW::YouTube::Download、Web::Queryのpul-reqとか
  • YAPCいつか行きたい!
  • Base64とは? → データを6bitずつに分割して変換
  • 最近のBase64はいけてない
    • アルファベット、数字を使ってる
    • 読めない
  • 再実装 → Acme::Collector64
    • Japanese64 と呼んだらいいよ
  • 使い方
  • ひらがなじゃなくても
    • 魚編の漢字とかかっこいい → demo
  • まとめ
道具の要らないHelloWorld / @koji**さん

スライドなしの気合いのLTでした!

  • ノートパソコンなしでHello Worldなしで
  • perl -e 'print "Hello world!"' と指で書いてみよう!
    • 一行で書ける。初心者向け
  • 初学者は、とりあえずいじってみるといい
  • perl」はコマンドラインの知識が必要
  • 「-e」はオプション。コマンドの動きを変えるもの
    • --help、-v とかは自然と覚えられる
  • いきなりGoogle先生に聞くより、手が動かして見ると?
  • オチ: 今書いたhello worldは動かない → 理由を調べてみよう
    • perldoc のドキュメントを読んだ方がいい
ウヰスキーPSGI / @hiratara

自分の発表なので、後でスライドをアップします。→ アップしました

perl meets beats / @techno_nekoさん

スライドはこちら

  • 等身大のLT、自分らしさ → テクノミュージックが好き
  • WAVファイル
    • サンプリング周波数、量子化ビット数、音の長さ、モノラル、ステレオ
    • ラの音の例
  • beats
    • 波形を作る → のこぎり、波、
    • ビートを刻む → 足し算で波形合成
  • 音を鳴らすデモ
  • Q. どの機材で作った音ですか?
  • A. きちんとPerlで作りました! → 実際に動かして証明 → おー
Perl meets 次世代ゲームコンソール / @keroyonn_さん

スライドはこちら

  • iPhoneAndroidPerlでの開発環境がない
  • WEBサーバには全てPerlがある → 暇なサーバ監視員向け!
  • デモ: スーパマリオ
  • 流通 → CPAN!
  • ビジネスモデルは? → CPANでゲームを配り、サボった監視員を監視するサービス


次回のHokkaido.pmはYAPC終わってから10月頃やります!

*1:YAPCでも座談会をやる予定があるので、お楽しみに