新しいblogに移行しました

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

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;


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

2012-12-19

コマンドラインからTwitterにPOST(もしくは自分にD)するだけのツールをつくってみた

VPSで定期的にcronとかでバッチぶん回したりして、その結果をある程度すぐにみれる状況にしたいなーとおもったので、App-Shirohというツールをつくりました。ようするに、ものすごい単純なTwitterクライアントなんですけど。

https://github.com/ytnobody/App-Shiroh

前準備
手始めに、通知を送信するためのTwitterアカウントが必要なので、どうにかこうにか取得しましょう。
次に、通知を受け取る側のアカウントと、今しがた作ったアカウントを相互フォローさせましょう(D送るのに必要)。
そして、さっき作ったTwitterアカウントをつかって、このあたりを参考に、認証に必要な各種情報を揃えます。
ここまでで準備はオッケー。

インストール&設定
まず、App::Shirohをインストールします。cpanmをつかいますので、あらかじめ用意しておきましょう。

git clone git://github.com/ytnobody/App-Shiroh.git
cd App-Shiroh
cpanm ./

インストールできたら、今度は以下のような内容で~/.shirohというファイルを新規作成します。(適宜置き換える)

  {
     consumar_key        => 'YOUR CONSUMER KEY',
     consumer_secret     => 'YOUR CONSUMER SECRET',
     access_token        => 'YOUR ACCESS TOKEN',
     access_token_secret => 'YOUR ACCESS TOKEN SECRET',
     message_to          => 'some_nickname', ### 無くてもOK。このアカウントにDを送る。
  };

ここまでできたら、あとは

shiroh '通知です'

とか

cat /path/to/file | shiroh

とかすれば、新しく作ったアカウントが(つぶやいて|Dして)くれます。 パイプ経由で複数行のデータを食わせた場合、その行数分だけつぶやきます。
あと今のところ、文字数が140文字越えたときにどうするかとか全然考慮せずにNet::Twitter::Liteに丸投げしてます。
大事なこととしては、ばれるorもれるとやばいものとかには向きません。

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

2012-08-09

FORTHでFizzBuzzをといてみた

表題のとおり、取りあえず練習がてら書いてみた。

なんせ初学者なもんで拙いですけどゆるしてつかあさい><

2012-08-07

Hachiojipm #20 - WAF作ったよって言ってみた

先ほどHachioji.pm #20へ参加し、WAFを作ったので一緒に育てようぜ的な話をしてきました。
まあ、このWAFについてはそのうちこのブログとかでなんか書くかもしれません。

今回は異例の平日開催&異例の吉祥寺開催ということもあって、参加人数は9名と少なめでしたが、その分濃い内容となっておりました。(僕は1時間ほど遅れての到着となったのですが・・・)
また、北海道出身の方が多く、途中masiuchiさんと函館カオス説について語り合うなどしたわけですが、同じ卓にいたhirobanexさんあたりはほぼほぼついてこれていなかったようで、今思うと申し訳なかったです><

さて、会場となったevitaさんはイタリアンのお店ですが、気取ったところの無い、非常に開放感のある雰囲気のお店でした。お料理も非常に美味しいものばかりでした(アラビアータとレバーペースト?が特に美味かったですね)。

YAPC::Asia 2012にむけて


Hachioji.pmでは、今年のYAPC::AsiaにてLTthonという企画を行いますが、今回の集まりは企画のブラッシュアップという目的がありました。スタッフの役割分担やLT未経験者へのアプローチ方法など、主宰のuzullaさんを中心に、charsbarさんやmakamakaさんなどのサポートが入りながらの意識あわせが行われました。
また、参加者の半数がYAPC::Asiaスピーカーという状況でしたが、個人的にはxtetsujiさんの「モダンmod_perl入門」は特に気になっているところです。

LTで発表したもの


今回僕はNephia(ねふぃあ)というミニWAFについて発表しました。
LTのスライドはこちら。 githubはこちら。
このブログエントリでは多くは語りません><

Hachioji.pmの明日はどっちだ


次回はどうするのかな?

追伸

YAPC::Asiaに応募していたトークが採択されました!いいねしてくれた皆さん、ありがとうございます!

2012-06-30

[Perl??]Hachioji.pm18にいってきたよ

だいぶレポート書くの遅くなったのですが、6/23(土)に開催されたHachioji.pm #18に行ってきました。

pre Hachioji.pm ハッカソン


お昼過ぎくらいにノロノロと会場に到着してみると、皆さんお食事にでてたらしく、yoshihirokunoさんがお一人でfacebookのfriend-API(であってたかな?)を使って何かしようとしてたので、簡単にアドバイスしておきました。(すべての友達を取得する方法について、のはず。)

その後ほどなく、主催のuzullaさんをはじめ、昼食組が戻ってきたところで、Yanchaのソースをclone(!)。あまりにも久しぶりに見るコードは、依然とは比較にならないほどの分厚いテストと、だいぶ整頓された(まだ整理の余地はあるけど)構造になっており、率直に「これはすごいな」とつぶやくようなものに進化していました。何より驚いたのが、ビューの部分がだいぶかっこよくなっており、細かい箇所での利便性向上が図られていたことでしたね。

OAuth周りではまって残念無念><


とりあえず何かやれることは無いかと考えつつ、手元環境でYanchaを起動してみたところ、Twitter認証の部分でInternal Server Errorが発生。「なんでうごかないの。。。」と、エラーログを見てみるも、Net::Twitter::Lite側が出力しているエラーしか出ておらず、何が悪いのか良くわからない状態でした。
周りにそのことを相談してみると、「consumer_keyとconsumer_secretが設定されてないから」とのこと。そのことにすぐに気づけなかった自分を残念に思いつつ、「これエラーログにそのことが出てこないとわからないよなー」というようなことを考え、エラーをトラップして、「Twitter-APIのconsumer_keyとconsumer_secretは設定したかい?」みたいなことをエラーログに吐くように修正を入れてcommitしておきました。

comsumer-key/consumer-secretを当て込んでみるも・・・


dev.twitterでconsumer_keyおよびconsumer_secretを取得してYanchaに当て込んでみましたが、「Authentication Failure」的なエラーが出てきてしまい、うまくログインできません。
ソースに何か問題があるのか、とか、環境(PerlのバージョンやNet::Twitter::Liteのバージョン)の問題なのかとか、色々調べて1時間くらい費やしたのですが、これも何のことはなくて、consumer_key/consumer_secretの発行時にコールバックURLを設定していなかっただけでした。トホホ・・・

結局、Twitterでログインする、という箇所だけでハッカソンの半分以上の時間を費やしてしまったわけですが、合間合間でLT資料を書いたりとかしてて、わりとだらだらとやれるのがHachioji.pmの良さなんじゃないかなーとか思ったりしました。

Hachioji.pm 本会


今回の会場はペルー料理のお店 MISKYさん。以前もちょくちょくHachioji.pmで利用しているお店です。ハッカソン組がぞろぞろと店内に入る中、gfxさんがすでに店内で待機しておりました。

1時間半くらい?だべりながら飲んだ食ったし、だいぶ酒も入ったところでLT(hideo55さんやhirobanexさんのレポートに詳しく載っているので、内容はそちらに譲りたいとおもいます)。
大雑把に言うと、JS=女子小学生というネタが横行していたのと、makamakaさんのInline::JFXの構造がかっこいい件、JFXについてはDOMセレクタがひとまず欲しいところという意見があったのが印象的でした。あと個人的にはmoznionさんが同郷出身者ということもあり、ジモトークで盛り上がったりしました(彼の出身校は地元ではエリート校として知れ渡っているけど内情結構カオスっぽいとか)。

次回のHachioji.pmはTakao.mtと称しての高尾登山イベントとなります。

2012-03-26

[Perl]Hachioji.pm #15 でペアプロしてきた

毎度おなじみHachioji.pmに参加してきました。
通産16回目の開催となる今回は、前回(実は参加してたけど疲れ気ってレポート書けるほど物事を記憶していなかった;;)から@hirobanexさん主導ではじまった「pre-Hachioji.pm」というハッカソンからの参加です。

ハッカソン、9:00 AM 開始だったけど

のろのろと11:00 AM くらいに会場にIN。この時点で自分以外に既に4名がコード書いたり書いてなかったりしてました。
ペアプロ自体には「お題」が設定されており、今回は「Kossyを使って掲示板をつくる」というものでした。
なんでKossyなのかとか、その辺のいきさつについては、こちらに色々書いてあります。

最初の1時間くらいはだらだらと。

最初はペアプロの相手が居なかったと言うこともあって、主宰の@uzullaさんと、中国のスマホ向け開発事情やPHPのWAFなどについてだらだらと情報交換と言う名の雑談をしておりましたが、しばらくして、初参加の@magicdriveさんとペアを組むことに。
彼はそれまでJava(主にAndroid-app)メインだったにも拘らず、YAPC::Asia参加をきっかけにPerlで出来る業務へと転身したというツワモノ。Perl自体には大体1年くらい触っているとのことでした。

ペアプロやった!

今回は僕のほうがPerl使用暦が長いということから、主にmagicdriveさんに手を動かしていただくことにし、僕はコーディングのサポートに回りました。
まずkossy-setupに始まり、機能要件の明確化、APIの策定、基本的なハンドラの書き方の説明、データストアとORMの選定、依存モジュールの導入、model実装、handler実装、view実装の順に手を動かしていただき、ORMにはTeng、データストアにSQLiteをそれぞれ採用し、JSONを出力するAPIをviewからjavascriptを使って叩く方向で作っていきました。
結果的には、view以外のほとんどの部分について、機能実装を網羅するところまで行きましたが、ひとえにmagicdriveさんの理解力の高さに拠るものと思っています。
また、@umeyukiさん / @hirobanexさんペアは別のアプローチ(おそらくviewはほぼてきていた?)で実装を行っていたようです。
ちなみに、実装時間が短時間だったことと、TengおよびKossyの構造/使い方をメインで説明していたため、TDDを実践できなかったので、次回以降の課題としたいです。

Hachioji.pm 本会

いつものことではありますが、@hide_o_55さんが猛スピードでまとめを書いてくださってます。

今回LTのお題は「スマートフォン」だったのですが、毎度の通り、@maka2_donzokoさんの現物(「すあま」と「本」)を使ったネタが強烈に記憶に残っております。というか、この時点で僕はだいぶ憔悴してたこともあって、記憶が途切れ途切れだったりします。。。
あと、PICKで写真取ったはずなのになぜか読み込めないので、読み込めるようになったら写真はるかも。

次回以降のハッカソン、何を作る?

本会の後半頃に、次回以降のハッカソンで何を作るかと言う話になったのですが、「IRCのようでIRCでないちょっとIRCなアプリ」とでも言うべきものを作ろう、みたいな話になっていたかと思います。たしかhide_o_55さんが「これ議事録取らなくていいの?」見たいなこといってたかと思いますが、これを書いている今、議事録が欲しい!と思っているところです。。。

2012-03-16

[Perl,メモ]ある無名関数の中でだけ使える関数を定義したい

sub hoge {  
    my $cb = shift; 
    my $caller = caller();
    local *{$caller.'::foo'} = sub { .... };   
    $cb->(); 
}

こうすると、

hoge(sub{ foo() })

が使える。

2012-01-29

[Perl]Hachioji.pm #13



先日(1/29[土] 18:00~)、おなじみのHachioji.pmに参加してきました!
会場は、こちらもおなじみのタイラーンナー。トムヤムクンが美味しいお店です。

今回も新しい方が何名か来ておりましたが、皆さんPerlの話題にとどまらず、技術方面の話や椅子の話などで盛り上がっておりました。

おや、奥の島の様子が・・・


なんか奥の島に突然人が集まりだしたので、何事かと思って行って見た所、こんな光景が。。。

これがあの「インフラエンジニア双六」か!?

タイ風ハムスライスが極端に辛かった



あまりの辛さに悶絶。。。


恒例のライトニングトーク


酔っ払ってて正直あまり覚えていない(※いつものこと)ですけど、記憶に残ってるところだけざくっと書いておきます。

・JS製のスライドツールがいくつか。
・はてブのホッテントリをタイトルかき集めてGoogleスピーチAPI(非公式)にとおして読ませる
・でかいモニタと研究室の机とフィギュアたちで研究が捗るらしい
・URIパラメータを弄繰り回すブックマークレット
・動画から静止画を切り出して非破壊自炊。メトロノームで撮影タイミングを取る餅つき的手法
・hint-a-hint(Firefoxプラグインらしい)でマウスレスブラウジング
・Win32::IEAutomationで「IEでの」ブラウジング自動化
・デザイナーなのにcygwinでファイル管理
・良い椅子は、捗る。
・富士通の重くてお高いキーボードは打鍵が軽やか。捗る。
・Diogenesというギリシャ・ラテン語向けのテキスト検索ツール
・ウルトラマンと楽しい仲間たちに囲まれてタジタジのギャン。
・椅子についてる、よくすべるリストレストには段ボール箱をかぶせてると捗る。マジで?

自分のLTでは、自分が作ってきたツールの一部を紹介しました。資料こちら。

ちなみに発表には、equinox79さんと共同で開発した(つまりHachioji.pmコラボウェアです!)プレゼン共有ツール「FireCracker」を使いました。

さーて、次回のHachioji.pmは?


2/25(土)開催の予定らしいです。少し早めにスタートしてハッカソン的なことをするのかな?

2012-01-27

[Perl]Perl Beginnersという勉強会をやります。

Perl Beginners という勉強会を2/24(金) 19:00より五反田文化センターで開催します。

という宣伝でしたー!ぜひお越しください!