ぽっぺん日記@karashi.org
2006-07-05(Wed) [長年日記]
_ 武蔵流プログラマへの道 - skk.vimがvim.orgで公開!
ヘタレvim使いなんだけれども、SKKの使用歴(だけ)は長いので、非常に嬉しい。
_ databases/db44をインストール
portupgradeの標準DBがdatabases/db41になったらしく、良い機会なので、色々なバージョンが混在してインストールされているdb4*を最新版のdb44に更新、依存しているpackageも追随させたのでメモ。
作業手順は下記の通り。
まず、
portinstall /usr/ports/databases/db44
でdb44をインストール。
次に/etc/make.confに
WITH_BDB_VER=44
を追記した後、
portupgrade -fr 'db4*' -x 'databases/db4*'
で依存しているpackageを一気に更新した。このportupgrade手順では、apacheやpostfixなど、db44に追随出来ないportsまで再makeしてしまうので、ちとムダなのだが、今回の作業はそれなりに速いCPUを積んだpackageサーバ上で、-pオプション付きで行なっていて、他のマシンはこれで作成したpackageを使ってportupgradeするので気にしなかった。
portupgrade完了後、
- ruby18-bdb1
- db{41,42}
あたりをpkg_deinstallした。db43はdb44に追随出来ないapacheやpostfixが依存していたので手を着けず、そのまま。
_ Class::Accessorにおけるデフォルト値
あまりにも初心者すぎて、ちと恥ずかしいのだが、勉強の記念に書いておく。
Perlの勉強はあまり進んでいないのだが、ググって見付けた元祖 サトシのブログ : Class::Accessor で setter, getter を自動生成に書かれているClass::AccessorがPerl Best Practicesの書法にも対応していて便利そう。
ただ、どうやってインスタンス変数にデフォルト値をセットすればいいのか分からず、しばらく悩む。で、たぶん、newメソッドをオーバーライドすれば良いんじゃなかろうかと思い付いたので、こんなのを書いてみた。
#!/usr/bin/perl -w
use strict;
{
package Animal;
use base qw(Class::Accessor);
__PACKAGE__->follow_best_practice;
__PACKAGE__->mk_accessors(qw(name color));
sub new {
my ($self, $args_ref) = @_;
$args_ref->{name} = "an unnamed $self" unless (exists $args_ref->{name});
$args_ref->{color} = "brown" unless (exists $args_ref->{color});
return $self->SUPER::new($args_ref);
}
}
{
package Tiger;
use base qw(Animal);
}
my $tiger = Tiger->new;
print $tiger->get_name . "\n";
print $tiger->get_color . "\n";
my $tiger2 = Tiger->new( { name => "tora", color => "white" } );
print $tiger2->get_name . "\n";
print $tiger2->get_color . "\n";
動かしてみたところ、とりあえず意図した通りには動いた(これで正しいのか分からないけれど)。


まで頂ければ幸いです。
叛逆としての科学―本を語り、文化を読む22章(フリーマン・ダイソン)
ゲバルト時代 SINCE1966-1973 あるヘタレ過激派活動家の青春(中野正夫)