アカホのナニな日々


7月8日

ヘルプファイルとして「コンパイル済みHTML」とかいう、 拡張子chmのファイルが最近よく見られる。 「猫でもできるプログラミング」の「Windows SDK編 第3部 第284章」にも、 アプリケーションからこのファイルを開く方法が載っている。 リンクしたいところだが、トップページの断り書きからすると恐らく無断リンクなど論外であろう。

MSDN LibraryからHTML Help Workshop をダウンロードし、インストールするとコンパイル済みHTMLファイルを扱うための includeファイルとlibファイルが入手できるようだ。しかしVisual C++版しか無いような気が…。 ライブラリ変換ツールが使えるかも知れないが、そこまでしたくもなし。

何分C++Builder 3は、Windows 98も出ていない98年春に購入した物なので、 こういう新しいフォーマットを扱うのは困難なことになっていくだろう。 当面は古くからのwinhelpか、生のHTMLファイルを使うのが無難か。


7月11日

台風一過、完膚無きまでの晴れ上がり。 室内で「まるで今の私の心のようだ…ニヤリ」と微笑んでいるのも不健康な話なので、 外に出て日光を浴び、ついでに夏用掛け布団を洗濯。 しかし午後になると急に曇ってきていやん。


7月13日

テキストエディタのxyzzyを使ってみる。 C言語モードのインデント幅を4に変えるには、インストールディレクトリの下に 「xyzzy/site-lisp/siteinit.l」というファイルを置いてそこに 「(setq c-indent-level 4)」と書けばいいらしい。 ここまで調べるのも面倒だった。 空のファイルでも置いてくれればいいのに自分で新規作成しないといけない。

しかし何度ソースファイルを開いてもインデントは2のまま。 「ESC-x byte-compile-file」と入力してファイルsiteinit.lを指定し、 siteinit.lcを作成(こうすると読み込みが早くなるらしい)しても、やはり変わらず。

しかし結局はxyzzy.wxpというファイル(設定のキャッシュか?)を一度削除する必要があるようだ。 拡張子は環境によってw95やw98になるらしい。 http://www.netlaputa.ne.jp/~henmi/lisp/xyzzy/intro/971012c.htmlこのページの最後の一行が!初心者には!高すぎる壁!


7月17日

恒例のアルファ100円デーで借りたB(C?)級SF映画「ピッチブラック」を見る。 3年ぐらい前は午前2時過ぎに行って、当日返しの安いレンタルを利用したものだが…… さすがに今は昼夜を逆転させる度胸というものがない。

さて映画の内容は、エイリアンに一人ずつ殺されるというありがちなものだが、 最後まで誰が生き残るか分からないストーリーで、 特に目立った突っ込み所も見つけられずそれなりに楽しめた。


7月19日

S&Bの「スープカレー・チキン」を食べる。 文字通りのスープカレーだが、大粒のじゃがいも・にんじん・鶏肉が入っていてなかなか食いでがある。 これはカワチで200円強で、少々値が張るのが難点か。


7月20日

うなぎを食べる日である。 奮発してジャスコで鹿児島産養殖うなぎを買ったが、 電子レンジが無いがゆえにオーブントースターで温めたのが失敗の元、焦がしてしまった。 ああ〜実につまらない話だ、発泡酒と共においしく食べたが。


7月21日

真珠湾攻撃を題材にした映画「トラ・トラ・トラ」をレンタルで見る。 例のバカ映画と一瞬でも比べた己の不明を深く恥じざるを得なかった。


7月23日

ふと思い立ってJavaのベンチマークを探すと、これが意外と見つからない。 見つかってもiアプリ対応携帯用だったりする。 CaffeineMarkというのが結構有名所らしいが、 自分のマシンを測っても速いのかどうかよく分からない。HDBENCHのように結果報告リストがあれば良いのだが。


7月27日

数日前からC++で開発していた、とあるWindows用アプリケーションをJavaアプレットに移植してみた。 移植自体はコードを単純にコピーして書き換えるだけなので2日で大体できたのだが、 Webブラウザで動かそうとすると全く動かない。

最初は「まあよくあることだろう。FAQにでも載っているかな」と思って調べていたのだが、 どうもJDK 1.2以降に追加された機能を使っていると多くのブラウザで動作しないようだ。 IE6.0でさえComparableやList等がロードできないというエラーになる。 完全インストールされたNetscape 6やHotJavaでは動くかもしれない。

Webで検索してみると、環境によってVM(Java 仮想マシン)の挙動がかなり違うのには多くの人が泣かされているようだ。 話には聞いていたが自分で味わってみるとまた実感が違う。 SunのサイトからJava Platform をダウンロードしてインストールすればいいのだが、そんな事をわざわざやらない人も多いだろうからやはり駄目だ。

そんなわけで随分逡巡したが、IE 5.0以降とNetscape 4.78で動かすことを目標に、JDK 1.1で開発することにした。 全くBorland JBuilder 6の名が泣く。 公式サイトのWebブラウザのアプレット対応状況は情報が古いし(八つ当たり)。

今日役に立ったページ(例によって無断リンク):
JDK 1.1/Java 2のブラウザ別対応状況
JARガイド


7月28日

月末ゆえ、所持金が163円になってしまった。予備費も全く無いという状況は久しぶりのことである。 これでは風呂にも入れないので、段ボール一箱の漫画・書籍をよみがえるに売って、760円を得る。


7月29日

JDK 1.1以前の機能だけを使ってJavaアプレットを作り直す。 次から次へとやれこのクラスは無いだの、このメソッドは無いだの、未知のエンコーディング方式だの、 色んなエラーを起こしてくれたが「よしよしこのボロVMめが…」と笑って許す余裕が出てきた。

ようやく無事に動いたが、「おおおおおおおおお、お、お、重い!」と驚愕せざるを得なかった。 JBuilder付属のアプレットビューアでは結構実用的な速さで動くのに、Internet Exproler で動かすと体感で5倍ほど動作が遅い。 単純な問題であるだけに困った。


7月30日

突然JBuilderが起動しなくなった。 JBuilderは落ちるときには何もエラーメッセージを出さずに、 いつの間にかプロセスが消えているという具合であるので、どうも困る。

Borlandのサイトを見ても該当する事例が無いので、手っ取り早くアンインストールして再インストールしようとした。 すると「failed to assertion」というエラーメッセージが出てアンインストールできない。 しょうがないので上書きインストールしようとすると、全く同じエラーが出てインストールできない。

まさに進退窮まったわけで、反Windows派の作るジョークもまんざら非現実的でないように思えてきた。

そこでWindows 98にJBuilderをインストールし、全てのファイルをXP側にコピーしてみた。 しかし事態は全く変わらないので、レジストリの問題ではないかと思い、 レジストリエディタで"JBuilder"というキーを持つ項目を全て削除する。 しかし事態は1ミリたりとも微動だにしていないので、Windowsのどこかが変になったと結論づける。

そこであまり期待はせずにNorton System Worksでディスク診断やウィルススキャンをやり、 またWindowsのシステム復元機能を適用してみた。が、まあ予想通り事態は変わらず。

結局はWindows XPのCD-ROMで起動してシステム修復を行った。 Windows 95,98などの上書き再インストールよりもずっと手間がなく、この機能は随分評価できる。 ハードウェアの更新をやらない分にはXPもかなり使いやすいものではなかろうか。 しかしこんな事を考えること自体Windowsに慣らされてしまったということだろう。


8月2日

Javaのグラフィックは結構遅い。PC-9801時代の描画テクニックをまた思い出す日が来ようとは…。 しかし98と違うのは、メモリが潤沢に使えることだ。 例えばRPGのマップ画面を巨大な一枚絵にあらかじめ描いておくこともできるのである。


8月4日

そうか…Javaの配列にはlengthというのがあったんだっけなあ…。 length()と書いてメソッド扱いしてコンパイルエラーになったり、 char配列で表現した文字列の終端に'\0'をくっつけて変な文字が出て悩んだり… 下らないことで悩んだり検索するのも馬鹿馬鹿しいので、何か本を一冊買うか。


8月6日

3年ほど前に、友人からその後輩が筑波山に遠足した話を聞いた。 それによると筑波大の位置から筑波山まで歩いて行き、山登りの後再び歩いて帰ってきたという。

以来、私もこれをやりたいものだと考え続けてきたが、学生生活最後の夏休みになるに及んで行動に移す気になった。 一人では何だとすぎ氏を誘ってみたが、「自転車ならなあ…」と非常に気の進まない様子。 まあ私も同じ事を他人から誘われたら99%やる気にならないであろう。

7:20 平砂出発

10:30 筑波駅到着(20分休憩)

11:45 筑波山神社到着(15分休憩)

13:00 筑波駅に戻る
13:30
↓(バス 700円)
14:10 平砂帰還

筑波駅には、立派なトイレ付きの休憩所ができていて助かった。 しかし筑波山神社に着いた時点でもはや山に登る気力は無くなっていた。うむ恥ずかしい。 一人で行って良かった…。

とにかく夏にこの企画は無理だ(少なくとも私には)。 というか、国道沿いに行くと排気ガスを思い切り吸うので、面倒でも地図を見て車通りの少ない道をたどるべきだろう。


8月7日

朝起きると、ひどい腰痛。腰を曲げたりひねったりすると筋肉痛に似た痛みが走る。 さらには腕の日焼けがひりひりする。

腰痛の中、フリーウェア「ファーレントゥーガ」にはまる。 戦闘の際の操作が慣れるまではまだるっこしいが、非常に面白く、気が付けば一日を費やしている。


8月8日

まだ腰痛。予想に反して脚には筋肉痛のかけらもない。……まあ3日ぐらい経ってから来るかもしれないが……。


8月9日

腰痛はおさまった。 筋肉痛が来なかったのは幸いなことだが、しかし腰痛というのは考えてみれば、かなり洒落にならないような気がする。

Javaアプレットの製作を続けている。IEでも実用的な速さで動くようになった。 しかし私のマシンはAthlon 1.0GHzで、まだ世間一般からすれば速い部類に入るだろう。 例えば研究室にあるPentium III 600MHzのマシンも十分に現役なわけだが、もしかするとこれを動かすにはつらいかもしれない。

しかしその辺りは開き直った。はっきり言ってJavaという言語と豊富なライブラリは魅力的だ。 そんなわけで最悪、HotJavaでしか動かないような物になってもJavaで作り続ける所存。


8月19日

まだ長々とJavaに手こずり続けている。 今は自分がローカルでだけ使う予定のプログラムを作っているのだが、Component のレイアウトが面倒くさい。 モードによって Component が出たり消えたりし、その度 doLayout() でレイアウトのやり直しを要求するのだが、 思い通りのレイアウトを得るのは難しく、場合によっては重なり合ってしまったりする。

そこでもう表示と非表示を切り替えるのはやめにして、JTabbedPane を使ってタブでページを切り替えることにした。 ついでに自分だけが使うものであるので、awtから全面的にswingに移行することにした。

するとまあ当たり前かも知れないが、メソッドの名前や仕組みが随分違う。 チェックボックスなどは単純だから大丈夫だろうと思ったら、チェックされているかどうかを返す getState() が無い。 そんなはずはなかろうと探し回ると、すぐ上のクラス AbstractButton に setSelected() がある。 しかし getSelected() が無い。さらに探し、ようやく isSelected() を見つけた。

Webで検索すると ItemListener を使ったイベントによる例ばっかり出てくるのだ。 あなたたちはそうしてイベントで状態を得ればいいと思ってるんだろうけど、 状態をプログラムから設定するのはどうする気なんですか全く…と言いたい(八つ当たり)。


8月19日

またJavaで悩む。今日はファイルの選択ダイアログを FileDialog から JFileChooser に替えたが、 これを new で作った時、Aドライブ(FDD)が動作し、 「ドライブにディスクが入っていません。ディスクを挿入して下さい」などとエラーメッセージが表示される。

検索しても該当事例が見つからないので、ああもう面倒くさいからいいや、起動する時だけだし。 ふと思いついてコンストラクタに初期パスを渡してみたが現象は変わらず。


8月22日

風呂上がり、爪を切ろうとすると足の小指の皮がむけている。 「はて水ぶくれか?」とよく見ると水虫らしい。 長年共用風呂を利用してきたが感染は初めてである。

というわけでセンター近くにある「つくば三井ビル皮膚科」「高瀬皮膚科医院」「かわごえ皮膚科クリニック」 をWebでピックアップ。 しかし考えてみると今月の生活費は苦しいのだ…。来月にしようか?


8月23日

ずっと作り続けているJavaプログラムも漸く一段落。 何を作っているかと言えばRPGで、C++で書いていたWindows版をJavaに移行してやろうというわけだ。

RPGのイベントを記述する方法としては、何らかのスクリプト言語を用いるのが一番いい方法だ。 が、これをやるには色々な技術と労力が必要なので、理想はいったん放棄し、 イベントの内容は直接プログラムコードで書くことにした。 ということを随分以前にこの日記に書いた。

Javaでもその考え方は継承し、やはり直接コードで書くことにした。 違う点はイベントコードだけ別の Thread で実行することで、排他制御が面倒だがまあ動く。 Javaには関数のポインタに当たる物が無いと思っていたのだが、 getClass().getMethod() で Method の参照を得て Method.invoke() で実行できるということを知ったりした。

そんなこんなで一応きちんと動く物ができたが、RPGとして作り上げるためには アイテム等のメニューとか戦闘システムとかを入れねばならぬし、どうも先は長い。


8月24日

RPGなどのイベントの記述は、やはりスクリプト言語を使うのが理想的なのである。 そこで言語による分岐などの制御を独立した一つのシステムにする、という構想を打ち出した事がある。

同じ事を考える人は居るに違いないので、そういうライブラリは無いものかと探し回ってもいる。 しかしまだAyukate汎用インタプリタというのしか見つかっていない。 動作実績がないと…。


8月26日

今日は、Javaアプレットでのゲームで、セーブとロードをどう実現するかについて考えたり調べたりした。

最初は例によって先人達の使っている方法を探したが、意外とセーブの必要なゲームが見つからない。 シフトアップネットにある、 Flashで作られたゲーム「ねおきでクエスト」にはまりつつヒントを得たりした。

3つの方法を考えた。

3番目が最も理想的だが難しそうだ。Cookieは時間経過で消えるので論外。 そんなわけで2番目の実用化について更に検討してみた。 Javaアプレットからクリップボードにアクセスできればなお良いのだが。JavaScriptにはできるのに。

問題は復活の呪文の生成方法だが、結論から言えば、ZIP形式で圧縮されたバイト列を 適当にアスキー文字列にエンコードするのが楽かと思う。

更に具体的に言えば、java.util.zip.ZipOutputStream に、自作の OutputStream 継承クラスを渡す。 このクラスは受け取ったバイト列をエンコードしてしかるべき所に出力する。 24bitずつ英数字と記号の4文字に割り当てるBase64が簡単そうだ…。


8月31日

Base64のエンコーダとデコーダを作る。 エンコード過程で何故か化ける部分があるのでかなり悩む。 byte型をint型に暗黙キャストするのは別にコンパイルエラーは出ないのだが、 符合付きのためにキャスト後の値の上位ビットが1で埋められてしまうようだ。

キャストする時に(unsigned)と修飾できても良さそうなものだが、できないようなので キャスト後に0xffとのビット積を取ることで解決。 むしろエンコーダとデコーダがJavaの標準ライブラリにあれば楽なのに。


9月1日

Windows XPで格闘ゲームをやりたいので、ジョイスティックを買うことにし、 石丸で安直にサンワサプライの「アーケードスティック」2,980円を選んだ。 スケルトンで内部の安っぽい基盤が透けて見える。スケルトンは内部がかっこいい時のみ許される技よ。

USBハブに繋いでも何もメッセージが出てこないので、ハードウェア自動検出に失敗したかと思ったが、 ふとコントロールパネルを見ると既に使用可能な状態になっている。 さすがマイクロソフト(純粋にほめている)。


9月2日

ジョイスティックを使うために格闘ゲームを探す。少し順序が違う気もするが。 一時期、キン肉マンの格闘ゲームとか、8頭身ドラえもんが闘う格闘ゲームなどに はまったことがあるが、今はどんな作品があるのであろう。

格闘ゲームというジャンル自体、今は下火の感があるが、検索すると随分ボリュームのある作品が次々に見つかる。 私は格闘ゲームのシステムはブロッキングぐらいまでしか飲み込めてないので、シンプルなルールが望ましい…。


9月22日

ちょっと忙しくなると日記を書かなくなる。うーむ。 研究の発表をして少しだけ一段落。

私のソフトでは何かをセーブする時、INIファイル形式にしている。 ツリー構造にできない・入出力の効率が悪い等、色々問題があるのでXMLフォーマットを検討することにした。

まずはJavaで扱ってみようと思い、フリーのライブラリを探す。 IBMが作ったXMLパーサなどがあるようだが、オープンソースの Xercesというのを使ってみることにする。 しかしDOMとかSAXとか言われてもさっぱり分からないのだなあこれが。 などとキーワードを並べたりすると検索エンジンに引っかかったりして迷惑だろうなあこれが。


9月23日

一日中XMLの入出力クラスを作る。 まあかかった時間の半分ぐらいは「何かフリーのライブラリが絶対あるに違いない!」 と思って探し回るのに費やされた。が何故か見つからなかった。

XercesだかSAXだかは、巨大なXMLファイルをも扱えるように、メモリにはほんの一部分しか読み込まないようになっている。 「そうだなそれが理想的だな…」と最初はその仕様を生かそうとしたが、疲れるのでもうメモリにまとめて読み込むようにした。 それでもエレメントの検索のためのソートだとかに妙に時間を食った。

しかしこれで後からいいライブラリが見つかったりしたら泣くな全く。だからこそ手抜きしたのだ。うむ。


9月28日

今日は通販で買ったエプソンのプリンタPM-730Cが届いた。 プリンタのような大きな物は通販が便利なのだ。

昼過ぎ、目を覚ます10分前に宅配便が来たのがケチのつき始め。 19時過ぎに再配達があり、セットアップを始めると当たり前だがケーブルは付属品にない。

詳しく書いてもつまらないので割愛するが、次の順にケーブルを引っ張り出し、その度に失望を繰り返した。

明日長いUSBケーブルを買いに行こう。通販の意味が半減。


前のぺージに戻る