2002年1月の雑感

更新日:2002-02-01
[トップページへ] [12月] [2月] [過去の雑感へ]

1月31日(木)

Win32OLE

そうか。CR + LFはまずいのか。

そういえば、昔、何かのソースをコンパイルしたときに 行末が \ でコンパイルできず、一生懸命 LF になおした記憶があります。 (あれ? Cygwinにはd2uu2dが用意されてますね。これ、最初からあったのかな?)

Win32OLEも修正しておきます。 今まで発覚しなかったのは、行末に\が来てなかったから。 安直にWindowsだからCR + LFでいいやと思っていました。

しかし、コンパイルできなかった経験をもちながら、自分で、 その経験を活かしきれていないのが情けないです。

試してみましたが、 gcc 2.95.3 だと大丈夫に思えます。


1月30日(水)

『Java言語プログラミングレッスン 下』 結城浩 著

やっと読了。初心者向けに丁寧にわかりやすく書かれています。 いかにも教科書という感じです。

『ピープルウェア』

読み始めました。 語り口がなめらかですんなり読めます。 あまりにすんなり読めてしまうので、読んだあと、何も残らないのではないかと心配。


1月28日(月)

rdoc(Ruby RDOC)

RDoc Valpha-9 には、

--diagram

というオプションがあります。 このオプションを指定するとクラスとモジュールのダイアグラムを生成してくれます。 ただし、ダイアグラムを生成するには、 Graphvizdotというツール(コマンド)が 必要です。

残念ながら、私の環境では、Tcl/Tkのヴァージョンが古かったので、素直にコンパイルできませんでした。 (Graphvizのコンパイルには Tcl/Tk 8.3 が必要です。) 結局、エラーの出るtkspline.c を空っぽにして、強引にコンパイルを通してdotコマンドを作りました。

このようにいい加減に作ったdotなのですが、 コアダンプすることもなくrdocから使うことができました。 だ円と文字の位置が多少ずれていますが、それなりにダイアグラム(PNGファイル)を生成しました。 (位置がずれるのは、強引にコンパイルを通したからかも知れません。)

各クラスは楕円で表現され、親クラスから派生クラスに向かって矢印も描かれています。

Win32OLE

昨日の件は、タイプライブラリでないと失敗することがあります。

そこで、公式には

WIN32OLE.const_load(ole [,class])
  ole は WIN32OLEオブジェクト、もしくはタイプライブラリ名
  class は、モジュールもしくはクラス
を指定する。

とします。

ところで、タイプライブラリから得られるITypeInfoインターフェースを手掛りに OLEの世界をあれこれさまよい歩くといろいろ情報を得ることができます。 この辺をあれこれいじってみようかと思っています。

今のWIN32OLE#ole_methodsなどを使ってもメソッドの情報を得ることができます。 ですがOLEサーバーを起動しないといけないのが面倒なのです。 ということでタイプライブラリ経由でも得られるようにしてみようと思います。


1月27日()

RubyUnit

GPLファイルを含めた。COPYINGファイルやCOPYING.jaファイルも含める必要があるのだろうか? ライセンス難しい。 私を訴えなければ、煮るなり、焼くなり好きにしてくれていいというのが本音。 他は変わってないので、rubyunit-0.5.4-01 です。

Win32OLE 0.3.4

結局、タイプライブラリでもProgIDでも良いようにした。

module Office
end

WIN32OLE.const_load('Microsoft Office 9 Object Library', Office)
puts Office::MsoGradientVertical

でも

module Office
end

WIN32OLE.const_load('OfficeCompatible.Application', Office)
puts Office::MsoGradientVertical

でもOK。そろそろroughに入れる準備を始めよう。

ole_method_helpもちょっと修正。

require 'win32ole'

excel = WIN32OLE.new('Excel.Application')
excel.visible = true
book = excel.workbooks.add
info = book.ole_method_help('SaveAs')
puts info['name']
params = info['params']
params.each do |param|
  print "   ", param['name']
  print " = ", param['default'] if param['default']
  print "("
  print param['type']
  print ",IN" if param["in"]
  print ",OUT" if param["out"]
  print ",OPTIONAL" if param["optional"]
  puts ")"
end

を実行すると次のような結果が得られます。

SaveAs
   Filename(VARIANT,IN,OPTIONAL)
   FileFormat(VARIANT,IN,OPTIONAL)
   Password(VARIANT,IN,OPTIONAL)
   WriteResPassword(VARIANT,IN,OPTIONAL)
   ReadOnlyRecommended(VARIANT,IN,OPTIONAL)
   CreateBackup(VARIANT,IN,OPTIONAL)
   AccessMode = 1(USERDEFINED,IN,OPTIONAL)
   ConflictResolution(VARIANT,IN,OPTIONAL)
   AddToMru(VARIANT,IN,OPTIONAL)
   TextCodepage(VARIANT,IN,OPTIONAL)
   TextVisualLayout(VARIANT,IN,OPTIONAL)

1月26日()

送信

返事は書いたが、送信するのを忘れてた。

Win32OLE(Ruby, Windows)

急に[ruby-list:30413]から始まるスレッドで言及されているWin32OLEの弱点に 対応しようという気持ちが強くなったので調べてみた。(私は気まぐれ。) [ruby-list:30420]によれば、Perlではできるそうなので、例によってPerlのOLEを調べる。 調べる。調べる...。

Registoryの中身を探しまくるのかあ。はあ...。

適当にプログラムを書いて試してみると、タイプライブラリのフルパスがわかれば、

LoadTypeLibEx

でITypeLibポインタが得られることがわかった。 ここまでくればwin32ole.cの

ole_const_load

を呼べばおしまい。

そこで、

WIN32OLE.const_load の第一引数は、WIN32OLEオブジェクトかタイプライブラリのフルパスを指定する

ということにしようかと思った。

でもそうすると環境によってフルパスは代わってくるので嬉しくない。 例えば私の環境では、[ruby-list:30420]で言及されている MSO9.DLL のフルパスは

C:\msoffice2000\Office\MSO9.DLL

になっている。 これをそのまま、WIN32OLE.const_loadの第一引数に指定しているスクリプトは、 私の環境では動くけど、他の環境では動かない。

やっぱり、

WIN32OLE.const_load の第一引数は、WIN32OLEオブジェクトかProgIDを指定する。

ぐらいにしないと使えない。

そこで、基本に戻って『Inside OLE』を読んでみる。

  1. ProgIDからCLSIDに変換する。(変換したCLSIDを{<CLSID>}とする。)

  2. RegistoryのHKEY_CLASSES_ROOT\CLSID\{<CLSID>}\TypeLibの値{<LIBID>}を探す。

  3. HKEY_CLASSES_ROOT\TypeLib\{<LIBID>}の下を探す。

この手順でフルパスを見つけられるように読み取れるのだけど、 私の環境のRegistoryには(2)のTypeLibのサブキーが見当たらない。 代わりに

InprocServer32

というサブキーがあって、フルパスが入っている。 これをあてにしてもいいんだろうか?

ところで、[ruby-list:30420]によるとPerlでは

"Microsoft Office"

を指定すればいいらしい。 Perlは、この文字列から、RegistoryのHKEY_CLASSES_ROOT\TypeLibの下をぐるぐるさまよって、 "Microsoft Office" にマッチする

"Microsoft Office 9 Object Library"

を値にもつ

HKEY_CLASSES_ROOT\TypeLib\{<LIBID>}

にたどりついて、フルパスを手に入れているみたいだ。

WIN32OLE.const_loadの第一引数は、WIN32OLEオブジェクトか、タイプライブラリ名を指定する

というのがいいかも知れない。 さすがに

"Microsoft Office" 

だけでいいってのはやり過ぎな気がするので、そこまでサポートするかどうかわからないけど。


1月23日(水)

Ruby/Tk

のことを聞かれてもよくわからないので、ruby-talkで質問してみたらどうかと返事を書いておいた。

RDOC(Ruby)

今回は、RDOCのコメント部分の話です。

rdocに処理させたくない部分は

#--

で始めます。

# この行は Foo クラスの説明の行です。
# この行は2行目ですが、rdocの処理結果では1行になります。
#
# 1行空けて書き始めると改行されます。
#--
# ここから先の行はrdocでは無視されます。
# この行も無視されてしまいます。

class Foo

の場合には、Fooの説明は

この行は Foo クラスの説明の行です。この行は2行目ですが、rdocの処理結果では1行になります。
1行空けて書き始めると改行されます。

となります。

rdocに処理させたい部分を再開するには

#++

で始めます。

# この行は Foo クラスの説明の行です。
# この行は2行目ですが、rdocの処理結果では1行になります。
#
# 1行空けて書き始めると改行されます。
#--
# ここから先の行はrdocでは無視されます。
# この行も無視されてしまいます。
#++
# この行からまた、Fooの説明になります

class Foo

とすると、Fooの説明は

この行は Foo クラスの説明の行です。この行は2行目ですが、rdocの処理結果では1行になります。
1行空けて書き始めると改行されます。この行からまた、Fooの説明になります。

となります。

この行は Foo クラスの説明の行です。この行は2行目ですが、rdocの処理結果では1行になります。
1行空けて書き始めると改行されます。
この行からまた、Fooの説明になります。

としたい場合には、

# この行は Foo クラスの説明の行です。
# この行は2行目ですが、rdocの処理結果では1行になります。
#
# 1行空けて書き始めると改行されます。
#--
# ここから先の行はrdocでは無視されます。
# この行も無視されてしまいます。
#++
#
# この行からまた、Fooの説明になります

class Foo

としなくてはいけません。


1月21日(月)

本日の誤読

ハニーポットを利用したネットワークの危機管理」 を「ハーボットを利用したネットワークの危機管理」と読み間違えた。

Google

ふと思って、Googleで、「雑記帳」を検索してみたら ここのトップページが最初にきた。

お昼の会話

「本(『Rubyを256倍使うための本 極道編』のことです。)を出版したそうですね。」

「ええ。そうなんです。」

「写真集出したって聞いたんですけど。」

「・・・」


1月20日()

RubyUnit

良く考えたら、

ruby -w で起動してもRubyUnit側ではWarningが出ない。

ことをテストで書いておけばいいことに気づいた。

RDOC(Ruby)

CVSの最新版では

rdoc --template kilmer

として作られるHTMLファイルのスタイルの方がソースも見やすくて良さそうです。

さて、RDOCの続きです。

rdocはRD形式のドキュメント(=begin=endで 囲まれた埋め込みドキュメント)を無視します。

RDOCは1つ以上の # で始めます。

# この行は Foo クラスの説明の行です。
# この行は2行目ですが、rdocの処理結果では1行になります。
#
# 1行空けて書き始めると改行されます。

class Foo
  def initialize(val)
    ...(以下略)

とするとFooクラスの説明が

この行は Foo クラスの説明の行です。この行は2行目ですが、rdocの処理結果では1行になります。
1行空けて書き始めると改行されます。

となります。 Fooはちゃんと、rdocが出力するFoo.htmlへのリンクになっています。 素晴しい。

途中の空行の#を省略することはできません。

# この行は Foo クラスの説明の行です。
# この行は2行目ですが、rdocの処理結果では1行になります。

# 1行空けて書き始めると改行されます。

class Foo

とすると rdocは Fooの説明として

1行空けて書き始めると改行されます。

と最後の1行だけを出力します。

また、RDOCは、RDのように左端から始める必要はなく、コードのインデントと揃えて書くことができます。

module Bar
  # この行は Foo クラスの説明の行です。
  # この行は2行目ですが、rdocの処理結果では1行になります。
  #
  # 1行空けて書き始めると改行されます。

  class Foo

先頭を'#'で始めなくてはならないのは、RDと比べて面倒かも知れません。 ですが、RDの=begin=endのように左端から始める必要はありません。 コメントとコードのインデントをそろえることができます。 コードと交えて書く場合の可読性という点で インデントを揃えることができる分、RDOCの方にアドバンテージがあるように思います。

逆に純粋なドキュメントであれば、"#" を書く必要が無いRDの方が向いていると思います。 現にこのページはRDで書いてます。 RDOCを使おうとは(今のところ)思いません。


1月19日()

RubyUnit

バージョンアップ。

ruby -w

で起動したときにRubyUnit側でWarningが出ないように。 RubyUnitのテストスクリプトはruby -wで実行するようにしましょう。> 自分。

Win32OLE

dependファイルを修正しただけのヴァージョンアップ。 なので、0.3.3-01です。


1月18日(金)

ALSA(ThinkPad i1620, Vine Linux 2.1.5)

Googleのことは忘れて、 ALSAのページから

をダウンロードします。

それぞれrpmパッケージを作れるようになっているので、 パッケージを作ってインストールします。

tar Ixvf alsa-driver-0.5.12a.tar.bz2
mv alsa-driver-0.5.12a/ alsa-driver
cd alsa-driver/
./configure
cd utils
./buildrpm
rpm -ivh /usr/src/redhat/RPMS/i386/alsa-driver-0.5.12a-1.i386.rpm 
cd ..
./snddevices

tar Ixvf alsa-lib-0.5.10b.tar.bz2 
mv alsa-lib-0.5.10b alsa-lib
cd alsa-lib
./configure
cd utils
./buildrpm
rpm -ivh /usr/src/redhat/RPMS/i386/alsa-lib-0.5.10b-1.i386.rpm 

tar Ixvf alsa-utils-0.5.10.tar.bz2 
mv alsa-utils-0.5.10 alsa-utils
cd alsa-utils
./configure
cd utils
./buildrpm
rpm -ivh /usr/src/redhat/RPMS/i386/alsa-utils-0.5.10-1.i386.rpm 

あとは、/etc/conf.modules です。 (ThinkPad i1620 のサウンドチップは CS4281 です。)

# ALSA
alias char-major-116 snd
alias snd-card-0 snd-card-cs4281
alias char-major-14 soundcore
alias sound-slot-0 snd-card-0
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss
options snd snd_major=116 snd_cards_limit=1 snd_device_mode=0666 snd_device_gid=0 snd_device_uid=0
options snd-card-cs4281 snd_index=0 snd_id=CARD_0 snd_playback_bufsize=128 snd_capture_bufsize=128

手動でALSA driverをロードします。

/etc/rc.d/init.d/alsasound start

alsamixerでMuteの設定を解除して、音量も設定しておきます。

play /usr/share/sounds/phone.wav

で電話のベル音が聞こえればOKです。 あとは前と比べて安定しているかどうかが問題です。

VMWare (Vine Linux 2.1.5, Windows 2000)

ひょっとしてVMWare上のWindows2000でも音が鳴るかと思って調べてみました。 おおっ! ちゃんとVMWareのConfigurationの項目にsoundがあるじゃないですか。 (私が今まで知らなかっただけですね。) ということで

device に /dev/dsp を指定 (最初から /dev/dsp になっていた)
Start Connected にチェック

してInstallボタンを押します。 あとは、Windows2000を立ち上げて

Sound Blaster 16

のドライバを組み込めばおしまい。 (コントロールパネルからハードウェアのインストールかなんかで Windows 2000が(見事に騙されて?)自動認識します)。 Windows 標準に含まれているwavファイルなんかで音が鳴ることを確認できました。 VMWareすごいです。 (まあ、音楽などちゃんと聞けるのかどうかは、もうちょっと試してみないとわかりませんけど。)


1月17日(木)

RDOC (Ruby)

さらに続きです。

rdoc --title 'Class Browser of Foo' foo.rb

と実行するとタイトルが「Class Browser of Foo」となります。 デフォルトは、「RDoc Documentation」 です。

rdoc --fmt 

で出力フォーマッタを指定することができます。 現状でサポートしているのは、デフォルトのHTMLのみです。

もちろん、自分専用のフォーマッタmyfmtを作ることも可能です。 作成するために最低必要なことは、次の通り。

さて、問題はgenerateメソッドの中身なのですが...

MYFMTGeneratorの第2引数は、rdocのコマンドライン引数のオプションの情報が含まれた Optionsクラスのインスタンスです。 第1引数infoにはrdocがファイルをパーズした情報がすべて入っています。 何か出力する物をつくってみようということで、今回はこんなものを作ってみました。

module Generators
  class MYFMTGenerator
    def initialize
      @listed = []
    end
    def list_m(c)
      @listed.push c.full_name
      puts c.full_name
      c.each_method do |m|
        doprint=false
        print "line(#{m.token_stream.first.line_no}-#{m.token_stream.last.line_no}): "
        m.token_stream.each do |t|
          if t.text == 'def'
            doprint = true
          elsif t.text == "\n" && doprint
            break
          end
          print t.text if doprint
        end
        puts ""
      end
      c.each_classmodule do |cc|
        if !@listed.include?(cc.full_name)
          list_m(cc)
          @listed.push cc.full_name
        end
      end
    end

    def generate(info, options)
      info.each do |i|
        i.each_classmodule do |c|
          if !@listed.include?(c.full_name)
            list_m(c)
          end
        end
      end
    end
  end
end

実行するとこんな感じです。

$ rdoc --fmt myfmt foo.rb

                            foo.rb: c...
Generating MYFMT...
Foo
line(2-4): def initialize(val)
line(5-7): def method_foo1
line(8-10): def method_foo2

いや。まあ。大した意味は無いんですが...

かなりいい加減なのでバグもあるでしょう。 賢い使い方でも無いでしょう。 (第1引数のinfoの中身をまだ完全に把握してません。) まあ、フォーマッタの定義例の1つということです。

次回こそ、RDOCの書き方を調べようかと思ってます。

ALSA(Linux)

ちょっとALSAに再挑戦しようと思って Google

ThinkPad i1620 Linux alsa

と入力して検索したら、自分のページが最初に見つかった。 しかも、不安定だからアンインストールしたというものです。 うーむ。頼れるのは自分だけってことですか? (←そんなことはありません。)


1月15日(火)

RDOC (Ruby)

RDOCの書き方の前にもう少し使い方を調べてみることにします。

全く意味は無いのですが、次のようなFooを定義したfoo.rbを用意します。

class Foo
  def initialize(val)
    @val = val
  end
  def method_foo1
    puts method_foo2
  end
  def method_foo2
    @val *= 2
  end
  private :method_foo2
end

ここで、

rdoc foo.rb

と実行すると foo.rb を元にしてHTMLのドキュメントをdocディレクトリに作ってくれます。

ドキュメントからは

などがわかります。

また、メソッド単位にHTMLファイルを生成していて、 そのHTMLファイルから

などがわかるようになっています。

デフォルトでは、ドキュメントとして生成するのはpublic methodだけですが --all を指定することで、private method の情報も生成してくれます。

rdoc --all foo.rb

またドキュメントを生成するディレクトリを指定したい場合には --op を使います。

rdoc --op foodoc foo.rb

--main を指定することで、最初に表示したい内容を指定することができます。 例えば、

rdoc --main Foo foo.rb

とすれば、index.htmlをブラウザで開いたときに最初に表示されるのは、Fooクラスの情報になります。

私は、RDやRDのフォーマッタである RDtool と似たようなものかと思っていましたがちょっと違うようです。 RDOC形式のドキュメントが無くても、 それなりにドキュメントを生成してくれます。 まだアルファバージョンの段階ですが、使えるのではないでしょうか。

なお、ソースのパーザには、RDtoolが 利用しているRaccではなく、 rtags.rb, irbのruby-lex.rb ruby-token.rbをベースにしたものを使っているようです。


1月13日()

『騙し絵の檻』 (ジル・マゴーン) 読了

私には、『ホッグ連続殺人』を引き合いに出すほどの傑作とは思えません。 クリスティーは読んでないのでそれをどうこう言うつもりはありません。 でも、ブランドと肩を並べる作品とは思えないです。

どういう訳か、ストーリーがすんなり頭に入ってきませんでした。 そのために作者の企みにも、スムーズにひっかからなかったんじゃないかと思います。 期待しすぎたのかも知れません。


1月12日()

Version Up

RubyUnit と Win32OLE の両方。

RDOC (Ruby)

rdocはJavaでいうJavaDocのような、Rubyのドキュメントシステムだそうです。

まずはインストール。rdoc ディレクトリで

ruby install.rb

と実行すれば、インストールできます。インストールが終わったら

rdoc

と実行します。 これで rdoc ディレクトリに doc ディレクトリができます。 doc/index.htmlをブラウザで表示してみましょう。 w3mより、Mozzilaの方がいいでしょう。 (多分、IEとかNetscapeとかでもいいと思います。) クラスブラウザというか、Smalltalkの環境というか、なんかそんな感じの画面が出てきます。 こんなものができるとは予想してなかったので、正直びっくりしました。 (JavaDocを知ってる人は驚かないんでしょうね。) まだアルファヴァージョンですが、いい感じです。

今回は、以下の環境で確認しました。

OS: Vine Linux 2.1.5
Ruby: 1.7.2 (2002-01-10)
Mozzila 0.9.6

cvs checkoutしたので、引き続きcvs updateで追いかけることにしました。

rdocで何ができるのか感じはつかめたので、次回はRDOCの書き方を調べてみます。


1月11日(金)

w3m

いつの間にか0.2.4がリリースされていました。 0.2.2と0.2.3には気付きませんでした。 今日まで

w3m -v

で表示されていたのは、

0.2.1-inu-1.4-img-1.11

です。 「なんだ、そのヴァージョンは? cvs updateすることにしたんじゃなかったのか!?」 というツッコミもあることでしょう。 正確には、そのツッコミは正しくありません。

cvs update -d -P

としていました。 そうですね。すいません。何の言い訳にもなっていません。 0.2.2と0.2.3はあきらめ、ついでに0.2.4もスキップして、ヴァージョンは

0.2.4+cvs-1.207

と表示するようにしました。

それから、イメージのインライン表示機能は、ほとんど使わないので インライン表示のためのパッチをあてることはやめにしました。

『燃える地の果てに』(逢坂剛) 読了

最後まで、『ミラマル』の正体には気づきませんでした。 作者が作者なだけに、 私なりに注意しながら『ミラマル』の正体をあれこれ考えながら、読んでいたのですが、 正体は、見破れませんでした。 もう一つの仕掛けの方も、わかってから もう一度読み返してみるとちゃんと伏線が張ってあるのがわかります。 さすがです。

予約制の効果

待ち時間は少なくなりました。

今日買った本

立ち読みですませた本

買おうかと思ってやめた本

買おうかと思って一瞬レジへ持っていこうとしたが、結局買わずに立ち読みした本

見つけられなかった本


1月8日(火)

ウィルス, VMWare, Samba

正月ボケです。アホです。 ゲストOS(Windows 2000)からSambaでホストOS側をマウントしてれば、 ホストOS側も被害にあうことに気づきました。 (←みんなそんなことには、最初から気づいてます。)

ええ。お察しのとおりです。 つい、いつもの癖で

  1. Samba起動

  2. VMWare起動

  3. Windows 2000起動

としてました。 もちろん、Sambaは一例に過ぎず、 何らかの形で、ゲストOSからホストOSが見えると、まずいことはあるでしょう。 そこで、昨日の疑問は、

ゲストOSからはホストOSを見えない状態にした上で、 VMWareを越えてホストOSであるLinuxまで 破壊するようなゲストOS上のウィルスは存在するか?

ということになります。

Ruby

1.7 (1.8)では、STR2CSTRはobsolete APIなんだそうです。


1月7日(月)

CD-R, CD-RW (Vine Linux 2.1.5, Kernel 2.2.18-0vl4.2)

昨日の

ln -s /dev/sr0 cdrom

ln -s /dev/scd0 cdrom

とするという記述も見かけたのだけど、本来はどっちを使うべき? /etc/conf.modules で alias scd0 sr_mod としてるから /dev/scd0でも良いと理解すればよい? (←誰に聞いてるんですか。←もう少し勉強しましょう。)

それからCD-ROMのmountの件は、他人には意味不明だったので、 /etc/fstab の記述を追記。

gcombustを使うのはあきらめます。GUI難しいです。 どこへ何を入力すればいいのか、全くわかりません。

RubyUnit

とりあえず、この問題は解決した。 が、ruby-listで教えてもらった方法([ruby-list:33184])で 回避する新しいバージョンを近いうちにリリースする予定。

Bitmap & Excel(マネしないでね。)

のファイルが添付されているらしきメールを受信する。 ウィルスなのかどうか、はっきりしない。 だが、VMWare の Windows 2000には、ウィルスチェッカをインストールしていない。 Linux 側からは、VMWare上のWindows 2000は単なるファイルとして見える。 そこでWindows 2000 用に作っているディレクトリをまるごと、Linux側で

cp -rp win2000 win2000sv

とする。(Windows 2000まるごとバックアップですな。)

その後VMWareから Windows 2000を起動して思いきって添付ファイルを開いてみた。 Bitmapは普通のファイルっぽかったが、Excelは開けなかった。 (←結局ウィルスかどうかわからんじゃないか。)

あとは、

rm -rf win2000
mv win2000sv win2000

としておく。(Windows 2000まるごとリストアですな。)

VMWareを越えてホストOSであるLinuxまで破壊するようなゲストOS上のウィルスってあるんだろうか。 (という一沫の不安があるので、私は責任を持てません。皆さん、絶対マネしないように。)


1月6日()

CD-R, CD-RW (Vine Linux 2.1.5, Kernel 2.2.18-0vl4.2)

ThinkPad i1620 + ウルトラベースX2 で CD-R, CD-RWが使えたので、設定メモ。

CD-RW書き込み用ソフトcdrecordをインストール。

VinePlusのcdrecord-1.9-0vl3.i386.rpmをダウンロードして

rpm -Uvh cdrecord-1.9-0vl3.i386.rpm

と実行。

ウルトラベースX2のCD-RWは、普通のIDE(ATAPI)接続なので、CD-RWを利用するために SCSIとして認識させる。

  1. /etc/lilo.conf の変更

    /dev/hdc が CD-RWなので、hdcはSCSIとして認識させるために/etc/lilo.confを修正。 (私の環境では、元々、append="apm=on" だったので hdc=ide-scsi を追加した。 必要なのは、hdc=ide-scsiだけ。)

    append="apm=on hdc=ide-scsi"
    
  2. /sbin/lilo

  3. /etc/conf.modules に追加

    # ATAPI CD-RW
    alias scsi_hostadapter ide-scsi
    alias block-major-11 ide-scsi
    options ide-cd ignore=hdc
    alias scd0 sr_mod
    pre-install sg  modprobe ide-scsi
    pre-install sr_mod modprobe ide-scsi
    
  4. /etc/rc.d/rc.local に追加

    modprobe ide-scsi
    
  5. 再起動

  6. dmesg を実行して次のような行が表示されればOK。

    scsi0 : SCSI host adapter emulation for IDE ATAPI devices
    scsi : 1 host.
      Vendor: MATSHITA  Model: UJDA310           Rev: 3.53
      Type:   CD-ROM                             ANSI SCSI revision: 02
    Detected scsi CD-ROM sr0 at scsi0, channel 0, id 0, lun 0
    sr0: scsi3-mmc drive: 20x/20x writer cd/rw xa/form2 cdda tray
    
  7. cdrecord -scanbus でも認識できるかどうか確認しておく。

CD-RWに書き込む

  1. 書き込みたいファイルを一時作業領域(/tmp/work)にコピー

    ここでは、dir-to-writeディレクトリをまるごとCD-RWに書き込みたいとする。

    mkdir /tmp/work
    cp -rp dir-to-write /tmp/work
    
  2. ISO9660のイメージファイルを作成。

    mkhybrid -r -J -o /tmp/cd.iso /tmp/work
    
  3. (別にやらなくてもいいけど、) cd.isoの中身は、mount すれば確認できる。

    mkdir /mnt/cdiso
    mount -o loop /tmp/cd.iso /mnt/cdiso
    
  4. CD-RWへ書き込む

    cdrecord dev=0,0 speed=2 -v /tmp/cd.iso
    
  5. CD-RWの内容を消す

    cdrecord dev=0,0 -v blank=fast
    

CD-RWの内容を確認する

  1. /dev/cdrom のシンボリックリンクを変更する。

    cd /dev
    rm cdrom
    ln -s /dev/scd0 cdrom
    
  2. CDROM としてmountする。

    /etc/fstabに

    /dev/cdrom             /mnt/cdrom              iso9660 noauto,owner,ro 0 0
    

    と書いてあるので mount /mnt/cdromで良い。

WebのCD-RWに関する情報に感謝。それが無ければ私には設定できなかったでしょう。

VinePlusのxcdroast もインストールしてみたのだけど、何か設定が足りないのか、 起動するといきなりXごと落ちてしまう。 代わりにgcombustなら使えるかも。 コンパイルして起動してみただけだが、Xは落ちなかった。 (実際の書き込みはしてません。)

もっとも、フロントエンドツールは使わないで、 自分専用のスクリプトを作って間に合わせてしまいそうな気がする。 (フロントエンドツールはどこに何を入力すれば良いのかよくわからない。) バックアップで使うにはその程度で十分。


1月5日()

はがき宛名印刷 (Vine Linux 2.1.5)

いろいろ調べているうちに honeybeeさん経由で はがき宛名印刷を 見つけたのでインストール。印刷用psファイルができることを確認(←多分、使わないだろうけど)。

honeybeeさんのところでは 他にもいろいろ「Linuxで年賀状」関連情報(?)が入手できます。

RubyUnit

エラーが発生するというので、調査。 エラーになるというサンプルスクリプトをあったのだが再現できず。 相手の環境を詳しく知るため

ruby -v

の結果を送ってもらうことにした。


1月4日(金)

仕事始め

だったが、休暇の人が多く、閑散としていた。

日経コンピュータ(2002.1.7 号)

「がんばれ日本 - 2002年日本のITを変える50人」の中に Rubyの作者としてまつもとさんが登場していた。

『しあわせの書』

ありがとうございます。 やはり、マジックの道具として 使うという話だったんですね。 確かにこの本でないとマジックはできません。 (もうちょっと突込んだ内容を書こうかと思ったのですが、 下手に書くとネタがバレてしまいそうな気がするのでやめます。)

JUnit

使ってないですが、 junit.extensions packageの中の TestSetupクラスを使えば、1回だけのsetUpと1回だけのtearDownができます。 擬似コードだとこんな感じです。

public class MyTestCase extends TestCase {
  ...
}
public class MyTestSetup extends TestSetup {
    public void setUp() {
      /* only once setUp */
    }
    public void tearDown() {
      /* only once tearDown */
    }
}
TestSuite suite = new TestSuite(MyTestCase);
MyTestSetup mytest = new MyTestSetup(suite);
TestRunner.run(mytest);

私はこの方法は好きじゃないです。 MyTestCase と MyTestSetup で情報を共有できないからです。


1月3日(木)

TeX, ghostscript, gv, LANG=ja (Vine Linux 2.1.5)

ふと、Linuxで年賀状を作るのに、 みんなどうやって作っているのだろうと思い、調べてみた。 ふーむ。TeXを使うというのが王道みたいだ。 (←年賀状だけは、Windowsという人も多いみたい。) 試しに自分の環境で動くかと思って、

\documentstyle{jarticle}
\begin{document}
日本語のテスト
This is English.
\end{document}

という内容のtest.texファイルを作って、

platex test.tex
xdvi test.dvi

とやると、それなりに表示された。 ここまでは、良かったのだが、

dvips test.dvi
gv test.ps

とやると文字化けした。

gs test.ps

とやっても日本語が化けた。 原因がわからなくて、あれこれ調べていたら、

Vine Linux で、2.1から2.1.5にアップグレードした場合にxdviがおかしくなることがある。
TTF-alias-1.0-1をインストールしなおすと直る。

というのを見つけたので、もしかして、gv, gs でも効果あるかと思い

rpm -e TTF-alias-1.0-1
rpm -i TTF-alias-1.0-1.noarch.rpm

してみたけど変化なし。

さらに調べてみたら、

LANG=ja

でないと文字化けするというのを見つけた。結局、これが原因だった。 ここまで、たどり着くのにえらく時間がかかってしまった。 (/usr/share/ghostscript/5.50/vflib/kconfig-basic.ps などのファイルもいじったりして回り道をしていた。)

ということで、やっと、(知らない間に)TeXが使える環境が整っているらしいことが判明したのだが、 以前、tgifでも似たような問題で悩んだことがあったと思う。 年が明けたのに進歩してない。


1月1日(火)

screen 3.9.10 on Cygwin

やっぱり、いい加減なパッチは、 単にコンパイルを通すだけのいい加減なものなのだった。 detach や attach がまともに動かない。

Telnet daemon of Cygwin

なるほど。 mount -sが必要だったんですね。 ありがとうございます。

しあわせの書

うー。知らんかった。テレビ見逃した。 特番でどういう風に『しあわせの書』が取り上げられた のかすっごく気になってます。 どなたか特番をご覧になった方は、 こっそりメールで教えてください。

ちなみに泡坂妻夫は好きな作家なので、ちゃんとこの本が最初に出版されたときに読んでます。 残念ながら、本自体は、どっか行っちゃって手元にはありません。

えーと、番組がどれか、明記されてませんが、 『しあわせの書』と「大晦日のテレビ朝日の特番」と12月31日の新聞の番組表から考えて、 「ビートたけしの世界はこうしてダマされた!?...」だと決めてかかってます。

インパク

あっ。昨日で終わったんだな。


[トップページへ] [12月] [2月] [過去の雑感へ]