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

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

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

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

perl レポート perl+web planet

本日、札幌にてHokkaido.pm #3が開催予定です。なんか飛行機も快速エアポートも混んでて移動が大変ですが、着き次第いつものようにメモ取ります。

ご挨拶 - @havanaclub_ さん

  • 3回目の開催
  • テーマは初心者向け
  • 懇親会もあるよ

PerlCGI入門 / @keroyonn_ さん

  • YAPCのおかげでMacBookを買ってもらった
  • Apple風にPerlを紹介
    • 文字化けも効率に直せる
    • Moose
    • WAF
    • 大規模でも
    • BioPerl - 科学分野
    • Image::Magick
    • 呪文のようなコーディング
    • 友好的
    • リビドー駆動のyusukebeさん → エロサイト駆動
  • 今日はプログラミング初心者向けの内容(変数は何かとか)
  • Perlとは? → LLの始祖
  • LLとは?? → Lightweight Language
    • 学習曲線が穏やか
    • テキストとネットワークが得意
    • 数値、画像処理が苦手
  • Perlと他のLLの違い
    • TMTOWTDI、use strict、変なものに寛容(Acme::Oppai)、CPAN、テスト重要
  • CGIとは?
    • ブラウザ、WEBサーバ、言語
    • リクエスト/レスポンス
  • Perlの実行環境
  • WEBサーバ
  • 実際の開発
    • 本番環境とそろえる。WAFを使う。
  • AN HTTPDとStrawbery Perlの導入方法を紹介
  • WAF は Mojolicious::Lite とかどう? 興味ある方は charsbarさんに聞くこと
  • CGIを、コマンドプロンプトで実行して、デバグできる(コンパイルエラー)
  • 初めてのPerl
    • メモ帳でも作れる
    • print による標準出力
    • コメント、組み込み関数、引数、文字列、エスケープ、セミコロン、など
    • PHPより組み込み関数は少ない → CPANで落とすと良い
  • CGIを作る
    • シェバン(#!/usr/local/bin/perl どのコマンドで実行するか)
    • HTTPヘッダは、CRLF × 2 まで
  • 文字列中のエスケープ → \" などとバッククォートを使う
  • ""ではなく、qq{}でもよい
  • ヒアドキュメント → <<"END" から END までを文字列
  • __DATA__ or __END__ 以降はデータとなる
  • スカラ変数 → $value。ただし $aと$bは使わないこと
  • 演算子は普通に使える
  • 配列 → @array ただし @array[0] はシンタックスエラーなので注意
  • 連想配列 → %hash
  • == と eq の違いに注意
  • チーン → 時間がないので飛ばし
  • CGIの作り方
    • <form>の作り方
    • use CGI, CGI-new, $q->param
    • CSVへの出力処理 → 改行コードを<BR>に置き換える
    • =~ s/\r\n|\r|\n/
      /g;
  • まとめ
    • 今後も Hokkaido.pm に出て、勉強しましょう
  • Q&A
    • Q. ドキュメントをオンラインで読める?
    • A. 英語ならCPANのドキュメント。日本語なら、翻訳はまだ・・・
    • id:charsbarさんより「search.cpan.org, perl.org, perldoc.jp, JPAMooseドキュメント:

PerlApacheのログを解析してみる! / @havanaclub_ さん

  • 「ログとりたいんだけど」「Google Analytics使えば?」「忘れてた」ってとき
  • Apacheのログフォーマットを解析するスクリプト → IP、日付、リクエスト行
  • API
  • コマンドライン引数 → @ARGV に入る
  • エラー処理 → die
  • 関数の利用 → sub 関数名 {}
    • 引数は、 @_ に入る → my ($x, $y) = @_;
    • return は省略可能
  • ファイルを読む → IO::File の利用。->getline、->close
  • while(->getline) と ++ で行を数える
  • IPアドレスの集計 → ハッシュにする
  • IPアドレスの切り出し → ^\d+\.\d+\.\d+\.\d+$
  • ファイル読む→IP切出→ハッシュに集計
  • for (keys %hash) でハッシュ内のデータを表示
  • 表示の整形 → printf %15s, %10d
  • 値の大きさでsort → sort {$hash{$b} <=> $hash{$a}} keys %hash
  • 日付ごとの集計 → \[(.+?)\] で日付を抽出
  • 日付文言(March, Aprilとか、年月日の順とか)の調整 → Time::Piece
    • ->strptimeでパース、 ->strftime で整形
  • 日付のsort → 単に文字列としてsort
  • 補足
    • ファイル入出力は、PerlのCOREを使うのであれば open を使う
    • マッチ結果は $1 と $2 で
  • 質疑応答
    • Q. $1と$2を使わないとどうするの?
    • A. my ($hoge) = $str =~ /abc(.+)fg/;
    • Q. 複数では?
    • A. my ($hoge1, $hoge2) = $str =~ /(.+)c(.+)fg/;
    • Q. 正規表現が難しかった
    • A. \dは数値、+は繰り返し、\.はピリオドに一致。 /x を使って、スペースを使えるように

YAPCレポートの舞台裏 - @hiratara

自分のセッションですので、後でスライドを公開しますw

YAPC::Asia と Hokkaido.pm - @aloelightさん

  • ベストトーク
    • PMグループディスカッション → 今回は40人も集まってて、やり方次第
  • Perl5 is Alive → 開発体制など
  • Perl and C Binding → XSはカオスなので
  • BounceHammerの紹介 → 自分で導入したかった
  • 映画に出てくるハッカーになりたい → エンターテイメント賞。動画を見て欲しい。
  • The Tale of Plack → 日本のハッカーの成功談
  • 草とPerl → 草だらけ
  • 《ここでPCがフリーズ。スライドなしで》
  • 2007年と2010年の違い
    • 2007年は半分くらい英語だった。2010年は日本語セッションが多い
    • ローカル色があるのはいいこと?わるいこと? → まだ続けられるのはわかった
  • 規模は? → 減ったけど増えた。大きい規模で安定している。
  • 帯広は人が居なすぎた。今回は多くてすばらしい。
  • 人脈が広がったり刺激を受けたりするので、いろいろ出てほしい

Windowsでも使えるんですってば - @charsbarさん

  • Windows使ってる人? → ほとんど
  • Windows上でPerlを使う
  • WindowsPerlで動いてるものをデモ
  • Windows上で動かないもの(鬼門)
    • パスの区切り文字 (\と/)
    • ボリュームラベル(c:)
    • 改行コード(アップロードツールなど)
    • 文字コード
    • ロック(winでは一つのファイルを同時に開けない)
    • シグナル
    • fork (ithread)
    • Cライブラリ (Windowsにないライブラリなど)
    • コンパイラ (gccがない。msvcとか)
    • その他
  • Perl本体はたいていWindowsに対応済
    • 地雷原はテスト : 動かなくなっているように見えるだけ
    • モジュールやアプリ
  • 動かなかった場合の対応
    • 直す
    • 直してもらう
    • テストを無視する (force install, notest) → 自己責任
    • テスト済パッケージの利用 (ppm)
    • Perlを選ぶ
      • Strawbery Perl (UNIXで仕事してる人が仕方なく使うのに向いている)
      • ActivePerl
      • 自分でコンパイルもできる (ビルドするとたいてい通る)
    • 言語を選ぶ → 例えば PHP とか Ruby
  • TMTOWTDI → 他の言語でも十分なら、それでいい
  • Perlのいいとこ / 十得ナイフ
    • 例えばCPANにある (例えばParse::AccessLogEntry)
    • 難しいことも → XS/C
  • 困ったら?
    • perldoc, perldocjpコマンド
    • オンライン → search.cpan.org, perldoc.jp(日本語、古め。perl本体のドキュメントは頻繁), perldoc.org perldoc.perl.org, perldoc.perlassociation.org
  • 本当に困ったら・・・? → Hokkaido.pm で!!
  • おまけ : Perl Author達の使うPerlのキーワードの個数の統計 → だいたい半分

初めての MovableType Plugin - @onagatani

  • MovableType (MT)とは
    • Perl製のCMS
    • WordPressみたいなの
    • 静的なHTML出力 → 負荷に強い
    • Plugin による拡張が可能
  • Pluginでできること
    • テンプレートタグの追加
    • コールバックの追加
    • 独自オブジェクトの追加
    • 管理画面の拡張
  • テンプレートタグの追加
    • MTタグ → MT専用タグ。テンプレートエンジン
  • コールバックによる独自処理
    • 特定の処理に処理を挟める
    • ->add_callback(名前、優先順位、MT::Plugin, コード)
  • 独自オブジェクトの追加
    • MT::Objectを継承した独自クラス(ORマッパー)
  • 管理画面の拡張
  • 例: ウィジェットを追加し、Hokkaido.pmのデータを表示
    • pluginsディレクトリに、plファイルかyamlを置くだけ
    • MT本体に手を入れてはいけない
    • MT::Pluginを親クラスにし、MT->add_plugin する
    • widgetは、tmplディレクトリに配置。MTタグによって記述
    • ->init_registryを定義。 $plugin->registry を呼ぶ。
    • MT::Util::get_newsbox_html を使い、 URLを読み込む
    • set => 'sidebar' でサイドバーに表示
  • 宣伝: MTDDC 12/18(土)、ハッカソン 12/19(日)
    • JPA牧さんがいらっしゃる
    • 懇親会無料!

ライトニングトーク

ライトニングトークした体験談 - @techno_nekoさん
  • 前のHokkaido.pm で牧さんや id:ZIGOROu さんの前でやった
  • 初めてのLT → 緊張(声は地声)
    • 話しかけてもらえる、アドバイスをもらえる、友達
    • 切実な問題が解決 → ブレスレットよりもLT!
    • miyagawaさんからNYTProf を紹介されたり
  • LTをしないとわからないこと
    • 発表者と聞き手の間に、(見えない壁)はない
    • No borders, Perl Mobngers*1
    • LTをやりましょう

宣伝 / @hotwatermorning さん

科学Perl - @havanaclub_ さん

小難しい本の読書会したい
次回予告

*1:Thanks to @techno_neko