テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

(etiles report) 進捗報告

etilesは少しずつ開発を進めていて, 昨日, beta19をリリースしました. 少しずつですがインストールやアクティブユーザも増えてきています. (現在インストール28. うち海外3)

みなさんも参加してください.

play.google.com

リーダーボード

Google Play Serviceを使ったリーダーボードでは, 一部のユーザによる熱い戦いが繰り広げられています. おれはもともと, 人間のワーキングメモリの都合上, 人間が解けるのは4x4が限界で5x5はテレンスタオしか解けないだろうと予想していたのですが, そんなことは全くなく, 5x5でもすでに20秒台で解くユーザが現れています. 特にakuto4405とTheTarouTanakaが互いに抜きつ抜かれつで競っていて, 記録がどんどん向上しています. ここでは, etilesがもつ競技性が発揮されてると感じています. 今後, この2人をわからせていくプレイヤーが出てきて, 競争が加速していくとより一層おもしろくなっていきます.

f:id:akiradeveloper529:20180402104425p:plain

f:id:akiradeveloper529:20180402104429p:plain

f:id:akiradeveloper529:20180402104432p:plain

ちなみに2x2は0.94秒で解いたこの二人をわからせています.

Bluestacks

現在etilesはAndroid向けにしかリリースしておらず, iOS向けには今のところ予定がありません. その理由は,

  • Apple Storeへの登録が非常にめんどくさい
  • 年1万円の場代がかかる
  • iOSユーザは世界的には多くない
  • Google Serviceのリーダーボードを共有出来ない
  • リリースをAndroidに限っておいた方が将来的にReact Nativeをやめてネイティブで書きたいと思った時に転換が効く

などです.

ただ, ではiOSユーザは永遠にプレイ出来ないのかというとそうする気はなくて, 色々と可能性を探っています. Web版を作るというのはその選択肢の一つですが, それより手っ取り早い手段として, デスクトップにBluestacksというAndroidエミュレータをインストールして, その上で動かすというのがあります. Bluestacksは, デスクトップ上でAndroidアプリを楽しむことに特化された環境で, 余計な設定もいらず, インストールも簡単でした. 少し縦が長くて不格好ですが, プレイには影響ないと思います. もし気になるなら設定で変えることは出来ると思います.

www.youtube.com

www.bluestacks.com

今, etilesの課題はユーザを増やすことで, Bluestacksでもプレイ出来ることは貢献すると考えています. 今後, Androidでアクティブユーザがより増えれば, iOS版のリリースもやると思いますが, 当面はBluestacksでプレイしてください.

今後

色々やりたいことはあるのですが, いわゆるシェアボタンを作りたいです. LINEやTwitterなどで拡散することでユーザを増やす手段になります.

他には,

  • ディープリンク実装
  • リーダーボードのデータから偏差値を計算してランクを表示する (Google Play Serviceが偏差値を計算してくれたらいいんですが・・・)
  • 目覚ましが鳴って, 黙らせるためには問題を解かなければいけない => 一瞬で覚醒する
  • ファイルと一緒に問題を送って解かないと中身が見れない (パスワードみたいな感じ)
  • 通信対戦 (同じ問題を同時に解きはじめて, 先に解けた方が勝ち)

などを考えています.

今後もetilesをよろしくお願いします.

(csgo) 認定はNOVA4でした

今CSGOをやってる人の大半は何百時間もやっていてプライムになっているので, ノンプラのおれはたまに「サブ垢ですか」と聞かれることがあるのですが, サブ垢ではありませんしサブ垢を作る予定もありません.

はじめての認定10戦はかなり長かったです. たぶん5回くらいはtieがありました. その他はたぶん勝ち負け半々くらいだと思います. 1戦目は雑魚しかいなかったのですが2戦目からいきなり強くなって, K/D的にはあまり活躍出来なかったですが, statサイトに書いてある「K/Dだけでなくヘッドショット率なども考慮したレート」では1.2弱(1が平均)でしたので, NOVA3,4くらいかなとは思ってました.

欲を言えばMG認定が良かったですが, 無理でした. 相手にチーターがいて負けになってしまうこともノンプラでは少なくないので. その証拠に特にチーターが多いDust2はエイムで活躍しやすいマップにも関わらず勝率が4割程度です. 完全にかちこまれています. 今のおれはエイムでわからせる以外には出来ることがないので, エイム負けするとボコボコになります.

今後ですが, とりあえずプライムにならないとこれ以上やる気が起きないため, WingmanやCasualなどでプライムに上げようと思います. 現状では, 壁が透けて見えてるんじゃない?と思う人はかなりいて, その度に疑うのが嫌になってきました. バタリオンのアジア鯖がまともに稼働してればバタリオンを始めるんですが, あれは開発陣がアホなのか, 永遠にまともになりそうもないですね.

(etiles report) 色組み合わせの設計について語る

f:id:akiradeveloper529:20180315203343p:plain

このゲームの素晴らしいアイデアは,

  • 任意のNxNに拡張可能
  • kxkの色組み合わせが(k+1)x(k+1)の色組み合わせに全て含まれる

という点です.

前者の性質は, より簡単な2x2の実装を可能にし, より上級者向けの4x4や5x5も可能にしています.

このゲームは究極的には「すべての色組み合わせを記憶する」ことが求められます. 後者の性質は, 段階的にボードを大きくしていった時に, 以前の記憶が無駄あるいは邪魔にならないことを保証します. 例えば友だちと遊ぶ時は3x3を使うが, 家ではより上級者向けの4x4でリーダーボードを狙うということも出来るわけです. 後者の性質がないと, 混乱します.

これらの性質は, 見て分かると思いますが色の組み合わせに対称性を持たせることで実現しています.

まるで奇跡のような話ですが, 実は後者はあとになってから発見しました. もともと, 幼児向けの2x2, 大人向けの5x5を実現したいと思っていて, そのためには対称性が必要だということはふつうなんとなく分かることだと思いますが, その中にrecursionが含まれてるとは想像出来なかったです.

実際にプレイしていて, 2x2の組み合わせがすべて3x3に含まれてるような感じがしたのでよく調べてみると確かにそうでした. 一般に関する証明はありません. 証明したい人は勝手にしてください.

(etiles report) Google Play Serviceのリーダーボードと連携させました

play.google.com

当初の予定ではリーダーボードの実装は正式リリース後と思っていたのですが,

  • このゲームはリーダーボードなしでは続けてプレイするモチベーションを保てない
  • リリースしたあとに難しい実装を追加するのは大変

ということでBetaでやることにしました. お楽しみください. 上のリンクをスマホから開くか, あるいはGoogle Playで"etiles"と検索してもらえば見つかります.

www.youtube.com

Google Play Serviceは, アカウントの管理やリーダーボードなど, モバイルゲームに必要な機能を無料で提供しています. アカウント管理は認証自体はグーグルアカウントと結びついていて, 他のアプリでログインしてると(通常はGMailとかでログインしてますよね)自動的にログインされます(そしてそれが要求仕様です). しかし, 本名でリーダーボードには載りたくないのがふつうなので, Gamers IDというのを設定することが出来て(というか自動的に要求されます), これが使われます. おれはGodAimAkiraです.

実装上の仕組みとしては, Androidの起動時にMainActivityを立ち上げるところで(実際には閉じてからまた開くケースを考えてonResumeに実装することが推奨されています)バックグラウンドのサインイン(signinSilently)を実行して, 失敗した場合のみIntentを表示します. その後はReactNative用とのブリッジが初期化されて, その中でアプリケーショングローバルなコンテキストを使ってサインイン状態に常にアクセスしつつ, リーダーボードへの処理(submitScoreImmediateなど)を実行するという感じです.

Androidのことがわからなかったので少し勉強が必要でしたが, 実装は自体は難しくありませんでした. しかし, なかなかリーダーボードにスコアを送ることが出来ずに嵌りました. リーダーボードが使えないとこのアプリは完全に無価値です. すでに100時間はゆうに時間をかけてしまっており, オープンソースにしてしまい開発実績として終わりにするのも少しためらわれるレベルになっていました. ノイローゼになってました.

症状としては, 「Google Playにリリースしたものはダメだが, ローカルでのデバグビルドやリリースビルドはスコアを送信出来る」というもので, 色々なことを疑って, 結果として副次的にgradle.buildを改善出来たりもしたので良かったとは思いますが, 根本的な原因を共有します.

Google Play Serviceのリーダーボードを利用する時には, アプリとリンクします. アプリには鍵がついており, リンク時にはアプリのパッケージ名と鍵のSHA1で認識します. リンクされたアプリから送られてきたリクエスト以外は弾くという仕組みです. リーダーボードは複数作ることが出来て, etilesの場合ではオープンβ用のbetaと, ローカルでのデバグビルド用のtestという2つのリーダーボードを使い分けています.

Androidのアプリを開発する時にサインをすることが必要です. デフォルトではデバグ用の鍵は自動生成されますが, リリース用には必要で, keytoolを使って作成します. その上で, 作ったkeystoreを使うように設定ファイルを書いたりすれば, ビルド時にサインをするという仕組みです. etilesの場合は, デバグビルド用にも鍵を用意してます. なぜかというと, 自動生成された謎の鍵ではリーダーボードとリンクすることが出来ないからです. そのためリリースビルドと同様に明示的に鍵を作る必要があります.

その上で, 以下のようにリーダーボードと鍵をリンクさせたために失敗していました.

  • リーダーボード (beta)
    • リリース用鍵
  • リーダーボード (test)
    • デバグ用鍵

しかしこれではGoogle Playから落としたAPKでプレイした時にリーダーボードに弾かれます. なぜかというと, Google Playに上げた時点で, Google PlayはAPKをサインし直すからです. 以下のページのUse Google Play Signingというのを見てください.

Sign Your App | Android Studio

このGoogle Play Signingという機能は使わないことも出来るのですが, ガイダンスに自然に従うと使うように設定されてしまうため, ほとんどの人は使うようになっていると思います. 使う場合, 自分で生成した鍵というのは正確にはupload時にしか使われない鍵であり, それ以降は捨てられてしまうのです.

なので, 動くようにするためには

  • リーダーボード (beta)
  • リーダーボード (test)
    • デバグ用鍵

のように設定する必要があるのです. こうすれば, ローカルのどのビルドでも, Google Play経由でもAPKが正常動作します.

Google Play Serviceを利用するとか, React-Nativeから使うとかに関しての知見はたまったので, 困っている方は相談してください.

(etiles report) etilesのオープンβを開始しました

この前の龍飛崎旅行で朦朧としながらアルファレベルのものを作り上げて, それから実際にナインタイルプレイヤーの人と議論させてもらってそれを反映させたりして, ベータの準備が整ったので公開しました.

play.google.com

react-nativeで作っているので基本的にはiOSでもemulatorでの動作を確認しているのですが, まずはAndroidで育てて, それからiOSという流れでやっていこうと思っています.

とにかくデザインがしょぼいのが気になっているので, デザインの刷新(アプリのデザインのみならずアイコンやVideoも)は外注しようかと思っていますが, そのための費用が明らかに百万単位でかかるため, それは広告で稼ぐことにします. 広告で稼いだ分は当面はアプリの改善に全投資していくことになります.

本リリースまでに出来るだけフィードバックを集めて反映させていきたいのでプレイお願いします.

龍飛崎にかちこむ

2泊3日で龍飛崎に旅行に行くことにした. 龍飛崎というのは青森の左半島の先端だ. 東京から奥津軽いまべつまで3h30m. そこからローカル線とバスを乗り継いで1時間のところにあるホテル竜飛に宿泊する.

www.hoteltappi.co.jp

単に龍飛崎は一度行ってみたいと思ってたというのと, あとは心のリフレッシュが目的だが, その他にもetilesというアプリの開発合宿も目的に含まれる.

twitter.com

機能面は大体作ってあるため, あとは見た目の実装をして, Android版のドッグフードを今週中, βテストを来週中にして, 3月中旬までにはリリースしたいという思いがある. 帰りの新幹線の中では, 新しく買ったP10 Liteというスマホにインストールして遊び倒すというのが理想だ.

βテストに参加したい人, 最新の開発状況を知りたい人はTwitterをぜひフォローしてほしい.

(csgo) あるボタンを押した回数と投げ物の持ち替えをマップするスクリプト

投げ物の持ち替えで多くのプレイヤーは次の2つの方法をとっていると思う

  1. 各投げ物を特定のキーにバインドする (例: fにフラッシュ, cにスモーク, ...)
  2. あるキーを押すと投げ物を選択し, それからマウスホイールで選択する

それぞれの問題は,

  1. フラッシュスモークモロトフグレまで全部バインドすると4つキーを消費する
  2. 今何を持っているかに依存する

1に対してキーを2つで良く, 2の問題も解決する方法は, 特定のキーを押した回数を投げ物にマップすることだ (例: 2回押すとスモーク. 3回押すとモロトフ). 以下のスクリプトは, bを押した回数によって投げ物が変わり, nを使うことで状態をリセット出来る.

alias use_throwing use_throwing_0
alias use_throwing_0 "use weapon_flashbang; alias use_throwing use_throwing_1"
alias use_throwing_1 "use weapon_smokegrenade; alias use_throwing use_throwing_2"
alias use_throwing_2 "use weapon_molotov; use weapon_incgrenade; alias use_throwing use_throwing_3"
alias use_throwing_3 "use weapon_hegrenade; alias use_throwing use_throwing_0"
bind b use_throwing
bind n "alias use_throwing use_throwing_0"