リカバリできない

こないだ買ったDellのInspiron2500にredhat9を入れた後、リカバリディスクからMEを入れなおそうと思ったのだが、ディスクをフォーマットしようとするとメモリが足りないといわれた。

Win2000のCDや98FDなどいろいろ試したが全部だめで、仕方なくHDDをはずしてUSBのHDDケースにいれてVistaにつないでフォーマットしたら、無事にリカバリできた。

日本語という制約

日本のITは世界に遅れをとっている。
というかアメリカ発の技術を追っかけて日本語版に移植しているだけと言ってもいいかもしれない。

そしてその理由だが、日本語のせいじゃないだろうか。WEBやメールを使うだけでも、日本語入力のオン・オフが非常にわずらわしい。

日本語というのは非常に便利で豊かな表現ができる。
それに比べると英語はそっけなくて、味気ない。

プログラミングも会話もニュースも検索もなんでも英語でできる人々と日本人で差が出るのは当たり前だと思う。

I love Sony

有名なブロガーが「SONYのPCは音がいい」とほめていた。

PCオタクだったらSonyがすごいんじゃなくてサウンドカードがいいだけだ、などと得意げに言うかもしれないが、そういうサウンドカードを客に選ばせるのではなく最初からつけているところがSonyのすばらしいところである。

私はSonyのパソコンを使ったことはないが、非常に魅力がある。デザインもすばらしい。Sony製品はユーザーインタフェースがすばらしいのである。見た目も大事なユーザーインタフェースの一部である。使っていて気持ちがいいというのは、非常に大事である。故障がなくても性能がよくてもUIが使いにくくて不快だったらダメだ。

これはWindowsNTとWindows9xにもいえることである。オタクはNTのほうがいい、9xは不安定だ、素人向けだなどというだろうが、私はNTのサポート範囲の狭さにむかついてしかたがなかった。

Sonyはすばらしい。電池の件や故障が多いとかPS3がいまいちとか何かと逆風が吹いているようだが私はSonyを応援している。これからはなるべくSony製品を買いますから。




ログファイルの分割

ある大きなログファイルがあって、決まった書式の文字列で区切られているものを分割するプログラムを作った。ファイルを読んで分割して書き出すのはすぐにできたのだが、そのファイル名を区切りに書いてある番号付の文字列にするところでてこずった。

区切りの文字列は">> ABC-12.6"というような文字列で、数字は項目番号である。この文字列の先頭の記号とスペースを除いたもの+".log"をファイル名にしたかった。まずてこずったのは"ABC-12.6"を切り取ることである。Excelの関数ではmidとかを使って切り取った経験はあるのだが、どうもうまくいかない。結局、問題は文字列の末尾にCR+LFがついていたことが理由だった。その2文字もlengthに含まれていたのだ。

次の難所は、ある条件でファイル名に余計な文字列が付加されることである。たとえば、"ABC-10.15"の次に"ABC-11.1"が来たときに、"ABC-11.15"となってしまう。前の文字列より短い場合に、前の文字列の末尾が残ってしまうのである。

調べた結果、strncpy関数は、コピー先の文字列より長い文字列をコピーした場合は終端文字が付加されるが、コピー先より短い文字列をコピーすると、終端文字が付加されないことがわかった。そのため、strncpy関数を使用するさいには常に終端文字を付加することが推奨されているようである。

arp

仕事であるルータのarpキャッシュエントリの最大数の登録を試験することになった。ちなみにその最大値は16384である。どうやってやろうか。16384のarpキャッシュが登録されるのはどういう場合か。

まず、16384の異なるホストに対して通信を行う事が必要である。しかも、キャッシュは一定時間でクリアされるから、その時間内に16384個のホストにarp requestを送信し、replyを受け取らねばならない。

そして、arpを送信するという事は、同一サブネットに存在するホストでなければならない。

ルータのインタフェースを、16384個のホストが存在するネットワークにつなげばよいのだが、もちろんそれは非現実的な事である。さいわい職場にはトラフィックジェネレータがある。これで実際に存在しないホストやNWを模したトラフィックを送信することができる。

まず最初に、arp replyを一方的に送りつけてみたが、これではキャッシュに登録されなかった。やはり、requestを送信したものに対するreplyでなければならない。そのジェネレータには、portの設定でどんなarp requestに対してもreplyを返すという設定がある。そうしておけば、存在しないアドレスであってもreplyが返ってきてキャッシュに登録される。

まず、そのポートに向けてpingを打ってみた。ホストが存在しておらずicmp echo replyが返ってこなくても、先程のarp replyの設定によりarp キャッシュには登録される。pingを16384個のhost宛に打てばそれがすべてarpキャッシュに登録される・・・。

しかしそこで考えてみよう。16384回のpingを、arpキャッシュが消えるまでに打たねばならない。そしてその時間は5分以下である。5分で16384回ということは・・・54.6/秒。無理だ。回数とtime out待ち時間を最小にしても絶対にそんな数のpingは実行できない。

pingは無理なので、別のインタフェースにトラフィックを流してarp cacheを登録させたいi/fに転送させることにした。そのトラフィックもジェネレーターで作り、宛先IPアドレスをincrementさせる。16384個のアドレスということは、いつも使っている/24では足りない。とりあえず/8にすれば足りるだろうと/8にしたが、必要最小限なのはいくつだろうか?/16で65536,だから、その半分の半分、/18になる。しかし実際使えるのは16384-2だから、/17ということになる。

トラフィックはFEポートの10%のレート、つまり10Mbpsで流したが、あっという間にキャッシュはMAX値まで増えた。正確には16383までである。なぜひとつ足りないかというと、事前にトラフィック受信側のi/fにpingを打っていて、そこで登録された1個が含まれるからである。そこで16383までいったら受信側のi/fからケーブルを抜いて、あと1個のarpキャッシュエントリを追加するために、存在しないと思われるアドレス宛にpingを打って、めでたく16384件が登録された。実はこの試験はいままでに一度も確認できたことがなかった。私初めてこの限界に到達したのである。

クロスケーブルの結線

クロスケーブルかどうかを見分けるには両端を見てオレンジとミドリが逆になっているかどうかを見ればよい。

実用上はそれで問題ないのだが、こないだクイズである結線を見せられ、この結線はなんというか、という問題があった。

ミドリとオレンジがひっくり返っていたのでクロスだろ、と思ったが、よく見るとそれ以外に1,3もひっくり返っていた。

あれ、クロスってこんなところもひっくり返ってるんだっけ、と、違う解答を選択して間違えた。

ちなみにその試験の結果はネットワーク分野は0点だった。クロスケーブルの結線もわからないようじゃ無理ないか。

Core2Duoが欲しい

こないだPentiumDual-Coreを買ったばかりなのだが、core2 duoが欲しくなってきた。必要ないんだけど、どれくらい変わるのかなと。

SLをやってるとちょっともたつく事がある。CPUよりGBを替えるとかメモリを増やすとかしたほうがいいのかな。メモリを増やすのが一番手ごろで効果もありそう。

GBはファンがついてたりするのはいやだ。

しばらく前までは、HDDがすぐ一杯になって新しいものが欲しくなったものだが、最近はHDDはどうでもよくなっている。

用語について

嫌いな略語。スパツリ。デフォゲ。gratuitous arpをG arp。

それはさておいて、この世界は言葉の使い方が難しい。標準はあるようでなかったりないようであったりする。
まず、LAN,ネットワーク、サブネット、セグメントという言葉。ドメインとかエリアとかレンジとか。すべてある限られた区域を意味するのだが使い方によっては同じ意味にもなるが厳密には違う。

下記の例では「」内の言葉はみな同じ事を言っている。
・VLANは「broadcast domain」を分割する。
・arpは「LAN」内にしか届かない。
・ルーターの複数のI/Fに同じ「サブネット」のip addressは設定できない。
・異なる「ネットワーク」と通信するにはL3装置が必要である。
・ひとつの「セグメント」に接続する機器が多すぎてパフォーマンスが悪化した。

broadcast domainという言葉はL2/L3デバイスの違いを説明するときくらいしか使わない。セグメントという言葉はCPUのメモリ管理で使う言葉なので私はあえて避ける。上記の場合であればLANか、ネットワークという言葉を使う。

サブネットという言葉はよく使う。そしてこれがネットワークの最小単位であると考えてよいだろう。サブという接頭語がついていることからわかるように、この言葉は分割されたネットワークを意味する。しかし、今サブネットと人が言う時に、それがあるおおきなネットワークを分割したひとつの部分、という意味はほとんどない。

なぜサブネットという言葉が使われるようになったかというと、TCP/IPのアドレッシングで定義されたクラスわけがおおまかすぎて、実用に当たってそれをさらに細分化することがおこなわれるようになり、やがて標準化したからである。そのため現在はネットワークの最小のカタマリのことをサブネットというのである。

セグメントというのもそういう意味で断片という言葉で表現しているのだが、こちらはあまり使わない。

viで大量の行を移動する

viで、大量の行をカット&copyして移動するのが面倒である。

 100,200 copy 300

 というようにすると100-200行目を300行目に挿入してくれるということはわかったのだが、
その3つの数値を記憶しなければならない。

copy開始の行にカーソルを合わせてCtrl+Gを押し行番号を記憶、終了の行番号を同様にして記憶、そしてターゲットの行番号を確認してコマンドを実行する。

グラフィカルにこっからここまでをコピーしてここにペタリ、という操作ができない。多分なんかいい方法があるのだと思うんだけど・・・ 


さすがvi。いろいろ方法があったが、簡単なのは以下の方法。 

V を入力してカット範囲を選択すると反転する。

目的の範囲が定まったら : を打つと :'<,'>と表示される。

そこにya a と続けると、反転した範囲が a というバッファにコピー(yank)される。

そして貼り付けたい場所にカーソルを持っていって、"apとすれば張り付く。

行番号を一切知る必要がない。

ちなみに私はviとvimについてのみ書かれた1500円する本を一冊持っている。あんまり見ないけど。

それから私の使っているviはvimだった。

Redhat9のは6.1, cygwinのは7.0。 

私は家でも仕事でもメインのPCはWindows,仕事場はXP、家ではvistaである。

テキストエディタは秀丸を使っている。Wordを使う事はまずない。

大きなファイルをフィルタリングするような必要がある場合は、秀丸の正規表現を使った置換が使えればそれでやる。これでだいたいできる。

できない場合は、cygwinでgrepコマンドを使う。たとえば PassedまたはFailedと書いてある行のみを抜き出したい場合。

 cat aaa.log|grep -e Passed -e Failed>new.log

秀丸でもできるのかもしれないが私は最近覚えたこの方法を使う。 

viは、cygwinで使うファイルを開く時とか、メイン以外のlinuxにログインしたときなどに、仕方なく使う。大幅に編集する必要がある場合はメインのPCに持ってきて秀丸で編集している。

しかし最近はviに慣れてきて、秀丸と大差ない機能があることがわかってきた。むしろ、正規表現を使った検索や置換はviというかunixの世界が元祖である。