「プログラミング」に関する日記(4)

プログラミング関係の話題。プログラミングコーナーを更新したとか、プログラミングの内容に踏み込んだ話とか。

<前 次>

アンパンマンDB(システム)

サブタイトルもなんですが、タイトル本体(h1タグによる大見出し)のほうの見え方も工夫したいなと思っているところです。
スマホなど、横方向が狭い端末だと、タイトルが改行されるわけです。
改行されるのはいいんですが、中途半端な位置で改行されて、例えば「しょくぱんまんといちごだいふくちゃん」が、

1行目:しょくぱんまんといちごだ
2行目:いふくちゃん

みたいになって、しょくぱんまんと苺について述べた後、謎の新キャラ「衣服ちゃん」が爆誕してしまったりします。
だからと言って、ちょうどいい位置にbrタグを置いて強制改行させると、PCとかの横長環境だと無駄に縦に長い見出しになってしまうわけです。

そういうわけで、縦長環境、横長環境両対応できるいい感じの自動改行を求めて調べものと実験をしていました。

自動改行の基本的な考え方を以下の記事を参考に。
Webブラウザの日本語改行問題 -改行を実現するHTML/CSS-(1) #JavaScript - Qiita

折り返しの細かいところは以下の記事を参考に。
文章の折り返し指定のCSS最新版 - ICS MEDIA

Qiitaとドラゴンクエスト10と日記とアンパンマンDB

Qiita

TGWSを構成する技術1:全体的な構成
投稿しました。
まだあんまりオリジナリティも役立つ技術情報も込められていないですが、今後各種の話をするときの前提になる想定です。
だからまあ、これからですね、これから。

ドラゴンクエスト10

大型アップデート情報 バージョン7.1 (2024/7/3)|目覚めし冒険者の広場
次回のアップデート情報来てますね。
クエストスキップ機能とか、言ってみれば「お前が金を出したこのゲーム、金さえ出せば遊ばなくていいぞ」って言ってるようなものなので、ゲームクリエイター側とすれば、できれば提供したくなかった機能でしょうね。
私としては、やっぱり自分でクエストクリアしたいけど、私みたいにサボって全然進めない人にこそ有用な機能でもあるんだよなァ…複雑。

日記


この日記には、その日やったことをスムーズに思い出せるように、最近の活動を表示する機能が管理人専用で存在するのですが、Qiita投稿情報もちゃんと出てくれました!
この機能の実装はもうずいぶん前なんですが、Qiita投稿は久しぶりだったんで、ここにちゃんと出るのか心配だったんですよね。
ちなみに、雑多やキャラ倉庫の更新情報も出ます。

アンパンマンDB(システム)

機能完成まで内緒にしておくつもりだったんですが、画面写真に写ってしまったので。
サブタイトル機能を追加します。
アニメとかの「サブタイトル」とは違う概念で、ここでは、ウェブページの見出しに付加する情報のことを言います。
例えば、「ばいきんまんとマジカちゃん」というタイトルは2つ存在しますが、この2つを区別できるように話数情報を加えて、「1041話Bパート『ばいきんまんとマジカちゃん』」みたいにします。
ここで、正式名称は「ばいきんまんとマジカちゃん」のままで、「1041話Bパート『」と「』」がタイトルの隣に、しかしタイトルとは少し違うものとして、表示されるようになります。
システムとして整合性を保ちつつ、一目で区別しやすくするのが目的です。

TgwsMarkとQiita

TgwsMark

HTMLタグを直接使わせたくはないけどTgwsMark記法だけは使わせてもいいかななんてユースケースを想定して、課題立ててみました。
まあ、アンパンマンDBのコメント欄に使えてもいいんじゃない?って思ったからなんですけどね。

Qiita


久々に記事作成中。
ここTGWSについてです。
日々いろいろやってるから書くネタはいくらでもあるはずなんですよね。

アンパンマンDBとTgwsMarkとPackagist

アンパンマンDB(記事更新)

正式な曲目が公開されたので反映しました。
『森は枯れても2024』が新録ですね。
映画も森を舞台とした話なので、実際に使われる可能性が高そうです。

TgwsMark

名前空間とか調整して、再公開しました。
これでもうばっちりだと思ったのですが、試しに自分のプロジェクトに入れようとしたら、うまくいきませんでした。
他の人のライブラリとかと見比べても決定的に足りないものはなさそうに見えるけど…。
急ぐ用事ではないし、ちょっと後日考えてみよう。

Packagist(Mifuminator、SearchPhraseParser、TwitterLib)

他のライブラリも名前空間変更したのですが、どうにも微妙な感じです。
一応、メジャーバージョンを上げておいたので、バージョン指定で導入している人には悪影響ないとは思うのですが。

アンパンマンDBとPHP-CS-Fixer

アンパンマンDB(システム)

リストの現行のストリクトクエリのテストを作成。
新記法にする前に、内部処理を変える必要があって、旧記法でも同じ内部処理を使う必要があるので、内部処理を変えても旧記法が通用することを確認するためのテストが必要なのです。

PHP-CS-Fixer(Today I Learned)

PHP-CS-Fixer/PHP-CS-Fixer: A tool to automatically fix PHP Coding Standards issuesには、ドキュメントコメントでもないくせにドキュメントコメントぶっているただのコメントを本当のただのコメントに戻す機能があります。
/** ただのコメント *//* ただのコメント */

しかし、/** @var ADBValueList $adb_value */みたいに、ローカル変数の型を指定しているコメントまで、ただのコメント扱いされてしまいます。
Intelephenseでは、ちゃんとローカル変数のドキュメントコメントも認識してくれるので、PHP-CS-Fixerにぶち壊されると困るのです。

そこで使うのが以下のオプション。

Rule phpdoc_to_comment - PHP Coding Standards Fixer
ドキュメントコメントをただのコメントに戻す処理の制御ができます。
今回の件なら、ignored_tagsオプションにvarを入れれば、@varのドキュメントコメントだけは見逃してくれるようになります。

アンパンマンDBとdotnet

アンパンマンDB(記事更新)

来週の放送情報。
再放送ですね。

dotnet(Today I Learned)

dotnet build コマンド - .NET CLI | Microsoft Learn

ソリューションでこのコマンドを実行するときに --output オプションを指定すると、出力パスの不明なセマンティクスが原因で、CLI から警告 (7.0.200 のエラー) が出力されます。 このオプションは、ビルドされたすべてのプロジェクトのすべての出力が指定されたディレクトリにコピーされるため、この --output オプションは許可されません。これは、複数のターゲットを持つプロジェクトと、直接および推移的依存関係の異なるバージョンを持つプロジェクトと互換性がありません。 詳しくは、「ソリューション レベルの --output オプションがビルド関連コマンドで無効に」を参照してください。

dotnet buildコマンドを--outputオプションと一緒に使うと、出力先を変えられるわけですが、プロジェクト名を指定しないでこのオプションを使うと、ソリューション内に複数あるプロジェクトが全部同じディレクトリに出力されて、全部交ざっちゃって困るよねって話。
実際には、エラーで止まったりせず、警告を出して指定された出力先に出力されるようです。

PHPUnit

PHPUnit自体の機能とは特に関係ないんですが、うちのサイトの自動テストでは、HTMLの表示とかのテスト(結合テストに近いところ)もある程度やっていて、出力結果の保存とかもやっているんですね。
テストやるたびに、たとえ何の変更もなくて何の問題もなくても、何百ページ分ものHTMLファイルが出来上がります。
たとえ何の変更もなくて何の問題もなくても、改めて毎回テストをやること自体は、回帰テストといって、とても有意義なのですが、回帰テストは正しいか正しくないかだけわかれば充分なので、何が出力されたかまで細かく残す必然性はありません。
とはいえ、たとえ何の変更もなくても問題が起きることがあるから、回帰テストが必要なわけで、回帰テストに落ちたときだけは、何がおかしくなったのかを残す必要があります。
なので、普段邪魔になるからと言って、一律で保存をやめるなんてことはしないほうがいいでしょう。
だからといって、テストに落ちたときだけ保存するという器用なこともなかなか難しいわけで。
ということで、出力結果を破棄するオプションを作って、それをON/OFFすることで、保存するかどうか切り替えるようにしてみました。

アンパンマンDB(システム)

昔のアンパンマンDB(アンパンマンDB3)では、編集画面でプレビューすると、どの項目が編集されたか、編集内容を編集前と編集後で比較表示できるようになっていました。
しかし、今のバージョン(アンパンマンDB4)になって、項目の取り扱い方が大きく変わったため、比較表示機能は失われてしまいました。


復活させました。
今回、編集内容の表示機能を復活させるに当たって、以前より見やすくしてみました。
編集前後を並べるのではなく、diffコマンドみたいに差分のあった行を色分けして強調表示しています。
欲を言うならもっとdiffコマンドに寄せて、追加行に+、削除行に-をつけたりするとかあってもよかったかもしれないですね。

これを作るに当たって使ったライブラリは、編集データの文字列化に使うsymfony/yamlと、できた文字列の差分表示に使うsebastian/diffの2つ。
差分表示のほうははJavaScriptでやっちゃおうかなとか思ってたんですが、しっくりくるものがなかったので、結局どっちもPHPでやりました。

symfony/yamlは、構造化されたデータを複数行のわかりやすくdiffの取りやすい文字列に変換(シリアライズ)してくれます。
diffを取りやすいというのがポイントで、JSONだと配列の要素の後ろ(または前)にコンマがつくかつかないかが要素の順序で変わったりして、実質変化のない行まで差分になってしまうのですが、YAML形式だとそういうのが起こりにくくなっています。
ただし、構造化されていないただの文字列を渡すと、JSON形式の一行の文字列にまとめられてしまうので、この場合だけはシリアライズ処理をせずにそのままdiffに渡します。

sebastian/diffは、おそらくPHPUnitにも使われている、行単位の差分検出ライブラリです。
シンプルに使えば、一発でいい感じのdiff文字列を出してくれるのですが、HTMLページに表示するにはdiff文字列ではちょっと都合が悪いので、配列形式のデータを一度出してもらって、そこから自力でHTMLを作るようにしています。
差分行の色は、GitHubと同じ色にしました。

PHP8.4(Today I Learned)

【PHP8.4】メソッド引数のデフォルトnullがついに禁止される #PHP - Qiita
function foo(int $x = null)みたいな、null許容指定していないのにデフォルト値null入れてたらnull許容(ここでは?int扱い)になるっていう気持ち悪い挙動が今後なくなるみたいです。
で、うちの場合、PHP-CSFixerで@Symfonyの設定を入れていて、これがデフォルト値nullを入れていたら方の左に付いているnull許容指定の?を自動で消しちゃうんですね。
見た目気持ち悪いけど@Symfonyの推奨ならいいかーって思って消されるままにしていたんですが、今後そういうのは通用しなくなっていくので、対応を入れました。
先程の記事にも書いてあるのですが、nullable_type_declaration_for_default_null_valueオプションで、逆に?が足りないところに自動でどんどん付けてくれるようになります。

アンパンマンDBとGitHub Actions

アンパンマンDB(レンタルDVD収録見込み)

レンタルDVD収録見込みページの内部動作、微妙に変更しました。
あくまで内部動作だけで、今のところは表示内容は変化しません。
これを、アニメDB側にも表示できるようにしたいんですよね。
だから、逆引きできるようなデータ形式にしつつ、レンタルDVD収録見込みページ独自ではなく共通処理として切り出したのです。
アニメDB側も実はすでにほぼ出来上がっているので、明日辺りにはアップできそうです。

GitHub Actions(Today I Learned)

GitHub Actionsでエラーの時だけ特定の処理を実行する
GitHub Actionsで、テスト失敗時にもアーティファクトをアップロードするように設定したら、アップロードの成功によりテストの失敗がなかったことにされてしまって、テストの失敗に気付けず困っていました。
そこで使えるのが、steps.(ステップID).outcome
これなら任意のステップの成否を参照できそうなので、ジョブの最後にテスト成否を報告するステップを追加すれば、また気付けるようになりそうです。

ドラゴンクエスト10とNeoMuplとGitHub

ドラゴンクエスト10(おきがえリポちゃん)

エルドナ神の装束セット
おきがえリポちゃん ~ エルドナ神の装束セット ~ (2024/2/22)|目覚めし冒険者の広場
毎月の貸衣装。
和装にリボンの組み合わせですな。

エルドナ神の装束セット(後頭部)
頭にぴったりくっつく配置なので、髪にボリュームがあると埋もれてしまいます。

他の写真は以下から。
写真置き場「2024/02/27」

NeoMupl

Windows用ソフトウェア『NeoMupl』バージョン0.35.0を公開
リリースしました。
リリース内容としては、当初の予定通り。
ショートカット変更の件をREADMEに書き忘れていましたが、覚えていれば次期バージョンのタイミングで書き足します。

GitHub(Today I Learned)

Release 0.35.0 · mifumi323/NeoMupl
GitHubで自動的にリリースノートを作れるようになったのは便利。
今回はこの機能を特に考えずにコミットしていたので変な感じになっていますが、今後課題を立てるときはこの機能を意識すれば課題名としてもいいものになりそう。
「〇〇したい」じゃなくて「〇〇の機能を追加」とかね。

GitHub Actions

動くようになりました。
Composerのバリデーションは神経質すぎるところがあるので実行しないことにして、本当にやりたい自動テストだけにしました。
phpdbg使えなかったけど、普通にPHPUnitを動かすだけでカバレッジは取れました。
アーティファクトがばらばらのファイルじゃなくてZIPアーカイブしかなさそうなので、HTML出力したカバレッジレポートを見て回ることはできないけど、まあ手元でZIP展開すれば見られるのでこれはまあOK。
あとは…そう、もういらなくなったCircleCIとの連携を切るだけ。

GitHub Actions

CircleCIの自動テスト復旧より、GitHub Actionsに挑戦してみました。
今のところ、PHPのインストールはできているけど、Composerのチェックで引っかかって自動テスト本体までたどり着いていないようです。

Misskey

C#用のライブラリ探してます。
Twitter(自称𝕏)と同時投稿みたいなことやってみたいんですよね。
まあ、単にそれだけならすでにそういうアプリはあるわけですが、やっぱり自分なりにアレンジしたい部分もあるわけで。
ということで…

syuilo/Misq: .NET Misskey library
Misskeyのメイン開発者しゅいろさんによる公式ライブラリ。
公式なので最も信頼性が高いと思われますが、機能としては認証と通信周りの最低限に絞ってあり、便利機能などは一切ありません。
Misskeyは開発がアグレッシブで、APIの仕様もよく変わるので、ライブラリ側の対応を待たずに自力でAPIの変化に追随できるという意味では、使いこなせば最も強いのかもしれません。
とはいえやっぱり、よくあるアプリよりちょっとアレンジを加えたい程度のことを、自力で全部頑張るのはつらいので、もうちょっと意識低めのライブラリが欲しいところです。

a32kita/MisskeySharp: MisskeySharp is a client library for .NET applications to utilize Misskey.
そこで、これ。
名前からしてMisskeyのC#用ライブラリって感じがしますし、サンプルプログラムも付属しています。
見た感じ、よく使いそうな機能はありそうですね。
こっちのほうを一度試してみたいと思います。

WPF

高解像度のモニタを買って拡大率の設定を上げたら自作のソフトが軒並みぼやけたので、Windows Formsから高DPIに標準対応してるWPFに変更するのを検討中。
UI全部作り直しだし、古くてモチベないやつもあるけど、簡単そうなのからやっていきたいとか思っています。
そういえばWPFより新しいC#向けのUIフレームワーク、あったよな…。
UWPはUI以外も全面的に変更になるしWPF以上に未来なさそうだから除外するとして。

Docker Desktop

dockerのphp8にGD ライブラリをインストール #PHP - Qiita
このへんを参考に画像ライブラリ入れてみました。
これでとりあえず画像は表示されるようになりました。
文字列の表示とかツイート文字数計測とか、なぜかうまくいかない部分がまだ残っていますが、ひとまず目立つ部分はいい感じに動くようになりました。

PHPUnit

ちょっと前からテストが動かなくなっていたので、ちょっと修正していました。
ちょっと修正というにはちょっといろんなところを調べまわってちょっと大変だったのですが。
で、最終的に何が悪かったのかというと、ネットの疎通確認に確実に存在するURLとして http://example.com/ を使っていたら、https://example.com/ にリダイレクトされていて、httpの方に繋がらないぞという判定になっていたことでした。

大変だったのは、それを突き止めるために別ソフトの修正を行ったら、修正が何も反映されず古いビルドが使われ続けたこと。
こっちは、修正が反映されなくなり始める前のバージョンまでソースを差し戻して、そこから新たに修正し直しました。
こういうのをどうにかできるのはGitなどバージョン管理システムのいいところですね。

pleromaとアンパンマンDBとドラゴンクエスト10

pleroma(Today I Learned)

Pleroma / pleroma-docker-compose · GitLab
ここ参考に、pleromaのインストールに挑戦してみました。
WindowsのDockerだったからかなんなのか、なぜか起動してもポートが開かずアクセスできなかったんですが、まあ、Docker Composeの練習にはなったかな。

アンパンマンDB(記事更新)

情報提供の確認&商品情報の記入。

ドラゴンクエスト10(ミフミン)

王立アルケミア
いざ、王立アルケミアへ!

アルケミア歴代所長の肖像画
いやあ、肖像画でもワグミカ様はお美しい。

とまあ、こんなのんきなことを言っている場合ではないわけでありまして。

(ネタバレだよ)

荒れた王立アルケミア
スケベなオッサンを問い詰めに行くだけのはずだったのに…

下まで異形獣に支配された王立アルケミア
王立アルケミアは異形獣に支配されていたのでした。

ヘルゲゴーグ・烈
一番奥まで行くと、異形獣改めヘルゲゴーグの親玉が登場。
初手いきなりヤバそうな技出そうとしたのですが、こっちも初手必殺技が来たので、難なく阻止。
そして、パーティー編成も強敵向けに回復厚めにしていたので、危なげなく撃破。
それにしても、ヘルゲゴーグはロボットじゃなくて魔法生物だから、毒が効くんですね。
久々にタナトスハントが存分に活躍してくれました。

王様は…目的はまだわからないけどどうやら何かしらの悪意があって一連の事件を仕掛けていたようです。
次はそれの詳細を暴くところから。

他の写真は以下から。
写真置き場「2023/11/19」

<前 次>