大阪や京都のようなインパクトはないけど、中は普通に充実してた。行ったので中洲~天神辺りをブラブラしたり明太子を買ったりはしたけど、例によって日記の主旨と外れるので省略。日帰りでも十分面白かった。福岡県のネットイメージから銃撃戦を覚悟していたんだけど普通だった。いつの間にか琵琶湖とか名古屋も行ってみたので、これで関西にいる間に行きたかったところはコンプリート。ヨドバシカメラでいうと15/23店舗を制覇。ちなみにヨドバシカメラ名古屋。特筆することがなかったので日記にも挙げてなかった。10のアップデートでUIがおかしくなった問題の修正。これだけでバージョン番号をあげるとWT4.0に近づいてしまうのでなんとなく保留していたのだが、いろいろ大会に使われてきてもいるので、そろそろ公開しないと。MacOS版は、本当は対戦サーバに接続する機能だけ追加しようとしていたのだが、結局ほぼWT3.6までの機能は入れた上で公開した。Formsを4にしたり、いろんなバグを回避をしたり大変。結局最新ソースを使うしかなかった。今まで問題なかったところで「UIスレッドで呼べ」エラーで落ちるようになったスクロールビューなどの中にエディットボックスを入れて、エディットボックスに一度でもフォーカスしてから画面遷移するとフリーズするUIスレッドの問題は面倒だけど回避は簡単。いろんなところにUIスレッドコールを追加して解決。エディットボックスの問題は、その時点でもうMacOS版を捨てようとしたくらい致命的。バグは増えても減ることはないので今後も修正されることはないし。あがいた結果、画面遷移の直前にエディットボックスを含むちょうどいい領域を非表示にすることでたまたまうまく動いたので、それで回避することにした。Studioの署名オプションがDisableになっていて付けられない。Studioの署名オプションが有効になった。WT3.6で入れた背景画像選択機能がサンドボックス化で動かなくてトークン化したり、初回起動時に権限を聞かれるようになったりしつつようやくpkg化完了。Appストアからウェザタイをインストールできなくなった。3.7をリリースしたらストアから入れられるようになったけど、これだとバージョンアップのテストが不可能。MacOSは一般の開発者に厳しい。最低限月1回の投稿を目指しているので、そろそろ何か書いておこう。日記じゃなくて月記になってるけど。ウェザタイの開発はiOS/Mac版のAppiumによるテストをやろうとしてるけど、iOSはそれだけで何ヶ月もかかりそうだし、MacはAppiumの機能が少なすぎておそらく無理。いいかげんプラットフォーム対応は終わらせて新しいことをやりたい。上にも関連して、最近は開発に時間がかかりすぎる気がしていて、もう少しなんとかならないかな。ことで関数型言語の勉強を進めている。関数型言語は数学の素養がないとちゃんと理解できないので数学を勉強中。物理シミュレータとか暗号論の勉強でちょっとずつ数学を勉強していたが、4年くらい前に「数学ガール」を読んで面白くなった。大学の頃は、数学の本を読んでも定義と定理と証明ばっかりで誰が理解できるのか不思議だったけど、「数学ガール」でだいぶ教科書の読み方が分かってきた。Haskelは圏論をベースにしていて、さらに圏論を真面目にやるには、群論などをちゃんと理解しないと言ってることが分からない。ことで数学のいろいろな分野に手を出しているところ。平行して人工知能も勉強中。こっちは具体的にウェザタイに活かしたいものがあって、ワードの自動生成とか、人間みたいなCPUの作成とかができると面白いかな。Learning」を見つつ、ウェザタイに使うためPythonで書かれたものをC#で実装している。1巻は既に実装が終わって、今2巻のRNNあたりを実装しているところ。ウェザタイに使うには時系列が必要なので。人工知能の本を読んでいると脳の仕組みとはかけ離れた方向に向かっているので、今まであまり勉強したくなかったのだが、部分的には人間の脳と同じようなことが再現できているようなので、とりあえず追いつくために勉強している感じ。うまく動かすために、脳を研究するのではなくて、数学的な仕組みやパラメータで解決するので、これを進めても脳の実現は無理そうな気がするけど、まあ特定の問題を解くのには便利そうなのでこれはこれで使っていこう。あれ、電子工作やってない。夏休みちょっと長めの夏休みってことで関東に行っていて帰ってきた。関西に「帰ってきた」という表現になるくらいだ。開発環境もあんまりないのでひたすら人工知能の勉強。いっても普通のディープラーニングとかではなく脳科学からのアプローチだけど。普通のディープラーニングもそろそろ実装できてきたのでウェザタイへの応用を考えよう。Videoでシリコンバレー第5期を一気に見た。関西の家だと通信に制限があるのでちょっと見づらい。第4期はリチャードが闇落ちして犯罪を犯したけど、運良く捕まらずにラッキー、で終わった。そのストーリーはどうなのか、第5期はもっと酷いのか、と思っていたけど、第3期以前のノリに戻った感じ。ピンチに陥って誤った道を進みそうになるけど、ギリギリ正しい道を選んで、運良く助かる、っていうのの繰り返し。マンネリ気味ではあるけどやっぱり面白い。「新しいインターネット」に動きが。ラスに説明したとおり、P2Pを基本に、世界中にある端末のストレージを共有するインターネットって感じかな。ギャビンベルソンの懸念するデータゲドン(くだらないデータが増えすぎてデータ量が爆発する)を解決することはできるかもしれないけど、理念であるGoogleとかMicrosoftに支配されない世界とはあんまり関係ない気もする。個人的には、今のインターネットは極度に商用に偏ってもはや無価値になってきているので、昔の集合知みたいなインターネットに戻るといいんだけど。感じでシリコンバレー、今後どうなっていくのか。Xamarinを使ってアーカイブを作るとx86/x64のどちらかにしかネイティブライブラリが入らない。仕方ないので今までは64bit版だけを入れていたのだが、おそらくx86のAndroidでは起動エラーになっていたはず。今回はもう64bit専用にして32bitはインストール不可にしたのだが、掲示板で32bit版のOSに関する報告があった。いくつか調べてみたが、Xamarinの公式でも困っている人がいて、Xamarinとしての解決策はなさそう。Androidとしての解決策として、32bit用と64bit用のapkを両方登録することができるらしい。今回、32bit用のネイティブライブラリを入れたapkを登録した。Xamarinの制約?バグ?として32bit版専用のapkを作っても64bit用のmonoライブラリも入ってしまう。Codeを下げた32bit版を登録してみた。Android版を更新。ロビー参加とネット対戦に正式対応。今までホストを作るのが困難だったので隠し機能扱いにしていたのだが、サーバクライアント式にしたことでようやく正式対応と言えるようになった。64bit版のみ対応にしてみたけど大丈夫なのかな。前のバージョンでも32bit版ネイティブDLLを入れていなかったのでエラーになっていたはずで、64bitのみにした方がややこしくないかなってことで。Xamarin+Appiumによる自動テストは、入力関係はうまくいかなかったりしたが、70%くらいは自動化できた。あとはMacOSとiOSの自動テストができるとテスト効率が上がる。Typingを使って頂いた。メールで連絡を頂いたものの高知県ということでどうかな、と思いつつツイートしてみたところ、タイピングAGOGOのおはようさんが高知県在住ということで参加された模様。Twitterすごい。大会の詳細もブログにまとめられていて参考になる。RTCはかなりガチな競技会になっているが、こういう場の場合、対戦だと時間拘束もされるし、単純にスコアを競う感じの方がよいってことかな。派手な見た目のソフトの方が一般受けはしそうだけど、その中でウェザタイを使ってもらってありがたい。Updateを入れたら、ウェザタイのタイトルや結果画面のListViewが崩れるようになった。調べてみたところ、ListViewの表示がちょっと遅れて、最初の行を追加するときはListViewの幅が分からず最小の幅になって、その後の行はListViewの幅が確定してちゃんと表示される、っぽい。最初の表示だけListView.SizeChangedが来たときにListViewItemを追加するようにした。WPFは廃れていくだろうし、適当でいいや。Mojaveを入れられないという問題が。7年前に買ったやつだしなあ、ということで買い換え。Proというのは決めてヨドバシカメラへ。7年前は13インチにしたんだけど、店頭で触ってみた感じだと15インチでも2012年の13インチと同じくらいのサイズ、重さに至っては15インチの方が軽い。15インチにしてみた。2とほぼ同等のスペックだけどSSDが256GBな分(?)多少安い。開発環境を整えて、iOSとMacOS用XamarinアプリをビルドしてAppium経由で起動できるようにした。3で、全部で5台になった。3.6を公開するにあたって、UIテストの自動化を研究していた。今、ウェザタイのリグレッションテストの項目が約2500件、WPFだけで500件くらいある。これだけあるとテストだけで数週間かかってしまい、何か修正してもテストがめんどうで公開をあとまわしにしてしまう。人を増やさずになんとかならないか考え続けた結果、UIテストがそろそろ実用的になっていそうなので、やってみた。Webの世界ではSeleniumがよく使われているが、それをデスクトップアプリやモバイルアプリに使えるようにしたAppiumというフレームワークがある。バイナリだけでテストができるので、C#+Xamarin.Formsで作ったアプリでも、C#でテストコードを書いて、マルチプラットフォームでテストできる。苦労はしたが、最終的にWPFのテストは77%の自動化ができた。面倒なテストはほとんど自動化できたので、手動のテストを含めても、早ければ1日でテストが終わる感触。今回はWPFなので、WindowsAppDriverを使用。Windowsストアアプリも同じものが使えるはずで、Android他はまた違うAppiumのドライバを使うが、テストコードは基本的に共有ができるはず。OSのアプリを作ってた時代は、グレムリンテスト(モンキーテストの自動化)くらいしかなくて、とてもちゃんとUIのテストはできなかった記憶があるけど、RPAも実用的になっている今の時代、以下のような項目くらいは自動化できるようになっていた。ボタンなどをクリックして画面遷移した先のラベルなどが表示されていることを確認する入力ボックスの文字数制限やエラー表示が正しいことを確認する複数のインスタンスを起動して、互いに協調動作(具体的にはネット対戦)することを確認する具体的には、プログラム上でUI部品にIDを与えておくと、実行時にそのIDからテキストを取得したり、クリックしたりできる。テスト自体はプログラミング言語を使って書くので、ロジックは入れ放題。プラットフォーム依存になるけどファイル操作なんかも普通にできるので、かなり自由度が高い。逆に、どうしても自動化できなかったのは例えば以下の項目。そりゃそうだろうね、っていう感じ。頑張ればできるかも知れないけど手動でやってもたいしたことはない。文字の色や背景画像を確認する音がなる、ならないことを確認する拡大縮小やスプリッターの位置を確認するマウスカーソルの表示・非表示を確認するUIテストをやる前は、結局目で見ないとおかしいことに気付かないから意味がないかな、と思ってたけど、Appiumの場合、実際にマウスでクリックしたりキーボードを入力したりするので、手動でテストするのとそんなに変わらない。テストスピードがあまり早くないのもあって、テストの様子を見ていればレイアウトが変になっていたりしても割と気付く。手動ではどうしても確認にミスが出るので、むしろ自動の方が正確だし、手動の時は全組合せのテストは不可能である程度抜粋にせざるをえなかったが、自動なら何も考えずに全組合せテストしてもたいしたことはないので網羅的になる。今回のUIテストでは以下のことを気を付けて作ってみた。汎用的になるようにする。エラーメッセージの確認なんかは、メッセージそのものを確認するとエラーメッセージの変更に堪えられないので、キーワードを含むかどうかだけ確認するようにしてみた。いつでもテストを実行できるようにする。前提条件がないように、テスト項目開始時に設定ファイルやリプレイファイルなんかを全て削除して、必ず同じ条件で実行できるようにしてみた。ついでに、WindowsAppDriverでハマったこと。Xamlから、Effectを使ってIDを設定し、各プラットフォーム固有コードでIDを設定するようにした。画面に表示されていない項目をクリックしたりはできないので、スクロールがめんどう。結果的にWindows用に最適化されている状態なので、Androidとかでどうしよう。キーボードが101キーボードになっていて、打てない記号がある。バックスラッシュを打つ方法が見つからなかった。Windows用のAppium用クラスとAndroid用のAppium用クラスが別物なので、統一的に扱えない。一個ラップしたクラスを作って同じように使えるようにした。Async/Awaitするとテストが終わってしまう。WaiterのUntilをうまく使って回避するくらいしかない。3.5を開発版としていたが、開発版のままにしておくデメリットが大きいので、正式版として公開した。Formsがバージョン同じままバイナリが変わる問題もあって、リビジョンアップができないのでマイナーバージョンアップにしている。本当はストア版やMac/モバイル版をアップデートしてから正式版にしたかったのだが、もうこっちは少し時間がかかりそう。タイプウェルランキング更新終了あんまり下手なことはかけないのでTwitterかブログか迷ったけど、折角なのでこっちに。TwitterでGANGASさんの、タイプウェルランキングが6/1で更新終了という話が。TODとタイプウェルがなければウェザタイはここまでになってないので、感謝。思わずタイピング本のインタビューを読み返したりした。ウェザタイの適当なランキングと比べて、あの厳格なランキングを20年くらいメンテし続けているのはすごい。ウェザタイはどうなるかな。メンテだけなら負担はほとんどないので、ランキングやロビーは続けようと思えばいつまでも続けられる。プラットフォームについていくには、定期的に作り直しが必要になるので、WT2のときみたく他のソフトウェアを作り始めてしばらく放置はありうる。あとは、何かあったとき用に、ボタン一つでソースコードを公開する仕組みか、ランキングと対戦で不正ができないようにした上でオープンソース化できる仕組みを編み出さないと。ウェザタイプロジェクトを開いてみたが、プロジェクト設定を最新のプラットフォームにしたり何度かリビルドして、とりあえずビルドはできた。9の動画で見たが、Xamarin.FormsのXAMLがデザイナーで表示できるようになった。デザイン時だけのリストを入れたり、かなり改善されている。3.6にアップグレードする必要があるようなので、嫌々アップデート。WPFのリストボックスのスクロールバーが、常に表示されるようになったことくらい。思ったよりバグは増えなかった。barsで作り込まれている。スクロールバーのhidden/visibleが指定できるようになったみたいだけど、何故かWPFでは今まで使えていたAutoが使えなくなっている。例のごとくListViewのRendererで以下を指定して回避。近代科学資料館へTwitterで東京理科大の近代科学資料館がリニューアルで一時休館という話が流れてきた。らなかったけど、調べてみると古い計算機を置いているらしい。これは見ておかないと。Museumへ行ったときはものすごい量の計算機があって一日いたのだが、そこまではないよね、って思っていたけど、思ったより充実していた。Museumに行った後、コンピュータの歴史の本も何冊か読んだので、これがあれか、ってなって面白かった。5100の元ネタの後継機)とか。Museumではガラスの向こう側であまり見えなかったけど、ここではそのまま置いてあってだいぶ詳しく観ることができた。8800(世界初のパーソナル・コンピュータ)は初めて見たけど、思っていたより大きい。パラメトロン(真空管からの移行期に、トランジスタかパラメトロンか、みたいな話だったかな)もどんなものかな、と思っていたけど、外見からはあまり分からず。去年企画があったらしいので観たかったかも。あとは、計算尺は自宅にあるけど使ったことないなあ、とか、タイガー計算機(ハンドルを回して計算する機械)とか、これも実家にあったような気がするTK-80とか。Bush式アナログ微分解析機。アメリカでバベッジの解析機関のデモをやっていて、それは1部屋使った超巨大なものだったが、それとは別の話なのかな。この辺りは後で調べてみよう。久々に東京に帰ってきたのではっぱさんと情報交換。はっぱさんが3Dプリンタを入手して以前モデリングデータを渡していたのだが、ようやく完成品を受け取ることができた。これはどう見てもカロリーメイトですね。色合いがチーズ味にぴったり。写真だと分からないけど、軽さとか手触りとか色合いとかがなかなか良い感じ。カロリーメイトしか食べない人に見てもらったところ、本物かと思った、というコメントをもらった。いうのを簡単に作れるとなると、電子工作のパーツも作ることができて、いろいろ捗りますね。デジタルペーパーは紙ずっと前から気になっていたSonyのデジタルペーパー。Kindleを買ったときにあまりに紙に近くて感動したので、もっと大きいのがあればいいのに、と思っていた。デジタルペーパーはまさにそういうデバイス。8万円って高いよね、と思っていたらいつの間にか手元にあった。PDFしか見られないのでだいぶ用途が狭いのだが、読みたいPDFがあるならかなりよい。雑誌でも拡大しないで普通に読めるし、本より軽い。表示切り替えはまだ遅いけど、Kindleと変わらないというかKindleよりは早い気もする。Readerを動かせるようになるかな。Readerくらいの使い勝手が実現できれば、紙の本はいらなくなるのに。Designを読めるかな。液晶だと目が疲れるからなかなか進まなかった。Boardの代わりに使えるかな。Boardの手軽さには勝てないと思うけど、白地に黒なのと書いたメモを保存できるのは魅力的。のんさん企画のタイピングオンライン対戦で、ウェザタイを使ってもらっている。定期的にやっていきたいとのことなので、今後にも期待というかウェザタイも頑張らないと。配信はTwitchで観られるので是非。最初の話では、WT3.5でポート開放が不要になったのもきっかけということだったが、確かにこういう形だと、ポート開放があると難しい。いくつかの試合が同時進行なのでホストを一人でやることはできないし、接続が安定しないと大会がその都度中断されてしまう。のんさんも今回は#0でお試しと言っていたが、ウェザタイ的にもWT3.5が本格的に使われるのは初めてなので、サーバ負荷等、貴重なデータを取ることができた。大会中のサーバ負荷についてはCPU/Disk/Traffic特に問題なし。不安だった同時対戦についても、2人対戦を4試合同時くらいでは問題なし。安定していると思っていたロビーサーバの方で対戦接続時にエラーが発生する現象があり、開始時間が遅れた。検索するときにプレイヤー情報が入っていないときがあってエラーが出る。大会ではこんな負荷はかかってなかったしなあ、と思ってその視点でログを解析した結果、ようやく原因が判明。ロビーに入るときにパスワードが間違っているとクライアント側でエラーメッセージが出るのだが、これにOKを押さないと、ロビーサーバ上、プレイヤー情報がないメンバーが入ってきてエラーになってしまう。その人がOKを押せば直るのだが、その状態で放置するとその間は誰も対戦ができなくなっていた。あとはRTC2018でも起きていた、対戦が終了すると対戦相手がいなくなってしまう現象がまだ起きている。一応WT3.5で怪しそうな所は直したのだが、まだダメみたい。現象が発生したときの全員分のリプレイでもないと直せそうにない。VTuber配信やオフライン大会など、新しい使い方が出る度にいろいろ改善したいことが出てくるが、今回もいくつかある。開発が間に合ってないけど。ロビーのチャットのフォントサイズを変更できるようにする運営機能。ワードなどの設定を中央から強制したり、対戦結果を収集するなどゲスト側のルール画面に、ホスト側のワード数を反映させる観戦用のラグなしモード。上記を応用して、1フレーム内の打鍵を個別に扱うことで、ラグが大きいときに同着になる問題が改善できる。TypingのWindowsデスクトップ版以外の更新をやっているのだが、テストが2300件くらいあって、さすがにテストが大変。ことでUIテストの自動化を本格的に調査。1週間くらいかかってようやく見えてきたのでメモ。ちなみにAndroid/UWP/WPFは実験成功して、Mac/iOSはまだ試せていない。UIテストはいろいろな方法があると思うけど、マルチプラットフォーム対応だとAppiumがよさそう。Appiumは、WebのUIテスト自動化Seleniumと同様の方法でモバイルアプリのテストをするフレームワーク。サーバクライアントになっていて、クライアントでテストコードを書くと、サーバにJSON形式のコマンドを投げて、サーバからアプリのUIに向かってキーボードやマウスのイベントを投げてくれる。Driverを使えばWindowsのWPFやUWPもテストができる。クライアントについては、Pythonなどでやるのが普通かもしれないけど、Appium.WebDriverを使えばでC#で開発が可能。Driverを起動すればWPF/UWPのテストが可能ということ。一工夫いるが、Xamarin.Formsのアプリもテスト可能である。Appiumのインストールここは普通にAppiumとAppium-doctorをインストール。Pythonとかnodeとかそのあたり。Appium-doctorを通すためにいろいろインストールする必要がある。found」になるので環境変数「PATHEXT」に「.JAR」を追加する。これ1日はまったけどappium-doctorのソースまで見てようやく分かった。Driverのインストール普通にインストール。StudioでUnitTestプロジェクトを作り、NuGetからインストールした。思うけど・・・別にコンソールアプリでもいいのだが、テストケースの管理とかでUnitTestがいいかな、ってくらいUI部品にIDを振るテストの時にUI部品を特定するため、それぞれIDを振る。IDしか使えないよね。ことでXamarinのXAMLで、ButtonとかにAutomationId=”hoge”を入れる。よければ話は簡単なんだけど、Android、UWPはうまくいったがWPFはダメだった。Xamarinのソースを見る限りWPFではViewRendererでSetAutomationIdをやっていないみたい。IDに対応する属性を設定するようにしてみた。感じだけど、これ以外にうまい方法は思い浮かばない。プラットフォーム共通。}次に各プラットフォーム用のEffect。}}XAMLではEffectを付ける。WidthRequest="100"/>テストケースの作成C#ではこんな感じ。各プラットフォームのセッションを作って、共通のテストを実行するようにしてみた。静止画じゃ分からないけど、勝手に文字が入力されてボタンが押される。ことで、単純なUIのテストはこれで自動化できるかな。UIが崩れるとか、なんか変、っていうバグの方が多いんだけど、画面遷移とかはこれで自動化して、人が見ないと分からないようなテストにリソースを集中できれば成功かな。試してないけど問題文章も自動で打てるのだろうか。すると不正ツールを作れてしまうかも。打ち込み速度が遅いからよさそうだけど、設定ができたりすると厄介。