Weather Typing 4.3のmacOS版をリリース。ようやくM1 mac対応したのと、カウントダウン中に落ちる問題の修正。

M1 mac対応は、ネイティブライブラリを64bitにしないとM1で動かないのだが、Visual Studioが対応する気配がないので、ひとまずネイティブライブラリをやめた。デメリットはいろいろあるけど仕方ない。逆にM1でないMacではテストしていないが、まあいいでしょう。

カウントダウン中に落ちる問題は根が深い。前回のリリース時には起きていなかったので、OSのアップデートでいつの間にか落ちるようになっていたと思うんだけど、10回に1回落ちるみたいなやっかいな現象。カウントダウンをやめても落ちるのでいろいろなところをコメントアウトにして少しずつ有効にするという地味な作業をやっていた。結局、ルール設定画面のワード選択をリストにしていると、カウントダウンに遷移したときに何故かリストのスクロールバーにアクセスしにいって落ちるということが判明。そこをドロップダウンにして以降落ちなくなったので多分大丈夫?

Ver4.3アップデートもあとはAndroidとiOSのみ。Androidは他の入力方式がちゃんと動いていないという情報があるのでそれくらいかな。iOSは同じくM1対応を予定。

ウェザタイのWindowsのストア版のテストが終わったので登録しようと思ったが、いろいろなところに詰まって1日かかった。まず署名ができない。証明書がexpiredになっていて、ヘルプにはテスト用証明書の更新しか書いていない。証明書を選択する欄があるのだが、何もないと言われる。どうもローカルの証明書ストアを見ているみたいなのでそっちを見ると、2021年でExpiredされた証明書が入っていたのでそれを削除してもダメ。新しいストアアプリを作ろうとしてもアプリ名を登録できず。試行錯誤してWebの方からならアプリを作れる。で、新しいプロジェクトを作って新しいアプリに関連付けてビルドすると新しい証明書がローカルの証明書ストアにインストールされた。その後、元のアプリをビルドすると今度はThumbprintが違うと言われるので、ローカルの証明書ストアからpfxをエクスポートしてVisual Studioで選択する。これでようやく証明書問題をクリアできる。テスト証明書を作るとそれがあらゆる箇所で邪魔してくるので、Temporary証明書のpfxは消しておくこと。

あとはWACKが必ず変なエラーを出すようになっていた。OSチェックをやるようにしていないとHangするみたいな。新しいプロジェクトでも同じなので、とりあえずWACKは無視して申請してみる。新しいWindows SDKのWACKを使うと解決するみたいなことも書いてあるけど、UWPが古いSDKを参照していてアンインストールできず、新しいSDKは古いSDKをアンインストールしないとインストールできないのでどうにもできない。Microsoftの人がチェックしてくれるからいいか。

2年ぶりにウェザタイをバージョンアップ。さすがにいろいろバグ報告がきているのでそれだけでも対応。機能追加や仕様変更はなし。

新サーバへ移行完了。唯一ローカルでのテストが不十分だったメールも、SSL+認証モードで送受信できるし、一番制限が大きそうなgmailで送受信できて、spf、dkim、adsp、dmark全てにpassが出ているし、オープンリレーチェックでもOKになっているのでこれでよしとしよう。

何かおかしくなっていたらTwitterか掲示板へお願いします。

CentOSのサポートが終了するからいつか対応しないとと思いつつほっておいたサーバ移行。denasu.comへの攻撃も増えてきたのとメモリ不足への対応も考えて新サーバ構築中。

OSはいつもつかっているUbuntuに変更。

メモリ不足はさくらのVPS 4GBを契約。それでも月2500円。TypingTubeの作者の方は月10万円ってTweetしてたのでまだまし、なのか?

セキュリティは全てのサービスをDocker、Docker-Composeで構築する。Ubuntu本体は公開鍵認証のSSHとポートフォワーディング専用FTPだけ動かして、Web、メール、ロビーなど、もろもろ独立したコンテナにすることで、サービスを乗っ取られても他のサービスには影響しないようにする。唯一SSHに脆弱性がなければ相当強固なはず。

VPSに展開する前にWindows上のWSL2でステージング環境を構築。コンテナなのでこのまま持って行けばVPSでも動作するはず。これも便利。Web、WordPress、ランキング、ワードサーバ、DB、GITもいろいろはまったけどコンテナ化完了。特にPHPはCentOSのパッケージマネージャ制約で最新版が使えなかったりしたのが、コンテナをビルドするだけで最新版になるのでだいぶよくなる。

ロビーとウェザタイサーバは特に問題はなさそうなので最後の難関がメール。セキュリティ設定がたくさんありすぎて複雑。結局、SMTPはポート25+587でSASL認証+STARTTLS、自ドメイン宛のメールは認証なしでも受け取れて、他ドメイン宛のメールは認証なしならリレーエラー、認証ありなら他ドメインの25ポートに送る、POPはポート995でパスワード認証+TLSとした。TLSの証明書はさくらのドメイン認証証明書でいけると思うけどまだそっちでは試していない。SPFは既に旧サーバでも設定していたが追加でDKIMとDMARCの設定をする。このあたりを試すにはDNSの逆引きやTXTレコードが必要なのでローカルDNSサーバも構築。

これだと25と587が同じ設定なのでSubmissionポートって意味あるのか? って思ったけど、OB25P Blockingってあくまでアウトバウンド禁止であって、denasu.comは別に回線を提供するプロバイダじゃないから関係ないのか。関係あるのはクライアント側で、メーラを使ってdenasu.comの25ポートにつなごうとするとNo Route to hostエラーでつながらない。なので587ポートをオープンする必要があるってだけか。クライアントから25ポートにアクセスする人は悪意があるとみなされるが、587ポートへのアクセスはフリーで、587ポートが安全かどうかはそのサーバに依存するわけで、この構成だと587ポートは認証必須、リレー禁止になっているからOK、と。てな感じで合ってるのかな。。

個別の言及についてはあまり反応しないようにしているけど興味深いテーマだったので。タイピング練習ソフトは実用には意味がないという話について、ウェザタイの見解。

タイピングソフト・サイト不要論

ウェザタイは公開当初からタイピング練習ソフトと呼ぶかタイピングゲームと呼ぶか迷っていて、最終的には「タイピング自体を目的とした練習ソフト」と表記するようになった。というのもこういうソフトには2つの側面があって、初心者向けにはタイピング練習ソフトだし、それ以降はタイピングゲームになってくる。ウェザタイは練習もできるけどどちらかというとタイピングゲームに近い(ように設計している)。

タイピング練習としてはウェザタイでいうとLv4~5くらいあれば実用上打鍵がネックになることはなくて、それ以上は頭の中で文章を考える方が時間がかかって、実用上はあまり意味ないと思う。速記などではそれ以上が求められるけど、特殊なキーボードを使ったり、IMEの辞書学習を固定して変換時のスペースを押す回数を覚えるとかそういう話になって、それは別の練習ソフトや訓練プログラムが必要になる話。

で、それはタイピング練習ソフトとして見た場合だが、ある程度マスターすると途中からタイピングゲームに変わってくる。手段と目的が変わってくるというか、「文章入力を早くするためにタイピング練習ソフトを使う」から「タイピング練習をするためにタイピング練習ソフトを使う」に変わってくる。50mを世界トップクラスで走れても実用上は車を使った方が速い、だけど競技として見た場合は世界を魅了できる、みたいな。

なので、今のウェザタイの紹介文書では、初心者向けには練習ソフト、それ以降はスポーツとして楽しむというような記載としている。当時はeスポーツという言葉ではないけど。

Weather Typingは,タイピングを楽しむためのキーボード練習ソフトです。もちろんタイピング初心者が普通にタイピング練習をすることもできますが,一番の楽しみは他のユーザと競い合うことです。ネットワーク対戦やネットランキングへの参加,大会への使用といった多彩な使い方ができるように作ってあります。是非タイピングを好きになって、タイピング自体を目的とした練習ソフトとして使い込んでください。

ご時世的に夏休みは実家に帰らないことにしたため時間がある。で、ずっとやろうと思っていたAWS IoT Coreの実験をやってみた。

目標はRaspberry pi に付けたLEDをブラウザからオンオフするところ。

構成図もdiagrams.netを書いてみた。

以下のような感じ。ネット上にたくさん情報があるのであんまり苦戦はしない。

  1. AWS IoT Core上でデバイスを作る。
  2. ラズパイ上で、MQTTのトピックをサブスクライブして、on/offを受け取ったらLEDをon/offするように実装したPythonプログラムを起動する。
  3. Lambda関数を作ってMQTTのトピックをパブリッシュするようにしておく
  4. API Gatewayを作ってLambda関数を呼び出すようにする

ここまでできれば、LEDの代わりに他のものをつなげばいろいろリモート制御できる。

ほぼ夏休みに入ったので、久々にウェザタイのバージョンアップをしている。ウェザタイはAppiumを使って自動テストができるようになっているので試してみたが、動かない。

以前と全く同じバージョンにしても動かないし、ちょっとずつバージョンを上げていってもある機能は動いてもある機能は動かなくなる。Githubもバグ報告しかなくて誰も修正してないのでもう終了か。

WindowsならMicrosoft UI Automationというのもあるっぽいけどもう今更なのかな。Unityで作り直すしかないのかな。

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通くらい届くのだが、一応オフにできるのでまだマシ。

2月に入って休みゼロ状態が続いているのでいい加減何かしたくなった。

とりあえず部屋が乾いていて喉が痛くなるので、千石電商でM5Stack用温湿度気圧センサユニット Ver. 3(ENV Ⅲ)を買ってきた。M5Stackにつなげて、Groveでつないで公式のスケッチを動かしたら特に問題なく温度・湿度・気圧を表示できた。電池状態が分からないと厳しいので電池も%表示してこんな感じ。

今日は雨とか雪とかが降っているので湿度高めだけど、平均的には35%くらい。これは喉が痛くなる。次は加湿器を作らないと。

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個くらいあるのでテストプレイするにはまだしばらくかかるけど。

かなり前に買った初代?Boogie Board、電池を替えても内容が消えなくなってしまった。新型を買おうと思ったんだけど、ちょっと前にどこかのヨドバシで見たPLUS Kaite2が気になっていたので買ってみた。何かメーカーのページ見ると新型出てるけど。。。

Kaite2は簡単に言うと「せんせい」。磁気を使ったボードで、白地に黒、電池なしで細い線が書けるので、Boogie Boardの欠点を全て解決しているように感じる。もうちょっと使い続けないと分からないけどとりあえずは良い感じ。

うちは1Fなので洗濯機+独立した乾燥機を使っているのだが、最近ガタガタうるさくなってきたので新しいのに換装。家に人が入ることが久しぶりなので、洗濯機の間を大掃除して、邪魔なものを別の部屋に移動して待機。ヨドバ?メーカー?の技術者の人が来て15分くらいで入れ替えて去って行った。技術者はかっこいいですね。

乾燥機は5万円くらいか。前のは12年くらい使ってたから、週100円いかないくらい。電気代を合わせてもコインランドリーより全然安い。

コロナでしばらく止まっていたが、行くなら今しかないということで、いつの間にか追加されたヨドバシ甲府、最後のヨドバシ新潟へ行って全24店舗制覇してきた。

ヨドバシカメラといえばみんな知ってる全国展開している家電量販店。店員さんの知識量豊富が特徴のお店ですね。

元々、千葉、横浜、川崎、アキバにはよく行ってたけど、本格的に巡礼を始めたのは2018年。一時的に関西に住んでいたときに梅田京都へ行って、そういえば昔ヨドバシ札幌に行ったことがあったのを思い出し、全店制覇挑戦へ。関西へいる間に名古屋、博多、関東へ帰ってから改めて関東近辺と北を攻略。コロナでしばらく止まっていたが、ようやく完了。

ネットを探してみると全店制覇しようとしていた方とか制覇した報告とかはあるので、それなりにやっている人もいるのかな。甲府は最近できたので甲府含めて制覇した人は少ないかも?

ちなみに上の絵の札幌はかなり前に行ったので写真がなかった。取り直しに行ける場所でもないので手書きで。

一応書いておかないといけなさそうなので、コロナ後は感染症対策に考慮した上で行っています。まあ、普段一人暮らし+リモートワークで、電車が空いている時間にふらっと新幹線に乗ってヨドバシに行ってそのまま新幹線で帰ってくるわけで、だいぶリスクは低いかと。

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

で、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戦だといまいちどう戦うのがよいのか分からないので、早く対人戦をやってみたいところ。やってみたいですよ、ねえ。

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

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

掲示板でウェザタイがM1 Macで動かないという話があり、M1 Macbook Airを買ってみた。下取りを利用したら5万円で同スペック以上になったんだけど、Intel Macのテスト環境がなくなった。

で、調査をしてみたが、そもそもの原因はネイティブCライブラリがIntelだから、というのはその通りだったのだが、Apple SiliconサポートしようにもXamarinがM1ビルドに対応していない。ネイティブCライブラリを使わなければRosetta上で動くのだが。

なので、M1に対応するとしたらネイティブCライブラリを使わないようにする必要がある。まだ時間がかかりそう。