2008/11 (a)

Last Modified: Mon Nov 17 07:54:03 JST 2008

/01 [6]


(21:51)
そういえば、きょうは 11月1日でした。OpenBSD 4.4 の発売日です。

hooray...

え? ちゃんとウェブは更新したよ、index.html だけね。。。
。。。(mada反映されてないケド...)

(15:18)
新山はよく、キリスト教を「宣言的宗教 (declarative religion)」、 神道や禅を「手続き的宗教 (procedural religion)」と呼ぶのが好きなのだけど、 さいきん、この特徴の違いは単に宗教のみならず「情報の伝達方法」そのものにおける、 欧米と日本 (アジア一般かどうか知らない) の一般的な差のように思えてきた。

まず、西洋では「情報を (記号として) 後世に残す」という思想が古くから発達していたと思う。 記号ってのはデジタルなもんであるから、情報を記号化すればそれは永く残せる可能性があるが、 情報を記号化するにはまずそれを言語で表さねばならず、さらにそれは曖昧性なく述べられなければならない。 ユダヤ人とかは 2000年も前から情報のデジタル化を考えていたわけだ。 「活字」って発想も、かなりデジタルだよな。手書きによる不確定要素 (ノイズ) は これで一掃されるわけだから。

いっぽう、昔から「なあなあ社会」だった 日本では、そもそも「情報を (曖昧さなく) 後世に残そう」という発想がなかったんではないかと思える。 日本では江戸時代まで墨で書いていたわけだし、平安時代になにかを書いた人々が、 1000年後までこれを残そうなんてことは絶対考えてなかったと思う。日本語もなんだかわかんないくらいに変化してるし。 しかし、もしかすると、日本人はわざと曖昧な方法でしか情報を残さなかったのではないかという 可能性もある。だとすれば、それは一体どういう思想によるものだろう? 「故人の言ったことは風化させるべき」っていう思想だろうか? そりゃなかなかいい思想だね。… けれど人間の特性から考えて、風化されるより歪曲されて再利用されるほうが多そうだけど。

(11:15)
New York City Marathonのコース (動画)。 おもしろい。 City Marathon といえばいつも思い出すのは Ryan だが、彼はいまごろどうしているだろう。 今年も走ったんかなあ…。
(10:45)
雲ひとつない、スカーっといい天気じゃる。 しかし風つよい。センタク物が翔んでいかないように注意しなければ。う゛ぁ。
(09:23)
SprintとCogentがピア接続を解除。 あれまあ。新山はネットワークのことは全然わからないが、ようするに Sprint と Cogent の間での 金銭的トラブル? により両者が IP 接続を解消した。そこで、このプロバイダにつながっている組織 (一般家庭ユーザや大企業を含む) はいきなりお互いのネットワーク経路がガツンと遠くなってしまった (NTTcom だかどこかを迂回するようになった) ので遅くなって大迷惑、ってことのようである。 記事によれば、 Cogent/Sprint のどちらにも、シングルホームしている AS が 200以上あるという。 (ちなみにネット屋さんは、このレベルの経路の話をするときに IP アドレスでは話をせず、AS 番号で話をする。) こういうプロバイダ間の争いで誰が一番被害を受けるのかっていうと、結局それはエンドユーザなわけだ。 企業の政治的ないざこざのために、インフラである (はず、の) ネットの信頼性が大幅に落ちるのである。 いや待て。そもそもネットは本当にインフラなのか? かなり疑わしいと新山は思う。

はっきりいって、現在のインターネットで起こっている問題というのは、技術的なアドレス枯渇がどうとかいう話よりも 政治的な問題のほうがはるかにでかい。しかしそれは解決不可能なので無視されている。ネットに関するこの手の取り組みというのは、 さしずめ「いま、起こってる山火事を消すために、最新型の消火器を街に配備しようと必死になってる」 ような状況にしか見えない。まあいいや。ネットがそんなに重要だとはあんまり新山は考えないので、これからも (カネがつづくかぎり) せいぜいやってくれ、って感じ。

そもそも、電気や水道、道路などを保守する手間にくらべたら、 ネットの保守にかかるコストなんてゴミみたいなもんである。 そして人々がこの手のいいかげんな構造で満足してる (少なくとも、大々的な不満は聞かない) ということは、 しょせんネットというのはこの程度の“インフラもどき”としか認識されてないとゆうことだ。 おそらくこれからもそうだろう。だって水道が切れた状態と、ネットの切れた状態のどっちを選ぶか、 といったら、まちがいなく新山はネットがないほうを選ぶもんね。

(追記) インターネットは当初、協調動作ができるから障害に強い等といわれたが、 この特性は現実世界ではかえって足かせになっているんじゃないか? もしトラフィックが十分に一様で分散してて、各プロバイダがきちんと統制されて利他主義的にふるまえば これは理論上うまくいくのかもしれないが (もともと TCP/IP の最初のユーザである軍にとっては、 それでよかったのかもしれないが)、現実の社会では、ネット上のトラフィックというのはものすごい偏向してるうえに、 プロバイダ各社にはそれぞれの思惑がある。それを「協調」しろったって、ねえ。 人間社会というのは、長い目で見れば、けっきょくいつの時代も最後には野性と同じくらい残酷である。

/02 [0]


(22:37)
はぁ きょうは疲れたね。(一日じゅう立ちっぱなしだったのでアる)

きょうヮ、現金をおろすのを忘れたで、コメが買えなかった。 まだすこし残っているのだが、なぜ今日買いたいのかというと、それは 日曜日はポイント 5倍の日だからだ! wellthatsallisaid.

てくるで、現金 (キャッシュ (カッス)) といえば、Knuth の「バグ小切手」をきみは知ってるかい? 最近では小切手を国際的に送るのがセキュリティ上、危険になったんで Knuth はついに バグ小切手をやめたのだが、 彼から実際に小切手を受けとって現金化したひとはごく少数らしい。この説明が秀逸:

It turns out that only 9 of the first 275 checks that I've sent out since the beginning of 2006 have actually been cashed. The others have apparently been cached.

(私が 2006年初頭から送った最初の 275枚の小切手のうち、 実際にキャッシュ (cash) されたのは、たった 9枚のようだ。 それ以外はどうやらキャッシュ (cache) されたらしい。)

ダヅャレというのは世界じゅうのどの言語にも存在するのだろうか? それは「世界じゅうのどの言語にも同音異義語が存在するか」という質問と等価に思える。 答えはたぶん真だろう。

/04 [2]


(22:16)
職業プログラマにもっとも必要な素質とは、いったい何か?

…それは論理的思考力でも、96時間徹夜可能な体力でもない。もちろん記憶力でもない。 それは「バグが発見されたとき、腹をかかえて (自分自身を) 笑いとばせるユーモア精神」である。 実際的に考えて、長い目で見ればこれしかない。これ以外の能力はすべて加齢とともに確実に失われていく。 だがユーモアは、加齢とともに豊かになっていく“かもしれない”。 結局、人間は最後にはみんな敗北する (勝ち負けを定義するかぎり)。 だから人生において必要なのは勝つ能力ではない。むしろ、負けを より味わいのあるものにする能力なのだ。

なぜか今日はそんなことを考えた。

/06 [4]


(00:12)
いんふぷ (INFP)。

性格テストなどとゆうものはおよそすべてウソだと信じているが、 なんとなく、Jungian Type Test For Programmersをやってみたら、 その結果に笑ってしまった。偶然、当たってる。部分的だけど。とくにウケたのは、 この説明にある "they see life through rose-colored glasses. (彼らはバラ色の眼鏡で世界を見ている)" という部分だる。 わはっははっっは。自分でもときどきそう思うよ。ただ、これはいつも楽天的であるという意味ではない。 実際、オレはよく落ちこむのだ -- が、それでもこの世界が「つまらない」ものだと思ったことは一度もない。 ただし、そのおもしろさを自分がフルに探検できてるかどうかは謎だけど。 それから、もうひとつ INFP の特徴として新山にあてはまるのが 「自分の中で『これがだ』という確固たる定義が存在しており、 正しくないと思うことは死んでもやらない」ということである (逆にいえば、そのポリシーに反しないかぎりは何でもやりたがる)。 よくいえば独善的。 しかし、この自分のポリシーとやらが他人に理解されているという自信はまったくない。 だいたいそんなものは普通、人に言ったりしないもんだ…。

でも実際、これまでの人生のなかで、新山の選択のうちかなりの部分は、 この原則に支配されてきたと思う。新山が考える“悪”というのは、 殺すとか嘘をつくといったわかりやすいものではない。 だいたいそんなの本当は「悪」なんかじゃない、どの動物も生きのびるために 他者を (直接にせよ間接にせよ) 殺しているのだから。 新山の考える“悪”というのは「猜疑心」とか「不安」に近いイメージだが、 もっとずっと微妙で、とらえどころがない。それはさしずめ現代におけるテロに似ている。 テロにおいて、個々のテロリストはもちろん悪いのだが、本当に悪いのは 「テロを生みだす世界」そのものだ。ここでは“悪”はピンポイントで固まっているのではなく、 人々の間をぬうように散布されている。そういう意味では、われわれ全員が悪人といえる。 (新山はキリスト教徒などとはちがって、人間の本性から分離可能な“悪”というもんを信じないので、 これはもとから人間に内在している性質の一部にすぎないと思う)。 たとえば「夜間飛行」で、リヴィエールが相手にしているのはそういった“悪”のひとつだ。 ちなみにこの“悪”には、それに対応する“善”というもんが存在しない。 「悪でない状態にする」ことはできるが、それが善というわけではないと思う。 むしろ、それはまた別の苦痛の元だ。つまり結論は? 「さっさと寝ろ。」

/06 [4]


(22:26)
“悪”について、続き。じっさいには新山はこの表現が気に入っているわけではない。 あんまり「悪、悪」いってるとアヤしい宗教みたいなので、これからは「そいつ」と呼ぶことにする。 べつに呼び方はどうでもいいんだ…。きのうの「夜間飛行」に関して、もうすこし書きたくなったので書く。

この小説では、リヴィエールが「そいつ」と戦っている。直接的には、 彼 (と、操縦士であるファビアン) が戦っている相手は暴風雨であるのだが、 じつはこの背後にはもっと大きなスケールの敵がいる。 どういうことか説明するより、引用したほうがはやい。

まず、主人公のリヴィエールが、欧州便 (南米-フランス間の郵便機) の操縦士に説教する場面 (強調は新山):

... リヴィエールは思うのだった。 「あの人々を、ぼくはみな愛している。ぼくが戦っているのは彼ら自身ではない、 彼らの中をよぎるもの、つまり過失がぼくの相手だ…」

リヴィエールはしばらく考えてから、ベルを押した。

「欧州便の操縦士に電話をかけて、出発前にぼくに会いにくるように言ってくれたまえ。 ... この便がむなしく引き返してくるようなことがあってはならない。 やつらに活を入れてやらないことには、夜というものがいつまでたってもやつらの不安の種だ」

(中略)

リヴィエールが彼を請じ入れて、言った。

「前回、君はじつに困ったことをしてくれたね。 なにしろ予報はあんなによかったのに、途中で引き返してしまったんだから。こわくなったのかね?」

不意をつかれて、操縦士は黙り込んだ。彼はリヴィエールをまともに見つめながら 「そうです」   リヴィエールは、こわかったといっているこの勇敢な若者を、 心の底で気の毒に思った。

「... 彼は部下の中でもいちばん勇気のある男だ…。あの晩、無事で帰れたのは実に 大したことだ。ただ、こう言っておけば今後もう怖がらなくなる。ぼくが責めているのは彼自身ではない。 彼を通じて、未知の世界の前に立った人間をすくみ上がらせるあの力だ。 もしぼくが彼に同情したり、彼の冒険談を真剣に傾聴したりしたら、 彼はまるで自分を途方もない神秘の世界からでも帰ってきたかのように思い込むだろう。 ところが、人間にとって真に恐しいのは、ただ神秘の世界だけなのだ。 神秘をなくすることが大切なのだ。われわれの搭乗員が、夜というあの暗い井戸の中へ、 わずかひとつのランプさえ持たずに、平気で扉を押しあけて入っていけるようにしなければいけないのだ。 ...」

そうこうしている間にアルゼンチン全土は暴風雨にみまわれ、ファビアンの操縦する パタゴニア便からの消息がとだえる。パイロットの生存は絶望的な状況の中で、 リヴィエールは予定を変更せず、欧州便を出発させる。

... アスンションから着陸した操縦士は、欧州便の操縦士が両手をポケットにつっこんで 機体によりかかっているのを見いだした。

「君が行くのか?」
「そうだ」
「パタゴニア便はもう着いたかい?」
「いや、消息不明だ。天気はどうだ?」
「いい天気だよ。ファビアンが行方不明になったのか?」

... 誰かが彼の発動機を動かした。操縦士は、機体によせかけたその肩に、 機が生動するのを感じた。彼の口がかすかに動いてその歯が月光を浴び、 若い猛獣のようにぎらりと光った。

「注意しろよ、夜だぜ」

同僚の忠告も耳には入らなかった。 両手をすっぽりポケットに入れたまま、操縦士はいま無言で微笑しだした。 それはかすかな微笑だったが、あの雲よりも、山よりも、海よりも力強い微笑だった。

「どうしたんだ?」
「あのわからずやのリヴィエールめが…ぼくが怖がると思っているんだよ!」

そしてリヴィエールは、その航空機を見送りに窓辺へ寄っていく。

... 機は、1分後には早くもブエノス・アイレスの上空を通過するはずだ。 まさにふたたびその戦いを続けようとするリヴィエールは、機の爆音が聞きたかった。 星の世界を行進する大軍勢の足音ようなその爆音が、生まれ、叫び、消えるのが 彼には聞きたかったのだ。 ... 彼がもし、たった一度でも出発を中止したら、夜間飛行の存在意義は失われてしまう。 あす、リヴィエールを非難するであろう気の弱い者どもを出し抜いて、彼はいま 夜の中へこの新しい搭乗員を放してやるのだ。 ... 勝利だの、敗北だのという言葉には、意味がない。今回リヴィエールが喫した敗北は、 どちらかといえば勝利に最も近い敗北だった。 大切なのはただひとつ、進展しつつある事態だけだ。 ...

すんげ〜〜〜マッチョな話だと思う人もいるだろうけど、 でも、これがサンテグジュペリって作家なんです。

結果として、リヴィエールは暴風雨には負けている。 おまけに彼は (タフすぎて) 部下から憎まれるほどのボスだし、その私生活はみじめなものだ。 しかし、もっと大きな視点では、彼ら (複数形) はこの戦いに、部分的にせよ 勝っているともいえる。新山にとっての“悪”というのは、ここで言及されてる 「人間をすくみ上がらせるあの力」のことである。 上にでてきた「夜」というのを「人生」に置きかえてみてほしい。自分の人生を前にして、 未知のものに対する根源的な恐れを利用して、人をおじけづかせるような何か、 それこそは“悪”だ!

でも、はっきりいって、これを「悪」と呼ぶのはふさわしくないと自分でも思う。 「悪」ってのは、ふつうはもっと小者のことを言うように思える。 人間の想像する「悪魔」とか「悪意」などというものは、いくら「悪のかぎり」をつくしてみても、 しょせん、とるに足らないものにしか見えない。 ここでいう“悪”はべつに人を殺したり法律に違反したりしないし、 それどころか、こうした不安を積極的に利用して財産を築いている人もけっこういるのだ。 …じつは、新山が (いまの) 言語処理の研究者になりたくなかった理由は、こうした理由が関係している。 それではおやすみ。

/10 [1]


(18:16)
基本的に、匿名性と“情報の質”とか“信頼性”とかを結びつける議論は、まったくおかしいと思う。 実世界で、面と向かって喋っていてすらまったく信用できないやつもいるのに、 ネット上で実名を出したからって信頼性が上がるものか? ふつうまともな人間なら内容を見るだろ。 しかも、こうした見方が普及してしまうと、微妙な利害が関係する場面では実名の (あるいは実名っぽい) 意見のほうが有利になってしまう。新山はそういうのが嫌いなので、 web 上には自分の利害に直接関係しそうなものは書かないようにしている。

たとえば、新山は現在の検索エンジン業界ともwikipedia業界 (?) とも直接の利害関係がいっさいないので、 なんでも言いたいことをいえるし、それに対して何のうしろめたさも感じない。 しかし、これがたとえば自分が働いている世界のことだと話は違う。 基本的に、いくら努力しても 100% 正直な (= 遠慮のない) ダメ出しではなくなってしまう。 Web 上で自分の仕事について語っているサイトはよく見かけるが、 もしそいつが実名で、自分の (あるいは競合他社の) 利害に影響しそうな発言が あったりすると、そのサイトはもはや新山にとっては醜悪な宣伝としか見えなくなる。 実名じゃなくてハンドルでも同じだ。最初から利害関係が明らかになっていればいいのだが、 そういう連中が「自分はどこどこの社員です」などと書くはずもなく、 第三者であるかのようなフリをしてる奴もいる。新山は、あるとき偶然そういった例を 見つけてしまい、最悪の気分になった (自分とはほとんど関係ない人間でよかった!)。 結局、こいつらはネットと現実世界との「分離」を利用した詐欺をやっているのだ。 彼らが気づているかどうかは知らないが、たとえ金銭が関係してなくても、 自分に関する印象を間接的に操作しようとするやつはインチキだる。いんちき反対。 でも、すくなくとも今の状況だと、ネット上における風の流布はいまのところ 実名ぐらい出したほうが有利そうだ。だって、不利な部分はいくらでも隠しておけるんだからさ。

そんなわけで、新山は自分の書いた本のことをほとんどこの日記に書かなかったし、 (学生のときは) 自分の研究に関する話もほとんど書かなかった。これはわざとである。 ちなみにいまの新山の立場をディスクロージャしておくと、 自分は現在、都内にある福祉機器メーカー (どうみたって零細だが、 この業界じゃあいちおう中堅ってことになってるらしい… ノーコメント) に勤務している。だからこの業界の利害に直接、あるいは間接に関連しそうなこと (たとえば、お役所の福祉制度に関することなど) は書かない。 ただし障害者についてはよく書いているので、この点で偏っているだろうと言われれば弁解できない。 でも、とりあえず自分を直接あるいは間接的に持ち上げかねない (また、他人からそう思われかねない) ことは避けるようにしている。 (もちろん、こうしたインチキに対してあなたがまったく無感覚な場合は話は別です。 あなたはなぁ〜んにも気にする必要ありません。)

…さて、先月ここに「匿名より実名のほうが気楽でいい」と書いたのだけど、実名を出して、 そのうえで integrity を保つためには、ある種の工夫が必要だと思う。 こうした対策のひとつとして、新山は「なるべく自分の不利益になりそうなことばかり書く」傾向がある。 ようするに、自分に対しても他人に対しても、文句ばっか書くのだ。 それでたとえ自分が嫌われたとしても、インチキよりはましだと考える。 かくして、今日も新山は文句ばっかり書いてる。 これはもうこの日記の定番スタイルと化してきてるような気さえする…。

さて、自分のことは実はどうでもよかった。オレはこういうことが言いたかったんだ: 「ネット == ユートピア信者」が何と言おうとも、second life がどれほど盛況しようとも (してるのか??)、 最終的にネット上の世界と現実世界は完全に一致する方向に向かっている。これは「そうあるべき」という 意味で言ってるのじゃなく、世界中の人々は確実にそれを望んでいるように見える、という意味で。 でなきゃ、これだけの人間がネット上で買い物したり地図を見たりするか? つまり、そのうち個人が「ネット上で言ったこと」は、実世界でも言う (言わされる) ことになるし、 その逆もそうなるだろう。そして、ネット上の意見も実世界の意見も、 フルスペックの懐疑 (と信頼) をまともに浴びることになるだろう。すると現在、 ネット上で「現実世界と分離した立場であること」を利用して意見をいっている人々 -- 匿名にせよ“実名”にせよ -- は、いずれ存在しなくなると思われる。

…さて、そうしたときに、一部の人々は「ネットが『つまらない』場所になる」とか主張する。 しかし、こうなったのは多数決の結果だ。そんで、どれくらいつまらなくなるかというと、 現実世界と同じくらいの「つまらなさ」になる。…それって十分面白いんじゃないの? でも、ほとんどの日本人は忘れているが、現実というのは実は変えられるのであって、 現実を変える覚悟があるのであればネットもたぶん変えられる。 でも、たいていの「ネット自由論者」は現実世界の問題に手を出す気なんかない。おそらくは。

(16:50)
なんだ、東京に帰ってきてもサムいじゃないか。

/12 [3]


(22:14)
またカサがぶっこわれた。むかつく。 いったいオレは年に何回カサをこわせば気がすむのだろうか?? けしからぬ!!!!
!! 1

なぜ世の人々のカサは壊れないのだろう。 強風の中を歩くとき、なんか傘が壊れないようにするコツがあるんだろうか。 もういっそのこと傘じゃなくて笠にするか。(dngn.)

/14 [5]


(01:17)
繰り返しを求める人は、たいてい臆病であ。

/14 [5]


(22:26)
セサミストリートにこんな有名人が出ているとは知らなかった! シリーヅ:

とくに驚いたのは最後の Anderson Cooper である。まさかこんなとこに出るとは。 おまけにインタビューもバカさ加減全開。しかし、わりとみんな平気でパロディやってる。 こいつら、なかなかノリがいいよなあ。

どうでもいいけど (どうでもよろ)、新山のいちばんのお気に入りキャラクターは クッキーモンスターである。 こいつクッキーを食っている ところを見ると 本当にクッキーが食いたくなるオレは、感化されすぎだろうか。 (最近の米国では、クッキーモンスターは肥満を煽るから敬遠されてるんだと。ホントかいな)

/15 [6]


(10:29)
土曜日の朝だというに、きょうはコーヒー豆を切らしていたことに気がついた。

fngeakpmneqq.

(17:53)
新山はよくソースコードの中を grep で検索するが、これまでは もっぱら grep -r (再帰的な検索オプション) を使っていた。 ところが Subversion のツリーでこれを使うと、ムカつく結果になる:
$ grep -r import .
...
./tools/dumppdf.py:import sys, re
./tools/dumppdf.py:from pdflib.pdfparser import PDFDocument, PDFParser, PDFStream, \
./tools/dumppdf.py:  import getopt
...
./tools/.svn/text-base/dumppdf.py.svn-base:import sys, re
./tools/.svn/text-base/dumppdf.py.svn-base:from pdflib.pdfparser import PDFDocument, PDFParser, PDFStream, \
./tools/.svn/text-base/dumppdf.py.svn-base:  import getopt
...

.svn ディレクトリの中のファイルが 2重にヒットしてしまうのだ。 .svn 以下のファイルは表示しないでほしいんだよ。 というか .svn 以下のファイルは探索するだけムダなので、 それ以下については探索を打ち切ってほしい (ついでに、 python 以外のファイルも検索しないでほしい)。 ということで、以下のような簡単なスクリプトをこしらえた。 これは、他の用途にも使えるかもしれない:

#!/bin/sh
unset LC_CTYPE
exec grep -i "$@" `find . -name .svn -prune -false -o -type f -name '*.py'`

ちょっと解説すると、`find ...` の部分がキモだ。 ここで条件を合致するファイルを列挙しているのだが、この find の文法は あまり直感的でない。 find の条件式はふつう -a (AND) でつなげたものとみなされるので、 この条件判定は、基本的には if 文を並べたものとして解釈できる。たとえば、以下の式:

$ find . -name bin -type d
これは、疑似コードでかくと
if -name bin then
  if -type d then
    -print;
と等価である (find ではかならず「一致したファイルに対するアクション」を定義する必要があり、 アクションを指定しない場合は最後に -print が追加されたものとして扱われる)。 途中の条件 (述語) がひとつでも False ならば、そのファイルは失格となる。

ところがここで -o (OR) を使うと、複数の並列な判定を入れることができる: (追記: 最初は "else のようなもの" と書いていたのだが、実際には else ではなく複数の並列なステートメントと考えるべきでした)

$ find . \( -name .svn -prune \) -o \( -type f -name '*.py' \)
これは、次のようになる:
{
  if -name .svn then
    if -prune then
      -print;
}
{
  if -type f then
    if -name '*.py' then
      -print;
}
上の -o} { に対応している。 -prune というのは「これ以上ディレクトリを下がらない」という指示をあらわす特殊な述語で、 この述語はその効果とは関係なくつねに True を返す。(find は、引数のなかに「検索条件っぽいもの」と 「動作っぽいもの」をどちらも入れることができるが、内部的にはすべて「条件式」として扱われる。 したがって、かならず True か False を返すことになっている。)

これを実行すると、こうなる:

$ find . \( -name .svn -prune \) -o \( -type f -name '*.py' \)
./tools/extent.py
...
./tools/dumppdf.py
./tools/.svn
./pdflib/pdfparser.py
...
./pdflib/psparser.py
./pdflib/.svn
./pdflib/__init__.py
./.svn

これで、たしかに .svn より下にあるファイルはいっさい表示されなくなったが、 -prune を適用したディレクトリ .svn 自身は表示されてしまっている。 なぜか? -prune はつねに True を返す述語だから、 たとえ「それ以下のディレクトリを下降禁止」にしても、「そのディレクトリ」自体は 一致してしまうのである。これを表示しないようにするには、 -prune のあとにさらに -false をつける。

$ find . \( -name .svn -prune -false \) -o \( -type f -name '*.py' \)

-false は、その名のとおりつねに False を返す述語である。 この式は、次のものと等価である:

{
  if -name .svn then
    if -prune then     (つねに True)
      if -false then   (つねに False)
        -print
}
{
  if -type f then
    if -name '*.py' then
      -print
}

こうすると、最初の -print は、決して実行されない。 これにより -prune されたディレクトリをブロックできる。 こうして欲しいファイルの一覧だけをうまく取得することができた。 あとはこれを grep の引数に渡してやれば完了である。

さて、上の例では if の有効範囲を示すためにカッコ \(\) を使ったが、 find では -o節は通常、一番外側の範囲をまとめるので、ここでのカッコは省略できる。 さらに Linux の find では最初の . も省略できるので、次のように書いてもいい:

$ find -name .svn -prune -false -o -type f -name '*.py'

ちなみに、最初に LC_CTYPE を unset しているのは、 これが日本語になっていると、grep -i したときにアホみたいに遅くなるからである。 おそらく日本語に (バイナリっぽいファイルを検索すると100倍くらい遅くなる。) すくなくとも GNU textutils ではそうだった。

てくるで、新山は grep で検索できないほど巨大なコードになったら、設計を考え直すべき という信念をもっております。以上

(23:37)
きょうは久しぶりに pyvnc2swf でも改良してみっか、と思ったら、 いつのまにかこんな時間になっていた。

いまやFLVのストリーム出力ができるようになてしまたので、 自分のデスクトップ画面をライブ配信することが可能になった。 つうか、そんなのやるために作ったんじゃないけど。 tcpserver をインストールしてあれば、

$ tcpserver -vRHl0 localhost 10000 sh -c 
  'x11vnc -quiet -bg -nopw -viewonly -localhost -cursor -wait 10 -defer 10 >/dev/null 2>&1 && 
   echo HTTP/1.0 200 OK && echo Content-Type: video/x-flv && echo && 
   ./vnc2swf.py -n -t flv -s 0.5 -o -'
とかやって、http://localhost:10000/ に接続するといまデスクトップで やってることが動画としてダウンロードできる。原理的には。 すんげー重そうだな。(やってみたけど実際重かった) こんなバカなことやってて、肝心の型検査システムがちっとも進まない。 あと残るは builtin method の実装なのだが、これが結構時間かかりそ。

/16 [0]


(14:35)
type checker のコードを軽く整形してからお昼を食いに行こう… とか思っていたら、もうこんな時間じゃないか! 2時間以上もやっていた。まるで、夕方のような空である。 まったく。今日はこれ以上アタマを使いたくないので図書館へ行こう。
(19:56)
やはりオレは煙草が嫌いだ。 喫茶店にいくと、出てからも数時間はタバコの臭いが身体にしみついて取れない。

Document ID: 9fbdae3d9ca4ac8e3791b0839060e1ad

Yusuke Shinyama