MacOS引き続きMacOS版のUIを見ているが、MacOSのUIの自由度が低すぎてどうにもならず。Xamarinはネイティブのコントロールを使うので、他のフレームワークに引っ越しするのは容易だと思うんだけど、Macみたいにネイティブコントロールの表現能力が低いとちょっと扱いづらくなるという特徴がある。UnityだとUIは独自描画なのでどのプラットフォームでも同じ動きになるけど、Unityがなくなったら引っ越しが難しい(使ったことないので分からないけど)。ボタンのボーダーを、マウスを重ねたときだけ白い四角にしたいのだが、調査の結果不可能。ボタン自体のボーダーは今となっては古くさい立体表現になっていて、Bezelをいろいろ変えても縁に合わない。Layerの色を変えるとボーダーっぽくなるのだが、マウスカーソルを重ねたときの動作を変えることができない。テキストボックスの背景色を半透明の黒にしたかったのだが、Bezelの背景が真っ白で、半透明にならない。Bezelを消すと何故かテキストが上そろえになるし。半透明は諦めて背景を灰色にしてみたが、カレットの色が黒で固定されているので変えられない。変えるにはNSTextFieldのWindowのメソッドを呼ぶ必要があるが、Windowが設定された後に呼ばれるイベントがない。XamarinはNSFormsTextFieldという派生クラスをセットするが、Privateなので触れない。MacOS版WT4.0完了したけど何かやってないと暇なので、リリース当日からWindowsストア版やらMacOS版やらを考えている。どっちも結構直さないといけない。Formsを4.2から4.4に変えてみたが、何故か「テキストボックスがあると画面遷移で落ちる問題」が4.3SR1で直っていた。バージョンアップで問題が増えるんじゃなくて減ることなんてあるのか。WT3では、WT2にあった機能の実装と各プラットフォーム対応を優先させていてずっとUIに手を付けられなかった。そっちはようやく終わったので、UIを一新できた。多少は配信に堪えられる感じになったかな。今回背景をちょっと変えてみた。天気の背景もいいんだけど、背景が暗い方がやっぱり見やすい。唯一の天気さが消えてタイトルと乖離してしまうが、もはや気にしても仕方がない。タイピングは天気のようなものだ、とかなんとかかんとかってことで。あとは音だけど、カウントダウン音をいろいろ試してみたが、どれもしっくりこないのでとりあえず保留。この後はどうしようかな。Winストア版作って、MacOS版作ったら、ワード自動生成の研究に戻るか。その前にVectorも登録しないと。7はサポート範囲外にしたがたぶん動くはず。手元に環境がないので、何か問題があっても対応できない可能性が高い。32bitとかもテストしきれないので試してはいない。こちらは環境はあるので問題への対応は可能。WTの指標Twitterで書いたとおり、WT4.0はテスト完了。あとはクローズドで試してもらったりWebサイト更新したりで来週中にリリース予定。いい機会なのでウェザタイの指標を測ってみた。かりやすいステップ数で考えると、もろもろ含めてウェザタイのソースは約10万行。Forms、入力やI/O周りでC/C++を少し利用。XMLはresxのことなので、若干自動生成分がある。ランキングやロビーのサーバがJava。Perl/PHPはランキング、ワードサーバに使ってたけど、今はほとんどJavaになっている。見ると、20年とはいえなかなか1人で作る量ではない気がする。大手で作ろうとすると軽く1億円くらいかかるのかなあ。1億円売り上げるにはタイピング界の人口が・・・とか考えていくといつかのジェイブログさんの書き込みで「タイピング企画が通らない」と言っていたのもなんとなく分かりますね。WTの場合、商用に比べてOSSとかフレームワーク使わずに一から作ってる部分が多いので、その分多くなってるかも。Inputとかそのくらいしかないような気はする。Formsもいつまでメンテされるか分からないけど。2019版からWT4.0の改造が約1万行だったから10%直したことになる。レグレッションテストの全件数が576件で、うち自動テストが455件(約80%)。前回作ったAppiumによる自動UIテスト、やっぱりテスト効率がいい。今回かなり本体を修正したのでテストコードも結構直したけど、これがなかったらテストにあと1ヶ月くらいかかる気がする。テストコードは直し終えたので、Android版とか作るときは(理想的には)テスト実行するだけでいいし。WT4.0開発でレグレッションテストした結果は不良32件。これが多いのか少ないのかは分からないけど、次回の参考にはなる。WTの通信改善WT4用に通信の改善を実装。WTの通信処理を詳しく書いてみるか。ラグとか同着とかの理由を知りたい人もいるかもしれないし。WT3までは、プレイヤ全員のメッセージが届いたら全員の入力を確定して、次のフレームのメッセージを送るという実装をしていた。以下の図は「ABCDEF」をAとBが打ち込んでいる例。自分のプレイヤが打った文字は遅延なく画面に反映し、他のプレイヤが打った文字はメッセージが届いてから画面に反映するので、AとBでは見ている画面が違う。内部的には自分と他のプレイヤのメッセージがそろったときに時間を進めるようにしているため、AとBの同期がとれている。ここで、いくつか問題がある。Bの2フレーム目がAに届いたとき、一度に画面に描画するので3文字一度に消えてしまう。フレーム間隔が一定にならず表示速度が安定しない同様に、1フレームで複数の文字を処理するので、遅延が大きいと同着が発生してしまう。いろいろな状況によるが、遅延が少ない方が少しだけ有利になる。WT初期は電話回線だったので通信対戦ができるだけでもよかったが、さすがに配信とかを考えるともう少しなんとかしたいよね、ってことで、WT4ではもう少し通信量を上げて対策をしてみる。下の図で、点線の矢印が新たに追加したもの。入力があったらとにかく相手に送りつけて画面に反映するようにした。画面表示だけの変更で、内部処理は変えない。速度やワード取得の判定は今まで通り全員のメッセージを待つので、今までと変わらない。上記の問題点では、1と2だけの対応になる。内部処理でローカルPC上の絶対時間を見て判定するようにすれば3と4も改善できるし、工夫次第で観戦モードではラグが発生しないようにもできそうなのだが、試した感じ、割とここまででも十分効果がありそうだったので、WT4ではひとまずここまで。plus)」なんかを読んだりしてみたけど、割と合ってて安心した。長いことプラットフォーム対応やテストプログラムとかやってたけど、一段落したので、ようやく見た目とか機能面に着手できるようになった。公開はもう少し先だけど開発は順調。次バージョンがどうなるか軽くメモ。3.3以降、プラットフォーム共通化で変な見た目になっていたが、Windowsへのローカライズで少しはまともになる。ちなみにユーザの表示は、結局RTCの左右UIではなく今まで通りの上下UI。ルール化、ワードの追加と削除、はだいたい完成。ルール周りはだいぶ変わる。考え方としては、ルール設定者が自分の得意なルールを決めて相手に押しつけるというもの。ワードもルール設定者が決めるようにし、交替で相手のワードを打つのは廃止。ルールを誰が決めるのかはとりあえずホストにしてるけど、まだ検討中。不良修正は、RTCで出ていたものを中心に対策。RTCで出ていた不良のメモ。対戦開始時に打ち込めなくなる問題。前の対戦でシフトOnで終わると、次の対戦開始時にシフトOffになるのだが、次の対戦前にキーを8打鍵(on+offで16打鍵)以上してしまうと、キーバッファが溢れてシフトOffが消えてしまう。RTCの動画を見ると分かるけど、結構な選手がカウントダウン中などにエアプレイをしているのでバッファが溢れる。コンピュータワードでは後半にシフトを押すワードが出ることが多く、起きやすくなっていた。対戦開始時にラグが出る問題。3、2、1、0のカウントを、1000ミリ秒Timerで実現しているが、タイマー起動のタイミングが微妙にずれるのが原因。みたいに1秒未満になってしまうと、1000未満を切り捨ててて01234になって1秒増える。1秒未満になるとカウントが3、1、0みたいにスキップすることもある。WT2は60FPSで処理していて、WT3でTimerに変えたことでバグっていた。打鍵時にマウスカーソルがちらつく問題。分からないけど、ローマ字表示の上にレイヤーを付けたら起きなくなった。レイヤーはワードスピード表示のためでたまたまだけど、起きなくなったからまあいいか。この辺りは今日RTCの動画見ながら原因調査したけど、推理力と観察力と地道な捜査が必要で、プログラマの能力はプログラムだけじゃなくてこういった能力が大事だというのを感じる。あとは大会用にホスト兼観戦モードみたいなのを追加するのと、通信のラグ改善を入れたらテストして完成かな。Typingには間に合わないか。あ、あとカウントダウンの音か。一応書いておかないと怒られる。個人的に契約しているMSDNのOpenライセンス、今年も更新。前回からProfessionalにしたので2年で10万。サブスクリプション管理ポータル」へ行けと言われる。行くと、「管理するサブスクリプションが見つかりませんでした。パートナー」の方に従って、(Microsoftアカウントではなく)管理者のメールアドレスを入力することでサブスクリプションが表示されるようになった。ちなみにライセンス番号(8桁)と承認番号(15桁)は、VLSCのライセンス欄に表示されている。そこからはいつものようにユーザとMSDNサブスクリプションを紐付けると管理者(自分)からメールが来て、登録して完了。12/1に行われたオフライン大会を観戦してきた。e-typingによる予選にも参加して本戦を目指したが、全然レベルが足りなかった。去年までの観戦記:RTC2017、RTC2018。Youtube配信しているので是非。5時間半と超長い・・・長く楽しめるのでお徳。11/12発売のREALFORCEテンキーレスMacキーボードも欲しいですね。ビジネス視点、e-sports視点で。長いので興味のある部分だけでも。タイパー視点での感想まず会場。BULL会場は堅い雰囲気で会場内が静かになっていた感じがするが、今回の会場は開放感があって盛り上がりやすかった。池袋駅前のタイトーステーションにある大型ビジョン。途中その絵を見たくて外観戦してみたが、大画面にウェザタイが映っているのは感動。街行く人が興味津々ってわけではないけど、対戦が始まると何だこれ的に見ていく人がちらほら。対戦内容は例のごとく他の人の感想に任せて少しだけ。応援する選手を決めた方が面白いので、現ウェザタイランキングでJISかなQwertyともに3位、WTといえば、の、ひろりんご選手応援で臨む。最終戦、完全にmiri選手と互角、ワード同時取得の応酬、4-1から4-4への追い上げ、すごい盛り上がりだった。今まででも一番の歓声。Typingを開発してきたといっても少ししか過言ではない。あと気になったのははやとぅ選手。U-22最後の1ワード、94%で打ち終わらないように止めていたが、相手が96%から数回ミスしたのを見て打ち切って優勝を決めた。本戦2回戦でも同じように相手が95%から数ミスしたのを見て打ち切っていた。あれは、何打鍵中何打鍵ミスしたか、自分側も相手側も計算するウェザタイ算、RTC算か?をマスターしているのだろうか。前回の宿題事項だった以下の点については解消。Typingのおかげで自信は持っていたが、問題なし。以下の点については課題が残っている。対戦を続けた場合に取得したラウンド数を表示する画面上部のラウンド数表示は付けてみたけど、使いづらかった。ゲームを作り直さないと数がリセットされないので、人を入れ替えたときにゲームを作り直せなかったり、途中でウェザタイを再起動したりもあって、ちょっと難しい。今回は、途中から配信画面の方で対応頂いていた。打ち始めたらマウスカーソルを消すだいたいは消えていたけど、たまにカーソルがチカチカしていた。打鍵の振動でマウスが動いていたのか、他に何か条件があるのか。今回、ウェザタイ本体から大幅に仕様変更している。実は大分前からお話を伺っていたので、時間を掛けて作り込んだ。画面は運営さんからの提案で、2人対戦を前提にRTCの配信画面に最適化して設計されている。2人対戦専用画面なのでウェザタイとしてはそのままでは採用できないが、取り入れられる部分は本体に取り入れるかも。RTC版、ウェザタイのページに公開しているけど、他の目的でRTC版を使ってよいかは私には分からないので、もしそういったことがあればいきなり使わずRTC運営の方へお願いします。画面上部にプレイヤー名を表示。赤青のバナーと赤青のライティングの効果もあり、会場内、分かりやすくなっていた。実は画面上部に「何回戦」みたいな表示もできるようになっていたが、指定が難しいので使われてはいなかった。ここは3人以上の対戦でどうするかというのがあるので、WT本体に入れるとしたらどうしようかな。WT本体は変えられないかな。設定できるようにしても良いけど、そこまで需要はなさそう。