トップ 最新 追記

日々の破片

著作一覧

2015-10-07

_ メタプログラミングRuby 第2版

オライリーからメタプログラミングRuby 第2版をいただいた。どうもありがとうございます。

本書の初版はアスキーから出ていたが、ドワンゴへの移動やらなにやらの前の微妙な時期に第2版が出たのでオライリーに翻訳権が移動したらしい。出版社は変わったが、訳者は同じく角さん(というかkdmsnr)。

ざっと見たが、初版とえらく雰囲気が異なる。

章立てはほぼ同じなのだが、初版の特徴だった、「あなた」とビル(先輩というかメンターというか)が、課題に出会い、メタプログラミングでうまく処理するというユースケースドリブンな筋立てというか、仕事ハッキングライフスケッチみたいな雰囲気は薄まっているように思う。どうも物理的に行間が詰まっているせいで、読み物っぽさが薄まったように感じるみたいだ。

その分、よりプログラミングの本らしくなっている(行間が詰まった分だけ本の厚みも減っている)。

訳語では、属性がアトリビュートとカタカナに変わったのが一番目立つ(目次レベルで変わるからだ)。

第2部のRailsは章立てからガラリと変わっていて、

初版は

・第7章 ActiveRecordの設計

・第8章 ActiveRecordの中身

・第9章 安全なメタプログラミング

・モンキーパッチを防ぐ

だったのが第2版では

・8章(「第」が取れている)Railsツアーの準備

・9章 Active Recordの設計

・10章 Active SupportのConcernモジュール

・11章 alias_method_chainの盛衰

・12章 アトリビュートメソッドの進化

・13章 最後の教訓

と変わった。

9章にあった「モンキーパッチ」対策はどこへ行ったの? と思うと、2章の「モンキーパッチは悪いこと?」という囲み記事の違いを読んだ時点で明らかになる。

初版の該当囲み記事は

モンキーパッチを管理する防御的な技術については、「9.2 モンキーパッチを防ぐ」で触れる。

なわけだが、第2版では

本書では、至るところでモンキーパッチの代替案を目にすることになる。このあとすぐに説明するが、Refinementsを使えば、モンキーパッチが安全に使えるようになる。ただし、(後略)

というわけで、Ruby 2.xにあわせてrefinementされているのが大きい。

それにしても本文も相当ブラッシュアップされている。

初版でモンキーパッチの代わりに特異メソッドを利用する箇所は

「Stringクラスにモンキーパッチして、title?()メソッドを追加するのはどうですか?」あなたが提案する。「それもダメだな」と、ビルが答える。「このメソッドは文字列が段落のときにしか使えない。その他の文字列にとっては無意味なんだ。あーどうしよう!」

同僚が悩んでいるのは辛い。こんなときは行動あるのみ。Googleで検索したところ、数分で解決策が見つかった。(P.150)

なのが、第2版では

「Stringクラスにモンキーパッチして、title?()メソッドを追加するのはどうですか?」あなたが提案する。「それもダメだな」と、ビルが答える。「このメソッドは文字列が段落のときにしか使えない。その他の文字列にとっては無意味だ」。

ビルはRefinementsでStringクラスにパッチを当てようとしているが、あなたはGoogleで解決策を探そうと決めた。(P.118)

となっている。

ビルは「あーどうしよう!(モンキーパッチは嫌いだし、このメソッドには意味的にあまり適合もしない)」と言う代わりにさっさとRefinementsしようとし出すわけだ(でも、この後、「あなた」にGoogleが教えてくれた特異メソッドを使うことになる)。

というわけで、既にRuby2.x時代なのだから、1.8時代のテクニック集だった初版を持っていても買い直す価値はあると思う(特にRailsユーザーであれば買い直すべきだろう)。

まつもとさんの序文は同じだが、何度読んでも「Rubyは君を信頼する」というのは良い言葉だ。

メタプログラミングRuby 第2版(Paolo Perrotta)

いずれにしてもこの本は、とても簡潔かつシンプルに、どういう場合にメタプログラミングを使うべきで、そのためにはどのような考え方でプログラミング言語の機能を生かすのかが、実にうまく書かれている。

デザインパターンを頭に入れておくことで、考え方の再考えが不要になるように、本書の内容を頭に入れておけば、プログラムの作り方をパターン化しやすくなる。

これは本当に重要なことなのだ。

メタプログラミングと言わないまでも、手続き型言語をうまく使うには、手続きをそのままプログラミングするのではなく、

・手続きに共通のものがあれば関数に括り出してパラメータを変えて再利用

・より大きな流れが共通であればクラスベースでテンプレートメソッドパターンを使う

・または、大枠を処理するメソッドに対して関数パラメータを与えて個別処理をさせる

・おれは細かなクラスを配列化してチェインオブレスポンシビリティを適用するのが好きだな

といった方法を取ることで格段にプログラムが読みやすくなり(コードの総量が減り、相違点のみが強調されるからだ)、書きやすくなり(パターン化されるからだ)、修正しやすくなる(読みやすくなるのと同じ理由)。

メタプログラミングは、そのような手続きの抽象化をより楽にする技法で、手続き型言語でのプログラミングには必須のものだ。

というわけで、強くお勧めする。

別にプログラミング言語としてRubyを直接使わなくても問題ない。

メタプログラミングの考え方を具体的に学べる一番読みやすい書籍としてもお勧めできるからだ。


2015-10-08

_ Inter Connect Casual

昨日はカジュアルにインターコネクトについてゆるい勉強会をやろうという田籠さんと青木さんの雑談から始まった(多分、これっきりで終わりの)インターコネクト・カジュアルに参加しにさくらインターネット。

以下メモ。

最初は田籠さんの基調講演(なのか?)で、Interconnect Variations。

-Interconnectとは

- ざっくり言うと、主に分散計算機システムのノード間通信をどう実現しているか。

* HPC(スパコン)

* 分散データベースシステム

最近だとhadoopなど

* もう一個あったような

-なぜ必要か?

* 目的に対して十分に高速なシステムがほしい

 - 特にレイテンシーに要求が高い

 → これらを満たすためにインターコネクトに工夫をする

例)Hadoop

 特殊。

 分散計算機システムであるが、クラシカルな分散計算機システムに比較して粒度が大きい

 分割した単位については1つのノードに閉じる

 →並列DBやHPCに比較して粒度が大きく、

 インターコネクトへの要求が低い(ラフな要求しかしない)

 処理対象がどのノードにあるかHDFS上を調べてそこで計算する。

 HDFSのLocality considerationを利用する

インターコネクトとしてはHWにイーサネットしか要求しない

-Egeneral BladeFrame

ラック内に1つスィッチ(TOR ― Top of Rack)があり、それで繋がっている。

Central

+ +

TOR TOR

node node

node node

node node

……

ブレード間の通信

エンクロージャ内に物理接続-汎用ケーブルを意識しなくても良いので物理層(ちょっと特殊)で稼ぎ、ネットワーク層は普通

→1個のラック丸々筐体(空間効率は良くない)

電気信号のレイヤーでスィッチングを行っている      (HW)

 ブレードに対して仮想化を提供する機能がある

  → ネットワーク仮想化のためにそのような特徴がある (SW)

  → 結果的にInterconnectが速い 

Oracle RACを走らせると素晴らしく速い (HW+SW)

処理の要求する粒度によって異なるInterconnectを求められる

ー何をシェアするかでInterconnectの特徴が決まる


鷲北さん

InifiniBandを使う(さくらのクラウドの場合)

民生で使えないか実験した

繋いでみてスループットを調べた

Linuxサーバーでドライバが使えるか

10GbEとの比較

4ノードのサーバーをメッシュで繋ぐと4ノードが1つに見えるというLinuxを提供するベンダーがいた

・利点

ポート単価が安い

レイテンシが低い → とにかく速い

広帯域

  40Gb製品で27Gbくらい出る (10Gbイーサネットと同等以上で帯域が広い)

・欠点(サービスとして使う場合の)

社内での運用実績がない → 障害発生時に対処が大変(自分達でその場で対処が必要となる)

ドライバ安定性が未知数 → サービスをやる上には……(イーサネットは枯れている)

インターネットにどう繋ぐか? → 最終的にはインターネットにつないでサービスを届ける

                 GWやブリッジが必要だがどうすればよいか?

                  Xsigoという製品を使う

→ さくらの第一世代(4年目)

 インターネット-Xsigo-InfiniBand-ストレージ

+

++++++++++++++++++

ホスト(VM,VM,VM) ホスト(VM,VM,VM) ホスト(VM,VM,VM) ホスト(VM,VM,VM)

ホスト(VM,VM,VM) ホスト(VM,VM,VM) ホスト(VM,VM,VM) ホスト(VM,VM,VM)

ホスト(VM,VM,VM) ホスト(VM,VM,VM) ホスト(VM,VM,VM) ホスト(VM,VM,VM)

……

普段イーサしか使わないさくらでどうだったか

2011/11 サービス開始

当初のトラブル:ストレージの問題(InfiniBandをネイティブサポートしている唯一の製品)

opensmの設定:2か月くらい煮詰めて以降トラブルなし

 (InifiniBandのプロトコル由来の問題は発生していない)

ノード数500

Q:コリジョン? (帯域不足、パケットロス)→ 無い

→ 現在はイーサネットに戻した

ポイント:

発熱:HCA(トラフィックがかかると温度が上がる)空調やエアフローに気をつかう

設置時の不要:(イーサとの比較)

ケーブルが太くて硬く取り回し時に無理がかかる

接続不良、ケーブル断などの初期不良

慣らしが2~3週間必要(イーサは1週間くらい)

HCAの故障

年間10枚程度

10GbE(NIC)に比べて若干多いが、深刻ではない(冗長が取れている)

エラーレートが徐々に上がる(NICはプツンと壊れるがそうではない)

 →監視しづらい

→ 閾値が読みづらい

ドライバ:

Xsigoのドライバが鬼門

 Oracleに買収されてしまった(アップデートが止まった→システムのアップデートができない)

Mellanoxのドライバが最も安定している

InifiniBand

IBで閉じているネットワークなら最強

Ethernetとのブリッジが課題

2015年現在は価格優位性が小さくなった

10GbEが安くなった

(ぎりぎりIBのほうが安い)

データセンターの運用はEthernetの方が楽

さくらのクラウドでは、ノード間のトラフィックがそれほど伸びていない

→ノード数の上限を決めている(これが10GbEで足りている一番の理由)

ポート単位の監視ができない(スィッチではできないのでサーバー側で行っている)


『京』

豊島さん

富士通次世代TC開発本部で京のインタコネクトを作っていた

Tofu Interconnect → ICC(実装)

6次元メッシュ/トーラス

(次元によってメッシュだったりトーラスだったり)

 →3次元が2つ

高機能

高性能

信頼性

柔軟性

Cool Chips XV - 「京」のTofuインタコネクトの詳細が明らかに


Teradata

青木さん

そもそもなぜインターコネクトか。

バスアーキテクチャ萌え

Shared Nothingはインターコネクトが問題となる

ノードローカル処理→いくらでも性能がリニアに伸びる

データ再分散→インターコネクトがボトルネックになる

・他ノードのデータとのジョイン

・他ノードのデータとGroup Byしたいとき

テラデータは1984年から並列DB。

BYNET。

現在は最高級モデルのみBYNETで、中級品はInfiniBand。


・京のICC(Tofu)がなんかやたらとかっこいい。

6次元ならコネクタは12個必要なはずなのに10しかない。隣接する2ノードについては(うむ、一晩たったらその時点ではわかったつもりだったが、忘れきっている)。なぜ12個と求まるのか田籠さんに聞いておしえてもらう(1次元はリングなのでノードから2本(数珠つなぎ)。2次元は4本(十字の交点がノード)。×2となる)。3次元は立方体の角の3辺と3面の対角線で6本と考えればよいのかな?

豊島さんいわく、6次元になると立体で考えるよりも、各駅停車、急行、快速でイメージするほうが理解しやすい。

メモリアクセスはCPUを通して行う(のはなぜかという質問が出て、これもその場ではなるほどと思ったが忘れた)。

終了後入った店のローズビアというのはおいしかった(ビールは口に合わないので普段はまったく飲まないのだが)。


2015-10-09

_ コンテナ物語を読んだ

アマゾンで安売りしていたので以前から興味をひかれていたコンテナ物語を買って読んだ。

結構時間がかかって通勤時で1週間ちょっと。

これは想像を超えたおもしろさだった。

まず、扱われる項目がえらく多岐に渡る。

そうか、それが流通ということか、と目からうろこがばりばりと剥げ落ちるおもしろさ。知的興奮の嵐である。

1940年代(つまり太平洋戦争中)の海軍による船の徴用と、戦後の払い下げによる海運業における政府の影響。

1950~1960年代に強力だった政府(アメリカのことだ)の護送船団方式の規制(価格、調達、分野、労働などなど)。

1950年代から1960年代の港湾労働者の組合(これ読んで、事実としてのアメリカ共産党に初めてであった。もっとも組織力は小さいので言及されている程度)。

・おれの記憶では、沖仲仕という言葉は、百姓とか土方と同じで、港湾労働者への置き換え必須用語(要するに放送では使えない)なのだが、本書では普通に書きまくっていて違和感があった。NHKで朗読してみてくれないかな。そうすれば放送禁止用語かどうか明らかになるわけだ。

東海岸(対ヨーロッパ貿易)と西海岸(対アジア貿易)だけではなくパナマ運河を使った東からアジア、西からヨーロッパなどの路線。

マルコム・マクリーン(名前からしてマルコム・マクラーレンに似ていて山師っぽい)の圧倒的な反知性主義(本来の意味)による革命の数々。ジョブズやゲイツがいるからパソコン革命がおもしろいように、本書の場合はマルコム・マクリーンというどえらくぶっ飛んで個性的な運輸王がいるから、ますますおもしろい。規制と戦い、法の抜け道をかいくぐり、TOBのような手法を編み出し、企業を売ったり買ったりしながらどんどん上り詰めて行く。

マクリーンも閃きと勘の良いビジョナリーだが、彼のパンパシフィック社とその周辺には、天才技術者みたいなのが何人かいて、マクリーンのアイディアを聞いた数週間後には特殊なクレーンを作って来たり、コンテナを容易にクレーンから外す金具を考案したりするので、どんどん効率化されていくのが本書の最初の白眉だ。

最初、トラック野郎から身を起こし(1940年代)、コンテナに着目し、運送の未来へのビジョナリーとなり、海運会社を手にして、コンテナを回し始める。1960年代には大海運王となり、業界をリードしまくる。金策のために世界最初のTOBを行う、さらにはタバコ会社(レイノルズ)へ身売りする(が、経営権は持ったままなので、文字通り株を誰が持つか問題)ことで巨額の資金を回す。しかし、オイルショックの読み間違い(オイルを食うが高速な船を作りまくった)と、その後の原油価格の下落の読み間違い(異様にでかいが低速でオイルを節約できる船を作りまくった)でついに1980年代に倒産させてしまい、それまでしたことがない大量解雇を起こしてしまい、精神的に大打撃を受けてフェードアウトする。

しかし、海運業に関係する誰もが、現在の流通のあり方(海運コストが2桁下がる)を作ったのはマクリーンだと知っている。

2001年5月30日、マクリーンの葬儀の朝には世界中のコンテナ船が汽笛を吹鳴して弔意を表している。(位置 4771)

そこまでの歴史を知った身として、この箇所では魂が揺さぶられた。1960年代に沖仲仕もろとも捨てて来た海の男の心意気みたいなものは全然死んでないじゃん。

というわけで、港湾労働という仕事が消えて行く(政府による補助、企業による妥協などなどあり)様子もある。西海岸の組合の親分と企業側親分の間に芽生えたある種の友情(もちろん金銭の上に成り立つのだが、情があるところがヤクザの世界っぽい)と、そういうものがまったくない東海岸の組合の親分が妥協を重ねながらどう抱えた労働者たちを救済するかの交渉の数々の対比のおもしろさ。

結果的に、その日暮らしの沖仲仕が会社員化(日銭稼ぎで港の近くに暮らして釣をしたり仕事をしたり暴れたり飲んだりから、月給をもらって郊外の家に住んで電車で港に通勤する)し、それによって失われた文化や職業的な連帯(50年代の港湾労働組合の記述も実に興味深い)の破壊などの記録も興味深い。そうか、波止場はこうやって機械化されていったのか。

マクリーンが反知性主義ならば、アカデミズムからのアプローチを行ったマトソン海運の60年代も実に興味深い。マトソンは研究部門を作り、地球物理学者のウェルダンを招聘して徹底的にコンテナオペレーションを研究させる。どのサイズのコンテナが最も最適であるか、どの航路、どこでどう貨物を積むか、オペレーションリサーチが実業に到来したのだ。こちらも大成功する(が時期的な問題と利用可能な航路の制限で復路の集荷に難がある)。

マクリーンとマトソンの成功を見て、標準化団体(ANSIではないが)が動き出す。

そこの親分が異常な数字マニアでいかにも規格屋で、10ft、20ft、40ftというコンテナの規格以外を認めない。

ハイウェイを走るトラックの寸法やらから求めたマクリーンや、自社が扱う貨物とフォークリフトなどを利用した作業空間から求めたマトソンが大反対する。業界からの参画者は、・先行者死ね(だからやつらが規格外になるのはOK)・現実に動いている(し、ハイウェイや貨物列車のことを知り抜いて決めたものが一番)のを利用すべきの2つに分かれて、現実主義が勝利しそうになるのだが、結局潰されてしまう。

それに対してなすすべがないISO(大体ISOの規格屋からはメートル法ではない時点で少しもキリが良い数字ではないわけで、登場しないが同情する)。

だが、アメリカが輸出してもアジアからの帰りのコンテナが空では無駄だ。

そこに日本の高度経済成長が来た!(のか、コンテナが空で需要があるので経済成長したのか、さてどちらだ? 答えは両方だろう)日本から大量の電化製品がアメリカへなだれ込む(ということも本書の範囲)。

躍進するアジア。

建国間もなく不安定な基盤しかないシンガポールがコンテナ港を作ることで影響力を発揮し出す。

人件費は低いがコンテナ港が無いのでアフリカはアフリカのままだった。

寂れるロンドンとリバプール。川の上流にある港は消えて行く。さよならサンフランシスコ。さよならブルックリン。

コンテナによって、グローバリゼーションが可能となった。

原料と半加工製品と組み立て工場と消費地はすべて流通によって結合される。グローバルサプライチェーンの登場である。

その大きなヒントとなったのはトヨタのジャストインタイム方式だ。

B00F36MG8U

と、1950年代以降のあらゆる経済や政治や文化を国際的に巻き込むえらくスケールが大きな物語だった。

内容の密度の濃さにはとにかく圧倒されっぱなしだった(にもかかわらず、ここぞという人間については人文的な描写がされるので退屈もできない仕組みだ)。

満足した。

追記:読了まで1週間以上(大体8時間くらいか?)かかったのに、アマゾンのKindle版のページには、「紙の本の長さ: 183 ページ」と書いてあって、変だなぁと感じたが、実際の本のページを見たら448ページと書いてある。そりゃ時間がかかるはずだ。


2015-10-10

_ 新国立劇場のラインの黄金

ゲッツ・フリードリヒ(名字と名前が可換でおもしろい。フリードリヒ大王がいる以上名前に使える名字だし、スタン・ゲッツがいる以上名字に使える名前だ)がヘルンシキ用に作った演出でのラインの黄金。

ウォーナーの東京リングが好きだっただけに、なんか地味な演出でつまらなそうだなぁと想像していたが、(地味ではあるが)悪くなかった。東京リングが外界と登場人物の関係性に着目しているとしたら、この演出は登場人物間の関係性に着目している。

最初真っ暗闇の中に眼の形のように空いた緞帳があり、外側をおっさんがふらふら登場する。ふらふら登場するおっさんである以上はさすらい人かアルベリヒかどちらかだろうと思って見ていると、徐々に世界に光が満たされてラインの乙女が歌い出す。おっさんはそちら側へ向かう。つまりアルベリヒだった。

(真っ暗闇でどうやって指揮者が入って来るのかと思ったが、あらかじめ隠れていたのだろう。拍手なしで始めるための演出とも言えるし、悪くない。演奏は素晴らしい)

異様に傾斜がついた舞台になっていてラインの乙女は滑り降りて、アルベリヒはうまく上れない。アルベリヒは実に堂々たるものだ(トーマスガゼリ)。

右下にポセイドンみたいな顔が落ちていて、なんだろう? と思ったが単なる遺跡のようで演出上に何かがあるわけではく、演出上の素晴らしい効果は乙女がラインゴールドと歌う瞬間に舞台中央が炎のように光を放つところにあった。これは良い。

天上は右上から妙な三角形が垂れている。奥にヴァルハラがあるように見える。

神々は白いトーガのようなものをまとって出てくるが、どえらく間抜けに見える。ヴォータン以外は。

フリッカが出てきてフリッカの単純なライトモチーフを歌うが、実に美しく良く通る声。シモーネ・シュレーダー。

巨人登場。なんか宇宙服のような潜水服のような不思議な服にヘルメット。

ファーゾルトが、貧しくても楽しい家族を持ちたいだけと歌うところで、フライアが駆け寄ろうとして兄弟に止められる。妻屋が引き続きファーゾルト。いいなぁ。それに対してファフナーのヒューブナーはいかにも悪そうな感じでこれまた良い。

フライアは実に微妙な立ち位置の人格で、生涯リンゴのおもりをするだろうと考えると、ファーゾルトとつつましく暮らせばむしろそのほうが良さそうなくらいだ。

ドンナーとフローが見事なまでに神の愚かさを示す。

ローゲ登場。黒い服に赤マントで、マントをひらひらさせながら走りまくる。とても学芸会っぽいのだが、悪くない。大体ローゲの演出はハゲの執事風が多くて、すごく嫌なのだが、マントのせいで多少は軽やかだ(おれの理想のローゲは、ベルリンバレエでマラーホフが演じた、真っ赤な逆立つ髪で優雅に踊る半神なのだ)。

ヘルデンテノール役のグールドにローゲを演じさせるというのは成功しているように思う。老獪な陰謀家ではなく、若く進路に悩める才人が生き残りをかけて知恵を回らせている印象を与える。

半地下にニーベンルング、2階に坑道を縦に配して3幕。

チャンカチャカチャの金属音が凄まじい。音づくりが見事だ。

炎をうまく使う。ニーベルングの小人が運び込む黄金は蝋燭の炎のようだ。死の都もヘルンシキの演出だったが、あれも思い出は灯篭のような火を中に灯した箱として示されていた。暗闇に小さな無数の炎というのはヘルンシキのお家芸か? とか考える。

ローゲが火を点けてミーメの縄を解くのには感心した。なるほど火の神だ。

大蛇は舞台の上(坑道だったあたり)全体に顔を出現させる。こう来たか(ジークフリートでのファフナーが楽しみだ)。

蛙は右下のカーテンの影から飛び出させる。大蛇の象徴性に対して妙にリアリズムで面白すぎる。

再び天上。

指輪を無理やり抜く、指を切る(東京リング)と来て、ここでは手首から先をヴォータンが槍で落として、落とした手から外す。なんと乱暴なんだ。落とされた手は後でローゲが拾って始末に困って舞台をうろうろした挙句、左袖に投げ捨てる。

エルダはせり上がった舞台から出てくる。

フライア(なんとなく服が乱れているような演出)は全然未練もなく神々の下へ帰る。

ドンナーが雷を落とすところは、東京リングの稲光に比べると地味だが(印象がない)、これまた悪くない。

最後の入城では、5人で手を繋いで3歩前進2歩後退のような妙な動きで行われる。威風堂々でもなく、淡々とでもなく、光の申し子たちのお遊戯そのもので、ローゲではなくとも呆れかえる間抜けっぷりだ。かくして、これは滅びるべきものだ、と見ているものに強く印象付けさせる演出。

かくしてローゲはマントをひらひらさせながら退場していく。

演奏はびっくりするほど良かった。歌手もいずれも素晴らしい(フローやドンナーがもっと朗々とした間抜けっぽい歌声ならもっと良いかも)。

これは残りの3部作が楽しみだ。

それにしても、妙な物語だ。

事ここに及んでも装身具を作りたいとか言い出すフリッカ(ただしヴァルキューレではヴォータンの計画の大穴を指摘したりするので本質的にはバカではないはず)にしろ、定見がないフライア、すぐに暴力で物事を解決しようとするドンナー、ただおろおろするだけのフローと、ヴォータン以外の神の無能っぷりはすさまじい。

その脳みその程度と指向から登場人物を分類すると、

第1群:知恵もあれば能力もあり、計画指向の登場人物

ローゲ、ファフナー、ヴォータン、アルベリヒ

第2群:無能

フロー、ドンナー、フライア、ラインの乙女、ニーベルングの労働者

第3群:家族第一主義で後先の定見なし(第2群のバリエーションだが個性がある)

フリッカ、ファーゾルト(ジークリンデやグートルーネもここに入りそう)

第4群:定見はあり能力もあるがどうにもいろいろ不足している残念な人たち(2軍の人たち)

ミーメ(多分、ジークムントやフンディング、グンターもここに属する)

と、種族を問わず旗色鮮明。で、基本的に成長しない人たちなのだが、そこにブリュンヒルデのみが2→1と一人成長できるというのがミソ(ジークフリートは1の可能性を持つ2だが、1になると指輪の呪いが発動されるという微妙な状況)で、かつ超人主義思想(第1群が世界を回す)の萌芽があるところがおもしろいのだろう。


2015-10-11

_ ブルガリアのイーゴリ公

東京文化会館でブルガリア国立歌劇場のイーゴリ公

15時開演のところ14:40くらいに席についたら、舞台で何やらトークショーをしている。

総裁にして演出家のカルターロフが喋ると通訳がたどたどしく日本語にし、それを解説者なのかなが、エスパー的に日本語に言い直すという不思議な方法で演出意図を説明している。

イーゴリ公はメトライブビューイングと、Amazon MP3のゲルギエフで知っているが、いずれも、最後はイーゴリ公の帰還で終わっている。

が、オペラは現代のものにするためには改変は厭わないとカルターロフは語る。復讐を誓って終わるのではだめだろう。そうではなく、婚礼の場での愛の勝利と和解で終わることこそ現代にふさわしい。したがって、1幕(ただし普通は2幕)のダッタン人の踊りのシーンを終幕に持ってきて汗と公の和解により終わらせるようにしたのだ、というようなことを語っていた。いずれにしろ未完の大作、素材をどう料理しようがこちらは観るだけのことだ。席はほぼ埋まっている。

プロローグは寺院の中でも広場でもなく、畑の中のジグザグ道を公と将軍たちが行進し、畑の中の農夫たちが讃える形式で歌われる。日食になるとイエスが天空を覆う。

ウラジミールの声が小さい。場所が4階右袖のせいか、オーケストラの音が良く鳴る代わりに歌唱が届かないときがあるが、それにしてもウラジミールの声が聴こえないのには驚いた。

演奏は相当テンポを動かしていて、モチーフが変わる都度の変化が大きい。メリハリが効いていて好きだ(多分パリカロフという指揮者)。

1幕はガリツキー公の館。ジグザグの道はそのままに、畑だったところに酒樽と子分を配した舞台。ガリツキーは朗々と良く歌うし動きも含めて芸達者な印象(アレクサンダルノスィコフ)。が、曲が一本調子になりやすくここはそれほどおもしろくない。さらわれる女性がきれいなのが妙に印象的(脚の出し方のせいかな)。ガリツキーが支配するとマントヴァ公国みたいになるのだろうけど、もっと野卑で、ロシアっぽいのだろう。

場面転換(カーテンの移動音が大きくて驚いた。何かの効果音かと思った)。

ヤロスラーブナ(皇后)の歌が始まると、息をのんだ。固くて芯があり実に美しい。見事な皇后の歌だ(ガブリエラ・ゲオルギエヴァ)。素晴らしい。

貴族の集結。さあガリツキーが軍団を率いて乗り込んでくるぞと思ったら、いきなり鞭を振りながらポロヴェツ人が攻め込んできて幕。

2幕目、汗の陣営。ジグザグ道は水平に変わり合唱の女性たちが並ぶ。左奥と手前に小高いところがある。最初その奥のほうで女性が歌い、あとからおそらくコンチャコヴナが出てきて手前の台で歌う。

ウラジミール登場。曲の良さももちろんあるが、プロローグの時とは異なり随分な美声で良い感じ。コンチャコヴナとの重唱も悪くない。イーゴリ公の足音を聞きつけ逃げるところが妙に長くあっち行ったりこっち往ったりする。

イーゴリ公の歌も良い(スタニスラフ・トリフォノフ)(もちろん曲が良いという面もある)。ウラジミールが最後まで通路で歌っているのに対して、左手前の台の上で歌う。おそらく舞台上の高低によって矜持を示しているかのようだ。

オヴルールとの掛け合いが始まる。この曲はオヴルールの歌だったのかと思い出すのだが、掛け合いの調子の変化の付け方がうまい。あくまでも落ち着いたオヴルールと大げさなくらいに悲嘆に暮れているイーゴリ公の対比。最後説得されたイーゴリ公がスパシーボと言うところで初めて、ロシア語だったなと思い出す。この時、イーゴリ公は床に降りている(逆にオヴルールが一段高い位置にいたような)。

元からある台よりさらに高い台に4人の美女を侍らせてコンチャクが登場。歌も振舞も威風堂々で素晴らしい。これも実に良い声(アンゲルフリストフ)。が、オーケストラに負ける場所が多い(ここまでくると明らかに席のせいだなと気付く)。

汗は途中で台から降りてきて公と同じ高さになる。明らかに高低差は演出意図となっている。

二頭の豹としてロシアを支配しようの歌詞に引っかかる。なぜ獅子ではないのだろう? (そうか、彼らはアフリカを知らない)。なぜ虎ではないのだろうか? (そうか、ウクライナにもトルコにも(ボロヴィッツとダッタンの混乱があるので)モンゴルにも虎はいない。でも、豹はいるのかな? なんか樹の上に居そうでトルコやウクライナに居るとは思えないのだが(で、後で調べるとカスピ海の南半分まで棲息していることがわかった。したがって彼らの会話で恐るべき猛獣の象徴として豹が出てくることはまったく理に適っているのを知った)。

終幕。やはりヤロスラーヴナの歌は素晴らしい。

公の帰還は、二人の楽人が告げるのではなく、ヤロスラーヴナ本人が遠くから来るボロヴィッツ人(オヴルール)とロシア人(イーゴリ公)の姿を認めることによる。あれは武人だは、まさか……公だわ。

イーゴリ公は復讐を誓い、オヴルールは退場する。

で幕となり、汗の陣営。

コルチャコヴナを振り切ってウラジミールが逃亡する。この二人、キャストに大きく名前は出ていないが良い歌手だなぁ(が、やはりウラジミールの声量には難がある)。コルチャコヴナはドラを鳴らして衛兵を呼び、ウラジミールの確保を命じる。連行されてくるウラジミール。

汗登場。お前を婿に迎えよう。

美女を侍らせていた高台の上に汗。そこにイーゴリ公とヤロスラーヴナが婚礼に参加するといってのこのこやって来る。さすがにこれはひどい演出だなぁと思う間もなく、ダンス大会となるのであまり気にならない。

中央アジアの草原からやキスメットでも使われている鳥の美しい歌と、黒パンダ団オーみたいな汗を称える歌とバレエ陣による舞踏の嵐。男の中に一人ひときわ威容を発するのがいて、カーテンコールでもえらく目立っていたからおそらくプーチンパオもこの人なんだろうなとか考える。

舞台構成としては見事な改変で感心する。最後に踊りを持ってくることで実にきれいに終わる。が、最初に本人が解説する必要があったのもわかる(この演出での物語的な辻褄合わせの無茶苦茶さ(イーゴリ公のキリスト者としての矜持の全否定となるわけだから)はイルトロバトーレよりもひどい)。

実に堪能しまくった。

B00A9PHNZ6

(明治のおかげで、これだけの舞台を比較的安い価格で観られるのだからありがたいことだ)


2015-10-12

_ C#のGC.KeepAliveの謎

ちょっとSystem.Threading.Timerを使っていろいろ実験しているのだが解せない(追記:猪俣さんに、お前のドキュメントの誤読と指摘されたので、解せなくなくなった)。

以下は期待通りに3秒後にHelloが表示される。変数tの参照箇所はGC.Collectをまたいでいるから、t(その実体はTimerのインスタンス)が保持されるのは当然だ。

using System;
using System.Threading;
class TimerTest
{
    static void Main()
    {
        var t = new Timer(state => Console.WriteLine("Hello!"),
                          null, 3000, Timeout.Infinite);
        GC.Collect();
        Console.Read();
        t.Dispose();
    }
}

で、Timer.KeepAliveの説明を読むと、以後の参照が無くても呼び出したメソッドの中では生存しているように読める。

追記:そうではなく、そのメソッドの先頭から、Timer.KeepAliveの呼び出し時点まで、生存させるという意味らしい。(なんか意味ないメソッドのような気がするが、他に参照を記述しようがないオブジェクトに対して、コード中に参照を明示するためのメソッドと解釈するのが妥当なようだ。(さらに追記:本当に何もしていない。というかコメントにthisポインタについて書いてあるけど味わい深い、のあたりをおそらく藤原さんが指摘している))。

が、以下はHelloが表示されない。

using System;
using System.Threading;
class TimerTest
{
    static void Main()
    {
        var t = new Timer(state => Console.WriteLine("Hello!"),
                          null, 3000, Timeout.Infinite);
        GC.KeepAlive(t);
        GC.Collect();
        Console.Read();
    }
}

追記:当然、GC.KeepAliveの呼び出し後にGC.Collectを呼んでいるからその時点で回収されるのは正しいことになる。

GC.CollectはKeepAliveして保持したオブジェクトも強制回収するのだろうか? でも、それっておかしくはないか? (追記:したがっておかしくない。KeepAliveはオブジェクトを保持する機構ではなく、生存期間をマークするためのメソッド。以降の段落以降も当然、誤解したまま書いているので当然の動作を検証しているだけ)

本来の用途からはCOMオブジェクトや他のアンマネージドコードにオブジェクトを与えたために、C#のソースコード上は参照が無いように見える場合に、KeepAliveで確保するのだから、当然、他のスレッドなどがGC.Collectを呼んだ場合にも生存は保証されなければおかしい。

それとも、これは同一スレッドだからかな?

で、GC.Collectを別スレッドで実行してみる。

using System;
using System.Threading;
class TimerTest
{
    static void Main()
    {
        var t = new Timer(state => Console.WriteLine("Hello!"),
                          null, 3000, Timeout.Infinite);
        GC.KeepAlive(t);
        ThreadPool.QueueUserWorkItem(new WaitCallback(s => GC.Collect()));
        Console.Read();
    }
}

やっぱり表示されない(=Timerインスタンスはゴミになっている)。

.NET Framework 2.0ならどうかな? とコンパイルしようとしたら当然のようにラムダ式がエラーになって面倒だからやめた。

GC.Collectをアプリケーション内で呼ぶのが間違いで(というのは一理くらいある)、KeepAliveはGC.Collectに勝てないということがドキュメントされているなら納得もするのだが、GC.KeepAliveの説明やGC.Collectの説明には書かれていないんだよなぁ。

追記:なんだか読みにくい文章だなぁと感じたら、多分、誤読を疑うべき(人は都合が良いように解釈しがちだからだ)。というのが教訓。

This method references the obj parameter, making that object ineligible for garbage collection from the start of the routine to the point, in execution order, where this method is called. Code this method at the end, not the beginning, of the range of instructions where obj must be available.

追記:結論としては、Disposableなんだから最初の例のようにDisposeをちゃんと書けばOK(タイマーコールバック内で書いたらだめだけど)。というか、通常の利用方法としてはインスタンス変数に格納すれば良いということになるのだろうな(保持するオブジェクトの生存期間以内で有効なのであれば)。

_ Javaのラムダ式が利用しにくい原因

インターフェイスの定義によるドキュメント性が無くなるのを避けるとインターフェイスをいちいち定義しなければならず、それはよろしくないと書いたことがある

それに対してさくらばさんやきしださんが、java.util.functionに定義されている汎用インターフェイスを使えばいいじゃんと教えてくれたのだが、まったくぴんと来ない。

それはそれとして最近、C#でプログラムを書きまくっていて、ふと気づくと、ガンガンActionやFunctionを使いまくっている(内部処理用ばかりなのでXmlDocumentの記述の必要性がないというのをおいておくとしても)。

が、まったく気にならない。

そこでやっと気づいた。

チェック例外のスローをスルーできないからだ。大体、ラムダ式の中で例外が起きたって、元々の呼び出し元でキャッチすれば良いわけだが、java.util.functionの既定の関数インターフェイス群はthrows Exceptionで定義されていない。

あまりのばかばかしさに、しょうがないのでthrows Exceptionをばかすか付けた関数インターフェイスを定義することになる。

どうせ定義するなら、ドキュメント性を持たせようとしているうちに、元の問題(チェック例外)のことがすっかり念頭から落ちていたようだ。何しろ今や、Javaでメソッドを定義するときは、無意識のうちに引数リストの閉じかっこを打つと同時に空白throws Exception {と書ける境地に到達しているからな。

というわけで、C#は最高ですな。

本日のツッコミ(全3件) [ツッコミを入れる]

_ egtra [「以後の参照が無くても呼び出したメソッドの中では生存しているように読める」が偽なのではないでしょうか? https..]

_ egtra [あと、Visual Studioでプロジェクトを作ってコードを書けば、.NET Framework 2.0ターゲット..]

_ arton [どうもありがとうございます。VisualStudioでC#バージョンと.NETバージョンを別に扱えるのは知らなかった..]


2015-10-13

_ ここは退屈迎えに来てを読んだ(感嘆)

数年前に話題になっていた、ここは退屈迎えに来てがアマゾンKindleショップでえらく安く売られていたので、たまには最近の日本の小説でも読んでみようかと(藤井大洋とかは読んでいるから、たまにはというのとはちょっと違うかな。ノンジャンル小説でもというか)買って読んだら、えらくおもしろかった。

正確にはおもしろかったというのとは違うが、信じられないほどまともな文学作品で、いろいろ感じるところ多数。

文学とは何だろうか? おれは次の2点を満たすことが条件だと考える。

・相対的な観点から世界を構築し、それがまさに現実の世界の写像であること

・その世界を読者が自覚し、現実の世界に対する複眼的な視野が一瞬であろうとも提供されること

たとえばソフォクレスやエウリピデスのような正統的なギリシャ悲劇を考えてみると、そこに描かれるのは主に、神が定めた運命に対して立ち向かう人間で、その戦いが失敗することで生じる結末だ。立ち向かう意思を持つということは、運命(神の意志)というものは絶対的なものではないという自覚であり、その自覚は読者に対しても要求される。したがってギリシャ悲劇は文学なのだ。

定義から、神がきちんと収めたことになっている世界では文学は生まれることはない。

フランス文学がまっとうに成立したのは、サド侯爵が神を全否定して善と悪を相対化し、神の代わりに自覚した人間が自覚せざる人間に君臨する作品を書くようになってからだ(と抽出すると確かに危険思想以外の何ものでもない)。

以降、神という絶対者を相対化した世界(現実としては神によって権威づけられた王というものを否定した世界)では文学はテーマを持ちやすくなり、最終的にはカミュが絶対的な価値観を人間存在そのものを理由に否定することで、完成する。その後は、物語をどう解体するかが重要となる。

ここは退屈迎えに来ての連作は、物語が解体されているわけでも、実験が行われているわけでもない。淡々と1990年代と2000年代の2つの時代を象徴する固有名詞を散りばめて(日本では田中康夫、フランスではパトリック・ベッソンあたりの方法論)、しかも巻末の参考文献に『ファスト風土化する日本』が出ているくらいに再構築された地方都市での生活を各篇ごとの女性主人公の主観表現で描いたものだ。

2010年には30歳くらいになる椎名という男が(まったく主役ではなく)連作をつなぐキーとして出てくる。小学生のころ、高校生のころ、働きはじめたころ、その場所に溶け込んだころ。

各作品の主人公は椎名の年齢に応じて変化する。最初の作品が大学卒業後東京で働き、結局戻って来た30がらみの女性(この冒頭の作品が一番軽やかなのは多少なりとも東京が描写されているからだろう)、次が超美少女で東京でハイティーンモデルとして活躍してその後目が出ず出戻って来たスタバ店員と同じ店員仲間のサブカル女子(20代中半上)の友情、地方大学院で研究者としての将来に悩んでいる女性(20代中半下)の失恋、バイト女性(20代最初)が重力を自覚する話(悪くない)、アメリカ留学生とだけ仲が良い地方大学生(20くらい)の艶笑小話、東京で一人暮らしをはじめて本当の自分を見つけたのか見失ったのか混乱する20歳大学生の勘違い(冒頭の作品へ続く雰囲気)、援交女子高生が愛とは何かを理解する話(妙だ)、セックスしたくてたまらないまま本当に夢を見てしまうことになった高校1年生の奇譚(ではない)とばらばらで、つまり2000年代後半から1990年代前半へ向けて時代がさかのぼる。

ところが驚くことに、全然さかのぼらない。確かに風景と事物は変わっていくし、登場人物の年齢も行動も移り変わるのだが、おそろしいほど何も変わらない。というのは、そこには何もないからだ。あるのは心象風景のみ。そしてそれは普遍的なものだ(が、それでいて時代は確実に遡る)。

最初の作品を呼んで唖然とした。

東京に来てうまく行かずに故郷に戻って退屈だと文句を垂れながら東京に生きている人たちを羨みながら生きている人たちの物語で、そこにはおれが共感できる何ものも存在しない。

にも関わらず読みながら、ロンドンに行って日本にいるときとかわらず下宿屋で机に向かっているだけの夏目金之助や、パリに行って日本にいるときとかわらずに何もしない辻潤を考える。彼らは、作品中の登場人物が羨む東京に生まれてしかし外国というものに憧れて、実際に行ってみて、そして戻って来る。

場所が変わっても何も変わらない。地球から火星に行っても同じことだろう。

これがとびきりおもしろく感じた。

逆転するのだが、文学作品を書く側も読む側も、どこにいても落ち着かなく、足が地に付かず、しかもそれがわかっている。その了解は、世界認識の相対性となる。相対性を認識するには、立ち位置は常にずれる。そのずれを意識することが自己認識となる。そしてこの作品群はその自己認識を持つ瞬間を切り取る。

ということは、この作品は文学、それも相当にストレートな純文学なのだ。そうだったのか(知らずに読みはじめたのだ)。

特に冒頭の作品はもっとも構造があらわで筆者の意図(それが自覚的なものであれ無自覚のものであれ、マーケティング的なものであれ、真情であれ、締め切りのためであれなんでも良いが、国語の試験で問われたときに回答すべき意味での意図)がきちんと提示される。そして以降の作品は異なるインスタンスがすべて共通であるという個別論となる。巧妙だ。

ここは退屈迎えに来て(山内マリコ)

文学なんて20世紀で死んだと思っていたが、全然、そんなことないのだなと認識を新たにした。


2015-10-16

_ アルゴールの城にてを読まずに古城の恐怖を思い出す

以前買って机の上に放置したままになっていたアルゴールの城にてに手を伸ばし、読みはじめた。

最初に鬱屈した前書きがあって、どうもこの人は「恐怖」についてその言葉を使わずに説明しようとしているのだなぁと考えながら読み進むと、なぜか唐突にパルジファル(という言葉は使わないで)を人は誤読しまくっていると糾弾しはじめる。最後のあたりになり、オトラント城という単語を出してきて、まあそうだよなぁと読みが外れていないことを確認した瞬間に、はるか以前、子供がまだ小学校の低学年か、あるいは幼稚園の頃に話してやった古城の恐怖について思い出した。

アルゴールの城にて (岩波文庫)(ジュリアン・グラック)

当時、別にAAミルンの顰に倣ったわけではないが、夜になると子供が気に入っていたクマのぬいぐるみのくーたんとその他のぬいぐるみを使って話しをするのが慣例となっていた。他の登場人物はオオカミのアル(クレヨンハウスで買ったオオカミのヌイグルミに子供がアルベガサスと名前をつけたが長いのでアルと呼ばれる)とイルカのパクパク(ピンクの首を挟むイルカ型の枕なのだが、下田の水族館でイルカは食いしん坊と聞いたせいで、とにかくパクパク良く食う大喰らいという設定となった。くるくる回るとお魚お魚と大騒ぎしてぱくぱく食べる)。良くシャーコシャーコと包丁を研いではくーたんを追いかける猿のサルコ(一度安達ケ原の鬼婆の役をやらせたのが定着してしまった)。

で、ある日のこと、なぜか怖い話をすることとなった。

「というわけで古いお城にくーたんは入っていった」と始める。おれの頭の中ではオトラント城以外の何ものでもないが、今になって思えば、子供は姫路城みたいなのを想像していたかも知れないな(追記:そんなことはないそうだ)。

オトラント城綺譚 (1975年)(ホーレス・ウォルポール)

暗くて長い廊下を歩いていくと、向うからばかちんばかちんと音がする(バカチンという名前の馬のヌイグルミがいたのだ)。

「バカチン?」

「馬に乗った首の無い騎士だ。ギラギラ光る槍を水平にかざしてすごい速度でくーたんめがけて進んできた!」

「たいへんだ」

「くーたんはあまりの怖さに身体が固まってしまったぞくーたん」

「たいへんだ」

「でも騎士には首がないから目が見えない。くーたんに気付かずに通り過ぎて行った」

「あー良かった」

「これは恐ろしいところに来てしまったぞくーたん(語尾に名前をつけることで、誰の考えか明示している)」

「こわい話?」

「そりゃそうだよ。古いお城にはいろいろなおっかないものがたくさんいるんだから」

「たいへんだ」

「すると向うから、今度はもっと恐ろしいものが出て来た。口にはすごく鋭いキバがはえている! くーたんはブルブル震えて先へ進めません」

「たいへんだ」

「なんと向うから来たのはキバがはえたオオカミでした!」

「ふつうじゃない?」

「うん。オオカミはキバをギラギラさせながら何か食べている。あ、羊のお肉だぞくーたん。おいしそうだなぁ、とくーたんはオオカミに近づきました」

「アルと仲良しだもんね」

「そのオオカミはアルとは違うオオカミだけど、もちろんオオカミだからとってもいいやつだ。そこでオオカミはしょうがないなぁわけてやるぞオオカミと言ってくーたんにお肉をわけてあげたんだ。というわけで二人は仲良く羊のお肉を食べました。」

「よかった」

「おなかがふくれたので、もっと先へ進むぞくーたん。と、くーたんが先へ進もうとすると、オオカミがにこにこしながら、ここから先はおっかないのがいるからやめたほうがいいぞオオカミと言いました」

「しんせつだねー」

「オオカミだからね」

「うんうん」

「何がいるのかくーたん? たとえばだなオオカミ、と言ってからオオカミは少し考えました。実はあまりにおっかないのでここから先へ進んだことがないから、何がいるかまったく知らなかったのです」

「だめなオオカミだねー」

「しょうがないよ。何しろおそろしいお城だからね」

「どうするの?」

「もちろん、くーたんはずんずん先へ進みました。すると!」

「え」

「向うから泣き叫ぶ声が聞こえて来たのです」(もちろんこの時点ではバンシーとか7thゲストが念頭にある)

「たいへんだ」

「なんだくーたん? 誰が泣いているんだくーたん? くーたんはおそるおそる先へ進むと泣き声はどんどん大きくなってきました。いったい何がいるんだくーたん? くーたんはブルブル震えながらおそるおそるさらに先へ進むと、そこには赤ん坊いました。なんと泣き声の正体は、泣き叫ぶ赤ん坊だったのです」(バロンゴングのボスキャラを想定しているので、実はこわい)

「しょうがないなぁ」

「赤ん坊だからね。なーんだ赤ちゃんかくーたん。それじゃあ泣いてもしょうがないぞくーたん。というわけでくーたんはさらに先へ進むと、向うから何やらまっ黒なものが近づいてきました。ついに、まっくろくろすけが出て来たのです」

「ととろ?」

「まっくろくろすけは、こ、こわくないぞくーたん、とブルブル震えながらくーたんが近づくと、それは黒い小さなツキノワグマの子供でした。あ、まっしろしろすけだ(くーたんは白い)。とまっくろくろすけは言うと、毛でほわほわした頭をこすりつけてから、くーたんをブーンブーンとおそろしい唸り声が聞こえてくる秘密の小部屋へ連れて行こうとします。なんだくーたん、変な音がするぞくーたん、こわいぞくーたん、くーたんが嫌がるとまっくろくろすけは、ほわほわの毛をすりすりしながら、なんでーと不思議そうな顔をします。きみはくまでしょまっくろくろすけ? ぼくは人間だぞくーたん(くーたんは何か勘違いしていることになっている)とくーたんが胸をはると、さらに不思議そうな顔をしながら、へんだなーまっくろくろすけと言いながらずんずんブーンブーンの部屋に引きずり込んでいきます」

「わかった」

「くーたんもその音の正体がわかりました。そこには」

「そこには」

「山ほどミツバチがいてたくさん蜂蜜があったのです。二人は仲良く蜂蜜を食べました。」

「やっぱり」

と言う調子で、尖った爪が伸びたおばあさん(お城には爪切りがない)とか、血に飢えたクマ(まっくろくろすけを探して半狂乱になった母グマなので、これは本当に怖い)、カーペカーペという音とともにやってきてあたり一面を痰だらけにする痰を吐くおじいさん(こっちはもっとこわい)が登場しながらまだまだくーたんの冒険は続くのだった(無理矢理10個作ったはずだから、あと3個体いるはずだが忘れた。いずれも当然の組み合わせになっているはず)。

#(追記):子供によれば、まっくろくろすけはマレーグマのようなものを想像していたらしい。あと血に飢えたクマはまっくろくろすけと関係ないグリズリーのような暴れ者らしい。


2015-10-21

_ JavaのURLConnectionとC#のWebRequest/WebResponseの違い

C#でHTTPクライアントを久々に書いて数分間何が起きたか混乱したのでメモ。

原因は、Streamの仕様の差にある。

Javaで簡単にHTTPクライアントを作るにはURLConnectionを使う。

URLConnection c = new URL("http://....").openConnection();
...
try (InputStream is = c.getInputStream()) {
    byte[] buff = new byte[16384];
    int len;
    while (len = is.read(read(buff)) >= 0) {
        if (len == 0) continue;
        ...
    }
} catch (Exception e) {
    throw new IllegalStateException("Why ?", e);
}

というように、長さ0の読み込みを正常処理に織り込む必要がある。

If the length of b is zero, then no bytes are read and 0 is returned; otherwise, there is an attempt to read at least one byte. If no byte is available because the stream is at the end of the file, the value -1 is returned; otherwise, at least one byte is read and stored into b. -InputStream#read(byte[])

この仕様が念頭にあったので、つい次のように書いて無限ループにはまった。

var req = WebRequest.Create("http://....");
...
using (var resp = req.GetResponse()) 
using (var is = resp.GetResponseStream())
{
    var buff = new byte[16384];
    int len;
    while ((len = is.Read(buff, 0, buff.Length)) >= 0) 
    {
        if (len == 0) continue;
        ...
    }
    is.Close();
}

.NET FrameworkのStream.Readは、

The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many bytes are not currently available, or zero (0) if the end of the stream has been reached. -Stream.Read

というわけで、EOFは0を返す。

    while ((len = is.Read(buff, 0, buff.Length)) > 0) 
    {
        ...
    }

と修正して完了。

こんなところに非同期IOに対する考え方の違いが影響していておもしろい。


2015-10-24

_ 星を継ぐものを読んで時代の変遷を感じながら深く感動する

アマゾンで叩き売り対象になっていた星を継ぐものを読了。

読んでいる間は、そうとううんざりさせられたが、読後感は素晴らしい。感動した。小中学生だったら、絶対将来は科学者になろうと決意しただろう。

プロローグは月を探検する2人組の話。

場面変わって月で5万年前の人類の死体が見つかる。一体これはなんだということで、NASAの未来版のようなところに世界中から科学者が集められてああでもないこうでもないと議論が始まる。なぜ5万年前の人類の死体が月の地下から出て来たのかが解決すべき謎である。

偏屈な進化学者が出てきて、主人公の数学者なのか物理学者なのか良くわからない万能魔人と対立する。

自然を名づける―なぜ生物分類では直感と科学が衝突するのか(キャロル・キサク・ヨーン)

を読んだら、出てくる進化学者がほとんど全員、いやな連中だったのと見事に一致して、なるほど進化学者というのは自明なまでに嫌な連中なのかと感じ入る。

さらに木星の衛星で250万年前のロケットが出てくる。

万能魔人と進化学者は同じロケットに乗ってそこへ向かう。

真の主人公は万能魔人の科学者ではなく、NASAの未来版の司令官のプロデュース能力だったのかとわかるが、まあどうでも良い。

謎は論理的に解決する。進化学者が大演説をしておしまい(これが涙なくして読めないくらいの感動的な演説で、それまでの退屈さと進化学者の偏屈さはすべて雲霧解消する)。

エピローグ(考えてみたら、最初のあたりのロシア人の発見のエピソードは回収していないけど、同じだな)はわりとどうでも良いというか、ちょっと国際的に作者の(読者サービスかも)米国絶対主義者っぽい気持ちの悪さを感じさせる不愉快な蛇足(時間軸を示していないから純粋に過去のエピソードとして書いただけかも知れない。ルーシーの発見が同じくスーダン北部というかエチオピアあたりで1970年代中期だからそのあたりと引っかけたのかも知れない)。

未来予測で見事に見当違いだったのは、DECがコンピュータ市場で覇権をIBMと競っていること(固有名詞は怖いね)、モニターとしてはブラウン管が独占状態なこと、科学者がほぼ全員煙草を会議中だの寝っ転がったベッドの上だとかで吸いまくること。ロシア以外では女性は秘書職しかないこと。

うんざりするのは、距離感を示したり、おそらく妙なディテールを描くことで正確さを示そうとしたらしき(たいてい節の終わりに出てくる)エンドトゥーエンド通信の中継描写のしつこさ(追記:今気づいたが、これはフェアな評価ではない。これはすごく重要な描写なのだ。おれが通信を理解しているから何どうでも良いディテールにこだわっているんだ? と感じただけの話だ)。それ以外にも、いろいろくどくどしいところが多くて、しかもそれがいまいちなことだ。もしからしたら50年後の現在では陳腐になってしまっているからで、50年前に読めばすごくわくわく感があったのかも知れない。

謎は論理的に物語の中半くらいで完全に解決してしまう(表題から倒叙ものとも言えるがピースが揃うのが中半過ぎの日記が解読できた時点となる)。その意味では大したことはないのだが、万能魔人のアーハの瞬間の美しさと進化学者の演説の良さですべてはオーライである。

B0045IIFWS

1970年代末期の作品だということは、おれがまったくSFを読まなくなった時期だ。

その時期にこういう作品が出て来たのか。時代観と世代観が見事に論理的に符号するところが、内的宇宙としては実におもしろい。

と読み終わっていろいろ考えていたら、巻末解説に鏡明の文章があって、なぜおれがまったくSFを読まなくなったかの理由を逆方向から説明していてちょっとおもしろかった(が、別にどうでも良いし、くどいので飛ばし読み)。結局内的宇宙を書かせたら、バラードを例外として、誰一人として純文学の歴史を生き抜いた作家たちには太刀打ちできないからだ。NWSF読むならドストエフスキーやシラーやセリーヌやボリスヴィアンを読むほうがはるかに面白い(オールディースの長いのは良かったけど、あれはNWSFとは言い難い)。

それにしても退屈だったが感動的だった。

星を継ぐもの (創元SF文庫)(ジェイムズ・P・ホーガン)

#アマゾン評の低評価のやつを読むと、退屈だと書いている連中が確かにいるが、おれの読後感とは正反対でおもしろい。おれには、科学者たちの仮説建てと議論はすごくおもしろい。退屈なのは細部の(リアリティを出すための)描写で、それは今となっては陳腐だからだ。でも、低評価者たちは、その現在でも最高におもしろい部分を退屈だとしている。

でも、それはわからなくもない。アランケイの言葉を使えば、サーベルタイガーがなぜ絶滅したかに想像力を使うか、サーベルタイガーの子供がツンドラをうろちょろする冒険に想像力を使うかの違いということだ。で、この作品が刺激しまくる想像力は前者なのだから、後者を望むのは間違いだろう。そして、その意味ではこんなにおもしろい娯楽作品はなかなかお目にかからない。傑作だ。


2015-10-26

_ IETFの謎

ちょっと訳あって、HTTPのRangeヘッダの動作をいろいろ見ているのだが、簡単なテストに、IETFのRFCを使ってみようと考えた。plain/textだからレンジを見るにはもってこいだろう。

が、まったくうまく行かない。

たとえば、500-1000を取得しようとすると

Content-Type: text/plain
Content-Range=bytes 500-1000/17136

で206が予測通りに返る。

が、ボディは次のようなバイト列だ。

9D-DF-65-C9-D5-75-61-4E-D2-22-C1-46-50-DF-FE-61-E3-A0-49-3B-10-7B-E8-9D-A7-(まだ続く)

ASCIIでもなければUTF-8でもない。なんじゃこれ?

ふと思い立って、というよりも最初はそこから始めるべきだったが、0-500で呼び出すとちゃんと先頭が返って来る(長さのチェックはまだしていないが、おかしかない)。

現在の予想としては、TEXTはあらかじめgzipで保管されている。

で、Content-Encodingがidentityの場合は、gunzipして送り、gzipの場合はそのまま送るのではなかろうか。

で、Rangeに対しては、Gzipされたファイルをそのまま返しているのではなかろうか。妙なバイナリで、しかも先頭が1F-8Bのマジックナンバーでもないのは、本当にgzipされたデータの途中を切り出しているからではなかろうか。

とりあえず、IETFに対してRFCをRangeで読むのは意味を持たなそうだ。

で、試しにRangeを1-10で読みだすと、案の定、次のバイト列を得た。

8B-08-00-00-00-00-00-00-03-ED

マジックナンバーの2バイト目の8Bで始まる。

Content-EncodingとCotent-Rangeの相性の悪さは最悪だが、この場合はクライアントはContent-Encodingはidentity(というか指定していない)のだから、gunzipしてから送ってくれれば良いのだが、まあ、こんなものかな。


2015-10-29

_ 獣の奏者

Kindleのポイント還元が大きかったので(なんのことはなく単価が高かったのだが)、題に惹かれるものがあったのと、Twitterでおもしろいかと投げたら例によってshachiさんが反応しておもしろいというようなことを書いてくれたので買って、読んだ。

読みはじめたら4冊分(外伝は読んでない)2日ちょっとで読了してしまった。

つまり、えらくおもしろかった。

ターゲットは小学校高学年から中学生(高校も多少含まれるかな)の女子で、どちらかというと明るく活発であるよりは、考えることが好きなタイプだろう。

主人公のエリンという女の子が最初が10歳で始まり、14歳で学校に入り、20前に卒業して学校で先生として働きはじめるまでの1~2巻は完全に主人公の年齢から、ターゲットにどんぴしゃりだ。

舞台は文明度からは紙と文字があるが、階級制度があり、知識は一部の階層にしかなく、祖法を秘伝とする王家がありということで中世程度だが、この世界とは、白くて翼を持つ巨大な獣(読んでいると大鷲のようなイメージがあるのだが、おそらく蛇と戦うイメージからだが、実際には翼を持つ獅子に近そうだ)と、角と鱗を持つ巨大な蛇(角を握って乗ることからは龍とかファルコンみたいだが、大群となって戦争に利用するスペクタルシーンからは砂の惑星のワームのようでもある)がいることが大きく異なる。獣は王獣、蛇は闘蛇と名付けられていて、主人公とこの2種の生物との関係が全体を貫く。

1~2巻は知識欲旺盛で、次々と身内が死んでいく不幸に見舞われながらも、運よく主人公の性格や指向を理解してくれる大人が次々と出てくるおかげで、王獣と竪琴で交流できるようになるまでが描かれる。

読んでいて感心するのは、非常に優れた教育書になっていることで、読者が主人公に寄り添って読んでいれば、考えるということはどういうことかということが、かっちり学習できるようになっていることだ。

次々と不思議な現象を観察してしまい、それが何かを推測し、検証し、理解する。特に母親を失ったあとの最初に育ててくれる人が、酔拳の老師のような雰囲気で(体術と学術の違いはあるが)実に良い雰囲気だし、その後の学校生活も、友情はないわけではないが(というか、重要ではあるが)、基本、本人の学究を軸に進む。学校生活なのだから当然なようだが、あまりお目にかからないタイプの作品だ。

陰のある生い立ちで、学校友達に恵まれて主人公が成長するということで、なんとなくハリーポッターを思わなくもないが、そこが全然異なる。事件に巻き込まれて冒険するのではなく、主人公が疑問を持つことから探求が始まる。

それが実におもしろく、心地良い。

3~4巻は、30歳の子持ちになったエリンが、政治と外交に巻き込まれる。生物学者の前に社会科学が立ち上って来たのだ。

闘蛇の突然大量死の謎を探るところから、イスラム教国(砂漠の向うにあり、1つの神を信じている高い文明を持つ諸国群で、征服した諸国民も同じ神を信じればまったく平等に扱われるというようなことから、今のイスラム国ではなく、十字軍時代のイスラム教国に近い)の侵攻、異人種の貿易国との国交、王権どうあるべきかとか、さまざまな大人の事情がガンガン出てくるうえに、本人が大人(子供がいるから大人として振る舞わなければならなかったりする)にならざるを得ず、しかし心は草原の上を吹き流れる風のような自由を持ったまま、(また夫が常に死と向かい合って生きて来た男なので)孤立したまま、いやおうなく社会生活に付き合うはめになってくる。しかも、それは単に本人だけのことではなく、自分は楽をしたいだけの貴族や、何をどうすれば良いのか混乱しきっている絶対平和主義の守護神としての役割を求められている女王と、その夫の戦闘マシーン大公(別に戦争が好きなわけではないが、9条女王と自衛隊大公とか考えながら書いていたのかなぁとかいろいろ想像される)やら、国粋主義者くずれの公爵、貧富の差によるルサンチマンが駆動する裏切り者の大量発生とか、事態は混沌としながら、進んでいく。そして子供は全国に学校を作り国民に教育を与える役目を担って終結する。

卑しい人間は出てくるが、そういうどうでも良い連中に作品のページを使うのはもったいないとばかりに、基本的に出てくる人間は自分が何をなすべきかには迷いはあるが、世の中を悪くしないようにか、あるいは良くするためにか、その2つのベクトルの違いによる諍いが主となる。

当然、戦争というのは正義がどうしたというようなことではなく、経済圏を守るためには、どのような妥協があるのかとか、長い目で見れば負けようが戦争を辞さない姿勢を見せる(武力の示威)ことで周辺諸国に与える影響を考える必要があるとか、子どもだましではない目線で物語は進む。

1~2巻が、勉強するというのはどういうことかを学べるのであれば、3~4巻は、話し合いや殴り合いの経済効果をはじめとした社会との向き合い方を学べる作品となっている。

おもしろいなぁ。今はこういう娯楽作品が受け入れられているのだな。

獣の奏者 全5冊合本版 (講談社文庫)(上橋菜穂子)

奇妙と言えば、視覚的な印象がすごく薄い。

1~2巻のクライマックスは、映画でいえば角川春樹の天と地よや、ディズニーのナルニア物語の2作目のような、2陣営の俯瞰による大スペクタクルシーンで、大地を覆う闘蛇に天空から襲い掛かる王獣(背中に当然のように主人公が乗っている)で、3~4巻のクライマックスも同じく地を埋め尽くす闘蛇の上に天空から襲い掛かる王獣軍団(飼育繁殖に成功した)というスペクタクルシーンなのだが、どちらもあまりパースペクティブが無い。最初、形容がへたなのかと思ったが、別にそういうことでもなさそうだ。

それよりも主人公たちの思考の印象が強い。三人称小説なのだが、意識の流れが入っているので、すごく観念的な印象を受ける(とは言え、思考の対象が物理的なので、曖昧さはなく、硬質な読み応えががる)。

子どもが小学校高学年だったら、買って読ませてやりたかった。


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|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|

ジェズイットを見習え