UDP Hole Punching の実験

以前から気になっていた、NAT ごしに UDP 通信を行う, UDP Hole Punching の実験を NetCat(ports: net/netcat) を使って行ってみました。
 
1. (A)ホスト側端末(Firewall なし), WAN IP アドレス: 10.0.1.2

nc -lup 1234 -v # UDP の 1234 番で LISTEN

 
2. (B)クライアント側端末(ルータあり), 端末の IP アドレス: 192.168.1.100, ルータの WAN IP アドレス: 10.0.5.6

nc -u -p 5678 10.0.1.2 1234 # 10.0.1.2 の UDP 1234 に接続

 
3. (B) で Hello を入力
 
4. (A) に以下のようなログが出る

connect to [10.0.1.2] from ********* [10.0.5.6] 50000
Hello

(この例では 10.0.5.6 の UDP50000ポートからの送信があった。クライアント側 NAT で送信元ポートが書きかわっている事に注意)
 
5. (A), (B) 両方で netcat を一度終了させる
 
6. (B) で, 先程送信元にしたポートに対して UDP 受信を開始する(src port, dst port の入れ換え)

nc -lup 5678 -v

 
7. (A) で, 先程 LISTEN していたポートから、(4) で送信元になっていた IP アドレス、ポートに対して接続を開始する

nc -u -p 1234 10.0.5.6 50000

 
8. (A) から Hello over NAT を送信
 
9. (B) で以下のようなログが表示される

connect to [192.168.1.100] from ********* [10.0.1.2] 1234
Hello over NAT

 
両方が NAT 内にいる場合、双方について source port が書きかわるため、(A),(B) が通信することが不可能になります。
この場合、双方の source port を記録するための非 NAT 内ホスト端末 (C) が必要です。
ただし、双方が Symmetric NAT 内にいる場合は、宛先のポート番号に対して送信元の IP アドレス、ポート番号が固定されるためこの方法を用いることができません。
 
参考:
– P2Pとファイアウォール
– ごろ猫ブログ
みかログ
IT media エンタープライズ:PART2 Skype, その通信の仕組み

特定のサイト上の変数を動的に操作する

[2005-06-22-1],[2005-01-14-3]でも書きましたが、

javascript:…

というURI スキームについてですが、当然これはそのままブラウザの URL として指定できます。
 
javascript: 以下には、任意の JavaScript コードを指定できるので、ブラウザ(IE, Firefox, Opera でもなんでも)を有用な簡易 JavaScript デバッグ環境として利用することができます。
 
例えば、任意のサイトで変数 foo の現在の値を閲覧したい場合は、そのサイトを表示した状態で

javascript: alert(foo);

とすればよく、逆に foo の値を変更したい場合は
 

javascript: foo=”new value”; focus();

などとすればいいわけです( 最後の focus() は画面遷移を防ぐ目的)。
 
実例を挙げると, こちらで紹介されている、モグラたたきゲームのサンプルは、ソースによるとten が点数なので、ゲーム動作中に

javascript:ten=50000;focus()

とする事で得点が50000 点になります。
動作検証をする場合に、ソースに変更を加えることなくテストができるので、開発後のメンテナンス時に役立つのではないでしょうか。
 

実行中の画面
実行後の画面

UIEngine

UJML という XML ベースの言語により、さまざまな環境(PC,Mobile)で動作するアプリケーションが作成可能になる、というものです。
UIEngine という、環境の差異を吸収するエンジンにより実現しているようです。
開発環境の非営利目的での利用は無償ですが、UEIジャパン社に営利目的の場合は要連絡とのことです。
 
Life is beautiful
 UIEジャパンCEO中島氏のブログ。
 
-UIEngine WiKi
 
-株式会社UIEジャパン
 開発、配布元。
 
UIEngineだ
UIEngine について色々書かれてます。

chalow 1.0rc4 から1.0rc6 に

思い立ってバージョンしました。
セキュリティ面で問題があるというわけではなかったのと、自分で好き勝手にカスタマイズしているので、手間を惜しんで更新していなかったのです。
 
こういった作業の時に diff は便利ですね。
 
ところで chalow 1.0 rc6 が出たのが 2005-08-21 ということなので、2年近く前の更新を今更やったわけですが、一番最初のエントリ(当時は非公開)が [2004-08-27] だという事実に驚きです..
 
光陰矢の如し。
これからもマイペースに続けるつもりなので、末永くよろしくお願いします。

MySQL の公式 GUI 管理ツール

MySQL GUI Tools Downloads(MySQL AB)にある、MySQL Administrator が便利なのでお勧めです。
 
Windows 版 ver. 5.0-r10 の直ダウンロード
 

接続方法:
– インストール後、スタートメニューから MySQL -> MySQL Administrator を実行する
– Stored Connection の … をクリック
– 左の General Options を選択(パスワードを保存したくない場合これは不要)
  – Store Passwords にチェック
  – Password storage method を Obscured にしておく
  – Apply ボタンをクリックして設定を保存
  – 左の Connections をクリックして戻る
– 下の new Connection ボタン
   Connection: 分かり易い名前(例: ユーザ名@ホスト名)
   ユーザーネーム: ログイン名(例: foo)
   パスワード: ログインパスワード(例: pass)
   Hostname: 接続先ホスト名(例1: www.example.com , 例2: 192.168.0.10)
   ポート: 3306
   Schema: 接続先DB名
   以下デフォルト。
– Apply ボタンで設定を保存、Close ボタンで閉じる
– Stored Connection のコンボボックスで、2で作った接続を選択
– OK ボタンで接続

 
接続後、カタログから、データベース(このツールでは Schema と呼ばれる)の操作や、テーブルの作成、編集ができます。
 
テーブルの中身を閲覧したい場合は、クエリブラウザを使うと便利です。
クエリブラウザを実行するには、MySQL Administrator の Tools メニューから MySQL Query Browser を選択します。
 
MySQL Query Browser の使い方は大体直感でわかると思いますが、上部のテキストエリアに

SELECT * FROM db1.footable;

のように SQL クエリをいれ、Execute ボタンを押せばクエリが実行され、かねやんMySQLAdmin などのように結果が一覧表示されます。
また、右の Schema からテーブルをドラッグ、上のテキストエリアにドロップすれば、そのテーブルの SELECT クエリが自動生成されます。
 
MySQL Administrator のその他の機能や使い方についてはこちらを参照してください。
【MySQLウォッチ】第6回 管理者向け新GUIツールMySQL Administratorを検証

PHP5 とキャッシュまわり

PHP5 でメモリキャッシュをしようと思うと、選択肢は APC, eAccelerator, XCache のいずれかになるようです。
 
ちなみに、BSD の ports ではそれぞれ www/pecl-APC, www/eaccelerator, www/xcache が該当パッケージです。
 
参考:
– Do You PHP? – eAccelerator を導入してみる, XCache を導入してみる
ZAPAブロ〜グ2.0 – XCache のインストールとphp用アクセラレータ比較
XCache API

Ajax で利用できるお絵かきクラス

ブラウザ上でお絵かき – DrawingCanvas クラス(Days of the Moon)
複数の描画エンジンに対応していて、さまざまなブラウザで利用可能な描画用クラス。SVG Tiny 、HTML Canvas 、CSS Positioning 、VML に対応している。
 
ネタ元:
– Ajax で簡単リソースモニター