2000年11月
通り過ぎる人
様々な人が私の前を通り過ぎた
様々な人の前を私は通り過ぎた
人の前を歩き、人の横に添い、
人の後ろに付き従い
そして・・・・
11月01日
  • かくして今年もあと2ヶ月。今世紀もあと2ヶ月
  • 試しにRSコンポーネンツでオンラインで部品手配をしてみる。 私の場合、Netscapeでは画像OFFにしていることが多いので、 IE(5.0)を使って手元のカタログを睨みながらあれやこれやとかき集めて、 注文書作成して、とりあえず手元の控えとして画面をプリントアウト・・ とやったとたんにIEがズッコケて作業が全部チャラ。 気を取り直してもう一回やってみたが、またしても駄目。 業を煮やしてNNでやりなおして無事送信。
  • 確認メールが来ないなと思っていたら電話。 AtmelのシリアルROMが入手できないとのこと。 まぁ、代替えもあるのだけどとりあえず用は足りているのでまぁいいやということで、 シリアルROMはキャンセルして、残りを発送してもらうことに。 明日にでも到着だろう。
  • 表紙の模様替え。何となくWord2000で面白半分に作っていた物なのだけど、 この際もったいないので、試しにアップしてみる。 IEとNNの表示の違いやら何やらにさんざん悩まされるし、 こんな下らないレイアウトなのに、吐き出された膨大なソースに呆れるよりない。 とりあえずワードアートなどで生成されたgifファイルだけ使って、 htmlは手書きした方がよほどマシという感じである。 じきに書き直すことにしよう。
  • 机の上が大々的に変わって、机の上に置いたちゃぶ台の上にCRT、 ちゃぶ台の下は本が並ぶ格好になった。やっぱり目の前に本がある方が何かと便利である。 パッと見て置いてあるとやはりちょっと手にして読む気にもなれるし、 何より足下に本が散乱しないのが有り難い。
11月02日
  • 部品到着ちょっとお釣りがなかったりして、2回ほど往復してもらってしまった。 どんな風に梱包されてくるのかと思ったら、普通のクッション(いわゆるプチプチ) 付きの封筒である。開封してみると、 中から静電防止袋の小さいのに個別包装された部品がちょこまかと登場。 IC類の足が曲がらないような工夫はどうするのかと思ったら、 専用のプラスチックの枠に収まっている。これが本当のスケルトン。
    そういうサービスなのだから当たり前のことではあるのだが、 実際にオンラインでちょっと書いて送信しただけで、 家から一歩も出ずに翌日には部品が手に入るというのは、 何とも不思議な感覚である。
  • ちょっと手がけはじめた原稿で、 半導体そのもののごく基礎的なところを少しおさらいしておいたほうが先に進みやすいので、 古本屋に行ってちょっと半導体デバイス関連の基礎本を買う。 いささか古いので、新しい話しは何も出ていないけれど、 考え方自体はそれほど画期的に変わっているわけでもない。 恒例の、exp(kT/e)などという式がコチャコチャと最初の方には出てくるのである。 このあたり、丸暗記でもいいのだけど、何が起きるのかちょっと考えてみるのも 面白そうな感じもする。
  • ついでに、ネットで見つけた半導体関係の本もオンライン注文してみる。 出版社に直接で、代引き手数料300円とのこと。 本屋に注文すれば、確実に3週間程度は待たされるわけだけど、このダイレクト注文ではどうなるか。
11月03日
  • 昨日注文した本が「在庫切れです」との連絡。まぁ、本屋だったらこういう連絡だけで、 数日は当たり前だから、素早いと言えるか。
  • Word2000で作った表紙だが、あまりにもあまりにも・・なので頭に来て改装することにした。 もう、ジェネレータなんかに頼らない!HTML直叩きしてやる!と。
    とりあえずJavaScriptは一度使ってみたかったので、日付テロップを入れて、 更に位置決めはTableで。 マウスカーソルが来るとヘコッと色が変わるあたりも面白いと思っていたのだが、 JavaScript本にサンプルが出ていたので、チョロッと拝借して配置。
    非常にシンプルだけど、それなりに扱いやすくなったような気はする。
11月04日
  • 何となくうまく動いてしまうと、いろいろやってみたくなる物である。 JavaScript本を眺めてから、昔買ったJava本を眺めたら、サンプルが良く似ている。 何だかなぁ・・と思ったら筆者が同じ。で、改めて読み直してみると、 Java本のサンプルの多くはJavaScriptでも同じように(しかもずっと簡単に) 書くことができる。大きく違うのはグラフィック位か。
  • 調子に乗ってPerlも眺めてみる。 相変わらずa2p(awkからperlへの変換ツール)を利用して、 慣れ親しんだawkスクリプトがperlではどうなるかを眺めながらの勉強である。 基本的にawkの方が用途限定だけに、 あまり考えずにいろいろとサービスしてくれてしまっているところも多くて便利ではある。
  • 改めて「金を掛けると、それだけで安心してしまうからなるべく金を掛けない」 というのが、なるほど何事に付けても大事なのかも知れないと思えてくる。 まぁ、とりあえずとっかかりはこれでできてきたので、少しずついろいろ勉強していくことにしよう。
11月05日
  • 原稿書きながら、少しJavaScriptとJava、Perl眺め。
  • 図版をWordで作成。テキストボックスの中で図を描く方法がなかなか思い出せず、 四苦八苦。やっと再発見したのが、「挿入」->「オブジェクト」で「ワード図」 を選べば良いということ。 あとはグリッドが「図形の調整」に行ってしまっているのも何とか発掘。
    道具はそれを使って何かをするものであって、道具を使うことが目的ではないという、 最低限の約束事も分からない会社には何を言っても無駄だということが分かっていても、 やっぱり不愉快なソフトである。
11月06日
  • FrontPageExpressならIEのオマケの筈ということで、ちょっと探してみる。 Office2000にもIE5が入ってきた筈なので、見て行くとアプリケーションの追加と削除で、 IEのオマケとしてインストールすれば良いとのこと。 まぁ物は試しとインストールしようと思ったらCドライブの残りが心許ないので、 当座使う予定のないMAX+PLUSIIの9.01(PLD WORLDの福引きで当てた製品版) をアンインストール。約300MB空きができた。
  • FrontPageに、今のトップページのソースを読ませたら、表の表示がおかしい。 (見て分かるとおり、Tableで配置を決めている) どうも、コメントのタグを誤解されている。試しにNetscapeComposer で読ませたら、今度はコメントだけを固めて別のブロックにされてしまった。 まぁ、所詮こんなものか。
  • ノートPCのバッテリがおかしい。バッテリーアラームが出たので、 AC入力にすると、すぐにバッテリがフル充電されたとの表示。 ACコードを抜くとすぐまたアラーム。 バッテリを抜いて電圧を見ると殆ど電圧が出ず、ほぼ放電しきっている感じである。 一瞬中でセルがショートしたか、保護ヒューズでも飛んだかと思ったのだが、 こういうときはもう一度試してみる物だと思い、バッテリ再装着。 ACコードを繋ぐと、LEDは「バッテリ充電中」表示になった。 このまま放置すること数時間。フル充電表示に切り替わったので、 ACコードを抜く。以前のようにいきなりアラームが出ることもなく稼働。 結局ただの接触不良だったのだろうか?バッテリ監視用らしき端子が付いているので、 きっとここが悪かったのだろう。
11月07日
  • 今書いている原稿向けに作ったサンプルプログラムはDOS窓なり、 MS-DOS上から動かす、極めてCUIなプログラムである。
    たまにはそろそろ窓の一つも開いて動かしてみたくなってくるのだが、 やっぱり「面倒くさいもん」というのが先立ってしまうし、 WindowsにVC++というのではやっぱり得体の知れないMFCだの何だのと言った、 Winな世界以外では何の役にも立たないような知識が要求されるのがシャクでもある。
  • 先日の詰まらぬJavaScriptを書いてからというもの、 何となく再び「GUIまわりはJavaでもいいじゃん」という気分になってきた。 JavaとJavaScriptは全然違うのは分かっているのだけれど、 とりあえずJavaなら環境選ばないで遊べるのだし。 少し本腰入れて調べてみるか。
  • とりあえず、JavaのAPI関連の説明が欲しくて、本を探そうと思ったのだが、 考えてみたら、そんな泥臭いところに触れた本なんてそうそうありはしないだろう。 先日来の「できるだけ金を掛けない」という原則に従って、ドキュメントを探すことにした。 私の手元にあるのはJDK1.1.7Aという、化石のようなものなので、 SUNのサイトに行っても新しい1.2のマニュアルがあるだけである。 改めて、昔落としたJDKを収めたMOを見たら、ドキュメントも落としていたのを発見。 展開してみたら、APIについて一通りの説明がある。 SUNサイトにあった1.3等も後日落とすとして、 とりあえず遊びかたを覚えるのにはこれでも良いだろう。 とりあえず、手元のブラウザもJava2はまだ対応していないことでもあるし。
  • ふらりと本屋で遅ればせながらInterface誌を買う。 特集は・・と見ると、「試しながら学ぶ組み込みJava」。 うーむ、なかなかタイムリー。
  • パラパラとめくっているうちに「JNI」の文字が目に付いた。 言うまでもなく「Java Native Interface」のことで、 要するにJavaな世界とCで書くような泥臭い世界を行き来するための切り口のようなもの。 CでJavaの関数(メソッドと言った方が良いのか?)を書けるわけ。 存在は言葉としては知ってはいたものの具体的な方法は未知で、 何となく「お呪い」のようなものばかりで面倒くさそうな印象だったのだが、 読んでみると、あっけないくらい簡単そうである。 これがうまく使えれば、Javaで書いたアプリケーションでI/Oを直叩きするような真似もできるわけで、 それはなかなか面白いことになる筈である。 特にWin9xならアプリからのI/O直叩きは御法度でも何でもなくできてしまうのであるし。
  • ドキュメントでJNIを読むけれど、一体どんなコンパイラを使って、何をどうしたら良いのかさっぱりである。 やむなくwebで検索をかけてみたら、簡単な例を載せたページにヒット。JDKのバージョンは違うのだけど、 だいたいうまくいくだろうと、サンプルどおりやってみることにする。 VC++をコマンドラインで使うための環境変数の設定にちょっと手間取ったが、そこを何とか乗り越えて、 サンプル通りJavaで書いて、javacでコンパイル、javahでヘッダファイルを作らせて、 パタパタ・・と、Cソースを書いてVC++でコンパイルしてDLLを作成。 コンパイルしたjava側を走らせたら、ちゃんとCで書いた関数との間を行き来している。
  • それならJavaで書いたアプレットからだって呼べるのだろうかと、今度はAppletを親クラスにした クラスを作って、それを使うHTMLを作成してみる。これでうまくいくなら、 Javaアプレットでユーザインターフェースを書いて、 泥臭いところだけVC++の御世話になれば良いわけである。デバッグ中、 泥臭い所はJavaで書いたダミー関数とすり替えるという、小細工が使える筈。
    ・・と、期待してやってみたのだが、どうもうまくいかない様子である。 何かもう一ひねり必要なのか、あるいは「そんなヤバい事はやっちゃ駄目」ということなのか。
  • で、よくよくappletviewerのメッセージを見たら、「AppletSecurityException」とのこと。 やはりアプレットからJNIを使っていじるのは御法度ということらしい。 まぁ、アプレットでこんな危ないことができてしまっては問題が多いということなのだろう。
  • 更に悪あがきは続く。 どうやらJava2ならば、ポリシーツールというものでセキュリティを緩和してやれば良いらしいのだが、 ブラウザがJava2対応でないため、Plug-Inで拡張してやる必要がある。 やはりアプレットからいじるのはあまり得策でない様子である。 JNIなんてわざわざ用意しているのだから、Javaアプリケーションからなら大丈夫なのだろう。 これは明日以降試してみることにするか。
11月08日
  • 悪あがき二日目。アプレットとして動かすのはやはりセキュリティ上駄目ということになるようなので、 やはり今の状況ではJavaアプリケーションとして作るより無さそうである。
  • さて・・GUIはどうすれば良いのだろう。今まで作っていた例だとAppletを拡張して、 init()に初期化を書いて、paint()の中で再描画という感じだったのだが。 当然awtはアプレット専用ではないだろうから(でなければ、意味がない)なので、 アプリケーションとして動かしたときにも使える筈である。
    ただ、書き方は当然ある程度変わる筈。 アプレットとして呼び出される時にはHTML側の記述で、既にウインドウも開いているし、 javaアプリケーションとして起動するなら、中に書いたmain()からの起動である。 init()に続いてpaint()も勝手に呼んでくれる。 ところが、アプリケーションとなるとそうもいかない。自分でウインドウを開かなくては、 誰もやってくれるはずがない。
  • JDKのサンプルでmain()を持っているものを探してみる。 Clickというサンプルでやっているのを見つけて、試しに動かしてみる。 なるほど、アプレットとしても、単にjavaアプリとしてもそれなりに動くようになっている。 このスタイルを拝借すれば良いのだろう。
  • と思ったのだが、なかなかうまくいってくれない。NULLポインタがどうたらとか、 Cで書いたDLLが読めないとか。何だか良く分からないままだったが、 考えてみたらアプレットで遊んでいる時は初期化時にinit()が呼ばれるのだけれど、 アプリケーションとして起動したら自前でinit()を呼ばないといけないということに、 ハタと気が付く。面倒くさいのでコンストラクタの中に移してみたら、アプレットとしても、 アプリケーションとしても動くようになった。
  • ちょっと意地悪をして、DLL側でprintfでメッセージ出力。GUIなアプリなのだが、 一体どうなるかと思ったら、起動したDOS窓にprintfメッセージが・・ 当然の動きなのだろうけれど、コンソールにメッセージが出せるというのは、 デバッグの時に結構便利かもしれない。System.out.printlnの類でもコンソールに出るのかな?
  • かくしてJNIで遊ぶ道は開けた。
    Windowsのドライバの呼び出しもCまで持ってくれば不自由無くできるのだろうし、 I/O直叩きのDLL(IN/OUT命令相当)を一つこしらえてしまえば自作の機器はいじり放題な筈。あとは
    java xxx
    のようなことをしないですむように、両者をくっつけたexeファイルにでもなってくれれば言うこと無いのだが。MS-DOS時代に、すでに実行ファイル自体をLHA圧縮する(実行時にメモリ上に展開して実行する)ということだってできていたのだから、何とかやる手はあるのだろう、きっと。 これは明日調べることにしよう。
11月09日
  • Java関連についてあれやこれやと眺めていた。はっきり言って、まだまだ分からないことが多い。 JavaBeansって何?というレベルからスタートしていたので仕方ない。 (Beansはあちこち眺めて何となくやりたいことは分かった気がする) まぁ、何はともあれ、こうしたものでは何よりもまず「できるところから遊んでみる」 のが良いことだろう。 今回はやりたいことは割とはっきりしているので、良いかもしれない。
  • そういえば、C++コンパイラをフリーにしていなかったっけ?と インプライズ(旧ボーランド)のHPに行ってみたら、C++は見つからずに、 JavaベースのRAD(Rapid Application Development・・だっけ?) ツールであるJBuilderのFoundationとやらは無償提供されているのを見かけた。 (ここを参照) Windows版、Linux版、Solaris版があるとのこと。 とはいうものの、本体とマニュアルとサンプル等々を全部落とすと60MB越えと、 少々でかい。どこかの雑誌付録でも探した方が得策か。
  • これで、フリーなC++コンパイラでDLLが作れれば (WindowsのGUI関係のAPIなんてどうでも良いというのがメリット) 完全に無償な環境でRADまで使えて「とりあえずGUIなアプリを作って遊べる」 ようになるわけである。コンパイラ、コンパイラ・・・と・・どこかに無いものか。 Linuxならコンパイラは当たり前のものとして付いてくるから、 余計なことを考えなくて良いのだけどなぁ。 (コンパイラが無かったらカーネル再構築もできないから、当然(^^;)
11月10日
  • 原稿書きはなかなか進まない。パワー不足?
  • 読者(?)のIさん、Tさんより「BorlandのC++一式CD-Rに焼いて送りましょうか」 との有り難い申し出や「ここにあります」との情報を頂いた。
  • 一応、まだちゃんとフリーで配布していること、 そして再配布可かどうかの確認は必要だと思い、再度探し回る。 やっとこさみつけたのがここ。 一応フリーでダウンロード可能ということになっている。 ただ、「再配布」については本当に良いのか良く分からないので、インプライズ(日本の方ね) に改めてメールを出すことにした。たぶん駄目とは言わないと思うのだけど。
  • メールを出した後で、某誌の編集部の方から「Interfaceの今年の8月号買いました?」 むむ・・と思ったら付録CD-ROMにしっかり収録されているではないか。うーむぅ・・ ちゃんと読んでないのがバレバレである。とにかく、これで入手の問題は無くなった。 まぁ、インプライズの方には「JDKと組み合わせる時に何か注意点ある?」 ということもついでに聞いているので、無駄ということでもないか。
11月11日
  • BorlandC++のインストール。コマンドラインツールであるから、 他のソフトとのバッティング等は余り心配しなくて良いだろう。 とりあえず、環境変数とcfgファイルをサンプルのとおり作って、 Interface誌に出ていた、coutではエラーでstd::coutでないと駄目というサンプルを、 ちょっと入れてコンパイル。エラーになるはずなのに、ちゃんとコンパイルできて 実行ファイルもできて、動くことが確認できた。 ここではname spaceを使えということになっているのだけど、そんなことをしなくても大丈夫。 どうやらiostream.hが修正されている様子。
  • さて、DLLはどうやって作るのかと思ってbcc32<enter>とやってみたのだが、 出てくる説明が貧弱で良く分からない。-tWXXのあたりで何かありそうなのだけど、 その先の説明も無し。添付のヘルプでも、コンパイラオプションの説明はリンク切れのような状態。
  • やっぱり、こういうときはネットで検索!とやってみたら、何のことはない。 インプライズの方から5.5.1へのアップデートパック(ここね) が出ていて、これを入れたらちゃんと説明が出た。フム・・-tWDオプションか。 ちょっと、先ほどのcoutするだけのプログラムをこのオプションを付けてコンパイル。 何事もなくDLLが作成された。さて・・・これがJNI経由で呼べるかどうか。
  • インストールで余計なことをしていない確認も兼ねて、試しにインストール済みディレクトリを LHA圧縮して、メインマシンに転送して展開。(ディレクトリ丸ごとコピーでも良かったのだけど) 環境変数を設定して、先日作っていたサンプルのJava+VCなテスト用のソースを、別ディレクトリにコピー。 DLLだけ作り直せば良い筈だし、ソースをいじる必要も無いはずなので、 そのままbcc32に-tWDオプションを付けてコンパイル。DLLができたので、javaで起動・・ 何事もないように、同じ動き!(あたりまえだけど・・ね)
  • これで、あとはCの中でI/Oポートをいじれば一発さ・・と思ったらまた足下をすくわれた。 _asmでインラインアセンブラを書いてみたのだが、エラーで弾かれる。 なんと、インラインアセンブラを使うにはTASMが必須とのこと。 が・・これはフリーなBC++には付属しない。さて困った。
  • どうせ、同じような悩みを持つ人はいるはず・・と検索をかけたら、なるほど_emit__を使って コードを直接埋め込む手があるのか。・・と思っていたら、 その先にフリーなNASMなるアセンブラがあるという話である。 DOS、Win32、OS/2、Linux用があって、必要ならソースコードもあるとか。 まぁ、DOS用は間に合っているし、Linuxはアセンブラはあるし (それほど多機能ではなさそうだけど)、OS/2はたぶん今後とも御世話になることはないだろうから、 Win32用だけダウンロード。(ここからWhere is itを下りると置いてある)
  • 展開したら、nasmw.exeとndisasm.exe。ndisasmw.exeはたぶん逆アセンブラなのだろう。 インストールと言っても、特別なことはなくて、ただ展開してパスを通すだけ。
    とりあえず、BCCが吐いたアセンブラのソースをそのままnasmに食わせたのだが案の定エラー。 よくよく調べていったら、アセンブラの文法はunixのそれに似て、あまり親切なものではないらしい。 このあたりはawkなりperlなりでプリプロセッサを作ってやればそれなりに変換できるだろうけど、 今回やりたいのは単なるIN/OUTだけなので、わざわざそんなものを作るまでもない。 (そういえば、遙か昔にawkでMASM表記からIntelのASM86の書式に変換するものを作ったっけ)
  • webで簡単なサンプルを見つけたのだが、マクロがたくさんあったりして見づらい。 nasmに-eオプションを付けてアセンブルして出てきたプリプロセッサ出力を眺めて、書式を真似しながら簡単に書いてみる。
    segment .code USE32
    global	_dataplus
    _dataplus: push	ebp
          mov      ebp,esp
          mov      edx,[ebp+8]
          mov      eax,[ebp+12]
          add      eax,edx
          pop      ebp
          ret
    
    こんな感じ。(いきなりポート出力して何かあったりすると嫌なので、仮に引数を足して返すだけにしてみた) これが、
    #include 
    #include "test02.h" // <= javac test02.javaの後、javah -jni test02で作成
    extern unsigned int dataplus(unsigned int, unsigned int);
    JNIEXPORT jint JNICALL Java_test02_setdata
     (JNIEnv *env , jobject me , jint dat)
    {
          printf("%08lxH\n",dat);
          return(dataplus(dat,dat));
    }
    
    こんな具合にCから呼ばれるわけで、この両者をコンパイル/アセンブルしたあとリンクして、test02.dllとしてもしておいけば、Javaからは
    System.loadLibrary("test02");
    を一発やっておけば取り込まれるわけなので、
    import java.applet.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class test02 extends Applet
    {
      public native int setdata(int no);
    
      public void paint(Graphics g) {
        int x,y;
        for (x=0; x<=20; x++) {
          y = setdata(x*5);
          g.drawLine(100-(x*5),0,0,y);
          g.drawLine(640-y,400,640,400-y);
        }
      }
    
      public test02() {
        System.loadLibrary("test02");
      }
    
      public static void main(String[] args)
      {
        test02 t = new test02();
        WindowListener l = new WindowAdapter() { // 注:=の左は小文字の'L'
    	public void windowClosing(WindowEvent e) {System.exit(0);}
          };
        Frame f = new Frame("Test02");
        f.addWindowListener(l); 
        f.add(t);
        f.setSize(640, 400);
        f.show();
      }
    }
    
    こんなファイルをtest02.javaとして作ってやれば、最後のアセンブラの所まで行き着くことができるという目論みである。
    (ちなみに、Javaではunsignedは無いのに、Cでunsignedで受けているというのはご愛敬)
  • さて、目論み通りうまく行くかどうか。nasmで-fobjオプションを付けて、.OBJ形式で出力させる。 (とにかくaoutだの、coffだの、elfだの何だのと・・出力形式が山ほど選べてしまうのがなんとも凄いところ) Cの方ではありきたりのextern宣言してあるのでbcc32で一緒にリンクさせてやれば良いはず。 ふむ、ちゃんとDLLになっている。更にこれをjava側から呼べるか・・と、やってみたら・・予定通り動作!
    これで、無償ソフトだけ一通りいける道が開通である。
  • BC++の入っていたCD-ROMの中に、先日探していたJBuilderのFoundation版も一緒に入っていた。 JBuilder自身もJavaで書いてあるという説明があったけど、本当かな? 本当なら、プラットフォーム非依存でどこでも同じJBuilderが走る筈。 まぁ、もう少しJavaにハマってきたら、ちゃんと調べることにしよう。 今はとりあえずJDK1.1のレベルをクリアしてしまうのが先決だろうな。
11月12日
  • 昨日まででとりあえずの環境整備終わり、今度は少しGUI絡みをいじってみる。 なにぶん、これまでは「アプレット」としての使い方しかしていなかったので、 少々勝手が違うような気がするのだが、基本的には同じで良いのだろう。 init()の処理は昨日のようにコンストラクタに含めていくのが良いのか、 あるいはinit()を作っておいて、main()の中でオブジェクトを作成したときに呼ぶ方が良いのか。
  • jf.comp.lang.javaをちょっと購読。なにやら「オブジェクトとインスタンスの違い」 なるもので議論されている。C++だと確か「オブジェクトはすなわち記憶領域」とされているので、 まぁ、記憶領域を専有するのは何でもオブジェクトと言って良いのだろう。 じゃあインスタンスって何だとなると、C++の世界でははっきり言わないのだけど、 こちらはクラスを使って作った実体を指すようにしているような雰囲気。 結局、現実問題としては両者は殆どおなじものだけど、オブジェクトの方がやや広いという感じなのだろうか。
  • それにしても、オブジェクト指向となると、何故にこれほどまで宗教的な雰囲気が漂うのだろう。
  • 昔作ったプログラムについて、ちょっとした変更依頼。 だが、最終版がどれなのかがとっさに分からない。 いろいろ調べていくうちに、結局MOの保存が正式で、 PC上に残っていたのは、 次に何か変更があったときに備えてちょっと手を加えて、プログラムサイズを小さくまとめておこうとして、 やりかけのまま放置していたものであった。
    結局は何のことはなくて、自分で作った最終版はちゃんとMOに保存していたと、 それだけのこと。昔の自分をほめてあげよう。
11月13日
  • オブジェクト指向で何となくC++のことが良く出てくるのだけど、 C++といっても、結局はCと紙一重で、なわけなわけで、結局クラスなんて。
    そういえば、どこかで「thisポインタというのはどこで渡される?」というQがあったけど、 ちょっとコンパイルオプションでアセンブラのソースコードを吐かせて読んでみれば分かるとおり、 クラスのメンバ関数に渡される第一パラメータは自分自身へのポインタである。 引数がvoidであっても、必ずポインタがスタックに積まれてくるわけで、 裏では一手間余計にかかっていると言えばそのとおり。
  • 某Mさんのメルマガで教えてもらった検索エンジン で何気なく検索していて、 あまりの場違いさに思わずのけぞったページがこれ。 あの・・・・・あのですね・・・N*Cさんとか、サ*・マイクロとかと同列に並べて頂くのは、 有り難いというより・・・
    そうなれるように頑張れということだと、前向きにとらえておきましょう。
  • 先日メールしたインプライズより返答メール。 再配布は不可というお答えであった。 フリーで手に入るソフトウェアなのだけど、CD-Rなどに焼いて再配布してはならないとのこと。 じゃあ、ダウンロードして自分でCD-Rに焼いて作ったバックアップ(これは著作権上も合法な筈) したものと、他の人がダウンロードしたものをCD-Rに焼いたのをもらうのと、どう区別をつけるのかと言われたら、 どうしようもない筈なのであるけれど、それはそれ、これはこれ・・ということだろう。
  • で、BorlandC++やらTurboDebuggerだの、各種トライアル版をまとめて収録したCD-ROMを無償配布しているそうなので、 こちらを送っていただくことにした。
11月14日
  • 原稿書きな一日。合間をぬって少しJavaのフォント周りを眺めてみる。
  • ちょっとクリーニング屋に寄ったついでにローソンに立ち寄る。 小さな紙の箱に入った一個100円なりの羊羹があったので、買ってみたらこれが結構美味である。 はっきり言って、この近辺のデパートで売っていたTigerマーク入りのものよりずっとおいしい。 ちゃんとあずきの香りがする。粒あんとこしあんの二種類があったけど、粒あんの方が好きかな?
  • Wordでタイミング図を書いていたら立て続けにハング。何が起きたのかさっぱりわからない。 ハング時立ち上げていたのはWordの他には一太郎LiteとNetscape。 まさかなぁ・・と思いながらNetscapeのキャッシュディレクトリの中身をきれいさっぱり削除したら、 それ以降は安定。偶然なのか、あるいはやっぱりネスケが何かヘマをしていたのか。
11月15日
  • Borlandから、評価版CD-ROM到着。中身はまだ見ていないけれど、 CD-ROM表面に書いてあるのは
    Borland C++ Compoler 5.5
    Borland C++ Builder Trial
    Borland C++ Delphi 5 Trial
    Borland JBuilder 3.5 Foundation
    InterBasae 5.6 Trial
    
    TurboDebuggerは入っていないので、これはDownloadするか、どこかの付録に付くのを待つことにするか。
  • Javaアプリケーションに着手。 いきなり引っかかったのがフォントの問題。 16進ダンプリスト形式で表示させたいのだけど、考えたらウインドウを開いたとしても 果たして一行がどれだけの幅になるのかわからない。 できればVGAでも見えるようにしたいと思うので640×480ドットの領域に収めたい。
  • とりあえず、Fontのオブジェクトを作ってそれを元にFontMetricのオブジェクトを作って、 大きさを取れば良いのかと、試しに
    Font f = new Font("Monospaced",Font.PLAIN, 24);	// 等幅フォント
    FontMetrics fm = new FontMetrics(f);
    int fontwidth = fm.charWidth('A');
    
    てなことをやったらしっかりエラー。Abstructな関数(C++で言うところの仮想関数)だから、 いきなり使っちゃ駄目とのこと。 考えたらFontで与えているのはポイント数であって、 それが実際には何ドットになるのかは描画対象が決まらなければ分かるはずがない。かくして、
    FontMetric fm;
    ・・・・・
    Graphics g = getGraphics();
    とやっておいて、
    g.setFont(f);
    fm = g.getFontMetrics()
    
    としたらOK。ここで、ポイント数を変えながら画面の中に収まりきれる大きさのポイント数を探すことにした。 これでやれやれと一段落。
  • と、思ったら、なにやら動きが不穏である。何も表示しなかったり、設定したポイント数を入れている変数を書き出してみると0になっていたりする。 あれこれやっていたのだが、フォント検索をmain()から呼んでいる関数の中でやっているのだが、ここでフォントを探しているうちにpaint()が呼ばれてしまうらしい。 main()の中身は過日の日誌と大差ないのだが、ここでshow()を呼んだ時点でpaint()が呼ばれているのだろうかと思ったら、どうもそうでもないらしい。「再描画」は別にスケジューリングされていくのだろうか。じゃあ、フォントを探してからshow()すれば良いではないかと思ったら、今度はNULLポインタを参照しただの何だのとエラーになる。恐らく、show()されないと、getGrapics()できないということなのだろう。
  • 結局、応急対策として初期化の前後両方にshow()を入れて、更に「初期化中フラグ」をつけて、これが立っていたらpaint()は何もしないで戻ることに。 それにしても美しくない・・・美しく無さ過ぎる。正しい方法はおいおい調べていくことにしよう。
  • ダンプリストのようなものを表示する必要があるので、これをdrawString()を使って描いていたのだが、いろいろやっていくうちに、やっぱりテキストボックスのようなものを使った方が締まりがあるような気がしてきた。drawString()だと、一回自前で全部消して再描画しないとみっともないことになるからというのもその理由。TextAreaを作って・・えっと、ダンプリスト全体を長い長い一行のテキストにしておけば、スクロールもかってにやってくれるしなぁ・・なんていうことを本当にやってみたら表示しないで考え込んでしまった。たぶん放っておけばいつかは表示されるのだろうけど、遅すぎて話しにならない。やはりこれは無茶というものか。画面に出る分のダンプリストのテキストを作ってTextAreanに流し込んで、スクロールバーはテキストエリアの横に貼り付けて、移動処理は自前でやるべきなのだろう。
11月16日
  • サンのJavaチュートリアル を眺めていて、コンポーネントを追加したらコンテナに対してvalidate()をしろという一文を見つける。 えっと、TextArea()そのものではなくて、今表示したいウインドウそのものなので、 きっとコンテナは自分自身。クラス階層は・・
    java.lang.Object
       |
       +----java.awt.Component
               |
               +----java.awt.Container
                       |
                       +----java.awt.Panel
                               |
                               +----java.applet.Applet
    
    と、こうなっているので、Containerであることは間違いない。 確かに、Containerに貼り付けたのだからvalidate()するのは当然か。試しに入れてみたら、ちゃんと表示されるようになった。 show()の二回呼び出しなどという格好悪い方法からこれでさよならである。
  • テキストエリアの縦幅と同じ大きさのスクロールバーを作るには、やはり大きさを知らなくてはいけないのではないか・・と思って取り出そうとしたら0で帰ってくる。不思議に思いながら、何気なくvalidate()の後ろに持っていくるとそれなりの値になっている。そういえば、テキストエリアを作るときにの縦横サイズは行数と文字数で決めるようになっていて、作った後からtxarea.setFont()しているのに、それなりの大きさでまともに表示されるのが不思議だったのだが・・なるほどadd()されただけでは、実際の表示領域は決まっていなくて、validate()されて初めて指定されたフォント情報などを元に大きさを決めているというわけか。
  • 結局、スクロールバーはレイアウトマネージャを使えば、何も考えることはなくて、それなりの大きさに勝手にやってくれることは分かった。方針を少し変えて、テキストエリアのサイズを知った上で、その中にはまるような大きさのフォントを探して、更に何行入るかを算出。で、スクロールバーのMax値を決定するように変更。
  • ボタン類を配置。これもPanel()を一個作ってその中にaddしていって、できたパネルをメインのフレームにまたaddするだけ。レイアウトマネージャがいるので、 大きさは適当に計算してくれる。あまり凝ったことをしないで並べるだけなら別に画面設計用のツールなんか使わなくてもこれで充分。
  • さて、ボタンが押された、スクロールバーが動かされた・・というメッセージをどうやって受け取るものか。昔買ったJava本を眺めて、なんとなくリスナーなるものがあることが分かる。さて、これはどういう風なものなのか。とりあえず、ボタン関係ならaddActionListenerなるものがあるらしいのだが、これは何物?というわけで、JDKのAPIドキュメントを探索。余談だが、このドキュメント、なかなかうまくできている物だと思う。サンプルコードがあるともうちょっと良いのだけど・・ね。
  • イベントを発生するのだから、読むのはjava.awt.eventあたりか・・なんて考えてしまうのはやはりまだまだオブジェクト指向していない証拠か。そのオブジェクト(この場合はButton)で発せするイベントをどうするかなのだから、リスナーを設定するのはawtのButtonにあるに決まっている。というわけで、Buttonのところを見たら、あったあった。addActionListener。引数はActionListener型。で、これをクリックしたら、これは「インターフェース」で、メソッドとして、abstructなactionPerformed(ActionEvent)があるだけ。要するに、ActionListenerをimplementsしたクラスを一個こしらえて、この中にactionPerformed()メソッドを作りなさい。で、イベントはActionEventなのだけど、これがEventObject=>AWTEvent=>ActionEventと継承して来ているのだからEventObjectのgetSource()をすれば何が押されたか分かる・・という寸法か。
  • スクロールバーも同様に・・・なるほど。ここが分かってしまえば簡単だ。スクロールバーのイベントが起きたらgetValue()するだけで値がもらえるので、それを元にダンプリストの先頭アドレスを決めればOK。
  • 何となくできてしまったが・・スクロールさせても最後の一行が表示されない。よくよく見ていくと、スクロールバーが返す値は(設定したmax値-1)となる様子。なるほどね。
  • あとは、ファイル入出力関係ができれば、Java担当分の山は過ぎたも同然。 一番の難関と思えるのがファイル名入力のための、あのありがちなダイアログボックス。Javaであんなのどうやるんだろうか。Windowsベッタリな画面だし、あんなもの標準にあるわけないだろう。だれか手頃なもの作ってないかなぁ・・と思って先日の検索エンジンで探していたら、別にコードなんか書かなくてもFileDialog()なオブジェクトを作ってshow()すれば何かできるらしい。 試しにボタンの一つを使って、処理の中で
      Frame fm = new Frame();
      FileDialog fd = new FileDialog(fm,"Input Filename");
      fd.show();
    
    こんなことをやっただけでメモ帳などでFileE=>Openしたときに出るような、見慣れたあのダイアログが出てきた。こんなに簡単だったのか。悩んで損した。具体的な内容やらファイル名の受け取り方その他は明日調べることにしよう。
11月17日
  • FileDialog()の説明を読む。 FileDialog()を作るときに最終パラメータにFileDialog.LOADとかFileDialog.SAVEを付けることができるらしい。 試しにやってみると、見かけで違うのは右下のボタンが「開く」になるか「保存」になるか。 更にいじってみると、「保存」の時には既に存在するファイルと同じなら、ちゃんと「既に存在します」が出る。なるほど便利。
  • getFile()でファイル名を取り出してみる。が・・本当にファイル名だけでパスがない。パスはgetDirectoryで取るのでくっつければ良いのだが、ちょっと気になったのはこの両者の間のセパレータ。unixなら’/’だけどWindowsな世界では’¥’という案配でシステムに依存する。まぁ、それなりに歴史的な経緯があるのでしかたないことなのだけど。さて、どうしたものかと思ってまた検索。
    System.getProperty(file.sepa("file.separator")とやればセパレータ文字が取れることがわかった。ついでに、行末コードもSystem.getProperty("line.separator")だということが分かったので、若干ソースを修正しておく。
  • よくよく見たら、getDirectoryでディレクトリの最後にセパレータが付いていたので、単純に両者を結合するだけで良かった。まぁ、ライン・セパレータが分かっただけでも良かったというべきだろう。
  • あとはファイルをオープンしてリード/ライトできれば良いわけである。 こちらもちらほらサンプルと、ドキュメントをいったりきたりしていたのだが、 どうやらFileInputStream(ファイル名)なりFileOutputStream(ファイル名)でストリームをこしらえて、これを元にFilterInputStream()やらFilterOutputStream()の中の手頃なものを使えば良いようだ。ものは試してバッファ領域サイズ分のリードをかけてみたら、何事もなく読み込まれて、ダンプリストが更新。あまりにあっけない。じゃあ・・と調子にのってファイルへのバッファ丸ごと書込をやったのだが、こちらもあっさりとできてしまった。バイナリファイルを読ませて書き出してFC /Bで両者を比較させたが、当然のことながら全く同じ。なんだ、これでバイナリ入出力はできてしまったのか。(オフセットをかけるとか、サービス付けるのはこれからとして)
  • 更に読んでいたら、どうやら単なるFileInputStream()等のreadあたりをつかってもかまわないようだ。ただ、キャラクタ単位で読み書きするような場合にはBufferdInputStreamなどでラップしてやったほうが効率良いということ。
  • バイナリでの入出力はあまりにあっけなく動いてしまったので、続いてテキスト入力部分。読み出したテキストをゴチャゴチャ・・とやるのだけど、当然のようにポインタは使えないし、文字コードセットのことを考えると例えば
    if ((*c >='0') && (*c <= '9)) {・・・}
    
    なんていうわけにはいかないのでCな目から見たらずいぶんとノロマな感じのするコードになる。こんなので本当に大丈夫か?と思ったのだが、結構それなりに動く。 考えてみれば、Javaはソースから一回バイトコードにコンパイルされるわけで、その時点で最適化もやってしまうから、そうそうべらぼうなことにならずに済むのだろう。
  • 少々大きなファイルをメールで添付しようとしたら怒られた。10MB越えたら駄目!ということらしい。仕方ない、MOで送るか・・と思ったらMOは持っていないとのこと。 うーん・・ということはCD−Rか。いずれ買うつもりではあったのだが、いたしかたない。安いので良いのだが、USBで繋ぐものにしておけば、将来バルクインターフェースのサンプルにもなるだろう・・ということで、あちこち探して見つけたADTECのを買ってきた。CD-R/RWの書込4倍速、読み出し6倍速というもの。あと少し足せば書込6倍速もあったのだけどデザイン優先。(まぁ、20分が13分になったからとそれほど御利益とも感じないし)ついでに、メディア(三菱印が付いていた)を購入10枚780円なり。
  • USBがついているのは、サブマシン。ざっとインストールして、ろくにマニュアルを斜め読みしながらファイルを決めて「書込!」8倍であろうと何だろうと遅いとは思っていたのでそのまま画面を切り替えてJavaな世界に戻っていたら、終わっていた。ボリューム名を付け忘れたためか、ISO-9660になってしまったのはご愛敬。試しにメインマシンのCD-ROMドライブで読ませてみたが、ちゃんと読めたのを見て安心する。
11月18日
  • 昨日作成したのは高々十数Mバイト程度だったので、もう少し大きいものを・・ということで、手元に山ほどある各メモリデバイスのデータシートMOをCD−Rに移動させることにする。全部230Mのメディアなので、だいたいMO3枚が1枚になる計算。3枚分のデータを全部集めて500MB程度のファイルを収めたディレクトリを作って、そこからCD-Rへ。昨日は安全を見て2倍速だったのだが、今回は4倍速でやってみたが、何事もなく完成。更に一枚作成して安心する。これなら大丈夫そうだ。
  • 何となく、メディアとの相性問題があったなと思ったので、検索エンジンで探してみる。ふむ・・激安メディアはなかなかいろいろある様子。たまたま買った三菱はアゾ系有機色素とやらで、若干珍しいのだとか。
  • Javaアプリケーションがほぼ完成。続いてJNIで呼ぶメソッドを作成。この前と殆どやることは同じで、IN/OUT部分を呼ぶようにしたので、アセンブラで書いた物は全く同じ。Cの方はヘッダを作って関数名をすり替えるだけ。
  • さて、これでJNIで呼ぶようにすれば良いのだが、実機以外では実際のI/Oにはアクセスして欲しくないわけである。さりとて、その都度ソースを修正してコンパイル・・というのも面倒くさい。これは起動時にコマンドラインで振り分ける方が良さそうだ。 引数は・・と見るとmain(String[] args)という具合なので、文字列型の配列が渡される。Cの時のようにargc、argv[]とならないのは、配列の要素数はargs.lengthで取れるから。
  • これで、引数が取れる筈・・と思ってやってみたら、ちゃんと渡されてきた。Cだとargv[0]は起動したファイル名などが入っていたりするのだけど、Javaではargs[0]は第一パラメータで起動したコマンド名そのものではない。まぁ、そんなものだろう。
11月19日
  • 昨日の続きで、引数での振り分け処理を書く。便利なことにStringは小文字大文字変換とかequalsがあるので、引数の一致を調べるのは造作もない。IN/OUT操作をするメソッドに一つ皮をかぶせて、引数で-JNIと渡したときには内部のboolean型のjni_callなんていう変数をtrueにする(デフォルトはfalse)にすることで、trueなら実際のI/Oアクセス、falseならダミー入出力をやってリターンすることに。これで、実機で遊ぶ時だけ-JNIを付ければ良いわけだ。
  • 実機での動作検証なのだが、まずJDKだの何だのが入っていないので、 そこで動かすにはどうするかで四苦八苦。java.exeを動かしてみて、 文句を言われたファイルを追加したのだが、相変わらずjava/langの下の何がどうしたとか得体の知れないエラーメッセージ。 基本的にCLASSPATHが切ってない限りはシステムのPATHの方を使う筈なので、jdk1.1.7/binの下にあるファイルがあれば良い筈・・と思ったのだが、全部コピーしてきても駄目。あれやこれやとやっていた結果行き着いたのがclasses.zipという、8Mバイト程度の大きなファイル。この中にJavaの基本的なAPI(CoreAPI)が全部入っているのだった。 これと若干のDLLなどを追加して、java.exeの引数でclasspathに”.”と”.¥classes.zipを入れてやったらとりあえず起動。
  • やれやれ・・と思ったらフォントがおかしい。当幅フォントを指定しているのに、プロポーショナルフォントになってしまう。きっとどこかにフォント指定があると思うのだけどどこにあるのやら良く分からない。今はとりあえずターゲットのボードがちゃんとアクセスできるかどうかが問題なだけなので、多少表示がみっともないのは我慢しよう。
  • 動かしてみる。やはり・・というべきか、いきなりは動かないものだ。 まず、ROMのリードすらできないという状況に少々ショックを受けながら、I/Oにどんなアクセスをしたのかを表示するためのVerboseモードオプションを起動時の引数で与えられるように手を入れて、再度トライ!眺めてみたら、何のことはないミスタイプでポートアドレスを間違っていた。再び手を加えて見たのだがやはり駄目。
  • よくよく基板に付けたLEDを見ていたら電源制御ポートがOFFのまま。これでは動くわけがない。結局はPowerON/OFF関係の関数の呼び忘れ。なんとまぁ、みっともない。
  • 追加して、ついでにウェイトもちょっと見直して実行!おぉ・・動く動く・・コマンドを一つづつ動かしてはちょっとメッセージの気に入らない所などを修正して、とりあえず簡単なものが出来上がってしまった。日誌を読み返したら、Javaでやってみよう!と思い立ったのが7日だから今日で12日目。JNIでいける!と分かったのが11日だから、今日で8日目早かったと言うべきか、思ったより手間取ったと言うべきか。
  • できたプログラムを改めて見直すとあまり格好がよろしくない。まぁ、当たり前で、一つのクラスの中でメソッドを書き並べたわけで、はっきり言って全然オブジェクト指向なんていうのとは関係のないCレベルのプログラミングである。おまけに全部1ファイルだし。少し整理して綺麗に書き直すべきかな。
11月20日
  • 昨日作ったプログラムを少し整理して、ターゲットの変更に対応しやすくしようという試み。 まずこれまで書いていたプログラムの階層をざっと思い浮かべておく。
  • Javaの場合、クラスで継承する手だてと、もう一つInterfaceをImplementする手があるのだけど、このあたりがまだ良く分かってない。考えてみたら、Javaの文法やら構文規則の類の本や資料って持っていない。そこらのサンプルだと、自分で別のクラスを作るようなことはやっていないので、ちょっと参考に・・というわけにもいかないし。まぁ、ここは手探りでやってみるか。
  • やむなく、I/Oアクセスをするものを基底のクラスにして、そこから派生させていくことにした。何だか格好悪くて仕方ない。もうちょっとうまい手がある筈だと思うのだが。明日、本屋で立ち読みでもしてくるか。
  • ターゲットに依存する部分と多少変わっても共通に使える部分とに分離して、共通部分をまとめて、ターゲットに依存する部分をabstractなメソッドにして、I/Oアクセスのクラスから派生させる。ここも案外四苦八苦。エラーメッセージと格闘しながら、それなりに書き方を見つけて、書き下す。
  • 更に、ターゲットに依存した処理を入れたものを、abstractなクラスから派生。abstractになっているメソッドの実体を書いておく。これらを全部別ファイルにしておけば良いのだろう。親のクラスはどうやって知るのか・・と言えばそれはimportするに違いない・・と思ったら案の定。
  • 動いたソースから、派生クラスで書けた部分をばっさりと切る。多少手が滑ってエラーになったところを修正して、javacでコンパイル。アァ・・他のソースもコンパイルしなくちゃ・・と思って眺めたら、あれ?他のソースも勝手にコンパイルされて、classファイルができている。importした先も勝手に判断してコンパイルするようになっているらしい。なるほどね。
  • 書き換えでだいぶすっきりした。ローカルとグローバルの区分けしかできないCに比べると、「誰の持ち物か」ということがはっきりするのでずいぶんと見通しが良い。オブジェクト指向というのは何故かいろいろ「教義」にも近いような精神論的な事を言う人も多いのだけど、こういう「あっ、便利」と思えればそれで良いのではないか。
11月21日
  • 昨日から少々熱っぽいのだが、風邪なのかなんなのか良く分からない。 夜になると何となく具合がわるのだが、昼間は結構調子良い。
  • 続いて別デバイスのコントロールプログラムの作成。DOS上で動かしたプログラムは既にあるので、これを元にしてJavaにもってくることになる。デバイス依存部分でやることは殆ど同じだし、細々した文法面でJavaもCも大差は無いのだなということを改めて実感する。クラスの中のメソッドとして、Cで書いていたプログラムを切り張りして、引数のvoidを削除、公開したいもの以外はprivateにして、charをbyteに、更にunsignedを外して、更に符号拡張されそうなところをキャスト+ビットマスク。 こんなので良いのか?と思ってコンパイルして、まずI/Oを実際にはやらない状態で試してみたら、それなりに動いている。実機に移して動かしてみたら、どうと言うこともなく動作。あまりにあっけない。
  • せっかく同じabstractなクラスから派生させたのだから、デバイス種別を選べるように共通化してみる。選択メニューはChoice一発。Choiceへの追加はaddするだけ。選択の時のイベントは・・と見るとItenListenerを追加するとのこと。ふむ。ボタンを真似して追加して、イベントの中ではgetSource()して取ってきたChoiceオブジェクトからgetSelectedItemすれば何を選択したか文字列が取れるわけだな。ここの中で選択された物に従って必要なデバイスの処理クラスからインスタンスを作れば良しと。
  • 本当にこれで良いのか・・と思ったら、本当によかったらしい。ちゃんとデバイスが選択できて、それなりに切り替わって動いている。なるほどね。
  • 昨日、銀行からお呼ばれ。別に残高不足といったような間抜けなミスではなくて、5年固定にしていた住宅ローンの金利見直しの時期が来たということ。もう5年たったのかと思うと随分早い気がする。当然のように前回よりも金利ダウンなので、当然返済額も減る筈。5年後はどうなっているかわからないけど、少しは収入も安定しているか、あるいは既にここに住んでいないか。
  • 近所のスーパーに買い物に行ったついでになんとなくビデオテープやら何やらを売っているコーナーへ。カセットやらMDと並んでCD−Rがしっかり並んでいることに今頃気が付く。ばら売り、10枚単位などというのと混ざって、Victorのが30枚で1680円なり。1枚56円か。まぁ、Victorが自社生産しているとは思えないので、どこからかのOEMなのだろうけれど、こんな値段でスーパーに置いてあるというところにも時代の流れを感じてしまう。そういえば、電器屋でCD-RWメディアが200円足らずで売っていたな。あまり頻繁に書き換えない用途なら、MOの代わりにするのも良い選択肢かもしれない。
11月22日
  • というわけで、水を掛けられた速記者が可哀相であった。これが「国会」だというのだから日本も平和である。
  • 基板のレイアウト検討で、Micro-ATXの資料を拾ってきて配置決め。CADで場所を決めるから数値でぽんぽんとやれば後で寸法出しするのは、図面上で基準点を拾うだけなので簡単である。
  • そういえば、昨日やけにあっさりとローンの更新が終わったと、ちょっと不思議な感じがしていた。借りたときは某大手電機メーカの社員だったわけで、まぁ「信用」という意味ではそれなりだったと思うのだけど、今はフリー。改めて何か確認しないのかと思ってハタと気が付く。返済終わるまで、きっちりと契約期間中であって5年目というのは「契約更新」ではなくて単なる金利見直しをいつやるかというだけのことだった。借金とクレジットカードを作るなら会社の肩書きがあるうちだな、やっぱり。
  • というわけで原稿にとりかかる。既に動いているので少し気が楽。今後何かデバイスやハードが多少変わっても変更する必要があるところは綺麗に区分けできているし。
  • ところで、Javaのfont.propertyファイルなのだけど、これを任意のディレクトリに移すにはどうしたら良いのだろうか。うーん・・やっぱりJDKな環境のないところにはJREをインストールしないと駄目かな?
  • 出かけたついでにCD−Rメディアの価格を眺めてくる。まぁ、10枚で1000円程度が多いのだけど、某量販店でTDKの旧タイプで、個別のケースに入ったのが10枚で870円程度、不織布のついたジャケットに入ったのが10枚780円位で売っていたので、ケース入りの方を買っておく。
  • そういえば、最近になって鼻炎薬なんかによく使われている、塩酸フェニルプロパノールアミンを含んだ薬が米国で一般への販売が禁止になったらしい。(医師の処方の元で使うことなのだろう)。実は塩酸フェニルプロパノールアミンは、食欲減退させる場合があるという副作用があって、これがダイエット目的に流用されている(商品名「デクサトリム」だったかな?)。詳細は知らないけれど、おそらくこの類のもので無茶苦茶な使い方をして、トラブルを起こしたということなのだろう。厚生省は「そんな馬鹿な使い方をするのが悪い」という姿勢らしいが、それは正しい。だいたい、薬でダイエットしようという発想がヤラれているのだけどな。
11月23日
  • 原稿を書いていたら、思ったよりも範囲が広いということに呆然とする。とりあえず、分かっている物を優先で進めるよりないだろう。見通しが甘かったと言えばそれまでなのだが、今更悔やんでも仕方がない。とりあえず、一気に書いていく。メールチェックもBBS巡りも今日は中止。
  • 風邪なのか何なのか分からないが、どうも力が入らないというのか、疲れているような、だるさがある。鼻水が出るということもあるのかもしれないが、とにかく気力で押し切っているというところである。これが「やる気はあるけど身体がついてこない」というパターンなのだろうか?少しだけ「ドリンク剤」の類に頼りたくなる人の気持ちが分かるような気がする。
  • リミット判定でしくじっているところがあったので、プログラムに若干手入れ。あっちはどうだ、こっちはどうだとガタガタ言わないで済むのがなかなか良いところである。
  • なんとか今日の予定の所までは完了。さて、明日は別件を先行して処理せねば。
11月24日
  • 別件処理。なかなか手間取る。午前中に終わらせる予定だったが午後までかかってしまった。コネクタのカタログ類を再度チェック。例によってコネクタのデパートであったAMPがタイコとかいう名前になってしまったのだが、amp.comは健在のようである。 それにしても、相変わらず探しにくいサイトである。キーワード検索位できれば良いのに。
  • 本屋に行く。先日JBuilder3.5を送ってもらったばかりなのだが、JBuilder4に既にバージョンアップされていて、雑誌付録にもついている。何となく眺めていたのだが、雑誌記事の方は特別読みたいものもないので、少々躊躇する。JDK1.3の日本語マニュアルというのもそれなりに魅力といえば魅力なのだが、そのために1500円を出すかどうか。
  • とりあえず、JBuilder3.5のインストールでもしてみようかと、CD-ROMをセットしたらドライブがリトライばかりしてさっぱり読めない。一見したところではそれほどおかしくないようなのだが、試しに眼鏡拭きでそっと拭いてやったら極めて調子よく読めるようになった。やれやれ。
  • 使う上で、ユーザ登録が必要なのだがインプライズのサイトから登録をしたら即座にメールでインストール番号とインストールキーを送ってきた。ここまで来て、何となくJBuilder4に目が移る。何が変わったのか、インプライズのサイトでもいって調べておくことにするか。
  • STマイクロエレクトロニクスから郵便物。何かと思ったら製品カタログCD-ROM。最近増えてきたなぁ。CD-ROMジュークボックスのようなものが欲しくなってくる。
  • 原稿の方は、残っていた部分の負荷が思ったより軽そうで一安心。これなら日曜日は久しぶりに完全にオフにできるかもしれない。
11月25日
  • 原稿が半分山場を越えたところで、ちょっと散歩がてら本屋に行く。 やっぱりJBuilder4やらJava2JDK1.3の日本語ドキュメント類も欲しくなり結局JavaWORLD誌を買う。たぶん、JBuilderなら配布用のウィザードもあるだろうから、サンプルプログラム用のパッケージを作ることもできるだろう。
  • あまりにも今更・・なこと。実はキーボードのケーブルがもう少し長ければ良いのにと思うことが多かった。机が二つ並んでいるのだが、右となりの机の下にメインとサブの二台のミニタワー機があって、メインのマシンは右側・・つまり遠い方にある。 キーボードのケーブルはそこそこ長いのだが、何とかつかえずに済むという位で、あと10cmでも20cmでも長ければもうちょっと使いやすいのにと思いながらも、延長ケーブルを作るのも面倒だし・・ということで放置していた。 そんなこんなで何気なく今日キーボードの裏を見たら、キーボードのケーブルは背面中心から出るのだけど、裏の溝を通してわざわざ左側・・つまりマシンから遠くなるような側まで引っぱっていることに気が付いた。約15cmも遠くなるような側から引き出しているわけで、往復30cm分。この差は大きい。はずして中心からそのまま引き出したらずっと自由度が増した。他のキーボードはこんな妙なことをやっていないので、完全に盲点。なんか、以前にも似たようなことをやったような記憶があるなぁ。情けないやら笑ってしまうやら。
  • JavaWorld誌を眺める。はっきり言って「未知との遭遇」であり、頭の中では「Error!undefined symbol」が出まくっている感じである。結局の所Java+データベースというのが旬ということなのだけど、私はデータベースに手を出したことはないので、何の事やらさっぱり・・というのはあたりまえだろう。
  • まぁ、「難しそうに言っているように見えるものほど難しくない」「一見易しい物ほど難しい」というのは良くあることなので、きっとここらの記事もさしてややこしいことを言っているわけではないのだろう。
11月26日
  • 本日オフ。PCの電源は一切入れないという態度に徹することにしてゴロゴロと本を眺めたり、TVを見たり昼寝をしたり。当然データ通信の量も0バイト。
  • そういえば、こうして自宅にいるのに完全にPCから離れて過ごすのは、何カ月ぶりなのだろう。ここのところ朝から晩までPCの電源は入れっぱなしだったような気がする。
  • のんびり雑誌のバックナンバー等を眺めていると、今何となく手を出したくなってきていることが、1年半〜2年ほど前の雑誌記事であったりすることが多い事に気が付く。結局そうしたものと向き合うだけの心の余裕がどんどん無くなっていたのだろう。
  • 大きい会社というのは確かに思い通りにならないことも多いのだけれど、下っ端でいる限りはベクトル自体は上の意向で決まってくるわけで、それが本当に飯の種になるのかどうかなどということはそれほど真剣に考える必要も無かった。
    今は24時間が自分のものであるのであるし、何が旬かということも何が必要になってくるかも全て自分の判断によるよりない。それにも関わらず、ついつい目先の生活のことにばかり目が行ってしまっていた。そんなことに気付かされた一日だった。
  • 先日のJavaWORLD誌のUndefinedSymbolなのが気に入らないので、XMLについて昔の雑誌で特集していたのを眺めたり、SQLについて本屋で立ち読みする。ふむ。データベースって私には無縁の世界と思っていたけれど、およそデータと呼べる物は何でもかんでもデータベースという扱いにしてしまっても良いのかも知れない。私の手元でも、データシートのPDFファイル、各種ドキュメント類、雑誌原稿やらサンプルプログラムなどがHDDの中に散らばっているのだけれど、これらもうまく整理していけるなら便利に使えるかも。特にpdfファイルは最近散乱気味なので、メーカ、型名、種別などで分類できれば便利かもしれない。データベースと呼ぶには極めてささやかな使い方ではあるけれど。
  • Java2登場の頃の記事を読み返す。なるほど、こういうふうに言われていたのかなどと、改めて当時を思い出しながら読んでいた。なにぶん出たての頃なので用語解説の類も親切であるし、自分がちょっと手を出したり、悩んだあたりはうなずく事も多い。
  • 頭も相当リフレッシュした感じがする。やはり能率を上げ、「あしたのために」という気持ちを持つには「休息」が大事。「忙」は心を亡くすと書く。これから気を付けよう。
11月27日
  • STマイクロエレクトロニクスのCD-ROMをよくよく眺めていたら、
    TO RECYCLE THIS CD-ROM,PLEASE RETURN IT TO THE NEAREST STMicroelectronics SALES OFFICE
    
    だそうで。それなりの処理ルートに乗せるのか、あるいは再パッケージングしてどこかに使い回すのか。
  • ちょっとみつけた自動翻訳サイト日本語<=>英語はもちろん、9カ国語対応というのがなかなか。 海外から物を買うとか質問メールの下訳をさせるときに有り難いかもしれない。
  • ちなみに「日本国民は正当に選挙された国会における代表者を通じて行動する。」を訳させたら、
    The Japanese act through the representative in the National Diet elected justly.
    
    何となく分かるような、わからないような。
11月28日
  • JBuilder4をインストール。C++と同様にインプライズ(ボーランド)のJavaコンパイラが入っているのかと思ったら、JDK1.3というディレクトリがあって、起動してみたらSUNのJDKそのままのようである。JDK1.3の中はSUNそのままであるし、JBuilderのヘルプでも「おかしかったらSUNのサイトを見てアップデートしてみろ」といった事が出てくる始末。これは無償のFoundationだからというのではなくて、そういうものなのだという文化なのだろうか。CやC++の時の事を思い出すと、何とも不思議な感じがする。
    DOS時代のCコンパイラ・・Lattice、Whitesmith、MS、CI-C86/Optimizing-C86、MarkWilliams・・etc,etc・・むろん、国産のLSI-Cも忘れてはいけないか。
  • 試しにDOS窓からJBuilder4¥JDK1.3¥binをパスに追加してjavacを動かしたらそのまま動く感じがする。オプションの説明が英語で出ると思ったらちゃっかり日本語である。試しに先日JNIも使ってJDK1.1.7で作っていたソースをそのままコピーして再コンパイルしてみた。噂ではJNIを使っているときにはセキュリティがどうたらとか、CLASSPATHを設定するものだとか、いろいろ聞いていたのだが、何も設定しないで動いている。そういうものか?
  • コンパイルできたので動かしてみる。画面が初期化されたところまでは良かったのだが、テキストエリアの表示のところまで行ったらエクセプションが発生した模様。 とりあえず、そのまま動いているのだけど、画面の表示を見ているとどうやらテキストエリアのサイズの取得か、フォントサイズの取得がうまくいっていない感じである。 よくよくエクセプションの中を見ると、全部awtの中。表示も何となく違うし、やはりJava2になったらawtではなく、Swingを使いなさいということなのだろう。まぁ、Swingを使えば、OSやらウインドウシステムが変わろうとどうしようと同じルック&フィールになるわけであるし、いろいろ面白い表示もできるようでもあるし。
  • どこぞで拾ってきた知識だと、Swingではフレームに直接コンポーネントを貼り付けるのではなくて、一旦Containerに貼り付けてからそれをJFrameに貼り付けろとなっているらしい。まぁ、今のソースも確かそんな感じにした筈なので、それもまた良しか。
  • JDK1.3のマニュアルをちょっと眺めたら、Pentium-166MHz以上で使えとのこと。そろそろ133MHzでは相手にしてもらないないか。ATマザーボード(当然、キーボードもATキーボード)、Pentium-133MHzだが、実に安定して動いてくれてお気に入りなのだけれどなぁ。
  • STマイクロエレクトロニクスのCD-ROMカタログ。1999年版が届いていたのだけれど、2000年版ができたというメールが到着。早速申し込んでおく。 とうとう、CD-ROM版に加えてDVD-ROM版までできたらしい。なるほど、CD-ROMも二枚構成dだったし、そろそろ配布メディアもDVDな時代なのか。Gバイト単位のカタログ配布というのも、考えてみるとすごいこと。
11月29日
  • 仕事上必要に迫られて、半導体関係の資料を探していたら書籍のサイトにヒット。この手の本というのは結構教科書的なものが多かったりするのだが、目次を見た感じでは結構面白そうである。よくよく眺めたら初版が2000年11月というから、新刊本。これなら割と最近の事情についても触れてあるだろうと、早速注文してみることに。注文ページに住所氏名を書いて、さてどの位で着くのかと思ったら「当日5時迄なら即日発送」とのこと。なかなかよろしいではないか。
  • 9:55に注文したら、11:35に「仮受付」、更に14:58には「ご注文商品発送のご連絡」。48時間以内に商品到着ということである。便利と言うべきか、立ち読みもできないのは味気ないというべきかわからないが、とりあえず今回は「便利」にマル。
  • 原稿書き足し。急いで仕上げていた前半部分だが、やはり見直すと荒さが目立つ。これでは本になった後自分で読んでも楽しく無いので、資料をかき集めて書き足し。図版も大幅に追加することにした。
  • 先日古本屋に行った時に何気なく買った洋書。とは言っても、ペーパーバックで何となく表紙につられて買ったのだけど、パトリシア・コーンウェルの「検死官」とやらで、結構売れた本らしい。日本語訳も出ているそうなので、読み比べたら面白い気がする。単語はそれほど難しいと思わなかったのだけど、やっぱり読んでみると良くわからない。先日の翻訳サイトに放り込んでみると、何となく分かるような奇妙な訳になったりもするけれど、単語や熟語を一応拾ってきてくれるので世話がない。明らかに妙な単語に訳してしまうこともあるのだが。
  • ふと、翻訳サイトを眺めていて思ったこと。「同じ言語に変換する」というのはあまり聞かないな。要は言い換える、もっと平易な表現に変換する・・ということなのだけれど、そういうのは研究対象として面白くないのだろうか。
11月30日
  • 昨日頼んだ本が到着。代金引換でハンコ押して終わり。結局総額は本屋で買ったときと同じ値段に送料150円が上積みされるだけである。代引き手数料その他はかからない。開けたら、本と一緒に来年のカレンダーが入っていた。150円のカレンダーだと思えば悪い気はしないか。
  • 今回頼んだ先はコンピュータ書籍専門サイトのシーブック24ドットコムというところだったようだ。今時「ドットコム」を付けているあたりはちょっとナニではあるけれど。
  • 日米自動車協議だそうで。米国の貿易赤字が大きくてアメ車が売れないのは市場開放が進んでいないからだという主張のようだが、はっきり言って、今アメ車を買おうと思うのがどれだけいるだろう。市場が閉鎖的というなら、ドイツ車の売れ行きが好調なのはどう説明する気なのだろうか。
  • いろいろ原因はあるだろうが、試しに各外国車メーカを並べて「乗ってみたいメーカ順」投票でもしてみれば良いではないか。売れない理由は一目瞭然だろう。

戻る