2006年 07月 01日

Shibuya.js TT #2 お疲れ様でした

Shibuya.js TT#2 IIJ 大会議室

やー、楽しかった。

「まとめなげーよw」とか突っ込まれましたが気にしない方向でいきたいと思います。少しずつプレゼン技術を磨いてスプーメソッドを使いこなしたいと思うます。


資料: GreaseMonkey Driven Development / Shibuya.js Technical Talk #2

詳しい部分は全部飛ばして言いたいことだけ言ったので、資料にごちゃごちゃ書いてあります。unsafeWindow は夢がひろがりんぐですが、使い方次第で微妙にあぶないので注意ですよ!みたいな。


めも。夏目漱石とか、文字ちっちゃすぎとか、長門さんとか、いろいろ。イラレの自動操作をやってみたい。でもイラレ高い。

引越し

今月25日に引っ越し。

とりあえず住所電話番号が確定し、ネット回線もすぐに繋がる見込みだけれど、なんかいまいちよくわかってなくて不安だ。

ネットは光になる。NTT から光アダプタ?みたいなのがこっちの家に送られてくるらしい。それを持って光の工事 (引越し少し前) に立ち会え的な何か。

とりあえず、ちゃんとグローバル IP があって、ddns で外からアクセスできればいいけど、それまでが面倒くさすぎる。


ここには小学校入学と同時に引っ越してきたから、結構長く住んでいる。引っ越すと市が変わるから、成人式はアレになるのかな。出ないことになりそう。学校から・都心から遠くなる。自分ももう隠居したい気分。

成人式は普通に侵入できるらしい。

そういえばとっくに成人の人が成人式に出る記事をどっかで読んだ。

2006年 07月 02日

なんかいろいろ

なんかすごく思ったのだけれど、エンジニアの人とお話するのはめがっさ楽しい。なんでだろう。

なんかちょっと思ったのだけれど、鶴屋さんを見てるとめがっさ楽しい。なんでだろうって、言うまでもない。


やる気なさそうに見えるのは誤解です。やる気まんまんです。

って書いておくと叩かれにくいって教わりました。教わってないです。人のせいにするのが特技です。日々劣化してく純粋回路です。

いやでもやる気はホントにありましたよ!


SleepyPresentation が結構重いことに気付いた。しかしもうちょい綺麗なプレゼンツールを作りたい。

HTML ベースだと画像とか、文字の色とか入れにくいよなぁほんと。


というかホントにいろいろすいません。

こう、家に帰ってくると一人反省会とかしはじめて眠れないよね。反省してないんだけどさ。


興味を失わないように。

2006年 07月 03日

分離, だるさ

なんかだんだん、分離していくんだよね。例えば Shibuya.js で喋っているときと、それらから帰るときや、家にいるとき、学校にいるときっていうのが、すっごく離れている気がして、混乱する。

どこにいるときに一番正しいことができるのかっていうのがわからない。「正しい」っていうと大袈裟だけれど、他に表現が思いつかなかった。だめだ。

大学は出ないといけない。単位をとって卒業しないといけない。先生の評価を稼がないといけない。そういう点で、やるべきことをやるという点で、課題をうまくこなすのは「正しい」ことだと思う。そして俺は課題をうまくこなせない。全く。全然。そしてやる気さえでない。微塵も。なんであんな、見下されながら、媚を売るような真似をして単位をとらないといけないんだ。

対して、エンジニアの人たちとあって、お話させていただいたりするのは、やりたいことをやるっていう点で、こういうのは「正しい」行為だと思う。

でもなんかその間にすごくギャップがあって、というか結局のところこれは「やるべきことを優先してやる」のが正しいのか「やりたいことを優先してやる」のが正しいのかっていうことで、「やるべきことができないヤツは人間のクズ」と「やりたいことをやれないヤツは生きてる価値なし」っていう、ほんとどっちなんだよってキレたくなるような問いなんだけど、あーもうわからん。


「やるべきこと」かつ「やりたいこと」で、「やりたい」が勝る状態っていうのは、自分の場合、十分に簡単で、見通しが立っている、付随する何かも含めて結果的に自分にとって「楽しい」ことが多いって場合だけだと思う。「やるべきこと」じゃない場合はこの限りじゃない。いくらでも難しいことに挑戦することは可能だし、見通しが立ってなくてもいい。結果を出すことを要求されないから、途中で挫折できる安心感がある。

「やるべきこと」はそのタグだけで大きな減速要因なのです。そして、お金が絡むと絶対に「やるべきこと」が発生するので可能な限りお金をからませたくない。もちろん十分に簡単で、見通しが立てれればいいのだけれど、今の自分の力では、そこまで簡単なことが殆どない。力をつけないといけない。

綺麗なものを作りたい。

自分の中で絶対的に綺麗だと思えるものを作りたい。

2006年 07月 04日

タイプ数カウンタ

今日までのタイプ数

ちょっと前に入れて使ってみた。あからさまに午前中は何もしてない。

洗濯機について

そういえば明確にイメージできるのがいくつかあるのでまとめてメモしよう。


  • 洗濯機が繋がる適切なタイミングがある。
  • 洗濯機に呼ばれる。
  • 出てくるにもタイミングがある。
  • 出てくるには何だかよくわからないけど許可がいる。
  • というかそもそも、こちらの人間も入っていける。
  • 向こうとこちらには実は明確な区別なんてない。
  • 本人の意思なしでは通れない

いくつかあるうちの少なくとも一つの洗濯機は、学校の美術室に放置してあったりする。それは白い洗濯機で、放課後に美術部員が集まってきて、彼らが活動したりしても、そのうち自分がオレンジ色にそまっても気にしない。ただ、あるタイミングで、誰かがそれをあけて、誰かが向こうに行ってしまう。

美術室に白い洗濯機なんて、どう考えても邪魔でしかないのに、誰も捨てようと思わない。あまりにそこにあるのが自然で、誰も気に留めない。洗濯機の向こうにいける人というのは、そのあまりに自然な洗濯機の存在に気付ける人間とほぼ等しい。


眠い

ひかり電話が不安だ

ひかり電話 (VoIP) 契約時レンタルするルータの性能が不安なのでいろいろ調べ中。

適当に検索してみると 価格.com の書き込みで VOIPルーターのスループットが遅いので、別途ルーターを使用する事はけっこう多いですね。 とかあったりする。この例がうまく通れば特に問題なさそう?

まともっぽいルータを回線終端装置とつないで (一段目) 、その下にレンタルする VoIP ルータをぶら下げる (二段) 形になる。PC は一段目にぶらさげ、VoIP ルータには VoIP 以外のことをさせない (端末扱い)。うまくいくのか不安だ。不明点: PPPoE の設定はどうするのか。一段目にも VoIP ルータにも設定が必要? やってみないとわからない。しかも PPPoE って使ったことなくて分からない。今 (Y!BB) は PPPoE じゃないんだよなぁ。


あと VoIP の使用する帯域とかも調べよう。

2006年 07月 05日

Active Record Pattern

パターンって、テーブルがクラス、行がインスタンスになるっていうのがそうなんだろうか。

2006年 07月 07日

ステレオタイパー

幅広い視野ないし全てのことをステレオタイプ無しに見て評価できる人は尊敬できるなぁ。好きな何かに対して「信仰」レベルにならず、好きなまま批判できる人や、どう考えても「くだらない」ことから、新しいことを見出したりできる人。

Perl 雑多メモ

  • ファイル処理には IO::File を使え。(IO::Handle, IO::Seekable)
  • LOCK_EX とかは use Fcntl;。でも IO::File::Lockable っていうモジュールがあったりする (使う?)
  • EOF まで一気に読み込む (ruby の File#read) には join "", $f->getlines とか、リストコンテキストで I/O 演算子使って join?
  • package; は deprecated. 戻すときは明示するらしい package main;
  • @ISA (あいえすえー、と読んでた) って何だよって思ってたけど、is_a だった。

クラスの作り方を寝ると忘れる。

  • 継承のやりかたを覚える。
  • use の挙動を把握する (use すると import ルーチン呼ぶんだぜって教えてもらった)

ルータを新しくした

L2スイッチ機能搭載ブロードバンドルータ NetGenesis SuperOPT100E

あんまり熱くならない。前まで、そこらに TCP セッションを張っては切り張っては切りをしまくるとかやってる (torrent とか) とそれ自体にダウンロード速度が出ていなくても、他まで巻き込んでかなり遅くなっていたけれど、それが改善されたっぽい。

しかし今日になって LAN が切れまくる現象が発生し、ひたすら原因究明するはめになった。原因は DHCP の設定 (先頭 IP アドレス) が何故かちゃんと反映されず (192.168.0.5/24 とかにしても 3 を割り振る)、ネットワーク上で IP アドレスが競合していたからっぽい。固定 IP を大きめ (192.168.0.250 以上) に設定し、DHCP 割り当て個数を減らした (253 -> 240) 。

IP が競合してても ubuntu たんは警告してくれないようだ?


何はともあれありがとう><


引越しに際する課題

  • サブネットわけるとかして自分のファイル共有を家族のとわける。

全部最初から決まっている

全部最初から決まっているっていうのと、全て可能性で無意識の働きかけによってどうにでもなりえる、みたいなのが一緒になってる。なんでもいいけど、全部最初から決まっているっていうのも、全て可能性で、の場合の一つの解にすぎないような気がする。

2006年 07月 08日

手フェチなのだろうか

最近ずっと手のことを考えてるような気がする。

少し前と同じように今でも目を閉じるとこちらに伸ばされた綺麗な手が見えるし、街中で綺麗な手を見ると、心底綺麗だなぁと思ってしまう。暗くなってから散歩に出ると、なんとなく自分の手を見て「変な形だなぁ」と思ったり、「なんでこんな形なんだろう」とか思ったりする。

眠りながら考える

中身がどんなにくだらなくても、「何か」を感じていたいなぁと思うし、もっと感じられるようになりたいなぁと思うのですよ。だから、くだらないとか一蹴するのはできるだけ避けたいと、思う。


いろいろ考えてみても、どこをどう見たらいいのか全然わからないものがあって、そういうのにむしろ多くの人が惹かれているようなのを見て恐いなぁ・気持ち悪いなぁと思うことはすごくよくあるけど、そういうのをどう解消するかを考えている。生理的に受け付けない、みたいなもの。とりあえずスタンスとしては、一切言及しないということにしておきたい。ということにしておきたい。とりあえず、時が来るまで無視しておく。あとでよさに気付いたら言及してみたらいいかとか。先に「これはだめだ」って言ってしまうと、あとでよさに気付いたとき「撤回」っていうやっかいな手続きをとらないといけない。めんどうくさい。

しかしやたらルビがついたアレなのは読めない、たぶん読めるようにならない、という矛盾。クリティカルポイントとか。いやあれはある意味ではだいぶ楽しかったから、全然ほんとに素晴らしいものだと思うけど皮肉じゃなくてさ?


というよりも、何も感じなかったり、くだらないとしか思えないものって、実は自分が「感じられない」だけなんだなぁと、最近思うから、むしろ「これはくだらない・つまらない」と言う事は、相手を貶めるようなことではなく、むしろ「自分はこんなにも感受性がない」といっているようなものな気がして、恥ずかしい。


すんごいいろいろ矛盾していて気持ち悪い。なんだかんだいって「これはひどいww」とか言うしなぁ。雑魚すぎだからなぁ。

ネットワークがわかってない。

低レベルな層が全然わかってない。TCP/IP 以下は特に全然わかってない。とりあえず TCP/IP と、ルーター・ハブ・ブリッジがそれぞれどう働くかを完全に理解したい。

  • イーサネット (何か今使ってる何か・物理層とデータリンク層レベルの話らしい)
  • CSMA/CD (ホストが増えると効率が悪くなるやつ)
  • セグメント
  • サブネットマスク (IP)
  • デフォルトゲートウェイ (IP. 困ったときに送る方向?とかなんとか。ゲートウェイって何。牛?)
  • 半二重・全二重 (全二重の場合は CSMA/DA は関係ない)
  • コリジョンドメイン
  • ブロードキャストドメイン
MAC アドレス
物理層の識別アドレス
フレーム
物理層の通信単位
パケット
IP における通信単位
ブロードキャスト
ある範囲に一括送信する
ユニキャスト
あなただけに。

さて最終的に自分でルータ (ハブ) を二段以上の構成にして、ネットワークを組めるようになることを目標にして理解をしたい。必要なことは、ネットワーク設定の項目 (IP アドレス, サブネットマスク, デフォルトゲートウェイ) を理解して自由に設定できること。


まずイーサネット基本。物理層・データリンク層の規格。基本的に送るデータは同じイーサネット内の全てのホストに配送される。ホスト側が自分宛でないデータを破棄する。結構ゴリ押しみたいな仕様なんだなぁ。でもって、この仕様の場合、データの衝突が起きて通信が阻害されるので、コリジョン回避のための方法が定義されており、それが CSMA/CD である。なるほど。

あーそうか、100Base とかっていうのはイーサネットの用語なのか。

「セグメント」は物理的な区分けのようだ。イーサネットでは通信の効率を保つため?に、物理的な長さで一つのイーサネットの大きさを規定していて、ハブの段数も制限があるみたいだ。

異なるセグメントをつなぐにはルーターが必要

純粋な「ルーター」はポートを二つしかもっていないっていうけど、なんで物理的に繋ぐところが二個なのにいくつもコンピュータが繋げるのか不思議だった。分かる人はたぶんこの「不思議さ」が理解できないと思う。なんかこう、何かの魔法で、必要なパケットはいつのまにか必要なホストにだけ届くと考えていた。でもそれが実はゴリ押しで全部に配送するってことを知ったので、ちょっとそれを理解できたかもしれない。

ハブは物理的にポートに送られてきた信号を増幅したり波形を直したりして、他の全ポートに送信する。例えばそれはあるポートにルータが繋がれているかどうかなんて知ったこっちゃなく、全部平等?なんだね。

といっても、それじゃちょっと効率が悪いから、MAC アドレスで振り分けてあげるハブがスイッチングハブ (ブリッジ)、でいいのかな。ブリッジは接続されたホストが発信した MAC アドレスを学習して、他のホストにブロードキャストし、他のホストはその MAC アドレスへ送信し、ブリッジは学習したポートに向けてフレームを送信する。もし知らない MAC アドレスがあて先だったら、普通に (?) 全てのポートに送信する。

これでハブとブリッジについてのすごく基本的な部分はわかったのかな。


さてルーターとか、デフォルトゲートウェイとかをちゃんと理解したい。ルーターは IP とかと同じレイヤーの話で、物理的な (電気信号がとかいう) 話はない、というのでいいのかな。と、思いきや、物理層のアドレスである MAC アドレスは扱うようだ。ふーむ。

  • ローカルルータとリモートルータの違いって何よ
  • WAN って何よ
  • 「ルーティング」って結局何よ

ローカルルータとリモートルータの違いは LAN と LAN を繋ぐかと、LAN と WAN とを繋ぐかっていうこと。らしいけど、どういう意味かわからない。

WAN って LAN とって、違うのは大きさだけだと思っているけど、それでいいのかな。

だとすると、リモートルータはただたんに大きいほうと小さいほうを区別する、ってだけだよなぁ。


ユニキャストの場合を考えると、MAC アドレスがルータ自身のもので (イーサネット的にはルータ向けの通信) IP アドレス自身のものではない (IP 的にはルータなんてどうでもいい) 場合、ルータさんは IP をルーティングテーブルで検索してどこに送信するか決定する。送信するときには MAC をそっちの方向にあるネットワークのルータに書き換える。この MAC アドレスは、ARP テーブルとかいうのに学習しておく? ブリッジの学習と同じなのかな。つまり、MAC を学習していない場合はそっちのネットワークにブロードキャスト?


ルーティングテーブル云々はちゃんと IP を理解しないとだめみたいだ。ルーティングテーブルに保存される情報は「あて先ネットワークとマスク、隣接ルーターの IP アドレス、送出インターフェイス」らしい。これらがなぜ必要か、どういう場合に必要かを理解したい。

疲れた。@2006-07-08T23:01:12+09:00 90分で集中力終了


続き。IPv4 - Wikipediaのルーティングの部分や、イーサネットとルーティングとかを読んでみた。

後者の記事のおかげでサブネットについて分かってきたかもしれない。あるサブネットに所属するホストは全て同じセグメント内にいないといけないとかなんとか。当たり前といえば当たり前か。同一セグメント内の全てのホストを一括して扱うためにサブネットがある?みたいな。

でもまだ実際にサブネットを設定するさいどうすればいいかがわかっていない。ルータも含めて同じセグメント内のサブネットは同じにしないといけない、というのは経験的にもわかる。じゃあ、ルータにルータを繋いで、さらにサブネットを分割するとき、どう設定するか、ということがわかってない。ついでに、ブロードバンドルータをローカルルータとして使用する場合どうすればいいかもよくわからない。

現在うちのネットワークは、WAN からルータが DHCP でアドレスをもらって、ルータの4ポートハブ (思うのだけれど、ルータポートも含めれば5ポートなんだよね?) に自宅のPCが全て有線で繋がっている。LAN 側のルータの IP は 192.168.0.1 で、サブネットマスクは 255.255.255.0 になってる。いくつかの PC は DHCP で設定され、いくつかの PC は固定 IP になってる (つまりこのルータでは DHCP 鯖が立ってる)。ここにルータをもう一つ使って、ネットワークを構築し、このルータの下にぶらさげたい (少し制限されたネットワークを構築したい)。

二段目のルータの IP はどう設定すればいいんだろう。今試せないので考えるだけで書くと、WAN 側の IP は 192.168.0.254/24 とかにして、LAN 側の IP を 192.168.10.1 にして、二段目のルータの DHCP を有効にする。とかだとうまくいく気がするけど、わからないし、なんか変な気がする。サブネットを分割してるわけじゃなくて、NAT * NAT になってる?

ぐぐろう。

落ち着いて見直す。


イーサネットだからコリジョンが発生するというわけじゃない。全二重ならばコリジョンは発生しない。全二重は送信側と受信側が別々に同時に通信できるから、受け取るぶんはずっと受け取っていられるし、送るぶんはずっと送っていられる。ref. 全二重通信と半二重通信 - The all-round Dictionary of Network Terms


セグメント=コリジョンドメイン。セグメントを繋ぐのはルーターでなくて、ブリッジでもいい。ブリッジはは必要なフレームを振り分けるので、コリジョンドメインは拡大させない。ハブ (not スイッチングハブ) は単純に増幅するだけなのでコリジョンドメインが拡張される。

ブロードキャストドメインは、ブロードキャストフレームが届く範囲。ブリッジはブロードキャストフレームを同じネットワーク内 (すなわちブロードキャストドメイン内) に転送するので、ブリッジはブロードキャストドメインを分割しない。ルータはブロードキャストフレームを転送しないので、ブロードキャストドメインを分割する機器と説明される。

ref. ネットワークエンジニアを目指して・イーサネット技術:コリジョンドメインとブロードキャストドメイン


  • 無線 LAN を導入するときどうするか。無線接続のノート PC から、一段目の固定 IP のホストは見えてほしい。でもセグメントは分けたい (samba 共有は見えなくしたい)。一段目に無線 LAN アダプタを繋げば普通に見える? つまり無線 LAN ルータではなく、ルーティングは一段目にまかせる

ネットワーク続き

なんでネットワークに接続するクライアント PC に IP を設定すると、それがそのネットワークで使えるようになるんだろうって疑問だったんだけど、そもそも「クライアント」とかいう考えたが間違っていた。

基本的に全て P2P なんだよなぁ。分かっていたつもりで分かってなかった。今まではルータがサーバー、PC がクライアント、みたいなモデルを考えてた。確かに DHCP を使う場合の多くではこの関係は成立するけど、ふと DHCP 使うのをやめて、手動設定をしたとき、「ルータにはこの IP を登録しなくていいんだろうか」と疑問に思ってしまう。実際には、IP を使う機器は全て自分の IP をネットワーク上にブロードキャストするからそんなことをしなくていい。ルータもそのブロードキャストを受け取っている一つの機器にすぎない。

ということを ARP の説明を読んで理解した。

2006年 07月 09日

無題ドキュメント1

本来いろいろ何かを覚えたりするのって楽しいことなんだよなぁ。理解できなかった部分を少しずつ溶かしていく行為って、氷に圧力かけてその部分を早く溶かしたりするのと同じぐらい楽しい。例えが微妙すぎる。


学校って、ほんとに駄目な場所だと、ほんとに思う。「教えられること」って殆ど楽しくない。「教えられてしまったこと」は後で楽しいものになりにくい。普通、学校って、その「学校」っていう場所は選べても、教えてくれる人は選べない。間接的には選べるからいいっていえばいいんだろうけど、そのために使う労を、そのまま違う方向に使えたらいいのにと思う。まぁでも、本当に凄い人は、その程度の労をなんとも思わないのだから、もういいや。


コンピュータ関連のことって、殆どは独学可能なことだと思う。みんなそれぞれが、作ったこと、やっていることを公開してる。オープンソースプロジェクトは沢山あるし、ソース読むだけで、コーディング方法が学べる。パクったってライセンスを守っていれば誰も文句を言わないし、むしろよい動きと見てくれる。

プログラムの書き方の方言って言語ごとにかなり沢山あったりするけど、やっぱりデファクトスタンダード的な書き方はあるし、そういうのが往々にして「美しい」コードになる。でもそれって「流行」が混ざっていたりして、一定しない。例えば Perl の「どのモジュールを使うのがいいか」っていう感じ。これからはコレダっていう何かがどんどんでてくる感じ (DBIx::Class, Class::DBI とか)。

そういう流れの早さについていくのも、今ではその気になればそんなに難しいことじゃない。SBS なんかのホットエントリーをいくつか読んで、流行っているアプリケーションのソースを読んだらいい。今だったら Plagger とか、Catalyst 関連の動きを追っていると流れが見えてくる。(殆どソース読んでないけど)

で、そういう流れの早さが顕著だから、教科書みたいなものが作りにくい。絶対的に信用に値する分かりやすい教科書がなかなかないから、教員の言ってることがいまいち信用できない。結局自分で調べなおさないと、間違いを掴む可能性が割りと高い。教科書に載っているコードが今のトレンドにあっているか全然わからない。

それに、例えばウェブ技術はすごい早さで展開しているのに、教員はいろいろ忙しいからそういうことに気付けない。ついでにだいたい学校教員って「安定」しているから、そういう不安定な先端を走ることに興味が薄いみたいな感じがする。ステレオタイプかな。

考えれば考えるほど、学校に行っている時間が無駄に思える。しかし別の視点から考えると、学校に行くこともまぁ必要なのかもなぁとも思うし、なんともいえない。


「そういう」ばっかりだなぁ。日本語書けるようになりたい。

サブネット分ける

192.168.0.1/24 なネットワークを分けるには?

192.168.0.240/30 とかいうサブネットを作って、親ルータのルーティングテーブルに追加してあげればいいのかな。子ルータの IP が親ネットワークで 192.168.0.2 だったら、IP/サブネット: 192.168.0.240/30, ゲートウェイ: 192.168.0.2 メトリクス: 1

この場合子ルータの DHCP サーバーは動かせないけど、子ルータの下にぶら下がるホストの自動設定は親ルータの DHCP サーバがうまくふってくれるんだろうか? 無理だよなぁ。わからん。


あれ違うなぁ、なんか間違ってる。DHCP サーバーは起動できるのか? むしろ「サブネット分ける」の意味がわかってないなぁ。


サブネットマスクを延長して、既存ネットワークを分割することが「サブネット分ける」でいいのかなぁ。つまり1ビット延長して /25 なサブネットマスクにしたら、半分にセグメントが分かれて、みたいなことでいいんだろうか。

神のささやきをもらったよ!!

  • 親ルータ: 192.168.0.1/24
  • 子ルータ WAN: 192.168.0.2/24, LAN: 192.168.1.1/24
  • 親ルータの静的ルーティングを 192.168.1.1/24 -> 192.168.0.2 に
  • 子ルータの静的ルーティングを 192.168.0.1/24 -> 192.168.0.1 に (子から親直下のホストが見えるように)デフォルトゲートウェイ設定すればおk
  • DHCP 鯖は子ルータで立てる (見える位置ならどこでもいい?)

NAT をちゃんと理解してないなぁ。NAT はグローバル IP をプライベートに変換するだけで、NAPT がポートを空けるやつらしい。

ローカルルータ動作の場合は NAT を切らないといけない。子ルータの NAT が有効な場合、子ルータは親ネットワークに対して一個のホストとして認識されるので、親ネットワークから、子ルータ以下のホストにはアクセスできない。ついでに親ルータに静的ルーティングを追加する必要はなくなる。見方を変えるとそのまま普通の WAN-LAN の関係。ってことを教えてもらった。

2006年 07月 10日

LAN に DNS サーバ立てる

全部のマシンの hosts を編集とかテラダサスwwwぷぷpとか言われたので (脳内変換です)、DNS サーバ立てて一元管理することにした。

サーバは ubuntu 6.06 LTS。普通に BIND を使うことにした。


BIND のインストール。sudo apt-get install bind。終了


ubuntu (というか Debian) は設定ファイルが分かれていて、基本的に named.conf は編集しないみたい? とりあえず自分の場合は named.conf.options と named.conf.local だけ編集した。

named.conf.options

// 最初に
// アクセスコントロールリストの設定
acl lan {
127.0.0.1;
192.168.0.0/16;
};
// options セクション内に
// 内側からのだけクエリに答える
allow-query {
lan;
};
// キャッシュサーバを使う
// そして内側に限定
recursion yes;
allow-recursion {
lan;
};
// スレーブとかない
allow-transfer {
none;
};
// 自分に登録されてないとき丸投げする先
// ルータが DNS Proxy になっているのでルータの IP だけ
forwarders {
192.168.0.1;
};

named.conf.local

// 正引き
zone "lab.lowreal.net" {
type master;
file "/etc/bind/db.lab.lowreal.net";
};
// 逆引き
zone "0.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.192.168.0";
};

正引き DB (db.lab.lowreal.net)

$TTL 1d
@       IN      SOA     lab.lowreal.net.  root.lab.lowreal.net. (
2006070901 ; Serial
28800      ; Refresh
14400      ; Retry
3600000    ; Expire
86400 )    ; Minimum
IN NS     ns.lab.lowreal.net.
IN MX 10  lab.lowreal.net.
@               IN A      192.168.0.250
ns              IN A      192.168.0.250
charlotte       IN A      192.168.0.250
nina            IN A      192.168.0.251
trac            IN CNAME  charlotte
svn             IN CNAME  charlotte

逆引き DB (db.192.168.0)

$TTL 1d
@      SOA     lab.lowreal.net  root.lab.lowreal.net. (
2006070901 ; Serial
28800      ; Refresh
14400      ; Retry
3600000    ; Expire
86400 )    ; Minimum
IN NS    ns.lab.lowreal.net.
IN PTR   lab.lowreal.net.
IN A     255.255.255.0
1               IN PTR   gateway.lab.lowreal.net.
250             IN PTR   lab.lowreal.net.

これで再起動 (sudo /etc/init.d/bind restart) して一通り DNS ひけるようになった。


しかしながら、LAN 内のホストをフルネーム (nina.lab.lowreal.net) で呼ぶのがだるいので、各 PC に DNS サフィックスを設定する。

Linux の場合は /etc/resolv.conf に以下のように書けばいいらしい。

search          lab.lowreal.net
nameserver      127.0.0.1

Windows の場合は該当インターフェイスのプロパティから、TCP/IP のプロパティを開いて、詳細設定、DNS タブにある「以下の DNS サフィックスを順に追加する」を選択、lab.lowreal.net を追加してあげればいいっぽい。


C:\>nslookup
Default Server:  lab.lowreal.net
Address:  192.168.0.250
> nina
Server:  lab.lowreal.net
Address:  192.168.0.250
Name:    nina.lab.lowreal.net
Address:  192.168.0.251

なんかキモイことになったので、ワイルドカードをやめた。今日もまた IRC でひたすらお世話になりっぱなしです。

バタフライ・エフェクト

あんまり時をかける系の話ではなかった (かけてるけど)。パラドックスとかは出てこない。ホントにバタフライエフェクトについてだけ、みたいな。まぁバタフライエフェクトが起こるならパラドックスは起こらないものなんだろう? いやどうだろう。頭回んない。いつも回ってない。

しかしヒロインがあんまり好きじゃなくて入り込みにくい。


ネタバレ? も含めていろいろ考えたこと

後半のノートがなくて、頭がイカれているとされている部分の尺がもっと長くてもよかったかなぁって個人的に思った。すごく急に過ぎ去ってしまった。もっと父親との対比がほしかった。

エンディングシーンがもろ「世界ノ全テ」と一緒でウケた。この映画もどっちかといえば記憶喪失系だもんなぁ。そんなあり気なエンディングだけど、ああいう終わり方は好き。でもやっぱイカれた人間で病院エンディングも欲しかった (欲しかった?)

ノート・日記帳で何かを思い出したけど、何だか忘れてしまった。あ、思い出した。クロスチャンネルだ。「何十冊ものノート」属性

そういえば、キャストがすごい多いなぁって思った。一つの軸にしか登場しないキャストとか。映画ってこんなもんだっけ。ぼくあたまわるいからキャストは4人ぐらいまでしか覚えられない。


一回見ただけだといろいろわからないところがあって何ともいえない。手足がないときの母親のセリフの意味とか、親父のセリフの意味とか。結局一週目の記憶喪失部分はどう考えればいいのか (一週目を基本に埋めていく? だとするとどっちが先なの的パラドックス考えるハメになるけど、それについての言及はなかった気がする)

なんか見たのは劇場版らしい。だめじゃん。また今度どうにかしよう。

Apache2 ログ

実験サーバの http ログをとっていなかったのでとるようにした。

ServerRoot /srv/www な状態で、とりたいホストの VirtualHost 以下に CustomLog {domain-name}/log/access.log combined を追記

logrotated の設定 (/etc/logrotate.d/apache2) を以下のように変更

/srv/www/*/log/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
EXT=`date +%Y%m%d`
for f in $1;
do mv $f.1 $f.$EXT;
done
if [ -f /var/run/apache2.pid ]; then
/etc/init.d/apache2 restart > /dev/null
fi
endscript
}

これであってるのかよくわからない。ローテーションってどうやってテストすればいいんだろ


あとは visitors を入れて CRON させることにした。

日付にするには単に dateext って書けばいいよ。って drry さんに教えてもらった。ので、EXT..done まで消して dateext を加えた。


logrotate を試したいときは logrotate -d /etc/logrotate.d/apache2 とかすればいいらしい。

ルータの syslog を転送する

ルータに syslog を飛ばしてくれる設定があるので有効にする。

ubuntu の syslog (sysklogd) は 1.4.1。リモート受信はデフォルトで無効らしい。/etc/init.d/syslogdSYSLOGD="-u syslog"SYSLOGD="-r -u syslog" にして restart。

めでたく syslog が Discard packet 云々だらけになりました。

2006年 07月 13日

Firefox で text-indent: (ry; がガーってなるやつ

そういえばうちではならないなって思ったけど overflowの解釈、間違ってませんか? - WebStudio を見てから text-indent でふっとばすときは overflow: hidden; を入れるようにしていたからだった。

変な挙動の CSS に対して「どうしてそうなるのか」も考えないとなぁ。でもさ、今日思ったけど、IE さんは「どうしてそうなるのか」とか考えてやっても、無駄なのよね。

CSS で面倒くさいのは

ブラウザ間のアレなんだから、あんまり CSS 書くこと自体を面倒くさいことにしないほうがいいよね、って思うんだ。


ところで自分が CSS を書くときに気をつけていることを書くよ!

  • 必ずルールをインデントする (TAB インデント)
  • セレクタを複数書く場合は最後以外改行する
  • 規則のあとには必ずセミコロンを入れる (最後も)
  • 最後のルールのあとも改行する
  • 宣言ブロック間はホワイトラインを入れる
  • border, border-style, border-color, border-width 以外の border 系プロパティを極力使わない
  • font プロパティを使わない。
  • list-style 以外の list 系プロパティを極力使わない
  • margin, padding 以外の margin, padding 系プロパティを極力使わない
  • background 以外の background 系プロパティを極力使わない
  • 宣言ブロックは基本的に HTML の構造順に書く
  • 構造に関係ないやつ (ID 選択子を含まないもの) は上のほうに書く
  • インライン要素 (span, a), ブロック要素 (p, ol), どっちでも要素 (ins, del), 置き換え要素 (img, input) の順に書く (しかしそんなに厳密に考えない)
  • ID 指定の場合、下位の要素に ID が指定されていても、上位 ID をあまり省略しない (CSS 読むだけでも、HTML 構造が少しわかるように書く)
  • 以下適当ですが、display, position, float は宣言ブロック中で上のほうに書くとか、background と color は近くに書くとか (しかしあまり気にしない)
  • ルールと書いたり規則と書いたり安定しないけど気にしない

「極力使わない」というのは、どうしてもカスケーディングを維持したいときだけ使う。

* {
margin: 0;
padding: 0;
font-size: 100%;
font-weight: normal;
font-style: normal;
color: inherit;
background: transparent;
border: none;
}
a:link {
color: #00f;
text-decoration: underline;
}
a:visited {
color: #660;
text-decoration: underline;
}
a:hover ,
a:active {
color: #00f;
text-decoration: none;
}
p {
margin: 0.5em 1em;
}
ul {
padding: 0 0 0 1em;
}
ol {
padding: 0 0 0 1.5em;
}
del,
ins {
background: #efefef;
border: 1px solid #ccc;
}
input,
textarea {
background: #efefef;
border-style: solid;
border-color: #060;
border-width: 0.2em 0.5em;
}
/* ここから構造順 */
body {
line-height: 1.66;
background: #1f2f16 url("/img/left.png") repeat-y 7% 0;
color: #fff;
margin: 0 0 0 7%;
padding: 0 7% 0 50px;
}
#whole {
background: #fff url("/img/right.png") repeat-y right top;
color: #000;
padding: 20px 55px 0 0;
}
#top a {
display: block;
background: url("/img/logo.png") no-repeat left top;
width: 500px;
height: 100px;
margin: 0 0 0 20px;
text-indent: -10000px;
overflow: hidden;
}
#navigation {
}
#navigation ul li {
display: inline;
padding: 0 0.5em;
border-style: solid;
border-color: #ccc;
border-width: 0 0 0 1px;
}
#navigation #search-form {
position: absolute;
top: 0;
right: 7%;
margin: 1em;
}
#content {
padding: 1em;
}
#content h2 {
font-size: 120%;
padding: 1em;
background: #ccc;
}
#footer {
color: #ccc;
background: #000;
}
2006年 07月 14日

CRON の run-parts でハマる

CRON って cron.hourly とかを run-parts で実行するけれど、なんだか実行されている気配のないスクリプトがあって悩んだ。

結局ファイル名が悪かったみたいだ。log.sh という名前にしていたのだけれど、これだとだめらしい。httplog に改名したらちゃんと run-parts --list でリストされるようになった。


man 見てもどうもわからなくてわかるまで時間がかかった。結局最後は試行錯誤っていう。

気をつけていること

「気をつけていること」って書いたけど、実際にはほとんど無意識ぐらいで「こうしたほうがいいな」って思いながらやっているのを書き出しただけで、あの規則ありきで書いているわけじゃないのです。

結果的にああなったぐらいのもので、わりとどうでもいいものです。書き出したのは、書き出すことで、本当にそれでいいのかっていうのを明確にしたり、曖昧なところを「曖昧なところ」として認識するためで、守るために書いたわけじゃないです。

例えばあれだと一つのファイルのまとめて書くことを前提にしてるから、ファイルを分けたときどうするかっていうのは全然わかってない。普通に考えたら、ある ID セレクタ以下を一括して分離するだろうけど、実際そうやって書いたことはないからなんともいえない。手探りいんぐ。

vim に乗り換えるよ!

Emacs の設定に嫌気がさしたので (ネガティブドリブン) 、vim に乗り換えるよ!

ubuntu 6.06 LTS の vim は VIM - Vi IMproved 6.4。css.vim のロードがいつも失敗する。

とりあえず覚えた (覚えてた) コマンド列挙

  • :w
  • :q, q!
  • i
  • v
  • V
  • C-v
  • u
  • C-r
  • y
  • p
  • P
  • dd
  • gg
  • G
  • /{search-string}
  • s/{s}/{r}/gc
  • ==
  • ^
  • $
  • o
  • !!cmd
  • gg=G

現時点での .vimrc

syntax on
colorscheme desert256
highlight ZenkakuSpace ctermbg=6
match ZenkakuSpace /\s\+$\| /
set listchars=tab:>.
set list
" バックアップとか自分でしろ
set nobackup
" 誰かが編集したら読み直して
set autoread
" 袖あまりは良いものだ
set scrolloff=10
" 行番号の表示
set number
" デフォルトインデント設定
set autoindent smartindent
" よさげなタブ
set smarttab
set softtabstop=4 tabstop=4 shiftwidth=4
" BS の挙動
set backspace=indent,eol,start
" よしなにしてくれ
set ignorecase smartcase
" インクメンタル
set incsearch
" 最初にもどれ
set wrapscan
" 対応する括弧の表示
set showmatch
" 入力中のコマンドを表示
set showcmd
" 行頭・行末間移動を可能に
set whichwrap=b,s,h,l,<,>,[,]
" 補完候補を表示する
set wildmenu
set laststatus=2
set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']['.&ft.']'}%=%l,%c%V%8P
set termencoding=utf8
set encoding=japan
set hidden
filetype plugin on
filetype indent on
noremap # :call ToggleCommentSelection()<CR>
" http://peace-pipe.blogspot.com/2006/05/vimrc-vim.html
" current syntax
command! -nargs=0 GetHighlightingGroup echo 'hi<' . synIDattr(synID(line('.'),col('.'),1),'name') . '> trans<' . synIDattr(synID(line('.'),col('.'),0),'name') . '> lo<' . synIDattr(synIDtrans(synID(line('.'),col('.'),1)),'name') . '>'
augroup MyAutocmd
au!
au BufNewFile,BufReadPost  vim   let b:commentSymbol='\"'
au BufNewFile,BufReadPost  *.c,*.h,*.cpp,*.d,*.java,*.js   let b:commentSymbol='//'
au BufWritePost * if getline(1) =~ "^#!" | exe "silent !chmod +x %" | endif
augroup END
" 現在行をコメントトグル
" 選択中はその範囲を
function! ToggleCommentSelection() range
if exists('b:commentSymbol')
let cs = b:commentSymbol
else
let cs = "#"
endif
let cl = a:firstline
while (cl <= a:lastline)
let line = getline(cl)
if strpart(line, match(line, "[^ \t]"), strlen(cs)) == cs
let i = 0
while (i < strlen(cs))
normal! ^x
let i = i + 1
endwhile
else
execute "normal! I" . cs
endif
normal! j
let cl = cl + 1
endwhile
endfunction

と、同時に、.zshrc を vim の第一引数を screen の window 名にするように書き換えた。

2006年 07月 15日

さらに vim7 に

vim7 のメニューで補完

css.vim がバグってんだよ。vim7 なら直ってるよ という書き込みがあったので vim7 にするよ! 嘘だよ! ホントは vim7 じゃないとかありえないらしいからだよ><

動機はともかく vim7 を入れた。TECHMemo - vim7のインストール を見てそのままインスコ。そのまま起動。

C-n, C-p での補完がメニューになった。HTML で要素名補完・タグ補完が効く (C-x C-o)。CSS 読んで class, id 補完するやつはエラーでて動かない、けど、特に困らない。

C-n, C-p の動的自動補完がメニューになったので、xyzzy のポップアップメニュー版っぽくなった。気持ちいい。

画像は perl モードで C-n 補完したときのやつ。もともと (vim6) がどうだったかやってないから知らないけど、C-n 押した瞬間に vim が頑張ってスキャンするのが面白い (ストレス溜まるほどは遅くない)

.vimrc に以下の設定を加えて、TAB で補完がでるようにした。xyzzy では C-SPC で動的補完にしてるんだけど、C-SPC だと IME のバインドをかぶるので TAB に。TAB がどうしても入力したいときは C-v TAB で入力できるみたいだ。

imap <TAB> <C-N>
" オマケ indent-whole-buffer
noremap <F8> gg=G``

Last.fm が変わったけど

なんか微妙

ブックマーク的なフレンド機能じゃなくなって、承認制みたいになってしまった。ブックマーク的な使い方がしにくくなるなぁ。

VoIP, ひかり電話, NAT

今日 NTT からひかり電話用にルータが届いたので構成を考えた。

少し前から NTT のルータは二段目にしようと思っていたのだけれど、調べてみるとどうやらそうするのは無理らしい。というのも SIP プロトコルで通話用のセッションを初期化するとき、VoIP 端末が自分のグローバル IP を知っていないといけないからみたいだ。もし NAT の内側に設置したいならば、ルータが SIP プロトコルを解釈してメッセージ中の IP を書き換えたりもしないといけないとかなんとか。(SIP-NAT)

結局どうすれば NTT のルータを通過せずにネットに接続できるかというと、ONU 直下にハブをつけて、それにルータをぶらさげる形にするらしい。

配線図

30 :不明なデバイスさん :2006/04/18(火) 20:10:46 ID:N78uXhwt
>>28
買わんでもルータにHUBがついとるがな
ケーブルは、も一本いるけどな

31 :不明なデバイスさん :2006/04/18(火) 20:54:44 ID:W7PvBfmV
>>30
それって、ONUからひかりのルータのLANにつないで、
ルータ自身のWANとLANをつなぐであってる?


32 :不明なデバイスさん :2006/04/19(水) 00:12:52 ID:MwCD1t9J
>>30-31
それやったらループバックするからマズいだろうがw
どういう挙動するかわからんけど。

当初の目的はこうしたいんでしょ?
http://voip-info.jp/index.php?%A4%D2%A4%AB%A4%EA%C5%C5%CF%C3Tips

33 :不明なデバイスさん :2006/04/19(水) 12:39:48 ID:2xHg8lhS
>>32
IPv6ブリッジとPPPoEブリッジ無効にすれば問題なし。というか前とか前々スレではよく出てきた話。
インターネットで負荷がかかっている状態で電話大丈夫かとかあるけど、まあそれはDSCP優先しないハブ入れても同じだし。

34 :不明なデバイスさん :2006/04/19(水) 14:00:37 ID:qh6q5Xjp
ひとつの機器だと考えるから、自家接続はまずいと思ってしまうのだろう。
ルーターも内部的にはHUB部分+ルーター部分に別れているわけだ。
ONUの次にかますHUBに、ひかり対応ルーターのHUB部分を利用しようという
話なわけだな。
せっかく付いてるHUBを使わずにおくのは、電気代の無駄ってものだろ。

さてうまくいくでしょうか。VoIP 側が PPPoE している間って、PC 側の PPPoE は切断されちゃう?よなぁ。初期化のときだけだけど、気になる。実際運用してみないとわからないことばっかり。


VoIP 関連の用語列挙

SIP (Session Initiation Protocol)
電話っぽいセッション確立プロトコル
SDP (Session Description Protocol)
SIP の body 部分を使われるプロトコル
RTP (Real-time Transport Protocol)
音声信号を実際に通信するプロトコル

@IT:VoIPに耐えるネットワーク構築(2) の図がわかりやすかった。

2006年 07月 17日

foobar2000 v9

fb2k

iTunes インストールして、アンインストールして、なんとなく勢いで fb2k をバージョンアップしてカスタマイズしなおした。

Columns UIMusic Browser を入れて、似非 Rhythmbox 化した。(Rhythmbox を使ってないのは、ubuntu LTS にしたとき USB Audio にやたらプチノイズが入るようになったため)

Columns UI の layout 設定

Columns UI を画像のような、左プレイリストスイッチャー・右上左アーティスト・右上右アルバム・右下プレイリスト設定に。

でもちょっとアーティスト一覧が気に入らなくてごちゃごちゃやった。自分は ~/music/artist_name ってディレクトリを作ってて、割とどうでもいいアーティストは ~/music/他のアーティスト にまとめて突っ込んでる。だから id3 のタグを読んでひっぱりだされると邪魔くさい。直下ディレクトリを「アーティスト名」として扱ってほしい。

Music Browser の設定の Panels から Add, Artist:Artist, Format:$left($put(p,$substr(%_path%,$len("D:/home/cho45/music"),$len(%_path%))),$sub($strchr($get(p),\\), 1)), Precedence:0 して、右上左のパネルをこれに設定した。

この Format 書くのに果てしなくハマりまくって困った。$strstr も $strchr も 0 しか返さなくてなんでよって思ってたら、単にカンマの後にスペース書いちゃいけないとかいう罠だった。40分ぐらいハマった。

この設定だと Browser の Album が絞込みされないなぁ。むしろ Album 選択すると逆に Artist が絞り込まれちゃう。おかしいなぁ。Precedence の設定がおかしいのかなぁ。逆にしてもだめだなぁ。

パネル設定をやりなおしたらいけた。

2006年 07月 21日

CSS Nite Vol. 10

神崎さんの話目当てで行って来た。

  • CSS の話があんまない。
  • XHTML って名前だけで ill-formed とか勘弁して!
  • RDFSPARQL やろうよ
  • GRDDL くるかもよ
  • XSLT! XSLT!
  • ウェブのインフォーマルな良さと、フォーマルな応用性を繋ぐのが重要なんだよ

結構マニアックな方向の話だった。会場の人で「well-formed」なんて聞いたことがないという人が多くてびびる。今回の話をきっかけにちゃんとそういうことも考えてくれたらいいなぁとてきとうに思った。

SPARQL の話とデモは、なんとなくイメージが掴めて面白そうな感じ。


かなり人が多くて、立ち見だった。抽選の応募がケイタイからだったのだけれど、ケイタイが圏外だった。MacBook が欲しくなった。関係ない。

2006年 07月 22日

リソース分散

だめだな

聴き上手

聴き上手になりたい。

それは例えば、喋らないことではなく、相手にいっぱい話してもらう程度を喋って、よく話しを聴きたい。誰かが何かを言いかけたとき、絶対に止めさせないようにしたい。かなり難しい、これって雰囲気とかで、才能なんだよなぁ。天性な聴き上手には絶対に勝てないのだ。

くだらない話をうだうだ続けるようになると、もう終わりだ。創造的でなくなる。時間を無駄にする。アジャイルじゃなくなる。例えばアイデアは伝えるものじゃなくて、吸収したものから出てくるものなんだと思う。アイデアは成果として残る。アイデアだけでは伝わらない。伝えようとしてはいけない。詳細なアイデアは相手の想像力を削るから。最低限でいい。果汁は50%でいい。それ以上は過剰。


誤解はいいことだ。誤解を理解し、さらに誤解すると、またアイデアがでてくることがある。そういう意味で、理解しあおうという試み自体は面白いのだけれど、あまり必死に理解だけについて考えると、いつまでたっても終わらない。誤解は誤解のままでいい。理解なんてどうせないのだから、誤解で発想を増やしたほうがいい。

ひかりの工事

工事立会いしてきた。

カラカラ (謎) にまかれた光ファイバーを家の中にとりこみ、ひっかけて近くの電線まで一旦伸ばし、そこから近くのハブまで伸ばしていた。かなり長い距離。

光ファイバーのケーブルは針金二本にはさまれて本体の細いファイバーがあるものだった。挟まれているので曲がる方向に制限がある。たぶんある程度なら踏んでも切れなさそう (中に浮いているので踏めないし、職員の人は踏まないように気をつけていたけれど)。どうやって光ファイバー繋いでいるかはよく見えなかった。専用の器具があって、被覆全部はがしてくっつけてるみたいだったけど、あんなんでうまくいくのか? という疑問が。プラスチックを溶かしてくっつける、とかそういうレベルなんだろうか。精度がどんなもんなのか謎い。

一回繋ぐハブを間違えたらしく、外側だけを全て張りなおしていた。大変そうだった。それは別として、他は手際がよくて、すごいなぁと思った。

後なんか専用の測定器で信号が届いているか確認していた。外側から確認していたみたいだけど、漏れの光を見る装置なのかな? 信号が届いているか (? ロードとかなんか) 信号強度みたいな数字 (15, 28, 29) を喋って調節していた。やっぱ接合部分を調節していたのだろうか (そのときは室内だったので外で何をやっているかわからなかった。同時に自分が存在できたらいいのに、と思った)


職員さんのスピードテスト (フレッツスクエア) では 50Mbps ちょいぐらい。帰った後に Radish で自己測定すると、東京で 30Mbps 程度、大阪で 25Mbps 程度 (XP デフォルト)。上りが安定しなくてかなり遅くて、10Mbps 前後だった。うーん。

テスト時の構成: ONU -> RT-500NE -> PC のスタンダードな構成。プロバイダ OCN。プランは東日本フレッツハイパーファミリー+ひかり電話 (VoIP)

時間があんまりなかったので数回軽くテストして帰ってきた。実際の構成でどうなるかはわからない。

ちなみにルータへの設定は職員の人が勝手にやってくれた。PPPoE の設定とかもだけど、パスワードとか ID とか打ち込んでもらっていいのだろうか、ってちょっと思った。


ところで VoIP って「ヴぉいぷ」って読むんだ (ヴぉいすとかけてる?) 「ぶいおーあいぴー」って読んでた。


カラカラといえば七姫物語だなぁ。そういえば最近見かけない。そろそろ出る?とか聞いた気もする。

2006年 07月 23日

PPPoE ってどうやって

やっぱ、PPPoE で繋ぐ先ってどうやって決定されるんだろう、と疑問だったので調べた。

PPPoE は PPP フレームをイーサーネットフレームでカプセル化することにより動作する。このプロトコルには、発見とセッションという 2 つの異なるステージがある。

発見ステージでは、ホストはアクセス集信装置を発見するために特別な PADI (PPPoE Active Discovery Initiation) フレームをブロードキャストする。 (一般的には、ただ 1 つの) アクセス集信装置が PADO (PPPoE Active Discovery Offer) パケットを返し、集信装置が存在することとサービスを提供することを知らせる。ホストはアクセス集信装置を 1 つ選び、セッションを開いてもらうために PADR (PPPoE Active Discovery Request) パケットを送る。アクセス集信装置は PADS (PPPoE Active Discovery Session-Confirmation) パケットで応答する。この後、プロトコルはセッションステージに移行する。

セッションステージでは、ホストとアクセス集信装置の間でイーサーネットフレームに埋め込まれた PPP フレームがやりとりされる。通常のイーサーネット MTU は 1500 バイトであるが、 PPPoE のオーバーヘッドに加え、カプセル化された PPP フレームによる 2 バイトのオーバーヘッドがあるので、 PPP インターフェースの MTU は最大 1492 バイトになる。 Linux マシンをファイアーウォールとして使用しており、ファイアーウォールの背後にあるインターフェースの MTU が 1492 より大きいと、あらゆる問題が発生しうる。実際、安全のためにファイアーウォールの後ろのマシンの MTU を 1412 に指定しておくことを推奨する。これにより、ヘッダに TCP オプションと IP オプションが入るという最悪の場合も許容できる。

最初はブロードキャストするようだ。

上のことを念頭において RFC2516 を読んでみると、5.1 The PPPoE Active Discovery Initiation (PADI) packet とかいうところから上とほぼ同じ説明 (もっと具体的) がある。


PPPoE ブリッジとは何か? ここを読んでみると、ようはルータが PPPoE フレームをスルーしてくれる?程度のものっぽい。


ひかり電話のセッション情報は起動時に PPPoE + HTTP で落としてくるみたいだけど、その設定ってどこにあるんだろう。NTT がレンタル機器を送るときに MAC アドレスを登録して云々みたいなことをやっているのかな?

2006年 07月 24日

svn fsfs, svnfs

svn の HEAD を自動で公開したい。Apache さんが HEAD を普通のファイルとして認識して、普通にアクセスできる感じ。既存のものをそのままバージョン管理するような。

想定:リポジトリと Apache は同じマシンにある。

とりあえず、svn の fsfs がどっかにまとめて HEAD をもっているなら、それに symlink すれば解決だなぁと思ったのだけれど、fsfs は最初からの差分しかもっていないらしい (db/revs/{?d+})。さてどうしよう。

  • コミットをフックして (hooks/post-commit?) 公開ディレクトリを自動で svn up
  • libsvn とかでリポジトリの HEAD をどっかにマウントできる fs を作る (fsfs の場合重すぎてやばそう)

CLON - 2006/07/24

おお、なるほど。dav 化して davfs するんだ。

2006年 07月 26日

引越し

引越し屋さんは手際がよかった。

速度がでない感じのフレッツ光だけど、前言った実運用構成にしたら、最大 70M ぐらいまで出るようになった (Radish 東京)。そしてなぜかこの状態でフレッツスクエアの速度測定をすると 3M ぐらいしかでない。別にいいけど謎い。

でも実際、早くなってもそんなに実感はない感じ。セットアップファイル落とすときぐらいだ。

2006年 07月 27日

やる気満々ですか

学校の何かで何時か思ったこと (何が多い)

なんかこう、やる気があったらなんでもできるとか、そんなのありえないし、「やる気」さえあれば評価されるとか、そんなのありえないんだから、そういう本当にくだらないこと、を信じるのをやめたらいいのに、気持ち悪い。と思った。けど、ただの僻みです。本当に(ry

でも実際、やる気があってもひたすらクオリティが出てこない・成果が出てこないっていうのはあって、ぶっちゃけそんなのどうしようもない。でもそこで「やる気はあるんですよ」とか言うのはどうかと思うっていうか、やる気やるくせにそのクオリティかよ的な何かにハマっていくのでこのまま人間やめたい。

音楽ファイルのバックアップ

バックアップを手動でとってたけど、やっと rsync でやるようにした。

今までなぜ rsync してなかったかというと単純に

  1. 最初の転送に時間がかかる。
  2. rsync の挙動が怖い (/ 一つでディレクトリ一個違うところとか)
  3. Windows - Linux 間なので、日本語ファイルがこわい

問題なのは最後だけで、実際やってみると問題がホントに出る。文字化けしたディレクトリだらけになる。

smbfs でマウントして remote しない rsync で転送してみる。Windows (Nina) のほうの music ディレクトリを music として共有している。

sudo mount -t smbfs -o codepage=cp932,iocharset=utf8 //nina/music /mnt/music
rsync -vrt --delete /mnt/music/ /home/cho45/music

verbose, recursive, times; マウントしたファイルは root 所有になってしまうので所有者変更は行わないようにした。

これで、うまくいってるっぽい。が、Sigur Ros の曲名でアレなやつはエンコーディングの変更で正常に転送されない。めんどいのでファイル名のアレな文字は似た字に置き換えた。

2006年 07月 28日

疎結合

やっぱ、疎結合のほうがいいなぁ。中身が見えない、中身を知らない。インターフェイスだけ。必要なものは API に。API にしてないところは触れて欲しくないところ。

開発初期の段階で、本当に必要だと思われた部分だけが、強く結合していて、あとは疎結合だ。時期が過ぎたら、終わり。

開発用プロキシ鯖を設定より規約に

proxy.rb, proxy-config.yaml

とかいろいろあるやつを作ってみた。なんでそのまま使わないかっていうと、いちいち設定書くのが面倒くさかった気分。

設定は殆ど読まず、スクリプト単体で殆ど動くように。デフォルトでは files ディレクトリ以下に書き換え用のファイルを置く。

リクエストが example.com/css/base.css であれば、以下のようなファイルを探して置き換える。

  1. files/example.com/css/base.css
  2. files/example.com/base.css
  3. files/base.css

ma.la さんのソースでなんで :ProxyContentHandler を使わないんだろうって少し思ったけど、たぶん向こうの鯖へのアクセス数を減らしてレスポンスをよくするためっぽい? 全部置き換えちゃうわけだし、こっちのほうがいいので、このスクリプトもそうしてる。その辺はまるパクり!

あと流行りの Pathname を使ってみた。らくちん。


さらに規約を設定にしたら、設定より規約ってハードコーディングじゃね?みたい感じをなくせそう。

実装を見直し、規約を設定にした。好きな規約を設定して設定より規約なことができます (意味不明)

実装の見直しでは、完全にサブクラスかみたいな感じにして説明するのめんどい。

2006年 07月 29日

引越し前日に

中学のときの同級生3人と夜中にちょっとお話をしたんだけど、いろいろ面白かった。

やっぱ、外側から普段見えない部分とかって全然わからないもんだなぁとかなんとか。いろいろ考えてるなぁと、何も考えていない自分は思ったりするわけで、さてもう何が言いたいかわかりません。

そういえば、場合によっては、考えが固まった部分がぶつかっても、なるほどぐらいでうまく収まることもあるんだなぁとか。完全に個人に依存する部分だからか。


とにかく、アウトプットできることは全部アウトプットすべきだと思う。思ったことを文章化する試みをしたい。できないこともあるけど、してもいいかなってことは全部していきたい。公開。アウトプットできないのって何も考えていないのと一緒だ。せめて考えるフリぐらいはしとかないと。


めちゃくちゃ簡単そうに見えても、実際やってみると難しいことだらけだ。drb で簡単な P2P 実装を作ろうと思ったけれど全然頭回らない。単純に全てのピアに「通知」を送るだけなんだけど、なんども同じピアにきちゃうんだよなぁ……再帰的処理が苦手すぎる。頭悪すぎる。

2006年 07月 31日

自動リロードで開発をアジャイルにするたった一つの方法!

vim の保存と同時にIE/Opera on Windows をリロードするデモ

遠隔オートリロード
動画と説明
reload.rb
本体
reload-config.yaml
設定

みたいなのの変化版。下地をバイト先をちまちま作って、使いにくかったのでスクラッチから結局書き直した。同じように HTTP 鯖を webrick で立てるやつです。

dl で win32api を読んでる。使うのは PostMessage。でもなんか、SetForegroundWindow がないとだめだったり、あるとでしゃばってきたり、なくても普通に動いたりと怪しいのでウゴカネーってときはそのへんみたらいいかも。あと mswin32 版じゃないと SEGV する。

EnumWindows で列挙して、タイトルがソレっぽいやつに対して F5 を送るだけ。Fx はこの方法だとリロードされない。残念。

設定の chain でリクエストあったときにさらにリクエストを出すことができるので、こいつのトリガひくだけで、ma.la さんの Safari のスクリプトも同時にひけます。


vim 側

command! AutoReloadOFF let b:autoReload_disable = 1
command! AutoReloadON let b:autoReload_disable = 0
augroup AutoReload
au!
autocmd BufUnload,FileWritePost,BufWritePost * call <SID>AutoReload()
augroup END
function! s:AutoReload(...)
" Check enable
if exists('b:autoReload_disable') && b:autoReload_disable != 0
return
endif
silent exe "!GET 'http://nina:4321/reload' > /dev/null"
endfunction