hirax.net::Keywords::「わからない」のブログ



2007-04-22[n年前へ]

48分、月を待つ 

 古今集に載せられているこの紀貫之の和歌は、日本を代表する春の和歌だろう。

人はいさ心もしらずふるさとは
花ぞむかしの香ににほひける
人の心はわからないけれど、花は昔と同じようにその匂いを香らせている…という誰もが知っているこの和歌の冒頭、「いさ」は「わからないけれど」という意味だ。「いさ」は昔は「不知」と書いて、「わからない・知らない・承伏できない」ということを指していた。だから、普通は「知らず」という言葉と共に使われることが多い。

 大野 晋と丸谷才一が書いた「日本語で一番大事なもの」 にこんな一節がある。

十六夜というのは十五夜の次の日でしょう。十五日までは、月がだんだん大きくなるんで、毎日待っているわけですよ。そして、いよいよ満月になった、明くる日は、もっと明るく出るだろうと待っている。ところが、十六夜になると月の出は少し遅くなって、山の端にかかっているようでさっと上がってこない -- いさようわけです。それが「いさよい」
広辞苑で「いさよい」をひくと、「進もうとして進まぬこと。ためらうこと」とされている。そして、「十六夜」の語源については、「陰暦16日の月は満月よりもおそく、ためらうようにして出てくるのでいう」と書かれている。この「陰暦16日の月は満月より遅い」という文は一体どのような現象を指しているのだろうか。あるいは、「いさよい」という言葉はどのような心持ちを指しているのだろう。「陰暦16日の月は満月より遅い」という言葉が語り継がれる間に、その意味が今ひとつわからなくなっているように感じられたので、この語句の背景を適当に想像し、その内容をここに書いてみることにした。

 旧暦は月の満ち欠けを基準として作られている。新月(朔)となる日が1日とされていて、旧暦15日を過ぎる頃に、満月を迎えることが多い。15日を過ぎるころというのは、新月から満月までがおよそ14.8日ほどで、それに新月の1日を足すと、旧暦で言うところの15.8日になるからである。だから、旧暦15日と16日の頃に、私たちは満月を見る。

Lunar-Triangle Calculator 月の満ち欠けの周期、満月から次の満月までの周期は、29.5日である。つまり、先ほどの「新月から満月までの14.8日」の2倍である。朔望月と呼ばれるこの29.5日の周期は、27.3日ほどかけて月が地球の周りを回り、そして、365.3 日かけて地球が太陽の周りを公転している結果だ。地球と月が持つ二つの公転周期が組み合わさることで、地表に立って月を眺める私たちは、29.5日の周期で月が満ちたり欠けたりするように見えることになる。たとえば、地球から見て太陽と月がちょうど反対方向にある時には、地球からは太陽に照らされた月、満月が見える。そして、地球から見て太陽と月が同じ方向にある時には、太陽の光には照らされない陰の部分の月、新月しか見えない。そんな風に太陽と月と地球の位置関係が変わるにつれて、月は姿を変えていく。

 満月の時は、地球を間において、太陽と月は反対方向に位置している。だから、昼夜の長さがほぼ同じになる春分の日や秋分の日であれば、太陽が東の空に昇るとき、月は西の地平線に沈むことになる。太陽が日本の私たちを照らす昼間には、月が地球と反対側で南アメリカの夜をほのかに照らしている。そして、太陽が西の空から沈むとき、ようやく月は東の地平線から夜空へと顔を見せ始める。太陽と月はいつも反対側の空にいる。

 新月の時は、地球から見ると、太陽と月は同じ方向に浮かんでいる。光り輝く太陽の近くにいるために見えないことが多いけれど、そこには陰の顔を見せる月がたたずんでいるはずだ。朝日が昇る前や、夕暮れ後になら、そんな月を見ることができるかもしれない。

 空を毎日眺めていれば、太陽の動きに対して月の動きが少しづつ遅れ・ずれていくことがわかる。そして、29.5日すると、また同じ太陽と月の位置関係に戻る。見かけの太陽の位置を基準にすると、月の位置は1日あたり360(°)/29.5(日) = 12°/日づつ東へとずれていく。つまり、日の出に対して月の出は遅くなり、同じように、日の入りに対して月の入りも12°/ 日づつ遅くなっていく。24時間で360°(= 1時間に15°)という地球の自転を考えて、日の出や日の入りに対する月の出や月の入りの遅れを時間換算するならば、1日あたり12/15時間 = 48分となる。日の出に対して月の出は1日あたり48分づつ遅くなっていくのである。

 満月を過ぎた旧暦十六夜の頃、月は太陽と反対側の空に浮かんでいる。太陽が西の空に沈んで後に、東の空から月が昇ってくる。前日よりも、月の出が48分ほど遅いのはいつものことだ。けれど、眩しい太陽が沈んで、満月に近い輝く月が昇るまで、夕暮れ過ぎの闇の中で、私たちは十六夜の月を待つことになる。前日の15日の夜には、太陽が沈む頃には、月が地平線から昇ってくる。夕暮れの時間には、世界を照らす役割が太陽から月へと手渡されるかのように、月は明るく夜の地表を照らし始めていた。しかし、十六夜には、太陽が沈んでから明るい月が昇るまでの間、私たちは暗闇の中で48分もの時間を過ごさなければならない。

 この十六夜の月を待つ心持ちが、まさに「いさ」なのだろう。48分間の暗闇は不知(いさ)の時間、わからない・知らない時間だ。明るい電灯のない時代・灯りのない場所で、日が暮れた後の景色は漆黒で塗りつぶされている。そして、暗闇の先に昇ってくるはずの十六夜の月はなかなか進まず昇ってこない。十六夜の48分の夕闇の中、私たちはいさよう月をただじっと待つ。先が見えない、わからない不知の時間、私たちは月を待つ。

人はいさ心もしらず我はただ
いつも今夜の月をしぞおもふ

           松永 貞徳

2007-04-29[n年前へ]

「無名関数」と「吾輩は猫である」 

吾輩は猫である 夏目漱石の「吾輩は猫である」は、雑誌「ホトトギス」に1905年1月に発表された。最初は、冒頭の章だけで完結する短い読み切り小説だった。

 吾輩は猫である。名前はまだ無い。 …吾輩がこの家へ住み込んだ当時は、主人以外のものにははなはだ不人望であった。どこへ行っても跳ね付けられて相手にしてくれ手がなかった。いかに珍重されなかったかは、今日に至るまで名前さえつけてくれないのでもわかる。
 数学ソフトウェア Mathematica でプログラムのスケッチ(素描)を作りながら、「この「名前はまだ無い・名前をつけてくれない」という言葉が頭の中に浮かんだ。

 「吾輩は猫である」を連想したのは、Mathematicaの「純関数」の勉強のための練習題材を書いていたときだ。Mathematica の入門・中級の講習会に参加すると、この純関数とやらが登場した途端に、講師が話す内容を見失ってしまうことが多い。講師の筋道が見えなくなってしまう理由は、純関数の必要性・存在価値といったものが今ひとつわからないままに、純関数がいきなり登場してくるからである。もちろん、「(数値でなく)関数を引数として与える」ということに慣れていない生徒が多いこともあって、いつも、純関数が登場した瞬間に、何かその場が失速したような感覚を受ける。

 話の流れ・必然性がなくても、文法をただ暗記することができる人であれば、おそらく何の問題もないのだと思う。あるいは、他のプログラミング言語をよく知っていて、文法の必然性が自然と理解できる人たちであったなら、これもまた問題は起きないのだろうと思う。しかし、私も含めて、入門・中級の講習会に来ているような、そうでない多くの人たちの場合は、純関数が登場した途端に、話についていけなくなることが多いように感じるのである。

 Mathematica における純関数 "Pure Function" というのは名前(シンボル)を持たない関数で、ほかの関数への引数などとして、関数の内容を書いた一瞬だけ使われるものだ。もう少し違う呼び方をしてしまえば、つまりそれは「無名関数」だ。「無名」というところが重要で、名前がないから、使ったら最後もう二度と呼ぶ・使うことはできない、ということである。つまりは、「使い捨ての関数」だ。この「関数を使い捨てる」というところで、どうしても引っかかってしまう。値を入力するのであれば、あまり考えることなどせずに、数字キーを2・3回押せばすむ。だから、値に名前(シンボル)と付けずに、使い捨てにすることには慣れている。けれど、関数を書く場合には、(ハッカーでない私たちは)頭も多少使わざるをえない。すると、せっかく考えて・苦労して書いたのだから、名前をつけて、あとで呼んでまた使うことができるようにしたい、などと思ってしまうのである。使い捨ての「無名」ということと、苦労をともなう「関数」ということを、なかなか重ね合わせることができないのである。

 そこで、自分なりの「純関数の存在価値・意義」を作ることで、その存在意義を納得したくて、純関数を使った例題を作ってみた。実は、それが前回の Spectrum Color Conversion を動かしているベース部分、「離散化を必要としない連続的なスペクトル演算・表示を扱うためのパッケージ」である。これは、無名関数(純関数)を使うための例題である。このパッケージを使うと、スペクトルを描くのに、

plotSpector[ (128 red[#] + 255 blue[#])& ];
というような命令でスペクトルを描くことができる。これは「強度128の赤色と強度255の青色を足したスペクトル」を描けという命令なのだが、この中の
(128 red[#] + 255 blue[#])&
という部分が、「強度128の赤色と強度255の青色を足したスペクトル」を表す無名関数だ。あるいは、
rgb=fitSpector[(D65[#]-128 cyan[#])&,red,green,blue]
というのは、「シアン色が128載せられた色」を、赤色と青色と緑色で近似しろという命令であるが、この (D65[#] - 128 cyan[#])& というのも、「シアン色が128載せられた色」という無名関数である。Spectrum Color Conversionこういう書き方をしてみると、スペクトルを示す「関数」ではあるが、見方によっては、スペクトルという「値」のようにも見えると思う。値のように見えることで、スペクトルを示す無名関数を引数として他の関数(命令)に渡すことへのアレルギーを低減してみようとしたのである。そして、(128 red[#] + 255 blue[#])& というようにあまり考えることなく直感的に無名関数を書くことができるようにすることで、その関数を使い捨てることへの違和感を減らそうとしてみた。さらに、こういった内容であれば、下手な名前をつけてしまうよりも、式そのままの方が内容・意味がわかりやすい、ということを実感してみようとしたのである。たとえば、(128 red[#] + 255 blue[#])& であれば、この式自体が「強度128の赤色と強度255の青色を足したスペクトル」という風に話しかけてくるように感じられ、下手に名前をつけてしまうよりは内容が見えることがわかると思う。

 こんな例題を作ることで、無名関数アレルギーが低減した、と言いたいところなのだけれど、関数を使い捨てることには、やはりまだ慣れることができそうにない。関数を引数として渡すことは自然に感じられるようになっても、無名関数に名前をつけて、再度その関数を呼んでみたい気持ちはなかなか止められそうにない。名前をつけるより、その関数の中身をそのまま書いた方がわかりやすいとわかっていても、単純な名前をつけてしまいたくなる欲望はなかなか止められそうにない。

 その理由を考えてみると、やはり、苦労をともなう「関数」を使い捨ての「無名」にしてしまう、ということに一因がある。そして、もう一つ、名前をつけることで、単純化して安心してしまいたくなる、ということがあるように思う。ほんの何文字かの関数であっても、その内容を自分の頭で考えるよりは、なにがしかの単純な言葉で表現された関数名を聞いて納得したくなることがあるように思う。

 「吾輩は猫である」の第一章の最後、つまり、当初の読み切り短編小説「吾輩は猫である」はこのように結ばれる。

 吾輩は御馳走も食わないから別段 肥りもしないが、まずまず健康でびっこにもならずにその日その日を暮している。鼠は決して取らない。おさんは未だに嫌いである。名前はまだつけてくれないが、欲をいっても際限がないから生涯この教師の家で無名の猫で終るつもりだ。
 「吾輩は猫である」を思い浮かべながら、無名関数について考えたせいか、それ以来、無名関数が「吾輩は~」と話しかけてくるような気がするようになった。無名関数を書くと、どこかで世界を眺めながら、「我が輩は青色と緑色を足した色である。名前はまだない」「名前はまだつけてくれないが、欲をいっても際限がないから生涯ここで無名で終るつもりだ」と無名関数が呟いているさまが目に浮かぶようになった。存在意義はあるけれど、無名のままの関数、そんなものを思い浮かべながら作ったのがSpectrum Color Conversion である。

2007-08-02[n年前へ]

n年前へ 

 from n年前へ.

 学生時代はずっと自転車をやっていた。
 就職して数年した頃、「自分の知識・技術を向上させる機会」や「考えたことを残しておく場所」がほとんどないことに気づきました。
 自宅から富士山が見える。この季節には、五合目から山頂まで何本も「光の道」が見える。
相棒の上島は、その後、外務省の外郭団体に就職し、南米のベネズエラあたりで嫁さんをもらい(すごい美人らしい)、その後はどうなったかわからないが、元気でやっているだろう。
そこで、自分が知りたいことを定期的に学び・考えてみることにしたわけです。
 大勢の登山者達の灯りが連なって、「光の道」が見えるようになる。まるで、アリがえさを運んでいるようすを上から眺めている感じだ。

2007-08-10[n年前へ]

画像処理 + Wiki 

 「画像処理 + Wiki」のプログラミングにハマっています。それは、作り上げるのが楽しくてハマっているという意味でもありますし、作り上げるのに苦労してハマっているという意味でもあります。当初の心づもりであれば、今日辺りからはサーバを仕立てて動かす予定だったのですが、日程の遅れ2週間…という感じです。というわけで、12日αテスト開始…という感じになりそうです。

 ハマっている理由は、当初「画像処理プログラム」だったものを、Wikiと組み合わせたくなったプログラマが「画像処理 + Wikiプログラム」に変え、そのWiki部分のボリュームを増やしたことにあります。そして、もう一つの理由が、「画像処理 + Wiki」のプロトタイプをノートPCで動かし、想定ユーザ層に重なる人たちに見せてみたところ、Wiki部分は「何が何だかわからない」「どう使うのかわからない」と言われたからです。というわけで、「何が何だかわかるようにする」化粧直しにハマっています。

2007-09-02[n年前へ]

タフネスとWEBアプリ 

 夏の夜の田舎町を、自分の足で走る。歩くようにゆっくり走る。

キャリアとは、轍(わだち)のことだ。轍が繋がり、そこに道が出来る。
 朝、WEBアプリケーションの管理をcookieに移行して、サーバ側を並列稼働させ始めた。そして、状態管理をRailsのコントローラからJavascript側に移行して、Railsのコントローラ機能を、Javascriptからのアクションに応える形になるように手を入れる。
 少し前に、「(相手に)心の中が見える装置」を作ってみました。あるいは、「(相手に)心の中を伝える装置」といえるようなものを作ってみました。
 ビュー側ならぬクライアント側がコントロールする「単なるイベント駆動」に変えたい部分と、その背後でデータが全て繋がっている部分とを、うまく頭の中で整理できない。
 ただ、どんな道にせよ、共通するのは、途中で必ず迷うということだ。どちらに進んで行けば良いのか、わからない時がきっとあるだろう。
 それでも、高速化のための処理を書く。

 そして、ケータイと連携させる部分を書き始めると、Imagenerator用に書いたGmailアクセスWWW::Mechanizeが動かなくなっていることに気づく。最後の最後のsubmitが上手く動かない。しかも、その理由が何だか全然わからない。
けれど、本当に大切なのは、わからないということへのタフネスを身につけることに精力を注ぐことだと私は思う。
 
それが、最良のキャリア教育であると、私は信じている。



■Powered by yagm.net