katsuwo's diary - かつを日記

先月 2005年06月 来月
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
HNS logo

2005年06月03日(金)

#1 blog はじめました。

movable type で blog を作ってみました
主に車の話なんかはそっちでやってみようと思います。

なんでこの日記で書かなかったかというと、 というもっともらしい理由を付けて、 なんとなく 始めてみました。

でも hns は続けます:

それはそれとして、この日記も平行して更新しようと思います。
既にアーカイブとしてある程度の大きさになっているので、
また別のところでコンテンツを貯めるのは検索の手間がかかるだけなので。

単純に HNF の方が書きやすいであるとか、vi だけで済むのがいいとか、
そういった慣れの部分が大きいというのは確かなんですけどね。

扱いについては、しばらく使ってみてからまた考えてみようと思います。

2005年06月06日(月)

#1 www.monochrome.jp has not replaced, yet.

週末は細かいことで時間を取られてサーバリプレイスができませんでした。
残る作業は ppp まわりの設定が主なので、慎重にやる必要があります。

特にメールまわりは他人に迷惑を掛けないようにしないとまずいので、
ゆっくり時間の取れる週末まで放っておこうか悩んでいます。

2005年06月07日(火)

#1 Debian sarge was released!

sarge がリリースされました:)
debian developer のみなさん、お疲れ様です。

最近 unstable を追う必要を感じなくなってきたので、
新しい monochrome.jp サーバは sarge で環境を作ることにしています。

2005年06月08日(水)

#1 permalink と RSS

やじうまWatchは Permalink を装備して RSS を吐くべし を見て、
blog は優れたツールだなぁと深く実感してみたり。

とりあえず、hns にも RSS と permalink (らしきもの)が存在するにはするけれど、
blog のそれとは使い勝手がまるで違うと思うし、
検索エンジンへの登録のされ方も記事単位になることはほとんどありません。
そういう面では hns よりも blog の方が圧倒的に便利に思えます。

まぁ、そんなことはもう何年も前からわかっていたのだけど。


僕が hns に固執(?)していたのは alpha blogger たちの blog こそが blog で、
僕の日記なんて blog を使うまでもないと思っていたためなんですが、
いまや「〜で始めるブログ生活」なんて週刊誌の中吊りに乗るほどに
必ずしも専門性を必要としたものではなくなっているのも確かです。

そういうのを考えると、最近 blog を始めたのはいい機会かもしれません。

とかなんとか書くと:

まるでこの日記を終わりにするみたいですね(^^;

残念ながら、僕は blog tool のことを便利さで認めてはいても、
ssh + vi で記述できるこの日記のことはやめる気はないのでした *1
完全に手に馴染んでいるので、こっちの方が書きやすいんですよね。

僕の blog への imprinting(刷り込み) は相当に強いので、
不完全で専門性の低い内容を blog に書くのにためらってしまうというのもあります。
そういう意味で、僕が書いているのは「ブログ」であって blog ではないのでしょう。


とはいえ、hns の不完全さについても十二分に知っているわけで、
あいかわらずどう住み分けるべきか考えがまとまらないのですよねぇ。

*1: 実際、これも hns に書いているわけで。

#2 おめでとう日本

いろいろ言いたいことはあるけど、まずはおめでとう、日本代表。

だけど:

気分は今夜の Algentine - Brazil に飛んでいるのでした。

#3 誰のため?

今までずーっと手にしていなかった 誰のためのデザイン? を購入しました。
amazon のマーケットプレイスで 1660 円(送料込み) でした。

工学デザインについて、認知心理学的なアプローチで解説している名書らしいです。
院にいた頃に勧められていたのですが、ようやくの購入です(^^;
プログラム製品を世に送り出す一人として、しっかりと読もうと思います。

今は読書スタックがかなり減っているから大丈夫のはず、はず…(^^;

2005年06月10日(金)

#1 [perl] thread は join() では死なない

今まで問題が出なかったので気付かなかったのですが、
thread オブジェクトは join() で終了させただけでは、
プロセス内にいろいろ影響を出すようです。
#!/usr/bin/env perl

use strict;
use threads;

sub _thread_main()
{
  sleep(1);
}


# main routine.
my $fname = "tmp.dat";

open(FH, "> $fname");

my $th = threads->new(\&_thread_main);
$th->join();

close(FH);
unlink($fname);

この code を実行すると、tmp.dat ファイルが作成されたまま残ってしまいます。
これを改善するためには undef $th; を $th->join() の後ろのどこかで実行します。
具体的な挙動は調べきれなかったのですが、終了した thread であっても、
reference counter などに影響を与えているような感じがします。

とりあえず、終了が確認された thread オブジェクトは
さっくり消してしまうのが一番のようです。

こんなのも見つけた:

XML::Parser と encoding が指定されている xml file と thread は
食べ合わせが本格的に悪いようです。
#!/usr/bin/env perl

use strict;
use threads;
use XML::Parser;

sub dummy_handler($$)
{
}

sub _thread_main()
{
  sleep(1);
}


# main routine.
my $parser = new XML::Parser();
$parser->parsefile("target.xml");

my $th = threads->new(\&_thread_main);
$th->join();
undef $th;
というスクリプトに encoding 付きの xml file を食べさせると SEGV で落ちます。
% cat target.xml
<?xml version="1.0" encoding="x-euc-jp-unicode"?>

<test/>
% perl sample.pl
Segmentation fault

不思議なことに、encoding の指定をはずすと落ちなくなります。
% cat target.xml
<?xml version="1.0"?>

<test/>
% perl sample.pl
%

こっちは原因は全然分かりません(^^;
ActivePerl では次のメッセージが出力されるので、
これがキーになるとは思うのですが今はちょっと手が出せない…。
Free to wrong pool 1b35270 not 1623ff8 at C:/Perl/site/lib/XML/Parser/Expat.pm l
ine 655 during global destruction.

2005年06月14日(火)

#1 [perl] thread は join() では死なない - 2

書き忘れていたのですが、 tmp.dat が残ってしまうという現象 は ActivePerl でのみ発生します。
しかし、まったく無関係というわけではなさそうなので、補足します。

unlink() の動き:

以下のコードは Linux ではファイルが消えるのですが、Windows では消えません。
#!/usr/bin/env perl

open(FH, "> tmp.dat");

unlink("tmp.dat");

これは Linux では unlink() がデータの削除を意味しているわけではなく、
名前の通りリンク解除(file entry の削除)でしかないために発生します。
肝心のデータ自体は perl script 終了まで生きているので、ちゃんと使えます。

ファイルが正しく消えてしまうように「見える」のは、
単に現象が「見えづらい」だけのような気がします。

まとめ:

platform に関係なく、ちゃんと undef しましょう。

#2 オチ。

$some_thread->join() して終了させると
Scalars leacked: 1
というメッセージが出力される現象に悩まされ中です。

終了させても、ちゃんと書かれていない code には天罰が下るようです:p

2005年06月15日(水)

perl:

#1 thread と reference

次のコードを実行すると、"Scalars leaked: 1" といわれてしまう。
use strict;
use threads;

my %hash = ();
run_thread(\%hash);

sub run_thread($)
{
        my $th = threads->new(\&_thread_func);
        $th->join();
        undef $th;
}

sub _thread_func()
{
}

全然原因がわからなかったのだけど、run_thread() の呼び出し方を
my %hash = ();
my $hash_ref = \%hash;
run_thread($hash_ref);
と変更したところ、メッセージが出なくなった。

いったいどうして leak だって言われてしまうんだろう。

以上、7 日分です。
Powered by hns-2.10-beta7, HyperNikkiSystem Project

このページへの link はご自由に。 アンテナへの登録の際には di.cgi を使ってください。 RSS 使いは rss.cgi もどうぞ。