IPv6Hackathon in 新潟に参加してきました

レポートがおくれてしまいましたが、IPv6Hackathon in 新潟に参加してきました。

IPv6セミナー + Hackathon in 新潟(第26回) - 長岡 開発者 勉強会(NDS)

午前中はセミナー、午後はハッカソンという、ハーフマラソン(ハーフハッカソン)といったおもむきのイベントでしたが、5時間ぶっ通しで参加者のみなさんが集中しまくってて、かなり濃い一日となりました。

私がやったこと

私はIPv6疎通テストbot on twitterを作っていました。内容としては、Twitterで自分宛の "V6HOST:'example.com' は?" のようなつぶやきを受け取ると、DNSのAAAAレコードを引きにいき、失敗したらその旨をtweetし、成功した場合はそのAAAAレコードのIPに向かってHTTPリクエストを飛ばし、200が返ってくればIPv6でアクセスできた旨をtweet、それ以外のレスポンスが返って来たらIPv6でアクセスできなかった旨をtweetするというものです。

私はPerl第一言語なので、Perlで書きました。AnyEventベースで、AnyEvent::Twitter
AnyEvent::Twitter::Stream、AnyEvent::DNS、AnyEvent::HTTPあたりを使いました。

ハマりポイント

AnyEvent::Socketは普通にIPv6対応しているので、そのあたりでハマるということはなかったのですが、AnyEvent::HTTPでちょっとハマった部分がありました。

AnyEvent::HTTPは、http_requestというサブルーチンの中で独自にURIをパースしていますが、このパースの部分が "http://[ipv4 or v6 addr]:port/" という、 "[" "]" でIPアドレスを囲む形に対応しておらず、かつ正規表現でサブルーチン内にベタ書きされていました。これではIPv6アドレス直打ちのURIがパースできません。

で、この問題をどうやって回避しようかなぁとしばらく悩んだのですが、結局時間も足りなかったため、AnyEvent::HTTPを書き換えてパスの通ったところにおいちゃうという暴力的な手段で解決しました。以下がその際のパッチです。

732c732
<    $uauthority =~ /^(?: .*\@ )? ([^\@:]+) (?: : (\d+) )?$/x
---
>    $uauthority =~ /^(?: .*\@ )? ((\[[\d.:]+\])|([^\@:]+)) (?: : (\d+) )?$/x
735a736
>    $uhost =~ s/[\[\]]//g;

そのほかにも実は$cv->recvし忘れてハマったりしたんですけど、それは単純にわたしがアホだったというだけなので詳細は割愛。

Perlの標準モジュールやデファクトスタンダードなモジュールは内部でIO::Socket::INETに依存しているものが多く、IO::Socket::INETはIPv4のみの対応なので、PerlIPv6を扱おうと思ったら結構ハマりどころが多いっぽいのですが、AnyEventは先にも述べたとおりIPv6に対応しているので、AnyEventベースでなんか書く分にはIPv6由来のハマりポイントは少ないな、と感じました。

みなさんがやってたこと

懇親会でお酒飲みすぎて詳細は忘れてる…のですけれど、「やべー、ノープランだわ〜」みたいなことをTwitterなどで言ってたくせに実際に動くものを作りあげている方が非常に多く、「ぜんぜんテスト勉強してねー、やべー」と「マラソン大会一緒に走ろうな」に続く「信頼してはいけないフレーズ」が生まれた瞬間を目の当たりにしました。みんなの嘘つき!

個別の成果としては、 @civic さんによるブラウザだけで実現するTV電話的なやつのデモ(すごかった!)と、 @hayajo さんによるPHPのビルトインウェブサーバーハックがとても印象に残りました。で,
発表中気になってたんですけど、PHPが言語レベルでサポートしたビルトインwebサーバって、たしか「実運用に使うなよ!開発用途のみに使えよ!」ってやつだった気がする (see PHP: ビルトインウェブサーバー - Manual) ので、そのあたりのフォローしておいたほうがいいかもと思ったのでここでフォローしてみる次第です(質問タイムなかったので)。あと、これ多分今回参加された人たちの総意だと思うんですけど、@m_asama さんによるポータブルIPv4v6ネットワークシステムがいい意味でヤバすぎた。まさにヤバスギルスキル。なんの回線もない懇親会の会場に5分足らずで IPv4 onlyのネットワークと IPv6オンリーのネットワークと IPv6v4デュアルスタックのネットワークが構築されたのを見た瞬間のぼくは完全にポルナレフ状態だった。

懇親会

ちょうたのしかったしIPv6の夢が広がりまくった。主にあの、USBおn(省略されました

最後に

新潟プログラマーズ、相当楽しいですし、今後ともなにとぞよろしくおねがいします