トップ 追記

日々の破片

Subscribe with livedoor Reader
著作一覧

2016-12-04

_ メタプログラミングについてのメモ

メタプログラミング、日本語で書けば超プログラミング。

最初に「超」を強く意識させられたのは、大学2年の一般教養の数学だ。 なぜか受講するのがおれ1人だったので、教授が初日にあきれたのか、1冊の本を買えと言ったかくれたのか覚えてないが、読んで出席して質問しろ形式となった。

それが数学から超数学へだった。

数学から超数学へ―ゲーデルの証明(E.ナーゲル/J.R.ニューマン/はやし はじめ)

超数学は、数学を斜め上(「斜め」の部分はレトリック)から研究する学問だというのは読み始めてすぐにわかる。数学という学問がどのようなお膳立てで成り立っているかを解明することにある。いずれにしても、メタに考えるには常に「上から目線」の立場に自分を置くべきだ。「上から目線」で語れるということは実に良いことなのだ。

メタプログラミングの場合、それはプログラミングを斜め上からプログラムすることになる。

ちょっと前までは最初に出会うメタプログラミングは、Cのプリプロセッサだろう。

IDEによる補完サポートがないCのプログラミングで構造体SのインスタンスAへインスタンスBから同名のフィールドAからZへ詰め替えを行うコードは以下のようにうんざりするものとなる。

typedef struct {
  int field_A;
  // (24行省略)
  int field_Z;
} S;
S A;
S B;
A.field_A = B.field_A;
...(24行省略)
A.field_Z = B.field_Z;

(もちろん、全フィールドのコピーであればA = B;で済むわけだが、他にもたくさんフィールドがあって、ここではこの26個のみを対象としたい場合とする)

うんざりするのが嫌な人(それ自体はまっとうな感覚である)は、コピペを覚えて、最初の行をコピーして25回ペーストして50個のAをそれぞれ2個ずつのBからZへ直していく。コピペプログラマの出来上がりである。彼はここで学んだコピペ技術を一生大事にするだろう。

それは悪いことではない。正しく常に機械のように正確に字の置き換えが可能ならば。

が、そこで満足せずに斜め上からコードを眺めてみるとまた違った風景が見える。

このばかげた26行のコードは良く見れば同じパターンの繰り返しだ。

繰り返しはばかげているので、繰り返し部分をマクロにする。

#define B2A(x) A.filed_##x = B.field_##x;
B2A(A)
...(24行省略)
B2A(Z)

ずいぶん手数が減った。

ここではA.field_(x) = B.field_(x);というコードの生成をプリプロセッサマクロによってプログラムしたわけだ。

が、26行の打ち込みが必要なことは変わらない。

とは言え、ここでコピペ技術を駆使すると、最初は各行に対して2文字を置き換える必要があったのが、わずか1文字で済むようになっている。作業が半分に減った! 当然、あり得る置き換えミスも半分に減った勘定だ。

だが、なぜ手作業で25個も文字を置き換えなければならんのだ?

もしfield_A~Zの型が同じであれば、次のように定義すれば詰め替えはさらに楽になる。

typedef enum {
   field_A,
   ...(24行省略)
   field_Z,
   filed_count
} SFiled;
typedef struct {
  int field[filed_count];
} S;
S A;
S B;
for (int i = field_A; i < filed_count; i++) {
    A.field[i] = B.field[i];
}

構造体のフィールドは配列に変えたが、アクセスに直定数ではなく、filed_Aやfield_Zという列挙子を使う限りにおいて安全性は最初のものとそれほどは変わらない(個々のフィールドへのアクセスについては、フィールド名を記述しなければならない分だけ手数が増えるのでフィールド名か列挙名を工夫する必要がある)。

これはソースコードレベルでのメタプログラミングではないが、フィールドの定義というデザインレベルのプログラミングによる、メタプログラミングと言えなくもない。

同じように、ソースコード上でのメタプログラミングを離れても、エディターマクロであるとか、スクリプトを書くとか、他にもソースコード記述時の繰り返し作業をなくして人間の代わりにソースコードを吐き出す手段はいくらでもあることに気付く。

これらもプログラム(ここではソースコード)をプログラミング(ここでは生成するプログラムを作る)する意味においてメタプログラミングなのだった。

結局のところメタプログラミングの目的は、人間の作業の低減にある。

人間の作業は確実に間違いを伴う。しかも手の動く速度が律速となる。したがって、手作業をどれだけ減らすかが作成したプログラムの品質の高さと生産性のキーとなる。

そのためには、機械化しやすいようにあらかじめターゲットとなるシステム内に出現する要素の名前をデザインしておくことも重要となる。

DRYにやれるのは、逆に言えば、名前なり操作なりパターンなり要素なり構成部品なりが重複しているからだ。

重複しているからこそ、重複点を串刺しして、単一のものにまとめることが可能となる。

テーブル名、カラム名、モジュール名、パラメータ名、ファイル名、モジュール名、クラス名、メンバ名などのシステムのさまざまな構成要素の同じ意味にマップされるべきものが、あらかじめ厳密に異なり、マッピング不可能な名前として定義されていたら、しかも意味も微妙に異なっていてある時は同一、ある場所では包含、ある処理においては無関係で他の要素によって置換されたりしていたら、これらをDRYに処理すること自体が難問となる。データの重複をなくしておくことも必要となるわけだ(バックアップや代替構成が不要という意味ではない)。

すると、メタプロングラミングのためには、あらかじめまともなデザインが必要だし、それを決めるのはアーキテクチャだ。

というわけで、個々のプログラミング言語でのメタプログラミングの技術も肝要だし

メタプログラミングRuby 第2版(Paolo Perrotta/角 征典) (やりやすい言語というものはある)

クラスライブラリ(というよりも仮想マシンのレベル)が実行時のプログラム自体の情報取得と操作をサポートしていることも重要だが

メタプログラミング.NET(Kevin Hazzard/Jason Bock/長尾高弘)

より重要なのは、ソフトウェアシステム全体をどう考えるかという上から目線となる。

で、エバーグリーンで常緑な達人プログラマーはそういう観点について学ぶための本なのだ。

新装版 達人プログラマー 職人から名匠への道(Andrew Hunt/David Thomas/村上雅章) (したがって書かれている要素技術は20世紀のものなのだが、常緑を歌えるということなのだ)

2016-12-01

_ ミヒャエル・コールハースの運命

以前古書店で購入したクライストのミヒャエル・コールハースの運命-或る古記録より を読了。

最初の20ページ弱にえらく難航したが(一度読み始めて放置していた)、突然シュトルム・ウント・ドランクッがやってきた。

あっという間に引き込まれて読了(もともと100ページちょっとの薄い本なのだ)。

例によって、シラーのドンカルロス-スペインの皇子を探していて見つからないので代わりに買ったのだ。

誠実にして温厚な長者である馬喰のミヒャエルコールハースは部下を連れて国境(神聖ローマ帝国なので各王国は異なる国なのだ)を越えようと、かねて懇意にしてもらっているサクソニア国境(なぜサクソニアなのかは、クライストの反ナポレオン愛国意識からライン同盟を敵視しているからだと解説にあった)に入ったところのトロンカ公の城を訪れる。

すると先代はみまかっていて、公子が当主として采配していた。

そこで無理難題を言いつけられ、結果的に馬を止め置かれてしまい、世話役が必要と部下も軟禁されてしまう。

ドレスデンで所用をすませ戻ると、見事な名馬中の名馬の黒馬3頭は無残に痩せ衰え駄馬中の駄馬と変じている。どころか、屈強だった部下も、無残な姿となっている。

コールハースは憤然とドレスデンの裁判所に訴える。

が、トロンカ公子(と表記されるが、現在の当主なんだからトロンカ公のような……)の親類縁者はあらゆるところにいて、すべて棄却されてしまう。

懇意のドレスデン市長(かな)がとりなしを約束してくれるが、訴状が選帝侯の目に届く前にトロンカの親戚の侍従によって、これも握りつぶされる。

それではと、選定候へ直訴しようと財産を片付け始めると(善良なるコールハースは、トロンカの理不尽を法律で裁きたいのだ)、妻のリースベトがそれを止める。自分がベルリンへ行き訴える。おそらく女の私のほうがその役にはふさわしい。

しかしリースベトは宮廷で直訴する前に事故と見せかけて殺されてしまう。

ついにコールハースの善良なる精神を怒りが突き破る。突破者の誕生である。

部下10数名を引き連れ騎馬隊を結成、サクソニアに入るとトロンカ城を制圧、火をつけ、殺戮を開始する。

しかしトロンカ公子は掛け軸の裏の抜け穴から炭小屋経由で叔母の営む修道院へ逃走。

コールハースはさらに反逆の徒や化外の民を巻き込みながら数100人規模の軍団となり、各地を制圧、放火、殺戮を繰り広げながらトロンカを追い詰める。

殺戮、放火で苦しんでいるにも関わらず、サクソニアの人民は、本来のコールハースの善良篤実さとトロンカ一族の無法っぷりを知っているため、むしろコールハース反乱軍に対して好意的ですらある。

(ここで次々と繰り広げられる各地の制圧と、国家側の軍隊との戦闘っぷりが、がまさに疾風怒濤(というキーワードもちゃんと出てくるが、執筆時期は19世紀に入っているのでクライスト自身はシュトルム・ウント・ドランクッではない)でむちゃくちゃにおもしろい。まるで曹操のチンタオ制圧のようだ)

たかが下郎1人に国家を荒らされ、貴族の命が付け狙われていては、しめしがつかぬ、とサクソニアの宮廷は大騒ぎとなる。

そこにマルティンルター登場。

コールハースについて、裁判所によって却下された訴えを逆恨みして悪逆非道の限りを尽くしていると吹き込まれたルターは、コールハースに対する弾劾状を記し、ビラ撒き攻撃を開始する。

それを読んだコールハース、愕然として深夜単独でルターを訪問。

驚くルター(こいつ、すごく嫌な奴だが、それでも正義の人ではある)にトロンカの理不尽を説く。

ルター、コールハースを許しはしないが、選帝侯への取次とそのための大赦(天下の極悪人として今や知られるコールハースを安全に選帝侯と会見させるためだ)のために労をとることを約束して、コールハースを家から追い出す。

かくしてコールハースは晴れてサクソニア選帝侯のもとで正当な裁判を得ることができることとなる。

裁判官は公平無私な人であった。彼はコールハース側に立ち、トロンカと裁判の公平を破ったその一族を強く弾劾する。

市民はみな、コールハースの味方だ。

すべてはコールハース有利へ傾く。トロンカは社会的に抹殺されようとしている。

しかしコールハース本来の善良さと公平さのため、彼は賠償金ではなく(殺された部下の遺族のための年金のようなものは要求する)、黒馬の原状復帰を要求する。

ところが黒馬たちはトロンカの逃亡のどさくさに紛れて羊飼いへ売られ、あまりの駄馬っぷりに今や皮剥ぎの持ち物となっている。

この皮剥ぎの親方の無法っぷりが原因となり、市民感情は反コールハースに傾く。

さらに悪いことに、軍団解散後に主導権をとった一部の悪党が、コールハース(今や国民の間では人気者である)の名前を騙って、相変わらず放火、略奪、殺戮を繰り返す。

ここに目をつけたトロンカ一族の貴族らしい見事な陰謀が張り巡らされ、善良にして高潔たるコールハースが罠にはまる。

ついに大赦されたはずのコールハースは灼熱の大ばさみで肉をむしられる極刑を宣告される。だが、コールハースはひるまない。自分は火をつけ、無辜の民を殺戮した。それは甘受しよう。しかし黒馬を返せ。

話が変わったためにルターや、コールハースの味方の市長などが心を痛める。ついにブランデンブルク選帝侯(登場のシーンで、脳裏にバッハの協奏曲5番が鳴り響く)を動かし、国と国の話となり、ローマ帝国皇帝に裁可を求めることにまで話が広がる。

サクソニア選帝侯としては、トロンカ一族の横暴を知ったために、今やむしろコールハースの味方であり、外国人(コールハースはブランデンブルク領の国民なのだ)のコールハースの運命をベルリンへ委ねることに賛成する。

話は唐突にサクソニア選帝侯とブランデンブルク選帝侯が過去に怪しい占い師に占われた話に飛ぶ。なぜかサクソニア選帝侯の運命を記した紙は、コールハースが持っているのだ。

ぐだぐだした後、コールハースの遺族などに対する賠償は正しく行われ、その一方でコールハースは斧による斬首が決定される(これは圧倒的に軽い刑なのだ)。

占いの紙を奪うために処刑場にこっそり入り込んだサクソニア選帝侯の目の前でコールハースは紙を取り出し、読み、食べる。もう、サクソニア選帝侯の手には戻らない。

そしてすべてを完了して生をまっとうして正義を貫いた人間として首を斬られて死ぬ。

ミヒャエル・コールハースの運命―或る古記録より (岩波文庫)(クライスト/吉田 次郎)

クライスト(それにしてもWikipediaによれば「世間からも認められないクライストは自殺を決意し、癌を患った人妻ヘンリエッテ・フォーゲルと共に1811年11月21日ポツダム近郊のヴァン湖畔でピストル自殺した」とまるで太宰治のようだ(まあ絶望の度合いと方向性は相当違うようだが))の作品はシラーのように自由を希求したりはしない。むしろ、秩序を求めているように読める。ルターやブランデンブルク選帝侯の尽力で解決するという点では反動的ですらある。にも拘わらず、(片や自由、片や正義と異なるが)何かを求めて反逆の限りを尽くす点で共通しているのがおもしろい。


2016-11-30

_ 昨日の料理を思い出してみる

どんなに印象的でも1日以上たったら忘れてしまうのかな?

前菜は真鴨の(多分)コンフィ。骨までしゃぶれるうまさ。よくわからないが素揚げの青い香草が付け合わせ。

スープは、カブのポタージュによくわからない葉っぱ(カブ?)。肉は豚の乳。最初フォアグラかと思ったら固くて、おや? と思って口に入れると脂肪がうまい。

次が赤牛を炙ったやつと牡蠣を揚げたもの。レタスみたいな見た目のもっと固い葉っぱが付け合わせだったかな?(あやふやになってきている)赤牛は実にうまかった。

柑橘系のすばらしく美味しいソース(実際はなんだったか? 2016/12/02追記 思い出した。バニラ)がかかっていたのはこれかな?(ソースの味は覚えているが、どれにかかっていたかは覚えていない)

またも赤牛かと思ったら猪。赤身で、これも赤牛なのかな? と思ったら猪(豚みたいな肉だとばかり思っていた)と知って意表を突かれた。

これはカリフラワーのココナツソースがかかっていたのは、猪かなぁ(覚えていない……)

鳥。ネギ。シイタケ。和風食材のフレンチ。

菫と(忘れた)のサラダ。スプレー式でバルサミコの香りが強いドレッシング。

醤油滓と里芋。

と、全体は忘れていることが多いのに、個々の材料はえらく鮮明。

どれも、肉と、野菜の組み合わせで、それが独特な香りでエンターテインメント性に溢れた、おいしくおもしろい料理で、実に楽しかった。

アニス


2016-11-27

_ ラボエームを考える

一番好きな歌劇ではあるのだが、いろいろ不可解な点が多くもある。

一般論としてはお涙頂戴の下世話なメロドラマという解釈が普通だろう。

アキ・カウリスマキですらインタビューに応えて、プッチーニのせいで失われたあるべきボエームの姿を俺は描いたぜ、みたいなことを語っていた。

ラヴィ・ド・ボエーム/トータル・バラライカ・ショー HDニューマスター版(続・死ぬまでにこれは観ろ!) [DVD]

だが、結果論はそうかも知れないが、聞いていると、とてもそうとは思えない。

時代的な制約として、リコルディもプッチーニも、稼ぐためには楽譜を売らなければならず、そのためには美しい歌が必須だということがある。しかも、それを客の耳に残す必要もある。

ベルディはリゴレットで後半女心の唄を歌わせまくるという技を使ったが、ポストワーグナーの時代であれば、ライトモティーフとしていくらでも繰り返せられる。

かくしてラボエームの中では私の名はミミが流れまくる。結果、主役はミミとなり、主役が死んでしまうのだから、悲しい悲しいお話となる。

が、実際はそれ以上にタラララン、タラララン、チャン! という上昇して下降して止めが来る4銃士のモティーフが流れまくっているのだ。調子を解釈すれば、タッタタターノ、タッタ並みのずっこけ節だから、さしずめズッコケ4銃士のテーマとでも名付けられるべきものだ。

特に顕著なのは4幕で、どれだけ悲しい場面であろうとも、4人のうち誰かにスポットがあたると4銃士のモティーフが入る。普通に考えれば、すべてがぶち壊しになるほどの音の暴力なのだが、観ているとそうは感じない。

おそらく、プッチーニの構想はアキアウリスマキと同様に、ズッコケ4銃士のおちゃらけ生活を楽しく描く喜劇だったのだと想像する。ジャンニスキッキの作曲家でもあるのだ。もちろんミミは死んでしまい、それはその場では悲しいのだが、それすらエピソードに過ぎず(悲しむことすら楽しみだ)、4銃士の自由な魂は不滅と歌うはずだったのではなかろうか。

ベノアのところまでは良い。

そのあとも、鍵を隠したり(当然、そういうノリであるから、ミミは自分で蝋燭を吹き消すべきだろう、で、おっちょこちょいの隣人ですみませんとふざける)、口説くチャンスを逃さず手を取って、なんて冷たい手だとかおちゃらけるつもりだったのではなかろうか。

が、唐突に希代のメロディストが目覚めてしまい、しかも楽譜売りまくりの商売人の才覚が後押ししてしまい、どうやって生きているのかっていうと生きているけど気分は100万長者、私の名はミミだけど花は生きていない、なんと美しい人なのか、と、まるで4回転ジャンプを決めまくってしまったかのような超傑作の連発をしてしまった。あわてて、3人との掛け合い漫才(詩人が詩を見つけたようだ)とかを入れたりしてももう遅い。

天下のメロドラマになってしまった。

2幕はそれでも喜劇の性格を維持している。不自然なほど多重世界の物語を作り、片方でおもちゃ屋と子供のやり取りや軍隊の行進を入れて、片方でムゼッタとルルの駆け引きを入れて、同時にマルチェッロの意地の張り具合(おれは死んでいなかったの箇所はそれにしても素晴らしい)、なぜか急に恋愛評論家となるミミの世間ずれしまくっていることの明白化(1幕でも、ロドルフォの「一緒に居ない?」「友達に付き合うべきよ」「そのあとは?」「ふふふふおばかさんね」と、これっぽっちも純真な乙女ではないことを明らかにしているわけだが)と、これでもかとさまざまな要素を突っ込んで猥雑感を作る。うまいものだ。

3幕も、本来であれば、ムゼッタとマルチェッロの痴話げんかとミミとロドルフォの別れ話は同一比重でおもしろおかしく作るはずだったに違いない。が、ここでもメロディストの本能が目覚めてしまい、あの美しい春になったらお別れねになってしまい、ムゼッタとマルチェッロの罵り合いの印象が薄まってしまう。

なだれ込んだ4幕も最初のうちでこそズッコケ4銃士トーンを維持しているが、ミミが3人に挨拶するあたりからどんどん悲劇になっていってしまう。

唐突に外套に別れを告げたり、ショナールの役立たずっぷりを強調したり、実はムゼッタが敬虔だったりして悲劇調を打ち破ろうとするのだが、私の名はミミのフレーズを強調しまくってしまう(楽譜を買わせるんだ)ために、すべてがぶち壊されてしまう。

かくして、観終わった後の印象は、ズッコケ4銃士のおもしろおかしいその日暮らしではなく、詩情と美しい歌に溢れた悲しい悲しいメロドラマとなってしまうのだった。


2016-11-26

_ 新国立劇場のラボエーム

おそろしく不思議な舞台だった。

指揮のパオロアリヴァベーニは、素晴らしく歌わせて、メリもあればハリもある(東京フィルハーモニーがそれにばっちりついて来る)のだが、異様にテンポが遅く感じる。

1幕では、指揮者のテンポが遅すぎて歌が破綻しているのではないかと思ったが、全編通すと、指揮はこれで良く、歌手がついてこれていないだけなのではないかという気になった。

とはいえ、2幕のムゼッタのワルツが実に素晴らしい。石橋栄実。上物を脱いで歌い出すとゴミゴミしたモンパルナスがムゼッタの独演場に早変わりだ。呆然とした。今まで観たボエームの舞台の中で最も輝かしい。

ミミはアウレリアフローリアンという人で、美しい声だし声調も好きなのだが、今一歩調和がないように思えた。太陽は私ひとりのもののところとか、なんだろう? 声も歌も良いのに、響きが不足している感じがする。

ロドルフォのジャンルーカテッラノーヴァという人は演技も歌も良いのだが、残念ながらおれの好みではまったくない声で、相当残念な感じだ。しかし演技はすばらしく、演出の粟國淳のうまさもあるのだろうが、4幕のミミ、ロドルフォ、ムゼッタのマフの贈り主を巡るやり取りで、こんな手垢のつきまくった作品で思わず貰い泣きしそうになってしまった(ロドルフォが自身の情けなさに崩れ落ちるところ)。

コッリーネは実に立派、パルピニョールが見事に通る声でこれまた立派(子供に、ロメオの人だと教えられる)。

舞台美術の良さは、3幕の番小屋がいつの間にかマルチェッロが働く居酒屋に変わるところと、最後の屋根が傾いて雪景色(出会いの冬に変わるわけだが、実際には5月)になるところに顕著な気がする。1幕、ベノアが左から来るときに、右に良くわからない帽子の男が来ているのが謎演出。ベノアの登場を衝撃的にさせるための仕掛けなのだろうか。

モミュスで右に陣取ったショナールとコッリーネが他の2人の客と一緒にいるのは良くわからない。なんぱした女性2人ならわからなくもないのだが、1人は帽子の紳士に見える。

舞台の上(歌手)と下(指揮)がどうにもずれているように終始感じたが、しかし、良い舞台だった(観られて良かった)。

前回観た時も演出に感心しているが、同じところで引っかかっているのがおもしろい。歌手は今回のほうがムゼッタ含めて良かったと思う。あと、コッリーネに対するショナールの呼びかけが印象的なのも同じだ。

帰り、車の中でクライバー版で聞き直してみる(指揮者のテンポが異様に遅く感じたからだ)。と、それほど違うわけではない。すると、歌手側とのインターフェイスの問題なのかなと思ったわけなのだった。

La Boheme(Puccini/Cotrubas/Pavarotti/Popp/Kleiber)

(音は最悪だし、パヴァロッティの声は嫌い(とは言えロドルフォとしてはテッラノーヴァよりも好き)だが、それにしても圧倒的に素晴らしい。そういえば、今日の観客はスカラの観客と同じく適切な拍手だったな)


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|

ジェズイットを見習え