ADS-B受信にチャレンジ

MH370(9M-MRO)は一体何処へ行ってしまったのでしょうか。一週間たっても何の残骸も見つからないって意味がわからないです。

最近の飛行機は飛行機の位置座標などを随時放送*1する機械が積まれていています。これをみんなで受信してマップにプロットしたのが、flightradar24(通称fr24)です。MH370失踪が最初にネット上で話題になったのもfr24ですし、成田空港が強風で一時クローズすると千葉沖などでぐるぐるする飛行機がいますがそれをfr24で見て実況する人がいたり、知り合いの乗った飛行機が飛んで行くのを見守ったり、使い方は色々あります。


せっかくだから自分でも受信してみたいよね。


ぐぐると、1000円弱で変えるデバイスを使ったソフトウェアラジオで受信ができるらしい。

というわけで、買ってみたのはaitendoの特売品*2。R820Tはこの手のデバイスで割と優秀なようですが、熱くなって中の水晶振動子がドリフト起こして受信周波数がずれたりするらしい*3

届いたので取り敢えずノートマシンに繋いで様子を見ることに。

ドライバのインストール

ドングルをマシンに突き刺すとドライバインストールダイアログが出ますが閉じて、R820TをWinUSBで叩くためにZadigを使います。Zadigを起動してOption→List all Devicesをチェックするとデバイスが見えます。

f:id:W53SA:20140316180957p:plain

モノによっては見えるデバイス名が違うこともあるようです。二つ見えるので2つともにWinUSBをインストール。

受信する

デバイスが見えるようになったので、まずはソフトウェアラジオ+デコーダADSB#を入れる。入れると言ってもzipを拾ってきて適当に展開して起動するだけ。これで、Frames/secsが0でなければ何か受信してます。telnetlocalhost:47806に繋ぐとデコードされたデータが流れてきているはず。

表示する

デコードされたデータ見ても受信できてることしかわからんので、地図上にプロットします。プロットツールはadsbSCOPEVirtual Radar Serverが有名なようです。

adsbSCOPEを使った画像はこんな感じになりました。
f:id:W53SA:20140316181931p:plain

adsbSCOPEは自前で地図を表示しますが、Virtual Radar Serverを使うとGoogleMapに表示するWebサーバとして動くのでブラウザを使って最新の地図上にプロットされた情報を見ることが出来ます。

どちらもADSB#に繋いでデータをもらってくる設定をしなきゃいけないんですが、ちょっと手間取りました。参考文献あたりを参考にしてください。

次回予告

取り敢えずWindowsマシンに繋いで動くことはわかったので、次はこんなところを予定してます。

  • Raspberry PiでADS-Bソフトウェアラジオ/デコーダを動かす
  • アンテナを作る
  • ベランダに設置する算段を考える
  • R820熱くなりすぎるので放熱を考える

追記

Raspberry Piでさっくり動いてしまいました。

端的に言えば、http://git.osmocom.org/rtl-sdrからソフトウェアラジオライブラリをcloneしてbuildし、https://github.com/MalcolmRobb/dump1090からADS-Bデコーダをcloneしてbuildするだけ。デバイスは突き刺すだけで特段ko入れることなく認識されます。詳細は参考URIを見てください。

dump1090のinteractive表示と、dump1090が内部で持ってるWebサーバ経由でGoogle Mapに描いてる様子。もちろん、adsbSCOPEにdump1090を繋いで表示もできます。dump1090のデフォルト待ち受けポートが30002*4ってことぐらい気をつければいいでしょう。
f:id:W53SA:20140316223301j:plain

いやー、これソフトウェア的にはほぼ出来ていて、アンテナとか熱対策とかハード回りが本番ですね。南向きアパートのベランダなので北側が全く見えなくて辛いところ。桂キャンパスとか受信環境良さそう…。

*1:これをADS-Bと呼びます。

*2:記事執筆時点では品切れになっていました…。魔改造用に二個発注しときゃよかったなぁ。

*3:で、TCXOに根性で置換した人がいるとかなかなか遊び甲斐があるデバイス。

*4:dump1090の起動オプションで変更可能。わたしの環境ではWebサーバ用ポート8080が既に使用済みなので、Webサーバ待ち受けポートだけ起動時の引数で変更した。

艦これ専用ブラウザのような何かを作ったよ

前からネタにしていた艦これの専ブラ、そこそこまともなドキュメントをようやく書きました。

f:id:W53SA:20140306020626p:plain
f:id:W53SA:20140306013919j:plain

ドキュメントを真面目に書くのに時間かかりましたね…。ということで、取り敢えず公開してみます。

http://www.3pf.jp/products/kcb から。

配布サイトでも散々書いてますが、専ブラは割とグレーらしいので自己責任で。

一般公開前から身内に配っていて感想とか要望貰って色々弄りました。感謝ですね。

Googleスプレッドシートで.NETアプリケーションのデータを管理する

最近(というほどではないかもしれないけど)は色んなログをオンラインデータストレージに放り込むのが流行ってます。Apacheのログとかを放り込んでごりごり解析するTreasureDataとか有名*1ですね。

さて。

ログと言えば艦これ*2
f:id:W53SA:20140219003119p:plain
専ブラが吐き出す艦船建造などのログが貯まってきたので、これをオンラインデータストレージに放り込んでやりたいなというのが今回のお話。

*1:TDが流行り始めたの、ちょうど一年ぐらい前でしたか。

*2:どうでもいいことですが、Excelutf-8など非Shift_JISで書かれたcsv食わすと文字化けします。

続きを読む

WebBrowserコントロールのIEバージョン

.NETアプリでWebBroserコントロールを貼っつけたらInternet Explorerコンポーネントが貼り付けられます。
ところで、このIEコンポーネント、どんなIEなんでしょうか。

「そんなんマシンに入ってるIEと同じに決まってんやろ」という人は鴨川デルタで磔にされますよ。



f:id:W53SA:20131216203756j:plain

WebBroswerコントロールで動くIEはバージョン7です。

ほんまかいな、という人のためにAcid2テスト*1をしてみましょう。

f:id:W53SA:20131216204027j:plain

見事に失敗してますね。

In order to ensure that these existing applications remain in working order, IE8 renders pages running within instances of the WebBrowser control in IE7 Standards Mode by default.


WebBrowser Control Rendering Modes in IE8 - IEBlog - Site Home - MSDN Blogs

既存のアプリケーションが困らないようにこうしたんだって。

*1:Acid2IE7不合格でIE8は合格してる。

続きを読む

C#でJSONを読み込むメモ

Webアプリケーションでのデータ構造デファクトスタンダードがJSONなので、.NETというかC#でJSONを読みたいことがままあります。

みんな同じようなことを思うので、ライブラリがちゃんとあって、周辺環境も色々と整備されています。

基本的にはぐぐればおよその情報が出てくるので、メモ程度です。

あ、前の記事で艦これのやりとりするJSONデータが取れたんで、それを料理しましょうって話です。

続きを読む

FiddlerCoreを使ってC#でhttp通信を覗き見しよう

突然ですが、HTTP通信を覗くことを考えます。

あ、艦これの専ブラを作った話からの続きです、はい。

要するにHTTPプロキシを作ればいいわけで、C#にはSystem.Net.HttpListenerというHTTPサーバクラスもあったりして自前で実装することもできますが、FiddlerCoreという.NET向けHTTPプロキシライブラリがあるのでこれを使うことにしました。車輪の再発明はやめて、枯れたライブラリをありがたく使わせてもらいましょう*1

FiddlerCoreとは

FiddlerというHTTPアナライザのHTTPプロキシ部分がライブラリFiddlerCoreとして提供されています。

なので、単にHTTPセッションを中継するだけではなく、以下の機能があります。
「HTTPセッションをハンドルし、適当なタイミングでイベントを呼び、HTTPリクエスト/レスポンスを適当に調理したものを渡してくれる。」
完璧じゃないですか。

というわけで、早速使ってみましょう。

*1:自分の書いたコードが一番信用ならんかったりするよね。

続きを読む

艦これの専ブラを作った話

Java書くの疲れて艦これ始めたらしっかりハマってしまいました*1

で、しばらくぽちぽちやってたわけですが、だんだんUIに不満が。

  • 負傷した艦娘を修復所要時間順にソートできない
    • Lvとダメージ程度によって所要時間は変わるのに、ダメージ程度でしかソートできない
  • アイテム*2一覧がない
    • 未使用アイテム一覧しかないので、装備済みアイテムを探すのが面倒
  • 任意のタイミングで任務一覧を見ることが出来ない
  • ドックでの修理が終わっても何の通知もない

というわけで、なんとかするというか自前GUIを書く*3ことにしました。ブラウザゲーなので、専用ブラウザとか呼ぶようです。

こんな感じに出来ました。

ブラウザゲーなので、基本的にクライアント側ではサーバに指令を与えてサーバから降って来たデータを表示することしかしてないはず。サーバから降って来たデータを自分で料理すればいいことになるので、取り敢えずChromeデベロッパーコンソールで流れてるデータを眺めたりぐぐったりして情報収集しました。

結論:「httpプロキシ作って流れてるJSONをwatchすればいい」

要するに

  • サーバとFlashの間でやりとりされてるJSONを取得
  • JSONを処理して適当なGUIで表示

ってなわけで、以上2つについて調べたことを今後書いていきたいきます。

次回予告:「C#でhttp sniffing」→書きました:FiddlerCoreを使ってC#でhttp通信を覗き見しよう


ちなみに、公開しました(6 May 2013)。

*1:試験前に開発力がマシマシするように現実逃避力ってやばいですね。

*2:武装のことです。

*3:ちなみに、WindowsでやってるのでC#で書きました。