新しいblogに移行しました

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

2013-04-22

[Perl]Perl入学式 in 東京 #1でサポートメンバーしてきました

4/20(土) 13:00〜17:00 にシーサー株式会社さんで開催されたPerl入学式 in 東京に、サポートメンバーとして参加してきました。

実はもともとperl入学式を関東でもやってほしい&やりたいという需要と供給があって、特に主催の@__papix__さんからは、「Perl Beginnersとコラボしたい!」みたいなことを言われていたと言うのもあり、開催場所のアサインとサポートメンバーとしての参加をするという形で協力させていただくことになったものです。
また、会場のアサインをしている最中、@toku_bassさんから「うちの会社、会場につかってもいいですよ?」という、とてもありがたい申し出をしていただきました。この場を借りてお礼申し上げます。

今回の講習(というほど堅苦しいものではなかったのですが)は2部構成となっており、第1部はLinux環境構築、第2部はLinuxの基礎コマンド紹介、plenv+cpanmによるイマドキなPerl環境の設定、初めての方向けの基礎(ハローワールドとその発展形)という、とても初学者にやさしい構成となっておりました。

第1部ではwindowsユーザの方向けに、vmware-playerのインストールからVMの設定、Ubuntuのインストールまでを、じっくりと時間をかけてレクチャー。実は僕自身、第1部は比較的スムーズにいくのかなと思ったのですが、compiz(ウインドウマネージャー)の破損や、インストール直後の硬直現象等、微妙にハマり所があり、当初の予想よりは難儀した感がありました。とはいえ、参加者全員が無事時間内にUbuntu環境を手に入れることができました。

第2部では突然参加者が増え、会場内には20名強のPerl初学者の方が集まってくださいました。LinuxのCUIに慣れていただくべく、基本のコマンド(cd,ls,pwd,cp,rmあたり)についての説明と実践をおこない、plenvの入手(まさかのgit経由かつ、一部CentOS5.xの方がいて、gitのインストールでつまづく等ありました・・・)と設定、perl-5.16.3のインストールまで行い、Hello,world! をperlで出力するところまで体感時間およそ40分ほど。さらに応用問題を10分程度でこなし、cpanmの設定(plenv install-cpanm)までやったところで、CPANの解説と、CPANからのモジュールインストール体験(なんと、Acme::FizzBuzz!)、そしてAcme::FizzBuzzを使ったFizzBuzz問題への取り組みまでこなしました。恐るべし、Perl入学式!

ここまでで第1回は終わりでしたが、主催曰く「今回参加枠から漏れてしまった方向けに、5月中旬に補講(第1回と同じ内容で)をやる」そうですので、今回都合つかなかった方も、補講を受けてみるといいとおもいます。

Perl Beginners主催としては、非常に学ぶべき点が多く、とくに「ホントの初心者」向けの対応とフォローアップはぜひ真似していきたいと思った次第でした。

2013-04-09

[Perl]Hachioji.pm #27 でもくもく&LTしてきた

4/6(土)、いつもお馴染みのHachioji.pmに参加してきました。まだChiba.pmのレポートかきおわってないのにこっち先に書いちゃったよ!ごめんよ@kaztr!!!

13:00くらいに八王子に到着してハッカソン会場に入ってすぐさま、マコピー(@mackee_w)さんや@laoujiさんあたりとランチにいくという体たらく。腹減ってたんだからしゃーないでしょう。

で、ハッカソンで何してたかというと、「豚キムチ定食が少なかった」と泣き言言いながらコンビニのインチキアップルパイかじったり、自作Web API Frameworkのセットアップツール書いたり、マコピー先生の執筆活動(MongoDB.pm を s/Moose/Moo/g するお話) を後ろから眺めてあーだこーだ喚いたり、まずい缶コーヒー飲んで胃の調子おかしくしたりしてました。
この説明だと、だいぶはた迷惑なオッサンにしかみえませんが、実際そのままなんでどうしようもないですね。

ハッカソン終了後、外に出てみるといい感じの大雨に歓迎されながら、徒歩30秒くらいの場所にある飲み屋へ直行。初参加の@outer-insideさんや、久々に参加の@ono_pmさん、@mgikenさん、@xtetsujiさんなどがいて、plenvつかってる?とか、redis6年くらい前に欲しかったよね、とかみたいな話をしてました。
そのうちいい感じに酒が回ってきて、LTタイムになり、皆さんいいかんじに発表してました(@hide_o_55さんのレポが毎回すごくよくまとまってるので、見てみるといいですよ!)。特に気になったのは、@kaztrさんのlibnfc(PaSoRiライブラリ)関連の発表とか、@xtetsujiさんの発表で、古い技術を伝統芸能になぞらえているところとか、着眼点が鋭いなあと感じましたね。
ちなみに自分はPerl Beginners #7のLTで発表した「とある無料HPスペースのPSGI」みたいなネタを、ほぼそのまま発表してきました。
ついでに言うと、LTのお題は「今でしょ!」だったそうです。発表の直前まですっかり忘れてました。

なお、今回は暴風雨の関係で、少し早め(22:10くらい?)に引き上げましたが、その後エア参加キメた人がいたらしいですよ。そのうちしれっときてくれればいいんですけどね。
あと、大雨の影響で、古淵駅から家までの間の県道が川みたいになっていましたね。割とどうでもいい情報ですが。

2012-12-27

[Perl]Email::SendつかったらReturn::Valueにdeprecatedだと怒られた

Email::Send自体がdeprecatedなのですが、Email::SenderはMoose依存だそうなので(Mouseに切り替えるという話は無理だったらしい?)、Email::Send使ってメールを送ることにしました。
ですが、こいつはReturn::Valueというモジュールを内部的に使用していて、これを普通に使おうとすると

Return::Value is deprecated

と言われました。でもEmail::Senderは使いたくないので、

BEGIN {
    $Return::Value::NO_CLUCK = 1;
}
use Email::Send;

としたのでした。だいぶアレ。

[2012/12/28 追記]
なあんてことを某所でぼやぼや言ってたんだけど、寝て起きてたらMail::Krohnというものがつくられていた。激速。本当にすごい。

 http://blog.64p.org/entry/2012/12/28/002634

[2013/07/31 追記]
サンプルに間違いがあったので直しました。

誤: BEGIN { Return::Value::NO_CLUCK = 1; ...
正: BEGIN { $Return::Value::NO_CLUCK = 1; ...

nekoyaさん、ご指摘感謝致します。

それからEmail::SenderはMoose依存ではなくなり、Moo依存になりました。
それに伴い、Email::Krohnは必要なくなったとされ、deleteされました。

[Perl]Amon2なアプリケーションのbatchでconfigとかを見たいとき

http://blog.64p.org/entry/2012/12/27/195117 参照のこと。

知ってる人には当たり前なのかもしれないけど、Amon2ビギナーな自分は引っかかってしまったのでメモ。


たとえば、以下のようなバッチがあって、

[./bin/my_batch.pl]
#!/usr/bin/env perl
use strict;
use warnings;
use MyApp::Model::AnyWhere;

printf "%s\n", MyApp::Model::AnyWhere->work;

そのバッチが叩いているクラスが、

[./lib/MyApp/Model/AnyWhere.pm]
package MyApp::Model::AnyWhere;
use strict;
use warnings;

use MyApp;

MyApp->bootstrap; ### これがだめ

sub c {
    return MyApp->context;
}

sub work {
    my ($class) = @_;
    return c->config->{Foobar};
}
1;

みたいなのは、よろしくないとの事です。

正しくは、

[./bin/my_batch.pl]
#!/usr/bin/env perl
use strict;
use warnings;
use MyApp;
use MyApp::Model::AnyWhere;

MyApp->bootstrap; ### ここでbootstrapする

printf "%s\n", MyApp::Model::AnyWhere->work;


[./lib/MyApp/Model/AnyWhere.pm]
package MyApp::Model::AnyWhere;
use strict;
use warnings;

use MyApp;

sub c {
    return MyApp->context;
}

sub work {
    my ($class) = @_;
    return c->config->{Foobar};
}
1;


とするべきらしく、そうしないと色々と意図しない問題が出てきてしまうらしいので、注意が必要です。