Internet of Tairyoku の開発で得られた知見と経験
Mashup Battle 1st Stage in 北陸 で Internet of Tairyoku のプレゼンをしてきました。
実装的な話は質疑でちらっと触れた程度で、プレゼン内でも全然してなかったので、忘れないうちに書いておきます。
知見
制限のあるネットワーク環境で、OSX のインターネット共有が活躍する
コワーキングスペースの WiFi で開発作業していたのですが、iPad の MESH アプリから Mac に立てたサーバにつなぐことができませんでした。おそらく WiFi につないでる機器間のパケットが通らないようになっているのではないかと。
テザリングすればいいんだけど、もっといい方法ないかなーと悩んでいたら、@macoshita が OSX のインターネット共有でなんとかなると教えてくれました。共有する接続経路を Wi-Fi、相手のコンピュータでのポートを Bluetooth PAN にして接続しました。iPad から見た Mac の IP アドレスも変わらない(試している限りでは)ため、設定変更の手間がかからないというおまけつき。
OSX の通信帯域制限は dnctl
mac osx - traffic shaping on OSX 10.10 with pfctl and dnctl - Server Fault を参考に dnctl
や pfctl
といったコマンドを使った帯域制限をしてみました。dummynet を作ったり pfctl を有効にするなどの初期設定をした後は、sudo dnctl pipe 1 config bw 16000byte/s
といった感じで帯域を絞れます。がんばったんですが帯域制限はデモ映えしないのでボツ。
OSX でプロキシ設定の ON/OFF は networksetup コマンド
# 設定する時 sudo networksetup -setautoproxyurl Wi-Fi http://localhost:3000/proxy.pac sudo networksetup -setautoproxystate Wi-Fi on # 解除する時 sudo networksetup -setautoproxystate Wi-Fi off
経験
無線 LAN AP を立ててみた
続・VyOS で作ったルータに 無線 AP 機能を追加してみた - Soukaku's HENA-CHOKO Blog を参考に、VyOS (on VirtualBox) x WLI-UC-GNHP でルータを立てました。スループットがいまいちだったのと、システムの構成が野暮ったくなってきたのとで、ルータを作る案は保留としました。
react と socket.io
いい機会だと思って組み込んでみました。react はこの作品に限って言えばうまみが薄くて途中退場気味、socket.io は筋トレ後のネット復旧時の通知など。
プロキシ構成ファイル proxy.pac を書いた
高専でインターネットつなぐ時に見て以来の proxy.pac
なるファイルを目にするばかりではなく、自分で書く時が来ようとは。書くと言ってもこれぐらいのぬるいもんです。
function FindProxyForURL(url, host) { if (shExpMatch(host, "*.yahoo.co.jp")) { return "PROXY localhost:3010"; } if (shExpMatch(host, "*.com")) { return "PROXY localhost:3010"; } return "DIRECT"; }
参考にしたサイト:
node-http-proxy パッケージでプロキシサーバを立てた
上で書いたプロキシ設定の接続先を node-http-proxy で立てました。まだあまり使いこなせてないです。具体的に言うと HTTPS 周りが。
デモでは Yahoo! ニュースを適当にポチポチしてると突然プロキシ設定が切り替わってネットが遮断されるという流れでしたが、できれば Twitter とかも遮断したいところ。遮断はできるといえばできるんですが、単にエラー画面になってしまうのがよろしくなくて、改善したいところです。