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

<前 次>

Composer

TGWS本体にもComposer適用中…。
しかし、もともとあったクラスをうまく参照できない…!

PHPとドラクエ10

PHP

PHPプログラムをテストなどしやすくするため、環境変数への依存を減らしています。
クッキーみたいに外部から来る変数ありきのページもありますが、ドキュメントルートなど、本当は環境変数に頼らなくてもわかる項目も多いんですね。

ドラクエ10

スタジアム装備の試着など。
海のイベントも始まったそうですが、そちらは未着手です。

ドラクエ10とPHP

ドラクエ10

ァォィョッュのストーリー進行。
アズランのメインストーリーと、ガタラのメインストーリーをクリアしました。
アストルティア★ラリーに参加したくて進めていたんですが、キーエンブレム全部は時間までに間に合いそうにないし、たとえ間に合ったとしてもラリー最後の強ボス戦にァォィョッュのレベル&しばりで耐えられる気もしなかったので、ラリーは諦めてキーエンブレムも今回の2つを加えた計3つで妥協。
第3回アストルティア★ラリーまでには全キーエンブレムを手に入れて、強ボスにも耐えられる力をつけたいですね。

PHP

先日の爆ボンの画像を自動で作るプログラムを作るときにちょっと気になったので、調べてみました。
pathinfo関数で得られるディレクトリが、ディレクトリなしのパスを渡されたときに何を返すのか、です。
結論は今日更新したページに書いてあるのですが、ここにも書いておくと、ドット「.」でした。

WPFのコンテキストメニューとポケモンピクロスとPHP-CS-Fixer

WPFのコンテキストメニュー

Sukeruに使ったWPFのコンテキストメニューのことを、プログラミングのページに記載しました。
結論としては「マニュアル読め」ってことなんですが、難しくないですよと言う紹介程度で。

ポケモンピクロス

ポケモンピクロスのページも準備中。
リリースから期間が経ってるし私も完全クリア済みだし、あまり多くは語らず、軽い紹介と自分の記録程度にしようと思います。

PHP-CS-Fixer

で、上記2つの更新をするときにはPHPファイルを触っているわけですが、Visual Studio Code上で編集するようになって、PHP-CS-Fixerで整形するようにしたので、TGWSWebAdminと同じく、.php_csファイルで整形のルールを指定することにしました。
今の.php_csファイルはこんな感じ。
厳しめなSymfonyルールを基本として、配列を省略表記して、PHPDoc関連は若干緩めています。

TGWSWebAdminとプロフィール

TGWSWebAdmin

タスクリストの読み込みまで開発。
と言っても、読み込むデータがないのでまだ張りぼて。インターフェースをどうしようかと思案しながらなので、具体的な動作はまともにできていないのです。

そんなことより、TGWSWebAdminを開発しながらVisual Studio Codeの環境整備。
PHP-CS-Fixerの公式サイトを見ながらコード整形のルールを自分好みに整備しています。おおむねいたれりつくせりなSymforyのルールで、お節介すぎると感じたところは順次Offにしています。
PHP DocBlockerも入れて、ドキュメントコメントも入れやすくしました。
そして何より、PHP IntelliSenseを入れたので、関数の定義を参照できたり、コードの自動補完が利いたり、圧倒的に便利になったのです。
有料ソフトのPhpStormにはきっと遠く及ばないのでしょうが、ここまでやっただけでも、かなり快適になりました。

プロフィールページ

やっぱりどう考えても一覧に出てくる情報量が少な過ぎなのです。ほとんどの質問に対する回答は短く簡潔なのに、それすら削っているから、すごく読みにくいのです。
情報量を削っているのは、「読みに行く」というアクションを取らせて、回答を読んだ時の印象を強めようというのと、アクセス数の統計を取りたいという狙いがあったからなのですが、一言二言の回答まで削ってしまうのは、さすがにやり過ぎというものなのです。

ドラクエ10とPHP7.1

ドラクエ10

ミフミンもモンスターバトルロードランクAに到達。
しろいコキンのときもそうでしたが、自分の操作キャラの強みを理解し、意識的に活かしていくようにするとぐっと楽になりますね。何も考えずぶん殴りまくるだけだと苦戦します。

PHP7.1

いつの間にかPHPバージョン7.1が出ていましたね。
PHP7以上じゃないと動かないWebアプリやライブラリも増えてくると思うので、ちょっと自分の環境にインストールして試してみようと思います。

TGWSWebAdmin

TGWSAdmin、今はWindows10の個人PCを使って運用しています。
しかし、アップデートで勝手に再起動したり、そうでなくてもうっかり何かやらかして落ちたりということがたびたびあったわけです。で、遠隔地の安定したデータセンターに安価でサーバー機を仮想的に作れるVPSというものに興味を持っているという話を先月しました。
あのときは、Linuxに不慣れなまま時間が過ぎていって、いったんVPSを解約することになりましたが、そろそろまた具体的な行動を始めようかなと。

いきなりVPSを再契約するわけではありません。
プログラム自体は動く段階まで手元で持っていって、充分動くことが確認できたら、そのとき初めてVPSを契約し、プログラムを稼働させるのです。

VPSはLinuxで運用するつもりなので、まず、WindowsでもLinuxでも動くものを作らなければいけません。
当初、TGWSAdminが.NETでできていたので、Linuxでも動く.NET、.NET Coreを検討していました。実際、.NET Coreを両方の環境で動かす段階まではこぎつけました。
しかし、さらに検討を進めていくと、それは必ずしも得策ではありませんでした。
いくつか理由はあったのですが、大きかったのは2つ。
1つ目、同じ言語を使えるだけで、結局大改修が必要になってしまうということ。元のプログラムがWindowsフォームアプリケーションなので、ライブラリも動き方も、環境自体が大きく変化してしまうんですね。そうなれば、当然、プログラムも大きな変化が必要になるのです。
2つ目、ホットスワップ的なことをしたいこと。つまり、プログラムが動き続けている間に、プログラムの一部を差し替えてしまえるようにするのです。.NETアプリケーションは、基本的に、いったんシステムを全部止めてから、完成したものに全部差し替えるという作業が必要になります。タスクAが動いている間にタスクBを最新版に更新なんてことは、無理ではないにしても大変なのです。

そこで、目を付けたのが、PHPです。
元々サーバー上で動かすことを前提としていて、WindowsでもLinuxでも同じように動かすことができて、私自身、.NETに負けないぐらい使い慣れています。主にWebサーバーで動かすものなので、ユーザーインターフェースもWebアプリとして作れば済みます。
プログラムは大改修どころかフルスクラッチになってしまいますが、これを機に元のプログラムで良くないと思っていた設計も見直すつもりです。動作中のプログラムの一部差し換えは、PHPファイルをただ上書きするだけで済みますね。

と、いうことで、VPS版のTGWSAdminは、PHPで実装されたWebアプリとして提供され、各タスクはPHPファイルを適時呼び出すことで実現される、という形で実現しようと思います。

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発耐える程度なので安定はしませんが。

<前 次>