読書会(プログラミングAndroid)第7回議事録

[ 戻る ]


=====================================================
Java読書会BOF 「プログラミングAndroid」を読む会 第7回
=====================================================

.. csv-table:: 開催概要

  "日時", "2013年1月26日 10:00 - 17:00"
  "場所", "川崎市産業振興会館 第2会議室"
  "出席者(敬称略)", "吉本、岩室、門脇、遠藤、高久、中島、松永、高橋(智)、高橋(徹)、今井(書記)"

議事
====

13.10.3 ネットワーク対応のクエリメソッド
----------------------------------------
(p.354 **UriRequestTask** 〜)

- p.358 コード中ほどの、 ``Log.d()`` のdはdebugの意味、
 infoのiなど他のものも提供されている。

- p.359 コード初めのwhileの閉 ``}`` は、p.362の下から5行目の ``}`` !

- p.359 コード while内最初の方の、
 ``if (eventType == XmlPullParser.END_DOCUMENT)`` は、
 whileの条件として書かれているので、これがtrueになることは無いはず→不要。

 - すべてのeventTypeを列挙したかったのではないか。

 - switch case で書くほうがわかりやすい。

- p.359 コード中ほど、 ``(MEDIA + ":" + CONTENT).equals(startName)`` は、
 意味的には ``startName.equals(MEDIA + ":" + CONTENT)`` にしたいなぁ。

 - 比較演算子の時は許せないが、定数文字列.equals()はきにくわないが
  許容範囲かな。最適化される可能性があるので。

 - こう書く人の理由は大抵、 ``startName`` のnullチェックが面倒だからだと思う。
  でもここでは外側ifでチェックしている。

- p.359 下のifの条件内 ``(YT + ":" + FORMAT).equals(MOBILE_FORMAT)`` は
 真になることない。

 → isMobileFormatがtrueになることはない。

 → p.360上方の ``mediaEntry.put()`` が実行されることはない。何だこのコード?

 - 本当は、attrNameがYT + ":" + FORMAT、かつ、attrValueがMOBILE_FORMAT を
  表したかったのではないか。

- p.361 コード5行目の、 ``idEntry`` はどこで参照されている? → p.362 中ほどのif

13.10.4 挿入とレスポンスハンドラ
--------------------------------

- p.364 コード2行目 ``insert()`` の第二引数の ``initialValues`` は間違いで、
 その上(前頁)でセットした ``valuse`` ではないか。

- p.364 コード中ほどの ``rowID`` とifないの ``rowId`` 、大文字小文字だけで
 区別しているのが気持ち悪い。
 そもそも、表現しようとしているものが違う。


13.10.5 ファイル管理:サムネールの保存
-------------------------------------

- p.366 FileHandlerFactoryクラスの2行目、 ``mCacheDir`` 等、の ``m`` は何の意味?

 - member。Microsoft系のコードでよく見かける。

- p.366 ``mCacheDir + "/" + ID`` 文字列を組み立てるのに、直接書いているところと
 p.367で定義している ``getFileName(String)`` を使っているところがあって統一が
 とれていないし、修正漏れしやすい。

第4部 高度なトピック
--------------------

14章 マルチメディア
-------------------

14.1 オーディオとビデオ
-----------------------

14.2 オーディオとビデオの再生
-----------------------------

14.2.1 オーディオの再生
-----------------------

- p.374 上方のコード、
 ``// Uri mediaReference = "http://someUriToaMediaFile.mp3";`` は、
 コメントでなければこのような書き方はできるのか?

 - ダメ。(コメントの意味としては理解できるが。)

- p.375 ``audio`` 配列が ``short`` 型なのは、量子化が16ビットの
 エンコードディングを使っているから。

- p.375 AudioTrack()のパラメータ ``audio.length`` は、その下の説明文中には
 「バイト数でのオーディオの長さ」 とあるが、 ``audio`` はshort配列なので、
 ``audio.length`` では「バイト数でのオーディオの長さ」にはならない(半分の長さ)。

 - このパラメータの本当の意味は、塊として扱うバッファの長さらしい。
  本文の説明が間違い。

14.2.2 ビデオの再生
-------------------

- p.376 コードの下から4行目、seekToのパラメータで、 ``/2`` をしているのはなぜ?

 - 本文で「スキップできる」とあるので、単にその例で全体の半分まで
  シークする例が書いてあるだけだろう。

14.3 オーディオの録音とビデオの録画
-----------------------------------

14.3.1 オーディオの録音
-----------------------

- p.381 コード4行目、 ``startAcrivityForResult()`` の第二引数 ``1`` って何?

 - resultCode、onActivityResultでどのstartActivityForResult()の結果かを
  識別する。自分が区別できれば良いので、自分の都合が良い値でよい。

 - 何故コールバック関数にしないのだろう? resultCodeを管理しなければ
  ならなくなるのでめんどうだと思うのだが。

  - この方が資源を使わないから?

  - Activityのライフサイクルとして、呼び出した側がコールバックされるまで、
   メモリ上にそのままあるとは限らないから。

- p.382 1行目、「(モノラルかカメラ)」は、「(モノラルかステレオ)」の間違い。

14.3.2 ビデオの録画
-------------------

- p.383 コードの ``AudioEncoder.DEFAULT`` , ``VideoEncode.DEFAULT`` と、
 出力ファイル名の拡張子 ``.mp4`` に関して、これらの ``DEFAULT`` エンコーダは
 ``.mp4`` で保存できることはプログラマの知識としてあるのか?

 エンコーダも拡張子もどちらも、 ``DEFAULT`` として外だしするとか、
 デフォルトでなくどちらも具体的な値にするとかしたい。

 - ``.mp4`` 自体は、いろいろなエンコーディングでいれることができる。

14.4 メディアコンテンツの使用
-----------------------------

15章 位置とマップ
-----------------

15.1 位置にもとづくサービス
---------------------------

15.2 マップ
-----------

15.3 Google Mapsアクティビティ
------------------------------

- p.387 uriパラメータのスキームの3つ目、
 ``geo:0,0?q my_street_address`` は、 ``geo:0,0?q=my_street_address`` の間違い。
 4つ目も同様。

 - 一つ目、二つ目の ``latitude, longitude`` のスペースはあってもいいのだろうか。
  普通は書かないけど。


15.4 MapViewとMapActivity
-------------------------

15.5 MapViewの使用
------------------

15.6 MapViewとMyLocationOverlayの初期化
---------------------------------------

- p.392 囲みの4行目、「地球の赤道が256ピクセル幅で」の意味は? 実際の赤道に
 幅が何センチとかはないよね。

 - 赤道一周を広げた長さのこと。メルカトル図法で書かれた世界地図の幅。

15.7 MapActivityの一時停止と再開
--------------------------------

15.8 メニューボタンによるマップの制御
-------------------------------------

15.9 キーパッドを使ったマップの制御
-----------------------------------

- p.396 キーパッドとは?

 - ハードキーの事

15.10 MapViewを使わないで位置を取得する
---------------------------------------

15.10.1 マニフェストとレイアウトファイル
----------------------------------------

15.10.2 位置プロバイダへの接続と位置の更新の取得
------------------------------------------------

- p.401 ``requestLocationUpdates()`` のパラメータ、 ``minTime`` と ``minDistance`` は、
 or, and どちらで働くのか。or の方が意味がありそうだけど。

15.10.3 位置の更新のエミュレート
--------------------------------

- p.402 下方、longitudeとlatitudeの説明が逆

 - longitudeは経度

 - latitudeは緯度

- p.403 このツール(DDMS)にKMLでデータを与えた場合、各データが送られる間隔は?

 - 一気に送られてくる。

 - ちなみに、KMLにはタイムスタンプを含めることもできるが、
  それが使用されるかは不明。
  使用されたとしても、開始からの経過時間ではなく絶対的な時刻なので
  使いにくいだろう。

16章 センサー、NFC、スピーチ、ジェスチャ、アクセシビリティ
----------------------------------------------------------

16.1 センサー
-------------

- p.408 定数名 ``SENSOR_DELAY_`` *foo* が意味する値は、
 遅延ではなく比率(の逆数の間隔)。
 定数名に ``DELAY`` とある以外、定数の説明や引数の説明にはrateが使われている。

 - ``registerListener()`` のコード上では、これらの定数値が渡されたときはどこか
  別に定義されている間隔ミリ秒を、
  それ以外の値は、このパラメータで渡された値がそのままミリ秒として
  使われていたような気がする。

16.1.1 位置と姿勢
-----------------

- p.409 訳注、ローパスフィルタとしてはセンサーの出した値が低いか高いかを
 そのまま使うのではだめで、その値の出現頻度が低いか高いかとか、
 前値との差分が小さいか大きいかなど、なんらかの計算をしないとダメ。

16.1.2 そのほかのセンサー
-------------------------

16.2 Near Field Communication (NFC、近距離無線通信規格)
-------------------------------------------------------

- p.412 カードエミュレータの説明がおかしい

 「接触を必要としないカードがデバイスになります」
 →「デバイスが接触を必要としないカードになります」

16.2.1 タグの読み取り
---------------------

- p.414 中ほど、 ``getDefaultAdapter(context)`` を呼び出すのはAPIレベル10だけ?

 - それ以降のAPIにもcontextを引数に持つものもあるから、APIレベル10以降だろう。


(p.414 下のコードの前で終了)

.. note::
 - コードのインデントがおかしいところは、あげていたらきりが無いので省略した。
 - 次回は、p.414 下のコードから。


[ 戻る ]