depressionist in depressive mood

[prev|next|index]2002:16

[prev|next]20020415Mo

データベースのテーブル仕様書を XML で書いてみることにした。 で XSLT で HTML と SQL に変換するのである。 とはいえ、CREATE TABLE の SQL って方言が多すぎるね。 結局当面必要なコードを吐き出す程度に DTD を作成。

XML と DTD ができたところで IE 5.5 でチェック。 うまくパーズしてくれているようである。

つぎにテーブル仕様書用の XSL を書く。 IE 5 だと新しいバージョンのパーザをインストールしなければならない。 けどどっからとってくればいいのかわからなかったので、 別マシンにインストールしてある IE 6 に読みこませてみる。 期待通り表示できない。

いちおう NN 6.2 ではうまくトランスフォームできるようなので、 こっちをつかって表示を調整する。 これもまた試行錯誤。 手元のちょっと古い XML の解説書など見ながら書くが、 どうもその例がこちらが求めているものとかなりずれている様子。 というかサンプルがシンプル過ぎる。 結局ネットの解説記事を読み漁って解決した。

で、IE で表示できないのも悔しいので、 今度はネットの解説どおりにやってみるとちゃんと表示されるではないか。 なので今度は表示されるファイルをもとに先ほど作った XSL を手打ちでコピーしていくと、 IE でもまともに表示されるのである。 さすがである。

もうひとつ不思議なことが会った。 XSL に <xsl:output method="html" encoding="Shift_JIS"/> を指定すると、IE で文字化けするのである。 すばらしい。 さすが IE って感じ。 拍手を持って迎えたい。 結局これは変換後の HTML に <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> を出力するようにすることで表示できるようになった。

[prev|next]20020416Tu

今日は午前中に出席しなければならない説明会があるので定時に出勤。 ものすごく眠い。

昨日作った XML と XSL 、 表示できるのが IE のバージョンに依存するというのが気にいらない。 名前を付けて保存すれば HTML がゲットできるかと思ったがそれもかなわず。

きっと Java のオープンソースのライブラリにあるに違いないと思い検索してみたら、 Xalan がひっかかった。Apache Jakarta プロジェクトの成果のひとつである。 ダウンロードして Quick Start とか読んでみると、 単純に変換するだけなら何も手間はいらず、 XML と XSL を指定して起動するだけである。 というか、今の自分の知識レベルではそれ以上の事をする目的が想像できない。 逆にいうと何をしようというのだこのライブラリは。

[prev|next]20020417We

昨日無理してあさいちで出かけたせいか、 今日は目はさめるどもからだが動かず。 朝風呂につかってからだと脳みその筋肉をほぐしてぎりぎり間に合う。

会社にたどり着いてみると、 本社の方から緊急に召集がかかっていた。 先週末に所属部署で交通事故を起こした人がいたらしく、 それへの対策である。 それへというより、 幹部連中への対策か。 もともとこういうことにはうるさい会社であったが、 さらにうっとーしくなった感じ。 もっとも昨年末に連続して 3 件の交通事故を同じ部の人間が起こしてしまったために、 上層部が敏感になっているのである。 1 月からは車での通勤を 3 ヶ月自粛しろというお達しもあった。 それがあけてすぐにの事故であるから何もいわれない方がおかしい。

といっても今回の事故は、うわさによると同情の余地がおおいにある。 止まろうとしていたところに飛び出してきたばあさんが あわててひっくり返って頭を打ったということらしい。 ただし、接触したかどうかは聞き及んでいない。 内容を吟味しないでうわべばかりで評価を下そうとすると、 そのうちごまかそうとする人が出てくると思うんだけどなあ。

それよりもっと特筆すべきは、社長の言。 今回の事故は有給休暇中におこしちまったのであるが、 それに対して社長から管理職にありがたいお言葉がくだったそうである。

有給とって遊んでて事故を起こすくらいならもっと働かせろ。

どうやら稼働率が他の部署より低いのが前々からお気に召さなかったご様子。 有給休暇の多いやつと交通事故の相関関係を調べるという名目で、 過去一年間で有給休暇が多かったやつらの行使理由を詳細に報告しろという命令が下った模様。 有給休暇って労働者の権利じゃなかったのか? そりゃ業務に著しくさしさわりのあるようなときにとったのならともかく、 あまねく理由を問うとは。 有給とって文句いわれるのって経営の厳しい零細企業とか中小企業とかばかりかと思ってた。 というかプライバシーの侵害でもある。 今はだいぶ回復しているからよかったけど、 去年の状態でこんなこと聞かれてたら抑うつの症状が悪化していただろう。 逆にいえばこうやって憤っていられるのは鬱があけたしるしだ。 気づかせてくれてありがとう、社長。 いまだに名前覚えてないけど。

一時ファイルを削除する

/tmp とかに一時的にファイルを作成しているのだが、 どうも消さないのでどんどんたまるばかり。 仕方がないので find をつかって 不要なファイルを削除するシェルスクリプトを書いた。 不要なファイルとはテンポラリディレクトリのファイルや、 その他のディレクトリのバックアップファイルなどである。 念のため 1 週間以上前のファイルに限って削除するようにしておく。 これを Windows のスケジューラーに登録すれば、 定期的に自動的にクリアしてくれるという寸法である。

ところでなぜか find がファイルを認識しないというときがある。 最初は漢字のファイル名、ディレクトリ名をつかってるやつかと思ったらそうでもない。 たとえば find /c/archives -mtime +7 とかやると、 find: /c/archives/documents/java no such file or directory とかいってきやがる。 だいいち find が見つけたファイルなのに見つからないとはどういう了見なのだ。 この /c/archives/documents/java ディレクトリを、 別のサブディレクトリに移動してやるとちゃんと見つけちゃったりするんだなこれが。 で、もとの場所に戻すとだめ。 ディレクトリ名を変えてもだめ。 どうしても条件がわからない。 とりあえず find のソースをゲットして GDB で追っかけてみたが、 lstat でファイルの情報を読みこむところでエラーになっている様子なのである。 cygwin のソースも読んでみたが、 これはどこに lstat のコードがあるのか見つけられなかった。 深追いするほど時間がないので仕方なくあきらめることにした。

[prev|next]20020418Th

Xalan をつかって変換する Swing アプリケーションを作ってみた。 単なる変換だけならたったの 3 ステップくらいでできてしまう。 最初は JBuilder で GUI だけでも設計しようかと思ったが、 たいしたプログラムでもないので、 JDE モードで手打ちすることにした。 というか JBuilder って 勝手にいろんなファイルやディレクトリを掘ってくれるのでうっとおしくてかなわない。 もっとも GUI の基本的なところはどれも似たようなものなので、 以前作ったプログラムからカットアンドペーストである。

しかし妙なことに JEditorPane のコンテンツタイプを text/html にしても XSLT が吐き出したコードを認識しないんでやんの。 JEditorPane がサポートしているのは確か HTML 3.2 相当のはずなので、 XHTML を認識しないのももっともであるが。 画面真っ白になるのは何とかしてもらいたいものだね。

[prev|next]20020419Fr

昨日作った アプリケーションを JAR にまとめて、 それを実行可能 JAR にすることにした。

テキストファイルに Class-Path: MainClassName と書く。このときセミコロンの後ろの空白は必要である。 また行の最後に必ず改行をいれておくこと。 これをマニフェストファイルと呼ぶ。 さすればおもむろに、

> jar cmf MANIFEST-FILE JAR-FILE.jar CLASS-FILES

とすればあら不思議、Windows ではダブルクリックするだけで、 ほら、起動できない。あれ?

どうやら実行可能 JAR ファイルは使用するクラスライブラリ、 すなわち JAR ファイルのリストをマニフェストファイルに書いておかなければならないらしい。 相対パスで。 これが UNIX ならシンボリックリンクでも張ればいいんだろうけど、 Windows ではどうしようもない。

バッチファイルを書くという手もあるが、 DOS 窓がちらつくのも目ざわりというかなんというか。 そこで単に Java を起動するだけの Windows アプリケーションを作ることにした。 ネットで探してみたが、あまり適当なものがなかったからである。 しかしいまさら VC つかうのもなんだな、 実行プログラム名を取り出すのも面倒だし。 と思っていたら、 よく考えてみると GCC に -mwindows オプション指定すれば、 あら不思議、ほおら Windows アプリケーションにができあがりってな寸法である。 以下は同じディレクトリにある同じ名前の JAR ファイルを実行するプログラム。

#include <strings.h>
#include <limits.h>
#include <process.h>

#ifndef JAVA
#define JAVA "javaw"
#endif
#ifndef MAINCLASS
#define MAINCLASS "MainClass"
#endif

int main (int ac, char **av)
{
  char jar[PATH_MAX + 1];
  char *extp;
  strcpy (jar, av[0]);
  extp = strrchr (jar, '.');
  if (extp != 0 && extp > strrchr (jar, '\\'))
    *extp = '\0';
  strcat (jar, ".jar");
  execlp (JAVA, JAVA, "-classpath", jar, MAINCLASS, 0);
  return 1;
}

で、コンパイルするときは次のごとし。 コンパイルするとき -mno-cygwin を指定しないと、 0 番目の引数のパスが POSIX パス形式になってしまうので注意。

> gcc -mno-cygwin -mwindows launch.cc -o launch

で、せっかくだからレジストリから JRE の場所を探し出して そちらの Java を実行するように変更してみたところ、 なぜか動かなくなってしまった。 クラスが見つからないというエラーダイアログが出るばかりである。 あれこれ試行錯誤しているうちに、 ふと javaw を起動するのではなく java で起動するようにしてみたら、 なんと

Exception in thread "main" java.lang.NoClassDefFoundError:
Files\JavaSoft\JRE\1/3/0_01\bin\java

すなわちクラスが見つからないというエラーがでてきた。 おいおい、せっかく execlp で引数を分割しているのに、 空白があるとさらに分割してしまうのか。 というか、きっと内部的にコマンドラインの形に連結して起動しているのであろう。

しかたがないので実行ファイル名をダブルクォートでくくってみたが、 今度は Java が起動しない。 もしやと思って execlp の第 2 引数だけくくるようにしてみたところこれが正解であった。 念のため JAR ファイルのパスもくくるようにしておいた。 先ほどのコード例では strcat 以降の 2 行を次のように変えれば OK だろう。

  char classpath[PATH_MAX + 3];
  sprintf (classpath, "\"%s.jar\"", jar);
  execlp (JAVA, JAVA, "-classpath", classpath, MAINCLASS, 0);

さて、今度はパッケージをビルドするのに Ant 用の build.xml を書く。 src ディレクトリ以下のソースをコンパイルして build ディレクトリに出力。 .xsl ファイルとかも build ディレクトリにコピー。 build 以下を Jar でまとめて dist ディレクトリのアプリケーション名とバージョン名を組み合わせた名前の配布用ディレクトリに出力。 ソースコードも配布用ディレクトリにコピーして、 この配布用ディレクトリを Zip でまとめて一丁あがりである。

無事成功かと思ったらまたピットフォールに落ちてしまった。 ランチャーをコンパイルするときに Java プログラム名と、 メインクラス名をコンパイル引数でわたそうと思ったら、 ダブルクォートがわたらないのである。 いろいろと試行錯誤してみたがだめである。 どうもシェルを起動するときに何かやっているのではないかと思うのだが。 ここは素直に Makefile を書いたほうがよいのだろうか。

ああ今日も終電になってしまった。 まいった金曜日か、また酔っ払いばかりだよ。

[prev|next]20020420Sa

今日はめずらしく目覚めがよい。 6 月に来る芝居のチケットが今日発売開始だったので、 予約を入れようかと思い受付開始時間をネットで調べ 9:30am からであることを確認。 まだしばらく時間があるかと思いネットなど散策しているうちに時間になる。 が、なんとなく気がのらない。 この芝居は平日の夜なので、そんなに慌てなくてもいいかという気になってくる。 それに電話ってなかなかつながらないもんな。

今日は外に出る用事があったのでそのときついでに、 劇場までいって買うことにする。 そのほうが座席の位置とかがわかっていいだろう。 で、 11am くらいにのこのこいったらもうほとんど完売状態であった。 もっとも 2 日間しかやらないから当たり前か。 それでも 2 階席の中央寄りを取ることができた。 1 階席の端っこで見るくらいなら 2 階の方がよろしい。

そのあと普段はいきつけない本屋にふらりとよって新刊書などを物色してみる。 結構面白そうなのがあるが、なんとなく買う気が起きなかった。 ちょこちょことつまみ読んでみて、 図書館にあったら借りることにする。 とりあえず雑誌数冊を買って出る。

そうそう車の定期点検の時期がだいぶ過ぎてしまっていたのでそこから予約を入れておく。 来週の土曜日 2 時。

そこから電気屋へおもむき先月修理に出しておいたカメラを引き取りに。 ついでにビデオテープのストックを購入。 ノートパソコンのバッテリの持ちが悪くなってきていたので、 在庫があれば買おうかとも思ったがいつのまにか展示されていなくなってしまっていた。 それで意気消沈したか、 家を出る前にはスキャナを買おうと思っていたのに、 現物を目の前にするとなンか気に入らない。 もっとも部屋を片付けて置き場を確保しなければつかいようがないのも確か。 この間ぐっときたエプソンの顔料インクのインクジェットプリンタが値下げされていた。 今度来たときにまだ展示されていたら買っちゃおうかな。 という程度にしか食指は動かず。

DVD のコーナーを冷やかしてみると、 だいぶ安いソフトが出てきて感心する。 あれやこれや買っておきたいのがあるが、 結局キー・ラーゴだけ。 ポイントがたまっていたのでポイントだけで買えた。 ああ、なんとカサブランカの DVD が値下げになっている。 ハリウッド価格だそうだ。 そういえば 3 つ数えろはもう買ってあったっけか。 DVD もあちこちに積み重ねているので何を買ったかもう把握できなくなっている。 精神疾患の症状として部屋の片づけができない、 やる気がないというのがあるそうだが、 それは正解だと思う。

朝方はいい天気だったので久しぶりに車を洗おうかと思ったら、 なんだか雲行きが怪しくなってきた。 念のために天気予報を見てみると夕方から明日にかけて雨が降る様子。 それを知ってどっと気がめいってしまった。 もしかして、 朝からなんか意気が上がらないのは低気圧が近づいていたせいか?

家に戻り今週分の日記などつけながら、 昨日の execlp の不信な挙動をノートパソコンの方で確認しようとしたら再現されず。 そういえばノートパソコンの方は、 Win98SE に Cygwin 1.3.9 、 デスクトップは WinNT に Cygwin 1.3.10 である。 この違いだろうか。 でも mingw, mingw-runtime は同じバージョンなんだよな。 となると 98 と NT の違いか。 ああ、どんどん鬱になっていく。

[prev|next]20020421Su

昨夜はだらだらと酒を呑みつづけ、 目がさめたのは 11:30am である。 そして 2 度寝。 もう完全に鬱状態。

何とか起きだし、 ネットにつないで定期的に閲覧しているサイトなどを見るも、 やはり気分が沈んでいる。 今まで避けていた Flash サイトなどに気分転換でアクセスしてみる。 これは目新しかったせいか、リンクなどたどってしばしうろうろする。 しかしいまだに ISDN 環境なのでロードにかかる待ち時間ばかりが長い。 だんだん待つのがいやになってきた。 こりにこったのとか、 発想が面白いのとかいろいろあって楽しいのだけれど、 今日はもうやめておく。

どうもうちのデスクトップでタイプしていると、 ついつい Dvorak 配列のキーを押してしまう。 もう 10 年近くこの配列でやっているのでからだが自然に反応してしまうのだな。 ノートパソコンも Dvorak 配列にしている。 会社でつかっているパソコンは QWERTY のまま。 習慣というのは面白いもので、案外混乱しないもの。 会社のパソコンの横にノートパソコンを置いて、 デスクトップつかったりノートパソコンつかったりしても、 そのパソコンのキーボードに手を置くと自然にその配列で指が動く。

ふとうちのデスクトップのキーボードの設定を見てみると、 Dvorak というのがあるではないか。 おやおや標準でつくようになりましたか。 以前はリソースをいじってシステムにインストールしていたものだ。 それに気づかなかったのだが Roman 環境で選択したキーボード配列が、 日本語 IM に切り替えても有効になっていたのですな。 いままでずっと VJE をつかっていたけど、 日本語環境用のリソースも作ってやらないと切り替わらなかったような気がする。 VJE、 なんかしてたのか?

ただ、システム標準の IM で困ったのはカスタマイズのやり方がわからない点だ。 Dvorak 配列にすると 「かきくけこ」 が非常に入力しにくいのである。 「k」のキーが「v」の位置にある。 なので 「かきくけこ」 を 「ca ci cu ce co」 で入力できるようにしたい。 「c」のキーは「i」の位置にあるのだ。 標準の状態だと「かしきゅせこ」になってしまう。 このキーだけ変更できれば、 母音の「a o e u i」は左手の中段の位置に集まっており、 子音は右手がわに集まって日本語のタイピングが大変楽になるのである。 「p」が「r」の位置にあるのは目をつむることにする。 そういうカスタマイズができる IM を買わねばならぬか。

それに致命的な欠点が。JIS キーボードでは「`」 (一般的な読み: back quote; left quote; left single quote; open quote; grave. ANSI/CCITT 規格の読み: grave accent. めずらしい読み: backprime; backspark; unapostrophe; birk; blugle; back tick; back glitch; push; opening single quotation mark; quasiquote) と「~」 (ANSI/CCITT 規格の読み: tilde. 一般的な読み: squiggle; twiddle; not. めずらしい読み: approx; wiggle; swung dash; enyay; sqiggle.) が入力できない。 ほかにもファンクションキーのいくつかがずれてたり。 今まで US キーボードしかつかっていなかったので、 こういう落とし穴があるとは知らなかった。

やはり US キーボードを購入すべきかと思い、 オンラインストアでカートにいれるところまでいったが、 なんとなくそのあとの情報の入力が面倒くさくなったのでやめてしまった。

FTP できない

ノートパソコンの方でダウンロードしたファイルをデスクトップ側に転送しようとしてまたはまる。 なぜかノートからデスクトップに FTP でログインしようとすると アクセスを拒否されてしまう。 数ヶ月前にはうまく接続できていた気がするのだが。 ネットで検索したり、 ssh で接続しようとしたりしてもぜんぜんだめ。 結局ノートパソコンの方を Web 共有にして、 デスクトップから Wget することでなんとか転送することができた。