hirax.net::Keywords::「プログラマ」のブログ



1999-07-22[n年前へ]

失楽園殺人事件の犯人を探せ 

文章構造可視化ソフトのバグを取れ

 今回は
夏目漱石は温泉がお好き? - 文章構造を可視化するソフトをつくる - (1999.07.14)
の続きである。やりたいことは以下の3つ

  1. WordFreqのバグを取る。
  2. 定量化に必要な数値を出す。
  3. とにかく遊んでみる。
である。まずは、プログラムのバグを取ろう。前回、プログラム中にバグがあると書いたが、問題は私がbmonkey氏の正規表現を使った文字列探索/操作コンポーネント集ver0.16の仕様を勘違いしていたことによるものだった。ファイルにGrepを書けた際に、テキストファイル中の一行中に複数の適合する単語が存在した場合に、本来、一番最初に適合した単語の文だけが「適合する単語があったよ」と知らせてくれるのであるが、それを単語全部について教えてくれるものと勘違いしていたのだ。従って、一行中に探す単語が複数登場する場合には結局1回分しかカウントされなかったのである。まずはそれを直してみたい。「GrepでMatchした行中に改めて目的の単語が何回登場するかを調べる」という2段階にすることで今回の問題は解決する。

WordFreq.exe 1999.07.21Make版 wordfreq.lzh 338kB

 本WEBサイトのモットーは「質より量」である。...これはちょっと何だな...「下手な鉄砲も数撃ちゃ当たる」...これもちょと...「転がる石に...(もちろん日本版でなくて西洋版のだ)」といった方がニュアンスが良いかな?... 転がる石は精度を求めないのである。数をこなせば精度が悪くてもいい方角に転がっていくと思っているのだ。モンテカルロ理論である。「遊び」だし。というわけで、これはバグがあった言い訳である。

 さて次は、「定量化に必要な数値を出す」である。前回の題目で使った「ホトトギス」版「坊っちやん」のダウンロード元のWEBの作成者である木村功氏より、前回の話以後にいくつかアドバイスを頂いた。それが「定量化するにはどのようにしたら良いか」ということであった。それについては、最低限の機能をつけてみた。やったのはただひとつ。出現頻度の分散を計算するようにしただけである。この数値と出現平均値を用いて、色々な文章を解析すれば、このプログラムの返す値の出現分布の分散・平均値・有意水準などを導くことができるだろう。色々な時代の、色々な作家の、色々なジャンルの文章を解析し、それらから得られた値を調べてみればもしかしたら面白いことがわかるかもしれない。

 それでは、今回のプログラムを使って遊んでみよう。

 今回用いるテキストは小栗虫太郎の「失楽園殺人事件」だ。
青空文庫 ( http://www.aozora.gr.jp/)
から手に入れたものだ。今回のタイトルどおり、「失楽園殺人事件」において「犯人」を探してみよう。

「失楽園殺人事件」において「犯人」を探したもの

 ラストのほうに向かうに従い犯人の登場が増えて、山場を迎えているのがわかるだろう。「犯人」で検索したら次は探偵の番だ。「法水」で検索し、探偵がきちんと働いているか見てみよう。

「失楽園殺人事件」において「法水」を探したもの

 なかなか出ずっぱりで活躍している。もちろん、探偵役もラストでは活躍しているようだ。

 ここまで見ていただくとわかるだろうが、画面は前回のバージョンとほとんど同じである。前回は、1物理行あたり検索単語は1個までしか見つからなかったが、今回はきちんと複数見つかっているのがわかると思う。1物理行中でもきちんと結果が出るようになったおかげで、文章中から「。」を検索すると、物理行(段落と近いもの)中に含まれる「文」の数を調べることが出来る。妙に長い文節の出現頻度などを調べることが出来るのだ。こういったものは定量化にふさわしいのではないだろうか?

「失楽園殺人事件」において「。」を探したもの

 また、C++プログラマーのあなたは自分のプログラム中から「//」などを検索すると面白いのではないだろうか。コメントの出現頻度が手に取るようにわかるだろう。

 というわけで、今回はバグ修正のご報告である。

1999-12-30[n年前へ]

6502と並列計算とムーアの法則 

人間のクロック&スケールアップ


 「物理の散歩道」を読み直していると、とある文章に興味を覚えた。

  • 第五物理の散歩道 ロゲルギスト著 岩波新書
の中の「通信を考える」である。この本は、何度読み返しても新鮮である。

 「通信を考える」の中の興味を惹かれた部分は「信号の伝わる速度と距離と処理速度の関係」を論じている部分だ。例えば、計算機は処理速度を高めるためには回路の大きさを小さくしなければならないとか、人間の頭脳の働きの速さから集団生活の広がりの限界について論じているのだ。例えば、

  • 計算機の演算速度の時間スケール -> ナノ秒 = 10^-9s (クロックで考えると、1GHz)
  • 人間の演算速度の時間スケール -> サブ秒 = 10^-1s (クロックで考えると、10Hz)
ということから、計算機の大きさが0.12=1.2x10^-1m角として、地球の直径が12000km=1.2x10^7とすると、その空間スケールが先の時間スケールと同じ比すなわち10^8であると言及しているのだ。

 つまり、通信の速度が光速度であるとして、演算の単位クロックの間に通信が行われなければならないとするならば、計算機の時間・空間スケールと人間の時間・空間スケールは等しいだろう、という推論だ。
 
そして、さらにロゲルギストの想像は広がり、並列計算についても論じている。

 計算機が東京と大阪に離れて置かれていて、通信をしながら作業をするとしたら、人間の場合にはそれと同じ条件というのはどんなものだろうか、と彼らは考える。それは、光の速度で55時間、ちょうど冥王星の軌道直径の5倍程度の空間スケールになる、と論じている。それ以上、離れた場合には演算の過程を共に行うのは無理ではないかというのである。

 こういう文章を読んでいると、この文章が作られたのが30年以上前であることを忘れてしまいそうである。この人達の思索の自由さに憧れを感じてしまう。この人達は、頭の中にタイムマシンにでも持っているのだろうか、と感じてしまうのだ。

 ところで、私がコンピューターをいじるようになった頃は、Apple][の時代だった。といっても、私はお金があふれていたわけではないので、XXX電子でAplle][のコンパチ基盤を買って組み立てて使っていた。その基盤上の6502は1MHzで動いていた筈だ(あぁ、I/Oの6809派vs6502派の論争が懐かしい!)。

 それから20年程たち、CPUのクロックスピードは1GHzを越えようとしている。20年で1000倍である。そして、その集積度は、ムーア(GordonMoore)の法則の「半導体の性能と集積は、18ヶ月ごとに2倍になる」に従っている。

 それでは、人間はどうだろうか?人間の脳味噌のクロックがどの程度であるか測定されているかどうか、素人の私にはよくわからない。しかし、WEB上のデータとしては、例えば

というようなデータがある。ここでは、1演算/秒である。ロゲルギストの用いたものが10演算/秒である。これらは、かなり近い値と言える。もちろん、Mayoさんの演算速度はロゲルギストよりも一桁下であるわけだが、ロゲルギスト達と比べては可哀想というものだ。それに、おそらくMayoさんは謙遜しているのだと思われる。実はもう少し速いのだろう。それに比べて、私などは、二桁の演算(しかも足し算でも)になると1演算/秒もこなせるかどうか判らないくらいである。

 ロゲルギストの時代、すなわち30年以上前、から現在のMayo's Profileの値がほとんど変わっていないように、人間の演算スピードは変わるようなものではない。それは、そうだろう。ヒトのクロックスピードや集積度といったものは、変えるわけにはいかない。当然である。CPUと違ってプロセスルールを変化させるというような訳にはいかないのだ。

 それでは、演算性能を上げようとしたらどうするだろうか?そうなると、並列計算を行うのが自然だろう。単独のCPUの性能を上げるわけに行かなくても、共同作業を行えば、演算性能を上げることができる。

 現代はほとんどの作業が共同作業で行われる。また、その共同作業も大人数が関わるようになってきている。それは、どんな業種でも同じだ。一人では、なかなかできないことが多くなっている。
 それら共同作業、すなわち並列計算、を行う人達(例えれば並列計算機における各ノード)を増やし、それらの間の情報転送をすばやく行うことが多くの作業(計算)を行うための手順だろう。

 そこで、

で用いた
  • 人口増加( http://www.t3.rim.or.jp/~kabutoya/KABHTML/Yoi/2-1.html )
のデータをもう一度眺めてみることにしよう。

最近500年間の人口の変化

 なるほど、人間界の並列計算機におけるノード数は増加している。そして、各ノード間の通信速度を調べるために、まずは、

などの情報から、適当な通信の歴史を調べてみる。
西暦 内容
-4000 のろし
-2400 伝書鳩
-2300 馬による伝令制度
1837 モールス電信機
1876 ベグラハム=ベル電話機
1909 グリエルモ=マルコーン無線電話機
1973 Ethernet XeroxPARCで生まれる。(ちなみにEther=エーテル)
1979 DIX規格=10Mbps
1992 FastEthernet=100Mbps
 これを全部転送速度に直してみる。といっても、よくわからない部分も多いので、私が適当に決めてみる。それでは、その変化を示してみよう。とりあえず、ここ200年位の間のものを考える。
西暦 内容
1837 モールス電信機 = 2bps
1909 グリエルモ=マルコーン無線電話機=10kbps
1979 DIX規格=10Mbps
1992 FastEthernet=100Mbps
 という感じだ。グラフにすると、
最近200年間の情報伝送速度の変化

こんな感じである。対数グラフにおいて直線的に情報伝送速度が速くなっている。この関係は結構きれいである。
 別に意図してこういう数字にした訳ではないのだが、不思議なことである。
 このようにして、人間(ノード)間の転送レートが高くなることにより、先のような人口増加に伴うトラフィック増加をしのぐことができていると考えることもできるかもしれない。そして、人間達の共同作業、すなわち並列計算、を行うだけのバススピードを確保しているのである。

 最近、会社組織などで分社化とか事業分割とかの話題をよく耳にする。こういった時に、分割における時間と空間のスケールはよく考える必要があるだろう。分割が有効なのは、ほとんど独立なものを分割する場合のみである。並列計算における領域分割などと同じだ。

 共同作業がほとんどなく、結果のみをやりとりすれば良いような場合には分割による効果はあるだろう。その一方で、同じ事業・作業を行っているところが、離れていては作業の効率は上がらない。もし、技術系の会社でそのようなことを行うのであれば、事業や部署を並列化した際の真面目なシミュレーション位は行うべきだろう。いや、別に深い意図はないけど。

 こういったことは「新・闘わないプログラマ No.109 時代錯誤」に書かれていることとも少し似ているような気がする。

 さて、1999/12/30-2000/1/1は野沢温泉で温泉&スキーである。2000年問題で会社に泊まり込む人も多いが、私はスキー場で泊まり込みである。同時期に野沢温泉に行く人がいるならば、ぜひ一緒に「スキー場の特殊相対性理論」について討論したいと思う(スキー場で)。

2000-12-22[n年前へ]

子供の科学 

 少し前に本屋で「子供の科学」を立ち読みした。末尾の広告に懐かしくもドキドキした。そして、「めざせプログラマ!」がどうなっているのか興味深く読んだ。私の感想としては、私の好きだった「子供の科学」としては失敗だと思う。ファインマン物理学が大学生・高校生のみならず中学生・小学生に見せても良い教科書であるのと違って、少なくともこの連載は「子供の科学」向きではない。別にこの連載の内容自体が悪いなんていう資格はとてもじゃないが私には無いが…。

2000-12-24[n年前へ]

サンタクロースを捜して 

Double Role on Christmas Eve


 クリスマスが近くなると子供達は「サンタクロースにお願い」をし始める。といっても、子供達がサンタクロースがどこに住んでいるのか知っているわけもないし、かといってサンタクロースへの伝言板があるわけでもない。これがゴッサムシティに住んでいるバットマンなら夜空にバットシグナルを照らし出せば良いし、シティハンターなら駅の伝言板に書き込みをすればちゃんとメッセージは伝わるだろう。

 だけど、サンタクロースに関してはそんなホットラインは残念ながら無いのである。子供達はサンタクロースに「自分が欲しいもの」をどうやって伝えれば良いのか実際のところ判らないのだ。じゃぁ、子供達はどうすれば良いのだろう?どうすればサンタクロースが何処にいるのか知ることができるだろう?サンタクロースを探すにはどうしたら良いのだろうか?

 これまでなら、子供達は身の周りの大人達、自分よりも色んなことを知ってそうな大人達に「サンタクロースは何処にいるの?」と聞いていたに違いない。だけど、色んなことを知ってるはずの両親や保母さんも「サンタクロースが何処にいるか」は何も教えてくれない。残念ながら、色んなことを教えてくれる大人達もサンタクロースのことに関しては何故か何も知らないようなそぶりを見せる。

 そんな風に、これまでなら子供達には他に調べる術もなかった。だけど、今なら違う。インターネット上に「検索サイト」がたくさんあるのだ。今の子供達は例えばGoogleで「サンタ」と入力して検索のボタンを押すだけで、なんと25300件もの情報(2000.12.24現在)を集めることができる。子供達は「インターネット上でサンタクロースを捜す」ことができるのだ。

 だけど、子供達にはそんなサンタを捜す手段はあるのだけど、それでもなかなか上手くサンタを見つけられないことだろう。まだまだ、上手く情報を選別できないこともあるだろう。そこで、今回はそんな子供達のために、インターネットで「サンタクロースを捜して」みた結果を書いてみたいと思う。サンタクロースが誰だか調べるテクニックとそのヒントをホンの少しだけ書いてみたい、と思うのだ。
 

 さて、それではサンタクロースを捜してみることにしよう。まずは、「関係者を調べて」みる。サンタクロースと誰が関係していて、誰が関係していないのかを調べてみるのである。と、いきなり言われても判りづらいだろうから、まずは例を出してみたい。例えば、どうみてもサンタクロースの関係者のハズの「トナカイ」を考えてみよう。まずは、「トナカイ」をGoogleで検索すると23500件の情報がある。そして次に、「トナカイAND サンタ」で検索すると、9060件の情報があることがわかる。トナカイの全ての目撃情報(Googleによる)が9060件であるのに対して、「サンタと一緒にいるトナカイ」の情報は9060件の目撃情報があるのだ。つまり、9060/23500= 38.6%もの高い確率でトナカイは「サンタと一緒にいる」のである。
 

トナカイとサンタの「関係」 → どうみてもトナカイはサンタの関係者である

 この「トナカイとサンタの関係」を見せただけでは、少し疑問に思う人もいるだろう。そこで、次にサンタと無関係そうな白馬の場合で調べてみよう。果たして、白馬がサンタの関係者であるかを捜査してみるのだ。

 まずは、「白馬」単独で検索をすると108000件の目撃情報が見つかる。それでは、「白馬AND サンタ」で検索するとどうなるだろうか?なんと、795件しか見つからないのである。つまり、「サンタと一緒にいる白馬」は795/108000= 0.74%しかいないのだ。これは、どうみても白馬はサンタと無関係であることがわかるだろう。白馬に乗って現れるのはやはり「王子さま」であって、サンタではないのである。そしてまた、この検索方法の妥当性も納得して頂けることと思う。このやり方で検索を続けていけば、サンタの正体もいつか判るハズなのだ。
 

白馬とサンタの「関係」 → どうみても白馬はサンタと無関係である

 これを読んでいる子供達がこの検索方法を使えば、きっとサンタをいつか見つけることができるだろう。あとは子供達が自分で捜すことだろうから、もう私が捜すのはここまでだ。

 だけど、ちょっと気になることがあるのでそれだけは調べておきたいと思う。それは、サンタと子供と大人の関係だ。何故なら、去年「サンタが街にやってくる」の中で私は「サンタクロースの巡回問題」を考えることで、「子供達が大人になって、そしてサンタになる」と推理してみた。じゃぁ、サンタと子供と大人の関係は一体どうなっているのだろう?それだけは、ちょっと調べてみたいのだ。子供達がサンタのことを訊いても、サンタのことを何も知らなさそうなそぶりを見せる大人達は本当にサンタと無関係なのだろうか?それだけは調べておきたいと思うのである。

 そこで、サンタと一緒に目撃された(Googleに)子供と大人の割合を調べてみた結果が次の表だ。
 

サンタと子供と大人の関係
サンタと一緒に目撃された割合
子供1.4%
大人0.018%
(参考:プログラマー)0.57 %

 これを眺めてみると、とても興味深いことがわかる。なんと、サンタと一緒に目撃された子供の割合は1.4%であるのに対して、サンタと一緒に目撃された大人の割合は0.018%しかないのである。二桁も違うのだ。もう、どうみてもサンタと無関係そうなプログラマーでさえ(プログラマーには実に失礼であるが)、0.57%もサンタと一緒に目撃されているのに、大人はそれより遙かにサンタと一緒には現れないのである。0.018%なんてほとんど0%だと言っても良いくらいだ。サンタと大人が一緒に目撃されることはもう全然無いのである。

 さっきのトナカイの場合なんか、38.6%もサンタと一緒に目撃されていて、「サンタがいるところにはトナカイがいる」と言っても良いくらいなのに、それとは全く正反対だ。「サンタがいるところには大人はいない」のである。「サンタと大人が一緒に現れる」ことはないのだ。だから、きっと大人とサンタは無関係なのだろう。子供達がサンタクロースのことを大人達に訊いても何も教えてくれなかったのも当たり前だ。大人達はサンタと出会ったことがないのだから、それはしょうがない。だから、実は大人達はサンタのことを何も教えることができないのだ。ただ、サンタのことを本当に知らないだけなのだ。

 サンタが現れているときには大人の姿は見えず、大人が現れているときにはサンタは現れない。だから、大人達はサンタのことを知らない。そう単純にそれだけのことだ。ただそれだけのことだ。    だけど、もしかしたら本格ミステリー大好きの名探偵コナンのような子供であれば、そこに何かのトリックでも思いつくのかもしれない。   それでも、そんな名探偵コナンのような子供だってきっといつかは…
 

2002-03-23[n年前へ]

インドで考たこと Dualの有効性編 

 「負荷がかかる処理は用途ごとに複数台準備する方がよいのかな」には、「処理を操作・連携せさる処理を作業者がスムーズにできる限りは賛成」です。あと、単なる処理速度の話にはもう全然異議などありません。
 だけど、それが実際に作業を人間がするときの話だと、少し別。「処理を操作・連携せさる処理を作業者がスムーズにできる」ってなかなかWindows環境では難しかったりする場合も多いようにも思ったりします。
 例えば、ちなみに私のデスクトップのPCではMathematica、Photoshop, Premire, Illustrator, InDesighn, After Effects辺りが常時立ち上げて、連携させながら作業するわけです。片方で処理した結果をコピペしつつ違うソフトに突っ込んで処理させたり、Googleに色んなことを教えてもらいながら、VisualC++でソフトを書いてコンパイルして、何ていう風に。そんなタスク切り替えが頻繁におきる仕事が普通かどうかはさておき…。
 ところが、作業するワタシは一人なので、複数のソフトを色々切り替えるのにあまりに複数のPCでやるとワンクッション入って不便なんですねぇ…。モニタやキーボードやマウスを切り替え機で切り替えるのは、面倒ですから。一応今でもドコドア+LANクリップボードで二台のPCを使ってはいるのだけど、それですでに液晶ディスプレイ三枚…。なんか居室の作業では、複数のPCを切り替える時に、自分の頭の中のタスク切り替えが上手くいかない(というか次に頭の中のタスクを元に戻すのに時間がかかるような感じがする)ので、結局二台に戻してしまいました。
 プログレ・キーボード派だったワタシとしては、前は複数のPCに囲まれていたし、実験室ではそれぞれ1制御1PCで結局多数のPC群に囲まれているのですが、それが居室だとどうも感覚的にストレスがたまりましたね…。あと何よりデュアルのありがたいのはオンボロプログラムが暴走しまくっても、操作感覚は素早いままってとこ。(何だそりゃ…)
 もちろん、Mathematicaなんかはネットワークがらみがちゃんとしてるので、フロントエンドだけ自分のPCでカーネルは他のPCで動かしてますし、他のUNIX系のマシンで動くソフトに関してはもちろん処理だけそっちでやらせて、自分のPC上ではXクライアントしか動いてないわけです…。こういった、ソフトの表示系と内部処理を別のマシンで動かせるようになると、複数台使っていても操作感覚は変わらないし、とても便利なんですけどWindowsだとなかなかないですよねぇ、そんなの…。
 なので、ワタシはよく雑誌記事の単なるベンチマークを見ると、実際に行う作業を人間がしてるときの、操作性を確かめてみてもらいたいなぁ、と思うのです。「仕事はコンピューターがするんじゃない、人間がするんだぁ」って踊る大走査線風に言いたくなるのです。
 ただ、こうも思います。ささっと違う仕事に頭を切り替えるわけには行きづらいタイプの仕事、例えばソフトのプログラマーや込み入ったメカを設計するタイプの仕事などでは、こんな風な仕事の要求はされないだろうなぁ、とも思います。
 あっ、念のため、タイトルには意味無いです。あと、「それは、こーすりゃ解決さ」っていうツッコミなんがのどから手が出るほど欲しいです、ハイ。



■Powered by yagm.net