2007年5月の日記

<2007年06月 2007年04月>

いずみさんの絵

Lua、コルーチンを扱うクラスを作りました。
母体となるLuaクラスから作って、コルーチンが終了したら自分で勝手にdeleteします。
そして、コルーチンが無限ループだった利したら母体のLuaクラスの消滅時に一緒に消滅します。
あと、単純にLuaの関数をラップするだけの関数も大量に作ったりしてました。

そして今日は久しぶりに絵も描いていたり。
いずみさんもうすぐ描けそうなんで明日アップします。

lua_Alloc

yaneSDKのメモリ管理にあわせるためにアロケート関数をyaneSDKの機能を使う方法で実装したらエラーが出たので標準のアロケート関数に戻しました。
あとはWikiの内容を充実させながらちょこちょことBomber丸World用のLuaクラスを作っていました。

今日はこの日記PHPで既に書いた日記に対して編集操作を行ったときにタグが無条件でエスケープされてしまうバグを修正しました。
この修正はTGdiaryにも反映するので次の更新はTGdiaryのバージョンアップとなります。

Lua5.1リファレンスマニュアル

う~ん、Luaの、C側での関数リファレンスも見つけたので、うちのWikiの存在意義が半分ぐらいなくなってしまったようです…。
まあ、関連性の深い関数などをすぐに参照できるというのがうちのWikiの強みだったりするし、順を追って発展させていくチュートリアルなどもあればまた存在価値というのは高めていけそうですが。

で、Bomber丸WorldにLuaを組み込むほうもわりとそれなりにでき始めています。
まあ、lua_openしてloadしてcloseするクラスを作ってそれが今のところエラーを起こしていないというところなんですが。

新卒採用の楽しそうな人

就職の面接に行ってきました。
面接官が面接をすごく楽しんでいるようで、こちらとしても楽しく喋ることができました。
受かってるといいな。

それはそうと、今日はTGBBSの記事のオプションのページを作っています。
またあらたにフォームの種類にラジオボタンが必要になったので少し時間がかかっていますが、オプションでは投稿者が記事の削除や編集を出来るほか、閲覧者も情報の閲覧や他の何らかの操作をできるようにする予定です。

WME

WindowsMediaEncoderをインストールしてみました。
画面の取り込みもできるのでまた再びふにゃさんのプレイ動画を作れそうです。
あれと比べてどの程度よくなるのか、または悪くなるのかはわかりませんが、とりあえず使うだけ使ってみました。
まあ、画質はそれなり、ウィンドウ枠まで録画されるのが鬱陶しいのですが、録画後に長い変換処理がないというのと、音も一応取れているらしいところはよいかもしれません。

Lua組み込みWikiはとりあえずユーザーが使える全ての関数と変数の型と定数のページは作り終えました。
中身はありませんけどね。

Lua組み込みWiki

組み込みはちょっとてこずってます。
Lua言語の文法やら使い方に関してはまあまあわかりやすいんですが、組み込むC側のリファレンスがないのです。
優れたプログラムをLuaで組んでもCから呼び出せなければ意味がないのです。
網羅的に解説しているサイトが全然見当たらないのです。
もういいです。自分で作ります。

Luaを組み込んでみる

MifuminScriptが完成するかどうかの不安もあるので、とりあえずLuaを一度Bomber丸Worldに組み込んでみることにしました。
はむ氏の空想具現化プログラミング(http://hammm.blog21.fc2.com/)にあったS-JISが使えるものを使ってます。
とりあえずライブラリのコンパイルとヘッダファイルのインクルードまではうまくいったようです。
そういえば、Bomber丸Worldに何かフリーフォントでも組み込んで使ってみようかと思ったのですが、再配布可能なものでよさそうなものがなかったので諦めました。

たんたんと

突然ですがふにゃさん更新しました。
これからの追加要素はそれなりに時間がかかりそうなので間が空き過ぎないようにとりあえず現状をアップしたというわけです。

Bomber丸WorldのBGM「山の音楽家」をちょっと思いつきでいじってました。
今までのが曲の進行が淡々としすぎていたため、ノートオンベロシティを編集してメリハリを付けてみたのです。

1180018669.mid

2社目の日程決まったぞ

TGBBSをいろんなところで改良しました。
・タイトルや名前などに文字数制限を設けた。
・番号じゃないIDを作れてしまう問題を修正。
・フォームのプロパティをもっと柔軟に設定できるようにした。
・画像の代替テキストが正しくなかったのを修正。
・記事の編集オプションへのリンクをつけた(中身は未実装)。
・パーミッションを改善。
・専用アイコンをパスワードで制限するようにした。
・それに伴い一覧の表示を色分けした。

HTMLとして不適当なTGBBS

TGscriptをHTML-lintに通してみたら悲惨な点数になっていました。
nl2brがXHTML対象なのか<br>とすべき部分が<BR />になったり、単純にHTMLで規定されていないブラウザ独自のタグを使っていたり、それが記事の数だけ出てくるのでどんどんマイナスになってゆくのです。
でまあ、スタイルシートを使ったりnl2brのHTML版を作ったりして対処しました。
あと、減点は少ないけど鬱陶しい警告の回避もしてたり。

久々に学習帳更新しましたよー。
学校の輪講で調べた結晶についてです。

削除について思うこと

TGBBSの削除機能について考えてます。
元々TGBBSには削除機能をつけるつもりはなく、非表示にすることで削除の代わりにしようと考えていたのですが、迷惑書き込みは問答無用で存在しなかったことにしたいし、間違って投稿してしまった場合などはいったんきれいに消してから書き直したいものだし、こちらとしても消したい物をわざわざ残すのもどうかと思ったので、非表示になった記事は管理人の判断で完全に抹消できるようにしたいと考えたりしています。
しかし今のログデータのフォーマットでは実はそんなことをするとスレッド番号がおかしくなるんですよね…。

パスワード!

まだ使い道はありませんがTGscriptのパスワード記録を実装しました。
今後は、掲示板の書き込みの削除・編集、プロフィールデータの復活、専用アイコンの使用制限などでの利用を考えています。

あと今日はナマライザのファイル情報表示ウィンドウにファイル名を渡して表示するところを作りました。
中身はまだ全然ですけど。

NGワード

TGBBSにNGワード機能を搭載しました。
ただし、巷でよくあるようなNGワードとは違い、一律で禁止して投稿を受け付けなかったり勝手に文面を編集することはせずに、書き直しまたはNGワード回避オプションを使うことを勧めるようにしています。
書き直しだけでなく回避オプションも用意しているのは、予期せぬところでNGワードに引っかかったりする場合や、あえてNGワードを使ったほうがよいと判断した場合を考慮してのことです。
そもそもNGワードはうちのサイト内容と関係のない広告だけの書き込み、特に自動書き込みプログラムによる書き込みを弾くためのもので、一般のユーザーにはほとんど不自由させたくなかったのです。
あと、ついでにこの手のCGI・PHPには大抵つけている管理者用便利オプションも今日つけました。

新掲示板仮運用開始

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

一社目は落ちました

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

昨日は仮免受かったのだ

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

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

続・表示処理

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

表示処理

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

再生速度変更に伴う不具合などについて

今日はNeoMuplで再生速度を変えると曲の終了位置を間違えてしまうバグが急に気になりだして、直そうとしてました。
再生速度を2倍にすると半分のところで曲が終わってしまうので、曲の長さか再生位置のどちらか一方が再生速度の影響を受けているのだと思いますが、そのあたりを修正して今聞いているのですがどうにもやっぱり半分で切れるようです。
もう一つ、DirectMusicでボリュームが変わらない問題も気になったのですが、従来のMIDIポートとやらではどうしようもないみたいです。
MIDIって結構曲や作曲者によって音量バランスが極端なのでこういうのにこそ個別のボリューム調整がほしかったのですが。
あと、そろそろ設定ダイアログの実装も始めようかと思っています。

無題

ほぃ、そんなわけで、一時停止のことも踏まえて、スクリプト講座更新しました。
では、メテオスオンラインでやりたいことがあるので。

外付けのハードディスクが早くも…

いやあ。さっそくRAIDが役に立ってくれましたよ。
今朝なぜかハードディスクのアクセスランプがついたままになってドライブを認識できなくなって、仕方なく無理矢理電源を切ってパソコンから切り離して再起動させたらリビルド(データの復旧)が始まって、夕方になってドライブが復旧しました。
RAIDだったおかげでデータが消えずに済んで…って!
たった一ヶ月でリビルド発動ってどういうことだ!?
オート電源OFF機能も働いていないし、何年も故障なく働いてくれていた本体のほうのハードディスクと比べてあまりに軟弱!
おかげで今日やる予定だった掲示板の表示処理も全然できずですよ。

表示処理作り始めました

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

新しいヘッドホン

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

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

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

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

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

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

スレッド作成作成中

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

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

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

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

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

逆に定期更新ペースになりそう

そんなわけでプログラムを書き換えつつプログラミングのページも書いたりしています。
ちょっと順番が前後しちゃったため2ページを並行して書くことになりました。
共用体を使うとなれば中に入るデータの大きさが気になるところですが、このあたりはどうしましょうかね…。

値型と参照型

ああもう!
値のことは後で考えるとかいってたけど、よく考えたらノード一つ一つには何らかの形で値が含まれるわけだから、ちょっとの手直しならともかく、これから根本的に内容を見直す予定なので、値のことは先に考えておいたほうがよさそうです。
どんな風に根本的に見直すつもりなのかというと、現在はなんとなく基底クラスのポインタをノードに保持させておいて、そのポインタの指している実体は派生クラスという形を取っていたのですが、そうすると値のコピーという点で不都合なことが多いので、最初から全部の型に対応した構造体一つで値を表そうかと考えています。
で、これをそのまま実装すると使用メモリが増えてしまうので、ここらで共用体という今まで私が使ったことのない構造を使ってみようかと思っています。
ただ、共用体といえども大きなクラスを含んだりすると結果的に同じようなことになってしまうので、その点は値型と参照型という形で、まあ、なんというか、値を示す構造体に値の実体を入れるのと実体へのポインタを入れるので分けて、大きなデータの場合はまた別のところで管理して、その管理されているデータへのポインタを値として持っておこうと考えています。
そんなわけで、スキャナの書き換えは中途です。

スキャナ書き換え中

てなわけでスキャナの書き換えを始めました。
ノードはいろんなところで使いそうだしそれはそれで独立した内容を持っているので別ファイルに分けて、トークンの内容は完全にノードに含んでしまえるのでトークンのクラスは削除しました。
まだスキャナ自体の書き換えはできていないのでエラーが出ていますが。

型の不一致

スクリプトのパーサを作り始めてみて、スキャナがCMSToken型を生成して、パーサがCMSNode型を解析しているという、ちぐはぐな状態になっていることがわかりました。
これに対する対応は、一つには型をどちらかに統一する方法、もう一つには何らかの形で型変換をしてやる方法があります。
最終的な動作速度やコードの簡潔さで言えば前者のほうがよさそうですが、最初わざわざ分けて作ったものをまた統一するのはどういったものかと…

大雑把な計画

スクリプト講座、本当は配列について書こうと思っていたのですが、順番が悪いのと、パーサについてうまい考えが浮かんだので、急遽予定を変更してパーサの話にしてしまいました。

で、そのスクリプトを使う予定のBomber丸Worldですが、このままのペースでいくと、社会人になるまでに完成しそうにないので、ちょっとスケジュールを決めて期間内に終わるように考えたいです。
とりあえず7月中にスクリプトを作り上げ、7月末までにゲームとして動くようにして、夏休み期間を利用してテスト版を公開し、プログラムの動作チェックをしてもらえるようにしたいです。
そして翌年2月ごろまでにシナリオなども完成させて、3月末には正式公開できるようにしたいと考えています。
まあ、とてつもなく大雑把な計画ですが、なんとか頑張ってみます。

<2007年06月 2007年04月>