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

<前 次>

地味な処理

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

BSch3V

ちゅうわけで浮き沈みリンク集更新できました。
同時にうちのサイトで使ってるリンク集CGIもアップロードしましたがこちらは不完全版ゆえ一般公開はまだしておりません。
またそのうちするつもりです。

そういえば、回路図エディタソフトBSch3Vを導入してみました。
ほんとこれ便利ですね。
これでもうペイントで描かなくて済みそうです。
しかもメタファイルで出力できるのでドットつぶれの問題もないときたもんです。
http://www.suigyodo.com/online/

シュークリーム食べたので今日は元気です

先日いっていたマリオシリーズのキノコ取らないプレイ、スーパーマリオ64でやってみました。
まず黄色いブロックは危険。
坂道も、穴も、ポールの先っぽも、隠しコースも、危険。
杭の周りを回るのも、チョロプーを倒すのも、木の上で逆立ちするのも、危険。
とにかく危険なところほどキノコが出やすいので、できるだけ前半の簡単なステージの簡単なスターのみでクリアに必要なスターを集めてしまいたいところです。
というわけで現在のスターはウォーターランドに入る直前で40個。
チックタックロックは上る途中で必ず取らされてしまい非常に危険なので可能な限り2階以下の3フロアで集めてしまいたいところです。
それにしても、データを消すときの音がなかなかいいですね。
今までもったいないからと消さずにいたのですが、今回のプレイのために一つ消してみると、マリオが高いところから落ちる声で「ウワァ~ッ!」と。
持っている人は是非一度消してみましょう。

Lunascape4の正式版が出たそうなのでさっそくインストールしてみました。
起動速度は遅くて元々なので別に速くなっても気にならなかったんですが、検索バー周りはかなりよくなっていました。
そして注目すべきは自由度の高いスキン。
そのためにウィンドウ左右上端の挙動が普通のウィンドウズのソフトと変わってしまったのはやや不満ですが、標準のスキンが気に入らなくてスキンのフォルダを見たときはその内容に驚かされました。
ウィンドウの部品とかがビットマップで全部用意できるんですね。
例えば標準のスキンではWindowsVista風のシステムボタン(と呼べばいいのかな?)なのですが、これがスキンを用いてできたもので、WindowsXP風のスキンを用意すればいつも見るXPのデザインに戻せるわけですよ。
それどころかウィンドウの形状自体もある程度制御できるようで、いっそOSに組み込んじゃってもいいんじゃないかと思える内容です(Windows以外のOSは知らなかったりしますが)。
ただ、スキンの適用にいちいち再起動が必要なのは重量級ブラウザだけにかなりつらいところですね。
本格的にスキンをいじり倒すのは明日以降になりそうです。

それはそうと、なんかうちのミディビにも迷惑書き込みが来たようです。
やっぱりフォームをちょっとやそっといじったようじゃなかなか迷惑書込み防止には繋がらないようですね。
そこで、Perl用とPHP用で、それぞれメッセージの妥当性チェックモジュールを作っています。
まあ、その内容は外国語SPAMの防止用にひらがなの使用を強制したりSPAM書き込みによく見られる問題のある単語をNGワードとして設定したりする程度の単純なものですが、それなりの効果はあるんじゃないかと思っています。
とりあえず、条件をやや厳しめにして、許容範囲の問題であれば、ユーザーに問題を無視して投稿させることができるようにして利便性との両立を図りたいと思っています。

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

自分用リンク集ver3

自分用のリンク集ページが出来上がりました。
まあ、早い話がお気に入りのPHPバージョンというわけですが。
あくまでも好みの問題なのですが、やっぱりサイドバーやメニューとしてのお気に入りよりウェブページのほうがよかったので。
そして、以前のバージョンではよく見る1ページ目の中にもほとんど見ないページがあったり、あまり見ないはずの2ページ目に実はよく見るページが紛れ込んでいたりして、手動でやっているとどうにもおかしくなるので、新バージョンではPHP+JavaScriptで自動化されています。
リンク集並べ替え機能は、JavaScriptで新しいウィンドウに目的のページを開いた後、呼び出し側のページで並べ替えスクリプト(PHP)を呼び出し、並べ替えが終わったら元のページへリダイレクトしてリンク集ページを再表示。
また、JavaScriptがOFFになっていたりブラウザの機能でクリックせずにリンクを開いた場合などは、通常のブラウザの機能としてなんら特別な処理をせずに通常の表示を行います。
この機能がまたリンクにマウスを置いた場合のステータスバーの表示の自然さを生み出します(リンクに直接JavaScriptを書いた場合は表面上無効なURLとなる)。
更に、管理ページは別ページではなくリンク集と同じページにした上JavaScriptで簡単にですが管理支援機能も作って、素早く管理できるようにしています。
また、リンク集そのものとは関係ありませんが、リンク集ページの隣にはフレームでよく使うツールを配置しています。

粒子が勝手に動く

メモちらしのバージョンアップを行いました。
内容は、まあ、日記や履歴で書いてあることそのまんまなんですが、日記のほうに書いていない、つまり今日変更したのは、バグ修正です。
実を言うと、どことも繋がっていない粒子を動かなくするという新しい仕様がうまく働いていなくて、その修正のときに見つけたものなんです。
新たに追加した粒子が初期状態としてどことも繋がっていない場合は問題なかったんですが、逆に腕を全て切り離してどことも繋がらなくなった場合に腕がなくなったことを感知できずに動いちゃったんですね。
原因は変数名の間違いでした。
このバグがあると他にどんな影響があるのかはまだ調べてませんが、もしかしたら関係ないはずの粒子が変な動きをするかもしれません。

自分専用リンク集の新バージョンを作っています。
どうにも管理しにくくなってきたのでよくアクセスする順に自動で並び替えたり、実際やるかどうかはわかりませんが公開してるほうのリンク集にあるようにタグ付けで分類したりしようと考えてます。

Lunascape2.6.5

Lunascapeのバージョンが2.6.5になっていたのでインストールしました。
わかりやすいところでの2.5との最大の違いはタブに閉じるボタンがついたことです。
これにもまあ良し悪しはあって、簡単にわかりやすく閉じられる反面、そのタブを単に選ぼうとしてクリックしたところが運悪く閉じるボタンだったりすると予期せず閉じられてしまうことがあるのです。
最終的に慣れの問題だとは思うのですが。

TGscriptの吹き出しのデザインを作っていました。
今回ただ掲示板の記事に使うだけでなく色々な用途に使いたいので拡張性と可搬性を持たせて一つの関数にしてしまいました。
あと、ついでにアイコンもいくつか追加したのです。
7つ追加で1つ削除。
削除された1つは、システムアイコンとしての役割を持たせます。

15000

やぁ、あっさりカウンター15000回りましたね。
だからって別に何の特典もありませんが。

掲示板。TGBBSの開発をスタートしました。
いえ、TGscriptの共通設定を作っているところです。
ひとまずアイコンの設定が一段落着いたところなんです。

FrieveさんとこのFaleal Story、キーボードで動かすと画面表示が著しくずれるため、WindowsXPでは動かないものだとずっと思っていたのですが、マウス操作のみでプレイすると問題なく動かすことができたので久々に一気にクリアしてしまいました。
データがわかりやすい形式で記録されてたおかげで過去の自分に改造されまくりで法外な退職金が出されたりロプティーバニーキックが最強攻撃になっちゃったり、Frieveドラゴンより強い蟹がデスの書を持って転げ落ちてきたり、お城の中で唐突に甲殻寄生獣が現れたり、ハチャメチャな旅路となってしまいました。

リセットさん

今日は爆ボンのバトルステージのことでも書いてみようかと思ったのですが7割方書いたところで突然パソコンが再起動されてしまい、文章が消失してしまいました。
再起動後書き直そうとしてエディタを開いたのですがやる気が減退してしまい、結局何もせず終わりました。

メモちらしを少し改良しました。
どことも繋がっていない粒子が動いてしまうとどこにも繋げないうちにどこかへ飛んでいってしまうことがあったので、どことも繋がっていない粒子は動かさないようにしたのです。
ただ、現在位置の座標を更新しないだけでかかっている力やそれから算出される速度の値は時々刻々変化しているので、どこかに繋げた瞬間内部的に持っていた速度でいきなり動き出すのが問題ではあります。
だったら速度の値を0にすればいいとも考えられるのですが、前回の速度の値と現在の力の値などが多少複雑に結びついていたりするのでそう簡単に変えられないのですよ。
このあたりをきっちり書き直せばアップできそうではあります。

昨日の日記で日記プログラムはCGIとPHPに分かれていることを書きましたが、実は今このCGIで動いている部分がCGIでなければならない理由は全くなく、むしろ一部のPHPとの動作の違いで同じはずのアドレスが別物にされたりしてうまくブラウザのキャッシュが使えず表示に必要以上の時間がかかるという不都合だけがあるのです。
そういえば日記の削除機能が未実装だったので公開前にはその点も改善しなきゃいけませんね。

マウスの調子が悪い

最近涼しくなってきましたね。
また冬が近付いてきたようです。

そういえば最近マウスの調子が悪いです。
クリックした瞬間とか手を離した瞬間にポイント位置がずれるのは買ったときからでしたが、最近はホイールを上向きに回した瞬間下に向かって勢いよくスクロールすることが多くなってきて困り者です。

そうそう、見ているユーザーには全然関係ありませんが日記の編集フォームを改良しました。
カテゴリ画面はどうしても場所をとるので他のフォームより横幅を広く取ってスクロールが少なくてもいいようにしたほか、ジャンル名の途中で行が折り返されたりすると非常に見つけづらくなるので、ジャンル名の途中では折り返さないようにしました。
そういえば昔日記プログラムを配布しようとしたことがあったのですがあまりに配布しにくい形式だったので断念したのでした。
書き込みはCGI、閲覧はPHPと分かれているのが問題なんですよ。
全部PHPで書き直したら配布できるようになるかな…。
ん、編集画面をJavaScriptでもっと改良できそうな気がしてきた!

掲示板全面リメイク計画

ふにゃさんの操作説明ずいぶんできてきましたよー。
とりあえず基本操作は全て完了です。
走って歩いてジャンプしてバナナ食ってとげに刺さって場外に落ちるところまでできています。
今後はギヤバネなどのいろんなキャラクターの紹介ですよ。

掲示板の全面的なリメイクをしようと考えています。
まだどうするか煮詰まっていないので行動を起こすのはまだ先になりそうですが。

Ajaxじゃありません

自分専用リンク集を作ったり再提出用のレポートを書いたりしていました。

レポート:
修正箇所を具体的に教えてもらっていたので割りとすぐに出来上がりました。
決定的な不足はなく、ほとんどが文体の指摘でした。

リンク集:
保存されているデータが簡易暗号化されているリンク集です。
以前にも作っていたのですが項目の削除と修正に難があったので作り直しています。
パスワードを使う都合上、全てを1ページにまとめているのですが、今回はJavaScriptを使うことにより複数ページを使うよりも利便性を増しています。
また、当然ながら項目の削除や修正などにも完全対応です。

クッキーが消えた

今日パソコンを立ち上げたらクッキーが消えてました。
どうもクッキーそのものが消滅したのではなく、クッキーを読み出すためのデータが壊れたのが原因だったらしく、クッキーの中身は無事なまま読み出せなくなっていたようです。
しかしそのデータを使ってクッキーを復活させることはできないらしく、テキストエディタ等でクッキーを編集しても、不正なクッキーとして削除されてしまうようでした。
一部、どうしても消えてもらうと困るクッキーがあったので、ちょっとサイトアドレスを偽装して自作のクッキーを書き込むためだけのCGIを使って復活させました。

大神やってました。
犬コロが見つからないのでしばらくそこら辺で適当に遊んでようと思ったら、遊びに行った先で例の犬コロが出てきました。
そして、力と力で語り合おうなんて、硬派な事を言い出すんです!
ボスとなると急に慎重になっちゃって必要以上の時間を掛けてしまうのは悪い癖ですね…。

ふにゃさんの重力変化を実装してみました。
知ってる人にはもうおなじみの恒例のシークレットですね。
しかし今回、今まで以上にゲームが変わります。
ふにゃさんには色々動くギミックがあり、それらは原則として重力変化の影響を受けないのですが、それらとふにゃの動きの食い違いでかなり変わってしまうようです。
ちなみにギミックのほうに重力変化の影響を出すかどうかは未定ですが、基本的に影響を出さない方向で行こうと思っています。
そうそう、5面の攻略ページも作りました。

ミディビのルールのいくつかの補足説明を書きました。
まあ、雑多な部分ですね。

CGIのページ統合

メモちらし公開しました!!
昨日書いたものから特に新たな機能は追加していません。

そうそう、そんでもって、ダウンロードページとCGIダウンロードページを統合しました。
前々からこの2つは統合したいと思っていたのですよ。

分散処理

とりあえず読んで大体の流れはつかめるようになったのでRubyでCGI組んでししゃもを会話するチャットを作ってみました。
どうもししゃもはそれなりに動いてくれてはいるようですがどうにもブラウザに出力する時点でCGIクラスにエラーが起こってるみたいです。
正直、私の良く知っている言語と見た目の大きく異なるRubyはあまり使いたくないんですけどね。
とりあえずししゃもを動かすCGIが完成したらRubyからはとっとと離れるつもりです。
ちなみにししゃもで何をやりたいのかというと、アルニックにね、特定の確率でししゃもによる会話を織り交ぜようと考えているんですよ。
本来ならゆいと同じ辞書方式で事足りるはずなんですが何せ辞書を作れるのが私しかいないということで、どうしても辞書の量が足りなくなっちゃうんですよね。
あと、複雑なアルゴリズムで返事を決めようとするとどうしてもサーバーに負荷がかかるので、そういう重くする原因になることは分散して処理させようという考えもあったりするのですよ。
うちのサーバーではRubyが使えないんですが自分のパソコンでなら使えるので、例えば、サーバー上でアルニックが喋るとき、CGIからうちのパソコンに人工無能の返事を考えるようにリクエストを送って、それでうちのパソコンが頑張って答えを出してサーバーに送り返す、そういうのをやってみたいんですよ。
これをやると必然的にうちのパソコンに繋がらないときアルニックはあほあほになってしまいますが、まあそれも愛嬌です。

ルールを

久々にメテオスやってみましたよ。
腕は衰えておらず相変わらずレベル5相手に10回に8回は負けてます。

そうそう、掲示板にルールをつけようと思います。
やはりいつまでもノールールというのもどうかと思いますので。
ミディビについてもほとんど投稿のない今のうちにルールを作るというのもありかもしれません。

そうそう、掲示板への迷惑書き込みへの対策を考えてます。
別にうちは今迷惑書き込みは受けていませんが、まあ、迷惑書き込みに対する対策はあるに越したことは無いと思うので。
アイディアとしては、自動書き込みプログラム防止のため、フォームの名前をランダムにする。
もちろん完全にランダムにしてしまうとまともな書き込みさえも何がなんだかわからないことになるので、もちろんある程度の法則性は持たせておきます。
それと、NGワード機能。
以前使っていた改造掲示板ではNGワードが含まれていると機械的に投稿を拒んでいましたが、今度は、とりあえず保存しておいて、NGワードを含む場合は管理人がチェックしてOKを出すまで見られないようにします。

掲示板いじり

掲示板ちょっといじってみました。
本当は記事の削除を作ろうと思っていたのですがその前にローカルではクッキーを記録してもオンラインとは別のユーザー扱いになってBBSデータのバックアップを取るときにローカルのユーザー情報が消えてしまって不便だったので記録されているユーザー情報からクッキーを復元する機能を作りました。
この復元機能、本当はひらがなのふっかつのじゅもんにしたかったのですが復元の難しさ(というより面倒さ)や正当性チェックなどの問題があって一般的なID・パスワード方式にすることになりました。
こっちのほうはもう実装が楽で楽で。

NeoMuplのVC++での開発を開始しました。
MFC使おうかとも思ったのですが前にMFCを無理に使おうとして撃沈したことがあったのでノーマルなWindowsAPIを使ってウィンドウのデザインはすることに決めました。
とは言えどもラッパークラスを作らないことには管理が大変なので自己流のMFCっぽいものを作ることにはなるんですが。
まあ、音声の再生にはDirectShowを使うかそれが技術的に難しければ何か他の使いやすいライブラリでも使おうかと思っています。

なんかWord不便だなーと思ってしまいます。
なんか知らんがエクセルのワークシートをオブジェクトとして貼り付けて編集したらデータが壊れているとかなんとか言われてこれ以上の変更ができなくなったり、何の説明もなく図が拡大されたり、縮小されたビットマップの編集をするとスクロールバーが使えなかったり、とにかく挿入されたオブジェクトに関してかなり不便な思いをしています。
しかしオブジェクトを既存ファイルへのリンクとして貼り付けるとワード側では編集せずに済むのでものすごく効率が上がります。
ファイルは増えてしまいますがフォルダ分けすれば問題ないのでこれで解決…だけどやっぱりこれはおかしいよマイクロソフトさん。

お絵描き掲示板のスタイルを微調整しました。
不必要な線が出ていたので消して必要な線を強くしてみました。

VOTOを

VOTOをCGIのコーナーに移動しました。
ついでに著作権表示も美文に変更です。
統計のほうも移動するつもりだったのですがちょっとページができていません。

爆ボンのレインボーパレス1面のマップを作りました。
ただ、絵を描くのが面倒という理由で木の代わりに柱が立っていたりします。
ついでに、色々ボムジャンプを試したりもしていたのですがそのことはまだ書いていません。

本日の絵は猫耳さん。

1133705056.png

じーちゃ

ふにゃさんのBGMを作ってました。
普通バージョンと寝てるときバージョンの2パターンが今のところあります。
今日アップしたのは前半にノーマルバージョン、後半に睡眠バージョンになっています。

今日はGChatを公開しました。
配布バージョンでは人工無能の辞書がアルニックのものを流用していますが、典型的な応答以外の内容はほとんど削られています。

1133619757.mid

<前 次>