Kenichi Maehashi's Blog

脳内コアダンプ

RSS
Category: Linux
いろいろシェルスクリプトを書いていたのですが、結局こんな感じの ssh-switcher コマンドを作るに至った。
#!/bin/sh

COMMAND="$(basename ${0} | awk 'BEGIN{FS="-"}{print $1}')"
CONFIG="$(basename ${0} | awk 'BEGIN{FS="-"}{print $2}')"

exec ${COMMAND} -F ~/.ssh/config_${CONFIG} "$@"
ssh-foo, scp-foo などの名前で ssh-switcher への symlink を作っておくと、その名前 ($0) に応じて ssh -F ~/.ssh/config_foo とか scp -F ~/.ssh/config_foo が起動される。なかなか便利です。
Category: Linux
IPv6 接続性を提供するのに、SOCKS Proxy を使用するというのはアリかもしれない、とふと思った。

実際に、SSH で自宅のサーバ(IPv6 アドレスあり)に接続し、Dynamic Forwarding ポートを IPv6 アドレスを持たないマシン上で動作する Firefox の SOCKS Proxy として指定すると、IPv6 Only なサイトを閲覧することができている (FoxyProxy で DNS Lookup をリモートで行うように設定しておくのがポイント)。

一般向け ISP では今年 4 月以降順次 IPv6 が提供されることになっているが、それ以外の環境で手軽に使いたいときはいいかも。ネックは、SOCKS Proxy (+ DNS Lookup をリモートで行うオプション) に対応したクライアントソフトウェアがあまり無いということか。
Category: Linux
NAPT 下のノード同士で UDP Hole Punching の簡易テスト。

環境は、
N1 --- [NAPT1] --- Internet --- [NAPT2] --- N2
といった感じ。まず N1 で
# nc -u -s (N1 のプライベート IP アドレス) -p 10000 (NAPT2 のグローバル IP アドレス) 20000
と実行、次に N2 で
# nc -u -s (N2 のプライベート IP アドレス) -p 20000 (NAPT1 のグローバル IP アドレス) 10000
と実行。

もしポート 10000, 20000 が NAPT1, NAPT2 下の他ノードによって使用されておらず、かつ、各 NAPT デバイスが source port を可能な限り変換しない実装(だいたいそうなってる気がする)であれば、UDP でデータのやり取りができる。楽しいですね。

NAPT 箱の UDP 用 NAPT Timer は通常短く設定されているので、手早くやりましょう。
Category: Other
なんかすごいことをやらかした気がするけど、気にしない…大汗
Category: Web
「"」と「'」が違いなく使えると、どちらを使うか悩ましいですね。
今のところのオレオレルールは、「プログラム上の意味がある個所(定数など)にはシングルクォート」「表示するための文字列等はダブルクォート」と使い分けてます。一般的には、どうなんでしょうか…。

jQuery も手に馴染んできて、前に書いた for loop を each やら map やら(今日知った)で書き直したりとか、そんなことをやって楽しんでます。プログラミングがこんなに楽しかったのは久しぶりかもしれない。

一応トレンド? (常識?) としては「HTML ファイルでモデルを、外部 CSS ファイルでビューを、外部 JavaScript ファイルでロジックを記述」ということだと思うのですが、Ajax な画面設計をしていると複数のダイアログを 1 ファイルにどんどん書くので、だんだん開発効率が落ちますね。開発時は機能単位ごとに独立して記述できて、デプロイ時はシングルファイルにしてくれるような IDE が欲しいかも。