2011年10月15日土曜日

[Android] LYNX3D (SH-03C) をAndroid2.2にバージョンアップ

How to upgrade LYNX3D
今更ですが、Android2.1のLYNX3DをAndroid2.2(ビルド番号02.01.00)にバージョンアップしました。
詳細はこちら→LYNX 3D SH-03Cのバージョンアップ情報

手順を簡単に説明します。
  1. LYNX3DをWindows PCにUSBケーブルで接続する。
  2. USBドライバをダウンロードし、Windows PCにインストールする。
  3. メジャーアップデートツールをダウンロードし、Windows PCにインストールしたら起動する。
  4. メジャーアップデートツールの指示通りにLYNX3Dの画面を開く [設定]-[端末情報]-[メジャーアップデート]-[アップデートの確認]、[アップデートの実行]
最後の[アップデートの実行]はメーカーの発表で60分以上とされています。Mtkの環境で40分くらいでした。

バージョンアップ後は端末がオールリセットされた状態になります。たとえばこんな設定がリセットされます。(この他にもあります)
  • 3G回線を使う設定に戻された。
  • Wi-Fiを使わない設定に戻された。(これは酷い)
  • Wi-Fiアクセスポイントの設定が消えた。(これも酷い)
  • Wi-Fiスリープ設定が購入時の状態に戻された。
    これが一番酷い!この仕様がまるでWi-Fi sync Screenの問題のようにコメントされました
  • 壁紙の設定が購入時の状態に戻された。
  • GPSの設定がオフに戻された。
  • 開発用設定の「USBデバッグ」「スリープモードにしない」「疑似ロケーションを許可」もオフに戻された。
アプリ個別の設定は影響ないのですが、端末の設定と連動しているアプリは挙動が変わるかもしれません。

バージョンアップ後はタップやフリックの反応が向上して操作しやすいし、ライブ壁紙はかっこいいし、YouTube3Dはおもしろいです。

自動で追加されたライブ壁紙

そして、Android2.1のLYNX3DはOpenGLを使うとアプリケーション終了後もバッテリーが減り続ける奇病があったのですが、バージョンアップで治りました。
時間をかけてバージョンアップした甲斐がありました。
こう言うサービスを受けると本当に買ってよかったと思います。

以上、参考になれば幸いです。

2011年10月8日土曜日

[Android] マーケットの「インストール中」の状態が続く

how to solve a problem that Market keeps installing

一部の端末で、Android Marketでインストールしたアプリケーションが「インストール中」のままになり、他のアプリケーションをインストールできなくなることがあります。

設定→アプリケーション→アプリケーションの管理→マーケット(Androidマーケットのアイコン)
から
キャッシュを消去 と アップデートのアンインストール
を実行すると改善することがあります。

「アプリケーションの管理」に「マーケット」が表示されない場合は
「設定」→「アプリケーション」→「アプリケーションの管理」
を開いて
メニューボタン(XPERIAなら画面左下の田ボタン)を押して
「フィルタ」→「すべて」
で表示されます。

この不具合は、2010年11月頃にマーケットがバージョンアップされてからよく聞くようになりました。
もし同様の症状が出たらお試しください。

以上、参考になれば幸いです。

2011年10月1日土曜日

[Android] バッテリー節約術

How to save battery power

今までの開発経験から、Androidスマートフォンの機能ごとにバッテリーの節約方法について考えてみました。
ステータスバーの画像です。少しのアイコンしか表示されていなくてもAndroid端末は多くの処理を実行しています。

3G(データ通信)
オフにするとメールやテザリングなどのデータ通信ができなくなります。
すごく不便ですが、バッテリーのみならずパケット代も節約できます。
※オフにした場合、SPモードメールやCメールは新着通知だけ受信できます。メールの送受信はできません。
[設定] - [無線とネットワーク] - [モバイルネットワーク] - [データ通信] で設定できます。
詳細はこちら

Wi-Fi
オフにするとWi-Fiスポットに反応しなくなるのでバッテリー消費を少しだけ節約できます。
外出が多く3Gだけを使いWi-Fiルーターに接続することがなければオフにしてもいいと思います。
[設定] - [無線とネットワーク] - [Wi-Fi] で設定できます。

GPU
GPUはバッテリーを激しく消費するのですがユーザーは設定できません。
OpenGLを使うアプリケーション(ゲームに多いようです)はGPUをフルに使います。
アプリケーション実行中に本体が発熱するようならGPUが使われています。
ドコモ LYNX3D(Android2.1)はOpenGLアプリを終了した後もバッテリーが減り続けるという奇病があるので、アプリ終了後は本体の電源を入れ直してます。
(au IS01にはこの奇病はありません。同じメーカーなのに不思議です)

GPS
設定をオンに設定するだけならバッテリー消費に影響はないようです。
オフに設定するとGPSを使用するアプリケーション(Latitude、彼ログなど)が使えなくなります。
[設定] - [現在地情報とセキュリティ] - [GPS機能を使用] で設定できます。

ライブ壁紙
Androidの目玉機能ですが、バッテリー消費への影響が大きいです。
オフにしてしまうと不便になるので一番の悩みどころだと思います。

ウィジットアプリケーション
すべてのウィジットがバッテリーを激しく消費させるわけではありませんが、画面に常駐して何らかの処理をしているので、少なからずバッテリーに影響を与えます。
使っていないウィジットは画面から消すとバッテリーに優しくなります。

サービスアプリケーション
サービスはバックグラウンドで動作しています。
画面表示がないので次の画面操作で動作中のサービスの確認や停止ができます。
[設定] - [アプリケーションの管理] - [実行中のサービス]
ただし、プリインストールのサービスアプリケーションは停止できないことが多いです。


結論
バッテリーを長持ちさせると使い勝手が悪くなるジレンマに陥ります。
スマートに使おうとすると充電器が手放せません。
以上、参考になれば幸いです。

2011年9月24日土曜日

[Windows] Subversionをインストールしたら起動が遅くなった

CollabNet Subversion EdgeをインストールしたらWindows7の起動が遅くなりました。
イベントビューアーを見ると同じエラーが何度も出てます。
CollabNet Subversionのバージョン2.0から添付されるようになった Subversion Edge の起動に時間がかかっているようです。
30000ミリ秒以内に起動しない以外は問題なく動作しているのですが、負荷の原因になっているようです。

設定を変更するため
コントロールパネル - システムとセキュリティー - 管理ツール - サービス
を開きます。
「CollabNet Subversion Edge」の名前を探してダブルクリックし、スタートアップの種類を「自動(遅延開始)」に変更します。
同じように「CollabNet Subversion Server」も「自動(遅延開始)」に変更します。

これでエラーはなくなりました。
MtkはSubversion Edgeを使わないのでスタートアップの種類を「手動」にしました。

Windowsは起動と同時にいろいろな処理を開始するので、自動起動のサービスは最小限に設定したいところです。
Windows 7/Vistaはサービスの遅延開始が設定できるので、うまく設定すると起動時の負荷を減らせます。

以上、参考になれば幸いです。

2011年9月17日土曜日

[PlayStation] DUALSHOCKの修理

Repairing a broken DUALSHOCK

プレステ2のコントローラDUALSHOCK2が誤動作するようになってしまいました。
振動すると、触ってないはずの×ボタンとL1ボタンが押されたような動作をします。
コントローラーを本体から抜き差ししても誤動作するので分解してみました。
ボタンや配線やハンダに異常はなさそうです。
ただし、赤丸で囲んだモーターのスポンジが劣化しています。
おそらくモーターに遊びができてしまい、回転した瞬間に基板に干渉していると思われます。

ホームセンターやカー用品店で売られている「制振テープ」とか「隙間テープ」を用意して修復します。上の画像のコントローラーの下に写っているものがそれです。
モーターに張られていたスポンジの厚さは1mmほどでした。今回用意できたのはそれよりちょっと厚めですが問題ありませんでした。
エーモン 防音テープ 3mm厚

エーモン 防音テープ 3mm厚
950円
(税込、送料別)

ホルツ防振、防音テープ 5mm厚

ホルツ防振、防音テープ 5mm厚480円
(税込、送料別)

古いスポンジは強力な両面テープで貼られているので根気よくはがします。
はがした後に新しいスポンジを貼り付けます。
後は元通りに組み立てます。

これで誤動作しなくなりました。

以上、参考になれば幸いです。

2011年9月10日土曜日

[Android-NDK] ERROR [binderDied] end

How to solve "[binderDied] end" error

アプリを開発していたら、突然こんなエラーが起こりました。
ERROR/CameraService(1215): [binderDied] end

Android-NDKのログにはこんなエラーが出てます。
DEBUG/ndk(2474): [ 08-27 20:12:59.451 2474:0x9aa F//system/bin/app_process ]
DEBUG/ndk(2474): stack corruption detected: aborted

原因はJNI(Android-NDK)のchar配列の要素不足でした。

エラーになったコードの抜粋
sprintf関数の引数xとyとzがdouble型だったため、文字列に変換すると予想以上に長くなり、50バイトを超えてしまいました。
char c[50];を
char c[100];に変更したら正常に動きました。

LogCatに「CameraService」とあるし実際に android.hardware.Camera を使うアプリだったのですが、カメラは全く関係ありませんでした。
エラー内容と関係ないログが出力されたので、少し手間取りました。

ちなみにVisual C++ 2010 ではどんなエラーメッセージが出るのかと思い、同じバグを再現したところ
Run-Time Check Failure #2 - Stack around the variable '変数名' was corrupted.
バッファー オーバーランが *****.exe で発生し、プログラムの内部状態を破損しました。[中断] をクリックしてプログラムをデバッグするか、または [続行] をクリックしてプログラムを終了してください。
と表示されました。

「[binderDied] end」というメッセージはわかりにくいですが、「stack」と「corruption / corrupted」というキーワードを見たら、スタック領域の破損∋配列の要素不足の疑いがありそうです。

以上、参考になれば幸いです。

2011年9月3日土曜日

[GPS] 経度1度の距離の求め方

How to get distance of 1degree longitude

blog.fujiu.jp  経度1度の距離の求め方
緯度(北緯)1度あたりの距離はおよそ111kmですが、経度(東経)1度あたりの距離は緯度によって大きく変わります。
経度1度の距離は赤道に近づくほど大きく、遠ざかるほど小さくなります。
GPSセンサーを使ったアプリケーションで距離を測る時に困ってしまいます。

経度1度のおおよその距離(km)は次の式で求められます。

経度1度の距離(km) = cos(緯度×0.017453293) × 111.3194908
※0.017453293=2×π÷360(角度からラジアンを求める係数)
※111.3194908=6378.137×2×π÷360(地球を半径6378.137kmの球として断面の円周を求める係数)

cos関数の括弧の中は緯度(北緯)のラジアンです。経度(東経)ではないのでご注意ください。緯度と経度を間違えると正しく計算できません。

この計算は地球を真円としてしますが、実際の地球は楕円です。
計算結果がどれくらい誤差があるのか、国土地理院の距離と方位角の計算と比較してみます。

緯度(北緯) 計算値(km) 国土地理院(km) 大まかな位置
20 104.60610 104.64693 沖ノ鳥島
26 100.05330 100.11747 尖閣諸島
33 93.36038 93.45286 四国、九州
36 90.05936 90.16329 関東、近畿、竹島(島根県)
40 85.27568 85.39341 東北
44 80.07654 80.20570 北海道

案の定、赤道から遠ざかるほど誤差が大きくなってます。北緯44度の地点で誤差0.16%です。
とは言え、三角関数1個の計算で距離が求まるので、スマートフォン用アプリケーションには十分だと思います。 (※1)
実際に使ってみると計算誤差よりセンサーの誤差のほうが大きいくらいです。


distance(km) of 1degree longitude = cos(latitude_degrees * 0.017453293) * 111.3194908

計算にはMicrosoft Excel 2010を使いました。

(※1) 2010年当時、スマートフォンが今のものよりスペックが低くバッテリー容量が少なかった頃の考えです (2016年4月追記)


以上、参考になれば幸いです。