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

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

<前 次>

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

GChat

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

funyan

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

ドラゴンクエスト10

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

Flaky Test(Today I Learned)

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

MS ゴシック

とある理由で、表示上の全角と半角を判定したくて、MS ゴシックで表示幅を測定してみました。
半角英数字と半角カナはまあ予想通りとして、アクセント記号付きアルファベットやら、アラビア語と思しき文字やら、一部の絵文字やらも半角サイズで、想像よりだいぶ多いなという印象でした。
あわよくば描画関係の命令無しで文字列の表示幅を推定する機能でも作れないかと思ったのですが、ちょっと非現実的そうな感じがしますね。
気が向いたら、これに使ったソースコードと、測定結果のファイルをどこかに上げようと思います。

NeoMupl

Windowsをロックしたら自動で再生ストップする(離席するときにうっかり流しっぱなしにしない)機能に役立ちそうなの見つけてきました。

PCのロックを認識する方法

言語は違うけど、Win32APIのWTSRegisterSessionNotificationでWindowsのメッセージを受け取ればなんとかなりそう。
ロック解除で再生再開とかは…別に要らないかな?

PHP8

うちのサーバーもすでにPHP8に対応しているのですが、サーバーは対応していてもプログラムが正常に動かなかったため、移行できていませんでした。
そろそろどうにかしたいので、デバッグ可能な検証環境を用意したいなと考えています。
当初、Dockerがちょうどいいかなと思っていたのですが、PHPだけでなく、サーバーやドメインも関わってくるので、仮想マシンまるごと用意した方がいいのではないかと考えています。

ドラゴンクエスト10とfunyak

ドラゴンクエスト10

しろいコキンも問題なく魔剣士に転職。
流石に三回目なので、話を聞き流しつつサポート仲間を連れてくる時間も惜しんで5分で完了。
職業スキルもなかなか強そうなので、使う武器を決めるまでは職業スキルだけでやりくりしてもそこそこ戦えそうです。

funyak

手作業でJSON形式のステージファイル作るのが面倒なので、YAMLでも作れるようにYamlDotNetを入れてみました。
で、YAMLでもJSONと同じ内容を読み込めることを保証するために、テストコードを作りたいんだけど、これまでの経緯から、テストコードを書く場所が2ヶ所になっていたんですね。
まあ、はっきり言って二重管理はバグのもとだし、何より面倒です。
なので、テストをNUnitに統一することにしました。
これはこれで、フレームワークを変えるレベルのことをしているので、結構面倒だったりするのですが…。

funyakとドラゴンクエスト10

funyak


ImageMagickの件、どうにかなりました。
バージョンアップでモジュールが分かれてMagick.NET.SystemWindowsMediaに行っていたようです。
情報くれた方、ありがとうございます。

ドラゴンクエスト10

アガサ
ァォィョッュのメインストーリー進めている途中でたまたま見つけたつるぎの酒場、ミフミンで行ってきました。
どこで魔剣士になれるのか調べてなくて、さぞかし面倒臭い場所にあるんだろうなと思っていたのですが、拍子抜けするほど簡単な場所にありました。
装備品がそろっていないので、まともに稼働するのはまたしばらく後になりそうです。
ただ、パッシブスキルは魅力的なので、残りの二人もとっとと転職するだけしておきたいですね。

Haxe

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

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

Project Reunion

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

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

ゼルダの伝説夢をみる島


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

.NET 5

VPSの話の続きなんですが、もはやサーバーとは関係ない内容です。
以前は.NET Core 3.1を使っていたんですが、今回.NET 5に上げたんですね。
サーバープログラムのターゲットフレームワークを5に上げるのは当然なんですが、それを参照しているテストプログラムも5に上げる必要があります。
そこまではやっていたんです。
テスト環境が使うDockerイメージも5に合わせたものに変えなきゃいけないのを忘れてました。
ここらへんに書いてありますな。

Auth0

ログイン機能として、Auth0を試しています。の続きの続きの続き。
Twitterでのログインも無事できるようになりました。
Auth0自体のユーザーIDもわかるようになったので、本格的にログイン方法として導入していけそうです。

Auth0

ログイン機能として、Auth0を試しています。の続きの続き。
ひとまず、Googleでログインはできるようになりました。
メール&パスワードもまあ多分大丈夫でしょう。
Twitterでログインがちょっと今できない状況です。
あと、識別のためのユーザーID的なものはAuth0自体にはないんでしょうかね。
ログイン方法によらずユーザーを識別できる統一的なものがないと、ちょっとAuth0を入れる意味がないんですがね。

Auth0

ログイン機能として、Auth0を試しています。の続き。
とりあえず設定してプログラム書いたけど、Auth0側でのログインは成功すれど、アプリ(ここではこのサイト自体)ではログインにならず。
なかなか都合よくいかないものです。

GitHub Actions

Update dotnet-desktop.yml ・ mifumi323/GitHubActionsWinFormTest@11fbb2a
自動ビルドできましたよっ!
ただ、アップロードしたアーティファクトが、ログインしていないとダウンロードできないようで。
リリースタグをつけてそれに添付とかできたら、CIビルドを(不安定とわかったうえで)自由にダウンロードしてもらえるようになるのかな、とか考えています。
無理なら無理で、とりあえず自動テストには使えそうです。
CircleCIはWindowsは使えないか、使いにくいですからね、Windows Server 2019 Datacenter&Visual Studio 2019 Enterpriseを簡単に無料で使えるというのは強いです。

GitHub Actions

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

Tweetinvi

TGWSAdminで使っているTweetinviが今バージョン4なんですが、バージョン5が新たに出ていました。
しかもTwitter APIバージョン2にも対応しているようです。
ということで、さっそくバージョンアップを試みたのですが、かなり変わっていて、そのままでは動くどころかビルドすらできませんでした。
結構大掛かりな修正が必要になりそうです。

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

LocalCrawler

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

Twitter API

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

ドラゴンクエスト10

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

<前 次>