新しいblogに移行しました

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

2008-07-24

[モバイル]今さらWillcom03をゲット

巷ではiPhoneとやらがもてはやされているけど、そんなのガン無視でWillcom03ゲットー!!!
色?もちろんピンクトーンですよ!奥さん!

で、ザクッと使用感。

キーボード。すごく使い易い!本当にモバイルかと思わせるほど、違和感の無い使い心地!

電話として見た場合。
あまり使い易くないです。まあでも、着信専用みたいな扱いなら、気にならない。
イルミネーションキーは以外と操作性が良い。でも、真夏の関東圏ではボタン自体が見えないことも。。。

ネット端末としてみた場合。
まずまず快活に動作するブラウザ。スタイラスをつかって、ページを掴むようにしてスクロールできる。これがなかなか便利。

メーラー。いわゆるPCのそれとほぼ酷似。何の取り柄もなく、使用感を書くまでもないレベル。動作はまずまず快活。

その他導入したソフトウェア。
・EasyDial: PPPダイヤラー。必須。単機能ながら、非常に重宝。
・PocketPuTTY: 日本語版をゲット。SSHコンソールをバリバリ使えるのは素晴らしいね!
・vncviewer: ネタです><

総評:★★★☆☆
やっぱりモバイルでSSHコンソールって最強ですわ。
電話とメールの使いにくさがもう少し緩和されていれば。。。。><

[Perl]今さらながら、Gearmanを学ぶ。

Gearmanというのは、Perlでかかれたジョブサーバー。
dangaという会社がリリースしているらしい。

log4ZIGOROu - Gearmanを使ってみたを参考に、Gearmanを触ってみた。
まだインストールしたばかりだから、コードは書いていないんだけど、ややつまずいた箇所をメモ。

先の参考ページでは

インストール
gearmand, GearmanをそれぞれCPANから入れるだけです。

と書かれている。

しかし、元記事が書かれてから1年以上(!)経過しているせいか、若干差異があった(これは仕方無い)。

現在のところだと、

# cpan Gearman::Worker
# cpan Gearman::Server

とすれば、インストールできる模様。

それ以外の差は多分なさそうなので、参考にさせていただくことに。

2008-07-16

[Perl]変数からだとModule::Pluggableのsearch_pathを指定できないらしい。

前回の苦悩を解決すべく、調べてみた。

ダサくて泥臭いけど、直接Module/Pluggable.pmのimportメソッドにwarnを仕込んで確認した。
この際、背に腹は変えられない。

Module/Pluggable.pm


### 前略

sub import {
my $class = shift;
my %opts = @_;
use Data::Dumper;
warn Dumper \%opts;


my ($pkg, $file) = caller;
# the default name for the method is 'plugins'
my $sub = $opts{'sub_name'} || 'plugins';
# get our package
my ($package) = $opts{'package'} || $pkg;
$opts{filename} = $file;
$opts{package} = $package;

warn $opts{package};

my $finder = Module::Pluggable::Object->new(%opts);

### 後略


で、以下のようなパターンで実行。
lib/Parent.pm


### 前略

### パターン1
sub import {
use Module::Pluggable search_path => $_[0].'::Component', sub_name => 'components';
}

### パターン2
sub import {
use Module::Pluggable package => $_[0], search_path => $_[0].'::Component', sub_name => 'components';
}

### パターン3
sub import {
use Module::Pluggable search_path => 'Child::Component', sub_name => 'components';
}

### パターン4
sub import {
use Module::Pluggable package => 'Child', search_path => 'Child::Component', sub_name => 'components';
}

### パターン5
sub import {
use Module::Pluggable package => 'Child', search_path => $_[0].'::Component', sub_name => 'components';
}

### 後略


で、その結果。

### パターン1
Use of uninitialized value in concatenation (.) or string at ../lib/Parent.pm line 16.
$VAR1 = {
'require' => 1,
'search_path' => '::Component',
'sub_name' => 'components',
'package' => undef
};
Parent at /usr/lib/perl5/site_perl/5.8.8/Module/Pluggable.pm line 28.

### パターン2
Use of uninitialized value in concatenation (.) or string at ../lib/Parent.pm line 16.
$VAR1 = {
'require' => 1,
'search_path' => '::Component',
'sub_name' => 'components',
'package' => undef
};
Parent at /usr/lib/perl5/site_perl/5.8.8/Module/Pluggable.pm line 28.

### パターン3
$VAR1 = {
'require' => 1,
'search_path' => 'Child::Component',
'sub_name' => 'components',
'package' => undef
};
Parent at /usr/lib/perl5/site_perl/5.8.8/Module/Pluggable.pm line 28.

### パターン4
$VAR1 = {
'require' => 1,
'search_path' => 'Child::Component',
'sub_name' => 'components',
'package' => 'Child'
};
Parent at /usr/lib/perl5/site_perl/5.8.8/Module/Pluggable.pm line 28.

### パターン5
Use of uninitialized value in concatenation (.) or string at ../lib/Parent.pm line 16.
$VAR1 = {
'require' => 1,
'search_path' => '::Component',
'sub_name' => 'components',
'package' => 'Child'
};
Parent at /usr/lib/perl5/site_perl/5.8.8/Module/Pluggable.pm line 28.


よく見ると、変数で指定している箇所が根こそぎundefinedな扱いになっている。
つまり、「Module::Pluggableのsearch_pathには変数使えません」ということっぽいorz

多分、Module::Pluggableがimportでとりまわしている箇所だからとか、そういう理由なのかもしれない。もう少し掘り下げて調べねば。。。

Module::Pluggable::Objectを直接扱えとか、そういう感じではないかと勝手に憶測してみたり。。。

2008-07-15

[Perl]Module::Pluggableのsearch_pathをうまく指定できず、悩む。

困った。
lib/Parent.pm


package Parent;
use warnings;
use strict;

sub import {
use Module::Pluggable search_path => $_[0].'::Component', sub_name => 'components';
}

sub new {
my ( $self, $opts ) = @_;
my $c = bless { option => $opts }, $self;
$c->{component}->{"$_"} = $_ for $c->components;
$c;
}
1;


lib/Child.pm


package Child;
use warnings;
use strict;
use base 'Parent';
1;


hoge.pl


use lib qw(./lib);
use Child;
my $child = Child->new;


で、hoge.plを実行。

$ perl hoge.pl
Use of uninitialized value in concatenation (.) or string at ./lib/Parent.pm line 6.


なぜだ。。。orz

2008-07-13

[Perl]オレオレなWebフレームワークをこさえてみる。

オイラ自身のPerlやらモジュールやらに対する理解を深める目的で、BreezyというMVCなWebフレームワークをこさえてる今日この頃。
とはいえ実のところ、HTTP::Server::Brickに乗っかりまくりなのですけど^^;

ぶっちゃけおいらは、開発速度とか速いほうではないです。
さらに、相変わらずテストとは微妙な距離を置いているので、出来は悪いかもですが、そのうちレポジトリを後悔・・・いやいや、公開しようかと思ってます。

基本構成は、
・Module::PluggableでMVC各コンポーネントおよびその継承クラスをロード。
・Dispatcherが各Controllerクラスからアクセスパスを割り当てる。
・HTTP::Server::Brick様にてサーブ。

という具合を目論んでいるけど。。。
はて、このクソ暑くてクソ忙しい状況下で、実際何処まで出来ることか。。。;;

大まかな思想としては、とにかくユーザ(Breezy利用者)のコーディング量の減少。コレ。
合言葉は「easy breezy!(超簡単!)」
# むしろ超テキトー!のほうがあってるかも・・・><