今日も来ています。コンセントは運良く(?)借りられました。
Welcome to YAPC::Asia 2008/Tatsuhiko Miyagawaさん(9:45〜9:55)
A Standard That Is Meant To Be Broken/Larry Wallさん(10:05〜)
Perl6の文法とその拡張についての話だったと思うのですが、最初全然聞き取れませんでした。難しい。。。
- Perl6は冗談ではないw
- 長い名前と短い名前がある
- 短い名前は略称
- multi → 関数のオーバーロード??
- prefix
- prototype
- prefixとpostfix → 例えば++みたいなの
- 違いのデモ
- prefix:sym<++>とprefix:<++>の違い
- 関数か演算子か
- prefix:sym<+->??←Perl6にはまだない
- +-のグラマーがなければ、+と-として解析される→グラマーの追加のデモ
- use PlusMinusPerlすると+-オペレータが使える。してない場合は+と-
- useするときは影響を最小限にするためにレキシカルスコープで。
- Perl6にはスコープがたくさんあるが、適切なスコープを選ぶこと
- statementのグラマーの説明
- +-と+のどのオペレータが選択されるのか?
- 新古でもユーザ定義優先でもない
- 長いキーワードがマッチする
- Perl6にはCoreもキーワードも演算子もない
- |と||の意味がPerl6では変わる
- |は並列、||は直列
- Perl6をパースするためにPerl6が必要
- :: → トークンを分ける
- ! → ルールの無効化
- DFAとかNFAのマッチャーは使ってない
- まとめ: Perl6は拡張性があるので、拡張してみて下さい
TESTCONTINUOUS/KANG-MIN LIUさん(11:20〜)
自動テストについて便利なモジュールの説明です。聞いて得したセッションでした!
- javaでの事情
- *.tを変えると、自動でテストが走るデモ
- perl -MTest::Continuous ・・・
- テストの変更を監視し、PASSかFAILかをレポートする
- FileModified、Module::ExtractUse、App::Prove、Log::Dispatchで実現
- テスト駆動
- 全てのテストを走らせるのは時間の無駄となる→できるだけ少ないテストを実行
- つまり、変更された.tだけを実行
- .tの依存関係で、変わったモジュールに対依存するものだけテスト
- Log::Dispatch::MacGrowl→Macマンセー
- これだけでは不十分
- .cとか.conf、.yamlの依存を見れていない
- isa(継承)のファイルが変更された場合の依存を見てない
- アイコンがちょっと・・・→アイコンのひと募集
- Future
- 依存抽出の改善
- 別の通知方法(twitterなど)
- Q&A
- Q.CPUの利用状況は?
- A.全部のファイルを見てるわけではないので、そうでもない
- Q.Devel::Coverで依存を見るってのはやりました?
- A.まだやってない。hackersonでやりたい
- Q.Devel::Coveredと言うのがある。どのテストがどのモジュールの何行目をテストしたのかが見れる
Perl Black Magic - Obfuscation, Golfing and Secret Operators in Perl/José Castroさん(11:50〜12:20)
ネタとして非常に楽しめるセッションでした。良くも悪くもさすがPerl、ってとこですね。楽しい時間を過ごしました。
- 難読化
- 例:
- 警告!!難読化されたコードの意味をわからずに実行しないこと
- 特殊変数やperlのスイッチ
- Golfの技術
- 例:
- 見た目がラクダとかスペースインベーダー(ゲームになってる)とかのコード
- ThePerlJournal
- ローマ数字からなるコード
- 参考→
- The Art of obfuscation by Thomas Klausner
- How to Write Unmaintainable Code by Roedy Green
- 質疑応答・・・は通訳がなかったので聞き取れなかったですw
ランチタイム(12:30〜)
学食で食べました。弾さんのサイン会やってたのでサイン本*3ゲットしてきました。なんで和服なのか訪ねてみたところ、「正装のときはこれ」だそうですw
Perl Testing (and Automation) Basics/Daisuke Makiさん(13:45〜)
- テストの重要性
- テストは必須
- 全自動にすること→凡ミスを防ぐ
- バグ--、残業--
- これをやった、この過ちはもうしない、忘れたときのため
- Perlのテストインフラ
- 優れている
- CPANでは、世界中からフィードバックが
- CPAN化→言語のテスト機能のサポートを最大に得られる
- 基本(Test::More、plan、ok)
- よくあるテスト
- t/00_compile.t、t/021_basic.t、t/99_pod_coveredge.t、t/99_critic.t
- t/99_kwalitee.t←個人的には非推奨
- 書いたテストは、いつでも走らせる。何回も走らせる
- 性能検証、バグFix
- 常にテストしてもよくね?→Test::Continuous++ (朝のセッション参照)
- テストケースは闇雲に作らない
- 正常系、異常系、限界値(正常と異常の境)、特殊値(リファレンス渡し、undef等)
- WEBアプリケーションのテスト
- テストの80%はWEBサーバを通さなくてよい
- データ処理を、アプリケーションと密結合させない→MVCが有効。SoCの考え方
- モデルをテストする
- つまり、XXXアプリのテスト=APIのテスト
- APIをUIに依存にせずに独立させる
- Catalystの場合
- mod_perlに関してはApache::Test
- Tips
- やりすぎない。理想はTDDとかでも、落としどころは知っておく
- バグの再現テストは必ず書く!!
- ポータビリティを意識
- Makefile.PLにいろいろ仕事をさせる
- 初期設定の確認、設定
- 外部からの値は、環境変数を使ってしまう
- 環境変数によってテストskipとか
- テストの後片付け
- ENDブロックで
- セグフォを考慮したら最初に
- テストを飛ばす
- SKIPブロック
- 未実装部分のテスト(TODOブロック)
- Test::MockObject
- 指定されたオブジェクトのふりをする
- まとめ:
- テスト書かなくていいのは小学生まで
- テスト書けないコードはほとんどない→あるとすれば、それはコードが悪い
- バグがあったら、再現コードをすぐ書く
- デバグより開発をしよう
- Q&A
- Q.Test::Continuousはテスト時間かかり過ぎて大変では?
- A.必要なテストだけ走る。邪魔ではなさそう
Working in the cloud/Leon Brocardさん(14:30〜14:50)
まったく聞き取れず。すみませんw
Parrot Compiler Tools/Kazutake Hiramatsuさん(15:00〜15:40)
これもお得セッションでした。ラリーの話の意味がわかりました。つーかラリーの前に聞きたかったw 非常に面白かったです。
- 2001年開発スタート、今は0.6.1
- PCT(Parrot Compiler Tools)
- Parrotのおさらい
- PASMの例
- set I0, 1とかprint S1 とか new P0, 'string' とか end とか
- PIR → PASMのシンタクスシュガーに過ぎない
- .sub とか .endとか .param pmc args とか $P0 = compreg 'C99' とか
- PCT
- PGE(Parrot Grammar Engine)
- Perl6のRuleを解釈する(via: ラリーのセッション)
- Rule(言語の文法規則)から言語パーサを作成
- Rule中に{*}を見つけると、同じ名前のサブルーチン
- Perl6 Rule
- grammar、token、rule
- TOP talken (TOPレベルのルール)
- NQP(Not Quite Perl)
- Perl6のサブセット
- Parse Actionsの言語。{*}に対して呼ばれる。
- PASTを作る処理を書く。makeコマンド
- PAST(Parrot Abstract Syntax Tree)
- おためし
- 編集する
- grammar.pmとactions.pmにルールを足す
- actions.pmはNQPで書く
- NQPのシンタクス
- $/ → マッチした規則
- $
→ $1...$nみたいな役割 - $( $x ) → $x をスカラとして評価
- makeメソッド
- new( :node($/) ) ←インスタンス変数nodeに直接値を入れる
- Past Nodes
- Node, Block, Stmts, Var, Val, VarList, Op
- この後は・・・
- スコープ管理、オペレータ優先順位、関数呼び出し定義
- 参考: docs/pct/*.pdd 基本はソースを読む
- 弾さんタイム
- Q. RakudoとNQPの違いは?
- A. NQPは最小のPerl6
- Q. 自作は?
- A. 細かな部分が難しい
- A. PASTさえ作ればいいから、かなりイケてる
- 質疑応答
- 業務連絡。明日、ラーメンが720個来るらしいw
Easy system administration programming with a framework/Gosuke Miyashitaさん(16:10〜16:30)
- System Admin Application Framework
- Func(Pythonでの実装例)
- FuncのクローンであるPuncを開発中
- System Admin Applicationとは?
- 複数のホストに同じ操作を行う
- ターゲットホストをどう選ぶ?
- どうやってつなぐ?
- セキュリティー
- 再利用性
- これらを隠蔽
- Punc::Client->new('www*')とかして、service->status
- Punc・・・Funcがあるのに??
- マスタ側とスレーブ側でデーモンを動かす
- CodeReposから落として、puncmaster-ca、 puncd を実行してそれぞれで起動
- コマンドラインツールがある punc "*" call service description
- 例:
- virtモジュール(まだ未実装) → バーチャルホストの管理
- smartモジュール(未実装) → エラー表示
- モジュールはスレーブ側に導入されている
- モジュールの実装例
- operatingsystemパラメータで、このモジュールを実行可能なOSを指定する
- Pfacter → 環境に合わせて適切なモジュールを選択する
- Pappetのアイディア
- モジュールの同期
- punc-modulesync → fileモジュールによる実装。スレーブのモジュールを新しくする
- 開発中。CodeReposにあるので好きなようにどうぞ
- まとめ: プログラマブルなシステム管理は楽しい。
- Q&A
- Q. Mooseを使ってるとインストールが重いのでは??
- A. ブームに載ってるだけ
- Q. Pappet、Funcとの棲み分けは?
- A. ダイナミックな物に向いている
Let's enjoy Perl on the %^H/Kazuhiro Osawaさん(16:35〜)
- $^Hと%^H hintbitsみたいなの
- perl5.8では・・・useとBEGINの関連で、うまくいかない?
- hintbitsでできる → HINT_LOCALIZE_HH (0x20000)
- $^H |= 0x20000 で、レキシカルなスコープになる
- autoboxでの例
- Scope::Guard*4をhinthashに入れている
- レキシカルなプラグマっぽい動き
- perl5.10では??
- %^Hがレキシカルになった
- (caller(0))[10]が新たにできて、hinthashをとれる
- use strict みたいのができる
- プラグマ側で、caller経由でhinthashを取ると、うまく値がとれる
- 実践的なものが思いつかなかったので、Hentai($^HはHentaiのH)なものの紹介 → use dan;
- 質疑応答
- Q. dan.pmのソースは?
- A. ^ENCODINGフックを使う。リテラル読み込みに対する強烈なフック。ただ、今更使っちゃ駄目らしい(kogaidanさんより)
LT(17:10〜)
- String::TT/Jonathan Rockwayさん
- ヒアドキュメントは見にくい
- 文字列中ではメソッドが展開されない
- インデントできない
- String::TT→TT文法をリテラルの中で使う
- stripを使うと、空白文字を奇麗にする
- ソースフィルターとかではなく、普通の関数
- スカラかハッシュか配列かわからない?→_aとか_hとか_sで指定
- ヒアドキュメントは見にくい
会計報告お金☆大好き/Hiroyuki Oyamaさん- 2006年→20万ほど余った→PerlFoundationへ寄付
- 2007年→会場費がでかかった
- 2008年→懇親会費が上がった。宿泊費はHotel dan.
- 2008年は、残高がマイナスにならずに処理で来た
- 時間切れ
- Open Fastladder with Plagger/Daisuke Muraseさん
- Fastladder→LivedoorReaderの英語のOSS版
- Plaggerで読める物ならFastladderでなんでも読める
- PlaggerとFastladderとPlagger::Plugin::Store::Fastladderをインストールして使う
- Everybody wanna know where you belong!/Kenichi Ishigakiさん
- Developing Amazon's Dynamo in POE and Erlang - prologue of "From POE to Erlang"/Takeru INOUEさん
- 生Perl (Perl Machine)/Kazunari Asanoさん
- Text::MicroMason::SafeServerPages/cho45さん
- TTが嫌い→Text::MicroMason
- Perlと同じ文法で、速い
- テンプレート言語は覚えたくない
- まとめ: 埋め込み型のテンプレートエンジンを使いましょう
- Tenjinがあれば他はいらなくないか?w
- WebService::Simple/Yusuke Wadaさん
- POX over HTTP
- WebService::xxxを探すが、どれを使えばいいのやら
- 似たようなコードをいつも書く→リクエスト、パース
- WebService::Simple → これらを抽象化。どんなAPIでも書けるように
- 戻り値はXMLをパースしたリファレンス。ただし、パーサは入れ替え可能
- CodeReposに置いておいたら、全部書き換えられたw
- Vroom: vroom -vroom/Ingyさん
- Vroom::Vroom プレゼンツール
- prototype::signatures/Chia-liang Kaoさん
- perl5のプロトタイプはいまいち
- Perl6のシグネチャのような機能を実装する
- sub6、method
- 高速化
- HTML Binary Hacks/TAKESAKOさん
- imgタグを使ったブラウザの自動認識
懇親会(19:00〜)
寿司が出過ぎ!! Kakudaさんと明日のヌードルの話したりid:yuum3さんにLISPの講義受けたり、
ラリーさんに無理言って写真撮ってもらったりサインもらったりしました。ほんとうにありがとうございましたm(_ _)m。Thank you very much. I love perl and will use perl forever! > Larry Wall. これを機に、もっとPerlコミュニティに役に立つように頑張ります。
追記。なんかCodeZineさんからアクセス来るなと思ったら、リンク貼ってもらってました(リンクどもです)。英語部分適当なのがバレバレでかなーりやばいですw。