午前中から、どんどん雪が降ってきて、すごいことになる・・・
かと思ったら、雨になってすぐに消えてなくなってしまいました。
残念。
とても残念。
なんかみっともない話ですが、使い方を間違えてたんです・・・。
$@は、コマンドラインで指定した引数が入ってくるんですが、引数にスペースを含んだ文字列を指定した場合の振る舞いが特徴的です。
こんなシェルスクリプトで動作確認ができます。
#! /bin/sh
i=0
for a in "$@"
do
echo $i : $a
i=`expr $i + 1`
done
ためしに実行してみると
% sh ./arg.sh abc "def ghi"
0 : abc
1 : def ghi
という動きをします。
これを、私はずっと間違えていて、こう書いてたんです。
(一部のみ抜粋)
for a in $@
do
echo $i : $a
i=`expr $i + 1`
done
ただ、「"$@"」と「$@」の違いだけなんですが、動きは大違い。
% sh ./arg.sh abc "def ghi"
0 : abc
1 : def
2 : ghi
スペースが入ってると、そこで分離されてしまうんですね。
というわけで「"$@"」と書かなければならない!ということ。
☆
$@によく似た変数で、$*があります。
「"$*"」で使うと・・・
(一部のみ抜粋)
for a in "$*"
do
echo $i : $a
i=`expr $i + 1`
done
実行してみます。
% sh ./arg.sh abc "def ghi"
0 : abc def ghi
「$*」で使うと・・・
(一部のみ抜粋)
for a in $*
do
echo $i : $a
i=`expr $i + 1`
done
実行してみると
% sh ./arg.sh abc "def ghi"
0 : abc
1 : def
2 : ghi
なんか微妙・・・これはまる暗記して覚えるしかないのかも。
☆
こういう書き方
i=`expr $i + 1`
を最初に覚えたので、ずっとこの書き方を使ってるんですが、今どきの/bin/shでは
i=$((i+1))
という書き方もできるそうです。
i=$(($i+1))
と書いても同じ結果になるんですが、ふ~ん。
exprを使わなくてすむ分、性能向上しそうなので、じゃあ、これからこっちにしよう!と思ったら、Solarisの/bin/shではこの書き方、使えませんでした。ぎゃふん。
21世紀。もういらねーだろ、と思っていても、数年に1度くらいの頻度で、フロッピーディスクを使わざるを得なくなるはめになることがあるのです。
というわけで、FreeBSDでフロッピーディスクに書き込もうとすると・・・
とりあえずフォーマット
# fdformat fd0
Format 1440K floppy `/dev/fd0'? (y/n): y
Processing VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV done.
書き込む
# cat HOGE.IMG > /dev/fd0
cat: stdout: Input/output error
だめじゃん。
ddならどうだ?
# dd if=HOGE.IMG of=/dev/fd0 bs=512
dd: /dev/fd0: Input/output error
37+0 records in
36+0 records out
18432 bytes transferred in 4.378225 secs (4210 bytes/sec)
だめじゃん。
ってな感じで、書き込めないことがよくあります。
めったに使わないせいで、ドライブかメディアがだめになっているのかもしれません。しかし、これまでの経験上、どうもFreeBSD上でやると、かなりの高確率でエラーがでるような気がしてなりません。
(2009/2/26) 37の謎
別のフロッピーディスクを使ってみたところ、ddで、同じところでエラー発生。
1.44MBの2HDのフロッピーディスクは、18セクタ 2ヘッド 80シリンダなので、37 = 18*2 + 1 ということで、2つめのシリンダに移動したあとエラーが起きた、ってことで、なんとなく意味ありげ。
とはいえ、これだけで、ソフトウェアとハードウェアどちらに問題があるかは決められないですけど。
最近、portsのmonoがバージョン2.0になったときからだと思うのですが、半年くらい前の古いFreeBSD 6.3-STABLEなマシンで、monoをportupgradeしようとすると、途中で処理が先にすすまなくなります。
単純に、portsのmonoをmakeするだけでも同様。どうもmonoのプロセスが暴走してるらしく、CPU使用率も100%近くになります。
それとは別の、FreeBSD 7.1なマシンだと、正常にmakeできてます。
☆
gdbで見てやろうとattachすると、スレッドの処理のどこかにいるみたい。
「ktrace -p プロセスid」してみたら、たしか、segmentation faultみたいなエラーがえんえんと出ていました。
☆
なんとなくの思いつきで、/etc/libmap.confに
[mono]
libpthread.so.2 libthr.so.2
libpthread.so libthr.so
を書き換えたら、正常に(?)makeできるようになりました。
ま、いいか。
monoは何かの依存関係でインストールされてしまっただけで、とくに積極的に利用しているつもりはないし・・・
なんか勘違いしてるのかなぁ~?
fgetcsvを使って、こんなphpスクリプトを書いてみました。
% cat csvtest.php
<?php
$fp = fopen("csvtest.csv","r");
while( FALSE != ($data=fgetcsv($fp)) ) {
echo "data=";
print_r($data);
}
?>
読み込むCSVファイルcsvtest.csvはこんな内容。
% cat csvtest.csv
1,2,3,"あいうえお",4,5,6
2,3,"あいうえお",4,5,6,1
3,"あいうえお",4,5,6,1,2
文字コードは、日本語EUCにしてあります。
% hd csvtest.csv
00000000 31 2c 32 2c 33 2c 22 a4 a2 a4 a4 a4 a6 a4 a8 a4 |1,2,3,"あいうえ・
00000010 aa 22 2c 34 2c 35 2c 36 0a 32 2c 33 2c 22 a4 a2 |・,4,5,6.2,3,"あ|
00000020 a4 a4 a4 a6 a4 a8 a4 aa 22 2c 34 2c 35 2c 36 2c |いうえお",4,5,6,|
00000030 31 0a 33 2c 22 a4 a2 a4 a4 a4 a6 a4 a8 a4 aa 22 |1.3,"あいうえお"|
00000040 2c 34 2c 35 2c 36 2c 31 2c 32 0a |,4,5,6,1,2.|
0000004b
phpの関数fgetcsvは、CSVファイルを読み出して、フィールドごとに分解してくれるのですが、マニュアルによれば
http://www.php.net/manual/ja/function.fgetcsv.php
注意: この関数はロケール設定を考慮します。
ということになっています。
localeをCにして実行してみると
% env LC_CTYPE=C php csvtest.php
data=Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => あいうえお
[4] => 4
[5] => 5
[6] => 6
)
data=Array
(
[0] => 2
[1] => 3
[2] => あいうえお
[3] => 4
[4] => 5
[5] => 6
[6] => 1
)
data=Array
(
[0] => 3
[1] => あいうえお
[2] => 4
[3] => 5
[4] => 6
[5] => 1
[6] => 2
)
これは、まあそういうこともあるかな、という結果。
ところが、localeを、日本語EUCのja_JP.eucJPにすると
% env LC_CTYPE=ja_JP.eucJP php csvtest.php
data=Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => あいうえお",4,5,6
2,3,あいうえお"
[4] => 4
[5] => 5
[6] => 6
[7] => 1
)
data=Array
(
[0] => 3
[1] => あいうえお",4,5,6,1,2)
ダブルクォート「"」を見失って、「迷走」してます。どうして?
最初、ja_JP.EUC-JPにしたら
% env LC_CTYPE=ja_JP.EUC-JP php csvtest.php
data=Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => あいうえお
[4] => 4
[5] => 5
[6] => 6
)
~以下略~
となって、意図どおり動いているように見えたんで、locale名が間違ってるのか、と思ったんですが、どうもこちらは、ja_JP.EUC-JPなんていうlocaleは存在しないので、C相当の動作になっている、ってことらしいです。
☆
さて、エンコードをUTF-8にしてみると
% mv csvtest.csv csvtest.csv.org
% iconv -f EUC-JP -t UTF-8 csvtest.csv.org > csvtest.csv% env LC_CTYPE=ja_JP.UTF-8 php csvtest.php | iconv -f UTF-8 -t EUC-JP
data=Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => あいうえお
[4] => 4
[5] => 5
[6] => 6
)
data=Array
(
[0] => 2
[1] => 3
[2] => あいうえお
[3] => 4
[4] => 5
[5] => 6
[6] => 1
)
data=Array
(
[0] => 3
[1] => あいうえお
[2] => 4
[3] => 5
[4] => 6
[5] => 1
[6] => 2
)
ということで、UTF-8なら大丈夫っぽい。
ちなみに
% env LANG=ja_JP.UTF-8 date | iconv -f UTF-8 -t EUC-JP
2009年 2月23日 月曜日 22時30分10秒 JST
なので、ja_JP.UTF-8というlocale名は正しいと思う。
☆
デフォルト設定では、こんな感じになってるんですが、何か関係あるのでしょうかね。よくわかってないままphpを使っていたりするのが悪いのかも。
% php -i | grep -i encoding
iconv.input_encoding => ISO-8859-1 => ISO-8859-1
iconv.internal_encoding => ISO-8859-1 => ISO-8859-1
iconv.output_encoding => ISO-8859-1 => ISO-8859-1
mbstring.encoding_translation => Off => Off
mbstring.internal_encoding => no value => no value
mbstring.script_encoding => no value => no value
SQLite Encoding => UTF-8
☆
わかんないことがあればソースコードを見ろ!ってことで、cd /usr/ports/lang/php5/; make patchして、grepでそれらしい場所を推測して、眺めてみました。オープンソースって便利だね。FreeBSDって便利だね。
mblenとかいう、マルチバイトを考慮して文字列長を調べるのかな?って感じの関数が使われていましたが、よくわかんなかったです。
私は犬派。これまでの人生で、猫に触ったことさえほとんどなく、どうでもいいんですが。
犬の日は1月11日か?と思いきや、11月1日らしい。それとは別に「戌の日」ってのもあるそうだ。たしか腹帯を巻く日?
☆
こいつ・・・
そんなこと↓言ってるけど
ぜったい、猫じゃねぇっ! って思う。
ドラえもんのヒントになったのは、「ポロンちゃん」という、赤ちゃんの形をした“おきあがりこぼし”人形だった、という話が、「ドラえもん誕生」という作品に描かれていました。ポロンちゃんと猫を足した、ってことになってましたが…。
あと、ドラえもんの色が青いのは、「小学一年生」などの雑誌掲載時はカラー印刷になるので、ちっちゃな子供がよろこぶように、カラフルな色使いをしたいと思ったとき、青ってあんまり使うところがないな、じゃあ主人公を青くしてしまえ、とかいう大胆な理由だった、という話を読んだ記憶があるんですが、こっちはうろおぼえ。当時のカラー印刷技術の制約だったという話もあったような。
☆
もしかして、今年の12月で、ドラえもん誕生40周年ですか?1969年12月発売の雑誌で登場したはずなので。
確定申告が始まってるんですね。学生のころは、自分で何度かやってましたが(学生だと控除が少ねぇ、サラリーマンうらやましい、とか思ってた)、会社員となってしまった今は、年末調整で済んでしまっていて、まったくの無縁。病院にも行かないし、株取引もやんないし、自然災害にもあってないし・・・
昔はExcelで必死に計算しながら用紙に書き込んでたんですが、今は、e-Taxとかいうインターネットで確定申告できる仕組みがあるんですね。MacOSではできないよ~、とか、なんだかな~って感じもありますが、手間を省くためにはやむをえない、ってところでしょうか。
☆
いったい何につかうんだ?っていう雰囲気もしますが(笑)、パソコンでICカードを読み書きする機器を持ってます。
SCR3310-NTTCom
e-Taxとも無縁だし、住基カードって何?って感じの私ですが…
こんなのマイナーな周辺機器だろうと思ってたんですが、店頭では、何種類も、たくさんうってました。1月中ごろの話。
☆
e-Taxのウェブサイトを見て、たまたま気がついたんですが、
「MMX Pentium 226MHz」なんていう製品は、なさそうな感じ。
CPUのクロック周波数は、だいたい33の倍数なので(33.3くらい。PCIバスのクロック周波数が元になっているのかな)、33.3×7≒233、33.3*8≒266ということで、233MHzか、266MHzの間違いじゃないかと思います。
上に書いてある仕様を満たすパソコンってのは、だいぶ古いパソコンに相当するので、ネットブックでも十分…と思ったら、画面解像度が満たせてないですね。
いきなり無駄話から。
10数年前くらい前は、ソフトウェアをインストールするときは、自分でMakefileを書き換えたり、config.hとかいうファイルを書き換えたりして、makeして、エラーがでたらソースを直したり、インストールするには、手でファイルをコピーしたり・・・そんな感じ。
だんだんとautoconfが使われるようになってくると、「configure; make ; make install」の3つのコマンドだけで、インストールできるようになりました。これはすごい便利だ!と感動ものでした。
ただ、make installはあっても、make uninstallのようなものはなくって、アンインストールしたい、とか、バージョンアップしたい、とかいうときは、それはそれで面倒なことになります。
ちょうどそのころPC UnixとかLinuxが台頭してきましたが、「ソースからコンパイルするなんてめんどくさい。バイナリファイルをコピーするだけですむ、バイナリパッケージでいいんじゃね」的なスタイルも増えていきました。まだまだCPUパワーが低かったので、「make world」を実行すると、本当に1週間かけて「天地創造」しちゃう・・・という理由もあったかと思います。
FreeBSDでもバイナリパッケージはありますが、そのバイナリパッケージを作る仕組みとして「ports」があります。これは、ソフトウェアをインストールするための手順を記述したMakefileと、インストールすべきファイルの一覧リスト、必要に応じていくつかのpatchファイルなどから構成されています。makeと実行するだけで、自動的にソースコードをダウンロードして、自動的にソースコードからコンパイルしてくれます。しかも、コンパイルするときに、いろんなカスタマイズができるので、おまかせのバイナリ・パッケージでは不可能な、自由度の高さ、これが私のお気に入りなのです。
パッケージ管理の仕組みに頼らずに、自分でコンパイルしてインストールする、いわゆる「野良ビルド」がよくないのは、アンインストールやバージョンアップが簡単にはできない、っていう理由もありますし、インストールした人じゃないと、どういう設定でインストールしたのかがわからないので(メモが残してあったとしても、本当にそのメモが正しいとは限らなかったり)、管理者が変わると、もうわけわかんねぇ無秩序な状況に陥ってしまうことだと思います。
たった一人で使っているマシンなら、その人が責任をとればいいだけですけどね。
でも、FreeBSDのportsは異様に充実してて、私の場合、インストールしようと思うソフトは、ほぼすべてportsに入ってます。だから野良ビルドは、ほとんど無いです(fvwmとxemacsだけかな)。
「googleで見つからないウェブページは、存在しないのと同じ」と言われることがありましたが、それと同様に、「portsに入ってないソフトウェアは、存在しないのと同じ」と言ってもいいかもしれない、と思ってます。
FreeBSDのportsとよく似た仕組みが、NetBSDではpkgsrc(ぱっけーじ・そーす、って言うのかな?)という名前で用意されています。てゆーか移植版?
pkgsrcのすごいところは、NetBSD専用というわけではなくて、Solaris、Linux、FreeBSDなど、さまざまなプラットフォームに対応しているところ。残念ながら、私の周りには、NetBSDは無いのですが・・・。
Solaris、Linux、FreeBSDさまざまなマシンが混在する環境で、まったく同じソフトウェアをインストールすることができるので、プラットフォームの違いを極力感じさせない、使い勝手のよい計算機環境を提供できます。
あと、pkgsrcって、管理者権限がなくても、一般ユーザーで利用することができます。デフォルトでは、/varとか/usrとか、一般ユーザーでは書けないディレクトリにファイルを置いてしまいますが、最初のインストール時に、どのディレクトリにファイルを置くか指定できるようになってます。
というわけで、pkgsrcもお気に入りなんですが、マルチ・プラットフォーム対応!と大風呂敷を広げているせいか、やっぱり細かいところで漏れはあるみたいで、たとえばSolarisで使っていると、たびたびよくわかんないエラーがでることもあったり。
あ、そうそう、FreeBSDで、portsとpkgsrcの両方を使うことも、不可能ではないのですが、たまにトラブルが起きます。同じディレクトリ名を使っていたり、同じコマンド名があったり、似たような名前の共有ライブラリがありますので。mk.confや環境変数を工夫することで、だいたいなんとかなるんですが。
これまで困ったのは、portsとpkgsrcの両方でphpをインストールしてあるとき、portsでphpをビルドしようとすると、configureスクリプトが、pkgsrcで/usr/pkg以下にインストールしてあるファイルを先に見つけてしまう、ってことがありました。「mv /usr/pkg /usr/pkg-」とかやって、毎回、お茶を濁しています。
☆
以前、SPARCなSolaris10で、pkgsrcを使っていろいろソフトをインストールしてあったんですが、インストールしたまんま放置してたので、先日、ひさびさにアップデートしておこう、という気分になりました。
そしたら、あちこちで、共有ライブラリが見つからなくてビルドに失敗。
lddで見ると(一部のみ抜粋)、
libgcc_s.so.1 => /usr/pkg/gcc3/lib/libgcc_s.so.1
libgcc_s.so.1 (GCC_3.4) => (version not found)
libz.so.1 => /usr/pkg/lib/libz.so.1
libz.so.1 (SUNW_1.1) => (version not found)
という感じの、おかしな状況が発生してました。
☆
まずはzlibの問題について。
これ、どうやら、もともとOSの一部として存在していた/usr/lib/libz.soと、pkgsrcでインストールした/usr/pkg/lib/libz.soの、両方が混在して使われてしまっているらしいです。
たぶん、pkgsrcでインストールするソフトは、常に/usr/pkg/lib/libz.soを使ってくれればいいはずなので、それってどうやるんだろう?と思い、デバッグオプションを指定してbmakeしたり、pkgsrc/mk/以下のファイルをgrepして眺めてみたりしていて、ようやく発見しました。
/etc/mk.confに
PREFER.zlib = pkgsrc
と書いておけばよいみたいです。
この設定をしてから、zlibを利用しているソフトを再ビルドして、とりあえず解決。
ところで、pkgsrcの仕組みって、とっても変わっています。ビルド中には、作業ディレクトリの下に、
work/graphics/freetype2/work/.buildlink/lib/
といったディレクトリが作られて、このディレクトリ内に、各種共有ライブラリへのシンボリックリンクが張られて、このディレクトリを指定してリンクしてます。
PREFER.zlib = pkgsrc を書くと、.buildlink以下に、libz.so*へのシンボリックリンクが作られるようになりました。
コンパイル中に実行する各種コマンドも、/usr/pkg/bin/や/usr/bin/以下のコマンドが実行されるのではなくて、ラッパースクリプトがwork以下に作られて、ラッパースクリプトを実行するようになっています。
こうやって、プラットフォームの違いを吸収してるんですね。感心しました。
☆
つぎにlibgcc_s.so.1の問題。
こっちは難しかった。あれこれ再ビルドしても、どうしても
libgcc_s.so.1 (GCC_3.4) => (version not found)
が出るんです。gcc34の再ビルドまでして、試行錯誤していくうちに、lddの表示が変化しました。
libgcc_s.so.1 => /usr/pkg/lib/libgcc_s.so.1
libgcc_s.so.1 => /usr/pkg/gcc34/lib/libgcc_s.so.1
おぉっ! なんか、2つ混じってる。
/usr/pkg/lib/libgcc_s.so.1 の方は、タイムスタンプがけっこう古くて、昔インストールしたgccの残骸ファイルみたいでした。というわけで、こっちを削除。
あとは、いくつか再ビルドして、やっとこさ問題解決できました。
☆
自分でももう忘れていたんですが、昔書き残しておいた
(Solaris10) gcc -std=c99のとき、Undefined symbol __builtin_isnan となってエラー
の中に、
pkgsrcで、lang/gcc34が、すんなりとはビルドできなかった
という記述があって、そのときもzlibでトラブルがおきてました。
「-lz」で指定すると、64bitバイナリのビルド中に、32bitバイナリなlibzをひっぱってきてしまう、というのがトラブルの原因です。
当時は気がつかなかったことに、今回、気がつきました。
ビルド中の作業ディレクトリの中を眺めていたら、その中に、gcc34が自前で用意しているらしいzlibがありました。ただ、名前が微妙に変更されています。こんな感じ。
lang/gcc34/work/obj/sparc-sun-solaris2.10/sparcv9/zlib/libzgcj_convenience.la
というわけで、「-lz」の代わりに、libzgcj_convenience.laを使ってやればいいんじゃね?ということ。
エラーが出るのは、libjavaを作ってる途中なんですが、
lang/gcc34/work/obj/sparc-sun-solaris2.10/sparcv9/libjava/Makefile
の中で
SYS_ZLIBS = -lz
となっているところを
SYS_ZLIBS = ../zlib/libzgcj_convenience.la
に変更すれば、うまいことビルドできました。
いや、途中、attempted multiple inclusion of fileというwarningが、何度も出てましたが、見なかったことにしておきます。
それと、Makefileを書き換えても、32bit版のほうが再ビルドされなかったので、手でファイルを削除して、強制的に作り直させました。
☆
そんなに苦労するんだったら、素直にバイナリパッケージを使えばいいのに、って思う人もいるんだろうなぁ・・・
え~!新品川?
武蔵小杉に新幹線の駅が欲しいな。新横浜はいらないから・・・
NHKスペシャルの「沸騰都市」 「第8回 TOKYOモンスター」をなんとなく見たら、Production I.Gのアニメをやってました。
アニメは日本の文化なので、近未来の東京の姿をアニメで表現しました、みたいなものだったんですが、どっちかというと、劇場版のパトレイバーと、攻殻機動隊を足して2で割って、制作費はケチってみました、みたいな感じのものでした。それなりにおもしろかったですけど。
武蔵小杉は東京都じゃないけど、多摩川が氾濫すれば、東京都になるかも。
レガシーからの脱却のためには、いろいろと苦痛を伴うようで、やれやれな話。ソフトウェアのバージョンアップってのは、トラブルがやっぱり起きますね。
現時点でXOrg 7.4にアップデートするときは、テスト用に別環境を用意するか、もしくは、いっそのこと、新規インストールしたほうが、いいかもしれません。仕事で使っている環境をアップデートするときは、くれぐれもご注意を。従来どおりの環境に回復するまでに、けっこうな作業時間をとられる可能性があります。
FreeBSDのportsでXOrgが7.4にアップデートされたことで、いろいろ大きな変更が行われ、トラブル発生の可能性があるという話は目にしていたので、自分のお仕事用環境は、しばらくアップデートさせていなかったんです。別のパソコンで動作確認したら、とくに問題ないようなので、エイヤっ!と、お仕事環境もportupgradeしてしまいました。
そしたら、もう大変。
一応、事前に仕入れていた情報に従い・・・、
http://gihyo.jp/admin/clip/01/fdt/200901/27
FreeBSD Daily Topics
2009年1月27日 ≪注目≫X.Org 7.4へのアップグレード方法とトラブルシューティング,グラフィックアクセラレータの選択指針
xorg.confも書き換えたし、haldやdbusは以前から動かしてたし、別パソコンでは動いてるんだし、自宅のパソコンでも動いたし、もうこれでほぼ100%大丈夫かと思ってたんですが・・・
まず、gnomeな環境で起動しなくなりました。Xサーバは立ち上がるのですが、なんか途中で、固まっています。CPU使用率が100%になる、ってわけでもなく、何にもおきない、先に進まない・・・
しかたないので、つい最近まで使っていたfvwm-1.24な環境(笑)に戻しました。
さて、とりあえずこの環境のままお仕事をして、あとは、ひまを見つつ、なんとかgnome環境を復活させようと、思った・・・んですが
あれ?!キーボードの配列が英語配列になってる。
まあ慣れてはいるので、それでも使えなくはないんですが、controlキーとcaps lockを入れ替えたいとか、それとときどき思うんですが、「~」キーってどこだ!?みたいな、戸惑うこともあるので、/usr/ports/UPDATINGに書いてある
1. Add Option "AllowEmptyInput" "off" to your ServerLayout section.
This will cause X to use the configured kbd, mouse, and vmmouse
sections from your xorg.conf
を行いました。
とりあえず、これで1日目は経過。裏で少しずつ、portupgradeして、gnome2な環境を回復させようとしてました。
2日目。コンソールでログインして、startxでXを立ち上げて・・・
あれ? う~ん? おかしい! ダブルクリックができない・・・
xevで見てると、ボタンリリースイベントが発生していないっぽいような感じ。
どういうこったい。
ちなみに、キーボードもマウスも、PS/2です。
しかたないので、xorg.confのOption "AllowEmptyInput" "off"を削除して、hald経由で、マウスとキーボードを使うようにしました。
あとは、キーボードの配列を直せばいいんでしょ、ってことで。
適当なキーワードで検索してみたところ、何件かの情報が見つかりました。時期によって、違いがあるみたいなのですが、現在は、こんな内容のファイルを、
<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
<device>
<match key="info.capabilities" contains="input.keyboard">
<merge key="input.x11_options.XkbModel" type="string">jp106</merge>
<merge key="input.x11_options.XkbLayout" type="string">jp106</merge>
<merge key="input.x11_options.XkbOptions" type="string">ctrl:swapcaps</merge>
</match>
</device>
</deviceinfo>
/usr/local/etc/hal/fdi/policy/x11-input.fdi とかいう場所においておけばよいらしいです(ファイル名はこのとおりでなくてもいいみたい)。
(追記)
このファイルを作ったあとに、haldを再起動する必要があるみたいです。
/usr/local/etc/rc.d/hald restart
私の場合、CtrlキーとCaps Lockを入れ替えるために、ctrl:swapcapsというのを入れてあります。ただ、これで入れ替わるんですけど、modifier key(xmodmapコマンドで設定できるもの)が、意図どおりになっていなくて、「キーシンボルがCaps Lockのキーを押すと、controlになる」という、元のまんまじゃん、な状態になりました。でも、これは、Xorg 7.4よりも前から、こんな感じだったかも。この程度のことなら、とりあえず、xmodmapを駆使してなんとかなります。てゆーか、ctrl:swapcapsって不要?
(追記)
昔、xorg.confでctrl:swapcapsを設定するのではなく、xmodmapを使ってCtrlキーCaps Lockを入れ替えてたんですが、どうやらどこかで、その設定をしたxmodmapのファイルが読み込まれてしまっているみたいです。入れ替えたのをまた入れ替えて、元に戻ってる・・・みたいな。
あと気になったのは、なぜか、右ctrlを押すと、backslash「\」が出ました。場所は近いんで誤爆? それとも私の環境が変なのかもしれません。
今日は、これでなんとかマウスとキーボードが使えるようになりました。明日はどうなるかわかりません(苦笑)
実は、家のパソコンでも、キーボードが英語配列になっちゃった!と気がついてたんです。ところが、たまたまそのときはKDEを使っていたため、KDEの設定で、日本語配列にしたり、CtrlとCaps Lockも入れ替えできてたので、そんなに問題視していませんでした。
☆
GNOMEな環境が立ち上がらない件。
gnome-sessionを実行すると、metacityとか一応プロセスは起動しているんですが、画面がまったく書き換わらず、なんだかだんまりになるんです。
fvwmにしてお茶を濁していたんですが、ほかにもだんまりになるプログラムがあることに気がつきました。gnome-terminalとかgimpとか。
2日目にして、やっとわかりました。原因は、libxcb。
libxcbが2つリンクされていたためらしいです。
libxcb.so.1 => /usr/local/lib/compat/pkg/libxcb.so.1 (0x28b16000)
libxcb.so.2 => /usr/local/lib/libxcb.so.2 (0x291f1000)
metacityもそうなってました。
portupgradeは、実は、別のマシンでビルドしたバイナリパッケージを使ったんですが、どういうわけか、こんなことになってしまいました。libxcb更新後、いろいろ再ビルドが必要だ、って話があったんですが、どうも「別のマシン」では再ビルドしたけど、バイナリパッケージは、作り直していなかったのかもしれません。自業自得か
昨日の日曜日から、目がかゆくなったり、鼻水が出たりするようになりました。花粉ですね。
最近はそんなひどい症状が出てないので、なおっちゃったのかも、と思ってたんですが、1年たつと、やっぱりまた同じかんじ。
自分の場合、去年より約1ヶ月早く、症状が出てます。
とりあえず、ミントっぽいなんかを食べればいい、と思って、家にあったコレを食べたたら
(写真はイメージです)
・・・なんか味がおかしい。
☆
今朝まであったかかったのに、夜になったら、はっきり言って、寒い!すごい気温差。
■ 過去記事
たまにやってる、さだまさしのなんとかいう番組を、今朝未明、楽しく見ました。
今、NHKで一番おもしろいテレビ番組です。
いつもは忘れててほとんど見逃すんですが、大晦日の夜の回を見たときは(正月のテレビ番組はつまんないはずなので、その代わりにと、録画しておいた…)、ものすごく感動したので、今回は絶対に忘れないようにと録画予約までして、そして生放送だから生でも見ました。
いつも、手作り感たっぷり。
NHKらしくない、お遊びたくさん。
視聴者からのお便りを読んだり。ところで、雪見遠足って、静岡県固有の行事なんでしょうか?ちびまる子ちゃんでもそういうエピソードがあったと思いますが…。自分の場合、幼稚園のときだったかな。
そして、ほんの少しだけ、歌を歌ったり(笑)
こういう良質な番組をいくつも見られるから、NHKの受信料を払って満足してます。最近の民放は、くだらない番組が多すぎです。
なお、次回は4月だそうです。
今日は、あの日ですよね。そう、1970年1月1日0時0分0秒から秒数を数えると、
1234567890
になる瞬間を迎える日。ちなみに、そのほかのことには、あまり関心を持たないことにしています。
1970年1月1日0時0分0秒ってのは、なんじゃらほい?
という人もいるかもしれませんが、これは、UNIXの内部で時刻を扱うとき、1970年1月1日0時0分0秒を原点として、秒数で数えているからです。
FreeBSDのtime(3)のマニュアル
http://www.freebsd.org/cgi/man.cgi?query=time&apropos=0&sektion=3&manpath=FreeBSD+7.1-RELEASE&format=html
UNIXが誕生した(C言語が誕生した?)瞬間からさかのぼって、ちょうど切れ目のよさそうな日時、ってことで選んだのでしょうかね。
ちなみに、これまで32bit幅の符号付整数で秒数を数えてきたために、「2038年問題」というのが待っています。
ウィキペティア 2038年問題
http://ja.wikipedia.org/wiki/2038%E5%B9%B4%E5%95%8F%E9%A1%8C
ちなみにMS-DOSは、1980年1月1日から数えてました。
さらに話が脱線しますが、MS-DOSのFATファイルシステムでは、ファイルのタイムスタンプで、秒に使うビット数をケチって5ビット(0~31までしか表現できない)しか用意しなかったので、この5bitの値の2倍の値を秒として使うことにしたため、タイムスタンプの秒は必ず偶数になる、という、すばらしく割り切った仕様がありました。このアバウトさは、米国精神の表れなのではないでしょうか。
FreeBSDの/usr/include/fs/msdosfs/direntry.hにある、
#define DT_2SECONDS_MASK 0x1F /* seconds divided by 2 */
がその5bitの部分です。
☆
UTC(協定世界時)の1970年1月1日0時0分0秒から数えるので、日本の場合、時差を考えると、2009年2月14日午前8時31分30秒に、1234567890を迎えました。
1234567890になる、その瞬間を、ものすごくアナクロな手法で待っていて・・・
あー 1秒ずれた!! もう人生の終わりだー!いや、世界の終わりだー!
衝動買いしたHP ProLiant ML115 G5ですが、これ、サーバーっていう用途のためでしょう、サウンド機能はついてません。
最近はサウンド機能はマザーボード上にのっかってしまっているものですが、昔は、拡張スロットにサウンドカードを挿して、それでサウンド機能が使えるようになるのが当たり前でした。
サウンドカードなんてものは、昔からパソコンを使ってる人は、何枚も所有していたりすると思います。私も、何枚もはないですが、手元に、1枚あまってました。ちなみに、初めて買ったのは、SoundBlaster Proでして、ISAです。ISAの拡張スロットなんてものは、絶滅してもう久しいですね。
☆
あまってたサウンドカードは、こんなの。よくわかんないメーカーの、当時5000円程度で買ったものだと思います。たぶん、5~6年以上前でしょうね。
こいつを、ML115 G5の、ただ1つあるPCIスロットに挿して・・・
挿そうとしたら、あっ、挿さらない。切り欠き(境目になってる部分)の位置が違う。
ML115 G5は、3.3V専用のPCIスロットになってます。
一方、あまってたサウンドカードは、5V専用なんです。というわけで、使えない。
そんな罠があったとは。
そういえば、AGPにも、3.3Vと、1.5Vの2種類がありましたね。
☆
参考までに。
たぶん、ある時期から、3.3V、5V両対応の拡張カードが主流になってるんじゃないかと思います。
■ 過去記事
昨日は一日かけて、自宅内サーバーのハードディスクを交換しました。
交換する理由ってのは、ハードディスクでエラーが出てたから、というのがあるのですが、それ以外に、ここ2週間くらいの間に、原因不明のフリーズが2~3回、発生していまして、それって、ディスクが原因?という気がしたからでもあります。
で、交換してみて・・・やっぱりフリーズするじゃん。ディスクは関係なかった。
portupgradeで、そこそこ負荷をかけてやると、1時間ほどで、OSごとフリーズ、まったくの無反応になります。画面にpanicといったメッセージも表示されないので、まったく原因不明。
この手のトラブルは、電源が原因かな?という気がするんですが、512MBのメモリが2枚ささっているうち、1枚を抜いてみました。とりあえず、今すぐできる方法ってことで。
メモリを512MB、1枚だけにして、ふたたびportupgradeを実行してみてるんですが、今のところ、順調です。メモリ・・・なのかなぁ?memtest86してみよっかな。たとえメモリが原因だとしても、この手の微妙な症状って、memtest86でも見つけづらいような気もします。
マザーボードは、年末に買った
です。いつもサーバーは、ジャンク・パーツのよせあつめで組み立てるのに、なぜか今回だけは、新品を買ってきました。これまでは、ジャンクとはいえ、1年以上動き続けてたりすることもあったので、それだけに、調子が悪いってのは、なんか納得いかないです。
このマザーボードでFreeBSD7を使ってて、1つ気になっている不具合があります。
それは、shutdownしても、どうも、ちゃんと電源が切れない、ってこと。shutdown -pすると、画面も消えて、PowerのLEDも消えるのですが、ハードディスクや、電源のファンは回り続けています。5V系は切れてるけど、12V系は給電されつづけてるような感じ。
あと、もう1つあった。
あまってたメモリ、1GBを2枚さしたら、1GBしか認識されませんでした。1GB、1枚だけでも、1GBと認識しています。バンク数の制限なのかなぁ?マニュアルでは、一応、2GBまでOKとなっていますけど。
☆
(2009/02/14 追記)
512MB DDR2-667 1枚だけにして以来、Firefox3やThunderbirdをmakeしてみましたが、安定してます。
以前、powerdを動かしてるとわりと頻繁にフリーズする、っていう症状があったのですが、メモリのせいだった?
ところで、kdmを動かしたあと、kdmをkillしたら、kernel panicしました・・・何かの偶然?これまでのフリーズとは別原因だとは思いますが。
Fatal trap 12: page fault while in kernel mode
cpuid = 0; apic id = 00
fault virtual address = 0x188
fault code = supervisor read, page not present
instruction pointer = 0x20:0xc0782e04
stack pointer = 0x28:0xd5f85af8
frame pointer = 0x28:0xd5f85b10
code segment = base 0x0, limit 0xfffff, type 0x1b
= DPL 0, pres 1, def32 1, gran 1
processor eflags = interrupt enabled, resume, IOPL = 3
current process = 53257 (Xorg)
trap number = 12
panic: page fault
cpuid = 0
Uptime: 1d14h21m22s
Physical memory: 491 MB
Dumping 128 MB: 113 97 81 65 49 33 17 1
原因はXorgですかね。Xサーバーを強制終了させるのはよくない、とは昔よく聞いた話です。
サーバー用途なので、Xはめったに動かさないつもり。
ためしに動かした後、終了させるたびにクラッシュされたりしたら、さすがに困りますけど。
ようするに、急がば回れ ・・・という話。
自宅内の24時間動いてるFreeBSDなサーバは、ずいぶん前から、SMARTでディスクのエラーがレポートされるようになっていて、やばいな、と思いつつ、そのまま使ってきました。
週末に、Windowsで使ってるハードディスクのファイル整理をして、160GBの空きディスクを確保できたので、こいつでサーバのディスクを置き換えよう、と今朝から作業開始。
単純にファイルをコピーするだけでもよかったんですが、どうせなら、新規インストールしたほうが、すっきりするんじゃないか?と思いました。これまで、たぶん、FreeBSD 5.1くらいのころにインストールしたものを、アップグレードしつづけてきているので、ゴミファイルが貯まっているんじゃないか?というわけでして。
サーバにはCD/DVDドライブなんてものはつけてないので、ときどきやる方法、先日も
(FreBSD, ML115G5) いつもの方法でFreeBSD 7.1-RELEASEにアップデートにしてみたけど… 途中でキー入力できなくなった
に書いた、CDを使わずにネットワークインストールする方法を用いることにしました。
交換先のディスクは、外付けのUSB接続にして、da0として認識されるようにしました。内蔵のディスクはこれまで使ってたものをそのまま。
これでうまくいくはずなのに、なぜか、ネットワークインストールがうまくいかない。
じゃあ、ってことで、既存のディスクにあらかじめファイルをダウンロードしておき、そこからインストールさせよう、ということに。
うーん、これも、なぜかうまくいかない。ダウンロードしておいたファイルをうまく見つけてくれない。
おかしいな、と試行錯誤を繰り返すうちに、なんとまあ、今まで使っていたハードディスクで、FreeBSDが起動しなくなってしまいました。BIOSの初期化が終わって、ブートしようとした瞬間、invalid partitionとか表示されるので、パーティションテーブルのトラブルか?!
しかたないな・・・ということで、
ftp://ftp2.jp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/7.1/7.1-RELEASE-i386-livefs.iso
をダウンロードして、CD-Rに焼いて、こいつでHDDの修復をすることになる。
わざわざDVDドライブを引っ張り出してきて、接続して、・・・あーめんどくさい。
さて、fdiskでパーティションテーブルを見たら
なんすか、これは。パーティションが3つあって、3つともactiveになってる。というわけで、active partitionを変更するだけで、無事、元に戻りました。
さて、せっかくCD-Rを焼いたんで、そのままCDからインストールすることにしました。
"livefs"なISOイメージの場合、昔は、普通にコマンドプロンプトでブートしていたような気がしたのですが、それは気のせいだったのか、今回は、インストーラが起動してます。じゃあ、そのままインストールできるじゃないですか、そう思ったんです。
ところが・・・ファイルのコピーが始まった瞬間、filesystem fullみたいなエラーが出て、どうみても、うまくいってない。
しかたないので
ftp://ftp2.jp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/7.1/7.1-RELEASE-i386-disc1.iso
をダウンロードしてきて、CD-Rに焼いて、インストール先もUSB接続のda0ではなく、内蔵のATAなad0となるように接続しなおして、CDでブートしてインストール。
はじめから、この一番素直な方法をやってればよかった!!
ここ数日、なぜか偶然、まんが道がつづくのです(?!)
土曜日くらいに、たまたまテレビで、ブリトニー浜田という不思議な漫画家が出てて、この人はまんが道を読んで漫画家を目指したと言ってました。
日曜日には、手塚治虫の特別番組の中にあった「わが青春のトキワ荘― 現代マンガ家立志伝 ―」が、まんが道でした。
そして今日、iPodで聞いてたものの中に、間垣平九郎が登場。
「ぽっどきゃすてぃんぐ落語 (にふ亭)」
で1月7日配信された、神田きらりさんの講談「寛永三馬術 誉れの梅花 愛宕山」です。
http://www.podcastjuice.jp/rakugo/2009/01/post-9bdf.html
間垣平九郎という名前は、まんが道で出てくるので、覚えていました。
たしか、子供のころの満賀(モデルは安孫子)と才野(同、藤本)が、幻灯機で漫画の絵を上映するとき、満賀がネタに困って、間垣平九郎の本の挿絵を模写する・・・才野はオリジナルの作品を描き、「こいつは天才だ!」と満賀が衝撃を受ける・・・みたいなエピソード。
どうも、昔の子供ならよく知ってるお話らしいのですが、私は全然知らず、その後も、調べないまま。
最初は気がつかなかったんですが、Podcastを聴いているうちにだんだんと
「もしかしてこれって・・・?」
という気がしてきて、そして名前が出ると、
「ああ!ああ!これが間垣平九郎か」と思わず心の中で叫ぶ。
馬で駆け上ったのは、愛宕山の石階段だったんですね・・・そんなことも知らなくて。
このお話は、
徳川家光が気まぐれに「馬でこの階段を登って梅の枝をとってこい!」と無茶な命令を言って、家来が苦労。ようやく間垣平九郎が成功した
という内容で、これだけだと、ふ~んそうですか、くらいです。でも、講談になると、内容がおもいっきり大きく膨らむんですね。なるほどこういうものか、と感心しました。
☆
「ぽっどきゃすてぃんぐ落語」って、最近配信されなくなっちゃっていて、ニフティってやばいのか?!と思ってたんですが、ビデオPodcastの方が終わっちゃってて、音声だけの方は続いてたようです。iTunesだけ使ってると、何が起きてるのかよくわかんないです。iTunes、微妙だ。
英語の勉強と、時間の有効活用のために、iPodで英語のニュースのpodcastを見たりしてるんですが、~上達したようには思えないですけど~
しばらく前からよく目にしていた、米国でピーナッツバターがサルモネラ菌に汚染されていた、とかいうニュースを見るたびに思ってたこと・・・
てゆーか塗りすぎじゃない?!
見た目、厚さの比率は
(パン):(ピーナッツバター) = 2:1
くらいありそうです。
実は、ホイップクリームみたいに空気を含んでいて、けっこうライトなかんじだったり・・・はしないんだろうな、あの国では。
手塚治虫先生が亡くなって、もう20年ですか。早いものです。あのとき、受験勉強してたんだよな。
なんだか、NHKで、「手塚治虫2009」と題して、特別番組を連日放映するそうです。
http://www.nhk.or.jp/tezuka/index.html
BS20周年企画
手塚治虫2009
~いのち・科学・未来へGO!~
没後20年というよりかは、BS放送開始20周年記念という意味のようです。
今日は、「手塚治虫のすべて」という番組をやってました。
いぜん見たことがある番組を、もう一回放映するものでした。
たとえば
これなんかは、ベレー帽をかぶってない手塚先生の衝撃的な映像があったり・・・
手塚先生は、映さないでくれ、って言ってるのに。事務所チェックがよく通ったものだと。
☆
さて、そんないつか見た番組の中で、これ。これがもう一度見られて、とてもうれしかったです。以前、録画してはあったんですが、どこにあるのか見つけられなくて。
わが青春のトキワ荘
― 現代マンガ家立志伝 ―
ゲストの手塚眞氏も言ってましたが、これが、もう、貴重な映像もりだくさん。
たとえば、ナレーションを、藤子Aこと安孫子先生がつとめています。
おそらく、そのころ、アニメのドラえもんが大ヒット中だったので、そういう意味で抜擢されたのかと?
赤塚先生は、菊千代と遊んでるし、石ノ森先生は、屋上のピラミッドにお酒を入れるとおいしくなる、とかどうでもいいこと言ってるんで、まあ、トキワ荘メンバーで一番のりにのってたのが、藤子不二雄だった、ってことですかね。
あと、この番組のせいで、いまだに一部で有名らしい、宇土まんぶ君 (左側)
赤塚賞をもらったけど、番組中の赤塚先生のインタビューでは、そんなやつ知らん、みたいなこと言われてて・・・
集英社のまんが章のパーティーの映像とか、もう、すげー!ですね。キラキラした女の人たちが、レビューみたいなのやってたり。今でも、パーティーでは水着ギャルがいるとか言いますけど。
☆
さて、藤子A先生の「まんが道」を読んだことがある人にとって、この番組の中で、一番の見ものというのは・・・
上の左端の人・・・
藤子A先生も、牧歌的な漫画を描かせたら並ぶものはいない、と誉めていた・・・
そう、森安なおや氏
なんか、もう、涙なしで見られません。
森安氏は、ずっと漫画を描いていなかったそうですが、再び漫画を描き始め、この番組中で、作品を編集部に持ち込むシーンがあります。もうこれを見ると、胃が痛くなるというか、心がきゅーっとなります。
最後の最後で、こんな非情なラストが待っているという・・・。
まじで、この番組は、漫画界における貴重な記録です。
☆
ところで、ちょっと、うろおぼえですが・・・
右端が、藤子F、その隣が、藤子Aです。
左から2番目が、永田竹丸氏。藤子Fこと、藤本先生が亡くなったときに、新聞の投稿欄に文章をおくってたのを覚えています。
左から3番目は、坂本三郎氏。その後何をしてたんだろうと思ったら、伝説巨神イデオンなどの作画監督をやってたんだそうです。最近知りました。びっくり。
そして、中央にどんといるのが、寺田ヒロオ氏。この番組でも、貴重な姿が見られます。漫画のあり方に疑問を抱き、すでに漫画家を辞めてました。トキワ荘の取り壊し前にメンバーが集まったパーティーにも参加せず、メンバーも、最近のテラさんは変だ、とか話をしていました。
☆
この番組「わが青春のトキワ荘」って、その後のテラさん、森安氏のことを考えると、とても複雑な気持ちになります。
なんとなく欲しかったので、買ってしまいました。
ProLite B2409HDS
(iiyama)
23.6インチ 液晶ディスプレイ
1920x1080 (Full HD)対応
アナログRGB、DVI、HDMIの3入力
(メーカーのWebサイトへ)
ノングレア(つるぴかではない)です。個人的な好みとしては、つるぴかは避けたいです。
去年の秋ころに、テレビが壊れたので、地デジチューナーつきのディスプレイを買ったんですけど・・・、テレビを見ながら、パソコンも使いたい!
そのディスプレイでは、パソコン画面の中に、テレビ放送も小さく表示する、Picture in picture機能もあるんですが、なんか貧乏くさいんです。
これまで、19インチ、1280x1024の液晶ディスプレイを使ってたんですが、最近、Full HDなディスプレイがけっこう安いんで、もう1つ欲しいかも・・・と思ってて、とうとう買ってしまいました。
RGB、DVI、HDMIのケーブルが付属しているのも、ちょっとお得な感じ。
株式会社マウスコンピューターって書いてあって・・・あ、そういえば、iiyama(飯山)って、マウスコンピューターに吸収合併されちゃってたんですね。
☆
ワイドディスプレイ、しかも、1920x1080。広いですね。以前が1280x1024だったので、横幅がホント、広がりました。横がね。
縦は、あんまりかわんないんです。
本当は1920x1200のやつが欲しかったんですが、そっちは、あと1万円くらい高くなっちゃうんでやめときました。たったの1万円か、それとも、1万円もか・・・この判断は正しかったのか?ま、いいや。満足してます。
☆
これまで使ってたディスプレイと違った特徴としては
縦に回転できます。
ケーブルを接続してるんで、使ってる最中に、自由にくるんくるん回すわけにはいかないですけど。
昔、昔、Macintoshに、ポートレート・ディスプレイっていう、縦長のモノクロディスプレイがありましてね・・・どうでもいいか、そんな話。4:3のブラウン管を縦にしたもので、A4サイズ1ページ全体が見える、みたいな感じ。ワープロとかDTPとかに適していた?ような代物でした。
☆
縦表示にするには、ビデオカードの方でも、縦にして表示するよ、っていう機能が必要なんですね。たぶん、数年前くらいから、そういう機能はごく普通になってるんだと思います。
昔、昔、Macintoshには、Radius Pivotっていう製品があって、ブラウン管ディスプレイが回転するという、豪快なもので・・・
☆
うちでは、縦にして使うことは、あまりないかな、と思います。
帰宅したら、もうこんな時間。
今日は、朝から、あんなことをして、午前中もあれがあって、そして、午後いっぱい、いつものがあって、さらに夕方からあれして、それが終わって、夜にああなって。
最初は、そんな仕事したくないと思ってたのに、なんだかさらに役目を押し付けられ・・・とか思ってたけど、今では、これもいい経験だ、というかチャンス?!なんて思っていたりもします。
今のこの経験が、今後いい感じに役立っていきそうな予感。
上の人たちが、新しくきた我々に、精一杯尽くしてくれてるのが、よくわかる。
みなさんが健康でありますように。
あっちで見た夜空は、こっちよりも、ずっときれいだったような気がする。
満月でもない、三日月でもない、中途半端なような月。むしろ、そういうのが好きです。
最近読んでおもしろかったマンガ、その3。
西岸良平名作集
ポーラーレディ
「鎌倉ものがたり」に近い系統の作品。
藤子FのSF(すこしふしぎ)短編に、少し似てるようで、あまり似ていないかな。
この絵と、練りに練ったアイデアとストーリー、これがなんともまあ、すばらしくベストマッチ。
たとえば、これ、「ザ・ハンター」には脱帽です。ネタばれになるのであまり書きませんけど・・・
すごい! こんな作品を生み出してしまうなんて、天才です。
星新一のショートショートみたいに、これもまた、作品ごとのアイデアがすごい。
「鏡の中の殺人者」のラストは、西岸作品っぽくていい。
「二人の世界」の衝撃的お色気シーン(!?)も、イイ!
女性キャラも魅力的。
動物キャラがかわいい。
「名作集」と、とりあえず冠につけちゃうことがよくありますが、まじで、これ名作。
微妙に古いFreeBSD 6.3-STABLEなマシンで、ports/japanese/samba3をmakeしたときのことなんですが、configureの途中で、
checking for working mmap... (cached) yes
checking for fcntl locking... yes
checking for broken (glibc2.1/x86) 64 bit fcntl locking... no
checking for 64 bit fcntl locking... no
checking for st_blocks in struct stat... yes
checking for st_blksize in struct stat... yes
checking for st_flags in struct stat... yes
checking for broken nisplus include files... no
checking if the realpath function allows a NULL argument...
と、ここまで表示されて、まったく先に進まなくなります。
topで見てみると
PID USERNAME THR PRI NICE SIZE RES STATE TIME WCPU COMMAND
68040 root 1 127 0 2408K 744K RUN 1:43 92.58% conftest
という感じで、configureから実行されるチェックプログラムのconftestが暴走してるみたいです。
gdbで見てみると
# gdb ./conftest 68040
GNU gdb 6.1.1 [FreeBSD]
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-marcel-freebsd"...(no debugging symbols found)...
Attaching to program: /ports.work/ports/japanese/samba3/work/samba-3.0.34/source/conftest, process 68040
Reading symbols from /usr/local/lib/libexecinfo.so.1...(no debugging symbols found)...done.
Loaded symbols for /usr/local/lib/libexecinfo.so.1
Reading symbols from /usr/local/lib/libiconv.so.3...(no debugging symbols found)...done.
Loaded symbols for /usr/local/lib/libiconv.so.3
Reading symbols from /lib/libc.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/libm.so.4...(no debugging symbols found)...done.
Loaded symbols for /lib/libm.so.4
Reading symbols from /libexec/ld-elf.so.1...(no debugging symbols found)...done.
Loaded symbols for /libexec/ld-elf.so.1
0x481a57a7 in realpath () from /lib/libc.so.6
(gdb)
(gdb) where
#0 0x481a57a7 in realpath () from /lib/libc.so.6
#1 0x08048578 in main ()
デバッグシンボルのないライブラリをリンクしているので、詳細は不明ですが、とりあえず、realpathの中で暴走してるみたいです。
conftestはどんなプログラムなのか見てみると
・・・略・・・
#define HAVE_STAT_ST_BLOCKS 1
#define HAVE_STAT_ST_BLKSIZE 1
#define HAVE_STAT_ST_FLAGS 1
/* end confdefs.h. */
#include <stdio.h>
#include <limits.h>
main() {
char *newpath = realpath("/tmp", NULL);
exit ((newpath != NULL) ? 0 : 1);
}
なんていうコードです。realpathのマニュアルを読むと、realpathの第2引数には、ちゃんとメモリを確保して渡してやらないといけない、と書いてあるのに、あえてNULLを指定して、動くかどうか試してる・・・
sambaよ、あんた、いったい何をやりたいんですか?
ついでだから、realpathのソースコードをのぞいてみましょ。
# locate realpath.c
/usr/compat/linux/usr/share/doc/bash-3.0/loadables/realpath.c
/usr/src/bin/realpath/realpath.c
/usr/src/contrib/binutils/libiberty/lrealpath.c
/usr/src/crypto/openssh/openbsd-compat/realpath.c
/usr/src/lib/libc/stdlib/realpath.c
たぶん、これでしょう。
# ls -l /usr/src/lib/libc/stdlib/realpath.c
-rw-r--r-- 1 root wheel 5758 5 28 2003 /usr/src/lib/libc/stdlib/realpath.c
# what /usr/src/lib/libc/stdlib/realpath.c
/usr/src/lib/libc/stdlib/realpath.c:
realpath.c 8.1 (Berkeley) 2/16/94
whatじゃよくわかんない。中を見てみましょう。
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)realpath.c 8.1 (Berkeley) 2/16/94";
#endif /* LIBC_SCCS and not lint */
#include <sys/cdefs.h>
__FBSDID("$FreeBSD: src/lib/libc/stdlib/realpath.c,v 1.20 2003/05/28 08:23:01 fjoe Exp $");
revision 1.20ですね。
ソースコードは、こんな感じ。
char *
realpath(const char *path, char resolved[PATH_MAX])
{
struct stat sb;
char *p, *q, *s;
size_t left_len, resolved_len;
unsigned symlinks;
int serrno, slen;
char left[PATH_MAX], next_token[PATH_MAX], symlink[PATH_MAX];
serrno = errno;
symlinks = 0;
if (path[0] == '/') {
resolved[0] = '/';
resolved[1] = '\0';
第2引数resolvedにNULLを指定すると、segmentation faultになりそうなんですが・・・なぜ暴走してるんでしょうか。それはそれで謎です。
☆
とりあえずの解決方法としては、暴走してるconftestをkillしちゃう、というもの。
# kill 68040
ホント、とりあえずなんですが、これで、configureの処理が先に進みます。
configure:50431: checking if the realpath function allows a NULL argument
configure:50461: cc -o conftest -O2 -fno-strict-aliasing -pipe -DLDAP_DEPRECATED -D_SAMBA_BUILD_=3 -I/usr/local/include -I/usr/local/include -I/usr/local/include -L/usr/local/lib -Wl,-R/usr/local/lib -L/usr/local/lib -L/usr/local/lib conftest.c -lexecinfo -liconv >&5
conftest.c: In function `main':
conftest.c:418: warning: initialization makes pointer from integer without a cast
configure:50465: $? = 0
configure:50471: ./conftest
configure:50475: $? = 143
configure: program exited with status 143
configure: failed program was:
☆
この現象は、7.1-STABLEなマシンでは発生していなくて、半年以上前の6.3-STABLEなマシンで発生しました。
6.3だから必ず起きる、というわけではないのかもしれません。
こんな変なcheckプログラムを流そうとする極悪ソフトウェアなんて、もうどうでもいいや、という気がしているので、あんまり調べる気にもなれません。
ちなみに、configure.inの、この部分ですね。
AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
AC_TRY_RUN([
#include <stdio.h>
#include <limits.h>
main() {
char *newpath = realpath("/tmp", NULL);
exit ((newpath != NULL) ? 0 : 1);
}
],
samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
fi
どうして、マニュアルに書いてあることを無視して、NULLを渡すという変なことをするんですか。そんな変なコードを書くのは、Linux方面の仕業に違いない(←偏見です!)・・・と思って、CentOSで、realpathのマニュアルを見てみました。
ERRORS
EACCES Read or search permission was denied for a component of the path
prefix.
EINVAL Either path or resolved_path is NULL. (In libc5 this would just
cause a segfault.) But, see NOTES below.
~~~略~~~
NOTES
The glibc implementation of realpath() provides a non-standard exten-
sion. If resolved_path is specified as NULL, then realpath() uses mal-
loc(3) to allocate a buffer of up to PATH_MAX bytes to hold the
resolved pathname, and returns a pointer to this buffer. The caller
should deallocate this buffer using free(3).
ビンゴ。なるほどね。
それにしても、どうして、sambaは、"non-standard extension"に期待しなくちゃならんのですか?すなおに、メモリを確保すりゃいいのに。
とりあえず、食べとけ、てな感じでしょうか。東北東に向かってモグモグ。
100円引ということで、ご利益も割り引かれていそうな感じです。
これ、鬼退治巻という商品名?がついてます。
予定では、細めの太巻き(矛盾してますか!)を2~3本食ってやろう、とお腹をすかせて準備していたんですが、太い太巻き(あってます!)しか無かったので、まあ、1本で十分でしょ、と。
■ 過去記事