「TGscript」に関する日記(3)

<前 次>

新掲示板仮運用開始

TGBBS、表示処理も無事出来上がり、一応は運用可能な状態になりました。
パスワードを使っての書き込み削除や、自分のIDを323にできないので、まだ正式運用というわけにはいきませんが、それでも以前の掲示板よりは充実しているので、とりあえず従来の掲示板と並行して運用していきたいと思います。
表示処理のほかには、内部的にスクランブルしたデータの扱いを簡便化して、なおかつ怪しい投稿に対してはエラーを出す処理を作りました。
ちなみにこの掲示板では、エラーが起こった場合は書き込みフォームが復元され、エラーの原因を取り除いてから再度送信すると投稿成功するようになっています。
ですから、やろうと思えば迷惑書き込みと呼ばれるようなものも無理やり通すことができるのですが、そこまでして書き込みたいなら止めはしないというスタンスをとることにしています。

一社目は落ちました

TGBBSの返信処理が出来上がりました!
ちょっと表示処理に問題ありですが、内容的には結構いけてるみたいです。
表示処理を調整したらアップしましょうかね。

昨日は仮免受かったのだ

NeoMupl、MIDI再生中はMIDIポートを変更させないようにしました。
MIDI再生中にポートを変更すると前のポートでの音が鳴ったまま次のポートへ続きからMIDIメッセージが送られるので、前のポートで最後に鳴っていた音が鳴りっぱなしになりつつ次のポートでの演奏は情報不足のためどんな音がなるかわからないという状態になっていました。
それと、削除の高速化もしました。
.NETのListBoxは項目を上書きしようとしたとき、項目の内容が同じだった場合は上書きはしないという仕様だったらしく、できるだけ項目の上書きが少なくなるように削除する場所を調整したら劇的に速くなりました。
以前のアルゴリズムだと削除した項目より後を全部変更していたので最初のほうの項目を削除するとかなり表示に時間がかかっていました。

TGBBSは、スレッド表示ができたので、返信フォームと返信処理を作成中です。

続・表示処理

TGBBSのトップページ表示処理は出来上がりまして、今度はスレッド内容の表示に取り掛かっています。
TBBSとのわりとはっきりした違いは、トップページの最新記事の扱いが大きくなっているところです。
つまり、最新記事の部分だけでも掲示板として成り立つということです。
スレッド表示も中途半端ですがアップしておきました。

表示処理

TGBBSの表示処理を作ってます。
とりあえず今のところはスレッド情報をスレ主ごとに整理した情報を元にアイコンと名前を表示するところまでうまい具合にできています。
うまくいけば明日中にでも何らかの画面を出せるかも。

表示処理作り始めました

TGBBSに昨日入れ忘れてた最新情報更新機能を入れて、いよいよ表示処理に取り掛かり始めました。
しかし結構複雑なプログラムになっているのでちょっと大変なところがあります。
Perlで書かれたGBBSを見ながらですが細かいところの違いなども気になったりします。

新しいヘッドホン

今日新しいヘッドホンを買ってきました。
これまでに3つ壊れたので今回は丈夫そうなのを選びました。
特に頭にかぶせる部分のプラスチック部品が割れてしまいやすかったので材質重視で、力のかかる部分にあまりプラスチックが使われていないものにしました。

TGBBSの新規スレッド作成処理ができました。
ただし、表示処理がまだできていないためアップはしていません。
表示処理自体はGBBSとほぼ同じにしようと思っています。

Bomber丸Worldのテスト用プログラムをデモ版としてWikiにいくつかアップしました。
できたできたといっていながら、どこまでできたのか周りの人にはわかりにくいので、他の人のマシンで動くかどうかのテストもかねて、みんなに一部分でも見てもらうことにしたのです。
これでおそらくプログラム担当は私一人になるんでしょうね。
あと、このソフトは複数人での開発にしたいため、何らかの形でネットワークでつなげてファイルを常に最新に保つ方法を考えています。

掲示板がずっと書きこめなかったことについて

掲示板にも書きましたが、今運用しているほうの掲示板で、2月17日に書き込みロックがかかって元に戻らない状態になっていたことに気付かず、本日まで書き込みができない状態になっていました。
この問題はロックファイルに異常があったときの修復処理を忘れていたためで、そのあたりも含めて今後はファイル破損関係の事故に気をつけて作っていこうと思っています。

TGBBSは投稿処理を作っているところです。
基本的にGBBSと同じシステムなので旧掲示板のソースを見ながら作っています。

スレッド作成作成中

今日トイレに行ったらいきなり顔に蜘蛛が降ってきました。
それはそうと、TGBBSの新規スレッド作成処理を作っています。
プロフィールへの反映は本家プロフィールの処理からコピーしてきたので、次は記事内容本体を作る事になります。
本当はパスワード処理なども入れたいのですが、方法についてまだ決まっていない部分があるので後で拡張するようにしようと考えています。

見つかりません。病室は存在しないか、場所を間違えています。

スクリプトのことについてですが、よく考えたらこのスクリプトは任意の位置で一時停止できなければ役に立たないので、途中で止めることが困難なツリー構造から実行する形式は見直す必要があるかもしれません。
そうなればツリーのノード本位な今の設計も根本的に見直す必要があり、今度は大幅な変更が来るかもしれません。

で、今日はスクリプト自体は特に触らなかったので、TGBBSの開発を始めてみました。
ファイル形式などはまだ決まっていませんが、ユーザーから受け取るべきデータはほぼ決まりきっているので、投稿フォームから先に作り始めています。
しかし…フォームの位置がランダムに入れ替わるというのは少し面倒かもしれませんね…。
迷惑書き込み対策になるかどうかも未知数だし…。

Bomber丸Worldの施設の一つとして、病院というものを考えてみました。
元々4と死を結び付けない文化なので、3階と5階の間には4階があって病室になっています。
ただ、死とは関係なく、少しおかしい病室になっています。

SMFだから

NeoMupl、DirectMusicで再生するときMIDIリセットを入れないと具合が悪いので入れてみたら別のところでまたまずかったのでSetStandardMidiFileを使ってみたのですが、これもこれでまずいことがあるようでした。
どうすればいいんでしょうね。

TGBBS、過去の日記を見ればどういう風に開発してるのかわかるじゃないかと思って調べてみたら、うまくタグ付けできてなくて思うように検索できませんでした。
残念。

TGBBSをどうすべきか忘れた

MeteonCaptorをバージョンアップしました。
先日見つけたキー操作での記録のみにしていると動作しなくなるバグの修正、手を抜いて全部全角ファイル名にしていたのを全角に変換するのを最小限にとどめる拡張、連続写真を撮ったときに同じファイルに上書きしてしまう現象の回避のためにファイル名に秒数まで含める仕様変更、の3つが変更点です。

久々にTGscriptをさわってみたのですが、かなり忘れてしまっていますね…。
何をやっているのかは今までのソースを読めばわかることとして、これから何をやっていこうかという具体的な方針がどうしても思い出せないのがつらいところです。
削除がしたくても出来ない現在のGBBSの教訓を踏まえて何かをやろうとしてたんですが…。

クッキーにまでバックスラッシュつけなくてもいいのに

プロフィールの基本機能がひとまず出来上がりました。
まず、スパム対策のためフォームはname属性をスクランブルした上、フォームの並び順そのものもシャッフルして、コンピュータから見てほとんど意味のわからない、しかしそれでいて人間から見ればあまり違和感のないインターフェースにすることができました。
しかもこのスクランブル&シャッフルはフォームの構成をパラメータとして渡せば掲示板などにも応用できる優れものです。
しかも、色やアイコンを選ぶフォームは設定から自動的に内容を調べてきて適切な表示ができるように、ことにアイコンについてはJavaScriptを利用して項目を切り替えるたびにアイコンのプレビューが出るようにしました。
で、それで、いよいよプロフィール書き込みを作ろうかと思って作ったところ、記録されるには記録されたようなのですが、画面に反映されないんですよね。
どうにも特定のIDのときにクッキーに保存したデータが読み出せなかったみたいなんですね。
暗号化が悪かったのか、復号処理に問題があったのか、それともシリアライズがおかしかったのか、見当もつかなかったんですよ。
それで、とりあえず全ての元凶を暗号・復号処理だと決め付けて、それらの処理を取っ払ってみたところ、やっぱりうまくいかなかったんですね。
でも暗号化されていない分、記録されたデータは丸見えだからクッキーの内容を記録した変数を見ればわかるだろうと思ったんですよ。
すると、データ中には不自然な「\"」があったというわけです。
どうやらPHPはクッキーのデータに対しても特殊文字をバックスラッシュでエスケープする機能がついていたらしく、暗号化されたら暗号化されたで暗号化された結果が特殊文字だったり、しなかったらしなかったでデータ中に元々あった特殊文字がエスケープされ、うまく動かなかったというわけです。
そんなわけで、めでたく動くようになったはずなのでよろしければ試してみてください~。

メタルを逃がせ!

ドラクエ8やってました。
ちょっとした発見です。
おどかして追い払った敵からは経験値はもらえないがアイテムはもらえる、というのはよく知られたことですが、メタル系の敵はおどかし損ねたときに自らの意思で逃げることはしないのです。
つまり、普通に戦えばアイテムごと逃げられて得られなかったアイテムも、おどかして逃がせば手に入る可能性が高くなるのです。
だから、経験値よりもアイテムがほしい場合なんかは、下手に戦うよりもおどかしたほうが確実ということになるのです。
もっとも、レベルも上げたいので普通に戦いましたが。

PHPのarray_merge関数、仕様上重複する配列の要素が配列だった場合、古い配列は新しい配列でそっくり置き換えられて古い配列は残らなくなりますが、その点を改善して重複する配列の要素が配列だった場合、更にその配列同士をmergeする、mixed_mergeを作ってみました。
添字が数値だった場合array_mergeと全く異なる挙動を示すのが少し問題ですが、まあ、そっちのほうがTGscriptには合っているので。

プロフィール表示とか

TGscriptのプロフィール関連の処理を作っていました。
今回はクッキーからのID読み出しと書き込み、そして対応するプロフィールの表示を作りました。
クッキーは簡単にですが暗号化されていて、IDの捏造はしにくくなっています。
今度はプロフィールを実際に編集できるようにしてみたいと思っています。

地味な処理

はいはい。
それで、いきなり流れをぶった切ってTGscriptの開発を進めたりしていたのです。
今回やったのはプロフィール読み書きの一番中核部分です。
本当に、IDがいくつだったら開くファイルは何とか、ファイルを開いたらデータをキャッシュに一時入れるとか、プロフィールを閉じるときはデータが更新されているなら自動で保存も行うとか、ほんとそんなところばかり作ってました。
キャッシュに入れる、というのは、例えば掲示板などにおいては、何人かが話しているわけで、何人かのデータをメモリ上においておけばいちいち何度も同じ人のデータを開く必要がなくなるわけです。
だからといって全員ずっと保存しっぱなしだったらメモリが足りなくなってしまうのである程度数が増えたら見切りをつけて適当にデータを閉じます。

浮き沈みリンク集

自分用リンク集PHPの削除機能ができて、ついでにパスワードで編集制限する機能もつけたので、これで事実上完成となり、もしかしたら人様のためにも使えるかもしれないと思ったので、明日アップしようと思います。
今回、いつものCGI・PHPとは異なる方法で作っていて、大きなプログラム本体を、小さな設定ファイルから呼び出す形式になっていて、普通のCGI・PHPとは異なるつくりになっています。
こうした理由は、プログラムひとつで設定ファイルだけを複数用意することで簡単に同じリンク集をいくつも作れるというのがあり、また、PHPを呼び出す前処理・後処理も自由に作れるようになるためというのもあります。
TGscriptもこの方式でいこうかなとも考えてます。
こちらも複数用意する必要性が出てくるかもしれないので。

技を超えた純粋な強さ。それがパワーだ!!

スマブラDXのシンプルモードを全員EASYでクリアしました。
今まではVERYEASYでしかクリアしてないキャラが多かったので合計点のアイコンがVERYEASYを示す青色だったんですよ。
この色をEASYを示す緑色に変えようというわけで。
ポケモン軍団はピチューが先にNORMALでクリアしていたという手前意地でもNORMALでクレイジーハンドと戦いましたが。
今まで甘く見てたけどガノンドロフはかなり強そうです。
4人目のVERYHARD達成者になるかもしれません。
遅さを補って余りあるパワーですよ。

そういえば秀丸がまたメジャーバージョンアップしてました。
今度は最近の開発ツールではよくあるプログラムのまとまりの折りたたみ機能がついていました。
少々Perlのヒアドキュメントに弱い感がありますが、そこそこ使えそうではあります。

一昨日のミディビに続いてGBBSも迷惑書き込み対策をつけました。
ほぼミディビのコピーですが、掲示板のシステム上こちらは書き直しがきかなくなってしまいました。
なんというか、事実上開発終了なのであんまり大きな仕様変更をするつもりはないんですよ。
というわけでもっとしっかりした対策は次のTGBBSからですね。

IDの数値

TGscriptのIDをどうするか考えていました。
例えばIDをファイル名として記録していた場合、不正利用者がLinuxのコマンドをIDの代わりに送信してきた場合に非常にまずいことになるのです。
ですから通常CGIなどでは外部からの入力をそのままファイル名として開くようなことはしません。
しかし今回はたくさんあるかもしれないIDをファイル名として扱ったほうが非常に都合がいいと思われるのです。
そこで、IDを数字にすることで、コマンド実行をできなくすることにしました。
もちろん数字じゃなくてもコマンド実行をできなくすることは簡単ですが、ID生成のとき乱数をそのまま使えたり、IDに使われる文字の種類が少ないというだけでも充分に意味はあります。
さらに、ID偽装防止のためのキーも用意したりしました。
もっとも、ID偽装防止のキーを使うのはIDを使って悪さができる段階、つまり書き込みのタイミングのみですが。

空白の3年間

αゲームズのページを作ろうと色々やっていたのですが、ランキングのこととか、それぞればらばらのバージョンをどう統一するかなど、気になる部分が数多くあったのでなかなか作業が進みませんでした。
ファイル名に関しては全部全くばらばらだったので重複の心配は無かったのですけどね。

TGscriptの小吹き出しを改善しました。
これでFireFoxでもそれなりの表示ができますし、IEでもより見やすくなりました。
もっとも、FireFoxのほうではなぜか存在しないはずのスペースが表示されてしまって少し困っているのですが。
あと、表面上は何も起こっていませんが、共通処理と設定のファイルを分けました。
これは動作の変更をしたいときに設定の下までスクロールするのが面倒だったという、ただそれだけのことです。

昨日のMIDIをもうちょっとマシになるように改良していました。
この曲は聞いたとおりの曲名で、曲名通りの相手と戦うときのBGMだったりします。

マザー3のニューヨクバの画像からただのヨクバの戦闘画面風のドット絵を作ってみました。
どうせヨクバと戦うならサルサVSヨクバの夢の対決にしてみようじゃないかとか、サルサが戦うならいっそサルコも参戦させようじゃないかとか考えて作ってみました。
たぶん状況から考えて空白の3年間の出来事でしょうね。

1162133358.png

<前 次>