新しい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もれるとやばいものとかには向きません。