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

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

<前 次>

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

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を入れる意味がないんですがね。

<前 次>