2001年7月のアレ

Home
Prev, Next

2001年7月


2001年7月31日

また暑いっす。

§

ftpで転送するスクリプトを変えた話。 いろいろ訳のわからないことになっている。 一度、全部 upload し直した方がいいかもしれない。

§

参議院選挙、 あれだけ騒いで、 次の日の報道にはもう出てこないというのが凄い。 政治への関心って、所詮その程度か。

§

FPROGORGで、平均所得の話題があったので、 平成12年 国民生活基礎調査の概況 を紹介したのだが、 考えてみれば、 この程度の資料ならinfoseekで検索すれば1分もかけずにgetできる。 実際、「平均所得」で検索したら1件目でヒットしたので、それを紹介しただけなのだ。

FPROGって、 割とIT系の人が多いはずなのだが、 実はWebの環境を持っていないとか、 あってもダイヤルアップ接続で、Webでサーチするのが無茶苦茶面倒だとか、 それが現実なのだろうか? あるいは、 意図的に知らないふりをしながら、 議論のための議論をしようという狙いなのかもしれない、 というのは、その技、個人的にはよく使うので。 だったらえらい蛇足だったのかもしれない。

単に疑問に思っただけです。 遅いといってもフレッツは常時接続。 このあたりの感覚が変わっているのかもしれない。

§

夜中に道路工事をやっていたのだが、 猛烈に明るいサーチライトが現場を照らしていて、 緩やかなカーブを曲がる所で運転手の目を直撃するようになっている。 誰か事故ると思う。

§

24日に紹介した「<p>が閉じていない事件」ですが、 やっと現場を特定できた。 要するに、 変換スクリプトが行の途中のタグを処理できないという制限事項があったので、
<p>
こんな感じの行</p>
があったら正しく処理できなかったのだ。 </p> を独立した行にして解決。


2001年7月30日

暫く更新止まっていたのだが、 体調壊したというのもありますが、 それは回復しつつある。 問題は ftp で転送するスクリプトを壊したというか、 例のJavaのソースを公開できるように修正しようとしてハマったというのが。

とりあえず、何とかなったか?

§

柔道。 多くは語らない。 前書いたし。

サドンデス方式が検討中だというのだが、 日本はこれに反対していて、理由が一本の精神云々とかいう。 だったら判定勝ちって何?


2001年7月29日

選挙だ。 しかし比例区。 あれだけ候補者いて、一人しか書いちゃいけないっての、 ズルいというか、セコいような気がしませんかね。

FPROG Homepage で書いている「今日の戯言」。 7/3のところに、こういうことを書いた。

にしても、今回の参議院選挙はタレント候補が乱立しているようだが、 今までと違って、それほど票が集まらないのではないかと思う。 というのは、有権者が名前につられて投票するような社会状況ではないと思うのだ。 きちっとした政策を述べられ、政治センスがなければ、こんな状況の社会がさらに悪化することも十分あるという状況なわけで。

で、タレント候補って誰? 大仁田氏と大橋巨泉氏、圧勝でした。 恐れ入りました。


2001年7月24日

先日書いた、リンク禁止は違法って話。 誤解があるかもしれないので書いておくが、 「リンクの時は事前に連絡してください」というサイトがある。 これは別に構わない。 お願いするのは自由であるし、希望を述べるのもいい。 私も、こういうサイトは基本的には事前に連絡してからリンクする…かと思いきや、 残念でした。 基本的にはこういうサイトはリンクしませんから連絡もしません。 でも、例外的にリンクする場合は事前に連絡している。 で、誤解なきようというのは、こういう場合でも無断でリンクする権利はあるということ。

というか、リンクする時に許可を得なければならない、 という根拠になるような権利が見当たらないのである。 例えば、画像をコピーすると著作権侵害になる。 これは分かるでしょ。 じゃあ、どこどこの美術館(公開された)に行けば、某の絵があるよ、 と自分のサイトで紹介したとする。 これは何の権利侵害になります?

リンクするというのは、要するにそういうことだぞ。

リンクを禁止するのであれば、 その根拠になる法的な、 あるいは事前に合意されたり契約によって成立した権利が必要になるはずだ。 禁止している人に聞きたい。 どういう根拠で禁止しているのか?

逆に、リンクする側の権利だが、 これは表現の自由、報道の自由など、自由権という非常に大きな後ろ盾がある。 禁止する側は、これに対抗するような権利を指摘する義務があるわけだ。

表現の自由といけば、やはりプライバシーというのがライバルになるわけだが、 Webというのは最初から最後までとことん猛烈にオープンだから、 プライバシーがそもそも発生しない。 というか、自分でTV広告出しておいて「誰にも言うな」というのはヘンだろ。

あと、裁判で何度か出た例で、 フレーム内にリンクして関係ないサイトのコンテンツにみせかけるという例だが、 これはそのことによって商業的損害が発生したということで問題になるのだと思う。 個人的には、この判例にも納得できない。 もしそういう判断をするのなら、 NetscapeとかIEそのものが権利侵害していることになるからだ。 もっとも、これは慣習とか、社会的に共有されたイメージが大きく影響するようだ。 私はフレームの中に出ているコンテンツが、特にそのサイトに依存しているとは思っていなのだが、 中には(というか、多数?)、一つのウィンドウ内に表示されているコンテンツは、 同一サイトの作者による作品である、と思っている人もいるだろう。 だったらウィンドウを分けるとどうなのだろうか? こちらは判例を聞いたことがないが、サイトを混同することはなさそうだ。

§

どこかで使いたいネタだがメモのつもりでここに書いておく。 先に誰かに使われたらヤだけど忘れそうだし。 地球温暖化対策。

100年後には5度気温が上がるとかいうのだが、 CO2削減というのが世界の流れで、 アメリカは100年後に5度上がっても現在の経済優先、ってところか。

で、今のところ全く相手にもされていないアイデアは少なくとも2つあるはず。 まず、CO2の排出量を削減するのではなく、 CO2を消費するようなシステムを開発する。 こりゃ難しいか。 現存するシステムというか、生態系だと光合成が唯一それかもしれないが。 CO2をエネルギーとして利用するような装置がもし発明されて普及すれば、 CO2が足りなくなって地球寒冷化が問題になるかも。 ドクター中松さん、お願いします。

もう一つは、ヒートポンプで熱をどこかに閉じ込めるとか、 宇宙に直接排出する方法。

リサイクルって手はありそうだ。 昔、日本では、夏に涼むために、山とか涼しい所に冬のうちに氷を運んでおいて、 夏にそれを出してきて涼んだといいますが。 夏のうちに猛暑をどこかに蓄積しておいて、 それを冬に湯沸かしとか暖房のために使うとか。 でも、これはあっちからこっちに移動するだけなので、温暖化防止にはならない。 CO2排出削減にはなるかもしれないが。

全然関係ないけど、CPUってもっと熱出さないようにできません? pcが出す熱って、全世界ではどの程度なんだ?

§

このページ、<p>が閉じていないという警告が出るのだけど、 どこで閉じていないのかさっぱり分からない。


2001年7月23日

明石花火大会の将棋倒し事故。 FPROG Homepageの日記にも書いたが。 死亡した子供の親がTVのインタビューに答えていて、 危険な状態になるのが分かっていたら、 (当局に)何とかして欲しかったとか言っていた。

客観的にはこれ自体は正論である。 しかし、あの歩道橋に3000人も乗っている状態になるのなら、 私なら子供を連れてそんな所には行かない。 誰が見ても危険なことは超自明だ。 2000人でも行かない。 自分が判断できないから当局に頼るという気持ちもわかるが、 そんな所に子供を連れていくという神経がどうかしている。 ぱっと見て、危ないということが分からないのか?

基本的に、すし詰めの橋の上に立っていて平気という神経が分からない。 日本の建築技術を過信していないか? って、今回は橋は落ちなかったけど。

それにしても、子供が倒れた時に、なぜ庇わないか。 というより、それ以前に、 親としては、子供が倒れても大丈夫な位置で花火を見せるのが最低限の義務だろ。 この事故では、子供と老人以外は一人も死んでいない。 事故にあった皆さんには失礼かもしれないが、 子供を犠牲にして壮健な人達が助かったというような印象を受けてしまう。 もちろん、世の中、自分のことが最優先だし、 他人の子供を庇って死ねとまでは言わない。 しかし、自分の子供位は何とかできないのか。

というか、くどいが、 私なら親でなくてもあんな所には行かない。 だいたい、将棋倒しだからあの程度で済んでいるわけで、 歩道橋が落ちたらどうするつもりだったのか知りたい。 橋が落ちなくても、両脇のガードが外れるとか。

犠牲者の親は、謝罪に来た市長に詰め寄ったというが、 皆さん忘れているかもしれないが、実際子供を殺したのは市長じゃなくてこの人達である。 大勢人が集まっているのを知りながら、自分の意志でそこにさらに集まったわけだろ。 共犯の加害者だということを忘れているのではないか? 同情する余地があるか? 怒りの行き場がないのは分かるし、 子供を失って悲しいというのも分からなくはない(だったらなぜそこに行ったのかはさっぱり理解できないが)。 交通整理や誘導、警備、建築物の構造的欠陥があったことも理解できる。 しかし、責任の持って行き場が間違っている。 普通の混雑程度で事故になったのなら、設計ミスを指摘するのも分かるのだが。

少し前、新大久保駅で人を助けようとして電車にはねられて死亡するという事故があった。 助けようとした人が逃げる場所がないという構造的欠陥は確かにあった。 しかし、死亡事故が発生した直接の原因はそれではない。 酔っ払いが線路に落ちたということと、 それを助けるために線路に人が下りたというのが最大のポイントだ。 助けに下りる前に非常停止ボタンを押していたら電車が止まったのではないかという指摘があったはずだ。

これと比較してみると、 今回は子供連れの親も含めて三千人が線路に下りているようなものである。 どちらかというと、よく10人で済んだなという感じがする。

§

考えてみたが、混雑した経験がないかというと、 そうですね、 八坂神社への初詣に行った時、 普段10分か15分かかる道のりを1時間以上かけて行ったような記憶がある。 あの時は無茶苦茶混んでいたが、 知らない人からお菓子をもらったりして、和気藹々とした雰囲気だった。 冬だから暑いということはないし。 京都でもう一つあったのは、五山の送り火。 あれを見に行った時は確かに混んでいたと思う。 すげー暑いし。 でも、すし詰めではあったが、 隣の人と触れ合う感じではなかったような気がする。

あとは井の頭線とかJRで事故直後の混雑車両に乗った時とか。 電車で何人か倒れることはあるが、 混雑車両ってかなりの人が吊り輪を掴んでいるから、 大規模な将棋倒しにはならないようだ。 ただ、気分が悪くなって倒れたことはあるけど。

§

パールハーバーって映画あるでしょ。 あれってTVのCMとか結構派手だし、 当たり前だが、TVCMに出てくる人達は絶賛しているので、 見に行きたいような気もしていたのだが、 今日たまたま見つけたサイト2つに、実際に見に行った人の評が書いてあった。

どちらも酷評。 というか、超酷評。

それも、真珠湾がどうとか、戦争感とか、そんな話じゃ全然なくて、 ストーリーが陳腐だとか、シナリオが面白くないとか、 ラブストーリー的にマジじゃないとか、 そういう感想なのだ。

何かそう言われると余計見てみたいような気がしてきたけど、 やっぱりプログラマー的にはA.I.見に行くのが正解かな。


2001年7月22日

体調よくない。 またか。


2001年7月21日

「らんだむCGりんく」をservlet化した副産物の、 移転サイトチェッカーだが、 これって大変なのは移転サイトの確認作業。 というのは、現実的に、移転したかどうかという情報が、 移転前サイトを見に行くしかないのだ。 つまり、foo.bar.com が foo.bar.ne.jp に移転したとする。 この時、バナーに「移転しました」と書いてくれたり、 foo.bar.com に「移転しました。移転先は foo.bar.ne.jp です」 と書いてくれるサイトが圧倒的に多くて、ある意味親切である。 ところが、この場合、経験的にだが、 foo.bar.com にアクセスした時に、200 (Ok) というステータスが返ってくる。 もしこのサイトが消滅していたら、404 (Not Found) とか、 あるいはディレクトリだけ残っていて 403 (Forbidden) というステータスが戻るため、 リストを走査してステータス確認すれば機械的に識別可能だ。 しかし、200 (Ok) だと、そのサイトが通常通り営業しているのか、 それとも移転先情報だけのページに変身しているのか、判断できないのだ。

中にはもっとえぐいサイトもあって、 該当サイトが消滅した時に自動的に別ページに転送して、 かつ、「該当サイトは消滅しました」というページを表示し、 200 (Ok) というステータスを返すプロバイダがあったと思うが…。

で、現実的にかなり効果的なのはどんなのかというと、 サイトのトップを「移転しました」ページに差し替えておいて、 バナーを削除するという方法だ。 これだと、バナーのチェックの時に 404 (Not found) が返ってくるので、 リンクしている人が現存バナーに差し替えようとする時に、 トップページをアクセスするはずだ。 また、バナー不明だけでも機械的にチェックできるのでありがたい。

ま、移転したというのは、移転情報をステータスで戻すというのがベストですけど。

ちょっと気になるサイト。 http://www.mitene.or.jp/~kazufumi/ 。 500を戻してくるので、あえてリンクしない(というか、リンクしても表示できない)が、 これってどうなっているのだろう? ちなみに、1万ちょっとのリストの中に、 500というステータスを戻してくるサイトが2つだけある。

ちなみに、最近困っているのが、ドメイン消滅系。 例えば、homepage1.nifty.com で消滅した場合、404 Not found ということになるのだが、 独自ドメインを取得してから消滅した場合、これってどうなるの? DNSから抹消されるのだっけ、それとも、サーバの応答がないという結果になる? とにかく 404 は返ってこないようだ。 かといって、サーバの応答がないだけだと、 たまたま混んでいる場合もあったりするので難しい。

ソース見たいとかいう珍しい人がいるかもしれないから、 隠すこともないのでリンクしておく。 .txt に rename して置いておく。 実際はこれだけでは使い物にならない。 つまり、CGサイト一覧データとか、移転データが別途必要になる。 あくまでプログラムそのものに興味のある人向け。 日本語はSJIS。 蛇足しておくが、 自己評価ではJavaは初心者に毛が生えた程度のスキル。

Search.java
SearchTS.java
SearchList.java
SearchResult.java
search2.jsp

で、CGサイト一覧データとか公開しないのか、という声もありそうですが、 申し訳ないですが、それはしません。 理由を説明する。 一覧データには、サイトの内容詳細が未確認のものが含まれている。 その中には、先日紹介したような、 リンクを禁止しているサイトが含まれている可能性がある。

私の主張は先日述べた通り。 リンクを禁止するという行為は人権侵害なので法的に無効だし、 勝手にリンクして何等問題ない。

しかし、それはあくまで主張であって、 実際に勝手にリンクするかどうかという運用上の問題は別。 こちらが合法だと信じて、また客観的に合法であるとしても、 サイト開設者が実力行使に出たら、 泥沼のトラブルとか訴訟とかストーカー殺人事件とか放火とか、 その他ややこしい事件に巻き込まれる恐怖れが十二分にある。 自分を守るのは、法律ではなくて、自分の行動なのだ。

リンクを禁止するということは、 当然、他に紹介することを禁止するという意味だから、 そのようなものを出すと結構ヤバいのは自明。 というわけで、「らんだむCGりんく」で使っているデータは、 リンクフリーというものに限っているのだが、 それでよければ、
http://www.st.rim.or.jp/~phinloda/randcg/randcgdb.html
を mylinkc.dat に指定するという手がある。 確か4000弱のサイトが登録されている。 カット前のデータは11000サイトだから、7000サイトは未確認…って増えてるな。

問題は移転情報なのだが、 こちらは移転先がリンク禁止かどうかを確認していない。 というか、データ形式の中に、リンクを禁止しているかどうかを情報として持たせていないのだ。 もしかしたら、移転先を秘匿したいというサイトもあるかもしれない。 実際、特定の誰かにバレたので移転したというサイトもあったから、 そういうサイトにとっては迷惑だということになる。 もちろん、先日書いたように、 私に言わせればそんなサイトをインターネットで公開する方が迷惑なのだが、 この議論は相手が折れない限り平行線だろう。


2001年7月20日

相撲は人気低迷しているようだが、 横綱は2敗目。 結構盛り上がっている。

個人的に気になっているのが雅山。 今日の試合では隆乃若に負けているが、VTRを見た感じでは勝っていると思う。 本人は隆乃若の足が出るのを見て手を付いたと言っているが。

で、何が気になるかですが、 雅山って機嫌が悪い時には無茶苦茶強いのだ。 今場所はおおむねどんよりした目つきで、こういう時は勝てない。 勝てないといっても、いつのまにか勝ち越しているというのがいつものパターンなのだが。 で、面白かったのは千代大海との試合。 千代大海は張り手で来る。 つまり、いきなり殴られるのである。 雅山、殴られるとムカっと来るのか、目つきが変わる。 大魔人みたいなもので、そうなるとなかなか負けない。 雅山に張ってはいけない。

19日の魁皇戦も面白かった。 99%勝っていたのに勿体無い試合だった。 魁皇には勝つ理由があるが、雅山にはいまひとつない。 その差か。

大相撲もTOTOやればいいのにね。


2001年7月19日

昨日書いたページ、 まだ公開していないけど、 アドレスは port=8080、/servlet/cglinks.Search でいくと思う。 肝心のIPアドレスだが、固定されていないのでここに書けない。


2001年7月18日

Cマガでやるかもしれないと書いていた移転検索ページ、だいたい動いた。 試しにとある所のリンクページでチェックしてみたら、 消滅サイトをサーチできたのだが、 このサイト、「かってにリンクするな」と書いてある。

リンクを禁止するというのは、 他者の人権侵害(表現、報道の自由?)だと思うが、 リンクする価値もないサイトと判断したのでブックマークから永久削除して、 他のサイトを見に行く。 昨日も書いたが、 なにしろチェックが必要なサイトが6千も残っているので…。

ただ、こういうサイト、 迷惑だからとりあえずインターネットから撤退してくれたらありがたいのだが。 リンク禁止するというのなら、自分でネットワーク作って公開したら? もちろん、 リンク禁止という主張自体が違法で無効だと思っているから、 必要あると思ったら勝手にリンクするけど。 大抵必要ないというか、リンクするのも面倒。


2001年7月17日

前に書いたかもしれないが、 CG系サイトで、 最近、JavaScript とか on にしていないと先に進めないページが増えたような気がする。 もちろん、中もJavaScriptバリバリというサイトもあるが、 実はそれは意外と稀で、 トップページからメニューページの移動だけがJavaScriptというページが 増えているような気がするのだ。 こういうページは、ソースを見たら飛び先が index2.html とか書いてあるから、 そこを手入力で指定したらメニューページに行くのだが、 その後はJavaScriptがなくても、何の問題もなく表示できるのである。

これは一体どういう意味なのか考えてみたのだが、 JavaScriptが動作していないと、スポンサーバナーのウィンドウが開かないでしょ。 だから、JavaScriptが表示できる環境を強制しているのではないだろうか。 納得。

こういうサイトは仕方ないからJavaScriptをonにして内容を確認することもあるが、 基本的に「らんだむCGりんく」の候補からは外している。 そこまでしてリンクする義理はないから。

§

例によってどことは言わない。 トップページにはインデックスをちゃんと見ろと書いてある。 「ちゃんと」というのが気に入らない。 どう見ようと、見る人の勝手だと思う。 まあその人にはその人の希望があるのだとは思うが、 ところが、このページがひどすぎるのだ。 例えばインフォメーションのボタンを押すとと、なぜかイラストのページに飛ぶ。 しかも、イラストには「まだ何もありません」と書いてある。 これはまだいい方で、日記のボタンを押すと。

Forbidden

呼び出されたURLの表示は拒否されました。

と表示されるのだ。 まあ人のことは言えないが、 ちゃんと見ろとページに書く前に、あんた、自分のページ ちゃんと見た方がいい と思うぞ。マジで。

と思いつつ、「CGりんく」の候補リストからさくっと削除。 削除したからURL、もう分からない。 なにしろ未チェックのサイトが6000も溜まっているから、最近、 削除の判断はすばやくなった。

あと、IEで動作確認というページでNetscapeで表示できないの。 表示できないから登録していないが、 最近無茶苦茶多いような気がするけど。 これ系のページ作るのはメチャ簡単です。 <frameset> で開いて閉じなければいい。 なぜかIEでは表示される。

§

なぜかメールすら来ないので呆れたのかもしれないが、 Cマガの7月号に書いた、iモードのメールの話、 結局、spamってiモード圏外から送って来るのでDoCoMoが料金取れないという問題なわけで、 送信者負担にしても全然解決しないというか、 DoCoMoにとっては全く美味しくないってことね。

確かNIFTY-Serve時代にこういう話あったはず。 インターネットとのメール接続をする時に、 外部からメールを送られてもニフティは金を取れないからヤだ、とか。 どう解決したのだっけ?


2001年7月14日

新宿高島屋にギリギリで行ったらすぐ閉店。 10階から下りのエレベータが各駅停車状態なのだが、 外で人が待っているというのなら分かるのだが、 開いたら誰もいない。 不思議。

このエレベータ、ほぼ満員なので途中で誰も乗れないのだが、 こういう場合は素通りするという機能はないのだろうか?

ついでにメシを食って帰ろうかと思ったのだが、 高島屋の12階以上にあるレストラン街はUSJ状態 何分待ちか分からないが、とりあえず挫折して、 別のポイントに移動する。 新宿の大江戸線の出口は、 新宿駅方面の他に、階段を全く使わずに出られる何とかタワー方面の出口があるのだが、 その何とかタワーの地下1階を通って来た時に、 レストラン街がガラガラだった。 そこなら待たずに食えるかと思ったのだが、 何と待たずというか、8時閉店の店とか。 客が来ないらしい。 ビジネス街なので土日はアウトなのかも。


2001年7月13日

体調よくない。 昼飯はコロッケ蕎麦。熱いの。

§

熱中症が増加しているというのだが、 確かに気温が高いのは分かるが、40度とか45度になったわけではなくて、 過去にもあった程度の気温のはずなのだが、 ということは、 何か別に原因があるのではないだろうか。

例えば、発汗を押さえるパウダーとか、スプレーとか、 TVでよくCMしているけど、ああいうのは大丈夫なの?


2001年7月12日

Java の応用書を買えば大抵書いてある、String の連結は StringBuffer 使えという格言。 やってみる。 最初はこんな感じのソース。 使用前。

  public String getMovedHtml() {
    String result = "";
    moved_html_flag = false;

    for (int i = 0; i < list.size(); i++) {
      SearchResult sr = (SearchResult) list.get(i);
      if (sr.isMoved()) {
        result += sr.getHtmlMessage() + "<br>\n";
        moved_html_flag = true;
      }
    }
    return result;
  }

で、こうなる。

  public String getMovedHtml() {
    StringBuffer result = new StringBuffer();
    moved_html_flag = false;

    for (int i = 0; i < list.size(); i++) {
      SearchResult sr = (SearchResult) list.get(i);
      if (sr.isMoved()) {
        result.append(sr.getHtmlMessage());
        result.append("<br>\n");
        moved_html_flag = true;
      }
    }
    return result.toString();
  }

6/28に紹介した getHtmlMessage() だが、 Java系の人が見たら卒倒したかもしれない。 現在はこうなっている。

  public String getHtmlMessage() {
    StringBuffer html = new StringBuffer();

    html.append("http://");
    html.append(key);

    if (isLost()) {
      html.append(" <b>(lost)</b>");
    } else if (isClosed()) {
      html.append(" <b>(closed)</b>");
    } else if (isOther()) {
      html.append(" <b>(not CG site)</b>");
    } else {
      String s;

      if (isMoved()) {
        html.append(" → ");
        s = getNewUrl();
      } else {
        html.delete(0, html.length());
        s = key;
      }

      if (isNotFound()) {
        html.append("<b><a href=\"");
        html.append("http://");
        html.append(s);
        html.append("\">");
        html.append("http://");
        html.append(s);
        html.append("</a> (Not Found)</b>");
      } else {
        html.append("http://");
        html.append(s);
        html.append(" (ok)");
      }
    }

    return html.toString();
  }

§

あと、全然関係ないけど、 策士策に溺れるという典型のような話。 URLがindex.htmまたはindex.htmlで終わっている場合、 それを除去してから検索する。 他サイトをリンクしているページって、 結構このあたりのルールがバラバラなので、 実際は同じものを指しているのに複数になってしまうのを防ぎたいのだ。 単純に計算してもサイト数が2倍になるわけで。

    int len = s.length();

    if (len > 10) {
      // 末尾が index.htm または index.html なら、これを除去する
      String index = s.substring(len - 10);
      i = index.indexOf("index.htm");
      if (i > -1) {
        // index.html がマッチしたら0、index.htm がマッチしたら1と考える
        // マッチした個所を文字列最後尾から除去する
        s = s.substring(0, len - 10 + i);
      }
    }

何を考えてこう書いたのか分からないのだが、 多分、最初に perl で書いていたコードを頭で Java 化したような? Java の String オブジェクトを新規生成するコストを知っていれば、 こういう書き方をするのは愚の骨頂だ。 だいたい、何やっているか直感的に分からないというのが気に入らない。 で、ロジックから見直して、現在こうなっている。 というか、普通に書けばこうなるはずだ。

    int len = s.length();

    if (s.endsWith("index.htm")) {
      s = s.substring(0, len - 9);
    } else if (s.endsWith("index.html")) {
      s = s.substring(0, len - 10);
    }

これならJava知らなくても何やってるか分かる。 普通に書くのがいい。

§

あと、おおぼけ(って変換したら「大歩危」って出るのは何?)だけど、 servletを呼び出して認証チェックする時に、 パスワードを property から読み出しているのはいいのだが、 それを比較しないで無条件で次の処理に進んでいたことが判明。 ま、自分しか使わない servlet に認証かけてどうする、ということかも。


2001年7月10日

昨日の、タイムアウトの話。 結局全然わかりまへん。 最終兵器の一歩手前あたりを模索することにした。 このプログラムは、URLを一気に大量に指定したら、 それを順にチェックしてステータスを調べるスレッドを起動する。 応答が来ないサイトが途中にあると、このスレッドの処理が事実上停止してしまう。 だからタイムアウトしたい。 というのが昨日までの発想。

で、順繰りにステータスを調べるスレッドの中から、 それぞれのサイトを調べる毎にスレッドを立ち上げて、 そのスレッドに対してタイムアウトの例外を発生させるようにした。 これがそのクラスの、指定したサイトを調べるメソッド。


  // 指定したサイトを調べるスレッドを起動する
  // タイムアウトが発生したら www_timeout の exception を発生する
  private int checkOneSite(URL url)
          throws www_timeout, InterruptedException {

    Thread myThread = Thread.currentThread();
    checkOneSiteThread cos = new checkOneSiteThread(url);
    Thread t = new Thread(cos);
    t.start();
    long start_time = 0;

    while (cos.isRunning()) {
      Date now = new Date();
      if (start_time == 0) {
        start_time = now.getTime();
      } else {
        if (now.getTime() - start_time > 10000) { // 10秒待ち?
          throw new www_timeout("checkOneSite timeout");
        }
      }

      myThread.sleep(500); // 親スレッドは少し休む
    }

    return cos.getStatus();
  }

ご覧の通り、10000ms 経過しても処理が終了しなかったら、 www_timeout というユーザ定義例外を投げる仕組みになっているから、 checkOneSite を呼び出した側がこれを catch すればタイムアウトを検出できる。 ほんで、このメソッドが新たに起動する子スレッドのクラスがこんなの。


class checkOneSiteThread implements Runnable {
  private URL u;
  private boolean running;
  private int sts;

  checkOneSiteThread(URL url) {
    u = url;
    running = true;
    sts = -1;
  }

  public void run() {
    try {
      HttpURLConnection huc = (HttpURLConnection) u.openConnection();
      sts = huc.getResponseCode();
      huc.disconnect();
    } catch (UnknownHostException uhe) {
      sts = 0;
    } catch (SocketException se) {
      sts = 1;
    } catch (Exception e) {
      sts = 2;
    } finally {
      running = false;
    }
  }

  public boolean isRunning() {
    return running;
  }

  public int getStatus() {
    return sts;
  }
}

蛇足すると、例外定義はこんな感じだな。


class www_timeout extends Exception {
  www_timeout(String s) {
    super(s);
  }
}

見た感じうまく行っているぞ。 で、どこが最終兵器の一歩手前か? はい、その通り。 このプログラム、タイムアウトしたら www_timeout を throw しているが、 そのタイムアウトしたスレッドはどうなるのだ? 「後は知らん」状態でどうなるか分からない。 もしかしたら一年間ずっと待っているかも。 だったらスレッド殺せばいいじゃん、というのが当然の発想だ。 ところが、JSE 1.3 のリファレンス見ると、Thread.destroy() というメソッド、 実装されていません とかいう。 じゃあ stop() は? 推奨されていません だと。 どうしろっちゅーの。 マニュアルの言い分だが、run スレッドの中で変数を監視しろというのだ。 んなこと言われても、HttpURLConnection.getResposeCode() から戻ってこないのに、 どうやって変数監視するのだ? Interrupt とか使う?


2001年7月9日

大阪も暑かったが、 超久しぶりに梅田三番街地下のインディアンカレーを食べる。 何年か前にも食べたはずだが、その時よりは味がよくなっていたというか、 20年前の味に近くなっていたような気がした。

って、げげ、いつのまにか20年前の話が書ける歳になっているのか。

§

Javaなんですけど、やっぱり URL のあたりでタイムアウトさせる方法が分からない。 こうなるとソース見るしかないか。 interrupt かけてもダメというのがよく分からない。 どういうことやってるかというと。


  public void run() {
    Thread t = Thread.currentThread();
    Iterator it = targets.iterator();

    while (it.hasNext() && checkNext) {
      int i;

      String s = (String) it.next();

      URL u;
      String sts;
      i = 0;

      try {
        u = new URL(s);
        HttpURLConnection huc = (HttpURLConnection) u.openConnection();
        i = huc.getResponseCode();
        huc.disconnect();
        sts = "" + i;
      } catch (UnknownHostException uhe) {
        sts = "0";
      } catch (SocketException se) {
        sts = "1";
      } catch (Exception e) {
        sts = "2";
      }

      synchronized(results) {
        results.put(s, sts);
      }

      if (i == 200) { // ok
        OkList.put(s, now);
      }
    }

    save();
    done = true;
  }

これで、huc.getResponseCode(); に入ったまま永遠に戻って来ないのである。 で、タイムアウトを設定したいのだ。 どうやって?


2001年7月8日

京都行く。 えらい暑い。 だいたい、週末は雨だという予報はどこ行ったのだ?

で、常久で包丁を買う。 買って暴れる訳ではない。 この前京都に来た時に買った包丁がやけに切れたので、 今度は万能包丁を買おうと思ったのだ。 ちなみに、この前買ったのは菜切り包丁(っていうのか?)だった。

何か改装するとかいうので閉店セールをやっていて、4割引で買えた。

で、包丁持って金閣寺に行く。 別に暴れたわけではない。 単に置き場所がなかったので持ち歩いていただけだ。 封すら切っていない。


2001年7月7日

大阪でたこ焼きを食べた。 それは美味かったのだが、その店に張ってあったのがこれ。 ラムネは分かる。 で、レモン水というのは聞いたことがあるが、 ミカン水って何物? 100円というのが妙に気になる。


2001年7月6日

(Kanaria's room) の4000ヒット踏む。


2001年7月5日

昼食はサービスステーキ。 開店セールで半額だった店のアレである。 通常の金額になった途端に閑古鳥状態に近くなってしまったようだが、 ある程度はリピーターもいそうな感じだ。 にしても、今時の昼食が750円というのは私の感覚としては高い。 毎日食えるものでもないから、ローテーションに入れるという感じにすればいいのだが。

ちなみに、昼休みに原稿とかコレとか書きながらランチ食べていた喫茶店なんですが、 潰れました。 私が行く喫茶店全部潰れるという法則、かなり健在かも(珈琲館を除く)。

§

servlet というか、Javaからftpとかrloginする方法が分からん。 まさか socket から書かなければダメってとはないと思うのだが…。

§

FPROG Home Page の話題紹介が古すぎるというお叱りのメールを頂きましたので、 ちょっと変更。 というか、話題紹介の処理を行うperlを修正した。


2001年7月4日

なぬ〜? XAXON Internet がサービス終了 だと〜??

「らんだむCGりんく」のデータが…。 って、そういえばいくつサイトがあるのかと思って調べてみたら、 xaxon.ne.jp にあるサイトは89個でした。 9000サイト程度登録してあるから、1%程度か。


2001年7月3日

書き忘れてたけど、4月10日の日記に地下鉄の駅で駅員さんに「ここは掃除しないのか」 と言った話あったろ。 隣の駅の人だったのだが、そこの駅員に伝えておきます、とかいう。

念の為書いておくけど、当然7月現在、まだ掃除されていない。 多分、今世紀中は掃除しないと思う。 あと、都営大江戸線大門駅の壁面にパテが入っていない件もそのまま。 あれはああいう工法なのだろう。 にしても気になる。

§

またハマったなぁ。 String sに対して、 s.trim();ってやってしまった。 両端の空白が残っているので不思議だったが、 s = s.trim(); じゃないとダメなのか。 Javaって深いわ。

あと、何か知らないが一度だけVAIOが「仮想メモリが何々」 と表示してNetscapeを落としてしまった。 この時、処理中のセッション情報が失われてしまったため、 作業中のデータが消滅。 servlet を落とす時に、その時点の状況を保存するという手はあるが、 あえてオンデマンドで更新しないとデータを更新しないようにしてある。 裏目に出た。


2001年7月2日

servletの中でJSPから

    String cmd = request.getParameter("cmd");

    …

    if (cmd != null && cmd.equals("setarea")) {
      …
    }

という感じでコマンド受け取って、分岐させていたのだが、

    String cmd = request.getParameter("cmd");
    if (cmd == null) {
      cmd = "none";
    }
    …

    if (cmd.equals("setarea")) {
      …
    }

という感じに修正する。 もしかして、"setarea".equals(cmd); とすればいいのか? またぞろ感覚論になってしまうが、 cmd.equals(某) という書き方は「cmdが某だったら…」という感じで違和感がないのだが、。 某.equals(cmd) というのは、「某がcmdだったら」という感じで、何かコケるので、書きたくない。

かといって、 nullと比較できるようなequalsを持ったextends String のクラスを作る元気もないし。 JSPが必ずcmdをセットしてからservletを呼び出す、 というのが正統派なのかもしれない。 で、 cmdがundefinedだったらservletがnull pointer exception で落ちるかもしれないけど、 そういう仕様ということで。 仕様といえば聞こえがいいかもしれないが、 わざとやられたらイヤだな。

で、話は戻る。 純粋にプログラミングの観点のみとして、 最初の書き方と後の書き方、どちらがいいのか? なお、最初の書き方の時には、 cmdがnullの場合には暗黙のうちにtargetと指定された場合の処理を行っていた。


2001年7月1日

日テレ の「うるぐす」という番組の「競馬頭脳」の投票をやるというので、 投票時間に随分頑張ったのだが、ついにサーバの応答を得ることはできなかった。 随分といっても、たかが20分程度ですけどね。

一回だけ接続したけど、ここから先には進まなかった。 あげくの果てには、こんなの出たけどね。

Problem Report

The system detected a Gateway Error while attempting to retrieve the URL.

Message ID

GATEWAY_ERROR

Problem Description

Gateway processing failure; an error occurred while attempting to obtain the requested URL through the configured gateway (HTTP or SOCKS gateway).

Possible Problem Cause

A gateway configuration problem or an outage may exist. 

Possible Solution

Contact your network support team if this problem persists, and provide the team your account information.

TVでは「まだまだ間に合います」とか言ってたけど、 こっちは常時接続だからいいけど、 もしダイヤルアップだったら「金返せ」という状況だ。

視聴者を馬鹿にしているのか? だったら、競馬頭脳じゃなくて、「うるぐす」ヤメれば?


(C) 2001 Phinloda, all rights reserved

RIMNET: phinloda@st.rim.or.jp