2015年2月9日月曜日

GAE/Go の GuestBook チュートリアルの Greeting データをダウンロードする

1. Remote API を有効にする
https://cloud.google.com/appengine/docs/go/tools/remoteapi

2. bulkloader.yaml のひな形を作る
$ appcfg.py create_bulkloader_config --filename=bulkloader.yaml --url=http://localhost:8080/_ah/remote_api --application=dev~APPLICATION_ID .

3. bulkloader.yaml を編集する
  • connector と connector_options を埋める
  • property_map を編集する
    • external_name が CSV のカラムと一致しているか確認する
    • __key__ が適切かチェックする。値は import 時は key name に、export 時は Key オブジェクトになる
    • import 時に Key を自動生成し、export 時に省略したいなら、__key__ property を property map から削除する
  • model クラスのモジュールがあるときは、python_preamble: に追加し、kind property を model: クラス に変更する
python_preamble: - import: base64 - import: re - import: google.appengine.ext.bulkload.transform - import: google.appengine.ext.bulkload.bulkloader_wizard - import: google.appengine.ext.db - import: google.appengine.api.datastore - import: google.appengine.api.users transformers: - kind: Greeting connector: csv connector_options: encoding: utf-8 columns: from_header property_map: - property: Author external_name: Author import_transform: transform.none_if_empty(unicode) - property: Content external_name: Content import_transform: transform.none_if_empty(unicode) - property: Date external_name: Date import_transform: transform.import_date_time('%Y/%m/%d %H:%M:%S') export_transform: transform.export_date_time('%Y/%m/%d %H:%M:%S') transform.import_date_time() と transform.export_date_time() の文字列はstrptime用のフォーマット文字列
参考: Where are the reference pages of the Google App Engine bulkloader transform?


4 ダウンロードする
$ appcfg.py download_data --config_file=bulkloader.yaml --url=http://localhost:8080/_ah/remote_api --filename=download.csv --kind=Greeting

$ cat download.csv Content,Date,Author "A,B,C",2015/02/09 03:36:21,test@example.com fuga,2015/02/09 02:07:57,test@example.com はろーわーるど,2015/02/09 03:21:49,test@example.com hoge,2015/02/09 02:07:54,test@example.com Hello World,2015/02/09 03:21:44,test@example.com what's up,2015/02/09 03:36:01,test@example.com スペースや日本語があっても"がつかないが、データにカンマ(,)があると"がつくようだ。

毎回メールアドレスが聞かれるのがめんどいときは --email=EMAIL をつけるとよい


2015年1月13日火曜日

AppCompat v7 で tint 処理しているクラスとか

メモ

Android 5.0 で EditText の normal 時の色を独自に変える

以前のエントリ「Android 5.0 でのカラーカスタマイズと属性名の関係」で書いたように、EditText の normal 時の線の色は colorControlNormal になります。

colorControlNormal にはデフォルトでは textColorSecondary が指定されており、Theme.Material では @color/secondary_text_material_dark、Theme.Material.Light では @color/secondary_text_material_light になります。
これらの normal 時の色は最終的に以下になります。 #b3ffffff #8a000000 つまり、Theme.Material.Light では線の色は #8a000000 です。

実際にこの色の EditText を配置してみると、Material Design の Components > Text fields で例としてあげられている画像の色より、かなり濃いことがわかります。

colorControlNormal に薄いグレーを指定すれば、EditText の normal 時の色を変えられますが、この属性はさまざまなところで使われており、例えば CheckBox の normal 時の色も薄くなってしまいます。

colorControlNormal ではなく独自に色を指定したい場合、残念ながら用意されている属性値ではできません。 EditText の背景を独自のリソースに変える必要があります。

EditText の 5.0 でのデフォルト背景は次のようになっています。

android:drawable/edit_text_material.xml <inset xmlns:android="http://schemas.android.com/apk/res/android" android:inset="@dimen/control_inset_material"> <ripple android:color="?attr/colorControlActivated"> <item> <selector> <item android:state_enabled="false"> <nine-patch android:src="@drawable/textfield_default_mtrl_alpha" android:tint="?attr/colorControlNormal" android:alpha="?attr/disabledAlpha" /> </item> <item> <nine-patch android:src="@drawable/textfield_default_mtrl_alpha" android:tint="?attr/colorControlNormal" /> </item> </selector> </item> <item android:id="@+id/mask" android:drawable="@drawable/textfield_activated_mtrl_alpha" /> </ripple> </inset>

これを参考に、AppCompat の画像リソースを利用して次のようにします。

drawable-v21/my_edit_text_material.xml <?xml version="1.0" encoding="utf-8"?> <inset xmlns:android="http://schemas.android.com/apk/res/android" android:inset="@dimen/control_inset_material"> <ripple android:color="?attr/colorControlActivated"> <item> <selector> <item android:state_enabled="false"> <nine-patch android:src="@drawable/abc_textfield_default_mtrl_alpha" android:tint="?attr/colorEditTextNormal" android:alpha="?android:attr/disabledAlpha" /> </item> <item> <nine-patch android:src="@drawable/abc_textfield_default_mtrl_alpha" android:tint="?attr/colorEditTextNormal" /> </item> </selector> </item> <item android:id="@android:id/mask" android:drawable="@drawable/abc_textfield_activated_mtrl_alpha" /> </ripple> </inset> ここでは、?attr/colorControlNormal の代わりに ?attr/colorEditTextNormal を指定しています。

values/attr.xml <?xml version="1.0" encoding="utf-8"?> <resources> <attr name="colorEditTextNormal" format="color|reference" /> </resources> values-v21/styles.xml <?xml version="1.0" encoding="utf-8"?> <resources> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="editTextBackground">@drawable/my_edit_text_material</item> <item name="colorEditTextNormal">#1f000000</item> </style> </resources> Material Design の Resources > Sticker sheets & icons で配布されている stickersheet_general.ai では、EditText の色は divider と同じ #000000 の alpha 12% でした。