‘コンピュータ’のエントリ

タイピング日本一を決める大会「REALFORCE TYPING CHAMPIONSHIP 2024」を日テレスタジオで観戦してきた。日を置くと書けなくなってしまうので最速感想。ネタバレあり。

去年までの観戦記:RTC2017RTC2018RTC2019RTC2023

配信:YoutubeTwitch

全般

今回もありがたいことにWeather Typingを使用頂けるとのことで、協力させてもらった。お話を聞いたのも割と直前だったので、依頼を受けて打鍵音を修正したくらい。現地ではあまり分からなかったけど、配信だと赤側の音と青側の音が少し左右に振られている。どのくらいパンするとよいのか分からなかったので、どんな感じですかね。

タイパー視点での感想

まず会場が広い。去年から観客席がかなり大きくなっていた。去年も感じたが、知ってる顔の割合が少なくなっていて、身内の大会から一般の大会に成長している感があっていい。

内容としては、いったんの世代交代みたいなところが見られた。上位選手はほぼ全員互角だったので実際にはそこまで差はないんだけど、決勝戦常連のmiri選手とmuller選手に勝ったくわな選手対三山羊選手の決勝戦、さらにかな入力の初優勝と、これまでの歴史を塗り替えた感がある。かなについては、正直このルールでかなが優勝できると思ってなかった*ので、かなりの衝撃。

*Weather Typingでは、かなの1打鍵はローマ時の1.5倍の価値としている。例えばかなの「さ」とローマ字で「sa」を比べると同じ1打鍵でも2倍の差があり、Weather Typingのワード全体の統計を取ると平均1.5倍。それを前提としたランキングでもかなが上位。なんだけど、かな入力はキーボード4段打ちだったり、打鍵数が少ない影響で正確性を回復しづらいので、緊張感のあるオフライン大会かつ正確性重視ルールではかなり不利になる。

その上で今回、三山羊選手 vs muller選手のかな対決で1100kpmとか出ていたけど、こんな速度で正確に打たれるとさすがにローマ字は勝てないのか。

てことでいったんは世代交代に見えるけど、次回はレジェンドの恐ろしさを魅せてくれるのか、さらに新しい歴史になるのか、楽しみなところ。

開発視点での感想

今回、現地観戦しつつ少し運営側を見せて頂いた。いつも以上にトラブルに怯えつつもいろいろと参考になった。

とりあえず現地で気になったところだけ配信で確認。

一回戦 miri選手 vs riafi選手。riafi選手が最初の2ワードを打てなかったことがあったけど、配信を見る感じ、ウィンドウのフォーカスが外れてた感じかな。ミ田キーを押してしまって打てないというのも発生しているようなので、何かしら対策ができないか。

一回戦 セレナーデ☆ゆうき選手 vs muller選手。最後ラグで試合終了と勘違いしたというところ。配信(観戦PC)ではラグっぽくは見えなかったので、対戦PC側でラグがあった感じだろうか。1回戦最後の試合だったので、連続稼働で重くなる現象がまだ残っているのかな。ちなみに大会後にセレナーデ☆ゆうき選手からソフトのせいにしてすみませんと謝られてしまった。面白いだけでなく人間性も素晴らしい方ですね。

全体

今回からトロフィー(?)に優勝者の名前を刻んでいくとのこと。ということは来年度以降もある、という宣言と受け止めました(私はその辺りは聞いてないので勝手に言ってるだけ)。

大会も身内の大会から一般化して、新しい人が優勝して、今後も楽しみ。な一方で、前回も少し書いたけど、Weather Typingは来月で23周年という古いソフト。大学生がコンセプトの重要性も分からないまま適当に「Weather」って付けてもはや謎の名前になっているくらいのソフトなわけで、タイピングe-sportsのポテンシャルを活かせる新しいソフトウェアの必要性はやっぱり感じる。私も新しいタイピングソフトを作ってたりはするけど、100連勤とかの合間に進めるのは難しくて、誰か作りませんかね。

ALL ABOUT マイコンBASICマガジンⅢ申込み。12:00に待機してチケットページを開いてみたが混雑中が続いてなかなか取れず。何度かリトライした結果、12:07くらいにようやくつながって、S席のちょうど真ん中くらいが取れた。

S席だけでも500席近くあるのでしばらくは大丈夫かと思ったけどその後数時間でS席と2A席が売り切れ。もう半分近く埋まったってことかな。締切5/18までなのでどうぞ。

去年からベーマガイベントが復活するという情報があったが、正式に発表された。第一回が秋葉原で500人規模、第二回が有楽町で1000人規模、第二回のSP版が大阪で300人規模、今回は蒲田で1500人規模、かな? 段々大きくなっていってるのがすごい。

ここ2年くらい職業の方で組み込みの勉強が手一杯で、本業の開発が全く進んでいない。ただ、そろそろ組み込みの方も多少知識が追いついてきた感があるので、今回のベーマガイベントで開発モチベーションを上げられるといいなあ。まずは国会図書館でベーマガを読みに、行ける時間があるかなあ。

今年も「REALFORCE TYPING CHAMPIONSHIP 2024」が開催される。予選が終わって3/9に日テレの会場にて本戦。私も少しe-typingにトライしたけど予選突破はできず。ていうか1000位にも入れないけど…

今年もWeather Typingとして協力させて頂くことになっていてありがたい。去年の動画を見直しておかないと。

変わらず忙しすぎてDenasu関連の進捗なし。

必要があってOpenAIを使おうとしたら、Creditの試用期限が切れてたので課金してみた。とりあえず$100課金してちょっと遊んでみたけど1円未満だったので結構遊べそう。

以下はWeatherTyping用の問題文を作ってもらったもの。もう少し長めに生成してもらいたいんだけど、ちょっと試した感じ難しかった。API呼び出しできるので、ウェザタイから呼び出してワード生成を任せることもできる。やるとしたらワードを作る度にお金がかかってしまうので、有償オプションになるのかな。ユーザのOpenAIトークンを入力してもらえばいいかも知れないけど、そういうモデルにしてるサービスってあるのかな。

ちなみにワードサーバの形で実装すれば誰でもChatGPT使用のウェザタイワードサーバを作成できるので、プロンプトエンジニアの方々、是非よろしくお願いします。

Cドライブの容量が足りなくなりそうになったので新しいPCを衝動買い。

2018年からSurface Book 2を使っていてもう5年だけど、特に不満点はないのでそのまま後継機のSurface Laptop Studioの一番いいやつにした。CPUが第8世代->第11世代、メモリが16->32GB、SSDが512GB->2TB、GPUがGeForce GTX 1060->GeForce RTX 3050 Ti。全体的に性能は2倍くらいか。ヨドバで在庫セールしてたので30万円。会社補助とヨドバポイント還元を合わせると25万円くらいあるので実質5万円。

来週あたりMicrosoftから次の機種が発表される噂があるけど、日本で発売されるのは年度末とかになるだろうし、40万超えるだろうしってことで。

ゲーミングノートやデスクトップだともっといい性能で安いのがあると思うけど、例えば会社で使っているDELLノートは爆音と強風がすごい。それに比べてSurfaceシリーズは負荷をかけてもファンの音がしないのがいい。あとSurface Dockとか純正USB-Cディスプレイ変換とかペンとかも流用できるし。

まだセットアップ中だけど、Surface Book 2からの移行で違和感は何もなし。タブレット変形ができるので液タブとして使えるかも? Surface Book 2は画面取り外しができたんだけど、DockやらGPUやらが切り離されてしまうのでタブレットとしては使ったことがない。Surface Laptop Studioは手前に倒せるようになっているので、メインディスプレイと液タブみたいな形で自然に使えそう。

月1回の日記ノルマを消化しないと。

Typing Field開発は進めたいんだけど、その前にWeather Typingロビーやランキングのセキュア化をやらないといけなくて、そうするとWeather Typing自体の作り直しが結構発生する。ついでに前々から話がでていたXamarin Formsの廃止と.NET MAUI移行の話もあって、どうせならWeather Typing 5.0にするかな、と思っているところ。

Typing FieldはUnityで作っているが、Xamarin Formsとコードベースがかなり違うので別々のソースになっている。これだとメンテもしきれないので統一したいというものある。ただ、.NET MAUIはXamarin Formsの後継なので、Xamarin Forms同様誰も使ってる人がいなくて大量のバグに悩まされる可能性が高い。ので、Unityかな。

Unityに移行するとなると、多少安定していた今のバージョンからまたしばらく不安定なバージョンが続くのが懸案だけど、自動テストを駆使してなんとか安定させたいところ。

ロードマップとしては以下なんだけど、あと10年くらいかかりそう。

  1. ロビーのセキュア化:完了
  2. ロビーの自動テスト:完了
  3. ランキングのセキュア化:完了
  4. ランキングの自動テスト:作業中
  5. Weather Typingのセキュア化
  6. ベース部分をUnityへ移植
  7. ベース部分の自動テスト
  8. Weather Typing UIをUnityで作り直し -> WT 5.0リリース
  9. Typing Field UI作成
  10. Typing Fieldのゲームデザインやり直し
  11. Typing Fieldのアセット作り
  12. Typing Field実装 -> TF 1.0リリース

まあ、常に開発していたいので、これくらい大変じゃないとやる気しないよね、ってことで。

ゴールデンウィーク終了。いろいろ必要だったのでずっとモダンな開発プロセスを勉強してた。

まず「単体テストの考え方/使い方」。以前AppiumでWeather TypingのUIテスト自動化を作って、ほとんどのテストをUIからテストするようにしてたんだけど、Appium自体が既に使い物にならなくなってるし、ちょっと機能エンハンスするだけでテストに通らなくなってしまうので諦めていた。が、この本を読むとUIテストで完全に自動テストするのはアンチパターンぽいことが分かった。もっとボトムアップに、外部仕様だけをテストするようにすればいいのか。とりあえずテストしやすいロビーやランキングからテストコードを作っているところ。

「ボトムアップ」というのは、UIは一番上位レベルのテストなので、UI仕様がちょっと変わるとテストが壊れるし、フォーカスを合わせたりスクロールしたりでとにかく動作が不安定で時間もかかる。なので、全てのケースをUIでテストするのは効率が悪すぎる。そうではなく、各クラスの動作を確認できる箇所は各クラスで確認して、その結果を前提にして上位のクラスの動作を確認して、UIのテストはUIのテストだけをすべき。そのためには実装もテストしやすいように作る必要があって、ロジックとUIを分離して、ロジックはロジックだけで高速な自動テストができるようにし、UIは単なる表示だけにして中身はロジックを呼び出すようにする。

「外部仕様だけ」というのは、内部仕様を自動テストに入れてしまうとすぐテストが壊れるので、将来的に変更のされない、というかそこを変更し直すなら当然テストコードも変更するよね、というものだけをテストする。つまり一つ上位や同じ階層向けのI/Fをテストする。こうしておくと内部実装の細かいところを変えてもテストコードは変わらないし、API名が変わるならリファクタリング機能で一括で変わるし、新しく機能を作ったならそこだけテストを追加すればいい。

で、この本もそうだけど、manningのこのシリーズの本いいですよね。「セキュア・バイ・デザイン」もすごいよかったし。


次にGitHubとCI/CD。Git自体はずっと使っているけど、そろそろCI/CD周りを勉強しないとついていけなくなっているので「Accelerate DevOps with GitHub」を読みつついろいろ試してみた。まだPart4で80%くらいまでしか読めてないけど。GitHub Actionでかなりいろんなことができて、ビルド、単体テスト、静的解析、クラウドへのコンテナのデプロイ、脆弱性スキャンみたいなことまで自動でできて、チケット管理とかクロスチェックとか、修正しないとビルド失敗も可能。なるほど、こういう風に使うのか。

機能をフルに使うにはパブリックレポジトリか有償になってしまうので、今のウェザタイで積極的に使うのは難しいんだけど、セキュリティ課題が解決したらいっそOSSにしてしまう手もある。


てことでセキュリティ。最近ウェザタイのロビーも末期になってきて、セキュリティをちゃんと実装するか廃止するか、って感じになっている。てことでTyping Fieldで実装しているセキュリティ機能をウェザタイに移植中。主にはTLS化とFIDOぽい認証。ここまでいけばロジックを守る必要はないので、あとクライアントの秘密鍵さえちゃんと守れれば、ランキングのチートも難しくなってOSSにしてもよさそうなんだけど、HSMを前提にするわけにはいかず、TPM使うのも大変。オンラインゲームでOSSにしてるようなものってあるのかなあ。というかブラウザゲームはOSSみたいなものだけど、チート対策ってどうしているのか。通信の保護をやぶるよりキーボードをシミュレーションする方が手っ取り早いからあんまり問題にならないのかなあ。

2ヶ月ぶりに普通に休みを取ったので、学生時代から20年以上通った八重洲ブックセンターの閉店前巡礼に行ってきた。専門書が目的なのでほぼメガ書店にしか行かないのだが、どんどん閉店していきますね。棚がスカスカなのが寂しい。

それはそれとして散歩してたら何故かアキバにいて、何故か千石電商で7色電子ペーパーモジュール「WaveShare 19283 4.01inch ACeP 7-Color E-Paper E-Ink Display HAT」を買っていた。スーパーのタグとかで赤が使われていて興味深かったのだがこれは7色。早速ラズパイに接続して我らがヨドバシカメラのお姿を表示してみた。表示までにチカチカして結構時間はかかるものの、表示されたもの自体は割と綺麗。電子ペーパーなので、当然電源を抜いてもこのまま残る。Kindleみたいな実用的な速度になるのはまだまだ先ですね。何かいい使い道あるかなあ。

タイピング日本一を決める大会「REALFORCE TYPING CHAMPIONSHIP 2023」、3/12に行われたオフライン大会を観戦してきた。RTC2023は2019年以来4回目。RTC2019年の後、にじさんじ打鍵王でタイピングが盛り上がったり、miri選手が数多くのテレビ番組で紹介されたり、今やれば結構注目されるんじゃないかと思っていたが、長いコロナの休止期間を経てついに開催。今日を逃すといつ日記を書けるか分からないので当日中に残しておく。

今回、会社員の活動が1月からずっと休みなしなので現地観戦も行く気力がなかったのだが、Twitterで観戦勢の報告を見ているとやはり行きたくなってきたので現地へ。タイピング速度測定の作者様やタイピンガーZの作者様と少しだけど話ができて良かった。

去年までの観戦記:RTC2017RTC2018RTC2019
配信はYoutubeTwitch。今回twitterの反応が結構多い気がしますね。

タイパー視点での感想

タイパー視点でというのは他の人が書いてくれるのでここでは省略。といっても最近はtwitterで投稿するだけでブログ書く人も減ったけど。

個人的にはWeather TypingというコンテンツはRTC2019のひろりんご選手のGrand Finalがエンディングで、これ以上の展開はもうないと思っていたけど、これだけ選手が入れ替わって新しい展開になるとは。今回日テレ共催になることで、いい意味で内輪向けの大会から脱却しつつある感じがした。

会場は日テレのスタジオということで豪華。カメラワークとか、青と赤の照明の効果的な使い方とか、演出がすごい。

今回特にかなvsローマ字、かなvsかな、ローマ字vsローマ字それぞれ見所があった気がする。ワード毎の特徴も結構はっきりしているのでその辺を理解すると面白いかも。

具体的な対戦で特筆するとしたら3位決定戦のはやとぅ選手。前回95%ルールをうまく使っていたので今回はどう魅せてくれるかと思っていたが、今回も3位決定戦で相手が95%からミス入力して94%になった一瞬の隙を突いて勝っていた。

決勝戦はもはや言うことないですね。Weather Typingの試合で一番面白いのは互角の対戦だが、あの速度でのローマ字vsローマ字の完全に互角な対戦は最高に盛り上がる。現地の緊張感がすごかった。

あとは選手のキャラクター性も重要になってきたかな。今回たのんさんが公式ガイドを作成していたが、各選手の紹介が入っていたのが良かった。にじさんじ打鍵王が盛り上がるのはそれぞれキャラクターがあってそれぞれにファンが付いているところも大きいと思うので、miri選手の「王者」みたいにはっきりしたキャラクターがあって周知されていると強い。そういう意味ではセレナーデ☆ゆうきさんには給料を払ってでも毎回参加してもらうべきだと思います。

開発視点での感想

今回は観戦している分には問題らしい問題はなかったと思うのだが、どうだろう。RTC2017以降、動作が重くなる問題、結果画面が表示されない問題、片方のワード開始が遅れてしまう問題、最初のワードが打てなくなる問題、と毎回何かしら問題が発生して運営に支障が出ていたのだが、4回目にしてようやく安心してみることができた。

今回RTC版は以下の改善を入れている。この辺は本体に取り込む予定。

  • 観戦モードで1プレイヤー側の打鍵音を出すようにした。これは「HOKKAIDO esports FESTIVAL2022」の後に頂いた要望だが、ようやく実装。リプレイでも同じ要望を何年も前から言われているけど、同様なので修正するかな。
  • 観戦モードでプレイヤーの表示順を固定する。画面左のプレイヤーが必ず上に来ないとどっちがどっちなのか混乱するので、必ず同じ順番になるようにした。この辺りは次バージョンの別修正の副作用でどちらにしろ実装する予定。
  • 観戦モードのときに他のプレイヤーが全員落ちると動作がおかしくなる。これは念のため。

あと、RTC2023向けというわけではないが、ワード終了時のkpm表示は入れて良かった。もはや昔からこういう仕様だったかのようになじんでいるが、実は2018の大会の時に「入力不能時間のときにグレーの文字を表示するくらいだったら、ワードを非表示にした方がいい」という意見をもらってRTC2019で非表示化した。その後、それならその非表示の時間にワード毎のスピードを表示しよう、となって追加したもの。どっちがワードを取ったか、またワード毎に1000kpmオーバーとかが数値で分かりやすくなって盛り上がりに役立っていた。

まとめ

RTC2019以降、東プレさんもずっと開催のため調整を続けていたことを知っているので、ついにオフライン+観戦ありという最高の形での開催を実現して頂いた運営さんへは感謝。演出や配信、e-sportsとして本気でやっていこうというのを感じる。

一方ここまでいくと個人で作っているWeather Typingの限界も感じる。タイピングのe-sportsとしてのポテンシャルに比べてソフトウェアが足りていない感はずっとある。モダンなオンラインゲームとしてタイピングe-sportsのポテンシャルを活かせるソフトウェア、誰か作りませんかね?

2月が終わるので日記を書かないと。といっても2月は無休だったので進捗なし。せめて最近話題になってきたChatGPTを使ってみる。

毎年賞金100万円の大会が開かれてたのか、知らなかった。ていうか嘘ばっかり。ちなみにURLを教えて欲しいと頼むと適当なURLをでっちあげてくる。

ChatGPTの仕組みは現在勉強中だけど、その場でググって回答するのではなく、現在の記憶状態から今の単語に続きそうな単語をどんどん付け足していくような感じ。なので生成される文章は超適当。

ただ、すごくそれっぽいし、それは違うよね、とか話していると理解するような素振りをしたりするので、すごく人間くさい。既にチューリングテストなら受かってそうな気がする。

冬休み。いい加減勉強に疲れたので息抜きに「情報セキュリティの敗北史」を読んでみた。珍しくOreillyのサブスクにはなかったのでKindleで。525ページになってるけど、半分くらいは脚注と参考文献なので半日くらいかな。

内容的には、自分もずっと考えていたことが情報セキュリティの歴史から説明されていた感じ。今の情報セキュリティってどうやって攻撃するかだけが注目されていて、どう対策するかには誰も興味がない。ホワイトハッカーというよく分からない職業の人が、特に新しさのないバッファオーバーフローの脆弱性を付いて、仰々しい名前を付けて世界で公開して注目を集めるビジネス。

この建築会社が作った家はここに火を付ければ効率よく燃えるから欠陥だ、というのをテレビで発表して富と名声を得て、建築会社に無理矢理対応させるようなやり口。火を付けられるからって普通の人は火なんか付けないし。

・・・って思っていた人は必読。こんな感じの話をちゃんとした切り口で説明して、情報セキュリティは歴史が浅くて迷走してるけど、他にいくらでもある歴史が長い分野から成功した方法を取り入れよう、というのが分かりやすく書かれている。

WT Android版 4.3をリリース。他のプラットフォームで修正したいくつかのバグFixと、Simejiでもとりあえず動くようにしたくらい。IMEは全ての方式に対応はできず、一つのIMEに最適化すると他で動かなくなるのでいろいろ妥協しているので、とりあえずGboardでもSimejiでもなんとなく動くようにした。

で、今回Android 12向けにしたのだが、ストレージ周りが変更になって苦労した。内部ストレージにデータを入れるとアンインストールで全部消えてしまうのでSDカードにデータを置いていたのだが、Android11で使えなくなった。SDカードのアプリケーション領域に置いているので、4.3ではWTをアンインストールすると記録が消える。今時はクラウドに置けばいいんだろうけどリリースを優先させたのでそこまでは変えなかった。以前のバージョンからアップデートすると勝手に移動されるようにはしたので過去のバージョンの記録は消えない。

あとはGoogle Playのリリースにあたってデータセーフティのポリシーを定める必要ができた。20年前の設計なので暗号化もないしデータの削除機能もないが、別に公開しておけばいいのか。そこで出てくるR8による難読化ってのが気になったけど、Android単体で難読化ができるようになってるのか。今回はやらないけど調査要。

denasuサーバをメンテナンス。ロビーに人がいないタイミングがなかなかないのでメンテナンスするタイミングが難しい。サーバを再起動してもクライアントからある程度再接続するようにできればいいんだろうけど。

最近ロビーサーバへの攻撃が増えているのでその対策と、人が多くなってきたときにゾンビが出てきてしまう問題の修正。1つ目は通信のチェックはしてるんだけどそのまま通信がつながったままになっていたので明示的に切るようにした。2つ目はJavaのSynchronizedでinner classのthisをlockしていたのが問題で、ロックされてなくてnullポインタが起きていたのが原因、と思われる。何年も調査してたんだけど原因が分からず、今回Typing Field開発にあたってさすがに修正しようと思って1週間くらいデバッグした。本当にそれが原因かは分からないけど、ロジック的にそこしかなく再現させたときの動作も一致しているので修正して様子見。

7月が終わってしまうので日記を更新。

Typing Field、周辺の実装を進めている。まずはセキュリティ。20年前にウェザタイ作ったときはパスワードも平文で送れば良いし通信も平文でいいや、って感じだったけど、さすがにちゃんと作らないとなあ、ってことで「オンラインゲームセキュリティ」という本を読んでいる。

認証については、FIDOっぽく公開鍵を使ったパスワードレス方式にしてみた。ついでにユーザ名が一意でなくてもいいように、自動生成IDで区別するようにする。ウェザタイはすでに主要な名前は取られていて新規参戦が難しい。この方式なら好きな名前を使える。

通信はどうしようかな。単純にTLSにしてもいいけど、遅延とか問題になるんだろうか。

あとは、「気持ちいい」から考えるゲームアイデア講座」を読んでみた。ゲームシステムをいろいろ考えているけどなかなか面白くならず、試行錯誤。

今のペースだと完成まであと3年くらいかなあ。これだけに絞りたい。

にじさんじ打鍵王 2を視聴。にじさんじ打鍵王は2020年4月以来、二回目の開催。前回開催時の日記
少し前に、第二回開催にあたって今回もWeather Typingを使って頂けるとの連絡をもらい、楽しみにしていた。

大会について

ここはウェザタイの制作者側の記事ということで内容についてはあまり触れないが、各試合、違いが出ていて面白かった。特に準決勝以降は普通に速度も速くて見応えがあった。やっぱりウェザタイの面白いところは接戦時の緊張感ですね。プレイしてても見ていても面白い。

そして運営側もかなり慣れていて安心感が。OKが押せない問題にあらかじめ対応を検討していたり、その場合キャンセルしてもゲームキーを変えないなどのノウハウがあったり。まだまだオンライン大会に使いづらい部分もあるのでいろいろ工夫して使って頂いてありがたい。

サーバの負荷テスト

前回もそうだったが、今回もサーバの負荷テストみたいになっていた。今回、同時視聴数が75000くらいで前回の2倍以上になっていて、ウェザタイサーバ同時接続数も前回の40人から70人くらいまでいっていた。それでもCPU20%、メモリ70%くらいだったのでまだ大丈夫かな。

ウェザタイについて

ウェザタイは実は2年前からバージョンアップしてなくて、いろいろ修正が必要な点がたまっている。M1 Mac対応とか。ただ、できるだけ新タイピングソフトの開発に開発リソースを割きたくて手が回っていない状態。

タイピング対戦の面白さをもっと一般に広めるには、もっと配信に映えるようなタイピング対戦ソフトが必要ということで、eスポーツ化に向けた3Dタイピング対戦ゲームを作っている。まだリリースはずっと先だけど、最後に宣伝。

気分転換にパネル表示をいじってみる。とりあえず半透明のパネルを出していたのだが、もう少し工夫したいのですりガラス処理+角丸四角形にしてみた。

中身のデザインが今ひとつだけど、とりあえずパネル自体はこんな感じかな。すりガラスも角丸もシェーダーで実装。

すりガラス

すりガラスは一般的にはガウシアンブラーを使うらしい。ただ、普通に5×5とかのカーネルで処理すると重くなるので、縦5をかけた後に横5をかける、みたいに2パスでやるらしい。検索するとそういう方針でGrabPass(レンダリングされた画像を取得するやつ)を使用した例がたくさん出てくる。

ただ、Universal Render PipelineだとGrabPassがサポートされてなくて、同様の機能を持つCameraOpaqueTextureを使うと2パスができない(と思う)。なので、カーネルを省略して十字みたいな感じに近似してみた。上の画像の通りそれっぽくはなるからいいかな。

角丸四角形

角丸四角形はなかなか難しい。公式的にはRounded Rectangleっぽいんだけどそのままコピペしてもうまくいかない。なので参考にしながら自力で実装。

float RoundedRectangle(float2 uv, float width, float height)
{
    // uvは-width/2~width/2、-height/2~height/2の座標

    // uvから一番近い矩形状の座標を計算する
    float2 pt = float2(min(abs(uv.x), width / 2 - _Radius), min(abs(uv.y), height / 2 - _Radius));

    // 計算した矩形状の位置とuvとの差分ベクトルの長さを計算する
    float d = length(pt - abs(uv));

    // 半径以内なら1、半径よりおおきければ0
    return smoothstep(d - _Radius / 10, d + _Radius / 10, _Radius);
}

fixed4 frag(v2f i) : SV_Target
{
    // 角丸四角形判定。範囲内にあるならr=1、ないならr=0
    float width = 1 / _CameraOpaqueTexture_TexelSize.x;
    float height = 1 / _CameraOpaqueTexture_TexelSize.y;
    float2 uv = float2((i.uv.x - 0.5) * width, (i.uv.y - 0.5) * height);
    float r = RoundedRectangle(uv, width, height);
 
    // 角丸四角形外(rが0に近い)は描画しない。
    clip(r - 0.1);

    ・・・
    ガウシアンフィルタ処理(他でたくさん紹介されているので省略)
    ・・・

    // 角丸のα値:r
    // オリジナルのα値:α
    // オリジナル色:o
    // ガウシアンフィルタをかけた背景色:b
    // とすると、以下で表せる
    // rα*o + (1-rα)*b

    fixed4 col = r * _Color.a * _Color
        + (1 - r * _Color.a) * b;

    return col;
}

こういうときに数学が役立つ。数学の知識がない場合、ぴったりうまくいくコードを見つけてコピペするかAssetを買うしかないので不利になる。

5月の日記がゼロになってしまうので何か書いておこう。

相変わらず副業(会社員)が休みなしでなかなかTyping Field開発が進まないのだが、今は音作りをやっている。BGM、システム音、攻撃、レベルアップなどいろいろなSEが必要。

BGMは一応作曲の入門本を読んではみたけど、さすがにすぐに使えるレベルにはならなさそう。昔から打ち込みとかMIDI楽譜生成ツールのPurentro作ったりはしてたのでなんとなくは分かるし、作曲少女シリーズを読むと何かしら作れそうな気分にはなるけど・・・。ちなみに同じ作者さんのトークバックは面白かった。AIで作るのも考えはしたけど、コンセプトにあったBGMという縛りがあると難しそう。てことでまずはコンセプトに合いそうなBGMをpixtaで購入。いずれ置き換えられればいいなあ。

効果音も素材から全部買ってもいいけど、結構大量に必要。簡単なものならシーケンサーで作れるってことで試行錯誤中。まあシーケンサの方が金額的には高くなるけど。ただ、どこをいじるとどんな音になるのか、ノウハウが出回ってないので難しい。サウンドエフェクトの作り方を参考にしているけど、それに載っていない音はどう作るのか想像ができない。再現したい音を観察してアタックとかエフェクトとかがこうなっているはず、みたいなことをやっていく、ってことだと思うんだけど・・・。

脈絡なくスクリーンショット。

Typing Field開発。今週はBlender+Unityのアニメーション。ずっと適当な動きのまま放っておいたのでそろそろちゃんと作り込む。

やりたいことは、プレイヤがキーボードを首からぶら下げて、問題文章が表示されたらキーボードに手を置いて、そのまま歩き回れるところまで。Action People Pack 2の部品として使えるように作っているが、モデルには関係ないはず。次回いじる際にはもう忘れているのでメモ。環境はBlender 3.1.2+Unity 2021.2.18f1。試行錯誤の結果なので不要な手順、間違ってる手順とかもあるはず。

[Blender] キーボードモデルの作成

まずBlenderでキーボードを作成。四角とベジエ曲線、キーボードのテクスチャとバンプマッピングで作った。

Advanced People Pack2で部品として使う場合はオブジェクトが一つになっている必要がるので、キーボードとロープを一つにする。ベジエ曲線を[ConvertTo]-[Mesh]、キーボードとロープを[Object]-[Join]で結合する。あとで調整できるように変換前のオブジェクトをバックアップしておく。

[Blender] Rigとの関連付け

このままモデルを出力してしまうと、Rigと関連付けられていないのでUnity側でデフォルトの位置に表示されてしまう。そのためRigに関連付ける。オブジェクト->適当なRigの順でShiftクリックで選択し、Alt-P-[With Automatic Weights]で関連付け。するとモデルの下にVertex Groupsが作られる。関連付けを解除するにはオブジェクトを選択してAlt+P-[Clear-Parent]。

この状態だと全てのRigにちょっとずつウェイトが関連付けられて変形してしまうので調整。衣服なんかだと良い具合にウェイトを調整して、ボーンアニメーションに追従させるのだが、今回の場合キーボードは曲がったりしないので特殊な設定になる。要するに一つのボーンに全体を100%ウェイトにして、他のボーンにはウェイトなしにすれば、一つのボーンの動きや角度に追従して、何も変形しないものが作れる。ってことで、今回はChestのRigに追従させる。Neckの方が妥当に見えるけど、走るモーションと組み合わせたときにキーボードと首の角度差によってめり込んでしまったのでChestにしてみた。まずChest以外のVertex Groupを削除し、Chestを選んで[Weight Paint]モードにして真っ赤(1.0)にする。

[Blender] モデルの出力

ここまでやったものをfbxで出力。Blenderを再起動する度に設定が初期化されるので面倒。オブジェクト-Rigの順番に選択して、[File]-[Export]-[FBX (.fbx)]で、以下の設定で出力。デフォルトと違うのは、Select Objects、ArmatureとMeshを選択、FBX ALL、Apply Transform、Face、Only Deform Bornsオン、Add Leaf Bonesオフ、Bake Animationオフ。その際、モデル自体は非表示にしてRigだけにしておくと余計なものがエクスポートされない。

[Unity] モデルの読み込み

次はUnityでモデルを読み込み。fbxを選択したときのプロパティから、[Rig]タブでAnimation Typeを[Humanoid]に、MaterialsタブでMaterial Creation Modeを[Import via MaterialDescription]にする。マテリアルは一度fbxからExtractしておいてUnity側で再設定。しなくてもいいかもしれないけど。

Action People Pack2で部品として扱う場合、Item 1か何かのプリセットを増やして、キーボードモデルとマテリアルを設定する。マテリアル側でBump Mappingを設定し直しているのでちゃんとキーが立体的に見える。ここで設定を変更した場合、キャラクター側で設定をロードし直すのだが、Animation Controllerがデフォルト値に戻って自作のアニメーションが再生されなくなってしまうので、手動で設定し直す。

[Blender] アニメーションの作成

Blender側でアニメーションを作成する。モデルと同じblenderファイルでできればいいんだけど、何故かボーンがうまくUnityに反映されなくなってしまう(手首の角度が変になった)ので別々のファイルにしてある。

Rigを選択して、Posing Modeで好きなようにポージング。[A]キーでRigを全て選択して[Pose]-[Animation]-[Insert Keyframe]。とりあえず単純にキーフレーム1個だけ。

1つのfbxファイルに複数のアニメーションを入れることもできて、その場合、Animationタブの「Dope Sheet」になっている箇所を「Action Editor」にして、アニメーションを追加する。

設定が終わったら、[A]キーでRigを全て選択してfbxエクスポート。さっきの設定に加えて、[Bake Animation]をオンにしておく。その際、モデル自体は非表示にしてRigだけにしておくと余計なものがエクスポートされない。

[Unity] アニメーションの設定

Unityでアニメーションを読み込み。fbxを選択したときのプロパティから、[Rig]タブでAnimation Typeを[Humanoid]に、MaterialsタブでMaterial Creation Modeを[None]。Animationタブで、Clipsにアニメーションが全て表示されていることを確認。

あとは普通にAnimation ControllerでMotionを設定する。複数のアニメーションを共存させる場合はLayer分けして、AvatorMaskを設定。

[Unity] 実行

ついに実行。以下のスクショは分かりやすいようにあえて前カメラで見ている。

久々にお休みにしたのでTyping Fieldの開発を進める、はずだったんだけど割と機能は揃ってきたので、アイテム作りを進める。まずはデフォルトで持っている「宝箱を開けるアイテム」のアイコン。

ってところで今日は終わってしまった。1個アイテム作る度にアイコン作りに1日かかるのか。。。アセットも探してみたけど、全てのアイコンで雰囲気とか向きとか光の方向を合わせないといけないので、探すより自分で作った方がいいだろうと。割とちゃんと作れたと思うけどどうかな。

Xamarin.Forms 5.0.0にアップデートしてずっと困っていた問題が解決。ようやくウェザタイのWindows Desktop版がまともに動くようになった。

Xamarin.Forms 4.8からWPFのフォント指定ができなくなった。ウェザタイの?ボタン等にGoogleのマテリアルアイコンを使っているのだが、豆腐になってしまう。GitHubのバグ報告にもあがっていて5.0.1で修正されることになっていたので待っていたのだが、1年以上そのまま。.NET MAUIに移行しようにもまだ正式リリースされないため、Visual StudioのPreview版を入れると環境がおかしくなるのでやりたくない。

ということでウェザタイのバージョンアップが止まっていたのだが、いろいろ大会や配信なども行われていて、修正したいところが増えてきたため、本格的に調査。

Xamarinの該当するソースコードを読んでみて、組み込んで実行してみると、どうもURLを指定する方法からリソースファイルを取ってくる方法に変わっている。で、いろいろ探っているとフォントを指定する新しい方法が紹介されていた。各プラットフォームでそれぞれフォントを指定していたのを、共通のプロジェクトで指定できるようになったらしい。これを設定したら表示されるようになった。

だったら、「(古い方法が使えなくなったのは)バグだから修正する」ではなく「新しい方法を使ってくれ」と言って欲しいのだが・・・。

HOKKAIDO esports FESTIVAL2022」でウェザータイピング企業対抗戦が開催された。元々は他のイベントとともに開催予定だったのだが、コロナの影響で延期になっていたもの。Youtubeでアーカイブしているので是非。ボンバーマンも面白かった。

企業対抗戦ということで、北海道のメディアや学校、IT企業などが参加していて、通常のeスポーツに比べて幅広い参加者。オフライン大会だったので、現地の盛り上がりが感じられて良かった。

最初開始に手間取っていたのは何だろう。サーバはちゃんと動いていたので、操作的なものかな。あと例えば、文字が小さくて読みづらかったので、文字拡大してもらえると良かった気がする。この辺、大会のときはこういう風にやるといいよ、的なTipsを公開すればいいんだろうけど。

ということでタイピングeスポーツ専用のソフトってことで作っている「Typing Field Online」だけど、2月から副業の会社員が休みなし状態なのでなかなか進まない。

アンチウイルスソフトと言えばノートンということで、2002年くらいから使っていると思うのだが、最近のノートンはおかしい。定期的に広告をポップアップしてくるし、マイニングしたり。企業用のSEPも大幅に値上げしてシェア下がってるみたいだし。 ブロードコムにより買収されてアクセンチュアにより買収されて、もはやノートン自体がウイルスっぽくなっている。Windows 3.1時代からの老舗で信頼感があったんだけど。ということで一度アンインストールして、Microsoft Defenderを有効にして様子見。次の更新までに問題なさそうなら解約かな。

アンインストールする理由欄に「広告が多すぎる」という選択肢があるのでノートン側も分かってるぽいんだけど、Defenderがデフォルトになって広告出してアップセルしないともうたち行かない、ってことなんですかね。

そういう意味で言うと未だにMS-IMEに敗北していないATOKはすごいのかな。こちらも2000年くらいから使っている。JustSystemも広告メールが1日5通くらい届くのだが、一応オフにできるのでまだマシ。

Outlook.comのpostmasterからUndeliverableメールが届いた。いつものspamとはちょっと毛色が違うので調査。

結論としては、攻撃者がfrom詐称してdenasu.comからhotmailのアドレス宛にメールを出して、メールボックスフルでエラーになり、denasu.comに返ってきているっぽい。サーバのSMTPログを見ても、普通にOutlook.comからエラーメールがローカルアドレスに送信されているだけなので特に問題なし。

まあ、denasu.comからSPAMメールが行くように見えるのでイヤな感じではあるが、うちのサーバは関与していないのでどうしようもない。

念のためオープンリレーになっていないかチェック。最近チェックサイトが消えて行っているという話だけどいくつか見つかったので試してみたところちゃんとリレーは拒否されていた。

そろそろセキュリティ強化のために新しくサーバ借りて、各サービスをコンテナ化しようとは思っている。けど開発優先で時間が・・・。

ずっと表向きの職業が忙しいのだが、Typing Online(仮)をなんとか進めている。早いところゲーム製作一本に絞りたい。

タイトルはひとまずTyping Field Onlineにしてみた。タイピングが全ての空間みたいな。

そしてワードは自動生成。Weather Typingのときもディープラーニングによる自動生成を入れてみたけど、今回はそれをメインにするのでいろいろ改善してみた。最終的に、日本語と英語で、ウェザタイの文章っぽいフレーズができるようになったのでこういう感じに。

あとはCPUのAIをちゃんと作り込んで、攻撃アイテムを持ってなければアイテム探し、持っていればプレイヤーを探して攻撃、みたいにしたので一人プレーがちゃんとできるようになった。

てことでプレイしてみたけど、これは結構面白いと思う。アイテム運があったり、相手の隙を突いて攻撃、相殺みたいなウェザタイにはない戦い方もできるし。複数の対人対戦やってみたい。

ただ3D酔いしやすいかな。眼が疲れているのか判断が難しいけど。そのあたりのガイドラインを調べるか。

Twitterに載せたのでTyping Online(仮)の進捗をこちらにも。細々と開発は進めていて、キャラクターカスタマイズとかBGMを調達したり足音を作ったりしてみた。

ゲームシステム的には、入力の相殺を入れることで、相手の入力をキャンセルすることで接戦状態を作り出したり、Comboやワードの難易度で攻撃力を変えたりルールに工夫をしてみたところ、割と面白くなった気がする。下の動画では最初から無限ワードを持ってるけど、最初は何も持っていない状態にすればもう少し駆け引きが作れるかな。

あとは、ウェザタイとは違って途中参加をOKにしてみた。こう言うゲームだと一斉参加で誰が最後まで生き残るか、みたいなルールが普通っぽい気もするが、なかなか人数が集まらないはずなので、一人でCPU戦をしつつ誰かが来るのを待てる方がいいかな、と。部屋を作れるようにすれば大会モードも可能だろうし。

この後は、CPUのAIを作り込んで、ワードやアイテムを一通り用意する予定。分かっているバグが30個くらいあるのでテストプレイするにはまだしばらくかかるけど。

夏休み以降ついに作業時間がとれたので開発を再開。もうそろそろこっち一本に専念したいところ。

で、UnityのAIエンジンであるBarracudaが2.2.1になっていたので試してみたところ、以前の日記で書いていた問題が解決した。修正ソースコードを見てもズバリここが直っていたわけではなく、いろんなところが直っていてよく分からないが、「Fixed GPU Flatten when channel order is NHWC」この辺りの修正なんだろうか。ともあれこれでBarracudaのソースコードに自力でパッチを当てなくてもよくなった。

もう一つ修正待ちのXamarin Formsは5.0.1が出る気配はない。5.0.0だとWPFのフォントが文字化けしてしまうのでウェザタイのバージョンアップもできないまま。

表向きの仕事が忙しすぎて7月日記更新できなかった。一応細々実装を進めてはいて、夏休みを全て使ってバグ取りをしていた。

クオリティはおいておいて、システムはだいたいこんな感じかな。フィールド上のワードとかアイテムを取得して、使うときはタイピングで呪文詠唱。

あとは、いろいろワードとアイテムを揃えて、キャラカスタマイズとか総打鍵数カウントとか、エフェクトをまともに実装して、SEとか音楽とか作って、カスタムキーボードスキンとか追加すれば完成かな。・・・完成まで何年かかるんだろう。

Warriors of Typing S3 -夏の陣- の配信を見ていた。一通り動いてはいるのだが、やっぱりいろいろ直したいところがありますね。

実はXamarin 5.0.0にアップデートしたらカスタムフォントが使えなくなってしまい、5.0.1で直るらしいのだが、まだまだ時間がかかるようでウェザタイも更新できないという状況だったりする。このままMAUIになってしまうのだろうか・・・。今更Unityにするのは辛いし。

で、Twitterで検索しているとWarriors of Typing以外にも最近ウェザタイを扱っている方が何人かいる模様。今のウェザタイは20年分のしがらみがいろいろとあって分かりにくい箇所が多いですよね。ワード1とワード4って何が違うんだ、とか。

ワード自動生成を試している動画もあったけど、別件でいろいろ問題が見つかっていて、打てない文字があったり不適切な単語が混じっていたりする。この辺も直したいんだけどいつになるかなあ。

タイピングオンライン(仮)。なんとなくキーボードを使った呪文詠唱戦みたいなコンセプトにすることが決まったので、少しづつ世界観を作り込んでいかないと。

てことで手始めに「Unityゲームエフェクト入門」を読みつつエフェクトの練習を始める。本に載っていたほぼそのままのやつで以下のような感じになった。

The Typing of the DeadはThe House of the Deadの派生なのでキーボードから弾を撃つ感じだったけど、魔法戦だとこんな感じかなあ。これだけでも割と変わりますね。効果音とか舞台設定がコンセプトと合ってないのでいまいちいいのかどうだか分からない感はあるけど、いい感じのバカっぽさはある。

タイピングオンライン(仮)の進捗。

前回までやっていた「タイピングして相手のワードを打つ」というルールだと全然面白くなかったので、ゲームデザインの本を読みあさりつつずっとルールを考えている。

で、少しずつ面白くなりかけてるバージョン。ワードの種類をいくつか用意して、自分が宣言したワードを打つと相手にダメージが入るようにしてみた。自分が打ち終わる前に相手がワードを宣言して打ち終わるとダメージは入らない。多少かけひき、戦略が生まれると思うんだけど。まだ単調な気もするので、さらにジャンケン要素が入るともっと面白くなりそうかな。ただCPU戦だといまいちどう戦うのがよいのか分からないので、早く対人戦をやってみたいところ。やってみたいですよ、ねえ。

とりあえずワードは「単語」「短文」「文章」を選んで、長いワードを打ち終われば大きなダメージが入るようにしている。早い人相手でも単語をたくさん打てばダメージを入れられるわけだけど、そうなると泥仕合になったりして、どっちが勝つか分からなくなるかな。当然ノーミスコンボとかあるだろうし。あとは、数値多めワードとか、カタカナ多めワードとか、入力困難ワードとか、アイテムで取れるようにするつもり。ウェザタイでワード自動生成とワード難易度判定を研究したからこそ可能な話。

デバッグ版だとディープラーニングが結構遅いので動画がカクカクしてるけど、この辺は調整次第でなんとかなりそうかな。