トップ 最新 追記

どんぞこ日誌

2003|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|07|08|12|
2007|01|04|08|12|
2008|01|02|03|04|06|07|08|10|11|12|
2009|01|02|04|05|06|07|08|09|11|12|
2010|01|03|04|07|08|10|11|12|
2011|01|02|03|04|05|06|07|08|10|12|
2012|01|02|03|05|06|07|08|09|10|
2013|01|02|07|08|09|
2014|08|09|
2015|08|
2016|06|07|12|
2017|01|03|08|
2018|03|
2022|03|
2023|03|
2024|02|

同人関連(どんぞこ楽屋) | 旧い雑文   


■2006-05-02

* [Perl] Text::MeCab再びB!

  お茶飲んで眠れないでいたところに3月につくったText::MeCabについてのTBが。ちょっと修正するだけでWindows以外にも対応するそうで。それよりもなんか弾さんに「タン」づけされてちょっとドキドキものですか。

ただ、まだnodeの中身にアクセスするのに{member}がいるというがダサイ。このあたり直すのはそんなに難しくないので、よかったら私の方でまとめるけど?

「あくまで自分でまとめたい」というのであれば喜んで添削の上patch進呈。

  あー、結構XS部分で直したいところ(マルチスレッド対応の方法があまりにヒドイのとか)があったりして何とかしようとは思っていたのです。お言葉に甘えて添削の洗礼&patchをお願いいたします。

[追記] すいません、patchお願いしますなんて書きましたが、牧さんがText::MeCabをつくられたのですから私のはもう公開する必要がありませんでした……

* [Perl] というわけでB!

 Text::MeCab (和製ライブラリの問題?)より。私のText::MeCabは公開停止しました。牧さんがCPANにアップしたText::MeCabを参照ください。

 両バージョンあってもいいんではないかなぁ〜。 については、 perl - Text::MeCab and Namespace Collision  の通りで、余計な混乱は避けたいですし、より良いモジュールに一本化されることにこしたことはありません。

[]

■2006-05-15

* [近況] 雨が多くてB!

 大変イライラします。

 今月のAcmeを2月から4ヶ月分書こうとしましたが、挫折。

* [Perl] threadsの新機能B!

  スタックサイズを設定できるようになったりと色々機能強化されているCPAN版threadsにkillメソッドが追加されて、個別スレッドに擬似的にシグナルを送れるように。

 $thr->kill('STOP');
 # $SIG{STOP}ハンドラが呼び出される

 ところでThread::Stateでpthread実装のithreadsでもプライオリティを変更できるようにする実験をしていたらエライめにあったので、やっぱり無茶はやめようと思いました。

* [Perl][メモ] 汚れUNIVERSALB!

  弾さんのwhichをUNIVERSALに入れた理由は?を拝見したのですが、私はfibisさんの感じ方に近いなあ。UNIVERSAL-which reviewsでAdam Kennedyさんのとか。……そうだ、もう「名前空間が汚れた!」と思ったら、とっととおさらばできるようにしておいたらどうかしら?

 use Symbol::Glob;
 
 sub goodbye {
   my ($proto, $method) = @_;
   my $class;
 
   if (@_ == 0) {
     die "use goodbye() with 1 or 2 args";
   }
 
   $class = ref $proto ? ref($proto) : $proto;
 
   if (defined $method and length $method) {
     my $glob
        = Symbol::Glob->new({name=>$class.'::'.$method});
      $glob->delete('sub');
      return;
   }
 
   no strict 'refs';
   for my $name (keys %{"$class\::"}) {
     next if ($name =~ /^[_A-Z]+$/);
     next if ($name =~ /::$/);
     my $glob
       = Symbol::Glob->new({name=>$class.'::'.$name});
     $glob->delete('sub');
   }
}

 クラスとメソッド名を渡せば該当のものをシンボルテーブルから削除。メソッド名を渡さなければ既存のシンボルテーブルにあるものを全部削除。うーん、せっかくだからどこからでも呼べるようにして……

 use UNIVERSAL::isa;
 use UNIVERSAL::can;
 use UNIVERSAL::which;
 use UNIVERSAL::goodbye;
 use Foo;
 
 my $foo = new Foo;
 
 # いらないメソッドよ、さようなら
 $foo->goodbye('meaningless');
 
 # 汚れたUNIVERSALメソッドよ
 # さようなら〜
 UNIVERSAL->goodbye;
 
 $foo->which('hoge'); # Error
 
 # isaやcanは再実装してね

  実にどうでもいいことですが、Acme::Scripticideにはgood_bye_cruel_world()というのがあります。

[]