2007/04/27

領収書の添附の是非ってさ…

政治活動にお金を使った事を報告するのに、領収書の添附に抵抗があるってどういう事なんだろうか。 まぁ高いお金を出して水が飲みたいとか、特殊な趣向を持つ人たちもいるだろうけれど、自分で稼いだお金の使途を明らかにしろといっているわけではないんだから、ちゃんと一線が引ける大人なら困らないんじゃないんでしょうか。

実際には会食に参加した人が明らかになってはまずい場合もあるだろうし、政治活動の中にはいろいろあるんでしょう。
でもそんなに大切で秘密な会合なら自費にするとか、節約するとか、目的のためには我慢するべきところがあっても良いのではないかと思うわけですよ。

そもそも公にできない活動を経費で落そうなんていうのが気に入らない。 政治家個人の基礎控除に機密費を含めるようなものに思えてしょうがないのですが。。
いい訳を探している子どもを観ているような気分になってしまいます。

2007/04/24

USENの中間決算説明会をみる

普段USENというとGyaoばかりがメインだけれど、株式をそれなりに持っていたりする。
Gyaoは深夜の作業時に音楽や、空いている時間に映画やドラマや、レイパー佐藤の声帯模写を聴いたりするのに便利だけれど、投資家向けに決算説明会を提供してもいる。

あいかわらず宇野社長の語り口は信用できそうなんだけれど、会社の実績はあまりよくないし、第三者割り当て増資はするし、USENの株式を宇野社長が持ちすぎているのが気になるなぁ。
Equityを重視しているとはいうけれど、流動性がいまいちなんだよねぇ。

2007/04/22

ubuntu 7.04のXenでゲストOSを起動したものの

"xm"コマンドでdebianを起動したものの、ネットワークが認識されない! というわけで迷わず"/etc/network/interface"ファイルをチェックする。

 address 192.168.1.110
 gateway 
 netmask 

gatewayとnetmaskが空ではうまくいかないですね。
適当な値をいれて再設定しました。

$ sudo /etc/init.d/networking restart

ubuntu 7.04でXenを試す

ubuntu 7.04の配付が開始されたので、Xenを試してみました。
空いていたamd64なPCに7.04 x86_64版のDesktopを導入してから、とりあえずいくつか必要そうなパッケージをapt-getで導入しました。

$ sudo apt-get install bridge-utils xen-tools xen-utils xen-image-2.6.19-4-generic-amd64

まずはイメージの作成

Webサイトを参考にしつつ、導入されているxen関連と思われるパッケージからコマンドを探って行きました。
まず眼をつけたのが"xen-create-image"コマンド。 manで調べると、"xt-install-image", "xt-customize-image", "xt-create-xen-config"の処理をまとめてくれるらしい。
とりあえず試すだけなので、イメージの作成はこれを使うことにしました。 manを見ながらも、足りないオプションは催促されるので、出力されるメッセージを良く読むこと。

$ sudo xen-create-image --hostname xen01 --debootstrap --ip 192.168.1.8
しかし、このままだと/boot以下にカーネルイメージがないといったエラーがでてしまう。 どうやら /etc/xen-tools/xen-tools.conf のデフォルト指定が /boot 以下にないファイルを指定しているようだったので、この中の"kernel="と"initrd="の指定先にapt-getで導入したxen用のイメージを指定する。
kernel = /boot/vmlinuz-2.6.19-4-generic-amd64
initrd = /boot/initrd.img-2.6.19-4-generic-amd64
この状態ではまだ"xen-create-image"がエラーになる。xen-tools.confで"dir = "の指定がないと失敗するようです。

ここまでで作成したxen-tools.confの内容。

$ sed -e '/^#/d' -e '/^$/d' /etc/xen-tools/xen-tools.conf
dir = /home/xen
size   = 4Gb      # Disk image size.
memory = 128Mb    # Memory size
swap   = 128Mb    # Swap size
fs     = ext3     # use the EXT3 filesystem for the disk image.
dist   = etch     # Default distribution to install.
image  = sparse   # Specify sparse vs. full disk images.
kernel = /boot/vmlinuz-2.6.19-4-generic-amd64
initrd = /boot/initrd.img-2.6.19-4-generic-amd64
mirror = http://ftp.us.debian.org/debian/
これで再び"xen-create-image"を指定する。 今度は最後まで実行され、無事にイメージが作成できたようだ。

続いてブート

"xen-create-image"コマンドに"--boot"オプションを指定すれば、そのまま起動するようだったけれど、手動で起動してみる。 手動の方法はXenについての古いドキュメントを参考にした。

$ sudo xm create -c /etc/xen/xen01.cfg
...
Error: Device 0 (vif) could not be reconnected. Hotplug scripts not working. 
最後のエラーはまったく困ってしまった。
いろいろ調べてみると、どうやらvifはネットワークをブリッジさせるために使われるという事がわかった。 このメッセージの対処方として、"bridge-utils"をapt-getで導入する、というものがあった。 既に入っているというのに困ったな…。

ネットワーク回りの設定

もう少し"vif"を調べてみると、/etc/xen/xend-config.sxpファイルにbridge networkについて設定があるらしい。 さっそく調べてみると、ascii artでnetwork bridgeの説明がある。 うーん、そっか僕のPCにはNICが合計で3枚付いているから、eth0が普通の役割を果していないんだ。

さっそく設定を変更する。どうやらこれはリスタートで反映されるらしい。 いやxend-config.sxpファイルをみていると、いろいろできそうだから、反映の方法はあるんだろうな。

### (network-script network-dummy)
(network-script network-bridge)
(network-script 'network-bridge netdev=eth2')

再び起動

さて気をとりなおして、起動してみる。

$ sudo xm create -c /etc/xen/xen01.cfg

Debian GNU/Linux 4.0 xen110 tty1

xen110 login: 
これで、ひとまずは成功かな。 IDはrootでパスワードなしでログインができます。

2007/04/20

DB2 Express-Cをためす

無償版のDB2が配付されていたので、とりあえずLinux amd64版を導入してみました。
CentOS4にはPostgreSQL v7.4が導入されているので、テストのためにDB2とPostgreSQLの両方で/etc/passwdの内容を取りこむようなテーブルを作成しました。

CREATE TABLE UNIX_USER (
        USER VARCHAR(10) NOT NULL,
        UID     INT,
        GID     INT,
        GECOS   VARCHAR(36),
        HOME    VARCHAR(36),
        SHELL   VARCHAR(36)
);
このテーブル定義はPostgreSQLの方では"USER"の所でエラーになり実行できなかったものの、DB2ではテーブルの作成は問題なく実行できました。 理由は置いておいて、DB2側ではそのまま突き進んでみます。

DB2では/etc/passwdを':'でsplitして、テーブルに入れるところも問題なく…

$ db2 "select * from unix_user" | head
USER       UID         GID         GECOS                      HOME                  SHELL
---------- ----------- ----------- -------------------------- --------------------- ----------------------
root                 0           0 root                       /root                 /bin/bash
...
問題はここからで、先頭のUSERフィールドだけ抜きだそうとすると、同じ名前が延々出力されてしまいます。
$ db2 "select user from unix_user" | head
1 
-------------------------------------------------------------------------------------------------------
DB2INST2 
DB2INST2 
DB2INST2 
結局USERはSQLの中では実行ユーザーを指すので、参照したテーブルの行数分だけSQLを発行したユーザー名を標示してしまったのでした。

回避する方法は基本的には次のような感じになるのかなぁ。

$ db2 "select A.user from unix_user A"
PostgreSQLの方では'USER'をテーブルの列名にできなかったから、'NAME'のように別の名前にしなければいけないだろう。
もしSQL実行ユーザーの情報を抜きだしたいと思ったら、
select * from unix_user where name = user
のようにwhere節で指定することや、'select'直後の表示する列名に指定することができる。

大して重要なところじゃないけれどね。 問題はDBMSの使い方の方かな。

2007/04/18

長崎市長が銃撃される

昨夜asahi.comで長崎市長が銃撃された事を知った。 今朝のニュースで亡くなった事を知った。

長崎市長といえば、被爆地の一つを代表して積極的な発現が話題になる事が多く、個人的に残念なニュースだった。
政治思想的な理由にしろ、経済的な理由にしろ、いまのところ挙がっている推測の中には人が殺される理由や殺すための大義はないように思える。

例え罪を犯した人間であっても殺してしまっては、その罪を償うことはできない。 どんな理由があっても、人が人を殺すことでは、感情が先に動いて、物事は前に進まない。

今回の事件は動機の稚拙さと銃の入手し易さが問題になって、しばらく騒動が続くだろう。 なんともやりきれないできごとだ。

2007/04/12

「気づき」ということば

電車で帰ってくるとき、女性週刊誌の中吊り広告に「気づき」という言葉があった。 セミナーに通っているときの会社の同期も、休みの日にかけてきた勧誘の電話で同じ言葉を使っていた。
この言葉に非常に抵抗を感じるのは、こういう経験が呼び起こされるからだろう。 それでもこういう違和感のある言葉がどうして他の人には抵抗なく使えるのかわからない。

この言葉自体は"はてなダイアリー"にはコンサルティング用語として登録されている。 調べた範囲では国語辞典に載っていなし、英辞郎で対応する英語もでてこなかった。 自称経営コンサルタントなあやしい人達が使ったとしたら、なんとなく自分の経験と中吊り広告の言葉がつながった気がした。

特定の組織の中で使われる閉じた専門用語は組織の結び付きを強めるために使う事ができるので、この種の専門用語は宗教団体が騒動を起こすと耳にする「マインドコントロール」の基本要素の1つになっている。
専門用語自体はコミュニケーションを円滑にするし、大きな会社では組織が違えば使う言葉の意味も事なって、意志の疏通が困難になる事になるのは自分の経験でもある。 結局は程度の問題でしかなくて、専門用語自体に罪はないんだけれど、「気づき」という言葉は、自分の中で最悪な単語の1つになっている。
そんな自分基準に照して、中吊り広告のコピーを考えた人は勇気があるなぁと思った。

さてさてニュースでは東大の入学式で総長から「常識を疑う確かな力を養ってほしい」という言葉があったと伝えている。
勉強ができるのに自分の考えを理屈ではなくて正しいものと信じているがために修正できない人をみる。 自分で見たから信じると言う人もいるけれど、脳が「見たと判断したもの」が「事実としてあったもの」である事を証明するのはとても難しい。
常識とか経験とかそんなものがどれほど上滑りであやういものなのか、いままでの家庭や学校での生活から実感をもって感じた事はなかったんじゃないかな。

きっとごく普通な幸せな人世を送っていて、いい大学に入ったというだけの事なんだろう。 いい大学に入った事はこれまでの自分の人生や生き方を肯定するための良い材料になるだろうから、疑うなんて事は思いもしない純粋なまっすぐな心を持った人間に成長するのかもしれない。

エリートと呼ばれるようになる人たちがそんな自分の幸せぶりに気づかない人たちの集りだとしたら、「少数精鋭の俺たちが主導しなければ」的な考え方が支配しているようにみえる政治や経済の状況っていやだなぁ。

2007/04/08

USBインタフェースの追加
- Reference: http://www.ratocsystems.com/home.html

CentOS4にUSBディスクを接続するとタイムアウトし、認識することができなくなってしまった。 RHEL4の頃からも同じ症状がでていたけれど、リブートすれば使えていたものが、どうやっても治らなくなった。 実際にはRHEL4の頃から少くても3月中は動いていないようだった。 買ってきたUSB HUBすらまともに動かないのはおかしいと思っていたんだよね。 安いマザーボードを使っているから附属のチップの問題か、Linuxでの対応ができていないのか。 そんな風に考えて買って来たのが、RATOC製のPCIボード REX-PCIU4。 さっそく付けてみたけれど、問題は解決。HDDもHUBも認識するし、普通に動くのってうれしいな。 当たり前の事だけどね。

2007/04/07

ksh v.s. bash - IFS変数の使いどころ & execコマンド

しばらく前にRHEL4を入れてあったPCにSATAディスクを2台付けてRAID0にしてみました。 /bootだけは起動のためにRAID1にしています。

OSを入れ直したタイミングでCentOSにしてしまいrpmforgeとaptを導入したけれど、 余ったRHEL4のライセンスはどうしようかな…。

もっとも最初からCentOSにしたかったわけではなく、理由はRed Hat(会社の方)が嫌になったから。 ubuntuにしようと思ったけれど、6.06のインストーラーではRAID0が構成できなかったために、しかたなくCentOS4にしたのでした。

ここから先はCentOS4での作業なので、bashは3.00、kshはpdksh 5.2.14が対象です。

さてRAID0なんて時限爆弾みたいなものだから、外付けのUSBディスクを使ってpdumpfsでバックアップをとることにしました。 USBは便利なんだけれど、PCを再起動するタイミングで一緒に電源のOn, OFFをしないと機嫌が悪くなる場合があるし、pdumpfsを実行するタイミングで確実にファイルシステムがマウントされている状態であってほしい。

考えたのは、"mount"コマンドの出力からマウントポイントの"/bk"とデバイスファイルの"/dev/mapper/bkvg-bklv"にマッチした行を見つけた場合にpdumpfsを実行する、次のようなスクリプト。

#!/bin/bash
function test_bk {
  flag=1
  mount | while read line
  do echo $line | grep /bk | grep "bkvg-bklv" >/dev/null
    test "$?" = "0" && flag=0 && echo flag is $flag ## for debug
  done
  echo return flag is $flag ## for debug
  return $flag
}
if test_bk ; then
  ## 以下 pdumpfs コマンドを実行

さて実行結果はあまり楽しくありません。出力結果のflagの値が食い違ってしまいます。 この値が"0"でないと、pdumpfsが呼ばれないのですが、常に1になってしまいます。

$ ./test_bk.sh
flag is 0
return flag is 1
..

いろいろサンプルプログラムを作ってみたところ、シェルのread組み込みコマンドがよくなかったらしい。 簡単な例ではforを使うとちゃんと動きます。

けれど、この場合は単純にwhileをforに書き変えただけではうまくいかないのでした。

#!/bin/bash
function test_bk {
  flag=1
  for line in $(mount)
  do echo $line | grep /bk | grep "bkvg-bklv" >/dev/null
$ ./test_bk.sh
flag is 0
return flag is 1

スクリプトを"bash -x script_name"の様に実行すると、"line"変数に行ではなく、空白で区切ったワードが順番にはいっていることがすぐにわかります。こういう動きをするところはIFS変数しかないかなと思ったので、さっそくもう一手間加えました。

#!/bin/bash
function test_bk {
  flag=1
  IFS=$'\n'
  for line in $(mount)
  do echo $line | grep /bk | grep "bkvg-bklv" >/dev/null

さて、この修正版を実行してみます。

$ ./test_bk.sh
flag is 0
return flag is 0

これで意図した通りにbashでは動くようになりました。

bashの代わりにkshを使った場合もやっぱり問題は起こって、kshでは$''形式は使えないので、IFS変数に改行をいれないといけません。

...
  IFS='
'
  for ... 

標準入力をブロックする副作用があるって何かで読んだ記憶があるけれど、この場合って"read"が該当するのかなぁ…。

bashの中から"help read"を実行して、説明を読みかえしてみると'-u fd'オプションについて書かれていました。 これを使って、標準入力以外に対してreadコマンドが動くようにして、最初のバージョンでちゃんと動くようにしてみます。

#!/bin/bash
function test_bk {
  flag=1
  tmpfile=$(mktemp) ; exec 3>$tmpfile
  mount 1>&3
  exec 3>&- ; exec 3<$tmpfile
  while read -u 3 line
  do echo $line | grep /bk | grep "bkvg-bklv" >/dev/null
    test "$?" = "0" && flag=0 && echo flag is $flag ## for debug
  done
  exec 3>&- ; rm $tmpfile
  echo return flag is $flag ## for debug
  return $flag
}
if test_bk ; then 
$ ./test_bk.sh
flag is 0
return flag is 0
...

なんとかなったけれど、中間ファイルは増えるし、シンプルとは言い難いなぁ。 どうするのが一番いいんだろう。それにこれじゃkshで動かないんだよね…。

さて、これをkshで動かすために必要な修正は単純に空白をひとつ削除するだけ。

** bash版 **

  while read -u 3 line

** ksh版 **

  while read -u3 line

うーん。bashとkshって似ているんだけれど、細かいところで面倒だなぁ。

2009/10/02追記: コンスタントにアクセスがあるので、読み返したところ体裁がいいかげん過ぎたので直しました。
コード部分に手は加えていません。

2007/04/03

感謝するべき仕事…?
- Reference: http://www.asahi.com/national/update/0402/TKY200704020236.html

さいたま知事が新人の公務員に対して、自衛官を踏み台にして、県職員の仕事はすばらしいと説いたらしい。
好意的に読んでも、自衛官は平和を守るためには人を傷付ける方法を学ばなければならない厳しい仕事だ、と言いたかったようだ。

でも仕事にそんなに種類ってないと思うんですよね。
自衛官の仕事の内容にはたしかに銃火器の扱いも含まれるのは間違いないけれど、医者には大規模災害が発生したら助かる怪我人と助からない怪我人を選別してマーキングする役目になる人もいて、仕事の成果が関わった人の笑顔に直結しない仕事もあるわけですよ。

そんなつらい仕事でも救われる人が後にいるはずで、その人達からは感謝されると思うんですよね。 どんな仕事でも、その対価として喜びを手にいれる事ができるはずだと思うんですが…。 そもそも県職員の仕事って、そんなに報われる仕事でしたっけ…。

真意が理解されないままにマスメディアに記事が載ったのかもしれない。 訓示の全文が公開されても、やっぱりこういう残念な思いをするのかなぁ。 いったいどういう比較をしたんだろう。

現時点では、県職員なんて楽な仕事についた人達は好運の持ち主だから感謝するように(誰にだ…)、とでもいいたかったのかと思ってしまう。

中央から来る官僚の接待なんかのために裏金をプールしなきゃいけない仕事なんてものはないですよね…。