2012年10月28日日曜日

Perl Beginners #5 開催しました!

開会直前の様子。

5回目の開催!

10/26(金) 19:00、原宿(渋谷区神宮前穏田区民館)にてPerl Beginners #5を開催いたしました。
オシャレな街にひっそりと佇むレトロな雰囲気の会場は比較的広々しており、過去最大級の参加者数が難なく座席を確保できるほどでした。

ビギナーズセッション

@sasakure_keiさんによる発表

今回はビギナーズセッション登壇予定が1名のみだったので、時間的に大分余裕がありました。
@sasakure_keiさんは「RESTAPIを提供するために」という表題での発表で、現在作っているRESTAPIではCGI::Application::Dispatcherを使って開発をしているものの、リクエストURLの解析が必要なので、この手間を軽減するための良い方法はないか、というものでした。

URL->ロジックのマッピングをどうにかしたいとの事。

聴衆からは、「Amon2で実装するのはどうか」、「Router::Simpleで解決できる」などの解決案が挙げられ、発表者の@sasakure_keiさんも納得していた様子でした。

時間が余った!飛び入り発表タイム!

ビギナーズセッションは19:05~19:55までの50分間を見込んでいたのですが、予想外にあっさりと終わってしまった(19:20頃)ので、急遽飛び入り発表を募ったところ、関西からお越しいただいた@__papix__さんが挙手。早速発表していただきました。

飛び入り1号! @__papix__さん

「たすけてください!」というスライドで発表を始めた@__papix__さんですが、修論に追われる生活に労苦しているらしく、修論のテーマである「PerlでGPGPUな演算」についての質問をしていました。

「Perlでいい感じにGPGPUな演算をする」

Perlでかかれたプログラムの中から特定のサブルーチンのみを取り出して、CUDAのコードに置き換えたい、という要求だったのですが、これについて、@__papix__さんと同様にPerlでGPGPU演算を試みた経験のある@moznionさんを指名した上で、「何かいい方法無いですか?」と質問。

@moznionさん曰く「裸足で逃げ出した人間なので・・・」

しかし、彼もまた同様の労苦を経験している模様ではあるものの、「裸足で逃げ出した」とのことでした。そこで質問を噛み砕いて、「Perlのコードから特定のサブルーチンを抜き出して解析/変換したい」というものに置き換えてみると、数名のPerlハッカーから、「B::Deparseを使えばいいのでは」という意見が挙げられました。

「Acme大全」の宣伝をする@maka2_donzokoさん

続いて、@maka2_donzokoさんが「Acme大全 2012」の宣伝を行いました。この本は「どんぞこ楽屋」(まかまかさんの同人活動サークル)が作っており、とりわけ数少ないPerl関連の同人誌となっています。名前に違わずAcmeモジュールの百貨店と呼べるほど、Acmeモジュールがたくさん紹介されています。
ちなみに、主宰自身もこの本を夏コミで購入したのですが、特に第1章「Acmeの一歩」は、Perl関連の用語集となっており、むしろPerl初学者にこそオススメしたいものとなっています。

宣伝が終わった時点でまだ時間が余っていたので、さらに飛び入りを募ったところ、@moznionさんが「質問したい」というので、登壇していただきました。


さらに飛び入り!@moznionさん

自作のCLIツールで状況進捗がわかりやすいように、foreachループの中でピリオドを1個ずつ表示していくようにしたものの、処理中にそれらが表示されることが無く、処理が終了してから一気に沢山のピリオドが表示されてしまうそうで、どうすればいいのか教えてほしい、という質問をされていました。
聴衆からは「"$| = 1;"をprint構文の後ろにつける」「むしろprintの前だ」「プログラムの最初のほうでつけるべきだ」などの意見がでてきたのですが、引数なしで実行するとエラーを返す作りらしく、発表者自身がしばらくはそのことに気がつかずはまっていました。最終的に別の問題がプログラム中に存在するっぽい事が発覚し、聴衆からの意見を確認することはできませんでした。
また、主宰自身も記憶からすっかり抜けていたのですが、より近代的な方法として、
use IO::Handle;
STDOUT->autoflush;
とするやり方があり、こちらの方が可読性等の面で、よりベターです。(@charsbarさんにフォローアップしていただきました。ありがとうございます。)

ライトニングトーク

文字コードについてのLT @toku_bassさん

ライトニングトークのトップバッターは@toku_bassさんで、「文字コードについて」という表題で発表していただきました。
初学者がよく躓く文字化けに関する問題を、わかりやすく原因を解説し、どうすれば文字化けを回避できるかを説明していました。
Perl Beginnersとしては、ぜひ取り扱いたいと考えていた題材であり、特に初学者の方には非常に参考になったものと思います。

@moznionさん発表の「なれるCA」

続いては@moznionさんの発表で、「なれるCA」というLTでした。
最近CPAN Author(CA)になった彼は、CPAN Authorになるまでの労苦と、CPAN Authorになることで得られるメリットをアツく語ってくれました。ちなみに彼の処女作は「Acme::AjiFry」というAcmeなモジュールですが、現在はよりマジメなモジュールを開発中とのことです。

「いいえTimeZoneです」 @i47_rozaryさん

次は「いいえTimeZoneです」というタイトルで、@i47_rozaryさんに発表していただきました。
Time::Pieceで、「2011/12/31 26:00:00」 のような24時越えの時刻表記をサポートした「Time::Piece::Over24」というモジュールをCPANにアップロードした後、しばらくして沢山のバグレポート(テストに失敗する)が来た、という時のお話だったのですが、いわゆる「サマータイム」に起因する時間ずれの問題であったらしく、サマータイムに対してどのように対処すべきか、という質問をしていました(LTなのに!)。

Time::Piece::Over24の使い方

対処案としてあげられたのは、「テストをなおして『仕様です!』と言い切る」「テストでタイムゾーンを指定する」「サマータイム関連のテストを追加する」など、仕様の追加や変更ではなく、概ねテストコードを充実させることによる対処が多くあげられていました。
若干ハイレベルな内容だっただけに、初学者の方には理解しづらいところがあったかもしれませんが、主宰としてはまず、「自分の書いたコードで問題が起こった場合に、親切に教えてくれる存在が、Perlコミュニティにはあるんだよ」という事をなんとなく把握してもらえれば、それでいいのではないかと思います。

主宰(@ytnobody)によるLT「入れ子構造を分解する」

最後に主宰発表のLT「入れ子構造を分解する」(スライドこちら)です。
リーダブルコードの受け売りなところがあり、例となったコードもだいぶひどいし(メールアドレスのマッチング部分とかものすごくテキトウ)、ツッコミどころもわりと多め(条件判断のためのサブルーチンにdieを含めるのはどうかとか)だったかと思いますが、言いたかったことは、
  • 長大なサブルーチンには、それを分解できる余地があり、そうすべき
  • 深い入れ子(ネスト)構造を別のサブルーチンとして切り出そう
  • 分散してしまった条件文の統合を行って、コードの見通し良さを挙げよう
  • サブルーチンの名前がシンプルにならない場合は、まだ分解できる余地があるはず

くらいのことでした。Perlというよりも、プログラミング初学者向けに、できるだけCPANやPerl特有の問題から切り離して解説したかったので、そういう話題にはあえて触れませんでした。

懇親会(not ガチホなんとか)

T.G.I.フライデーズというアメリカンなレストランで懇親会を行いました(写真はきっとそのうち誰かが提供してくれるはず!!!!)。

コーラ飲み放題ということもあって、図らずも途中でコーラ.pm(勉強会の後の懇親会でアルコールのかわりにコーラばかりを頼むという珍現象。Takao.mtというイベントにて言われ始めた)の様相を呈し、食べ物もアメリカンなので、さながらアメリカにいるかのような状況になっておりました。
また、先日開催されたChiba.pmの話や、YAPC::Asiaの話など、各々が思い思いの話題で盛り上がっていました。

さて次回は・・・

本来だと隔月開催なので、12/28(金)あたりの開催を狙うところなんですけど、さすがに年の瀬、皆さんゆっくりしたいと思いますので、年明けの1/25(金)開催を目標とします!