正常に終了する。

さて、アプリの第一歩は終了から。
iOSでもandroidでも、私が気になるのはアプリの終了です。
終了したつもりでも、バックグラウンドで動作していて思わぬバッテリ負荷になることがある。
いくつかのandroidアプリを見てみると、次の作法がいいのかな?
1. メニューキーで「終了」を選択
2. マルチタスク画面でタスクを終了
ちなみにナビゲーションバーにメニューキーが表示されるアプリもあるけど、
これはandroid 2.x系の古いデザインのようですね。
参考:
メニューの表示(onCreateOptionsMenu())
上の例が一番シンプルな実装なようなのでマネてみた。
数行でメニューができますね。
例えば、次のように追加すればアプリが終了できました。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case Menu1:
    return true;
case Menu2:
    finish();
    return true;
 default:
     return false;
 }
}
スクリーンショット(エミュレータ):

なお、開発環境はDebian 7からUbuntu Gnome 14.04に変わってますが、
そのあたりのことは後日まとめて。

androidアプリ開発の続き

まる2月ほど停滞していましたが、再開します。
android実機を触り始めて一ヶ月、
実際にアプリを使いはじめると、iPhoneとは文化が違うようです。
iPhoneアプリに比べて、悪く言えば一貫性がない、
よく言えば多種多様な感じです。
Googleのコントロールが甘いというより、
製作者のポリシーが現れるということなのでしょうね。
ということで、具体的に色々調べるとっかかりから。
まずは「android 画面の名称」
参考:
【Xperia Aの基本機能】ホーム画面や通知領域など主要部分の名称と働きを把握しよう
とりあえず、次のものを最低限知っておく必要があるかな?
・ナビゲーションバー/ソフトキー
・ホームキー/ホーム画面
・ドロワー/アプリ一覧
・メニューキー
・ステータスバー/通知領域
ハードウェアキーの有り無し、など機種依存部分が多いですが、
そこらへんはおいおい。

車の音楽環境

これまで三菱アイではiPod/iPhone4Sで音楽を聴いていました。
Nexus5に換えて、ビルト イン スロットを改修し始めたのが4月の頭でしたが、
そのパーツが予想を大幅に越えてまだ手元に届かない…
なお、KENWOOD KOS-A300対応の謹製Android アプリがありました。
KENWOOD Music Control @Goolge play
対応機種 KOS-A300があります!
というわけで、あとは工作だけすれば完了なのですが。
とりあえず、それまでの措置として、よく聴くplaylistをCD-Rに焼きました。

テスト


スマホをiPhone4S → Nexus5に変えたので、
写メをサイト上にアップするスクリプトの変更のテスト。
画像のタテヨコ回転、GPS情報などのEXIFを削除してます。
2年に一度くらいなので、シェル スクリプトの微修正(小一時間)で済ませていますが、
一度きちんとスクリプトを書いておいた方がいいのかな?
10年以上使ってるけども。

Androidアプリの開発環境を作る 続き

前回:Androidアプリの開発環境を作る
とりあえず開発環境をインストールしただけだったので、実際に動かしてみる。
以前に仕事でFlex Builderを使っていたので、eclipseのおおよそは解っているつもり (w
デフォルトで「自動的にビルド」にチェックが入っているのでソースをイジってバグを入れると、ちゃんとエラーが出る。
ビルドはOkなようだ。
次にAVD(エミュレータ)を動かす。
前回にAndroid仮想デバイス・マネージャーを開き、新規のデバイスを作って、エミュレータの起動までは確認済み。
しかし、起動しても画面はブラックアウトのまま…
ざっとググってみると必要なパッケージが不足している、というのがFAQらしい。
Android SDK Managerを開いてみると、必要なパッケージが全てインストールされているわけではないらしい。
最低限必要そうな次にチェックしてインストール。
Tools > Android SDK Tools
Tools > Android SDK Platform-tools 19.0.1
Tools > Android SDK Build-tools 19.0.2
Tools > Android SDK Build-tools 19.0.1
Tools > Android SDK Build-tools 19
Android 4.4.2 (API 19) 以下
再びAVDを起動すると、ブラックアウトからANDROIDのロゴが表れ、しばらくして例のAndroidの画面が出てきた。
軽く触ってみた限りでは、正常に動いているようだ。

Monodevelopでは問題ないけど、eclipseを使うには画面が狭いなぁ (w
なんとかしないと。

KENWOOD KOS-A300 with Android

iPhone4SからAndroidに機種変更すると、一つだけ困ったことが。
車で使っているコントローラKENWOOD KOS-A300の使い心地です。
改めてKOS-A300の仕様をみてみると、USBメモリのファイルを再生できます。
TOP > Audio File > オーディオファイルのスペック
つまり、次の方法でKOS-A300を利用できる。
 A. USBメモリに曲を入れて車に常駐させておく
 B. AndroidをUSBメモリとして接続
ロング ドライブの場合には運転中にAndroidの充電をしておきたいので、
可能ならばBの選択肢が私的には望ましい。
次にあるように、AndroidをUSBメモリとして認識させることが可能なようです。
[ Nexus 5 ] 内部ストレージをPCの外部メモリとして使用する方法 @EMOBILE
操作性はiPhoneに比べ劣りますが、AndroidでもKOS-A300を使えなくはないみたいですね。
あとはビルト イン スロットの工作かな〜。
車でiPhone 2011.11.11 (金)

Androidアプリの開発環境を作る

長年放置していたログ整形アプリも整理したので、次に進む。
iPhone4Sの電源ボタンがヘタレてクリック感がなくなったので、
次はNexus5でAndroidにしようかと考えている。
アプリを作って遊んでみたいので、その準備をはじめよう。
というわけで、Androidアプリの開発環境を構築〜。
マシン: lenovo ThinkPad Edge e135 (AMD E2-1800, 64bit)
環境: Debian 7.4
次を参考に環境を作ります。
参考:
LinuxでAndroid開発環境構築@Yahoo!知恵袋
http://note.chiebukuro.yahoo.co.jp/detail/n173086
少し違った点もあったので、以下簡単にメモ。
・AMD-Vに対応しているかチェック
$ grep –color svm /proc/cpuinfo
flags : fpu vme de … svm … lbrv svm_lock nrip_save pausefilter
flags : fpu vme de … svm … lbrv svm_lock nrip_save pausefilter
Ok, 問題ないようだ。
・Android SDKをダウンロード
adt-bundle-linux-x86_64-20131030.zip
・Pleiades最新版を次からダウンロード
http://mergedoc.sourceforge.jp/
・インストール
$ sudo apt-get install openjdk-7-jdk
$ sudo apt-get install ia32-libs
$ sudo apt-get install qemu-kvm libvirt-bin
$ sudo adduser miyajima kvm
・ADTは/optに展開
とりあえず、eclipseを起動すると日本語化されている。
デフォルトのサンプルでビルドは異常ない様子。
エミュレータAVDも動いているかな?
今日はここまで。

ざるそばコードのできるまで

前回 コーディングの無くて七癖 からの続き
Michiは、趣味で始めてプロトタイプからの延長そのままに拡張していたので、
コードがごちゃごちゃになってました。
クラスの区分けは割とちゃんできていたと思います。
しかし、クラス内での処理が、我ながら解りにくくなっていた。
リファクタリングすると、変数の数がずいぶん少なくなりました。
改めて気づいたこと、それは、
3. (変数の)スコープの重要性
オブジェクト指向の肝は、同時に扱う部分を最小化してシンプルに考えること。
それをクラス内で考えると、
一連の処理の流れでも変数のスコープを意識して、それを最小にすると良い。
このことは、これまで(仕事でも)あまり意識していなかったので、ちゃんと考えよう。

コーディングの無くて七癖

久しぶりに比較的濃いコーディングをしてみて、自分のスタイル(?)には色々と癖があることに気がつきました。
主に自分の今後のためにメモしておきます。
1. enumをあまり使わない
私が初めて触ったモダンな言語Javaには、当時enumが実装されていませんでした。
その後仕事でC++を使い始めenumを知り、なるほど便利だと思いました。
無くてはならないものではないので忘れがちです。
しかし、コーディング前の設計段階では、enumの使いどころを考えるべきですね。
構造を明示的に意識できるように。
2. 構造体をあまり使わない
Javaではむしろclassを使うので、そちらの流儀になれているせいかも。
classだと初期値の設定なども自由度が高いので、その方が個人的につかいやすい。
構造体のバイトアライメント など、思わぬところで引っかかることもあるので注意が必要だなぁ。
私は特に高級言語が好きで、メモリの取得・開放などハードウェア依存なことはできる限りタッチしたくないので、ここらへんが鬼門かも。
まだまだ癖がありそうだけど、今日はここまで。

DVDをリッピング

※ 本記事では私的な利用のためにDVDをリッピングしておりますが、
2012年10月1日の著作権変更で、法に触れる可能性があります。
1枚だけregion code 2のDVDがあり、これのみPCで再生しております。
また、唯一のPALなので、いっそのことリッピングしてmini DLNAに乗せて汎用プレイヤーで見られるようにしておこう。
以前やったときとは色々と状況が異なっていたので簡単にメモしておきます。
なお、環境は:Debian Wheezy 7.3 (AMD64)
$ sudo aptitude install dvdbackup
$ mkdir dvd
$ dvdbackup -M -i /dev/dvd -o ./dvd
なお、libdvdcss2 はdebianのリポジトリnon-freeからも消えたので、
入手は次を参考に。
 https://wiki.debian.org/CDDVD#DVD
mp4への変換は、
$ ffmpeg -i hoge.VOB -vcodec libx264 -strict experimental hoge.mp4