無題
レーダーチャートのプログラム、軸名まで表示できるようになりました。
本当は数値も表記できればレーダーチャートとして完成なのですが、この部分は個人的事情により作る気はありません。
レーダーチャートのプログラム、軸名まで表示できるようになりました。
本当は数値も表記できればレーダーチャートとして完成なのですが、この部分は個人的事情により作る気はありません。
レーダーチャートを描くPHP作っています。
当初はレーダーチャートの画像を生成するように作っていたのですが、大きな画像の一部としてもレーダーチャートを描けるようにしたいため、画像の生成は行わずに描画だけを行うようにしました。
検索文解析器、公開しました。
やってくれるのはツリーを作るところまでなのでその先の処理は自分で作らなければいけません。
検索文解析器微調整。
あまり使われなさそうな構文を削りました。
検索文解析器、構文解析の都合上やたらと深くなりがちなツリー構造を単純化するようにしました。
これをやっておかないと最終的にSQL文を作るときに括弧だらけになってしまって見通しが悪くなるのです。
結局LL法の構文解析をまともに実装するやり方が理解できなかったので、拡張性だとか可読性だとか全く無視で、構文規則を直接関数に書き下して無理やり実装してしまいました。
とりあえずこれで検索ワードの構文ツリーが作れるようになったので、もうちょっと調整すればいろんなところに組み込めそうです。
日本がなんか世界一になったそうですね。
めでたいことです。
LL法なかなかわからんです。
集合論とかももうちょっと勉強せねばならなさそうです。
いつか頓挫したあのスクリプトよりは簡単だとは思うのですが…。
検索条件解析プログラム、字句解析解析中に追加の処理を入れられるようにしました。
これにより特殊な書式で書かれたものも解析できるようになりました。
そういえばライモンシティの連中、レベル20以上差があってもタイプ相性とその他条件次第ではなんとか勝てることもあるようです。
たとえばレベル38ガーメイル(虫・飛行)でレベル65ドレディア(草)を倒せたりとか。
もっとも、攻撃を4分の1に軽減してやっと1~2発耐える程度なので安定はしませんが。
PHPには、余計なコメントや空白を除去したソースを出力するオプションがあります。
それを使えばコードが短くなってコンパイル時間も含めたPHP実行時間の削減に役立つかなーと思ったのですが、あまり効果はないようです。
コメントや空白の除去は元々短時間で終わる字句解析にしか影響が無いためでしょうね。
実測してみたところ、むしろ空白除去版の方が処理時間が長くなる傾向が見られました。
おそらく改行が無くなったことにより切りのいいところで処理を切れなくなったからだと思います。
実際の字句解析の仕様は知らないのであくまでも根拠のない予想ですが。
数百KB以上のソースファイルのほとんどがコメントと空白なんて状態でもなければ目に見えて速くなるなんてことはありませんでした。
複雑な検索条件を構文解析するPHPプログラムを作成中です。
アンパンマンDBバージョン3用ですが、構文木まで作れればアンパンマンDBに限らずいろいろ応用が利きそうです。
PHPにはyaccとかlexみたいなのが見当たらないけど、少なくとも字句解析は正規表現でなんとかできそうです。
構文解析については、これも正規表現で頑張るか、昔頓挫した言語作成の延長線上でやるか、どちらかで頑張ることになりそうです。
早速テンプレートをPHPコードに書き換え始めたわけですが、変数とか関数の扱いをあまり考えていませんでした。
テンプレートは関数を使って呼び出すことになるのでグローバル変数は使用不可。
テンプレートに変数を渡す方法を考える必要あり。
関数は常にグローバルスコープなので呼び出しに関しては何の問題もなし。
逆に、テンプレート用関数の定義をするときにどうするのかが問題。
このへんを充実させれば扱いやすくはなるかもしれないけど、今度は普通のテンプレートエンジンと何が違うのかってことになりかねない…。
というわけでPerlのキ番登録フォームをPHPに書き換え中…。
Perlは省略記法が洗練されている一方、別の言語に翻訳するときは長くなっていけませんね。
実質新規に書く部分は数値の取得部分だけなのですが。
microtimeの差分についてのページを更新しました。
呼び出し方による精度の違いなんかも出てなかなかいい感じの記事になりましたのです。
OpenOffice Baseのフォームの取り扱いのほうも分かってきたところです。
なんだかんだでAccessを使っていたときの経験は役に立っているようです。
さて、うちのデータベースはここのサイト以外の場所からのアクセスを禁止されていて、そのままではローカルテストができないので、データベース処理の中継用のスクリプトを書いてサーバーに置いてみました。
PHPのお節介仕様のおかげで多少問題はありましたが大方うまくいったようです。
メテオンもどき、白文字に黒縁をつけることで背景画像を邪魔しないように文字を読みやすくできたのでアップしました。
これで、なければ困る機能は大方そろったと思うので、今まであまりやってこなかったことのほうに力を入れるようにして、メテオンもどきのほうはそろそろゆっくりの更新ペースに落としておこうかと思っています。
とりあえずBGM切り替えと同時に生存した場合に両方鳴りだしてしまうバグを解消してから…ね。
演出面やちょっと不便なところなどの更新はもう後回しにしようかと思っています。
今日はVistaに変えてから不安定だったAN HTTPDを調整して何とか勝手にエラー落ちしないようにしました。
問題はPHPのモジュールにあったらしく、モジュールとしての実行からCGIとしての実行に切り替えるとエラーが起こらなくなりました。
ということで、前々からやりたかった、TGBBSへのファイルアップロード機能の追加をやってみました。
メテオンもどきが宣伝効果となってダウンロードゲームのほうもやってくれる人が増えたようで、自作ステージのアップロードなどにも早く対応したくなったのですよ。
プロフィールの基本機能がひとまず出来上がりました。
まず、スパム対策のためフォームはname属性をスクランブルした上、フォームの並び順そのものもシャッフルして、コンピュータから見てほとんど意味のわからない、しかしそれでいて人間から見ればあまり違和感のないインターフェースにすることができました。
しかもこのスクランブル&シャッフルはフォームの構成をパラメータとして渡せば掲示板などにも応用できる優れものです。
しかも、色やアイコンを選ぶフォームは設定から自動的に内容を調べてきて適切な表示ができるように、ことにアイコンについてはJavaScriptを利用して項目を切り替えるたびにアイコンのプレビューが出るようにしました。
で、それで、いよいよプロフィール書き込みを作ろうかと思って作ったところ、記録されるには記録されたようなのですが、画面に反映されないんですよね。
どうにも特定のIDのときにクッキーに保存したデータが読み出せなかったみたいなんですね。
暗号化が悪かったのか、復号処理に問題があったのか、それともシリアライズがおかしかったのか、見当もつかなかったんですよ。
それで、とりあえず全ての元凶を暗号・復号処理だと決め付けて、それらの処理を取っ払ってみたところ、やっぱりうまくいかなかったんですね。
でも暗号化されていない分、記録されたデータは丸見えだからクッキーの内容を記録した変数を見ればわかるだろうと思ったんですよ。
すると、データ中には不自然な「\"」があったというわけです。
どうやらPHPはクッキーのデータに対しても特殊文字をバックスラッシュでエスケープする機能がついていたらしく、暗号化されたら暗号化されたで暗号化された結果が特殊文字だったり、しなかったらしなかったでデータ中に元々あった特殊文字がエスケープされ、うまく動かなかったというわけです。
そんなわけで、めでたく動くようになったはずなのでよろしければ試してみてください~。
ドラクエ8やってました。
ちょっとした発見です。
おどかして追い払った敵からは経験値はもらえないがアイテムはもらえる、というのはよく知られたことですが、メタル系の敵はおどかし損ねたときに自らの意思で逃げることはしないのです。
つまり、普通に戦えばアイテムごと逃げられて得られなかったアイテムも、おどかして逃がせば手に入る可能性が高くなるのです。
だから、経験値よりもアイテムがほしい場合なんかは、下手に戦うよりもおどかしたほうが確実ということになるのです。
もっとも、レベルも上げたいので普通に戦いましたが。
PHPのarray_merge関数、仕様上重複する配列の要素が配列だった場合、古い配列は新しい配列でそっくり置き換えられて古い配列は残らなくなりますが、その点を改善して重複する配列の要素が配列だった場合、更にその配列同士をmergeする、mixed_mergeを作ってみました。
添字が数値だった場合array_mergeと全く異なる挙動を示すのが少し問題ですが、まあ、そっちのほうがTGscriptには合っているので。
浮き沈みリンク集を改良してみました。
タグがリンクの入れ替わりに応じてくるくる入れ替わってしまってタグをつけても探すのが面倒ということになってしまっていたので、リンクは従来通りスコア順の表示にして、タグはそれとは関係なく五十音順で表示するようにしました。
ただ、前のバージョンのほうがいいという場合もあるかもしれないので、一応これはオプションにしていて、何も設定していない場合は従来の方法で表示するようにしています。
バナーを追加しました。
コネコベーダーを使った白黒の極小バナーで、うちの画像にしては珍しくGIF形式です。
ついでにバナーのアドレスを変更しました。
まずリンク集にある各サイトのバナーの置き場を/links/banners/から/banner/に、それに伴ってうちのバナーもその中に入れて/banner/tgws01.pngと/banner/tgws02.gifです。
この名前の変更は管理上の理由もありますが、うちにリンクしてくれるという人がバナーをダウンロードしたときファイル名に困らないようにするという意味も持っていたりします。
で、そして、ふにゃさんのステージセレクトの改良なんかもしたりしていました。
難しそうな気がしたもんでずっと先送り先送りにしていたのですが、改めてよく見てみると、ステージセレクトでのマップの表示処理はたった3行のコードで書かれていただけであり、結局ちょこっと手直ししただけで開始面を表示できるようになってしまいました(以前は何面まで進んでいても表示されるのは常に1面だった)。
そんでもって、今日は辛口イモ天カレーなんぞを食べてました。
何のことはない、レトルトの辛口カレーに昨夜の残りの芋の天ぷらを乗せただけのものです。
スパイシーな辛口カレーに芋の天ぷら油が微妙な拒絶感を醸し出していました。
自分用リンク集PHPの削除機能ができて、ついでにパスワードで編集制限する機能もつけたので、これで事実上完成となり、もしかしたら人様のためにも使えるかもしれないと思ったので、明日アップしようと思います。
今回、いつものCGI・PHPとは異なる方法で作っていて、大きなプログラム本体を、小さな設定ファイルから呼び出す形式になっていて、普通のCGI・PHPとは異なるつくりになっています。
こうした理由は、プログラムひとつで設定ファイルだけを複数用意することで簡単に同じリンク集をいくつも作れるというのがあり、また、PHPを呼び出す前処理・後処理も自由に作れるようになるためというのもあります。
TGscriptもこの方式でいこうかなとも考えてます。
こちらも複数用意する必要性が出てくるかもしれないので。
yaneSDK.NETのことですが、セットアップが煩雑すぎるということで使わないことにしました。
コピーすべきファイルがソースファイルだけじゃないとか、初期設定が多いとか、ちょっとした事を色々試すにはあまりに面倒です。
同じような理由でyaneSDK3rdも使いません。
先にコンパイルしましょうとか、面倒すぎます。
まあ、3rdのほうは割と単体でも使いまわせそうなものが多いので、こちらは存在意義が.NETよりはありそうですが。
日記管理をPHPに移植中です。
現在は管理者の認証までできていて、これから管理者用の処理を書くところです。