新しいblogに移行しました

新ブログ "All Yout Bugs Are Belong To Ass" に移行しました!

2012-10-27

Chiba.pm #1に行ってきた

10/20(土)に船橋駅前のPCスクール「WAVE」さんで開催されたChiba.pm #1に行ってきました。

到着が30分ほど遅れてしまったので、LTの途中あたりからしか聞けてないのですが、その中で記憶に残っているものを掻い摘んでレポートします。

@studio3104さん
fluentdを使ってMySQLのslowlogを監視し、その元になったクエリをEXPLAINして、webに統計を表示するというアプリについての発表でした。このアプリは以前、PerlBeginnersでビギナーズセッションの題材にもなっていました。YAPCのLTでもこの発表をしていたらしく、そのときはデモを動かせないまま銅鑼が鳴ってしまったので、そのリベンジだと意気込んでいたのですが、船橋でもデモを動かすことができなかった模様でした。仕組みも機能も非常に興味深いものですので、ぜひ動いてる様子を見てみたいとおもいました。
また、monitoring casual talks #2というイベントの宣伝もされていました。

@karupaneruraさん
TengについてのTipsを紹介。複数レコードを一気にinsertするbulk_insert、rowオブジェクトを作らないようにするsuppress_row_objectなど、わりと浅くTengを利用している人間としては知らないことが結構あったので、勉強になりました。

@sho_toyodaさん
情報セキュリティスペシャリストについてのお話。ECMAScriptが追加され、Perlが削除されたということらしいのですが、その過去問題がなかなかはげしいらしく、CGIでHTMLタグをprint構文で吐き出していたりしてて(ほかにも大分アレらしい)、問題を作った方にはぜひともPerlBeginnersにお越しいただきたいと思った次第でした。

ちなみに自分の発表は「チャリで来た」(本当は「バイクで来た」なんだけど)という出オチと、carton+perlbrewなアプリでcronを使う際のtips、JSON出力に特化した拙作のWAF「Nephia」およびPerlBeginnersの紹介をさせていただきました。
スライド自体は1枚に収めたので、大分わかりにくいかもしれません。




スライド中のenvスクリプトはこんな感じ。



実際にcronで使う場合、こうなります。



また、懇親会では@karupaneruraさんと、「OOPだろうが関数型だろうが、ちゃんと扱えるようになるには、まず手続き型をしっかりと扱える必要があるよねー」みたいなことを話しました。

船橋まではさすがに結構距離があるなあと感じたのですが、自分の場合バイクツーリングも兼ねているのと、やはりその地域のperl使い(もしくは興味のある人)が集まるので、他のpmとは異なる話題が出てきたりして、非常に興味深いと感じました。

主宰の@kaztrさん、参加された皆さん、お疲れ様でした。
次回はいつやるんでしょうね。気になります!

2012-10-03

[Perl]ここ最近で自分のコードで筋が悪いといわれた物。またの名を自戒ドリブン開発とも。


タイトルの通り、僕のコードで良くないといわれたところと、その理由や対処方法をメモしてみた。
後学のために、自戒ドリブン開発。

1. Exporterつかって関数EXPORTはやめる
たとえば MyExport でExporterつかってEXPORTしてても、それを使ってる側からコード追いかけるときに大変になりがち。

2. for my $x ( @array ) { ... } で書けば良いところを map { ... } @array するな
return map {...} @array みたいに、配列の写像を他で使う場合にはmapを使う。
しかし写像を使わない場合forをつかうべき。最悪メモリリーク。

3. Class::Loadみたいな動的なクラスローダの多用を避けよう
どの辺からが多用といわれるのかがちょっと人それぞれ感満載だけど、とりあえずload_class()の多用は可読性を落とし、コードの危険性を高める。7.プラガブルな機構を取り入れる際の注意 も参照。

4. Attributeに利点なし
かなり前(2年くらい前?)に指摘されたものではあるけど、よくよく罹患する患者さんが多い模様なので、再掲。
可読性をおとし、危険性を高める(segvる場合もあるとかなんとか)のでよくない。その割に得られる物はほぼなし。
ここらへんにまとめた。 http://togetter.com/li/107885

5. マイナーなモジュールの選定を避けよう
この辺はセンスを問われるところでもあろうかと思うけど、聞きなれないモジュールを使うよりも、メジャーなモジュールで同様のことができないか検討したほうがいい。
何か起こったときに、モジュールの選定をした人間が責任を持って直す必要が出てくる。

6. 極端に小さな機能実装を別モジュールに切り出すのも考え物
汎用性とか利便性とご相談ではあると思うけど、たとえば、配列リファレンスであろうがなかろうが強制的に配列にする、みたいなのは、可読性等の理由で、わざわざ別モジュールに切り出す必要はない。

7. プラガブルな機構を取り入れる際の注意
3とほぼ一緒。プラガブルな機構はメンテナンス性を下げるので、プラガブルにすることで得られるメリットがよほど大きくない限りは使用を差し控えた方が無難。

8. プラグイン機構を持つモジュールを利用する上での注意
プラグインを使用する際、自分の作ったモジュールの外でプラグインのロードを行うべき。もし自作モジュール内でプラグインのロードを行っていた場合、自作モジュールを使ったときに、暗黙的にプラグインがロードされて非常に混乱する。

9. 正規表現における文字表現クラス"\d"
"\d"は、flagged-utf8のときに意図しない結果となる。例えば、5文字の半角数字にのみ対応させたい場合、/^\d{5}$/ ではなく、 /^[0-9]{5}$/ とすべき。

10. 多重継承は混乱の元なのでやめる
継承するという事自体混乱の元っぽいので、移譲で対応するのが望ましい。

11. Class::Accessor::FastではなくClass::Accessor::Liteを使おう
アクセッサが欲しいだけなら、Class::Accessor::Fastを継承するのではなく、Class::Accessor::Liteでアクセッサを生成したほうが軽いし、@ISAに余分なものを追加しない。おまけにFastよりも動作がはやい。

12. モジュールの外からアクセスするわけでもない変数にourを使うのはやめる。
そのままですね・・・

13. CPANに上げるようなモジュールでは、XS依存度を下げておく
これもそのまま。めんどくさいpullreqを未然に防ぐことにつながる。


その他、あれば追記していく次第です。

2012-10-02

YAPC::Asia 2012 で発表してきた

9/27(木)【前夜祭】 ~ 9/29(土)の3日間にわたって開催されたYAPC::Asia 2012。今回、初のYAPCスピーカーとして参加してきました。




自分の発表内容は、専らCPANモジュールを使っている人向けの内容だったのですが、かなり多くの方にご清聴いただきました。ありがとうございます。

そのほかにも、Powered by Hachioji.pm なサイドイベント「LT-THON」で、Perl Beginnersを例に挙げた勉強会スタートアップハウツーみたいな内容の発表や、地域pmミートアップでPerl Beginnersを取り上げていただいたりなど、存分に楽しませていただきました。

LT-THONは当初の予想を大幅に上回る盛況っぷりで、前日まで心配のあまり胃がキリキリしていたという主宰のuzullaさんも、さぞ報われた事でしょう。
ちなみにichigotake君がLT-THONのまとめ(一日目 二日目)をしてくれており、uzullaさんがG+で写真の共有(一日目 二日目)をしてくれています。

それから、僕が数日前にCPANにリリースしたNephiaというWAFを使って、equinox79さんがadre.soというサービスをつくっているという発表がLT-THONであったので、ちょっと気になっています。

実はほかの方のセッションは、LT-THONのレポートを書いていた為まともに見れていない状況ですので、後ほど動画にまとめられたものを見ておこうとおもいます。

あと、一日目の懇親会後のHachioji.pm(本郷侵略版)でゆーすけべーさんあたりと一緒に、サスペンダーネタでLTするようにmoznion君を焚きつけたのですが、彼は見事にLTを成功させたので、焚きつけた甲斐があったなあと思っています。

最後に、gihyo.jpレポーターの皆さん、YAPC::Asiaスタッフの皆さん、そして941さん、牧さん、本当にお疲れ様でした&ありがとうございました!

来年はもっとはっちゃけた内容でトークしたいですw