2004年8月のアレ
2004年8月31日
今日が移転〆切のはずなので、 急遽 homepage2.nifty.com/phinloda を作成して、 移転通知を設定しようとした。 ところが、移転通知は @homepgae が移転先ならどこでも指定できるらしい。 ということで、 折角 homepage2 を用意したのだが、 既に公開されている homepage1 を移転先として登録。
Webのコンテンツの生成は、次のような感じで行う。
- 原稿を書く。それぞれのフォーマットで作成する。 例えば、forrest 形式の原稿なら、forrest の document のフォーマットで書く。
- それぞれの原稿に対して、 必要なら、コンバータを実行する。 こうやって生成したコンテンツを1次コンテンツと呼ぶ。
- 1次コンテンツを変換して仮原稿サイトを作成する。 変換には mkdraft というコマンドを使う。 29日に書いた、Aタグの%の問題とかは、 ここで変換することにより解決する。
- 仮原稿サイトの内容と、原稿サイトの内容を比較する。 比較して、差異に応じて更新する。 これは update というコマンドを使う。
- 原稿サイトの更新状況に応じて、 公開サイトを更新するための ftp スクリプトを作成する。 これは、mkfptdat というコマンドを使う。
- 公開サイトのデータを更新する。 これは、ftpx というコマンドを使う。
という感じの一連の処理を一気にバッチ処理で行うのである。 詳細を後日公開する予定。
2004年8月30日
オリンピックのハンマー投げで、 室伏選手が最後のハンマーを投げた後、 つい「あとはドーピングしかないか」と言ってしまったのだが、 不謹慎なことを言ったものだとその時は多少思ったが、 まさか現実になるとは知る由もない。
2004年8月29日
何かモチベーションというかMPが低下しまくっているのですが、 とりあえずメンバーズホームページはぎりぎりの所まで来てしまったので、 移転手続きをしてみる。 homepage2.nifty.com の phinloda が取れたのだが、 ura-page とか、ura とか、そういうのを狙った方がよかったか?
後は移転メッセージの申し込みを月末までにする必要がある。 新「裏ページ」はトップページが現状のスタイルで、 中身は forrest という予定なのだが、 forrest が自動生成してくれるアンカーが Netscape で動作しないので困った。 中をみると、次のようになっている。
<a href="#%8D%C5%90%56%82%CC%83%41%83%8C">最新のアレ</a>
このように「%」が含まれていると動作しないらしい。 だったら「%」を何かに置き換えるとか、 そういう安直な手段でも何とかなりそうなのものだが。
2004年8月28日
cocolog のバックナンバーへのジャンプのためのCGIを、 裏サーバーにPHPで書いて置いたのだが、 POST で処理するようにしたら、 どのようなパラメータで呼ばれたのか Apache のログに残らない。 というわけで、PHP の処理側で、ログに情報を追加する処理を書いた。
この機能、 name=url で URL を指定すれば、そのURLを使って飛び先のURLを生成する。 従って、「裏の裏ページ」以外のURLを指定すれば、 別のページにジャンプすることも可能である。 では、他のページにジャンプするようなフォームを勝手に書いてもいいのか、 という話がもしかするとあるかもしれないが、 とりあえず今のところはあまり気にしないつもりだ。 もちろん、無保証ってことで。
使い方は、urlにココログのurl、yに年、mに月を指定して、POSTで呼び出す。 GET では値を指定できない。 値が指定されていない場合、「裏の裏ページ」にジャンプしてしまう罠。
2004年8月16日
FPROGでたまに話題になっている、 どの超能力が欲しいかという話。 選択肢は、透視能力、予知能力、念動力の3つである。
透視能力
余計なもの【何?】が見えたら気が散ってしょうがないかもしれないが、
そのうち慣れるような気がする。
この能力、ギャンブルには圧倒的に有利である。
相手のカードが分かる。
次のツモも裏ドラも分かる。
スクラッチは必ず当たる、というか削る前にどうなるか分かる。
基本的に、試験とか有利。 イカサマだが、机の中に入れたものが読める。 重なったら読みにくいか。
プログラム系に何か活かせるのか? pcのケースを開けずに中のチップセットを知ることができる。 箱を開けずにマニュアルを読むことができる。 うーむ、いまいち。
予知能力
明日の株価が分かる。
他に何もいらない、という感じもするけど。
問題は、予知できるということは、 それが必ず起こるということとペアになっているわけで、 例えば明日火事で大火傷をすると予知してしまえば、 それが予知である限り避けようがない。 プロジェクトが納期に間に合わないと予知できたら、 どんなに開発チームを増強しても間に合わない。 意外と、予知できるだけでは役に立たないような気がする。 もっとも、いつ死ぬか予知できるといろいろ準備できるという説はある。
念動力
触らずに物を動かせる。
便利だ。
しかし、寝言みたいなのは許せるとしても、
寝念動力というのは大惨事になるかもしれない。
動かせる距離とか速度も問題かもしれない。
「地球へ」というコミックで、
地球の自転が止められるか、という話があったが、
ああいうのは怖い。
基本的に、物理的な鍵は全て開けられる筈である。 ハードディスクを壊すことができる。 多分、ヘッドをちょっと動かしてやればいい。 ブラインドタッチとか、タッチタイプどころではない。 タッチしないでタイプできるし、触らなくてもマウスを操作できる。 便利かもしれない。 しかし、うっかりリセットを動かすととんでもないことに。
もちろん非合法にヤルつもりならやりたい放題になる筈だが、 念動力で合法的に金を作るには? パチンコなら全部入賞するから絶対に儲かりそうなものだが、 実際にそれをやったら怖いお兄さんが出てくるような気がする。 ある種のスポーツ選手になるとか。 ボーリングなんかは簡単にパーフェクトを取れる。 ピッチャーならコントロール抜群だし、 バスケ選手になればコートの端から投げてゴールに入るとか。 ゴルフで短いパットは絶対に外さない。 何ならグリーンに乗ったら絶対に1パットで入るとか。
2004年8月12日
バーミヤンに久々に来たら、昼、すごく混んでいた。 夏休みというかお盆休みということか?
マンゴジュースを頼んだら、ストローがすごく太い。 タピオカも吸い込める仕様になっている。 いつ吸い込むかがポイントとみた。
2004年8月11日
都合により東京に戻る。 意外と混んでいたが、自由席に座ることができた。 戻りが13日と決めてあったのだが、 こちらが予約満杯で、予定の電車が同じく自由席になってしまう。 新宿発なので、時間前に並んで自由席、という選択もアリだが、 16:00まで待てば席があるというので、 そちらの指定席をget。 30分もみどりの窓口で並ばされたので、 買わずにはいられないのだ。
2004年8月8日
動作確認していないが、 昨日の telnet のモジュールを使って、 @nifty の tty系フォーラムに接続する手順のサンプル。 メールの収集や会議室巡回の処理は含まれていない。 単にログインしてログアウトする。 多分こんな感じでいけるのではないかと思う。
#! /usr/local/bin/perl # Net-Telnet-3.03 をさらに修正したものが必要 $host = "r2.nifty.ne.jp"; print "id: "; $userid = <STDIN>; chop($userid); exit 0 if ($userid eq ""); print "password: "; $password = <STDIN>; chop($password); exit 0 if ($password eq ""); use Net::Telnet (); $t = new Net::Telnet (Binmode => 1, Timeout => 200, Input_log => $tmplog); $t->binmode(1); $t->option_callback(\&opt_callback); $t->option_accept(Will => 0); $t->option_accept(Do => 0); $t->output_record_separator("\r\n"); $ok = $t->open($host); print "connection status $ok\n"; # login print "Connection-ID .."; $t->waitfor('/Connection\-ID \-\-\->/'); $t->print("SVC"); print "ok.\n"; print "User-ID .."; $t->waitfor('/User\-ID \-\-\->/'); $t->print($userid); print "ok.\n"; print "password .."; $t->waitfor('/Password \-\-\->/'); $t->print($password); print "ok.\n"; print "waiting first prompt .."; ($pre, $mat) = $t->waitfor('/[\r\n+]>/'); print "ok.\n"; # ここに必要な処理を書く # logout 処理 $t->print("bye"); print "Finished.\n"; exit 0; sub opt_callback { my ($obj, $opt, $is_remote, $is_enabled, $was_enabled, $buf_position) = @_; # do nothing return 1; }
2004年8月8日
最近 @nifty に telnet で接続できなくなったので騙しだまし使っていた perl を修正。 perl を修正したわけではなく、Net::Telnet と、それを使ったスクリプトである。
まず、Telnet.pm だが、最新版にしていなかったので、バージョンアップ。 例によって、まずログファイルをオープンする処理から変更。 sub _fname_to_handle 無いの、
CORE::open $fh, "> $filename"
となっている所を、
CORE::open $fh, ">$filename"
に修正。こんな修正が必要なのは私だけかもしれないが。
ついでに、このサブルーチンの最後の方にある select の次に、こういう行を追加する。
CORE::binmode $fh if $s->{bin_mode};
もう一つ、同じくこのサブルーチンの先頭、 実際は既にある my の後に書いたのだが、こういうのを追加。
my $s = *$self->{net_telnet};
結局、こうなる。
sub _fname_to_handle { my ($self, $fh) = @_; my ( $filename, ); my $s = *$self->{net_telnet}; ## Ensure valid input. return "" unless defined $fh and (ref $fh or length $fh); ## Open a new filehandle if input is a filename. no strict "refs"; if (!ref($fh) and !defined(fileno $fh)) { # fh is a filename $filename = $fh; $fh = &_new_handle(); # CORE::open $fh, "> $filename" CORE::open $fh, ">$filename" or return $self->error("problem creating $filename: $!"); } select((select($fh), $|=1)[$[]); # don't buffer writes CORE::binmode $fh if $s->{bin_mode}; $fh; } # end sub _fname_to_handle
説明は後で。 他に実は sub new の、net_telnet のオプションを指定するところを変更していたのだが、
bin_mode => 0,
この 0 を 1 に修正したのである。 もしかすると 0 のままでもいいのか。 と思って 0 にしてみたら動いたので、この修正はナシ。
で、説明だが、 要するに @nifty の telnet が繋がらなくなったのは、 バイナリモードで接続しないとダメになったからではないか、 と思われる。 思われるというのは、今までそうではなかったのか、というのがよく分からない。 とりあえず、使える telnet の状況と、 perl で telnet した時の状況をパケットダンプして比較してみたら、 違っていたのは、 動作する方は、ネゴる所で Will Binary、Do Binary となっていた、という訳。 そこで、perl でも同様にバイナリで指定するようにしたら、動作するようにはなった。 ところが、バイナリのままログを作ったら、 ログに書き出す所で \r\n という改行コードを \r\n\n に変換してしまうらしく、 ややこしいことになる。 そこで、Net::Telnet 側に binmode の処理を追加したのである。
方針としては、Telnet.pm を触らずに、 一時ファイルにログを作っておき、 今までのログに append するときに改行コードを replace する、 というのもある。 これだと、open のところも含め、Telnet.pm の修正は不要になる。 ただ、何となくパフォーマンスがよくないというか、 無駄なことをしてしまうような気がしてひっかかったわけだ。
なお、 207 行目の、 sub binmode の1行目に相違があると WZ は言うのだが、 見た目どこが違うのかわからない。 謎。改行コードがここだけ違うのだろうか?
まあそれはおいといて、 これだけではまだ動かない。 Telnet を呼び出している perl のスクリプト側も修正する。 まず、Telnet のオブジェクトを作っているところで、Binmode を指定する。
$t = new Net::Telnet ( Binmode => 1, Timeout => 200, Input_log => $tmplog);
この後に、こんなのを追加。
$t->binmode(1); $t->option_callback(\&opt_callback); $t->option_accept(Will => 0); $t->option_accept(Do => 0); $t->output_record_separator("\r\n");
binmode をまた指定しているが、これはいらないのか。 今までのも書いてあったのでそのまま残っている。 その後の4行が追加した分。 さらに、callback を追加しなければならないが、 こんな感じで何もしないコールバック関数を作っておく。
sub opt_callback { my ($obj,$opt,$is_remote,$is_enabled,$was_enabled,$buf_position) = @_; return 1; }
これでだいたい動いたような気がする。
2004年8月3日
LANカードを挿したら動かないというのでヘルプに。 Windows 98 なのである。 しかも SP1があたっていないみたいな? LANカードには Windows 98 対応と書いてあったということで、 そりゃもう買ってしまうのでは。
デバイスの一覧を見ると「!」マークがついていたので、かなり怪しい。 どうも Macafee でしたっけ、ウィルスチェッカーが入っているままインストールするとヤバげな気がしたので、 それを外してからインストールしたり強制終了して再起動しまくった結果、 「!」マークは出なくなったのだが、 IEを立ち上げたら無反応になる。 システムモニターだっけ、 アレで様子を見るとCPUは100%になっていて、 マウスカーソルが微動だにしない状態。 何でしょ?
§
Fedora Core 2 の DNS 設定ツールで named の設定をしようとしたが、 逆引きのゾーンファイルで、xxx.xxx.xxx.xxx というアドレスを指定したらエラーになって保存できない? xxx.xxx.xxx のように3つなら保存できる。 OCN の IP8 のドキュメント見ると 4つ指定しろと書いてあるので困った。 結局、ツールじゃなくて vi 使って設定ファイル書いたのだが。 これまた blog に書いたようなハマり方をした。
IN NS hoge.hoge.
と書くところなのに、
IN NS hoge.hoge.
と書いてしまったのである。 先頭のスペースがないと、 意味が違ってしまう。
§
ルーターの設定を unnumbered IP + Private IP としておいて、 ルーターにグローバルアドレスを割り当てたpcと、プライベートアドレスを割り当てたpcを接続する。 グローバルが xxx.yyy.zzz.www で LINUX、 プライベートが 192.168.0.100 で Windows みたいな感じで、 Windows pc 側で、
route ADD xxx.yyy.zzz.www MASK 255.255.255.255 192.168.0.100
のようにルーティングを追加、 LINUX 側では、
route add -net 192.168.0.0. netmask 255.255.255.0 dev eth0
としておけば、2台のpcは接続できるのだが、 これで問題ないのでしたっけ? セキュリティとか。 もちろん xxx.yyy.zzz.www に侵入されて 192.168.0.* に入られる、 というリスクはあるのだが、それは何とかできるとして。
2004年8月2日
Fedora Core 2 を作業用マシンに入れた。 このマシン、Core 2 test 3 というのが入っていたのだが、 Core 2 の正式版が出ているので、 upgrade した訳である。 ところが、途中数回、 CD-R が読めないという感じのエラーが発生。 DELL の pc に入れた時にはノーエラーでインストールできたのだが、 マウスコンピュータとは相性がよくないのか、このCD-R。
2004年8月1日
アッという間に8月ですが、 東京にいると暑いのか寒いのか分からん。 いや、寒いということはないが。 熱帯夜でも涼しい感じがする。