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

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

<前 次>

美文のキャラボックス(仮)と原神

美文のキャラボックス(仮)

Advanced Custom Fieldsを使って記入したカスタムフィールドをいい感じに表示するためにInsert PHP Code Snippetを使ってみました。
一発で全部表示みたいな便利関数はなかったけど、その分自分で全部決められる自由度はあるので、まあこれはこれで…。

WordPressって標準機能の時点でそこそこ充実しているけど、細かい利便性はプラグインに任せているようで、細かいことですぐプラグインが必要になってきますね。
まあ、今回はテーマのファイルに手を加えたくなかったというのもありますが。

原神


原神、始めました。
とはいえ、よく見るコイツの名前をど忘れして確認のためだったのであまり真面目にやる気はないのですが。

mifumitter

どうやら検索等でもリツイートの省略の扱いは同じようです。
というより、ツイートを返すAPI自体が、Twitter API v2ではリクエスト・レスポンスともにほぼ共通する形式を持っていて、APIの目的ごとに追加のパラメータを持っているだけのようです。
となると、リツイートのメディアの補完に対応した共通部品を作るという方向性がいいかな。

mifumitter

リツイートのメディアがうまく取れない問題に遭遇。
まずそもそもの前提として、リツイートには、リツイートそのもののデータと、リツイートされた元ツイートのデータが含まれます。
そのリツイートそのものの本文は、「RT @○○: 元ツイートの本文」という形式になっているのですが、先頭に付く「RT @○○: 」の分だけ本文が長くなって、元ツイートが一定以上長いと末尾から省略されてしまいます。
で、どうやらリツイートに添付するべきデータは、Twitter API v2では本文末尾に付加されるURLを元に特定しているようで、末尾省略が発生すると、URLが消えたり不完全になったりして、特定できなくなってしまうようなのです。
解決するには、末尾省略を検出して元ツイートのデータを改めてリクエストする…とかかなぁ。

SelfRenamerとドラゴンクエスト10

SelfRenamer

mifumi323/SelfRenamer: 自分自身をリネームする実行ファイルの試み
以前試しに作ったものですが、普通はできない「実行ファイルが自分自身をリネームする」というのを、何とか実現してみるというやつです。
ソフトウェアの自動アップデートに使えそう…とはいっても、今どきならアップデータが別途あるものだし、実用的に使う機会はなさそうかなーというところ。
アップデータ自体の自動アップデートに使うか?

ドラゴンクエスト10(ァォィョッュ)

たいようのおどり
ァォィョッュのストーリー進めました。
アラハギーロ王国の神の碑石を守るクエストです。
ボス戦では、攻撃をちゃんと避けてたはずなのになぜか突然全員死んで一度負けたりしましたが、再戦で普通に勝てました。

ボス戦も含む当日の画像は以下から。
写真置き場「2022-04-24」

PHPUnit

ちゃんとクラスになっている部分はテストできるのですが、サーバーから呼び出されるPHPファイルに直接あれこれ書いているものは、なかなかテストしづらいのです。
ちゃんと「呼び出すファイル」と「ロジックを書いているファイル」を分けていればいいのですが、小さいプログラムを手っ取り早く実行できるようにしようとすると、やっぱり呼び出すファイルに直接書いた方が早いし解りやすかったりするのです(Hello Worldするためだけにフレームワークのあちこちを飛び回るようなプログラムは書きたくない)。
こういうのをなんとか自動テストの仕組みに乗せるにはどうしたらいいかと考えたのですが、結局テストって入力に対する出力を見るだけなので、入力に使う変数($_POSTなど)を差し替える、出力をバッファリングして捕まえる、というのがある程度の落としどころかなと考えています。

PhpTestTemplateGenerator

mifumi323/PhpTestTemplateGenerator
昨日の日記で行っていたPHPのテストのテンプレートを自動生成するプログラムを作ってみました。
まあ、このプログラムの方はPHPじゃなくてC#でできているんですが。
あと、画面上で編集してから保存したかったり、一部分だけ抜き出して既存のテストコードに付け加えたかったりしたので、GUIになっています。
何もないところからの全自動生成ならCUIの方が有利なんですが、後付けで様子を見ながらの作業なので、状況が見える方が都合がいいのです。
一応一般公開していますが、自分用のツールなので、他の人にとっての使い勝手は知りませんし、実行ファイルの配布もなしです。

PHPUnit


テストコードを書いていない部分が多いものの、ゼロからテストコードを書く部分はしんどすぎるので、全部の機能に対して、テストの最初の一歩となるテンプレートを作ってみることにしました。
テンプレートのままでは未完成なテストなので、Incompleteばっかり出ますが、逆に言えば、このIncompleteを手掛かりにテストを作っていけばいいということになります。

PHPUnit

PHP8.1に上げたらエラーがいっぱい出たというのも、CIが落ちるようになったのも、テストが充分であればある程度防げたはずのことだったのです。
ということで、自動テストのカバレッジを上げる方向で、クローリングではテストできない編集機能周りを中心に、テストコードを増やしていこうと思います。

PHP8.1

開発用サーバーが動くようになったので、本格的にPHP8.1移行を始めました。
バージョンアップでもひとまず動作は変わらないように、些細なエラーでも修正していきます。
ちょっと数が多すぎてCI自体が落ちている状況ですが…。

PHPUnit

カバレッジの変遷を自動で記録する仕組み作成中。
カバレッジが高いと、ある程度網羅的にテストができている証拠なので、高めておきたいのですが、何も考えずに開発していくとどんどん下がるんですよね。
下がっているのに気付いて対策を講じたり、上がっていくのを見て喜んだりなど、変遷を残しておくと、何かと使えると思うのです。

PHP7.4

PHP8にする前に、PHP7.4でもまだ動いていない部分がありました。
自動クロールで検出できない管理画面です。
PHPはバージョンが上がるにつれてセキュリティも向上していくのですが、そうすると当然、今はもうあてにできなくなった古いセキュリティ規格は打ち切られていくわけです。
そうはいっても他との兼ね合いで上げられないものは上げられないので、代替手段を探しています。
セキュリティ下げる形の話なので、これ以上詳しくは言いませんが。

PHP8とドラゴンクエスト10

PHP8

最終的には8.1まで上げてしまいたいので、もう8の動作チェックを始めています。
NULLチェックが7の頃よりさらに厳しくなって、NOTICEやらWARNINGが出ています。
ただ、ERRORやExceptionレベルのはなかったようで、その点は一安心です。

ドラゴンクエスト10

キング・ツリー
第10回アストルティア・クイーン総選挙!
毎年恒例バレンタインイベント開始です。
ひとまず、全員分クエストは終わらせました。
毎日投票に行くかどうかは気分次第。
こういうイベントで余計なネタバレ踏まないためにも、メインストーリーは進めておきたいんですがねぇ…。

セラフィ・リナーシェ・ナンナの像
景品の像も3キャラで全種類網羅しました。
衣装はダルメシアンモチーフで、特にバレンタインとは関係なさそうです。

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バイト前後のパターンも試してみるか…。

スーパーマリオギャラクシーとComposer

スーパーマリオギャラクシー


ぼちぼち進めてます。
星船の最後の部屋と思われるロフトも開放。
現在スター53枚。

Composer

Twitter APIの件でライブラリをアップデートしまくっていたら、結構大きくバージョンが上がって、使いたくても使えなかった機能が実装されていたりしたので、他のも様子を見つつ上限を外してアップデートしています。
こういう時、ライブラリが自分の期待通りに動くかどうかの自動テストを作っておくと安心ですね。
個人的ツールのコメリストの新機能が作れそうです。

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

Twitter API

Twitter API v2開発準備してきました。
v1.1を利用中だと、審査なしで高度な方のElevated Accessが使えます。
で、

GET /2/tweets/:id/liking_users | Docs | Twitter Developer Platform
このAPIがアンパンマンワンドロのいいねチェックに使えないかなーって思って、試しているところです。

ドラゴンクエスト10

【2021再演】FFXIコラボイベント「シャントット博士来たる」
FF11コラボイベントの再演いつからだったかなと思ったら、とっくに始まっててもうすぐ終わりじゃないですか!!
新報酬があるのでその分だけでもやっておこう。

ちょうど今日始まったプリズランの方は、私の好みなイベントじゃないので、今回もパスの方向かな…。

PHPとドラゴンクエスト10

PHP

PHPのバージョンを上げたらSQLiteが使えない件ですが、サーバー会社に問い合わせたら、すでに対応が予定されていました。
とりあえずは待つだけで良さそうです。
ただ、SQLiteのための対応ではなくて、サーバー自体を根本的に新調するとのことで、メンテナンス時間はそこそこ長くなるようです。
その時が来たら、またお知らせします。

ドラゴンクエスト10

テリーとプーちゃん
テンの日。
バージョン6前夜祭だか何だか知りませんが、サーバー会社とのやり取りやVS2022で遊ぶのに忙しかったので、ドラクエ10の方は最低限の回収のみ。
この写真、右側にいるプーちゃんはテンの日にだけ出てきて、ボスカードをくれます。
左奥にいるテリーはランダムに表れて、ボスカードを渡すと倒してくれます。
つまり、このプーちゃんとテリーの組み合わせで登場すると、実質何もしなくてもボス討伐報酬がもらえます。
強敵は自分で倒してこそ、とは思うものの、ネトゲのボスは周回前提で正直だれるし、時間もないのでこういうのはありがたいのです。

Visual Studio 2022 Current

Visual Studio 2022 の発表
VS2022正式版が出たので、早速インストールしてみました。
.NET 6でもWinFormsのデザイナが使えるとか、コンソールアプリの最初のコードがやたら短くなっていたりとか、クラスの継承関係が見やすくなっていたりとか、軽く触った限りではそんな感じですね。

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のせいなのかも確認しておきたいところですが、何せ不安定なもので、「失敗の様子を確認したい時に限って失敗してくれない」ということもありうるんですよね…。

<前 次>