動かない加速度計

 そうして3時間費やしてみたが、まだ加速度計は動かない。いろいろ調べたり、試したり、コンパイルエラーをつぶしたりしているうちに、Android SDKにはいくらか詳しくなったが、画面はこんな感じである(図3)。

図3●「予期せず停止しました」と出る。筆者も予期していない
図3●「予期せず停止しました」と出る。筆者も予期していない

 プログラミングをしていると、よくある話だ。優れたエンジニアがこの手の問題を30秒で解決したり、あるいは自分でも別の日に試すとあっさり動いたりすることも珍しくない。

 気づけば夜も10時過ぎ。「一人で勝手に24時間チャレンジ」を始めてから7時間ほどが経過していた。残り14時間足らずのところで、深追いをやめて帰ることにする。ややふてくされ気味である。

 ぐっすり眠って次の日の朝、もう一度挑戦してみる。怪しいと思われるところを順番に、確認して理解してつぶす作業を繰り返す。すると、1時間ほどで加速度計のサンプルが動いた(図4)。

図4●動いた加速度計
図4●動いた加速度計

 画面に出ている数値が端末の上下方向の加速度。いまは重力を計っている。端末の向きを変えると数字が変わる。面白い。

 動かなかった原因は、あるXMLファイルのちょっとした間違いだった。失った時間は惜しいが、これもよくある話である。

オレってばスゲー

 気づけば残り2時間30分。昨夜立てた目標に届くのは難しそうだ。あきらめたくなったが、動いた加速度計をもとに、投げたかどうかを判定する処理を試してみることにした。気分に頼ってコードを書いてみる(図5)。

図5●適当に書いたコードの一部。加速度センサーの値が10.0以上だったら画面に「投げた」と表示する
図5●適当に書いたコードの一部。加速度センサーの値が10.0以上だったら画面に「投げた」と表示する

 そのままの勢いで動かしてみる。端末をつかんで振り回してみると、画面に「投げた」と表示された(図6)。これはうれしい。「オレってばスゲー」と思う瞬間である。

図6●端末を握って振り回すと画面に「投げた」と表示された
図6●端末を握って振り回すと画面に「投げた」と表示された

 残り2時間。投げたかどうかの判定を作り込みたくなる。どのくらいの頻度で値を取得して、何ミリ秒間一定の加速度を超えたら「投げた」と言えるかや、こう演算すれば端末の方向を問わないで済むのではなど、プログラミングとして楽しそうなテーマがたくさんあるからだ。一方で音も出したい。