2009/07/31

「プログラマーのジレンマ」を読んで

チャンドラーの開発経過を取材したライターが描いたものだけれど、他文献の引用や比較をベースに第三者の視点が十分に活かされた良い本だったと思います。

読み終ってからも少しひっかかっている言葉があって、それはピータードラッカーの著書(チェンジ・リーダーの条件 - みずから変化をつくりだせ!)からの引用文でP.220にあります。

…しかし一流の職人や専門家には単に石を磨いたり、粗末な脚注を集めたりしているにすぎないにもかかわらず、何かを成し遂げていると思い込む危険がある。

それで元々のドラッカーの著書も買ってみて、いま読んでいるところです。 元々の文章はもう少し長いのですが、単純にひとりよがりな職人は危険だから注意しろという文脈ではなくて、組織の中で働く末端の人間であっても全体の方向性やその仕事が全体に与える影響について理解しなくてはならないという文脈の中で語られている言葉です。

このドラッカーの言葉自体はチャンドラーに対する戒めの言葉として適当とは思えないけれど、 もっと基本的なところでボディブローのように効いてきます。 自分自身の日々の活動に対して、俯瞰して、客観的に状況を観察できるようにならなければと痛感しました。

2009/07/30

FlexScan L567が修理から帰ってきた

Ubuntu 8.04に接続して使っているEIZO製のFlexScan L567 2台が無事に修理から直ってきました。画面左上に黒ずみが出るという問題への対応で、某掲示板でもしばらく前に話題に上っていました。

ここに引っ越す前からほぼ同じ時期に2台供に出ていた症状でしたが、モニターがないと仕事にならないのと、実用上それほど問題ではなかったので、ずっとペンディングにしてきました。 でも、ここ数ヶ月間の間にかなり症状が進行して、左上から半径2cmぐらいのエリアと、さらに水滴がたれてきたかのように画面左端もいくつか縦2,3cm、幅1mmぐらいの黒い影が出てきて、さすがに修理を依頼する事にしました。

いまは仕事もないし時間にもかなり余裕があるからPCが少し使えなくてもいいかなぁと思いつつ、最寄りのカスタマーセンターに連絡すると貸出機があるというので1台だけお願いしました。 貸出機についてはEIZOのWebサイトをみるとちゃんと書いてあったんですよね。もう少し早めに連絡すればよかったか…。 普通の修理と同様に経費について説明があったりしましたが、 最終的には他の方のBlog等でも触れられているように送料も修理代も一切請求されませんでした。

さて机に載せる前に裏面のラベルをみると製造されたのは"July 2003"、購入したのはヨドバシカメラのオンラインショップでレシートをみると2003年9月でした。もう少しで6年過ぎるのか…。 当時は今と違って1台 6万円ぐらいのモニターは割高というぐらいで手が出ないというほどではありませんでした。まだ薄給(今はそれ以下か…)の頃で2台買うのは勇気が必要だったけれど、良い買い物だったと思います。

戻ってきたL567 2台を机に並べて、X11の設定を戻すと広いデスクトップが戻ってきました。 やはり色彩は以前よりも少し青色が強調されたように感じますが、新品同様になった鮮かさに圧倒されます。 これでまたプログラミングやら、気持ちを新しくして頑張っていこうと思いました。

そうそう貸出機を1台にしたのは、1台の環境を試そうというのと、2台を運ぶのが面倒だったから。 中身はL567な"FlexScan 170eW"が届いて使っていましたが、もはや1台だけだとプログラミングをするのが辛い身体になっているのがわかります。定型的な作業をするなら17インチ1台で問題ないんですけどね。

2009/07/29

ガラス製CDは録音時の音質をより忠実に再現するのか

先日無事に運転免許証のAT限定解除に成功しました。この歳で教習所は精神的な負担があまりにも大き過ぎます。

GIGAZINEなんかでもさらっと「高音質な『ガラス製CD』」なんて書かれています。 この手の話題になるとすずきひろのぶ氏がfjで行なった実験のことを思い出します。 まぁあれは比較対象になるデータを取得して比べていたので、今回のようにガラス製CDだけが準備されていると普通材質のCDとの比較ができないのが残念でなりません。

ガラス製CD自体は新しいものではないので、いくつか音質について書かれたサイトを眺めてみました。 記録できるデータ量に違いがあると思っている方はさすがにいないようですが、やっぱり「音質」とはなんぞや、というのが感想です。 たぶんメディアの値段や所有している満足感も加算されるんだろうなぁ。 それに余計なものは音に(認識可能な)影響を与えるというのが公理のように働きますし。

「データを忠実に読み取りたい」という目的のためにメディアを重くしたりするのは理解できます。でもいくらメディアを磨いても、CDプレーヤー側のピックアップに汚れがあればどうしようもないし。 そうかピックアップとメディアとの間の埃を追い出すようなバキューム付きのプレーヤーは売れるかなぁ。 電源ラインにノイズが乗りそう。そもそもディスクが回転しているし。

まぁ高級プレーヤーと何かのおまけで付いてくるポータブルCDプレーヤーのピックアップは同じ信号を送り出すのかといわれれば、同じだとは思いますが、何かの影響でエラー訂正をちゃんとしてくれないとか違いがあるかもしれない。

でも、メディアの材質が影響する範囲はあまりにも小さいと思うし、 ピックアップで拾える範囲での違いは認識できるほどの大きな違いはないと思うんですよ。 やっぱりD/Aコンバータから先にこだわったり、スピーカーを自作する方が好きだなぁ。

問題があればより根本に近いところで解決するのが常道ですが、音に限っていえば出口に近いところから順番に攻めていくのがおもしろいと思うのですよ。 そう、まずは車の音がしないちゃんとした部屋を準備しましょう…。

2009/07/28

Debian lennyなALIXに古いQuickCamを接続してみる

ロジクール製の古いQuickCamが出てきたので、USBで接続してWebカメラを作ってみました。

最近のUSBカメラは共通のUSB Video Class (UVC)に対応しているので、パッケージなどに”ドライバレス”などと書かれています。 QuickCamに限らず昔のUSBカメラはそれぞれに対応するドライバが必要です。

手元のUbuntu 8.04 LTSに接続したところ簡単に認識してJPGファイルを作成する事ができました。 いろいろなユーテリティがありますが、10秒間隔でJPGファイルを生成したいと思えば、次のような方法があります。

$ sudo apt-get install vgrabbj
$ sudo vgrabbj -d /dev/video0 -l 10 -f ~/public_html/webcam.jpg

"vgrabbj"はforkしてバックグラウンドで10秒間隔でwebcam.jpgを更新してくれます。 こんな感じでwebcam.jpgを定期的に確認すれば簡単にWebで静止画をみる事ができます。 もちろんストリーミングさせるツールもあります。

ALIXでつまずいたところ

内部で使われている制御用ICに依存する独自のドライバが必要というのは知っていましたが、 Ubuntuで簡単に認識したのでvgrabbjを入れれば使えるだろうぐらいに思っていました。

まぁ、video4linuxのモジュールは入っていてUVC対応カメラであれば良かったのですが、結局パッケージを探してきて入れる必要があって、情報を手に入れるのに手間取りました。 使っているkernelは486用なので、対応するモジュールも486用にします。 Linux lenny 2.6.26-2-486 #1 Sun Jun 21 04:15:19 UTC 2009 i586 GNU/Linux

$ sudo apt-get install gspca-modules-2.6-486

後はUSBケーブルを差し直せば"/dev/video0"デバイスが新しく作成されるので、 各種ユーティリティが使えます。

dmesgでは次のようなメッセージが表示されていました。

[ 1501.500629] Linux video capture interface: v2.00
[ 1501.527229] gspca: USB GSPCA camera found.(ZC3XX) 
[ 1501.527513] gspca: [spca5xx_probe:4275] Camera type JPEG 
[ 1502.376030] gspca: [zc3xx_config:669] Find Sensor HV7131R(c)
[ 1502.389448] gspca: [spca5xx_getcapability:1249] maxw 640 maxh 480 minw 160 minh 120
[ 1502.395204] usbcore: registered new interface driver gspca
[ 1502.402978] gspca: gspca driver 01.00.20 registered

昔のWebカメラ用だから30万画素ぐらいしか解像度がないんだよなぁ。 最近のドライバレスなUSBカメラも準備しておこう。 Ubuntuの方を使ってリアルタイムで読み込めばCUDAのお題にもなりそうだし。

2009/07/26

Ubuntu 8.04でLVM2を使ってxfsな領域を確保してみる

最近は裸族シリーズを使ってHDDをカートリッジのようにeSATA経由でUbuntu 8.04に接続しています。 autofsを使っている関係で手動でパーティションをumountしても安全か自信がないので、あまり頻繁には切り替えはしていないですけれど。 さてUbuntu 8.04でlvm2を使っていると書いたものの、パーティションの確保の仕方などをメモしておかなかったので残しておきます。

デバイスの確認

まずはHDDをシステムが認識した事をdmesgなどで確認しておきます。 外部USB, eSATAディスクを接続していれば、電源を入れて新しく認識されるとdmesgの出力の下の方に、ディスクの名前が("sdh"のように)新しく追加されたデバイスとして表示されます。

$ dmesg | tail
...
[25438.674740]  sdh: sdh1 sdh2
...

最初から電源を入れているとうっかり他のデバイスと勘違いしてしまう可能性があるので、パーティションを変更するディスクは内蔵でなければ後から電源を入れて追加するのがお勧めです。

fdiskでのパーティション設定

上記の例だと"sdh1", "sdh2"はパーティションの1番、2番をそれぞれ指します。 何が表示されるかは状況によって違うので、これを消してしまうなりfdiskを使って自由にやって、最終的に"sdh1"が1つだけある状態から話しを始めます。 ただしパーティションを作り直した時にはUSB外付けディスクなら一旦USBディスクの電源を入れ直すか、セルフパワーならUSBケーブルを抜いてディスクコントローラーのリセットとデバイスの再認識を行ないます。eSATAの場合も同様にケーブルを差し直すなり、外部電源駆動なら電源のリセットなりを行ないます。

後は"t"コマンドでパーティションのコードを'8e'に設定します。

sudo fdisk /dev/sdh
コマンド (m でヘルプ): t
領域番号 (1-4): 1
16進数コード (L コマンドでコードリスト表示): 8e
領域のシステムタイプを 2 から 8e (Linux LVM) に変更しました

LVM2で必要な基礎知識

いろいろ説明している文書はGoogleで検索できるので、とりあえず自分の理解している範囲でメモ。

PV, VG, LVの名前が具体的に何を指しているかイメージできないと、操作のミスが増えてしまうと思います。 次の段落の説明でだいたい大丈夫だと思いますが、ポイントは次のような点でしょうか。

  • VGは複数のPVを含むこと(ディスクの抽象化)
  • LVはVGから作られるため物理的にどのディスク上に配置されるかは、とりあえず意識する必要がない
  • そうはいっても物理的なディスクの交換作業の必要性がでてくれば、引越し作業で詳しい知識が必要

LVM2は他の商用LVMと同様に、OSが認識したブロックデバイスをLVM用の物理デバイス(PV)として認識させ→グルーピング(VG)(必要なら物理デバイスの統合)→パーティションと同等で任意のサイズの論理デバイス(LV)に切り出して使います。

LVM2用デバイスの作成

まずはパーティション全体をLVM用のPVに変換します。 この操作で間違ったデバイスを指定するとデータが消えてしまいます。

パーティションの種類が"Linux LVM"用(システムID:8e)でなくても容赦なく成功するので注意します。

$ sudo pvcreate /dev/sdh1
  Physical volume "/dev/sdh1" successfully created

ちゃんと作成できたかはシステムに認識されているPVを確認します。 sudoを使わないとエラーなく、なにも表示されずに終るので、作成に失敗したと間違わないようにします。

$ sudo pvdisplay
  --- NEW Physical volume ---
  PV Name               /dev/sdh1
  VG Name               
  PV Size               152.43 GB
  Allocatable           NO

VGの作成

ここで用途によってVGを作成するのか、既存のVGを拡張するのか選択する事になります。ディスクが足りなくなって追加する手順はLVMレベルでのVGの拡張と、ext3のようなファイルシステムレベルでの拡張の2つを行なう必要があるので、とりあえず後回しにしておきます。

単純にいま作成した"sdh1"に適当な名前を付けてVGにします。 名前の最後に"vg"を付けた方がそれらしいかもしれません。"webappvg"を作ります。

$ sudo vgcreate webappvg /dev/sdh1
  Volume group "webappvg" successfully created

作ったら確認します。

$ sudo vgdisplay
...
  --- Volume group ---
  VG Name               webappvg
  System ID             
  Format                lvm2
...

任意のサイズのパーティションみたいなデバイスを作る

ファイルシステムはLV単位で作成ができるので、ext3やらreiserfsやらxfsやらを作成するために最終的に必要な作業です。いきなり最大サイズで作成しなければ、VGの余った領域から他の名前でLVを作成する事もできますし、既に使っているLVのサイズを拡張することもできます。LV自体は器なので、中身であるファイルシステムレベルでの拡張も必須なので両方の手順を確認しておかないと、後からmountしたままでは拡張できない事に気がついてシステムを停止したりする事になります。

さてさて、LVの作成は名前を決めてしまえば簡単です。 とりあえず200MBの"datalv"を作成します。

$ sudo lvcreate -L 200M -n datalv webappvg
  Logical volume "datalv" created

例によってシステムに認識されているLVをリストします。 コマンドは"*display"という命名規則に従っている分だけ覚えやすく、ちょっとしたメモがあれば日々の作業では困る事はないと思います。

$ sudo lvdisplay
...
  --- Logical volume ---
  LV Name                /dev/webappvg/datalv
  VG Name                webappvg
  LV UUID                ZHxqCl-GBVa-n8Zx-6SYu-NUm2-Rec9-hGfgLf
  LV Write Access        read/write
  LV Status              available

LVは作ったものの、ファイルシステムは…?

"lvdisplay"で"/dev/webappvg/datalv"の名前でデバイスが作成された事がわかったので、ここを"/dev/sda1"のように見立ててファイルシステムを作成します。 例えばext3なら次のような感じ。

$ sudo mke2fs -j /dev/webappvg/datalv
$ sudo tune2fs -c 0 -i 0 /dev/webappvg/datalv

LV自体にはパーティションのシステムID(例えば"83"や"e8")のように"ext3"でフォーマットするのか、"reiserfs"なのかといった情報はないんですよね。lv名にファイルシステムのタイプを書いておいた方がよかったかもしれません。

LVMの命名規則

ここから先はいろんなHOWTOドキュメントを読むしかないかもしれませんが、 LVMの使い方は基本的にUNIX系のOSであれば使い回しが効くので概念を理解すると良いでしょう。 一応説明も周りくどく書いたつもりです。冗長な分、それで理解が良くなるかどうかは微妙ですが。

例えばLVの名前に"ext3"を入れて"datalv_ext3"のように"LV名+FS名"のようなローカルルールを作ったので、既存のLV名を変更したいとしましょう。これは"lv*"の命名規則に従うコマンドのどれかを使ってできると想像する事ができます。

bashを標準的な環境で使っていればTabキー"を2回連続で叩けば、コマンド候補がでてくるので、端末で"lv"まで入力してからTabキーを連打すると使えそうなのは、"lvchange"か"lvrename"ぐらいで、manで調べてみれば"lvrename"が正解らしいとわかるでしょう。

さて、稼働中のシステムで"lvrename"を使ってみる…

せっかくなので/dev/webappvg/datalvをマウントしたまま、"lvrename"コマンドを使ってみましょう。

$ sudo mkdir /mnt/dsk1 /mnt/dsk2
$ sudo mount /dev/webappvg/datalv /mnt/dsk1
$ sudo lvrename webappvg datalv datalv_ext3
$ sudo mount /dev/webappvg/datalv_ext3 /mnt/dsk2

このコマンドたちはサクサク成功して、最終的には片側で作ったファイルがもう一方からもアクセスできるという変な事になってしまいます。

$ sudo touch /mnt/dsk1/test.txt
$ sudo ls /mnt/dsk1/
lost+found  test.txt
$ sudo ls /mnt/dsk2/
lost+found  test.txt

"pvcreate"の時もパーティションのシステムIDは無視してくれたり、 LVMの方ではあまり失敗に対して厳格なチェックは働かないようにみえるので、 人間が注意して使うしかないようです。

普通はこういった事は問題になりませんが、いざという時のためには最悪なシナリオを試して結果を確認した方が良いのかもしれません。 そうはいってもLVMは便利なんですよね。"/dev/vg_name/lv_name"の命名規則で簡単にアクセスする事ができるので。

2009/07/25

スーパーのお惣菜コーナーについて

今週から教習所に通ってAT限定を解除するべく頑張っていますが、 そっちに神経が集中してしまい余計な事があまりできません。 明日は卒業検定ですが坂道発進ちゃんと出来るように午後はイメージトレーニングかなぁ。

さて近所には二種類のスーパーがあって、一つは地元発祥で地域全体にチェーンを持ちつつCGCグループのスーパー、もう一つは7&Iホールディングズ資本でチェーン展開しているスーパー。

特につながりはないですが地元の会社という事でもっぱら行くのは前者の方です。 ただでさえコンビニはセブンイレブンばっかりで、スーパーまで同じ系列だとちょっと新鮮味がないかなと思っています。

御飯は家で炊くけれど、料理らしいものは作らないので、ふりかけ、レトルト、それにお惣菜コーナーには良くお世話になっています。二つのスーパーを比較すると品揃えは大差ないですが、地元のスーパーなら独居老人あたりをターゲットにもっと郷土料理のメニューを増やしても良いのかもしれないなぁ、とふと思いました。 きっと店内で調理するような人達は自分達でも作れるから、コストの低くて簡単なものを優先して、郷土料理なんかを並べようとは思わないのかもしれないけれど。

施設に入らないけれどホームヘルパーさんに買い物を頼むような人や、男性の一人暮らしならスーパーでお惣菜を買うような人はけっこういるんじゃないかな。 でもお正月のメニューは死ぬほど高い値段が付いていたから、ある程度金額も下げないとだめだろうなぁ。やっぱり難しいか。お店に来ない人にも訴求するために宣伝も必要だし。 でも地元の企業には独自性だしつつ頑張ってもらわないと。

そうそうもう一方の大手スーパーのお惣菜は味が濃いだけで、あまりおいしいとは思わなかったです。毎日食べるならシンプルで薄味の方がいいなぁ、けどここ東北だから塩味はキツいのが標準だった…。やはり自分で作るべきか。

これらのスーパーの他にも外部資本の高くてただ品数が多いだけのところはあるけれど、 わざわざ行く理由がない。気分転換でなければもはやステータスでしかないのかなぁ。 食品について欲しいものはブランドではなくて品質なんだけれど、そういう視点で選択する人は、品質を気にするとはいいつつ、案外少ないのかもしれない。

関係ないけれど、毎日行くスーパーで、すごく年配の"お姉さん"がプロ意識を出して仕事している様子をみると働くとはなんぞやと思いつつ、自分も頑張ろうと気持ちを新たにしています。 しばらく前に経済的に裕福である事が人生の成功者であるというイメージが世間を覆った事が思い起されます。特に若い人達がそういうメッセージを受けて影響されていないかが心配です。 そういう人もいていいし、いなきゃ経済が回らない部分もあるけれど、自分の考えを追い求めていって結果として経済的に豊かになったという人もいるし、 いろんな価値観を尊重して大事にして欲しいと思います。

この世の中には多様性が本当に重要なのに、平和にするために自分たちと同じ考えを持つ人で埋め尽くせばいい、なんていう乱暴な宗教や思想が不況に乗じて蔓延しないか、そういった事も心配ですね…。真に大切な事は相手を尊重するという事だと思います、実践するのはすごく難しいけどね…。

2009/07/20

QuietComfort2のイヤーパッドを交換した効果

ここにも書きましたがQC2のイヤーパッドを数日前に新品に付け変えました。 形が崩れていたパッドを交換した事で耳にフィットするようになった装着感の変化はもちろんですが、外部ノイズの遮音性も良くなったと思います。

形が崩れたイヤーパッドを使い続けても、耳にフィットしないだけではなくてノイズの面でも気がつかない内に劣化していたのかと思うと、我慢せずに早めに交換すればよかったと少し後悔しました。

「霞が関・自治体クラウド」に約200億円の補正予算、実現の可能性は? - 記者の眼:ITpro
- Reference: http://itpro.nikkeibp.co.jp/article/OPINION/20090507/329559/?ST=govtech&P=2

ITproの記事をみてみると霞が関のバックオフィス業務のクラウド化と、地方自治体業務のクラウド化の2つの内の地方自治体の方が日経新聞の一面にでていたものらしい。「霞が関・自治体クラウド」に約200億円の補正予算、実現の可能性は? - 記者の眼:ITpro

地方自治体の業務アプリをクラウド化すると聞いて、 自治体全体で石川県がやったような既存のソフトウェアの共有化するのか、 salesforceようなカスタマイズ可能なソフトウェアファームの共有化をするのか、 どっちにしても難しいんじゃないかなぁと思いました。 よくあるレベルの「アプリの事は各SIerの人よろしく」なクラウド環境が提供される事を心配しています。

ただ元ネタの「ICTビジョン懇談会 中間取りまとめ」では、社会を強力にバックアップするエコシステムを作るのだと、その目的や理念は明確です。これを経済的な利益を目的として参画する方々が理解し、共通の目標にする事ができればすばらしい結果を得る事ができるだろうと思います。

ただ、それなりの規模のサーバーファームの運用に携っていた経験からすれば、心配になるのはもっと現場に近いところのことです。 クラウド環境を作るとはいっても、現在のよくあるクラウドなサーバー環境では迅速なインフラの提供とバルクでのバックアップといった管理が行なわれているだけで、アプリレベルでの運用コストを分散する事は行なわれていません。 アプリ固有の事柄は各利用者が設計や実装のコストを負担しているのが実情です。 今回のようなクラウドを利用する各都道府県レベルではトータルでの開発・運用費を削減するため、アプリレベルでの機能要件、非機能要件の双方を統一する強力なガバナンスを導入する必要があるでしょう。

一般的にはSIerが構築したアプリをマニュアルとセットで運用組織に引き渡す事が小規模な開発案件や 社内業務アプリの開発では行なわれていると思います。 これを繰り返してアプリが1000ぐらいになったと想像すると、1000セットのマニュアルを暗記する事はできず、前提とする監視系であったり年数回のリストアテストに耐えるための手順の前提なり、共通化するべきところができてきます。 大規模かつ長期間の運用を想定するなら、あらかじめ、こういった部分のルールを共通化しなくてはいけません。

まぁサーバー環境はクラウドといっているのですから、かなり制約の強いロバストなサーバー環境が提供されるとしましょう。 魔法(麻薬?)を使って任意の数のサーバーインスタンスを任意の時点の状態にバックアップから戻せば良いと考えられれば楽になります。(もちろん「魔法」は「考えられれば」に係ります) しかしまだまだ考慮するべき点はあるはずです。

集約が持たらす寡占化と競争の沈静化

アプリなのかサーバー環境なのかわかりませんが、今回は都道府県単位での集約化が想定されているとあります。 いろいろあって最終的に都道府県単位でアプリレベルでの共通化が成功したとすると、各市町村が同一のシステムを利用した場合に得られるメリットは何でしょう。 期待されている事は、集約化に伴なう業務効率の達成とコストの削減と考えるべきではないでしょうか。 コストの観点から無駄を省きたいと考えるのが自然と思われます。

それと同時に都道府県のトップがシステムのアーキテクチャを掌握する事となります。 都道府県トップを「公家」、実力部隊であるベンダーを「武家」とすれば、 それまでの市町村毎ベンダーによる群雄割拠の時代は終わり、 事実上いくつかの有力なベンダーによる支配が始まる事になるでしょう。 戦争の時代は終わりを告げることとなり、「よりよいアプリ」=「現在あるアプリ」となり、 さらに良いものを提供しようとする競争もまた終わりを告げます。

データフォーマットの共通化

競争を生み出すためには囲い込まれないようにする工夫が必要になります。 それはいろいろ考えられますが、アプリレベルで考えるとデータに対するアクセス権を確保する事。 これによって共通の土台(データアクセス)の上に複数のアプリを構築する可能性が開けます。

考え方自体はSOAなんですけれど、”SOA=Webサービス”な変な理解が進んでしまうと、目的と手段が入れ替わってしまうんですよね。確かにWebサービスは環境や実装に対してニュートラルでラッパーとしてうまく動くと思うんですが、まぁ目的が達成できれば手段は何でも良いでしょう。

新規サービスの創出

集約化の範囲はまったくわからないんですけどね。 都道府県単位でアプリを共通化しても、固有のサービスを提供したいという自治体がでてきてもおかしくありません。 データがクラウドの中にあるのであれば自治体は手足を縛られたと思うような気がします。

ある程度の柔軟性は大切で、これがキーになるかもしれません。 いまよくあるSaaSタイプのアプリケーションを提供する環境でも、都道府県全体といった規模で稼働するアプリのデータを利用して追加で市町村といった特定のクライアントにサービスを提供するのは微妙かもしれません。

まとめらしきもの

結局のところ既存のクラウド環境はアプリ開発者、利用者を適当なところで切り捨てることでビジネスモデルを構築しているような気がします。 規模の大きな現状のレベルのクラウドを政府が提供するだけでは意味がないというか、 身内にアプリ開発・提供者を抱えてしまうので、運用に対する無限の要求に答える圧力に負けないでしょうか。

ロールプレイをちゃんとやって役割分担や想定されるシナリオを準備しないと、民間部門でうまく動いているようにみえる仕組みがパワーゲームの末に成立していたりするかもしれません。 ちゃんとカスタマイズできれば大丈夫だと思うんですけど、ベンダーに投げてしまってはどうにもならないでしょうね。

ICTビジョン懇談会の報告書の内容は、取り上げられた部分以外にもいろいろ全体の方向性を示すものとしては良いと思うんですよね。絵に描いた餅にならなければ良いのですが。

2009/07/17

全国調査「日本人の国民性」について

Infoseek内の読売onlineのニュース記事で、大学共同利用機関「統計数理研究所」が「日本人の国民性」というタイトルで調査を行なった結果を発表(http://www.ism.ac.jp/kokuminsei/index.html)したことを知りました。 その記事の中で気になったのは、「『あの世』を信じるか」という問いに対して1958年から2倍近くに増えた、という部分。

その段落は「一番大切なものは?→家族」といった回答が並び、記者が気になった回答をざっとまとめたようなものでした。けれども、この部分が唐突に見えて、気になったので一次情報を確認してみる事にしました。

キーワード

研究所ではレポートをとても見やすく公開していて、1953年以降5年毎に全国的な社会調査を行なっている事や、調査の目的などが明記されています。ただレポートを読むためにはいくつか調査方法や固有の単語について知っておく必要があります。

  • まず数字はパーセントで全回答数は丸括弧内に書かれています (【集計表の見方】http://www.ism.ac.jp/kokuminsei/table/data/html/howto.html)
  • "D.K."という項目は"Don't Know"の略で、調査員の質問を繰り返し聞いても質問自体が理解されなかった事を示しています (Q&A http://www.ism.ac.jp/kokuminsei/qanda.html)
  • "その他"は回答があったものの、用意されたものではなかった場合とされています (同上)

気になったあの記事

気になった「あの世を信じるか」という質問は大枠で「宗教」に分類されている質問の一つで、1958年以降一度も調査されていないもののなぜか2008年に復活した項目でした。全体的な宗教を信じるかどうかという割合に大きな変化はないようでしたが、あの世なるものを信じないと回答した割合は確実に減少し、その分「信じる」「どちらとも」が増加したようです。結論は信じる人が増えたというよりも、信じないと回答する人が減少したが正しいのではないでしょうか。

さらには「あの世を信じる」「宗教心は大切」などと回答した割合が、「宗教を信じる」人の割合を越えている点もおもしろいですね。同じ「宗教」には2008年では項目から消えた「首相の伊勢参り」についての質問もあり、これが1953年から2003年まで調査され続けていた事が興味深かったです。

この他の項目では小さい頃から子供にお金が一番大切なものと教える事の是非について、1953年で65%の人が賛成と回答しているところに吹き出しそうになりました。大事ですけどね、一番じゃないでしょうと。仕事とお金では、お金があっても働かないとつまらないと回答している人の割合はそれほど大きく変化していないようです。子供に対する気持ちに変化がでているのでしょうか。

広範囲なフィールドワークなので、質問項目について、なぜこれを聞くかな、と思うものもないではありませんでしたが、これだけのボリュームがあるとなかなか楽しめます。 ページ遷移を繰り返していくと途中から「首相の伊勢参り」などの2008年度から消えた項目が選択不可になったりしましたが、調査結果のトップページからは全項目にアクセスできるようです。

内容は良いのですが、リンクは自由に張れないようです

この分析結果をニュースにしているサイトは多いのですが、リンクを張っていないものが多いようです。これは各ニュースサイトの運営ポリシーによるものと思われます。

しかしblogに感想を書いて参照して欲しい資料にリンクを張ろうとしても、利用条件が邪魔をしているようですね。「リンクは自由に〜構いません」とある「自由」は続く条件を受けいれる事で無料になるという程度の意味でしかないようです。

各情報へのリンクは「自由」にできずに、さらにメールで連絡を強制させるというのは、この手の公的機関では良くみたりするのですが、私の感覚ではこれは「自由」ではありません。

本来は尊重して欲しいと訴えるべきサイトの運営ポリシーを利用条件に持ってきているのだと思います。 もちろん、それをどう表現するかは「自由」なのですが…。この場合の「自由」はもちろん無料という意味ではありません。

将来に渡ってリンク先が存在する事は保証できないし、情報へのアクセスを維持するために保証できる範囲を明らかにしたいという意図であれば理解はできます。 また一部を転載するなどとなれば著作権を守るために事前に連絡をお願いするといった事は当然だと思います。

しかし、それは御互いの協力がなければ維持できない事ですから、例えばポリシーを尊重した利用をお願いしたいといった文言で情報を利用するなら適切に運用するよう協力してという事を表現するべきだと思います。また適切にリンクが維持されるようにする責任は利用者側にあるという事を明記する事も当然あるべきだと思います。

何かあった時の責任の回避にすらならないこういう文言は誰が考えて普及させるんでしょうね。 詐欺的サイトが「悪徳商法?マニアックス.net」あたりを脅すための手段として準備しておくのならよくわかるんですけれど。 学術機関が公開された情報へのアクセスを制限するなんて、合理的と思われる理由がなければ悪い冗談でしかありません。

情報公開元がリンク先を制限する事がいかにナンセンスかは既に多くの指摘がなされています。 それと同時に小学校等の教育機関でプライバシーの保護と情報公開の板挟みにあった末、(力を持たないものの心の叫びと思えるほどに)無力かつ極端なポリシーを掲げている場合もあります。根の深い問題なので興味のある方は調べてみてください。

各ページにリンクに使って欲しいURLを記述して、そこにアクセスすると"○×が提供しています"とか、"御利用にあたって"などのメッセージと"次へ進む”ぐらいのボタンが出てくる仕組みがあるべきで、情報を意図した通りに使ってもらうための準備をするべきだと思います。 確立された標準的な方法も、そのための準備をする管理者の余裕もないのだと十分理解できるんですけれどね。現状はあるべき姿からとても乖離していると思います。

2009/07/16

QuietComfort2のイヤーパッドを交換する

BOSE製のノイズキャンセリングヘッドフォン QuietComfort2 (QC2)の耳当て部分のスポンジが露出してしまったので交換しました。

以前にも一度交換したり、プラスチック部分が壊れて修理に出したり、いろいろあったQC2。 以前もオフィシャルサイトの通販で購入しましたがログを調べてみると約3年前の2006年8月頃。交換用パッドが4000円ちょっとと高いですが、交換用のパッドをちゃんと売っているだけましかなぁ。

調べてみると他のメーカーも保守用部品として問い合わせれば販売していたりするようなのですが、 かといってあの頃は他のメーカーからちゃんと動くノイズキャンセルできるヘッドフォンは売られていなかったし、新しいものを買う気はないし、しょうがないか。

製品自体の性能や使い心地には、まったく問題がないんですけどね。 やっぱりお金がないとBOSEの製品はちょっとつらいです。

2009/07/15

なんとなく昔とおった道のような気がする…。

今回使っているのはUbuntu 8.04 LTSのパッケージとして導入している”pdumpfs 1.3”です。 配布されているものと同じです。md5sumの出力は、 55795ac31e83261e2fa068009d3b5085 /usr/bin/pdumpfsです。

pdumpfsを使っていて"--exclude"オプションを使ってみると、突然全体の半分程度の領域しかバックアップが取られていない事に気がつきました。なんとなくgnomeが使っている~/.gvfs/が悪さをしているような気がします。

けれど"--exclude"や"--exclude-by-size"オプションが指定されずにNullMatcherが生成されるような状況下では問題なく終るんですよね…。エラーメッセージはこんな感じです。

pdumpfs: Permission denied - /home/user1/.gvfs

検証用コード

pdumpfsのコードを少し追い掛けてみて、途中のコードを切り出して走らせてわかったのは、"~/.gvfs"に対してFile.lstat()を実行するとエラーになるということでした。

#!/usr/bin/ruby
require 'find'
Find.find("/home/user1/.gvfs") do |s|
  p File.lstat(s)
end

一般ユーザーとroot権限で走らせた場合の違い

自分の権限で走らせる分には"lstat()"が返してくるFile::Statオブジェクトを表示します。

#<File::Stat dev=0x17, ino=1, mode=040500, ...

続いてroot権限でスクリプトを走らせると、失敗してしまいます。

sudo ./test_script.rb

sudoでroot権限で実行します。出力は次のようになります。

ruby_find/run_find.rb:4:in `lstat': Permission denied - /home/user1/.gvfs (Errno::EACCES)

adhockな解決策

fuseを使った環境ではいろいろな事が起こるようです。 root権限でこの手の権限エラーがでるのは、Linux Intrusion Detection System (LIDS) 以来かなぁ。

とりあえず自分の手元で解決できれば良いとわりきって考えてみました。 "--exclude"オプションで指定されたパターンはFile.lstat()の手前で判定するようにしました。

ここを越えても呼び出し元のFind.find()の中でディレクトリの場合は全部を飛ばすためFind.prune()を呼ぶのですが、その判定でFile.lstat(s).directory?が使われていました。

この部分をFileTest.directory?()で置き換えて、ちゃんと動くようになりました。

変更箇所の差分

--- pdumpfs.orig 2009-07-15 20:41:43.000000000 +0900
+++ pdumpfs 2009-07-15 20:43:19.000000000 +0900
@@ -807,12 +807,14 @@
     end
 
     def exclude? (path)
+      if @patterns.find {|pattern| pattern.match(path) }
+        return true
+      end
+      
       stat = File.lstat(path)
 
       if @size >= 0 and stat.file? and stat.size >= @size
         return true
-      elsif @patterns.find {|pattern| pattern.match(path) }
-        return true
       elsif stat.file? and
           @globs.find {|glob| File.fnmatch(glob, File.basename(path)) }
         return true
@@ -1052,7 +1054,7 @@
 
       Find.find(src) do |s|      # path of the source file
         if @matcher.exclude?(s)
-          if File.lstat(s).directory? then Find.prune() else next end
+          if FileTest.directory?(s) then Find.prune() else next end
         end
         r = make_relative_path(s, src)
         l = File.join(latest, r)  # path of the latest  snapshot

手を加えたコードは/usr/local/bin/pdumpfsに入れています。 ”~/.google/"に加えて"--exclude=/home/user1/.gvfs"を入れて、問題のコードを飛ばすようにしています。

さいごに

ちなみにruby 1.9で確認すると、Find.find()自体が原因で見事に失敗します。

paths.collect!{|d| raise Errno::ENOENT unless File.exist?(d); d.dup}

1.8系列ではシンプルにpaths.collect!{|d| d.dup}だけだったんですよね。 この変更の経緯については[ruby-dev:28345]にあるとおりのようです。

調べてみたものの、どうするべきなんでしょう…。 もちろん単純に1.9対応させるだけなら手元のpdumpfsにrescueを追加すれば良いんですが、find.rbを使う場合にこれをどうケアするべきなのか、根は深そうな感じですね…。

fuseに起因するのでrubyとかpdumpfsの問題ではないんですが、Gnome系Ubuntuを使いながらpdumpfsを"--exclude*"オプションと一緒に走らせて"~/"のバックアップを取ろうとするには注意が必要そうです。

2009/07/14

google desktopのキャッシュはpdumpfsから除くべし

pdumpfsを使っていますが、どうも/homeの領域にサイズの大きなファイルがあり、全体の保存期間が短かくなっているのに気がつきました。調べてみると"~/.google/"が毎回10GBほど新規に保存されています。

$ sudo -i
# cd /misk/bk/2009
# du -ks 07/*/home/user1/.google/
10078060 07/04/home/user1/.google/
10198732 07/08/home/user1/.google/
10200183 07/12/home/user1/.google/

pdumpfsは日付毎にディレクトリをコピーするイメージでバックアップを作ってくれますが、内容の変更されていないファイルについては、ハードリンクを使ってi-nodeが同じとすることで重複してディスクを消費する事はありません。"du"に"-l"オプションを付けずに、同時に共通する領域のサイズを計測すれば差分のサイズだけが表示されます。

 du -ks 07/*/home/user1/Mail
2815860 07/01/home/user1/Mail
21476 07/06/home/user1/Mail
21100 07/09/home/user1/Mail

ハードリンクなので同一ファイルシステム内にバックアップを取らなきゃいけないとか(2008, 2009年ディレクトリにディスクをmountするとかは無駄が起こる。してもいいけれど。)、直接バックアップファイルを編集するとi-nodeが同じな他の日付のファイルも書き変わってしまうとか、まっとうな制約はありますが、非常に理解しやすい仕組みで動いています。

悪さをしているのが~/.google/だとわかったので定期実行しているスクリプトの中で--exclude=/.google/を指定しましたが、コマンドラインの組み立て方によっては少し注意が必要です。

ファイルをコピーする時に$ cp src/. dest/.のように実行するイメージで$ sudo pdumpfs src/. dest/.などとコマンドラインを組み立てていて"src/file01"を除外しようとして$ sudo pdumpfs --exclude=src/file01 src/. dest.と実行しても"file01"は除外されずに保存されます。

まぁ第一引数SRCに"src/."と指定すれば内部的に"src/./test01"が生成されるとわかっていれば当然なんですけどね。ここら辺を調べるためにコードを眺めてみるとFile.fnmatchを使った方法も使える事がわかりました。けれどflagが設定できないので、ワイルドーカードを使うシェルに近い感覚で使えるものの、パワーは活かしきれないようです。

pdumpfsではFile.basename(path)に対して"--exclude-by-glob"の引数が一致するか確認されます。つまり"*.c"のような方法でファイル名を指定するためにあるので、'/'を含むパスで指定してはいけません。

$ sudo pdumpfs --exclude-by-glob=src/./test01 src/. dest/.
directory    src/.
new_file     src/./test02
new_file     src/./test01
$ pdumpfs --exclude-by-glob=test0 src/. dest/.
directory    src/.
new_file     src/./test02
new_file     src/./test01
$ pdumpfs --exclude-by-glob="test0*" src/. dest/.
directory    src/.

やりたかったのはこれ

$ pdumpfs --exclude=src/./test01 src/. dest/.
directory    src/.
new_file     src/./test02

それで、気をつけることは…

結論としてはGoogle Desktopを使っている場合は"~/.google/"をバックアップ取らないようにする事と、 SRC, DESTの末尾に"/."を含めないようにしてください。

$ pdumpfs
Usage: pdumpfs SRC DEST [BASE]

2009/07/11

worldcommunitygridについて

しばらく前から、このblogの左側メニューの下に"World Community Grid" (WCG) [www.worldcommunitygrid.org] のウィジェットを貼り付けています。

これはPCグリッドを構築して人類全体に影響を与える研究目的に特化したもので、「人類に貢献するプロジェクトに取り組むため」という崇高な目標を掲げています。

崇高だから参加している理由ではありませんが、自分のPCリソースで核開発をやられても困るし、まぁ参加した経緯もあって信頼できそうという理由で続けています。

グリッドの成果とは…

英語のレポートを斜め読みする限りは既に完了したプロジェクトの成果は地味なりにもそれなりにあって、現在アクティブなプロジェクトでは星の数ほどある候補の中からいくつかの候補を抽出するのに役だったりしているようです。ただ時々ツッコまれるところですが、似非科学か新興宗教の現世での効用のように万人に受け入れられるようなシンプルで判り易い「これができました」という宣伝文句になる成果はなさそうです。

実際のところ研究をブーストするために使うのであれば、感謝こそされても直接的な成果はないのが普通でしょう。 また、薬の開発であれば本物の実験というPCグリッドでは解決できない事の他にも、ゴールまでに様々な問題があると思います。つまり様々な貢献によって最終的な成果が作られるのであって、 PCグリッドだけで具体的な成果が上がるような事はなくても不思議ではないと考えています。

もちろん問題の解決にPCグリッドを使うのが不適だったという事もあると思いますが、 レポートにはそれぞれのプロジェクトから感謝の言葉が寄せられていて、それがグリッドを使う使用料のような社交辞令であったとしても、世の中が前に進むために何かしら役に立っているのだろうと思えます。

どうせ無駄になるCPUの処理能力を分けているだけですから、取り組んだ結果が無駄だったと分かる事でも良いのかなぐらいに考えています。

本末転倒…電気の無駄?

まぁコア全部を100%で動かしたりすると最近のCPUが持つ回路の一部やコア全体を落として省電力を実現する機能が役に立ちませんから、むしろ電気の無駄になる可能性は否定できません。 普段の使い方に合わせてオプションを使ってCPUの割り当て数を減らしたり、PCを使っていない時のみ有効にすると良いでしょう。

いまでこそデスクトップやらノートPCやらに入れていますが、 最初はグリッドというと電気の無駄使いというイメージもあって最初は避けていました。 専用クライアントがまだあった頃、会社でPCにインストールする事が推奨されましたが、バックグランドでアプリを動かしたりしていて非力なノートPCが重くなるのが嫌だったという事もありました。

その後PCのスペックが上がって会社からの圧力も高まり、嫌々スクリーンセーバーとして動かしていましたが、BOINCベースのクライアントに移行してからは、割り当てるCPU時間やら自分の都合に合わせてカスタマイズの幅が広がり便利になっています。

最初は半ば強制されたとはいえ、いまさら何のために動かすか、というと難しいですね。 どうせ無駄になるなら役に立たせよう、ぐらいの自己満足でしょうか。

いままでのチームは離脱して、チームを作ってみました

そうそうWebサイトには個人別の成績とチーム別の成績が載っています。 使い始めてしばらく経った2006年に当時いた会社のチームに所属したのですが、 さすがにもう関係ないので適当そうなものを探したのですが残念ながらみつけられませんでした。

"Team ギター弾き"みたいな趣味な集りの方がプロジェクトのイメージにも会いそうに思えて、地域名をチーム名にするのはクローズドなイメージかなとも思ったのですが、とりあえず"Team Aizu"を作ってみました。 誰のものというものでもないので気が向けば参加してみてください。

ALIXのlennyで日本語を表示する

普通にデスクトップ用に構成されたDebianやらUbuntuやらは、例えば$ dateと実行すると日本語で2009年 7月 11日 土曜日 00:12:11 JSTのように表示してくれます。

debootstrapから構成したALIX用のDebianは必要最低限の機能しかもっていないので日本語を表示するためのpoファイルはコマンドによっては入っている事もありますが表示してはくれません。 "date"コマンドを実行した時に"JST"で時刻を表示させる方法は以前書きましたが、日本語で表示させる方法が見当らなかったのでメモしておきます。

日本語のlocaleファイルを入れれば良いのですが設定画面が面倒なので、"locales-all"を使って他の言語も含めて全部入れてしまおうと思います。

$ sudo apt-get install locales-all

もし、$ echo $LANGを実行して"ja_JP"が含まれていなければ、$ export LANG=ja_JP.utf-8を実行してから$ dateで日本語が表示されるか確認しましょう。

$ echo $LANG
ja_JP.UTF-8
$ date
2009年  7月 11日 土曜日 00:48:37 JST

2009/07/10

Debian etchなALIXをlennyにアップグレードしてみる

元々CD-ROMから導入するのとは別の方法で構成しているので、apt-getを使ってアップグレードする事にしました。Debianのマニュアルには事前にパッケージ構成が壊れていないかなどのチェックをする手順が書かれています。ALIX用のイメージは使っているパッケージも少ないので、そういったチェックは飛して作業をしてみました。

Ubuntuをデスクトップ環境で使っていれば"/usr/bin/update-manager"を使うべきでしょうし、普通にdebianを使っていればマニュアル通りに作業するべきだと思います。 基本的にはetchなALIXで、$ sudo apt-get update ; sudo apt-get upgradeを実行してから"/etc/apt/source.list"を編集して、"etch"を"lenny"に書き換えます。

これが終れば$ sudo apt-get update; sudo apt-get dist-upgradeを実行しますが、いろいろ質問に答える必要があるので目を離すわけにはいかないようです。 またマニュアルでは先に"apt-get install apt"を実行してAPTパッケージを更新するように書かれていますが、特に深刻な問題は起りませんでした。

ただkernelのバージョンがetchの古いままだったので、$ dpkg -l | grep linux-imageでみるとdummyパッケージは導入されていませんでした。lennyの時と同じように"linux-image-486"を$ sudo apt-get install linux-image-486を実行して無事に新しいカーネルが導入されました。

新しいカーネルを導入した時には/boot/grub/menu.lstファイルを確認して間違ったファイルを指定していないか確認しておきます。 と、ここでmenu.lstファイルが書き変わっていない事に気がついたのですが、どうやら/etc/kernel-img.confファイルの中で設定が抜けていたようです。普通のUbuntuと見比べて気がついたのですが、設定を追加しました。

$ cat /etc/kernel-img.conf
do_symlinks = Yes
do_initrd = Yes
postinst_hook = update-grub
postrm_hook   = update-grub

kernel-img.confファイルを編集してから導入したlinux-imageパッケージを削除して再度導入をやり直します。

$ sudo apt-get remove linux-image-486 linux-image-2.6.26-2-486
$ sudo apt-get install linux-image-486 linux-image-2.6.26-2-486

これで出来上がった"/boot/grub/menu.lst"ファイルを確認すると、少し問題がありました。

  • 古いmenu.lstの内容がファイル先頭にそのまま残っている
  • 新しい設定の中でkernel行の"console="オプションが消えている

古い設定の中でも"serial", "terminal"行は必要なので、先頭5行を残し、続く"title"行から"savedefault"行までの5行は削除します。 手動でconsoleオプションを各kernel行に追記する事にします。

title           Debian GNU/Linux, kernel 2.6.26-2-486
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.26-2-486 root=/dev/hda1 ro console=ttyS0,38400n8
initrd          /boot/initrd.img-2.6.26-2-486

2009/07/09

RTC用電池を持たないALIXで時刻が起動時に設定されない件について

07/07 七夕の投稿の中で、ALIXでopenntpdを設定しているにも拘わらず電源投入後に時刻が狂ってしまうと書きました。 さらに/etc/default/openntpdの中にntpdateを記述しました。 結論からいうとデフォルト設定からいろいろ変更した末に、自分で変な設定にしてしまったようでした。

さて、偶然/etc/default/ntpdateを見つけて$ dpkg -L ntpdateを実行してみたところ、/etc/network/if-up.d/ntpdateファイルがパッケージに含まれている事がわかりました。 ネットワークインタフェースが起動するタイミングでntpdateが実行されるようです。

ほとんどのALIXはReal-Time-Clock(RTC)を保持する内蔵電池を持っていないので、電源を抜き差しすると時刻がリセットされてしまうのは仕様ですが、たまーに時刻がリセットされたままになるという現象に遭遇してきました。

設定の再確認

NTPクライアントとなる新しいALIXで/etc/default/以下のファイル2つを確認します。 まず以前の投稿で編集した/etc/default/openntpdファイルの"ntpdate"行を削除して戻します。

次に/etc/default/ntpdateの内容を次のようにしました。

NTPDATE_USE_NTP_CONF=no
NTPSERVERS="192.168.1.2"
NTPOPTIONS=""

NTPサーバーとなる192.168.1.2の方では適合に設定を行なっていますが、/etc/openntpd/ntp.confでは"listen on *"を実行しています。

現象の再現

192.168.1.2のNTPサーバー側で$ sudo /etc/init.d/openntpd restartを実行するとntpdデーモンが再起動します。NTPクライアント側から$ sudo /usr/sbin/ntpdate 192.168.1.2を実行すると、まだNTPサーバーが起動したばかりで外部サービスと十分な時刻同期を取っていないためエラーメッセージ、no server suitable for synchronization found、が表示されます。

ここでNTPクライアント側の新しいALIXを停止しAC電源プラグを抜き差しして起動すると、 時刻は2000年にリセットされたままとなります。

解決策の確認

解決策としてはクライアント側の/etc/default/ntpdateファイルを編集し、NTPSERVERSに外部サーバーを追記します。

NTPSERVERS="192.168.1.2 ntp.ring.gr.jp"

念のためNTPサーバー側で$ sudo /etc/init.d/openntpd restartを再度実行し、ntpdateコマンドを叩いてadjust time server xxx.xxx.xxx.xxx offset -0.130203 secのように時刻調整の結果が表示される事を確認しておきます。

この状態でAC電源プラグを抜き差しして起動すると、今度は時刻が正しく調整されます。

まとめ

いろいろ書きましたが"openntpd"と"ntpdate"パッケージの組合せでは、デフォルトの設定を使っている限り、あまり問題になる事はなさそうです。"NTPDATE_USE_NTP_CONF=yes"の設定を入れてみても、 ntpdate-debianスクリプトからは/etc/ntp.conf, /etc/ntp.conf.dhcpが対象で、/etc/opennepd/ntp.confは読み込まれません。

もし自前のNTPサーバーを持っていて/etc/default/ntpdateを編集する場合には、信頼できるNTPサーバーを複数記述しておく必要がありそうです。

デフォルトから変更する場合には、時刻同期については問題にならないか気をつける必要がありそうです。。 もちろんNTPサーバーに対する負荷といった事を考えると、やたらに外部NTPサーバーに接続するべきではないんですけどね。そこら辺を気にするあまり過去にいろいろ変更したのをすっかり忘れていて、自分のミスを再発見してしまいました。

2009/07/08

Windows7での「アップグレード」という言葉の意味

既にXPやらVistaやらが動いているPCにWindows7を入れて動かすという意味で「アップグレード」という言葉を使いますが、人によって受け取り方が違ってきます。私は「アップグレードできる」と言われれば、OS以外のデータや導入済みのソフトウェアはそのまま"Program Files"フォルダに引き継がれると思ってしまいます。

しかし今回はXPからのアップグレードは「クリーンインストール」になると説明されていて、既存のデータやソフトウェアは引き継がれないと言われています。

わかる人にはわかるこの説明がいろんなところで混乱を招いていて、マイクロソフトのサイトをみていてもVista等を対象にした説明ではデータが引き継がれるという意味で「アップグレード」と書かれていますし、対象のOSによって単語の意味が統一されていないようです。 もちろんアップグレード版は低価格ですから、「XPユーザーはアップグレード版を購入できます」という意味で「アップグレードできます」と書かれているところもあります。

こんな風に言葉の違いが気になったのは、32bit版のVistaに64bit版のWindows7が導入できるか気になって調べていたからです。少なくとも32bit版のXPに64bit版のVistaが導入できない事はわかっています。→「32 ビットと 64 ビットの Windows : よく寄せられる質問」。 これを踏まえてWindows7についての情報を探すと公式な資料は発見できませんでしたが、Wikipediaには「32bit版Vista→64bit版Windows7が可能」と書かれています。その出典が価格.comのクチコミ情報になっていたので、そこを見てみると信用できるか微妙な表現になっていました。

先日予約が始まった(そしてすぐに終った)Windows7のアップグレード版を販売するサイトでは、はっきりと「32bit版Vista→64bit版Windows7は新規インストール」と書かれています。ここでも「クリーンインストール」とは書かれていないですね…。

仕組みを考えるとVistaであれWindows7であれ、32bit版と64bit版でデバイスドライバの互換性はありませんから、異なる"ビット"同士で既存のデータやソフトウェアを引き継いだアップグレードは非常にリスクが高いと考えるのが妥当に思えます。たぶん再起動したら動かなくなる可能性がある程度あると思います。

たぶん「アップグレード版を購入する事ができます」が短かくなって「アップグレードできます」になったのだと思いますが、マイクロソフトの窓口担当者でも混乱しているという事なのでしょうか。

結局みつけたのがこれ…

マイクロソフトのサイトからやっとそれらしいものを探すと、優待アップグレードプログラムの中に「プログラムに関する情報」があり、その中で「システムのプラットフォーム (32 ビットまたは 64 ビット)」と書かれた下に次のような説明がありました。

重要 : ご使用の Windows Vista の基本言語、エディション、プラットフォームとは異なる言語、エディション、プラットフォームの Windows 7 にアップグレードしようとすると、アップグレード処理が失敗し、インストールされていた元のバージョンの Windows ソフトウェアで利用していたアプリケーション、ファイル、および設定が失われることがあります。最悪の場合、ハードドライブのフォーマットが必要になることがあります。

※ 「プラットフォーム」に強調タグを追加しました。

販売店の情報でも良いけれど、なぜか信用できそうな情報がこれだけという結果になりました。Windows7から64bit版を本格的に展開するのだから、こういったところのフォローも必要じゃないかなぁ。32bit版と64bit版は同一パッケージに同梱されるから間違ったものを買う可能性はなさそうですが、正しくないものを導入してしまいそうです。

Windows7に期待が集っているらしい

どうやらWindows7の発売日が決定したらしく、一般の各種メディアでも取り上げられ始めています。今日の日経新聞にも動作が軽快であるなど期待が高まっている旨の記事が掲載されていました。記事はすごくよくまとまっていました。

その記事の中でXPからWindows7への乗り換え時の価格について触れられていました。 それを読んで、ふと、アップグレード版を購入したとして初期のXP搭載PCの代りにはならないかなぁ、と思いました。XPからのアップグレード後にストレスなく動くのはVistaが発売されてからも意図的にXPを動かしていたようなPCぐらいでしょうか。

Vistaに対する不満を受けてWindows7で行なわれた改善点は、起動時に動かすアプリケーション数を抑えた事でメモリ使用量とCPUへの負荷を下げた事のはずです。結果として前評判は非常に良いものとなりました。Vistaで不満を爆発させたユーザーがWindows7を購入した場合はそれなりに納得すると思います。

しかしVista発売以前のXP搭載PCを使っているユーザーが十分なCPU、メモリリソースを持っているようには思えません。アップグレード版が売れれば売れるほど不満の声が大きくなるといった事になるのではないかと思います。

ネットブックでもWindows7が動くとはいわれていますが、メリットを感じる事はたぶんないと思います。サポートの問題でXPを止めなければいけないMSには十分大きなメリットがあるのでしょうけれど。

WindowsがNT系に移行して安定稼動するOSとなってからは、OSの更新が必要となるのは、より新しいハードウェアを使いたい場合ぐらいでしょうか。 もちろん使い易くなったと言われたりしますが、実際にはOSが新しくなってもユーザーの作業効率が増すようなInnovationは行なわれていないと思います。 グラフィック機能は新しいOSの方がリッチなようですが、グラフィック機能をカーネルに組み込む事で容易に差し替える事が難しくなった元々の設計に問題があった気もします。

マイクロソフトは意図的に新しい機能をバックポートせずに済ませる事で、OSのエコシステムを維持していく以外に道はないように思えます。

企業向けには間違いなく売れるでしょうね…

XPからのアプリ移行を考えるとVirtual PCでXPが動くXP Modeはよさそうですが、より多くのCPU、メモリのリソースが必要になります。Professional版が必要ですから一般消費者よりも、業務アプリを安全に動かしたい、クライアントの環境に依存せずに開発したい企業の利用者、開発者に対してよりメリットがありそうです。いままでは追加でライセンスを購入しないと実現できなかったこの利点のために、企業はより高いスペックを持つPCへの買い替えすらするのかもしれません。

いつWindows7を我が家に導入するか…

結局のところプログラムを書くぐらいならVistaでもしばらくは同等の環境が手に入りそうです。きっとWindows7は長い間使われるでしょうから、いつかは乗り換えるでしょうけれど、SP1が出たら考えるかなぁ…。

少なくともその前にUbuntu 10.04 LTSをメインマシンに導入するでしょうね。

2009/07/07

ALIX用のlennyでネットワークの設定をする

昨日で基本部分は導入が終ったのでALIX上にCFカードを差して、シリアルケーブル経由で設定をします。 なお参考にしたのは以前の投稿記事です。

openntpdの設定をするところ

/etc/default/openntpdの中で"-s"オプションを有効にすると180秒以上の差がある場合でも、起動時に調整してくれます。しかしマニュアル(man ntpd)にも書かれているのですが、非常に差が大きい場合には事前にrdate, ntpdateなどでリセットするように書かれています。いまどきrdateはないでしょうね。

起動途中で時刻が大幅に変動する事は他のdaemonにも影響が出るので、本来は一度ntpdateで設定してからrebootするのが良さそうです。電源プラグを差した状態であれば、reboot後も時計は正常に動きますし。

今回はそこまでは求めていないので、ntpdateコマンドをntpd起動までの間に実行するようにします。 結局のところ/etc/default/openntpdの中に1行追加する事にしました。

$ cat /etc/default/openntpd
DAEMON_OPTS="-s"
/usr/sbin/ntpdate ntp.ring.gr.jp

07/09の投稿で、これに代わる方法について書いています。

既にntpdが走っているマシンがある場合

以前にalixにntpdを導入した時に"listen on *"の設定を/etc/openntpd/ntpd.confに設定しておきました。このように設定されているntpdがある場合には、ntp.ring.gr.jpなど公共NTPサーバーへの負荷を下げるために、server行を変更しましょう。

$ cat /etc/openntpd/ntpd.conf
server 192.168.1.2

"192.168.1.2"は以前に構築したALIXサーバーで、ここのntpd.confには"listen on *"、"server ntp.ring.gr.jp"が設定されています。

ただntpdateで指定すると状況によっては精度が十分でないために失敗する場合があるので"ntp.ring.gr.jp"等を指定するようにしましょう。

2009/07/06

ALIX用にCFカードにdebian 5.0 - Lennyをインストールしてみる

ひさしぶりにALIXをいじるためにTranscendの133倍速(MLCタイプ)2GBのCFカードを購入しました。 上海問屋で普段使っている266倍速2GB(SLCのはず)と比較して非常に安かったのが購入の理由です。

以前にもCFカードで導入する方法はまとめていたのですが、EtchではなくLennyを導入して気がついた事のまとめです。

debootstrap後に導入するカーネルイメージの選択

debootstrapを使っただけでは、linux-imageが導入されていません。 etchとは違うバージョンを導入しなければならないのですが、探し方は次の通りです。

# apt-get update
# apt-cache search linux-image

導入するべきは"linux-image-2.6.26-2-486"のようですが、出力の中に"linux-image-2.6-486"があります。 どうやら最新版へのdummy packageのようなので、後から新しいバージョンがリリースされる可能性を考えるとこちらを導入すると覚えておいた方がよさそうです。

# apt-get install linux-image-2.6-486

この先の手順でもgrubの設定などではカーネルのバージョンを"2.6.18-6"ではなく"2.6.26-2"として進めます。

apt-getで使用するサイトの変更

linux-imageを導入する時にftp.us.debian.orgからパッケージをダウンロードしている事に気がつきました。そのままでも良いですが近場に変更しておきたいので、"ftp.jp.debian.org"に変更します。

# vi /etc/apt/sources.list

viで開き、"us"を"jp"に変更し、次のような一行にします。

deb http://ftp.jp.debian.org/debian lenny main

これが終った後はパッケージ情報を最新にしておきます。 # apt-get update

2010/01/24追記:
lenny用のsources.listファイルの中身としては次のようにsecurity.debian.orgを含めたものがお勧めです。 必要に応じて"main"の他に"contrib"や"non-free"などを追加してください。

deb http://ftp.jp.debian.org/debian/ lenny main
deb-src http://ftp.jp.debian.org/debian/ lenny main

deb http://security.debian.org/ lenny/updates main
deb-src http://security.debian.org/ lenny/updates main

deb http://volatile.debian.org/debian-volatile lenny/volatile main
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main

2009/07/05

TypingMania 5 Odysseyで曲データを作ってみる

日曜日は早起きをして友達の運転でエバ劇場版をみてきました。無事帰ってきたものの、眠たさのあまり本を読もうにも頭に入ってこないので、放置していたTypingMania用のXMLファイルの作ってみました。お題は現在REMEDIOSとして活動している麗美さんの「Angel」です。

麗美さんの楽曲は1991年前後に深夜番組で「Daydream Fair」を聞いてからCDを買って聞いていますが、最近はアルバムをリリースしなくなり、残念ながら活動している様子を聞かなくなってしまいました。(と書きつつ調べてみると今はUR都市機構のCMで声が聞けるようですね)

XMLファイルを作成するためのTypingMania配布元サイトや付属するマニュアルの説明は文字が多く丁寧なので、少し壁はありますが、PCは操作するだけという方でも曲データの作成は簡単だと思います。

少し引っかかったのは次のような点でしょうか。

とにかく遊びたいがXMLファイルとはなんぞやといった方には、なにか適当なGUI付きのUtilityとか"設定用.xls"からのXMLファイル用イクスポートボタンとかないと、敷居がちょっと高いかもしれないですね。けれどそんなに難しくはないです。慣れの問題だと思います。

MP3ファイルとWAVEファイルの相互変換

「午後のこ~だ」などを使う方法が紹介されていて、この方法自体はいいなぁと思いました。 ただ使用しているOSがVistaだった事もあってMP3とWAVEファイルの変換をするためにwinLAMEを使いました。

普段使っているLinux機であれば$ lame --decode angel.mp3 angel.wavぐらいなので、WindowsでもLAMEを入れてみたというわけです。 "winLAME"は簡単なGUI付きで、MP3からWAVE, WAVEからMP3といった変換はほぼ直感的な操作でできそうです。

SoundEngineの用途

配布元サイトではSoundEngineが紹介されていますが、ボタンが多くて少し引きました。 説明の内容からおそらくフェードインを付けるといった曲データの加工をした上で遊ぶ事を視野に入れているのでしょう。

最初から説明を読もうとせずに、「再生ボタン」、「一時停止ボタン」、「現在時刻表示」がわかれば良いのではないかと思われます。ミリ秒単位で時刻表示できるプレイヤーがあれば簡単そうですが、適当なものは見つけられなかったのでSoundEngineをリッチなプレイヤーとして使いましょう。

"設定用.xls"ファイルに入力するインターバル

SoundEngineに表示される時刻表示は、「x分y.yyy秒」という形式で表示されます。 しかし実際にはミリ秒に変換した数値を"設定用.xls"の赤字箇所に入力しなければなりません。

例えば"1:23.456"と表示されていた場合は、"1分"を"60秒"と変換して、「60(秒)+23.456(秒)」の結果、つまり"83.456(秒)"をミリ秒に変換した、"83456"を赤字箇所に入力するわけです。

説明文にもちゃんと書かれていますけれど、何のことだか動かすまではよくわかりませんでした。

2009/09/26追記:ちなみにExcel(or OpenOffice)を使って変換する事ができます。
A1セルに"1:23.456"の記号を取って"123456"と入力しておいて、他のセルに=A1- ( 100000 - 60000 ) * INT(A1 / 100000)と書けば"83456"と赤字部分に入力するべき数字が得られます。

XMLファイルのUTF-8での保存方法

解説では".xml"の拡張子をつけて保存するべし、と書かれていますが、おそらく使うツールやPCの設定によってUTF-8で保存する事ができないと思われます。

実際に問題があったのでcygwinの環境でnkfを使って直しましたが、一般的ではないですよね…。 普通にWindowsを使っている場合はメモ帳で名前を付けて保存をする時に文字コードの指定ができるので、UTF-8を指定して上書き保存するのが良いと思われます。

既知のバグ

「Angel」の歌詞の中には"Sweet, sweet..."という一節があるのですが、この小文字のカンマを入力すると正しく動きません。 ここら辺は配布サイトの「意見・感想コメントページ」の中で既に触れられています。

今回はスペースに置き換える事で解決としました。

まとめ

実際に作成したファイルで遊んでみましたが、今回の曲はM.M.=72ぐらいだと思いますがかなり難しかったです…。

配布元サイトでは簡単にゲームを楽しむ事もできるようになっていますが、自分の気にいった楽曲で遊ぶのもまた楽しいです。同じデータを元にして競う事はできないですが、それでもこのアプリケーションは魅力的です。 いまは自分で手を加えて遊ぶ必要のない環境がいろいろありますが、こういった手をかけて準備するものにも独特のおもしろさがあると思います。

それにしても配布元サイトの「恋スルVOC@LOID」がClass A以上どうしてもとれないなぁ。もっと歌詞を覚えないとだめか…。しかもアルファベットをみて打つわけじゃないから歌詞が消えるEasyの方が激ムズ…。

ああ、あと気になったのは日本ファルコムが楽曲の使用(主に再生、演奏)をフリー(無償)としましたが、ゲームへの利用は禁じている点でしょうか。ブログでもこの点を踏まえて許諾を得たとはされていなかったので、そのうち取り下げられるかも知れません。

2009/10/19追記:利用規約ではゲームでの楽曲利用は明示的に禁止されていません。
しかし利用例の中で、ゲーム利用については禁止とだけ書かれています。 この根拠が利用規約のいずれに当るものかは、これだけではわかりません。
利用規約は新たな創作活動に使うためであれば無償にするという趣旨に読めるので、明記されていないところからすると、「当社の権限」を行使した場合はおとなしく従ってね、といったところでしょうか。

2009/07/03

MacOSXでのAquaSKKに必要な設定

ソフトウェア・アップデートをすると、なぜか「ネットワークに接続できません」な"-3001"エラーがでてSafari 4.0.1への更新ができなくなりました。原因を調べるべく /var/log/console.log ファイルを眺めていて気がついた事。

下記のようなエラーがでていて、AquaSKKで個人辞書ファイルが保存されていませんでした。

Jul  2 23:11:34 mac-mini [0x0-0x11011].jp.sourceforge.AquaSKKServer[174]: OpenAndSeek: stat(/Users/yasu/.skk-jisyo) failed

テキストを入力する頻度が低いので、何となく感じていたまま放置していましたが、ターミナル.appの代りに使っているiTermを開いて$ touch ~/.skk-jisyoを実行してからは問題なく辞書が保存されるようになりました。

そもそも調べていた"-3001"エラーの方は、手動でSafari 4.0.1のインストールイメージを持ってきて入れる以外にはなさそうです。たぶん一番最初にダウンロードしている最中でシステムをリスタートしたとか、そんな理由で中間ファイルが壊れたんじゃないかなと想像しつつも確かな証拠もエラーの根本原因もわからないので手が出せません。

Googleの検索結果に出てきた英語のディスカッションフォーラムを眺めた感じでは、ディスクユーティリティで「アクセス権の修復」をするようアドバイスするものが多数ありましたが、軒並効果無しといった感じでした。

一応アクセス権の修復は試しているので、これを書き終ってからMacOSXをリスタートして効果を確認してからSafari 4.0.1のdmgファイルを探しに行こうと思います。