2010/4/1 ジョークRFC


今年のは1つだけみたい。

  • RFC 5841 TCP Option to Denote Packet Mood

ですよ。

日本語だと

  • RFC 5841 パケットのムードを示すTCPオプション

かな。

 Abstract

    This document proposes a new TCP option to denote packet mood.

概要

このドキュメントは、パケットのムードを示す新しいTCPオプションを提案する。

 1.  Introduction
 
    In an attempt to anthropomorphize the bit streams on countless
    physical layer networks throughout the world, we propose a TCP option
    to express packet mood [DSM-IV].

序文

世界の至る所にある無数の物理レイヤネットワークを流れるデータを擬人化するため、パケットのムードを表現するTCPオプションを提案する。

    Packets cannot feel.  They are created for the purpose of moving data
    from one system to another.  However, it is clear that in specific
    situations some measure of emotion can be inferred or added.  For
    instance, a packet that is retransmitted to resend data for a packet
    for which no ACK was received could be described as an 'angry'
    packet, or a 'frustrated' packet (if it is not the first
    retransmission for instance).  So how can these kinds of feelings be
    conveyed in the packets themselves.  This can be addressed by adding
    TCP Options [RFC793] to the TCP header, using ASCII characters that
    encode commonly used "emoticons" to convey packet mood.

パケットは感情を持たない。パケットはシステムからシステムへデータを移動する目的で作られたものである。しかしながら、特定の状況ではパケットに感情の状態を推測したりつけ加えたりできる事は明らかである。一例としては、ACKを受け取っていないためにデータの再送をするためのパケットは"怒り"のパケットまたは、(もしその再送が初めてでないなら)"欲求不満"パケットとして表現できる。では、このような感情はパケットそのものの中でどのように表現することができるだろうか。これは、TCPヘッダの中にTCPオプションを追加する事で示す事ができる。パケットのムードを運ぶために、一般に顔文字で使われているアスキー文字を使って。


以下感想

顔文字というのは、emoticons というらしい。
emotion + icon ということ。顔文字というよりは絵文字か。

      ASCII                Mood
      =====                ====
      :)                   Happy
      :(                   Sad
      :D                   Amused
      %(                   Confused
      :o                   Bored
      :O                   Surprised
      :P                   Silly
      :@                   Frustrated
      >:@                  Angry
      :|                   Apathetic
      ;)                   Sneaky
      >:)                  Evil

こんな定義をしているよ。メッセンジャの類で使うと勝手に絵に変換される事を考えてもらえると良いと思う。

10ms以内にACK応答が届くようなセッションではエモーションフラグをHAPPYにセットすべき(SHOULD)とか、RFCのデータを運んでいるパケットはBoredをセットしてもよい(MAY)などとある。

うん、まぁ、面白いかな。

OpenSSHでVPN

これは便利すぎる。しかもタダ。
http://www.unixuser.org/~euske/doc/openssh/openssh-vpn.html

OpenSSHはバージョン4以降ほとんどコンパイルをせず、パッケージに含まれているものをそのまま使うことが多かった。OpenSSLが安定してきて、セキュリティインシデントが発生しなくなってきた事も一因だが、単純に面倒になっただけでもある。

そんな理由もあって、OpenSSHは4.3からtun/tapデバイスを使ったトンネリングをサポートしていた事を今日まで知らなかったし、長らくの懸案だったChrootにも最近対応している事も同じく今日まで知らなかった。

OpenSSHでChrootだよ!これは本当に念願だったんだよ。
変なシェルを自作したり、おかげで妙な事もやった。

sftpとChrootDirectory
http://d.hatena.ne.jp/rougeref/20080414

実際にやろうと思ったらハマりどころがあるようだが、おそらく↑の情報でカバーされているだろうと思われる。


さて、本題のOpenSSHでVPNなんだけど、実は最初に提示したURLに全て書いてあるので、俺から補足することはほとんどなかったりする。ほぼ自動化出来ているわけだし。

PermitTunnel yes

これはデフォルトで no のようだから、変更した。

こんだけでは何なので、トラブル発生時の自動再接続スクリプトを書いてみた。
再接続なんて勝手にやってくんねーかな、って思って。

#!/bin/sh

PING_INTERVAL=1
PING_COUNT=3
PING_TARGET=192.168.0.1
PROC='ssh -w 0:0 warumono.jp.'

ping -c ${PING_COUNT} -i ${PING_INTERVAL} ${PING_TARGET} >/dev/null
RET=$?
if [ $RET -eq 0 ]; then
  D=`date "+%Y-%m-%d %H:%M:%S"`
  echo "${D} not bad"
  exit 0;
fi

while ps -ef  | grep "${PROC}" | grep -v grep >/dev/null
do
  D=`date +%Y-%m-%d %H:%M:%S`
  echo "$D killing ssh tunnel proc"
  ps -ef | grep "${PROC}" | grep -v grep | awk '{print $2}' | xargs kill -TERM >/dev/null
  sleep 1
done

$PROC 2>&1 >/dev/null &

D=`date +%Y-%m-%d %H:%M:%S`
echo "$D ssh tunnel proc restarted"

トンネル先の192.168.0.1に対して、1秒間隔で3回pingを打つ。失敗すると、pingはexitコード0以外で終了するので、次のwhileループに入る。ping成功なら"not bad"と言うことでそのまま終了。
whileループは、ssh -w コマンドが起動している限り真。一度これを落とすため、トンネル用のsshプロセスを探して kill -TERM で落とす。1秒まってまだ起動しているなら何度でも試す(という仕様は無限ループを生む可能性があり素人にはオススメしない)。無事プロセスが終了すれば、whileループからは抜ける。そして改めてトンネル用のsshプロセスを起動して終了する。

この監視/自動対応ツールは以下の状況を前提にしている。

  • VPNクライアント側のrootでcronにて起動(タイミングは任意)
  • VPNクライアント側rootユーザのid_rsa.pubはVPNサーバ側のauthorized_keysに登録済み、しかもforced-commandでVPNサーバ側のインタフェース設定やルーティング追加までを済ませてくれるようにしてある。
  • 必要に応じてiptablesを使ってフィルタしてみたりマスカレードしてみたり。

など?その他状況は最初のURLのとおりだ。

ちなみにこのVPN接続は、普通の会社で自宅と会社を繋ぐ目的等で勝手にやるとセキュリティポリシー違反になる事が容易に予想されるため、実施にあたってはネットワーク管理者の許可を得るなど、適切に利用すること。間違っても俺のせいにしないでね。

人はなぜ怒るか。

この話は論として確立していなくて、タイトルは「なぜ落ち込むか」でも以下の文脈は成り立つが、書いてみる。

----

人が怒るということを突き詰めて考えると、実は根っ子はひとつしかない。

  • 「自分が期待した事と違う事が起きている」

要するにギャップだ。

デートをすっぽかされて腹が立った → 当然くると思った奴が来ない=期待と違うことが起きた
例えばこういうこと。

では、デートをすっぽかされた相手には何と言って怒るだろうか。

「連絡もしないなんて非常識だろう」

と、こう言うかもしれない。

連絡もせずにすっぽかす事は非常識な事であって、本来なされるべき事ではない。だから来なかったお前には非があるし、嫌な気持ちになった俺に対して謝罪をするべきだ、とこういう主張だ。

でも、これは大人になる過程で身につけたひとつの論理的なテクニックでしかないと、こないだ気づいた。

本当は、来ると思っていた俺の気持ちに反した行動をされた事に怒っているんだ。

でも、「俺の期待に外れている!」という怒りかたをしたとして、相手に正しく伝わるだろうか。「すっぽかしたのは悪かったけど、いつでもお前の思ったとおりになるとは限らないじゃん!」と、無用な反発を生まないか。

実は、「俺の期待に外れている!」という怒りかたは、子どもの怒りかたなのだ。子どもの怒りはとてもストレートだ。包み隠さない。ワガママな自己主張で失うものはない。

自分の主張──この場合怒っているという感情──を、誤解なく相手に伝えるためには、単純に感情を吐露する事は得策でない。

  • 一般的な常識では約束は守るべきであるし

だからこの話は自己中心的でワガママな自己主張ではなくて一般的な見地からも正しいと言えるわけなんだけれど

  • 約束を破るからには相応の連絡をよこすべきだし

この点がお前の間違いであり、認めさせたいポイントだ。

  • だから俺が怒っているのは当然だろう

ほーら理解できただろう?

背景に流れるのはこういう事なんだ。
自分の期待した結果が得られかった事を、世間一般の常識を論拠として相手の非を指摘しているわけだ。自身のわがままかもしれない自己主張じゃないぞ、お前もきっと持っているはずの常識で考えてみろよ、さぁどうだ?とこういうわけだ。

この例はとても単純な例である。

だから、究極的には「俺の思った事と違う」から怒っているなんでもない事を、その理由や理論武装がとても重厚で仰々しい抗議文を作り上げる事だって可能だ。

いろんな怒りの根源が「期待と違うこと」にあるとすれば、感情にまかせて直接的に表現をしない事が大人になるという事のひとつであって、本質的に怒るという事そのものは変化していないということが言えそうだ。

はやりのメソッド化

思いつきの話だけど、XXXXメソッドって言いたいじゃん。

なんか怒ってるらしい文脈(N)を、紐解いて(H)、結論を全て「〜の期待と違うから怒っている」と結論付ける(K)メソッド。略称はまだない。

ネタを探そうと「抗議文」で検索したら、大きな新聞屋さんとか有名な宗教団体さんとか、絶対に怒られそうなものばかりが出てきたのでやめておきます。

このメソッドによって、なぜ怒っているかを浮き彫りにすることが出来る。怒るというのは、その人が思う期待と違った事になることで、何を期待していたのか、それが正当な期待なのか、一定の評価ができそうだと思ったんだよね。

Bingって?

http://www.bing.com/

わるいけど、これはひどい

bingの事は全然調べてないから、一部だけ取り上げて文句を言うけど気にすんな。

検索結果の見出しというかリンクに使う文字列は、普通に考えて <title>タグであるべきなんじゃねーの?と言いたい。これはそういうエントリだ。

さて、俺はインターネット屋さんなので、ISP各社の名前でbingを使ってぐぐってみたよ。

  • asahi-net.jp → Asahi ネット
  • www.jp.aol.com → Welcome to JP.AOL.COM
  • www.nifty.com → @nifty
  • www.ocn.ne.jp → OCN|トップページ
  • www.odn.ne.jp → ODN
  • www.wakwak.com → WAKWAK ブロードバンド・プロバイダ

ここまでは普通、ここからちょっとアレ?というものを。

あれっ、株?

うわっほ、社名で言われても普通わかんねーよ。

  • www.dti.ne.jp → 株式会社ドリーム・トレイン・インターネット

DTIってそういう略称だったのね。トレインって鉄道系?

あ、ビッグローブの株って株式会社って事か。

もう何が何だか。日本語でおk



Bingはどうやら検索をしてくれる人がより早く目的の情報にたどり着けるように、という事を目指しているらしいが、まったくもってマダマダだ。

世の中のWebサイトは圧倒的多数派のIEにあわせたページを作ってくれたけど、Bingみたいなクソ検索(2009年6月現在)をターゲットにちょうど良いHTMLコーディングなんか誰もやんないよね。

ここを考え違うようだとマイクロソフトさんは危ないよ。普通に使うユーザの事がちゃんと想像出来てないくせによく言うな、って言われたらさみしいでしょ。

Bingにひとつ良い評価があるとしたら、それはHTMLコーディングだ。HTMLというかUIのキモになる部分は全部JavaScriptでかかれているんだけど、これがまー、ぜんぜんIE向けっぽくないんだよ!

あと、bingってアカマイに乗ってた。へー。

何をいまさらのついったー

なんとなく使ったことなくて、少し前にアカウント取るだけとってほったらかしてて、ちょっとまたやってみていて、id:nowokayさんとかid:kstnを見つけた。←いまここ。でも先のことはわからない。
(kstnわかるかな?俺だよ俺、2001年頃ちょっとだけ同じ会社にいた俺だよ。クッキー5/18行けたら行く。)

http://twitter.com/inuwarumono

入口を選ばない事と、とても気軽な事と、サービスを捉えやすいところにデザインを感じる。
俺はインターネット屋さんなんだけど、デザインを忘れちゃいかんね。システムもお絵かきも嫁の誕生日プレゼント選ぶのもデザインだよね。デザイン。

Perl で for 文

俺は俺に驚いた、という話。

use strict;
my $i
for ($i=0, $i<10, $i++) {
  print "$i\n";
}

実行結果はどうなる?0から9まで並ぶと思うじゃん??????

でも結果はコレ

inu@myhost~% perl -e ' for ($i=0,$i<10,$i++) { print "$i\n"; };'
1
1
1

こんなことがなぜ起こるか、本当にわからなくて、心の底からあせった。変な汗が出た。俺が思っていたPerlPerlでなくなる瞬間、俺が思っていた技術がまったく検討外れだったんじゃないかと思ってしまう瞬間、エンジニアとしての寿命を感じる瞬間を感じたよ(言い過ぎ)。

正解は、セミコロン。

use strict;
my $i
for ($i=0; $i<10; $i++) {
  print "$i\n";
}

エラーにしてくれりゃいいのに・・・・・・って思う俺。でもさっきのコードは本当に正しいコードなんだ。考えたらわかるよ、そりゃ。だけどひさしぶりに書くとこういう凡ミスにそりゃ気づかないったらないんだよ、いや、わかってくれよ。

$iを$_に変えたら面白かった。

inu@myhost~% perl -e ' for ($i=0,$i<10,$i++) { print "$_\n"; };'
1
1
0

なるほど!!!