Ballsの件

昨日Androidアプリ新作公開しました。
Balls

我ながらクソみたいに単純なopenGLのデモなんだけど一ヶ月と10日も製作に費やした。面白かった。
デモだけど広告入れました。お金欲しいもあるんだけど、ユーザさんの動きがある程度分かるんですよね。アナリティクス入れればもっと詳しく分かるんだろうけど、ColorExtractorに入れたのは上手く動いてないんです。今度もう一度ちゃんと設定してみよう。

3D衝突計算は「ActionScript 3.0 アニメーション」にお世話になりました。中古で無料配送だったから1000円以下で手に入って助かったw なんでActionScript?とは思うけど、色々ぐぐったりした中で一番説明が分かりやすかった。計算式には言語関係ないしね。

一番苦労したのはボールをダブルタップで追加/削除の部分。three.jsならRayCasterクラスがあるから簡単なんだけど、今回もフレームワークは使いたくなかったので(たぶんUnityとか使えばそういうのあるよね)、試行錯誤しながら自作ロジック組んだ。といっても教科書(OpenGL ES 2.0 Androidグラフィックスプログラミング)の「9.2物体を選択する」の手法を拡張しただけですけどね。追加は目に見えてるワイヤの立方体よりちょっと小さい立方体とxyz軸に沿って平面立てて、glReadPixelsしてる。タイミングがシビアで苦労した。ボールの番号はrgb値使って、r=100の桁、g=10の桁、b=1の桁を入れてます。openGLはr値は5ビットなので32まで数えられるから、ボールの最大数は3200のはず。はずって言うのはその数に達する前にCPUかメモリの限界で落ちるだろうから。Playストアにスクショで張ってるけど、300個くらいまでなら一応滑らかに動きます。機種によりますけどね。

以上、言葉足らずの説明ですみません。早く次のアプリ作り始めたいんだよねw アプリ公開報告でした。

AndroidStudioアンインストールでミス

表題どおり。中身はありません。ほんとにただの自分向けメモ。

新規に何始めよう?と思って、2作目のアプリで課題だった「BPMリアルタイム解析」行くか?と昨日は一日情報集め。結果分かったことは

1)「BPM解析」はできそう(簡単とは言ってない)。

2)「リズム解析」は至難。機械学習とか出てくる領域、かつ、アルゴリズムの決定版はまだないらしい。

ググってるうちに俺のやりたいのは「リズム解析」、言い換えると別にメトロノーム作りたいわけじゃない、実現したいのは音(楽)にあわせた動きだということがわかったんで、今回は(も)撤退w
もう少し攻め口が明確にならないと進めようがないということが良く分かった。
そこで次のテーマは決定。また3Dデモアプリ。ホントに我ながら金にならないことばっかやってるww 出来たらここで報告します。

参考1:拍と拍子の概念を数学で表現する
参考2:ロボットを対象としたビートトラッキ ングロボットの提案とその音楽ロボットへの応用(pdf。重いです)

そんで表題の件。AndroidStudioのバージョンアップ告知がいい加減うるさいんで、どうせならこの機会に最新の2.0まで上げちゃおうかと思ったらまだベータか。
ちなみに今使ってるのは1.3。さすがに入れ替えはこわいんで並列インストールに決めて、ダウンロードしてsetup64.exeやったらSDK入れるフォルダは指定できるんだけど本体はexeある場所そのままのようなので中断。
解凍したフォルダ一式をインストールしたいフォルダに移してから再度実行すると既にインストールされた状態で起動、プロジェクト選択画面が表示されちゃう。
気持ち悪いんで2.0のフォルダにあるuninstall.exeを実行。フォルダ指定確認して(2.0がインストールされたフォルダが出てる)、「全部消す」的な処理を実施。
ログ見ると1.3のフォルダ名がチラホラ見受けられる!!なんじゃこりゃー!!! 試しに1.3を起動。メッセージ「SDKが何も無い」が出てショボーン←いまここ

SDK一式ダウンロードはじめてとりあえず既に3時間経過。SDKは終わって「Downloading Components」だって。いつ終わるのか。どうせ終わって再起動しても足りないものあってまたダウンロード祭り始まるんだろうなぁー。

そうです。要するにこの記事はダウンロード待ってるあいだにア○○トサイト群の手直しも終わっちゃって、やること無いから書き綴ってる無駄に長い中身の無いエントリです。

ついででこのドメインのトップページのモバイル対応も進めよう、というか最近のブラウザはスマホのセンサの類からデータ取れるとかどっかに書いてたよなと思ってイベントリスナ仕込んでローカルで開けてブラウザのコンソール見たら「The devicemotion event is deprecated on insecure origins」だって。
要するにHTTPS対応ドメインでないと使えないらしい。くそー。HTTPS化メンドクサイよなー。そっと元に戻しました。
別に文句いうつもりは無いけど、インターネットってドキュメントを「誰が書いたか」じゃなくて「何が書かれてるか」で評価される世界だと思ってたんで、なんか世界が少し「歪んだ」ような違和感を感じる。ナイーブすぎるかw

最近、今更のようにtofubeatsさんのLostDecade7聞いてるんだけど、最後のトーフ→ナカタ→imoutoidの繋ぎは無茶苦茶かっこいい。というかこれでimoutoid知ったw 
天才達と自分(おっさん)の場合を同一視する気はないけど、「金にならない好きなこと」をやる情熱っていうのはそんなに馬鹿にしたもんでもないのかなぁと思った。あ、ダウンロード終わった。

追記)
ColorExtractorに入れたAdMobで初めて「見積もり収益額」発生。1円。 コーディングで頂いた初めての報酬w まだあくまで見積もりだけどね。

Proguardで嵌った件

今回はアプリ公開の顛末は書き残さないことにしたんだけど、公開直前、最後の最後にProguard設定でチョイ嵌りしたので備忘録。

  1. 基本的なところ。今回広告ユニット導入したのでいままでのアプリが700kbぐらいに収まってたのが2.2mbぐらいになった。そんで「shrinkReleaseMultiDexComponents」エラー発生。
    これはググってすぐ解決。appのbuild.gradle、「defaultConfig」に「multiDexEnabled true」設定記述でOK。メソッド数上限超えたらしい。
  2. アナリティクスの設定マニュアルによると最上位のbuild.gradleとアプリ単位のbuild.gradle両方にdependencies記述必要になってるんだけど、これいらん。バッティングしてエラー。アプリ単位のbuild.gradleに記述でOK。
  3. 上記2つでデバッグビルドはOK。リリースビルドだけ出来ない。小一時間ほど嵌ったけど毎度おなじみ、皆大好きスタックオーバーフローで解決。いろんなとこにいろんな情報かいてるんだけど、このページの最後のほうの「gradle自体のバージョンをあげろ」だけで解決。「バッティングしてるクラスさがしてProguardのalert除外設定しろ」って解決策が良く出てくるんだけどそれいらんかったです。

この記事書くのに色々再現させていたら驚愕の事実が! 上の1と2もイランw 3だけでいいことが判明。確かに1の設定マニュアルにある「play-services-analytics」と広告表示用の「play-services-ads」でも3やる前はバッティングでエラー出てたもの。早速apk差し替えしとこう。