「PHP」に関する日記(9)

<前 次>

PHPCRSSとNeoMupl

TGWS内のPHPコードをphp-cs-fixerで整形してみました。
管理の都合でイレギュラーな書き方にしている部分も多々あるので全部とはいきませんでしたが、だいぶすっきりしました。true/false/nullの大文字小文字の不統一や、publicの付け忘れなどが解消したのが特に有益でした。

PHPCRSS

で、同じのをPHPCRSSにも使ってみました。
動作内容が何も変わっていないのでダウンロードコーナーは更新していませんが、GitHubで今のURLにて修正版を公開しています。
https://github.com/mifumi323/PHPCRSS

以前も言ったように、PHPCRSSそのものに対する開発モチベーションはすでにありません。
アーカイブ形式をLZHからZIPにするぐらいはしてもいいかなって思ったりもしますが、それをする価値もあるかどうか…。

NeoMupl

最新版公開しました。

Visual Studio CodeとVPS

Visual Studio Code

PHPの整形は、いろいろある中で、php cs fixer(小文字のほう)がうまく使えました。
PSR-2に従って整形してくれるらしいのですが、命名規則までは直してはくれないようです。
コーディング規則の最終確認にはSideCIを使っているのですが、ここでチェックすると、警告はある程度までは減っても、ある程度は残ってしまうんですね。
SideCIは本当に最終確認で、気軽にここで調整というわけにはいかないので、できるだけ手元でさっと確かめたいのですが、そのあたりの環境はまだ構築できていません。

VPS

マストドンをちょっとやってみたくてVPS始めたんですが、うまくいかなかったので、もう一個やりたかったこと、.NETのWebアプリケーションをLinux上のサーバーで動かすというのに挑戦しています。
今あるサイトをここのサーバーに置き換えるのではなく、新しいことを始めたい、というところです。
もちろん、軌道に乗ればサーバー移転も考えますが。
先日学習していたdotnetコマンドの件は、これの準備段階ということで、とりあえずハローワールドですが成果が出ました。

dotnet

例えば、C#で作っているfunyakのステージデータが正当なものであるかどうかを検証するには、同じC#で作ったプログラムを使うほうが簡単だったり仕様の不一致が防げたりして都合がいいわけです。

まだFTPを入れていなくて、手元で作ったWebアプリケーションを向こうで試せないので、ちょっとFTPも入れておこうと思います。

無題

SearchPhraseParserの実用的なサンプルを作りました。
思えば、仕様を確認するためのサンプルしか用意していなくて、ちゃんと使えるサンプルは実質ないままでした。

無題

SearchPhraseParserのバージョン1.1.0を公開しました。
今回は大文字小文字の区別をするオプションをつけました。
Googleなどでは「OR」などの演算子は大文字でないと反応しないので、それに合わせるためのオプションです。

無題

アンパンマンDB3のデータベース管理クラスを検索機能のクラスと編集機能のクラスに分割しました。
現状のアンパンマンDB2のように何でもかんでも1箇所に集約しすぎてソースがごちゃごちゃしてきたのと、ユーザー側のページでも呼び出していないだけで編集機能そのものは動く状態で存在していたのが理由としてあります。
編集機能は結構大きいので、ユーザー側のページでは絶対使わない編集機能を読み込むのも無駄な話だし、もし万が一間違えて編集機能を呼び出すコードなんて書いてしまったら大変です。実際紛らわしい内容のメソッドもありますし。

あと、SearchPhraseParserを微妙に更新しました。
本体の動作が変わらないほど本当に微妙な変更ですが。
ただ、オプション項目を追加する程度のことはできたかなーって気がします。

無題

レーダーチャートのプログラム、軸名まで表示できるようになりました。
本当は数値も表記できればレーダーチャートとして完成なのですが、この部分は個人的事情により作る気はありません。

無題

レーダーチャートを描く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へのファイルアップロード機能の追加をやってみました。
メテオンもどきが宣伝効果となってダウンロードゲームのほうもやってくれる人が増えたようで、自作ステージのアップロードなどにも早く対応したくなったのですよ。

<前 次>