2012_05_15続々IPv6
WebアプリをIPv6対応
DNSやApacheはIPv6の設定を完了させましたが、自作アクセス解析プログラムがIPv4のみの対応となっていたため、IPv6にも対応するようにしました。
アクセス件数の算出にセッションなどを使わず、IPベースで行っていますが、MySQLに格納するIPをINT型の数値で入れていたので、ALTER TABLEにて、VARCHAR(16)に変更しました。
ALTER TABLE access_data CHANGE COLUMN ip_addr ip_addr VARCHAR(16) NOT NULL;
次に、phpのアプリケーションで、IPアドレスを含むデータをSELECT・INSERTするクエリを以下のようにINET6_ATON INET6_NTOAを使い、対応しました。 これで、IPv4 IPv6共に同じカラムに格納できます。
SELECT id, INET6_NTOA(ip_addr) FROM access_data WHERE ip_addr = INET6_ATON("::1");
INSERT INTO access_data(ip_addr) VALUES (INET6_ATON("127.0.0.1"));
これで無事に動くと思いきや、IPアドレスの検索をする際に、指定外のデータが取得できてしまう問題が発生しました。 調査したところ、IPアドレスを格納しているカラム(上記だとip_addr)に、バイナリデータ化されたIPアドレスではなく、以前書き込んでいたint型化されているIPv4アドレスが格納されていたためでした。 今回は全てNULLでUPDATEして解決しましたが、以下のようなUPDATE文を実行するのが良さそうです。(結果が0になってしまうと問題が発生します)
UPDATE access_data SET ip_addr=INET6_ATON(INET_NTOA(ip_addr));
なお、INET6_ATON INET6_NTOAを利用するには、MySQL5.6.3以上のバージョンでなければなりません。
この対応を1週間くらい前に行いましたが、15人に1人はIPv6でアクセスしており、思ったより多いと感じました。
MySQLを5.6系にバージョンアップ
FreeBSDのパッケージ管理システムportでは、MySQLの最新版が5.5系となっています。(2012/05/15現在) 今回は5.6系が必要だったため、portで入れたMySQLを削除し、コミュニティ版開発バイナリ(5.6.5)を本家サイトからダウンロードしてインストールしました。 FreeBSD9.0を利用していますが、FreeBSD8.0用バイナリで問題なく動きました。
以下、インストールして使えるまでの適当な流れ
- mysqldumpで既存のデータをダンプしておく。
- portでインストールしたmysqlを削除 ついでに/usr/local/mysqlをmysql_oldに変更
- mysql5.6を/usr/local/下にmysqlとして展開
- scripts/mysql_install_db --user=mysql
- mysql.serviceをmysql-serverという名前で/usr/local/etc/rc.d/にコピー
- service mysql-server start
- ダンプをリストアする
※注意:上記は適当な上、portで一度インストールした場合の手順なので、INSTALL-BINARYを読みましょう。
IPv4 IPv6デュアルスタック対応 WebSocketプロトコルゲームサーバー作成中
RFC6455が日本語訳されていたので、IPv4 IPv6デュアルスタック対応WebSocket通信サーバーをC++で実装してみました。
JSONでのエコーくらいしかできていませんが、World IPv6 Launchまでに、IPv6が有利なネットワークゲームを作れたら面白そうだなぁ。。。
MacOS X LionでのTCPパケットキャプチャ
WebSocketの通信を調べるために、パケットキャプチャをする必要があったので、覚え書き。
# tcpdump -i en1 -Xv 'tcp port 80 and (((ip[2:2]-((ip[0]&0xf)<<2))-((tcp[12]&0xf0)>>2))!=0)'
金環日食&金星の日面通過のためにEXTENDER EF2X IIIを導入
200mmだと不足気味だったので、EXTENDER EF2X IIIを購入しました。これで400mm相当になります。 早速、手持ちで月を撮影してみました。なんとかトリミング無しでも見れる大きさになります。
Canon EOS 5D Mark II + Canon EF70-200mm F2.8L IS II USM + EXTENDER EF2X III (ISO400 F11 1/25 400mm)
06/06には、金星の日面通過もあります。前回は1874/12/09(明治7年)で、次回は2117/12/11(平成129年)になるそうなので、生きている内に見ることができる最後のチャンスです。
観測場所はやはり紅葉坂かなぁ。
ただでさえ長い70-200mmレンズにエクステンダーをかますと、更に長くなります。
給料日までひもじいですが、がんばります……
2012_05_04 当日は誰がなんと言おうと有給休暇
05/21の金環日食撮影場所ロケハン
金環日食当日まであと半月ほどです。 機材が整ったので、撮影場所をどこにするか考えてみました。
金環日食中心食線の詳細な地図を見ると、東京都内では戸越銀座駅・北品川駅がドンピシャのようですが、太陽が昇る東方面にビルが多いので除外。 江東区なら新木場の夢の島公園や、見通し抜群な若洲海浜公園がよさそうですが、こちらも遠いので除外。 芝浦ふ頭(首都高速11号台場線東京港連絡橋[通称レインボーブリッジ])や天王洲アイルもよさそうですが、撮影場所が限られているので何とも言えません。 川崎で考えると新丸子駅(武蔵小杉から一駅)に中心食線が重なっており、新幹線の橋が見える辺りから金環日食が出始めます。 近くに多摩川の河川敷があり、そこに等々力緑地・多摩川グラウンドがあります。 自転車でも行ける距離であり、河川沿いで大きなビルも無く、なにより災害時に避難場所となる広いため、人が沢山居ても問題なさそうです。
早速、自転車でロケハンに行って来ました。 走らせること1時間。等々力緑地に到着すると、三脚を立てて練習している人が数名居ました。 声をかけてみると大体がND100000と400mm以上のレンズを組み合わせてを利用されているようです。
思った通り、広く開けており、絶好のスポットでした。 早速練習のために太陽を撮影してみました。 NDフィルタにより1/100000にまで光を落とすため、ファインダーを覗くのはもちろん、ライブビューでの表示も問題ありませんでした。

f8.0 1/500 200mm (Trim)
当日は日の出の時間(東京 04:32)より少し早い04:00頃に到着して準備をしたいと思います。
晴れれば良いなぁ。




