池位 他泣
今日は喪中だけど二年詣りに行っちゃうぞ。 なぜなら去年は行けてないから! へへんn
全部で2時間近くもかかっている。が、まだきちんと完成してない。 正月あけに気がむいたら続きを作る予定。
いま、この日記はじつは東京で書いていないのである。 といって実家にいるわけでもない。さてどこでしょう?
きょうの教訓: 新潟県はJR東日本と西日本がまざっている県だということを知った。
こういう考えはとても気の毒だ。もちろん、体重を減らしたいとか ドラッグ依存症をやめたい、などという程度の“改造”をしたい人は 世の中に沢山いるだろうし、新山自身だって、今の自分がキライな部分はたくさんある。 が、それと「ある目標に向かって自己改造する」というのは、なんか根本的に違うような…。
速報: 新山、今年は入院せず。 (もう一生しない予定)
今日は、よぅーやくデバッグが終わってリリースした。 そしたら、ダレーっとして何もやる気がおきない。 今月はやったらイソガシく (〆切がせまっているやつが 2つあったんだからしょうがない)、 ほとんど日記をかく暇もなかったし、メールやカードを書く暇もなかった。
それにしてもだな…。
最近、会社のでっかい案件でお客からの入金がようやくあり、 社長一同、みんなホッとした顔になった。なんしろ額がデカいからなー (もちろんこれはウチのような会社にとって、という意味である。 大企業の社員が聞いたら鼻で笑うだろう。) 中小企業で働く醍醐味のひとつに、 社員がみんな会社の資金繰りについて気にするというのがある。 っていうか、新山は勤めるまで、支払日というものがかくも 重要な意味をもつとは知りもしなかった。いやはや、世の中 (ヨノナッキブ) というのは、 たいしたもんだある。
どうでもいいが (どうでもよろ)、新山はおそろしいセイデンカー (静電気'er) だ。 あるいはバチバチ君。とりわけいまは毛糸のセーターを着てるから、なおさらひどい。 だれかと手が触れるたびに「あ、ごめん」といっている。
おまえの考えはおれの考え、おれの考えはおれの考え。
てくるで、きのうの朝、明治通りでサンタ服をきて自転車に乗った おばちゃん (帽子付) を見かけた。そのオバチャンの貧相な感じと サンタ服のあまりのミスマッチのすごさにショックを受けた。 日本はシュールな国だ。
(「こいつは毎日こんなことばっか考えて生活してんのか??」…と考えたあなた。Yes!!)
しかし、そもそも騙されやすさは本当に悪いのか、という疑問がある。 たとえば新山はよく「騙されやすい人」を見かけるのだが、 そういう人は (その騙されやすさのお陰で) わりと性善説を信じている「お人好し」だったりする。 ある意味、その欠点こそが人に好かれる理由かもしれないのだ。 そういうことって、よくあるよな。 物事の長所と短所はほんとうに分けることができるのか?
「騙されやすさ」に戻っていえば、本当の懐疑的な態度とは、 あらゆる情報に対して懐疑的になることであって、 性善説・性悪説のどちらかに傾くことではない。つまり、他人を悪人と仮定しすぎてもいけないし、 かといって善人と仮定しすぎてもいけない。結局 (ケッキョキ)、バランスが重要ってことなのだけど。 そしてありとあらゆる場面で判断を留保せねばならなくなる。しかし世の中、そんな優柔不断なことばっかいってる 暇もないので、どっかで決断を下さねばならないのだが…。ようするに「懐疑的な態度」とは、 「居心地の悪さに堪える」ことだ。これは多くの人にとって、精神的にとても疲れる。 でも、新山の考える「強さ」というのは、そういった宙ぶらりんな感じを どれだけ堪えることができるかだと思うね。 And believe me, it's very HARD.
ジレンマは「解決する」べきものではなく、むしろ積極的に受け入れるべきものである。
新山の印象では、あきらかに左側のおばさんのほうが事実を冷静に見ており、 右側のおじさんは“政治家然”とした聞こえのいい弁明に終始している (ちなみにこれは 「温暖化は是か非か?」というようはアホな議論ではない、2人とも温暖化の対策は必要だと考えている)。 で、ここでいいのは調停役のレポーター (Paul Jay) だ。これが容赦ないおっさんで、 よくあるどっかのテレビ討論の司会者みたいに、 ただ両サイドを煽って適度に言いたいこと言わせて時間が来たら終わり、ではない。 積極的に議論をかみ砕こうと割って入るのである。 「あなたがたは論点をあちこち跳びすぎています、まずひとつに絞って話してください」 「オーケイ、まず第一にですね…」 「『まず第一に』はないんです、一個だけにしてください」 という有無を言わさぬ介入ぶり。それにしてもこいつら、エキサイトしてるなあ。
ところで、(てくるで、) アマゾンがいまや CO2 の吸収先ではなくて 発生源になっているという話は初めて知った。ちなみに温暖化問題についての 科学的な議論を聞きたければ これか これが 非常におすすめである。こうした議論が日本国内から聞かれることは よもやあるのかと思ってしまうケド…
今はなにをやっているかというと、このたび Adobe がフリーで公開した CMap table を使った 文字抽出を実装していたのである。あいかわらず PDFの文字処理まわりは複雑だ。 Adobe は日中韓国語を表示する際には CID という独自の文字コード体系を使っている。 これは Unicode などとは違い、言語を超えて統一されてはいず、 たとえば日本語の文字「あ」なら Adobe-Japan1-843 などと表現される。 実際には CID を「文字」と呼ぶのはやや厳密性に欠けると思う。 これは「文字」というよりも「グリフ」を表している。でもそれをいったら Unicode だって 「文字」じゃないような気がするのだが、もうこのへんはみんな混乱してる。 とにかく、PDFからテキストを抽出するには、まずPDF中のバイト列を CIDの列に変換し、 さらにそこから Unicode文字に逆変換するといったプロセスを経なければならない。 しかし PDF ではこの CID をいくつもの異なる方法で指定できるようになっていて、 文字の名前 (Adobe glyph names) でも指定できるし、その他既存のコンピュータや ワープロで使っていたエンコーディングでも指定できるようになっている。UTF-8 や UTF-16 は そのうちのひとつの方式にすぎない。なぜなら Adobe-Japan1 は Unicode (の日本語部分) よりも 多くのグリフをサポートしているからだ。Adobe CID は Unicode よりも印刷目的に寄っているので、 Unicode では区別できない文字 (たとえば日本の漢字と簡体字でグリフが異なる「写」など) も 区別できる。しかしまあこれがとにかく複雑でして…
WOTD: overdefensiveness.
さいきん、ようやく V.S. Ramachandran, "Phantoms in the Brain" を読み始めた (邦訳は角川から出ている「脳のなかの幽霊」)。この本は…あぶない。 確実に乗り過ごす危険性がある。1分ぐらい読むたびに、おもわず考え込んでしまうような 内容が羅列されている。しかし著者の語り口はきわめてカジュアルなので、原語でも 1日1章ペースぐらいで読みやすい。新山が最初に Ramachandran の名前を聞いたのは、 たぶん 2000年ごろ、アルクの英会話講座の中で "BBC Health Matters" という コーナーがあって、そこでは BBC の医療関連の番組を録音したものをやっていた。 そこで "Dr. Ramachandran, the first man who amputate phantom limbs." として、著者のインタビューが載っていた。 当時の新山にとっては "amputate" とかいう単語も新鮮に聞こえたものだったことよ。
とりわけ興味をひくのは、人間の知覚というのは受動的・一方向のものではなく 脳の「思いこみ」によって作りされるイメージの「仮説←→検証」という フィードバックプロセスである、という部分だ。これは別に彼以外の人間も言っていることだが、 ラマチャンドランは彼なりのやり方でこれを説明する論拠を見いだしたということだろう。 それから、ほんらい人間が単一の一枚岩なプロセスだと考えている処理 (視覚や自己意識など) が、じつは複数の並列な層からなる錯覚なのではないかと 推察するくだりもおもしろい。おそらく人間の思考は (進化の過程で発展してきた) かなり複合的・場当たり的なアルゴリズムの集合から成り立っているに違いない。 にもかかわらず、ラマチャンドランは「基本原理は単純なはずだ」と書いている。 これらの観察が視覚野だけにあてはまるというのは、なんか物事の道理に合わないので、 そうすると当然言語処理にも同様の法則があてはまるはずだ。 そうすると、どういうことになるか? かくして、新山は1ページ読むたびに 考えこんでボーっとしてしまうのであった。
チャンドラセカール限界
Date: Wed, 9 Dec 2009 23:42:04 +0100 Subject: Need mouse to become tiger?
これを読んで「タイガーって、あのタイガーのことか?? spammerもだいぶ頑張ってるなあ」と一瞬思ってしまった。うそ
さらに次の週の講習でわかったこと。 手話はよく視覚言語であるといわれるが、新山の感覚では 「情景言語」とでも呼んだほうがなんとなくしっくりくるということ。 というのは、基本的に手話が伝達することというのは (音声言語のように) 時系列による情報ではないからである。もちろん時系列的な情報も 表現可能だが、多くの場合、(手話の)話者がやっているのは 「まず伝えたいことの情景を頭の中に構築し、 それを手を使って描画する」ということらしいからだ。 逆にいえば、自分の考えている「絵」さえきちんと相手に伝えられれば、 表現そのものは既存の文法や単語からやや逸脱してもかまわない。 この意味で、手話はときにひどく“創造的”になりうる。 もっとも、音声言語だってかなり創造的な表現をやるケースもあるのだが、 ただ音声は離散的な文字列で表記できるとみんな思っているために (←実際にはぜんぜん違う)、 動いている空間が小さいように感じられるだけだろう。 そもそも手話だって「離散的」なはずなのだが、訓練していない人間には その「単位」はわからない。音声にしても実は同じだし (英語に慣れていない人間が英語を聴くと、単語の区切りがぜんぜんわかんないでしょ?)、 文字でもそうだ (たとえばアラビア語の文章、あんなのどうやって単語を区別しろというんだ!)。
どうでもいいけろ (どうでもよろ、) さいきん自分の書く文章が前にもましてホンヤク的口調になってきたのは 気のせいか? なぜだ、いまは前とちがって、日常的に日本語を使っているとゆうのに…。
C# (というか .NET) の流儀では、イベントハンドラはみな 次のsignatureを持つことになってる:
void MyEventHandler(object sender, EventArgs args);
ここで引数 sender
は実際にその event を fire した
送り主のオブジェクトが入り、EventArgs
にはその他の
付随した情報が入る。ただし、多くの場合 EventArgs は
何の情報も持たない「空の」クラスである。
これはただ signature を合わせるためだけに使われる:
しかし、たとえば KeyDown イベントなどの場合は情報が入っている。 この場合、class EventArgs { }
EventArgs
を継承させたクラスに
必要な情報を入れて渡す:
こうすることにより、基底クラスの signature を変える必要がない。 そんな情報が来ていることを知らないクラスは、 普通にclass KeyEventArgs : EventArgs { public int KeyCode; ... }
EventArgs
として受けとってもよいからである。
この仕組みはよくできているのだが、ここで出てくる設計上の疑問は
自分で新たな event を定義する場合、なまじEventArgs
は拡張できるので、
ついイベントの関連情報を「なんでもかんでもEventArgs
として渡したくなる」状況が発生する。
しかし実際には、.NET の多くの組み込みライブラリがただの EventArgs
しか使っていない。
たとえばウィンドウのサイズ変更があった場合に通知する Form
の Resize
などは、
実際に変更されたサイズを知らせてはくれない。Resize
を受けとってから、
その送り元ウィンドウに現在のサイズを問い合わせる仕様になっている。
これがどのように一般化されるのかと考えてみるに、結局 (ケッキョキ)、 次のようなモデルの違いとして説明がつく:
EventArgs
に含める必要はない。
(イベントを受けた側があとから問い合わせればすむことだ)
EventArgs
の中に含める必要がある。
この違いを状態遷移図で表すとこうなる。
モデル自身の状態が重要な場合 (たとえばウィンドウサイズの変更など)、
モデルの各状態は異なるラベルをもっているが、その間をむすぶ状態遷移の矢印には、
ラベルは存在しない、ただの“矢印”である。このような場合は EventArgs
は
「からっぽ」でよい:
いっぽうで、モデルに起きた変化そのものが重要な場合 (たとえばキーの押下など)、
それによって変化したモデルの状態はあまり区別されない。むしろ、
その変化の原因 (あるいは差異) である“矢印”の情報が重要だ。
この情報を保持するのが EventArgs
(を継承したクラス) である:
…こうしてみると、同じ C# の event といっても、 実は 2通りの (意味的にかなり異なる) 利用法があるわけだ。 もちろん、人間はこんなこと知らなくてもなんとなくテキトーに プログラムできてしまうわけだが、複雑化したり長期化したりする プロジェクトの場合、こうした違いをあらかじめはっきり意識しておかないと、 わりと厄介なことになる。たぶん
たいていの (プログラマを含む) 人は、ふだん自分がなにげなく使っている 概念の中にある曖昧性や非一貫性に気づかない。人はある意味、 自分自身を騙しながら生活しているのだ。 個人生活ではこれらは大した問題とはならないが、複数の人がからむ プロジェクトでは大きな問題となる。
(余談1) これは event に限ったことじゃないが、計算機のプログラミングで 使われている機構は、あくまで“機構”であって、 人間が考える意味的な“概念”とは必ずしも完全に一致してないということが重要である。 とゆうか、このことはもっと一般的に理解されてもよいと思う。 たとえば“イベント”は一般的には物事の「通知」をすると説明されているが、 「通知」と一言にいっても、上にあげたように実際には意味的にぜんぜん違う「通知」がありうるし、 “ポインタ”だって一言に「指し示すもの」といっても、ぜんぜん意味的に違った役割がありうる。 (たとえばCの関数で引数の値を外部から変えるために使われるポインタと、 システムのグローバルな資源を取得するときに使われるポインタを考えてみるといい。) “変数”もまたしかり。一時的な計算領域として使われる変数もあれば、 世界の状態を記述するために使われる変数だってある。(しかし、 「一時的な計算領域」に使われる変数のほうが「世界の状態」をあらわす変数よりも メモリ上に長く存在するという状況だってあるかもしれない。) こうした中で「ポインタ」「変数」などの概念をほんとうに (その曖昧さも含めて) 理解するためには、プログラマは自分の思考過程を厳密に解剖することが必要だ。 で、それには結局たくさん経験をつんで慣れるしかない。 これはちょうど量子力学で、「電子」が厳密には粒じゃないし、 かといって完全にフワフワした霧のようなものでもない、量子力学の数式にある程度 慣れた人にしか語りようのない「何か」であるというのと同じようなものかもしれない。 どの専門分野にも、おそらくこういう「素人の常識では語りえない概念」といったものが あるのだろう…。
(余談2) この意味で、日常的な概念を分析的・批判的に吟味するという手法は、 もっと真面目に研究されてもよさそうなもんだ (フレーゲがやったようなやり方ではなく、もっと現代的なドメインで、 現代的な手法をとり入れて)。 新山は、現在の言語学あるいは“自然言語処理 (笑)”が本当の意味で (工学的に) 役に立てるのは、おそらくここだろうとかなり真剣に思っている。 しかし新山の見るところ、いまの言語処理屋のほとんどは、 これとは正反対の「まぜっ返し」ばかりやっておりますが…。 まあ、てっとり早く名声を得る/カネを儲けるんならそれが定石だわな。
“曖昧な目的を達成するというふれこみの道具ほど、実際には何も意味のあることをしない”
例: CASEツール
(そして、ある日突然 )
Document ID: 65f66f3b41a5c373c7ae3a5d44edc03f
Yusuke Shinyama