fchiba memo

カテゴリ: プログラミング

テスト用にDNSに登録されているものとは違うサーバーにHTTP/HTTPSで接続したい場合の方法。ちなみにクライアントだと/etc/hosts使ってやることが多い。

例えば https://www.example.com/ が本来は 192.0.2.1がDNSに登録されているとして、192.0.2.2に向き先を変えたい場合。

リクエスト自体はIPアドレスで
NSMutableURLRequest *request= [NSMutableURLRequest requestWithURL:@"https://192.0.2.2/path"]
として作成し、
[request setValue:@"www.example.com" forHTTPHeaderField:@"Host"];
などとHostだけ上書きしてやればOK。

他のアプリ起動→復帰
destroy→create/change

端末サスペンド→復帰
なにもなし→なにもなし(生きたまま)

invisibleにする→visibleにする
destroy→create/change

Orientation変更(configChanges指定なし)
destroy→create/change

Orientation変更(configChanges指定あり)
changedのみ

Orientation変更中に別ThreadからさらにsetRequestedOrientation呼び出し(詳細条件不明)
予期せぬdestroy発生!

Raspberry Piでエアコンを操作できる赤外線リモコンを作りました。類似の事例はネット上に数多く見つかるのですが、「エアコン以外の機器を操作している」もしくは「Raspberry Pi以外で実現している」ケースしかみつからなかったので、記録に残しておきます。

主に参考にしたのは以下のサイトです。
http://homebrew.jp/show?page=1480
http://www.256byte.com/remocon.htm
http://www.geocities.jp/bokunimowakaru/std-commander.html

最初のサイトは「エアコン以外の機器を操作している」ケースで、この通りにやったところ、実際にテレビや照明などの操作はうまくいきましたので、これを前提に行います。

うちのエアコン(ダイキン製)で試した際に躓いたのは、irrecordで信号を記録させるところです。ちょっと調べた方はすぐにわかると思うのですが、エアコンは送信すべき情報量が多く信号のフォーマットが規格とは若干違うのが原因のようです。

そこで、mode2コマンドで信号のパルス列を調べてみることにしました。mode2の出力は
space 2309756
pulse 465
space 401
pulse 471
space 392
pulse 446
space 438
pulse 451
space 398
pulse 468
space 410
pulse 433
space 25278
pulse 3490
space 1703
pulse 464
space 1264

のような形式です。信号のフォーマットに関しては上記の2番目のサイトがわかりやすかったです。見たところ、点灯している時間がほぼ一定で、消灯している時間に差があるため、NECフォーマットを拡張したもののようです。そこで、こちら https://gist.github.com/fchiba/6204022 のようなプログラムを書いて、でもう少し人間に読みやすいような形式にして、詳しく覗いてみることにしました。


通常のNECフォーマットでは、1つの操作は、

リーダー信号+データ信号+ストップ信号

で成り立ちます。つまり、リモコンで1回ボタンを押してすぐ離すと、これが1回送信されます。しかし、ダイキンのエアコンでは、1回のボタン操作で

1) "bit 0"×6回+ストップ信号
2) リーダー信号+データ信号(64bit)+ストップ信号
3) リーダー信号+データ信号(64bit)+ストップ信号
4) リーダー信号+データ信号(152bit)+ストップ信号

がまとめて送信されます。最初の1)〜3)までは常に一定で、温度や風量などを変更した際には4)の152bitの部分だけが変わるようです。

この152bitのデータ信号の部分を細かく解析していくと、本物のリモコンと同じようなことができそうです。しかし、今回はプリセットでいくつかの定型的な操作さえできればいいので、上記のmode2の結果を編集して、lircd.confにraw形式で貼り付けておしまいにしました(mode2をそのまま再生できる方法があればよかったのですが…)。具体的には https://gist.github.com/fchiba/6204072 の2つ目のremoteセクションのような感じです。

ちなみに、信号の記録の際には、何度か試して正しくパースできるものを選んでいます。ノイズなどがあると、例えばストップ信号が途切れ途切れになったり、bit1が正しく1:3にならず1:2になったりします。こういう場合は、カーテンを閉めテレビなどを消すと、ノイズは減りました。

あと、信号が弱かったため3番目のサイトを参考にコンデンサを挟んでやったところ、実用的な強度で光ってくれるようになりました。

1. 家計簿アプリ
(a) MS Money的な複式簿記ができる。
(b) 家族間で共有可能
(c) PC(Win/Mac)から入力可能
(d) モバイルから入力可能
(e) オンラインから自動でデータ取り込み
(f) 予実績管理などレポート機能
の全部が満たせるものが欲しい。現状はサポートの終了したMS Moneyを騙し騙し利用中だが、(b)と(d)が駄目。
Zaim+OCN家計簿もよさそうだが、(a)〜(c)が望むレベルに達してない。

2. 買い物メモアプリ
(a) 写真or音声で簡単にアイテム追加
(b) 家族間で共有。追加をPushなどで通知とかあるとなお嬉しい。
(c) PC(Win/Mac)/モバイル両対応
現状はCheckpadを利用中だが、モバイル対応されてないのが難点。
Google Playなどを見ても1人で使う想定のものばっかりで残念な感じ。

アプリケーション管理(デフォルト)
adb shell 'am start -a android.settings.MANAGE_APPLICATIONS_SETTINGS'

アプリケーション管理(すべて&サイズ順)
adb shell 'am start -a android.intent.action.MANAGE_PACKAGE_STORAGE'

アプリケーション管理>詳細
adb shell 'am start -a android.settings.APPLICATION_DETAILS_SETTINGS package:パッケージ名'

パッケージ情報
adb shell 'dumpsys package [パッケージ名]'

メモリ消費量
adb shell 'dumpsys meminfo [パッケージ名]'

このページのトップヘ