スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

移転しました

http://fchiba.blog.jp/ に移転しました。
スポンサーサイト

NSURLConnectionを使って本来のサーバーとは違うサーバーに接続する

テスト用に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。

AndroidのSurfaceViewのSurfaceのライフサイクル

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

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

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

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

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

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

Raspberry Piでエアコンを操作できる赤外線リモコンを作った

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番目のサイトを参考にコンデンサを挟んでやったところ、実用的な強度で光ってくれるようになりました。

spdysharkビルド時の作業メモ

SPDYのパケットを覗きたくて、spdyshark(WiresharkのSPDY plugin)をビルドしたらハマったのでメモ。結果的にはできてない。

配布元の手順はここ。
http://code.google.com/p/spdyshark/wiki/BriefInstallInstructions

$ ./autogen.sh
エラーが起きるので AG_CONFIG_HEADER -> AC_CONFIG_HEADERS に変更する

configureするとライブラリがいろいろ足りないので、brewで追加。

$ brew install gtk
$ brew link --force cairo
$ brew install pixman
$ brew link --force pixman
$ brew install freetype
$ brew link --force freetype
$ brew install fontconfig
$ brew link --force fontconfig
$ brew install libpng
$ brew link --force libpng

抜けあるかも。keg-onlyをlinkしまくってるが副作用は大丈夫か???

$ PKG_CONFIG_PATH=/usr/X11/lib/pkgconfig:$PKG_CONFIG_PATH ./configure --with-ssl

$ make
libdissectors_la-packet-rtmpt.o で固まる

$ CFLAGS=-O0 PKG_CONFIG_PATH=/usr/X11/lib/pkgconfig:$PKG_CONFIG_PATH ./configure --with-ssl

ビルドはできて起動はする。が、SSLのデコード自体ができない。Why?
最新のビルド済み WiresharkだとOK。

ここで一旦断念。
プロフィール

fchiba

Author:fchiba
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。