「TIL」に関する日記(2)

「Today I Learned」今日学んだこと。

<前 次>

WinUI 3(Today I Learned)

MediaPlayerElement クラス (Windows.UI.Xaml.Controls) - Windows UWP applications | Microsoft Learn
WinUI 3で動画再生するにはMediaPlayerElementを使えばいいみたい。
メディアプレイヤーを作りたければメディアプレイヤーを使う、わかりやすくていいね!
ただ、1コマ戻す機能が1/24秒固定だったり、妙なところで不便さがある感じ。
1コマ進めるほうはちゃんと1コマのようだけど。

WinUI 3

高DPI対応、そもそも古いフレームワークで対応しようとするから面倒なんじゃないかと考えて、現状最新の.NET用Windowsデスクトップアプリケーション用フレームワーク「WinUI 3」を試してみました。
WinUI 3 - Windows apps | Microsoft Learn

UWPみたいに新しめなUI使えて、それでいてUWPみたいな制限は少なく、普通のEXEファイルとしてもビルドできます。
任意のプロセスの起動とか、Windows APIも呼び出せます。
もちろん、高DPI対応は、もっとも正確にDPI対応が行われるPerMonitorV2。

試しに画像と文字を置いてみました。


これは等倍。
画像ははっきりくっきり、文字も普通にいい感じですね。


これが200%。
画像は拡大されました。
ぼやけてしまいましたが、元の解像度が低かったし、これが本来の動作なのでとりあえずOKです。
文字はより一層はっきりくっきりして、高DPIに求めているものがしっかり出てくれた感じですね。

複数ウィンドウを扱うのができるかどうかが今ちょっとわからないのですが、一画面で収まるものなら問題なくできそう。

あと、DPI変更に反応して画像を差し替えるみたいなこともできたらいいですね。
このあたりかな。
How to get DPI with WinUI 3? - Microsoft Q&A

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

ゲーム記とHTML

ゲーム記

PA-APIでAmazonの商品情報を取ってきて商品リンクを作る仕組み開発中。

HTML(Today I Learned)

rel=relation - 関係指定 - とほほのWWW入門
HTML 属性: rel - HTML: ハイパーテキストマークアップ言語 | MDN
aとかlinkタグなどにつけるrel属性。
いくつかは知っていたし使ってもいるんですが、ずいぶんたくさんありますね。
非標準とはいえ実用的に使われているsponsoredなんか、上で言ってた商品リンクにはぴったりです。
rel="external"は、それ自体に特別な効果はないようですが、class="external"で外部リンクのスタイルにしていたところを、もっと自然なマークアップにできそうです。

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

グリコ2レーティング(Today I Learned)

レーティングについてと,グリコ2レーティング(Glicko-2 System)におけるレーティング算出方法 - 機械学習、たまにゲーム
いろんなゲームで見かけるレーティング。
その計算方法の一つだそうです。
根本的な発想は私にも思いつけるけど、具体的にどのように計算するのが適正なのかについては、わからないままでした。

これを参考にすれば…と思ったけど、これを参考にしてやりたいことは今のところないな。
Anpanatorは…うーん、やっぱり適用できない気がするなァ。

TGWSAdmin


メディア設定ダイアログに貼り付けボタンを付けてみました。
これまでは一度ファイルに保存してから開かないといけなかったのですが、これで一部分だけ切り取ってから登録とか、スクショコピペとか一瞬でできるようになりました。
あと、ついでにファイルもクリップボード経由で貼り付けられるようにしました。

ちなみに冒頭の画像は、ひたすらメディア設定ダイアログをスクショ→貼り付けを繰り返したやつです。
これ、いちいちファイルに保存しながらだと手数が多くてやってられないんですよね。

今日の実装技術(Today I Learned)

この辺の実装に参考にしたサイト。

Clipboard.GetImageとClipboard.GetFileDropListですね。

こんな感じに、今日実装したやつに使った技術とか参考文献とかを日記に書いていくのもいいかもしれないですね。

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

pleroma(Today I Learned)

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

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

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

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

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

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

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

(ネタバレだよ)

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

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

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

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

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

Haxe(Today I Learned)


Haxe、興味は持ちつつも全然触ってなかったので、ちょっと手ごろなサンプルコードをAIに出してもらいました。
コマンドは少々修正が必要だったけど、コードの方は特に問題なくビルドできました。

出来上がったコードは、C#側は.NET Framework 2.0、PHP側はPHP 7.0相当のコードが出てきて、両者とも、Haxe自身の言語仕様やライブラリとの互換性のためのファイルがいくつか追加されていました。
C#の方は、丁寧にもDLLにまでビルドしてくれたので、コードで共有しなくても、このDLLをプロジェクトに追加すれば、Haxeで作ったライブラリをC#で使えることになります。
PHPの方は、パッと見た感じ、互換性用のファイルが、PHP 8.2ではエラーになりそうな感じだったので、何か追加対応をしてエラー解消するか、これのためのPHP 7.0サーバーを作るか、何か対応が必要そうです。

プロジェクト実質停止してるけど、funyakあたりでも何かしらの形で使ってみたいんですよね…。

PESPA(Today I Learned)

Webの次世代アーキテクチャ - PESPA - Qiita
Webアプリの作り方で、JavaScriptに頼らないシンプルなマルチページアプリは良くも悪くも愚直で、一見スマートなシングルページアプリは複雑怪奇、両方のいいとこどりをしたのがPESPAってとこかな。
こういうのは代表的なフレームワークを使って1個何か作ればよくわかる気がするけど…うーん、何を作ろうか。

アンパンマンDBとさかだちの街とカスタムURLスキーム

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

来週の放送情報。

さかだちの街


またちょっと進めました。
残るはあと1ステージ。

カスタムURLスキーム(Today I Learned)

カスタム URL スキーム の 設定 と 利用 - galife
HTMLのリンクから他のアプリを起動できる機能。
試してみたらうまく起動できないパターンもあったので何とかできないか検討中。
巧くいろんなアプリ起動できたらいろいろ捗りそう。

MisskeyとナマライザとGitHub Codespaces

Misskey

📛松田美文 (@matsuda323) | Misskey.io
登録してみました。
マストドンとはまた別の分散型マイクロブログだとか。
Twitterから移行するというよりは、あちこち様子を見てみたいという気持ちですね。

ナマライザ

ライブラリ更新 · mifumi323/Namalyzer@6dd8da4
昨日のWellKnownUriParserが期待通りに動いていたので、ナマライザに反映。
こっちはまた日を改めてリリースしようと思います。

GitHub Codespaces(Today I Learned)

GitHub Codespaces のドキュメント - GitHub Docs
で、ナマライザのリポジトリの操作のためにGitHubに行ったらこんなのがありました。
クラウドの開発環境で、月60時間までは個人だと無料だとか。
継続的に使うかどうかわかんない技術を手元の環境を汚さずに試せるし、時間にさえ気を付ければそのまま本格的に開発に入ってもいいってことかな。

サイトの近況とサマルトリア王子同盟とYarn

サイトの近況

最近、リファラを独自に解析した検索フレーズ一覧が、URLだらけになってきました。
詳しく調べてみたところ、「https://www.google.com/url?q=https://tgws.plus/anpandb/tekkanokomakichan&~」みたいな、検索のURLと似たパラメータを持つリダイレクト用のURLを誤認しているようでした。
最近はGoogleでも他の検索サイトでも、プライバシーのため本来のリファラを出さなくなったので、リファラを解析しても、間に挟んだ何の情報もないページしかわからなくなったんですね。
リファラ自体あまり来なくなったとはいえ、一応リダイレクトは除外するように対応しておこうかな…。

アキタラヤメル「サマルトリア王子同盟」

エラーログに微妙な警告が残っていたので対応しているのですが、維持し続ける必要あるのかなって思っています。
参加者は昔来てくれた3名だけだし、ファン活動で繋がりたいなら昔みたいな同盟サイトに頼らず各種SNSでやればいいし、むしろうちのサイトに記録が残るのはある種のデジタルタトゥーなのでは?と思ったりもします。

Yarn(Today I Learned)

Home | Yarn - Package Manager
JavaScript向けのパッケージ管理システム。
私はnpmしか使ったことなかったですね…。
そもそもあんまり大々的にJavaScriptを使いたい気持ちもないし、一応知識として知っておくだけ知っておこうかなというところ。

HSVと爆ボンバーマン

HSV(Today I Learned)


アンパンマンDBのコメント管理ではユーザーごとに色分けしていて、その色計算にHSV色空間を使っていたのですが、計算が間違っていました。
どうにも円錐モデルと円柱モデルがあって、RGB→HSVを円錐モデルで、HSV→RGBを円柱モデルで計算してしまっていたようでした。
知らずに計算式だけ使っていたからこれまで気づかなかったんですね。

爆ボンバーマン

レインボーパレス3面の攻略情報の続き作成中。
マップ1はとりあえず完了。
マップ2はシンプルなので明日にでも完了するかと。

実は爆ボンのページは、古いページは古いゲーム記のシステムで動いていて、とっとと新しいシステムに完全に入れ替えたかったんですよね。
テクニックのページなどは、古いシステムすら使っていない完全に単なるHTMLなので、一周回って安全です。

ドラゴンクエスト10と更新履歴とSolidJS

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

お宝集めて大航海!「幻の海トラシュカ2022」 (2022/7/5)|目覚めし冒険者の広場
一日遅れですが、トラシュカ始めました。
まずはミフミンから始めたんですが…

幻の海トラシュカ2022
なんだ…

幻の海トラシュカ2022
なんだ…

幻の海トラシュカ2022
なんなんだ!!!

幻の海トラシュカ2022
オールスターどころか無法地帯じゃないか!

お宝は、いつもの宝石やら魚やらがらくたやらに加えて、キャラクターの像が落ちてきます。
通常の像はもちろんのこと、ドット絵像、ちびキャラ像など、何でもあり。

邪魔してくるモンスターたちも、いつものばくだん岩系統はもちろんのこと、例年だと高々一種類しか出なかった特殊仕様のモンスターが、遠慮なく続々降ってきます。
死角となる海面から飛び出してくるサメ、地面を揺らして足止めしてくるモアイ、視覚妨害してくるイカ、他にも何かいた気がするぞ。

お宝の方は、何が出てこようとも、出てきたものを取るだけなのですが、モンスターの方は予測不能だから対応しきれなくて、やるたびにスコアが乱高下します。
今回はよくできた………あれえええええ???…みたいなことになっちゃうことも。

景品とかの画像は一覧から見てください。
こっちはこっちでツッコミどころはあるものの、本編が突き抜けているので相対的に控えめです。
写真置き場「2022/07/14」 | ミフミンのDQ10メモ

更新履歴

根本的な作り直しの続き。
現行データからの移行ツールを作りました。
これで実際の運用に近い形で画面を見ながら開発していけます。
テストデータを使ったテストは随時行っていますが、やはり最終的には本物のデータが一番わかりやすいですからね。
もちろん、本稼働開始のときにも使えるツールなのです。

SolidJS(Today I Learned)

リアクティブJavascriptライブラリ
Reactの代わりに使えそうなJavaScriptのフロントエンドフレームワーク「SolidJS」。
別にReactで不満を感じていたわけではないのですが、フレームワーク自体のコードが小さい、それどころかビルドすると消えてなくなるというのはすごいですね。
Anpanatorあたり書き換えてもいいのかなとか思ったり思わなかったり。

<前 次>