新しいblogに移行しました

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

2009-11-23

[Perl]Net::Twitter(::Lite)使って思ったこと

今回Cuitterというソフトを開発して思ったんだけど、現状テストコードはpmsetupのそれしかない状態。
これをさっさとどうにかしたいんだけど、テストを書こうにも以下のような懸念があって二の足を踏んでいる状態。

     
  • いちいちアカウントやらパスワードをテストのたびに入力させるのも嫌な感じだし

  •  
  • そもそも書き込み系のテストすると、勝手にツイートされることになるのでNG。

  •  
  • 今後実装していこうと思っているフォローまわりのテストで、実データに手を入れるのはNGすぎる。



これについてNet::Twitter(::Lite)のドキュメントを漁ってみたけど、残念ながら有効と思われる記述は見受けられなかった。オイラの能力不足で見落としているのかもしれないけど。

漠然とした解決イメージとしては、APIサーバのレスポンスをエミュレーションしてやるのがいいのかな、と考えているけど、どうだろう。

あとテスト関係ないけど、

     
  • OAuth認証のセキュリティがある意味ザルすぎ(エンドユーザには全く実害はないが、開発者的には本当に目を疑ってしまうものだった)

  • でもOAuth使わないとwebからの投稿扱いになるので、それも嫌だ。


なんていうジレンマにも悩まされている。せめて公開鍵方式の認証方法を取り入れてくれないと、さすがに心許ない。

2009-11-19

[Perl]MojoをMouseでextendsしてみる

手始めに、MojoでMyAppをgenerateする。ここはMojo::Manual::GettingStartedに書いてあるのと同じ。

~/script/mojo$ mojo generate app MyApp


次に、MojoをMouseでextendsしたHamuChanというモジュールを用意する。

~/script/mojo/my_app$ cat lib/HamuChan.pm
package HamuChan;
use vars qw( $VERSION );
$VERSION = 0.001001;

use Mouse;
extends 'Mojo';
use Data::Dumper;

has action => ( is => 'rw', isa => 'Str' );

sub handler {
my ($self, $tx) = @_;
$self->action( 'default' );
$self->action( $tx->req->url->path->parts->[0] ) if defined $tx->req->url->path->parts->[0];
$tx->res->headers->header( 'x-powered-by', join( '/', __PACKAGE__, $VERSION ) );
}

no Mouse;
1;
__END__


lib/MyApp.pmを、HamuChanを利用するように変更する。

~/script/mojo/my_app$ cat lib/MyApp.pm
package MyApp;

use Mouse;
extends 'HamuChan';
use Data::Dumper;

after handler => sub {
my ($self, $tx) = @_;

# Hello world!
$tx->res->headers->content_type('text/plain');
$tx->res->body(
Dumper( [
$self->action,
$tx->res->headers->header( 'x-powered-by' )
] )
);
};

no Mouse;

1;
__END__


デーモンを起動。

~/script/mojo/my_app$ ./script/my_app daemon
Server available at http://127.0.0.1:3000.


ブラウザでアクセスすると、カスタマイズした箇所を表示する。

http://localhost:3000/aaaa

$VAR1 = [
'aaaa',
[
'HamuChan/0.001001'
]
];


ちゃんとactionが加わっている。パス指定が無い場合もHamuChanが取り回すようになっているので、

http://localhost:3000/

$VAR1 = [
'default',
[
'HamuChan/0.001001'
]
];


のようになる。

※Mouseって、最初からMooseX::NonMoose見たいな事が出来るんですね。

2009-11-18

[Linux]transmit timed out

オイラが管理するサーバが夜中に突然、PINGすら通らなくなった。
/var/log/mesaagesを見ると、

NETDEV WATCHDOG: eth0: transmit timed out


なんていう血文字が。こいつを頼りに調べると、先人の知恵ミラクルな解説に助けられた。

どうも、ネットワークの負荷が高い状況下において、TCP Segmentation
Offload(=TSO)が有効になっている場合、一部のハードウェアでネットワーク処理性能が低下するようだ。

そんな時には、TSOをオフにすると良いんだそうで。
# /sbin/ethtool -K eth0 tso off


2009-11-20 追記
TSOの有効状況を確認するには、下記のようにする。

# ethtool -k eth0
Offload parameters for eth0:
Cannot get device udp large send offload settings: Operation not supported
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp segmentation offload: on
udp fragmentation offload: off
generic segmentation offload: off