「ByteEdit」に関する日記(2)

<前 次>

マグ・メル

ダウンロードとHP作成論のページを全てHTML4.01Tで置き換えました。
これでメインとなるコンテンツはほぼ置き換えられたのでとりあえず完了ということにしておきます。

「ByteEdit」のクリップボード周りを作ってみました。
最初のうちは戻り値をStringで無理矢理受けようとしてエラーを起こしたり実はVB6で使っているUNICODEはNT系でしかクリップボードに渡せなかったり(普通のテキストとは別物として扱われる)で、なかなか試行錯誤させられましたが、結局試行錯誤を諦めてネットでサンプルを探しに行き、C言語のサンプルを見つけて都合のいい部分だけとってきてとりあえずそれっぽいものはできたわけですが、VBの画面からコピーしてきた文字列は全く認識できなかったりコピーを2・3回繰り返すと酷い文字化けを起こしたり普通にコピーしたのに貼り付けられなかったりと思いっきりバグだらけなのですが、VBのClipboardオブジェクトも挙動が怪しく、というよりは独自のクリップボードを持っているのかSetTextメソッドでコピーしたものはどうやら自アプリの中でしか通用しない模様で、一応メモ帳とか他の種類のエディタとのデータやりとりはしないにしてもの自分以外のByteEditとは最低限データのやりとりができないといけないわけで、そうなるとVB製アプリ同士ならデータのやりとりができるという都合のいいことになってはくれないだろうかと考えるわけですが、反面そうなると分が今までしてきた苦労は一体なんだったんだという話になってやっぱりそりゃだめかなと思いつつ、もしかしたらReDimじゃなくてGlobalAllocでメモリ確保しなきゃいけなかったのだろうかとか、にしちゃサンプルでは対応するGlobalFreeがなかったぞと思い、メモリリークを気にしながら、そもそもOLEクリップボードとか従来のクリップボードの違いがよく分かっていなかったりする自分に気づき、でも動けばどっちでもいいやといういつもの投げ遣りな姿勢がまた垣間見られ、それでもやっぱり期待通りの挙動を示してくれないクリップボードに悪戦苦闘しています。
今度クリップボードを簡単に扱うライブラリなんかがあったら使ってみよう。

やっぱりさっぱり

更新履歴とバナーのページと「Bomber丸World」のページを更新しました。
とはいっても、スタイルシートを適用しただけなので、内容に変更はありません。

「ByteEdit」のクリップボード周りをやってみたのですが、うまくいきません。
APIを使ってみたのですが、途中でエラーが起こってクリップボードが閉じられないまま強制終了され、クリップボードビューアは開けるはずのないクリップボードを際限なく開こうとし続けて、結局再起動せざるを得なくなりました。
OpenClipboard(hWnd)→GetClipboardData(CF_TEXT)→CloseClipboard()じゃダメなのかなぁ…

う~ん、幾何学の問題・・・2つの違う方法で求めた答えは違っていて普通だというのですが・・・・

  • 1088πと41πっていくらなんでも違いすぎ!

他の人は35πとか39πとか言ってましたが、きっとそっちのほうが正しいと思います…

授業中さっぱりわからなかった電子物理、テストではさっぱりわかりませんでした。
一応計算問題は適当に掛け算をやって単位をあわせて答えてみました。

ななひとに

というわけで、「ByteEdit」をアップしました。
メニューのバージョン情報が間違ったバージョンを表示していたのでそれも直しました。

ついでに、注意事項のダウンロード関連も変更しました。
いろいろと詳細を加えてみました。
ただ、長くなると読む気が失せるので、トップページから行ける全体的な注意事項に関しては、可能な限りいらない部分を削って、極力短くなるようにしました。

JavaのIteratorって、便利そうだけど、スーパークラスをひとつしか指定できないということを考えるとあまり使い道ないかも。
いや、インターフェースだから問題はないのか。
でもどっちにしても数え上げ専用のクラスを使ったほうがよさそうだから関係ないか。
数え上げの専用クラスを作るのはよくても、それで.classファイルが増えるのはやだなぁ。
どっちみち使うときはJARひとつにまとめるからあんまり関係ないのだけれども。

ない人

金曜日に落とした定期券が見つかりました。
どうやら途中乗換えをしたときに落としたようです。
で、その駅に定期券を取りに行くとき、今度は切符を落としてしまいました。
もちろんすぐ気付いて拾いましたが。
まあなんにしても定期券が見つかってよかったと思います。

「ByteEdit」の選択範囲の処理ができました。
行ごとに選択開始位置と終了位置を計算して範囲の大きさが0なら表示しない、細かい表示位置の調整にはカーソル位置の計算式を流用。
珍しくコードを書く前からアルゴリズムが決まっていたので別段大きな障害もなく、面倒そうな処理だったにもかかわらずまあまあ少ないコードで問題のあるバグもとりあえずないものができました。
右端の処理が甘いのですが、原因から考えると問題を起こすことは考えられず、見た目も著しく損なわれるというほどのものでもなかったので、そのまま放置することに決めました。
まあ、直すよう要望があれば直しますけどね。
明日か明後日あたりにアップします。

レックスウィリー強すぎです。
いや、「カービィのエアライド」の話ですけどね、戦うために生まれたはずのハイドラに向かってクイックスピンをすると、ぶっ壊れるまで終わることなく巻き込み続けることがあるんですよ。
1回のみならず2回までも。
見た目のゴツさでもハイドラと張り合いますし。
・・・・恐ろしい。

テレビの選挙速報と近所の花火大会が重なり、私は花火を見ていたため選挙速報を見られず、父は選挙速報から目が離せず楽しみにしていた花火を見損ね、弟はどちらにも興味を持たず本を読んでいました。

BE問題

「ByteEdit」の範囲選択の部分を作り始めました。
範囲選択そのものは実はver0.01の頃から実装されていたのですが、選択範囲の表示をどうしていいかわからなかったので今までは実装を外していました。
で、今考え付いたのは、表示されている各行について・・・・って言葉じゃ表現しにくいなぁ…
とにかく、そういうことで、変数を宣言してはみたものの、その変数をなんに使うかということを考えています。
その変数を何に使ったところで結局別の変数を使うことを必至なので考えたところで意味はないのですが。

デク人形のやることはわからん…

ドラクエ7で、ラスボスのところまでたどり着きました。
ただし、今回は別にクリアしようと思ってきたわけではなく、どこまで行けば後戻りできなくなるかを調べるために行ったので、別に勝つつもりはなく、思いっきり負けてみました。
闘いの記録(マリベル・アイラ・主人公・メルビン)
1ターン目:誘う踊り・怒涛の羊・メガンテ・へんてこ斬り
2ターン目:ザオリク・死の踊り・死亡・火炎斬り
3ターン目:死亡・死亡・メガザル・死亡
4ターン目:ステテコダンス・魔物馴らし・死亡・ザオラル
5ターン目:死亡・死亡・石つぶて・真空波
で、主人公の最後の悪足掻きのあと、マチルダを言いくるめた人物だとは思えない自称神の灼熱により全滅。

ドラクエの公式サイトでアンケートに答えたら、壁紙がもらえたんですが、なんだか壁紙として使いたくないもので、とりあえず設置方法でも見ておこうと思い、設置方法のウィンドウを開くと、そのページの背景のほうが壁紙にはピッタリだと思い、ダウンロードしてみました。

「ByteEdit」をバージョンアップしました。
エディタ関連のソフトを作っていると必ずほしくなるけどついつい作るのを忘れがちになるところです。
本当はHPマナーの「日記って…」を作るつもりでしたが、間に合いそうになかったので「ByteEdit」にしました。
すぐ付けられるような簡単な機能を、更新のネタに使うためにわざと付けておかないっていうのは…やっぱり卑怯ですかね?

範囲選択デラックス

「ByteEdit」の選択範囲の処理を作っていました。
とりあえず範囲選択はできるようになりましたが、選択範囲の表示ができないので、どこからどこまでが選択されているのかはわかりません。
背景色を変更して表示する方法はまだ考えていませんが、文字色だけを変える方法ならすぐにでもできそうです。

ゲームのページに「大乱闘スマッシュブラザーズDX」を追加しました。
前に日記に書いたものを流用しています。
絶空なんてできるわきゃねえ・・・

さむいさむいマウンテン

「BZ」というバイナリエディタをダウンロードしてきました。
まあまあ使いやすいけど、すごいってほどでもない。
ビットマップ表示はいまいち使えない。
基本的な読み書きは支障なくできるし楽。
置換ができない。
「ByteEdit」はこの「BZ」にない機能を重点的に作っていこうかと思っています。
バイト列置換、数値の出現頻度解析など。

で、「BZ」で「ふにゃ」を開いて、音楽ダイアログの部分を直接書き換えて、MP3も表示できるようにしました。
「BZ」の話はここまで。
そのあと、前からやろうと思っていた、氷のステージ全体マップを、作ってみました。
大きなマップも扱えるマップエディタとして、「RPG±0」が適当(1023x1023チップまで)だったので、テキストを出力できるように少し改造してから、全部のステージを入れてみました。
半端じゃなくでかいです。
マップチップ数にして298x54、幅9536ピクセル、高さ1728ピクセル、16色ビットマップで保存すると8MB、実際の大きさに換算すると90m前後、人間の大きさに換算すると500mを超えます。
山としては物足りないにしても、バナナを探すのには巨大です。
そういうことで、「RPG±0」のテキスト出力でできたものを加工して、HTML形式でアップしてみました(240KB)。
あと、これを作っているときにマップの構造に矛盾点が見つかったので、直しておきました。

どこぞの共和国は関係なし

「MusicPlayer」シリーズのページを更新しました。
ファイルを全部(HTMLページだけは残していますが)、専用のディレクトリに移動して、ページを統合しました。
あと、「ByteEdit」のページも更新しました。
検索エンジンがオンラインヘルプの中に入ってしまうと困ったことになってしまうので、リンクをボタン形式にして検索ロボットには入れないようにしたのです。

逆ポーランド記法なるものを学びました。
A+BをAB+と表記する方法です。
これのすごいところは、「A*(B+C)」などの括弧を含む式を、比較的簡単なアルゴリズムで「ABC+*」といった全て左からのみの括弧のない計算式に変換できるところです。
今度のゲームで使えるかも・・・・

あほ

ByteEdit」がHTMLヘルプに対応しました。
これからはトップの更新情報ではある程度更新内容の詳細を書くようにします。

TGWS」がリニューアルされたようです。
昔と比べたらややわかりやすくなった程度でいまだに意味不明ですが。
コマンド間違えただけで「あほ」呼ばわりはいい加減やめてほしい。

掲示板の一言PR、少しずつですが改良していっています。
PRを数件追加しました。
いまだに手作業での入力なのでかなり手間がかかります。

そのまた次は25日

「ByteEdit」がHTMLヘルプに対応しました。
とはいっても同じフォルダに"ByteEdit.chm"があればそれをアプリケーションのヘルプファイルに設定するだけという非常に簡易なものですが。
いいんです、F1キーで呼べさえすれば。
もしかしたらHTMLヘルプが表示できない環境や、ディスク容量をケチりたい人のために、実行ファイルのみのバージョンと、オンラインヘルプを用意しました。
昨日書いたとおりの理由で、あっという間にオンラインヘルプが出来ました。
とりあえず、更新タイミングの調整と、間違いがないか調べるため、少し間を空けて12日に更新します。

ダウンロードCGI

SuExec・.htaccess・CGIを使って、データのダウンロードは出来るが外部からの直リンクは出来ないというシステムを作ろうとしたのですが、なかなかうまくいきません。
今回はMIDIで試してみたのですが、WindowsMediaPlayerで不明なエラーが出て再生されないのです。
よく考えたら.htaccessを使っている時点で、"deny from all"、"allow from tgws.fromc.jp"でよさそうなものですが・・・・
元々.htaccessを使わずにしようと思っていたのに本末転倒かも・・・・
一応、「その他」→「MIDI」で見に行けます。

「ByteEdit」のHTMLヘルプが完成しました。
このようなHTMLヘルプを利用する最大のメリットは、コンパイルする前のHTMLファイルがそっくりそのままオンラインヘルプとして使えることです。
あとはプログラム本体をHTMLヘルプに対応させるだけです。

微分方程式

「応用解析学」のテストがありました。
はっきりいって微分方程式はつい2週間前まではチンプンカンプンだったのですが、今回のテストに向けて勉強(例題を数問解くだけ)したことで何とか問題を解けるぐらいにはわかるようになりました。
特にベルヌーイの方程式は、直前に公式だけを見ておいたのですが、それで驚くほど簡単に解けてしまいました。
その代わり全くやらなかった一次線形に帰着する方法は全滅。
まあいいか…

なんかXPに付属のメモ帳って余計な機能がついちゃってるみたいです。
なんせ長い文章を打つと勝手に改行が入りまくる。
とんでもない場所に勝手に改行が入るからものすごく読みづらくなるんですよ。
一昨日の「FFCC」の記録も変に改行が入りまくって非常にややこしい文体に。
直しましたよ、もちろん。

「ByteEdit」のヘルプを作っています。
メニューの解説を書いていますが、もっといい書き方があるので明日直します。

タクトのおまけクリア

連日のゲームクリアになりますが、「ゼルダの伝説-時のオカリナGC裏」を今日ついにクリアしました。
前回は、数ヶ月前に闇の神殿で小さな鍵が足りなくなったところで中断していたのですが、今回見つけることが出来たので一気に進めてみました。
とはいえ、ゼルダの伝説自体久しぶりだったので、何も考えずに進むとあっという間に瀕死。
妖精珠(大回復)がいくらでも出せるところで何とか命を取り留めました。
これも一応ネタバレに入るから隠しといたほうがいいかな?
で、船のところまでいって、スタルフォスとの戦いになったのですが、あえて反撃せず逃げ回ってみたら思いのほか大苦戦。
もういやになったので回転斬り20連発(推定)で葬り去りました。
・・・・のはいいのですが、今度は足を踏み外してやり直し。
今度はダメージを受けないようネールの愛で無敵状態を作って逃げ回ってみるとうまくいきました。
ボンゴボンゴについてはあまりにも普通なので省略。
そして今度はクリア寸前の魂の神殿に赴き、前半は炎攻撃のみ攻撃、後半は氷攻撃のみで倒しました。
そして倒した後はノーセーブで。
ガノン城は非常に難しくなっていました。
特に炎の結界が、アイテムの使い分けや微妙なスティックの扱いが非常に難しく、何よりゴロンの服が手に入らなくなって時間制限がついたので、数十回はやり直しさせられたのではないかと思います。
そして最後のガノンドロフ戦に。
空き瓶、ハンマー、折れたゴロン刀、マスターソード、ありとあらゆる跳ね返し可能アイテムを使って攻撃を跳ね返し、倒しました。
今回は珍しくウルトラ隙だらけスペシャル四連光球は放ってきませんでした。
ガノン戦も同様に、デクの実、爆弾、フックショット、何でもありで戦いました。
オススメの戦法は、ホバーブーツを履いてガノンの前に立ちはだかる→派手にぶっ飛ばされる→ダッシュしてくるガノンに向けてこちらからもダッシュ→あっという間に回り込み。

「ByteEdit」のHTMLヘルプを作り始めました。
うまく構成を考えれば、そのままオンラインマニュアルとしても掲載できそうな気がします。
オンライン用のHTMLとダウンロード用のCHMに分けるというアイディアがあります。

「自分に100質」を更新しました。
これでようやく半分です…

今日は休み

賑やかバナー、一応作ってはみたのですが、なんとも寂しい出来になってしまいました。
なんだか隙間が開きすぎ・・・
<img src="ban.png">

「自分に100質」を追加しました。
いまだに半分もいっていないのが現実ですが・・・・
いつになったら100の質問になるんだか。

「ByteEdit」の選択範囲の処理を作りました。
とはいえ、選択範囲の表現方法がまだ出来ていないため、どこからどこまでが選択範囲なのかわからず、しかもバグだらけなのでまだまだ作り上げられてはいないのですが。
本当にテキストボックスのすごさが実感できます。

掲示板のアイコンをひとつ増やしました。
「大文字軍団」です。
こんなすごそうな名前を付けておいて、実際はただの「ByteEdit」のアイコンです。

二周年記念!

「ByteEdit」を正式公開しました。
そこで、アップロード直前にとんでもないミスを発見!
アイコンの文字が「BITEEDIT」となっていたのです。
これは噛み付きエディタぢゃありませんってば!

「Q&A」で、不必要な</font>タグがあったので削除しました。
これでやや軽くなったかも・・・・

BWゴシップ更新・・・・
わからない人はわかりません。

ダウンロードページの一部に、今後の予定などを書くようにしました。
いや、こうしてどこかに書いておかないと忘れてしまってプログラミングが進まなくなるから・・・・

とりあえず実用的なフリーソフトが一つできたので、「秀丸フリー制度」を使うことにしました。
このために作ってきた「ByteEdit」でしたが・・・・って違いますよ!
この制度を知る前から作り始めてはいたんですから。

今日から大学の後期授業が始まりました。
今日は、ガリレイの相対性原理とか、コリオリの力とかをやりました。
明日は、最初から最後までびっしりと講義が詰まっています。

そうそう、「注意事項」も更新しました。

光以降有料です

「ByteEdit」で、セーブ機能を付けました。
何故か記録してはいけないところまで記録してしまったり、どういうわけか1バイト余計に書き込んでしまったりとなかなか時間がないというのにトラブル続きでした。
「記録しては…」の方は、既存のファイルにデータが残ったまま上書きしていたのが原因でした。
保存前にファイルをクリアして解決。
「1バイト余計に…」の方は、入力関連のバグでした。
入力・削除・保存・読み込みの、最低限の機能のみを搭載して、明日、公開です。

「CharaBox」で、登場作品別に分けているときに新たなゲームのキャラを追加するとエラーが起こるバグを修正。
ちなみに、その新たなゲームというのは、くらんくていんさんの「夢の女神戦」です。
最近フリーウェアになったそうなのでダウンロードしたのです(しかし、既に送金してしまった人の立場は…?)。
ところどころ好きになれない部分もありましたが、そこはやはり元々シェアウェアとして作られたもの、高い完成度です、お勧め。
主人公サーシャのおとぼけ具合とか意志の強さとかは結構好きです。
序盤からずっと付いてくるテリーザの技はなかなか頼れます、特にCHKDSKが最高。
しかし、師匠役に立たなかったなぁ、全然…
以下、ネタばれ含みます。
しかしまあ、サーシャも、オープニングでいきなり死んで、しかもすぐさま地獄へ直行とは哀れでしたねえ…
当然ゲームの展開上、生き返るわけですが、その後テリーザに取り憑かれて…
いやいや、体を乗っ取られたというわけでなく、共存ですよ、もちろん。
しかしこれじゃおちおち×××や△△△△もできませんね。

…って何考えてんだ!!

授業開始も10月1日

「ByteEdit」で、ついに編集ができるようになりました。
16進数でも10進数でも8進数でも2進数でも構わずバリバリ編集できます。
編集の途中でメニュー操作をするとバグッちゃいますが、編集終了のコードを一行付け足すだけで即解決できると思います。
とりあえず保存の処理とreadmeを作れば公開できそうです。
選択範囲の問題は後回し後回し…

CGIの管理モードへのリンクを全部はずしました。
もし万が一、文字通り万が一、管理パスワードと同じパスワードを使っている人がいて、そのうちの10人に一人ぐらいは管理モードに入ってみようと思う人がいるかもしれないので、セキュリティとデザインの関係から、管理モードへのリンクをはずしたのです。
それでも悪意のある人なら見つけてしまうでしょうが、誰でも簡単にクリックで認証画面に入れるということは避けられます。
私はアドレス直打ちか、TGWSトップから入れるので構いません。
極端な話、ログを直接いじれば管理画面すら要りませんし。

次の更新は10月1日

「ByteEdit」で、バイト列の挿入・削除処理を作りました。
この二つを組み合わせればすぐにでも置換処理ができるようになります。
これで削除ができるようになりました。
次は入力処理ですが、これについては既に構想ができているのでこれまたすぐにでもできそうな予感です。
今必要な機能の中で、一番難しそうなのは選択範囲の反転ですが、これができたら一気に切り取り・コピー・貼り付け・選択範囲の削除・すべて選択ができるようになります。
ま、10月までには完成させますよ。(・_・)v

しかし、これを作ってみてつくづく思ったんですが、オブジェクト指向ができないVB6ってこういうのにはあまり向きませんね。
一応クラスを作ってそのメンバにいろいろやらせればできそうな気もしますが、無意味にも思えます。
というわけで、オブジェクト指向言語「C#」をフリーの開発環境「SharpDevelop」で使ってみることにしました。
とりあえずは練習も兼ねて「ByteEdit」の拡張版「BytesEdit」を作ることにしました。
しかしC#って、見れば見るほどJavaに似てますね。

「バイオハザード2」で、「Extreme Battle」をやりました、例によって弟が。
一応目的を伝える程度にストーリーはありますが、本編のストーリーとの直接的な繋がりはありません。
で、恐ろしいことに、リッカー(中ボス)がたくさんいたり、タイラント(裏ボス)が二人でウロウロしていたり、G(ラスボス!)がどうでもいい場所に現れます。
しかもなぜか1のクリスが使えたり。

さらに日本語入力まで可能だから、TextBoxってやつは…

日記の過去ログをAAA!CAFEのCGIから落としてHDに保存しました。
で、それを後で加工しやすいように不要な文字をどんどん削除していって、残したくない日記も削除していったのにも関わらず、260KBものサイズになっていました。
これをさらにHTMLにするんだからこれからどれだけ膨れ上がることやら…
一行につき必ず4バイト以上増えるんですよ。
こりゃもう複数ページに分けるしかなさそうですね。

「キャラバンハート」で、「表示が遅い!」と苛々しながらプレイしていたのですが、先程表示速度の設定がうまくいっていなかったことが発覚しました。
これでストレスなく進めるようになったのですが、今度は必要以上に速くなってしまったらしく、かなり目まぐるしくなってしまいました。

「ByteEdit」で、カーソルの表示に成功しました。
カーソルを画面外まで移動させると、勿論それに合わせてスクロールします。
また、スクロールバーにフォーカスが移動しないようにして、編集しやすくしました。
こうしてエディタの編集部分を1から作ってみると、テキストボックスが如何にすごい技術であるかが実感できます。

<前 次>