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

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

<前 次>

ドラゴンクエスト10とSPFレコード

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

ペリポン&ペリポン2号
七夕イベント 『願い星瞬いて2022』 開催!(2022/6/30)|目覚めし冒険者の広場
七夕イベント全員分完了!
ペリポン就職という衝撃展開!!!
いや、ペリポンが本来登場するクエストをやってないので詳しいことはわからないんですが、とにかく無職なんですよこいつは!!

家具庭具も一通り買いましたが、個人的にはあまりピンとこない感じ。
なので、家具庭具の写真もなしです。
レプリカでいつでも使えるようになったので、またハウジングやりたいスイッチが入ったころに使えたらいいな程度の投資ってやつです。

他の写真は、以下から。
写真置き場「2022/07/13」 | ミフミンのDQ10メモ

SPFレコード(Today I Learned)

SPF レコードの例 | なりすまし対策ポータル ナリタイ
SPFレコードは以前からあれこれ調整していたんですが、ドメインを指定したり他のレコードを取り込む方法もあるようで。
これをうまく使えばサーバー業者のメールサーバーの設定に自動的に追随するようになるのかな?

アンパンマンDB

キャラ「サフィー」を更新
キャラ「エメラ」を更新
「関俊彦」のデータを更新
Twitterのハッシュタグのページを更新
上3つは、日替わり紹介bot用に元の記事よりちょっと記述を増やしたので、元の記事の方にも反映させた形です。
Twitterのハッシュタグは、ちょうど今日がその日だった「#うきぐも城の秘密20th」です。

@WIKIとアンパンマンDBとPHP

@WIKI

管理画面のメモ用Wiki、@WIKIに移転しました。
もともと非公開コンテンツだったので、@WIKIでもやっぱり非公開です。
ページ名だけはURLにアクセスすればわかってしまうのですが、まあ、URLも非公開なので多分大丈夫でしょう。

アンパンマンDB

「鉄火のコマキちゃんとミス・マリーネ」の作品情報を追加
「どんぶりまんトリオとオーロラ姫」の作品情報を追加
来週放送情報の追加。
美しい大人の女性のキャラクターがABともに出る感じですね。

PHP(Today I Learned)

PHP: 配列 - Manual
配列のアンパック。
array_mergeでやっていたような配列の結合を、[..$array1, ...$array2]みたいに記述できる機能です。
簡潔な構文で記述できて、性能もよくて柔軟性も高いそうです。

PukiWikiを復活させようと試行錯誤していた時に見つけました。
機能自体は7.4からあったのですが、うちのサイトでは7.4をすっ飛ばして一気に8.1まで上げてしまったので、気付けませんでした。
ネット上の記事では、JavaScriptでの同様に機能からの類推で、「スプレッド構文」と呼ばれることが多いようですね。

ただ、便利で、今後は積極的に使っていきたいとは思うのですが、性能がいいからと言って、過去のコードのarray_mergeまで全部置き換えるのはちょっと無謀かなって思いました。
というのも、array_mergeを削除するのはいいとして、丸括弧()で囲っていた部分を角括弧[]で囲ったうえ、両方の配列に...を付けるって言うのが、繰り返し間違いなく行うには結構複雑な手順なのです。
特に...忘れに関しては、エラーが出ずに、ただ望まない処理結果が返るだけなので、間違った修正をしても気付かずに、発見したころには元のコードを忘れていて修復不可能、ということが起こりそうなのです。

リトルノア楽園の後継者とドラゴンクエスト10のプレイヤーイベントを検索および通知するサイトとRindow Math Plot

リトルノア楽園の後継者

リトル ノア 楽園の後継者 | Cygames
復活ですとっ!?
まあ、前作の完全版でもなければ続編でもないし、何ならゲームジャンルも全く別物だけど、なかったことになってなかったというのはちょっと嬉しいですね。

あと、買い切りというのも個人的には嬉しいところ。
前作は基本無料アイテム課金でストーリーをちょっとずつアップデートで足していく方式だったのですが、プレイ人口が減っていって録にアップデートされなくなり、重要人物だったはずの人が期間限定イベントで茶番劇やったまま、何も解決せず未完でサービス終了しちゃったんですよね。
買い切りなら、最初に出した時点でひとまずエンディングまでは到達できるようになっているはずなんで、その点安心なのです。

8月にスペシャルエディション(2000円)も出るらしいですが、価格と内容を見る限り、単に本編+有料DLC2種を値引きせずセットにしただけのようです。
念のため説明しておくと、全部個別に買う(本編1500円+DLC第1弾300円+DLC第2弾300円=2100円)よりは100円だけ安くなりますが、DLC1+2パックが500円で100円安くなるんで、“スペシャルエディションとしての”値引きはないということです。
わざわざ待たずとも、後でDLCを買い足したほうが無難そうですね。

ドラゴンクエスト10のプレイヤーイベントを検索および通知するサイト

メールがまだ変だったので、SPFレコードを再設定して、今度こそ解決しました。

Rindow Math Plot(Today I Learned)


Rindow Math Plot : Rindow Mathematics : Rindow
PHPのグラフ作成ライブラリです。
「php グラフ」でGoogle検索してもピンとくるものがなかった(PHPから出力したデータをJavaScriptでグラフ化するというPHPの意味がないものが多かった)ので、Composerで「composer search plot」で検索したら、目的に近そうなのがありました。
とりあえず、上に置いた画像みたいなグラフが描けます。
少々見た目が殺風景ですが、演出にこだわりたいわけじゃないし、むしろ個人的にはこのくらいのシンプルさが好きです。
グラフを並べられるのは見ての通りですが、第2軸(右側にも軸を作って、スケールの違うものを同じ図に表示)の実現方法は今のところよくわかっていません。

以下、ソース。

header('Content-Type: image/png');

$mo = new \Rindow\Math\Matrix\MatrixOperator();
$plt = new \Rindow\Math\Plot\Plot(null, $mo);

[$fig, $axes] = $plt->subplots(1, 2);
$x = $mo->array([0, 0.2, 0.4, 0.6, 0.8, 1.0]);
$y1 = $mo->op($x, '**', 2);
$y2 = $mo->array([
[0.0, 0.0], [0.3, 3.0], [0.7, 4.0], [1.2, 3.0], [2.8, 1.0], [5.0, 0.0],
]);
$axes[0]->plot($x, $y1, null, 'y1');
$axes[0]->legend();
$lines = $axes[1]->plot($x, $y2, null, 'y2');
$axes[1]->legend($lines, ['data0', 'data1']);
$plt->show();

アンパンマンDBとTGWSAdmin

アンパンマンDB

「ドロリンとバケ〜るカーニバル」の作品情報を更新
キャラ「フワリー」を更新
映画のこと、書いてきました。
で、書き方で昨年の映画を参考にしていたら、昨年の映画のヒロインの情報が全然書けてなかったので、ちょっと追記しました。

TGWSAdmin

スマホで撮った縦長画像がうまく処理できていなかったので修正しました。
以下のサイトに、やりたかったことそのままのサンプルがありました。

EXIFの情報に基づいて画像を回転する - smdn.jp

PropertyItemsを見て回転、ですね。
サンプルは3種類の回転しか対応していなかったので、反転の方も対応して取り入れてみました。

アンパンマンDBとPHPとVoidolとInternet Explorer

アンパンマンDB

Twitterのハッシュタグのページを更新
「アンパンマンポテト」を追加しました。
「アンパンマン」タグで検索していると、ちょくちょくおいしそうなポテトの写真が出てくるので。

PHP(Today I Learned)

PHP: プロパティ - Manual
プロパティ自体は昔から使っていたけど、8.1からはreadonlyが付けられます。
最初に代入した値以外に変更できなくして、想定外の変更によるバグを防ぐ、イミュータブルを実現できるというやつです。
で、もう一つ…

PHP: コンストラクタとデストラクタ - Manual
8.0から追加されたコンストラクタのプロモーション機能と組み合わせると、コンストラクタを書くだけで、最初にデータを全部受け取って保持するイミュータブルなクラスが簡単に書けてしまうというわけなのです。

まあ、今開発しているものは、ミュータブル(変更可能)なことに意味があるクラスなので、readonlyの方は使ってないのですが。
でも多分、今後どこかで必ず使うことになると思います。
…覚えていれば。

Voidol

Voidolを期間限定で無償配布します。PC Watch様にも取り上げていただきました。 | クリムゾンテクノロジー株式会社
ボイスチェンジャー、インストールしてみました。
私はあまり声出し配信とかしないのですが、VRChatをインストールしてたり、やっぱりたまには配信したくなるかもしれなかったりするし、そのときに地声から離れたらちょっとは抵抗感なくなるのかなと。
まだ試運転すらしていないですが、何かしら喋るネタでも探して試してみようかな。

Internet Explorer

IEはとっくにサポート終わってるわけですが、IEと一緒に使えなくなってしまったサイトが世の中にはいろいろとあったそうで、うちのサイトはどうなのか、というのを一応語っておこうと思います。

まず、そもそも当サイトTGWSは、Internet Explorerに対応していません。

一部のコンテンツ(具体的に言うとミディビ)だけは、IEにだけ残されたプラグイン機能に依存していましたが、そっちはそっちで、早々にプラグインの方がサポート外になったので、IEがサポートを続けようとももはや動きません。
このようなコンテンツは、歴史的な理由で残しているだけなので、今後も、特段の事情がない限りは、サポート外のまま残ります。

一方、ページ構成としては、一部を除き、JavaScriptやCSSが正常に機能しなくてもHTMLの基本的な機能だけで成り立つようになっています。
なので、IEでもそれ以外でも、何なら古いバージョンでも、多少崩れながらも意味が解る程度には表示できるかと思います。
おそらく、将来ブラウザが進化しても、それなりに表示できることでしょう。

なので、IEがサポート終了したことで、私のサイトが変わることはありませんし、移転や閉鎖の予定もありません。

アンパンマンDBとNeoMuplと更新履歴とPHP

アンパンマンDB

未実装のアイディア。
「ヤーダ姫」とか、「かつぶしまんと鉄火のマキちゃん」とか、タイトルだけで区別のつかない記事がいくつかあります。
そういうのに区別をつけるために、今は「ヤーダ国のヤーダ姫」みたいな説明的な名前を、「他の呼び方」に入れて対応しています。
こういう説明的なタイトルの、タイトルそのものじゃない補助的なテキストを、独立項目として作ろうかと考えています。
ヤーダ姫の例で言えば、「ヤーダ国の」や「ヤーダ星の」などを入れる形です。

NeoMupl

ファイルの場所を開く機能 · Issue #29 · mifumi323/NeoMupl
これまた未実装のアイディア。
ショートカットファイルを右クリックしたら出てくるメニューの項目みたいなやつです。
浮き沈みランチャーには同じような機能を実装しているので、そんな感じで。

更新履歴

先月やっていた根本的な作り直しの続き。
履歴項目の読み込みを作っている最中なのです。

PHP(Today I Learned)


で、そのときに、データベースから読み込んだ結果をPHPのクラスに変換する処理で、callableを渡す新しい書式。

PHP: 第一級callableを生成する記法 - Manual

PHP8.1から出てきた記法で、従来は「['NoteItem', 'fromArray']」と、文字列の配列で記述するしかなかったのですが、「NoteItem::fromArray(...)」という書き方で同じ意味を表現できるようになったのです。
文字列だと、プログラム的に意味があるのか単なるテキストなのか文法的には区別がつきませんが、「(...)」を使った記法だと、明確にプログラム的に意味のあるcallableとして書けるのです。
ただ…見た目気持ち悪いですね…慣れるしかないか。

WinUI 3とアンパンマンDB

WinUI 3

Windows App SDK を使用して新しいプロジェクトを作成する - Windows apps | Microsoft Docs
いつぞやのProject Reunionの正式版ですね。
ちょっと触った感じでは、UWPと大差ない感じ?
グラフィカルなツールが、エラーで使えませんでした。
やりたいことも別に定まってないし、まだまだ様子見かな。

アンパンマンDB

PHPバージョンアップに伴う微妙なエラー、アンパンマンDBを中心に起こっているので、そちらを重点的に修正中です。

Twitter API

Standard search API | Docs | Twitter Developer Platform
GET /2/tweets/search/recent | Docs | Twitter Developer Platform
Twitterの検索API調べてました。
検索クエリの上限文字数を知りたかったのですが、一般ユーザー向けとしては、以下のように書いてありました。

バージョン1.1:500文字
バージョン2:512文字

で、「文字(characters)」って何なの?ってことで、実測したのが以下のツイート。


バージョン1.1ではバイト数単位のようで、バージョン2は12文字増えたと思いきや500バイトすら検索できない模様。
マルチバイト文字で500バイト前後のパターンも試してみるか…。

CircleCI

そろそろPHPのバージョンを上げたくて、その前にCircleCIの自動テストでバージョンを上げたときの挙動を確認したくて、CircleCIのドキュメントを久々に見たら…
Announcing our next-generation convenience images: smaller, faster, more deterministic - CircleCI
要は、Dockerの新しいイメージができてるので、今後はそれを使えということ。
とりあえず、こうかな?って感じで試してみたけど、今のところうまくいっていません。

PHPのcurl(Today I Learned)

先日のFlaky Testの件、本来安定しているはずの状況でも環境問題で不安定化してしまうものがありました。
開発環境でも本番環境でも引けるのに、テスト環境(CircleCI)でだけ何故かDNSを引けないことがあったのです。
それを解決するには、自前でDNSを解決するしか、ってことで、これ。

【php】curl関数でresolveオプションを指定して名前解決を操作する at softelメモ

curl_setopt($ch, CURLOPT_RESOLVE, array('ホスト名:ポート番号:宛先のIPアドレス'));
の形式でIPアドレスを指定できるというやつです。

その前に、本当にDNSのせいなのかも確認しておきたいところですが、何せ不安定なもので、「失敗の様子を確認したい時に限って失敗してくれない」ということもありうるんですよね…。

GChatとfunyanとドラゴンクエスト10とFlaky Test

GChat

管理画面側なので実際に触っているユーザーには影響ないんですが、辞書管理の応答削除機能をいまさら作りました。
UIだけあって何も機能してなかったのが何年も放置されていたんですよね。
うちのサイトで実際に稼働しているほうだけです。
配布用の方は修正する予定はありません、面倒なので。

funyan

同じく数年放置案件。
ちょっとだけnullable関連の修正を行いました。

ドラゴンクエスト10

瀑布の女王
(ァォィョッュ)ヴェリナードの配信クエストを最後までクリアしました。
オーディス王子が王様を目指すやつです。
メインストーリーの方でメルー公が息子を助けるのに執着した理由がわかるんですよね。
オーディスの方はというと、「結局君に頼りっぱなしだったな」と、嘘偽りのない本当のことを言っていました。
もうちょっと自分で頑張ってくれ!

Flaky Test(Today I Learned)

Flaky Testとの戦い - Cybozu Inside Out | サイボウズエンジニアのブログ
Flaky Testという言葉を知ったので。
ソフトウェアの開発に関する用語で、同じ条件のはずなのに成功したり失敗したりと不安定なテストです。
これがあると、不安定だからテスト失敗しているのか、プログラムがまずいから失敗しているのかがわからず、テストが信用できなくなってしまうのです。
要因としては、テスト機材のスペックとか、時間や時期によるものとか、乱数が関わるものとか、通信関係とか、いろいろあるようですね。
うちのサイトのテストでも、そういう不安定なテストがあります。
不安定要因自体も、通信関係を中心に、何が起きるのか確認したい部分があるので、完全になくすことはできないんですが、せめて不安定要因を除いた部分と、不安定要素そのものになるべく切り分けてテストするようにしています。

Haxe

Haxe - The Cross-platform Toolkit
Haxeについて調べてました。
複数のプログラミング言語のソースコードにコンパイルする言語です。
以前から興味出していたんですが、日記の方には書いてませんでした。
私はC#とPHPを中心的に使っているんですが、Webのフロントエンド向けにはJavaScriptがいいとか、やりたいことに対して使うべき言語がてんでバラバラなんですね。
Windows向けとWeb向けに同じものを取り扱う別のシステムを作ろうとしたら、同じものを違う方法で書き直すことになるわけで、二度手間になるわけです。
この共通ロジックをHaxeで書けば、C#とPHP、そしてJavaScriptにコンパイルして、同じものをいろんな場所で使えるようになるはずなのです。

faviconとアンパンマンDB

favicon

SVG形式のファビコンを設置しよう | Webクリエイターボックス
ブックマークとかタブとかにアイコンとして表示されるfaviconがいつの間にやらSVG形式にも対応していたようです。
今のうちのサイトの仕組みだと適用がちょっと大変なんですが、マルチアイコンが必要なくなるので、ちょっと試してみてもよさそうです。

アンパンマンDB

フロントエンドコントローラを新しい形式に差し替えるのが全ページでひとまず完了。
実はビューの古い仕組みがずいぶんと残っていて、そこから古いフロントエンドの機能の一部が呼び出されているので、完全に新しくできたわけではないんですけどね。

Project Reunionとゼルダの伝説夢をみる島

Project Reunion

Project Reunion 0.5 を使用してデスクトップ Windows アプリをビルドする | Microsoft Docs
昔ながらのWindowsデスクトップアプリとモダンなUWPの統合を目指したプロジェクトですね。
こういうのって、現れては消え、また新しいのができては失敗を続けているけど、今度こそ…どうなのかな。

今のところは、Visual Studio 2019に拡張機能を入れて、新規プロジェクトとして作る形になります。
試しに新規プロジェクトを一個作ってみましたが、UIの設計にグラフィカルなツールが使えないので、まだまだバージョン0.5感が否めませんね…。
メインの開発は別の形で進めつつ、あまり期待しないで様子見ておこうと思います。

ゼルダの伝説夢をみる島


カギの穴ぐらをクリアして、ペガサスの靴であちこち走り回っていました。
オカリナも手に入りそうなところまで来たけど、それは後回しにして、気が済むまで走り回ろうと思います。
アイテムを手に入れるたび、行動範囲がぐんぐん広がっていきますね。

ドラゴンクエスト10

2021年年越しイベント
新春イベント。
とりあえず、しろいコキンだけ終わらせてきました。
デスマスターと魔剣士が出てきたんですが、全然知らない人で、完全に流れに取り残されていましたね。
とりあえず、「寿ぐ(ことほぐ)」という言葉を知れたので良しとします。祝いの言葉を言うという意味です。

GitHub Actions

調べていったら、GitHubからお勧めされるテンプレートが、昨日参考にしたものより新しいバージョンのようで。
まだ不明点があるので、すでに動いているプロジェクトにいきなり適用するのではなく、テスト用のリポジトリを作って試してみようと思います。
.NET Frameworkを使う場合と、.NET Coreを使う場合でも違うし、もちろんC#以外を使う場合も設定項目は違うわけです。

LocalCrawlerとTwitter APIとドラゴンクエスト10

LocalCrawler

先日から言っていた自分のサイトのテスト環境を全ページ走査する自分用ツール、一応LocalCrawlerって名前があるのでカテゴリを作っておきました。
全ページ保存しようとすると時間的にも容量的にも大変な気がしたので、全ページを通ってエラーのみ記録するようにしてみました。
そして、ページを保存するなどの機能は、コマンドラインオプションで指定できるようにしようかと画策中。

Twitter API

新しく進化したTwitter APIの登場
Twitter APIのバージョン2です。
このバージョンだと、以前は使えなかったアンケート機能も非公式アプリで使えるようです。
これまた自分用ツールのmifumitterあたりで使えそうです。

ドラゴンクエスト10

ハロウィンイベントのクリア後のやつ頑張ってみたけど、500個集めたあたりでだるくなってやめました。
これ、個数以外の条件があるのか、それとも要求数が馬鹿みたいに多いのか?
流石に人が多くて重い場所でひたすらいいね連打は疲れます。

日記とドラゴンクエスト10とTcpListener

日記

管理用の活動記録画面に雑記の最新情報を出せるように。
…まあ、ここんとこ全然更新してないんですけどね。

ドラゴンクエスト10

モーグリチケットはぼちぼち集まっています。
装備品を狙うだけなら今のペースでも何とか間に合いそう。

TcpListener(Today I Learned)

C#でWebサーバー(サーバーで動くWebアプリではなくサーバーそのもの)を作ろうと思ったらTcpListenerとTcpClientが便利。

ミスタードリラーアンコールと日記とComposer

ミスタードリラーアンコール


もう少しだったのに…無念。
アクション面に不安があるからなるべく動かさずに確殺する方向で進めているのですが、真っ向勝負不可避になると厳しいですね。
ここも、動き出すのを防げないからせめて動いた次の瞬間に壊れるように仕向けて、自分は安全地帯に逃げ込む算段だったのですが、予想より早く壊されて安全地帯の確保が間に合わなかった形です。

日記

管理用の活動記録画面に、ゲーム記の一部のページにある進行状況と、Qiitaの投稿情報と、最近コミットしたGitHubの情報を出せるようにしました。
APIは便利ですね。

Today I Learned

日記の賑やかし用と言えば、これもあったんでした。
PHPのComposerに、fundというのがあったんですよ。
「composer fund」というコマンドで、支援を求めているパッケージを調べることができるというものです。
Composerを使っている人が直接的に得をする機能ではないので日本語情報は少ないですが、ライブラリ開発者だって金がないと暮らしていけないし、優秀なライブラリを作れないわけですからね。
無料の物にあえて金を払うというのも、様々なものが無料で手に入る今、考えるべきことなのかもしれません。

<前 次>