バナナ剥きには最適の日々

何故か円城塔が並んだので(しかも前回が200日以上前でさらに読んだ順序からすれば道化師の蝶の方がだいぶ先だ!)、もう一つ並べておく。基本的に自分は文庫派(?)の人間でハードカバーの本を買わないのだが(持ち歩きにくくて…)、せっかく珍しい人が芥川賞を取ったので、記念の特権です。

で。円城塔は人によって好き嫌いがあるだろうから好みに任せれば良いと思うのだが、表題作が可愛い。可愛いので、表題作は読んでみて良いと思う。

ちなみに、円城塔を一冊読むのはちょっとアレで(自分は好きですけどね)、一作のために買うのもなぁという場合は、例えば 2010 年に出た 2009 年の年刊日本SF傑作選「量子回廊」(短編集)にも収録されているので、そう言う手もある。

バナナ剥きには最適の日々量子回廊 (年刊日本SF傑作選) (創元SF文庫)

道化師の蝶

書いたと思っていたのだけれど書いていなかったので(ローカルのノートに書いていたらしい)、今更ながら公開しておく。何故か今日、そんな話になったもので。

表題作は芥川賞を受賞した。驚くべきことだ。難しいとか読めない、破綻している、バカにしているなどだけでなく、睡眠薬代わりになるという効果も発見されている。自分は、比較的普通に、でもないが眠らずに読めた。読めたことは必ずしも理解できていることを意味しないが、それはどんな作品についても同様なので、そうした事柄については無視する。

通常、自分は感想文を書く時に、本文の内容には可能な範囲で触れないことにしているが、「まともな人間には読めない説」があったり、「まともでないことを確認する踏み絵」のようになっているので、いやそんなことはない、自分はある程度まともな人間であると主張するべく、こう読みましたということを書いておくことにした。

文章というのはとても多くの次元を含み得るようで、これはその写像の一例にすぎないということを留意されたい。つまり、別にここには量子力学のことを書かないが、そう言う発想を否定するつもりはないということだ。

前置きが長くなったが、では珍しく本文について。

一般的には、「人が着想を得る話」と解釈されている。閃きを得るまでに、全く関係ないようなプロセスを経て、蝶が着想の卵を産みにくる、みたいな感じだ。そこに量子力学的モチーフがあるかもしれないが、とりあえずおいておく。

全体は5篇のパーツからなっており、登場人物が重複するのだが、ひとつながりのストーリーだと考えようとすると結構辛く、読み進めることが困難となり、つまり眠くなる可能性がある。自分はSF読みなのでSF的世界観を持ち出すと、これらは似て非なる並行世界を描いたのだ、と解釈して誤魔化した。こう考えれば、脳内の混乱を少しは抑えられるかなと言ったところだ。投げやりだが、それぞれ好きに乗り越えるべき部分だと思う。

着想は5つの世界をふわふわと飛んで、最終的に卵を産みつけるわけなのだが、問題はどこに産みつけたのかということだ。自分は、「読者の頭の中」であると考えた。道化師の蝶は、物語の世界を渡り歩き、最終的に物語の外、読者の頭の中に卵を産みにくる。つまり本作はそんなストーリーだと解釈した。

そう考えると、物語に存在する数々の謎や矛盾、あらゆる言葉が全て罠なのではないかと言う気がしてくる。色々な人(読者)を引っ掛け、そいつの頭の中に卵を産んでやろうと虎視眈々と狙っているやつが「道化師の蝶」である。

そして現実に、その卵が孵り、育った結果として、こんな文章になっている。これは、ターゲットを「読者」としたトロイの木馬型のウイルスであるとも言える。おいおいどうしてくれる、というのが率直な感想だろうか。

さて。本を読んで、色々な発想が生まれ、それが何かしら別の形になるというのは、考えてみれば普通のことだ。しかし、これを言い換えると、文章によって脳内に何かしらの新たな「構造」を構築可能であるということもできる。文章の内容は実体を伴わないが、それを元に人間を実行動させることが出来る訳だから、「情報は実体化することもできる」と言えるかもしれない。現に文章の中の蝶は、人間の脳に卵を産み落として様々な人の行動を変化させ、ある意味に置いては現実世界に到達しているとも言えよう。情報というものの不思議さ。そんなことを考えた。

道化師の蝶

屍者の帝国

楽しんで読むことができた。いろいろあるにしても、きちんとエンターテイメントとして読める。

何よりも素晴らしいのは、円城塔であるにもかかわらず、十分に伊藤計劃を感じられることだろう。

確かに、伊藤計劃だったらこうはならないのではないか、と思うところはある。しかし冷静に考えれば、円城塔だったらこうはならない、とも言えそうなのだから、これは「伊藤計劃×円城塔」という著者のデビュー作だと考えるべきだ。

伊藤計劃の作品は、かなり映像的に感じられる。スピード感も、場面転換も、情景の描かれ方も。文章を読んでいて、その情景が浮かんでくるというのはよくある話だが、伊藤計劃の作品においては、その傾向は非常に顕著であるように思える。ガジェットあり、アクションありの、ハリウッド的な豪華さもある。格好良く、難解すぎない。

一方で円城塔の書く文章は、自分の中では、例えばクラインの壺のようだったり、フラクタルであったり、そんな風なイメージになる。物語の内容というよりは、物語全体の作り出す形状が興味深い。ある程度読み進めないと形すら見えないし、読み進めると物語の外に何かしらが構築されてしまう。それが恐ろしくもあり、面白い。が、物語が脳内で直接映像化される伊藤計劃の作品とは、プロセスが違うというかなんというか。

だから、公開前にはどうなることやらと思っていたが、ある意味では想定外なほど視覚的な、伊藤計劃的な作品だった。「円城塔の文章なんて読めねぇ」という人でもこれは読めるだろう。普通に、頭からおしりまで読めばいいだけ。豪華で魅力的な登場人物とガジェット、そして展開。ちゃんと「次のページをめくりたくなる」あの楽しさが宿っている。それって何のひねりもなく、ただの良い本じゃないか。

本書を読んで、伊藤計劃という著者か喪われたことが改めて惜しくて堪らなくなったが、でも実際は、こうして作品が出てくるわけで、結局のところ、失われていないのかもしれない。そんなオチをつけてしまうあたりは、円城塔らしい。

屍者の帝国

図書館戦争

ライトでさっくり読めてしまうが、本好きの人たちが喜んだ理由というのはわかる気がした。

本好きの人(≠本を読む人)たちって、決してマイノリティではないけれどかといって今どきマジョリティってわけでもなく、若干肩身の狭い思いもありつつ(それは自分がSF読みだからか?)、それでも本のない世界など想像も出来ないから、きっと本のために何かを投げ出せるような気持ちがある。というなんとも漠然としたところをすくい上げているのかなぁ、などと思った。

SF読み的には、要するに平行世界モノとして考えて(えー)、あの事件あたりであっち方向にかじ取りするとこうなるのかなー、なんてことを考えたりする。何でもSF的に考えるのはほとんど習性です。

図書館戦争  図書館戦争シリーズ(1) (角川文庫)図書館内乱  図書館戦争シリーズ(2) (角川文庫)図書館危機 図書館戦争シリーズ3 (角川文庫)図書館革命 図書館戦争シリーズ4 (角川文庫)

連環宇宙

「スピン」シリーズの完結編。2作目の「無限記憶」では、少し勢いが衰えたかなと思わせたが、本作では十分に盛り返している。終盤は壮大な世界観が描かれているのだけれど、お話として発散し過ぎることもなくきちんとスタートに戻ってくるあたりが、さすがというかなんというか。「クロノリス」がなかなかだったので大失敗はなかろうとは思っていたけれど、想像以上にお上手だと思った。

連環宇宙 (創元SF文庫)

cf.時間封鎖〈上〉 (創元SF文庫)時間封鎖〈下〉 (創元SF文庫)無限記憶 (創元SF文庫)

プリントダイアログを出さずに印刷する話

MFCな話。

印刷する時はプリントダイアログを使ってDEVMODE構造体を作り、それを用いてdcを更新してごにょごにょする。

CPrintDialog dlg(FALSE);
if ( dlg.DoModal() == IDCANCEL ) {
    return FALSE;
}
DEVMODE* mode = (DEVMODE*)::GlobalLock(dlg.m_pd.hDevMode);
// ...

ダイアログを出さずに印刷する場合は、デフォルトのDEVMODE構造体を作っておき、それに色々な設定をする。

CPrintDialog dlg(FALSE);
dlg.GetDefaults();
DEVMODE* mode = (DEVMODE*)::GlobalLock(dlg.m_pd.hDevMode);
mode->dmOrientation = DMORIENT_LANDSCAPE;
// ...

// DEVMODEで設定出来る内容:DEVMODE structure (Windows)

なのだが、プリンタ固有の機能、例えばフチなし印刷だとか写真モードだとかはドライバ依存で、そう言う機能へのアクセス方法がよくわからない。

いろいろ調べると、そう言ったデータはDEVMODEに続くメモリ領域に保存されているらしい。それをデータとして取り出してどうにか保持すれば、初回(データを作る際)はともかくそれ以降は、ダイアログを出さずそのデータを流用出来るのではないか。と考えてやってみたら成功した。

DEVMODEに続く領域、というのがどれくらいかは、その大きさがDEVMODE構造体内にdmDriverExtraとして保持されている。従って、DEVMODEの先頭を指し示すポインタを起点に、DEVMODE構造体のサイズ+dmDriverExtra分読めば良い。

とりあえずファイルに書き出してみる。

CPrintDialog dlg(FALSE);
if (dlg.DoModal() == IDCANCEL) {
    return FALSE;
}
CFile file( PATH_TO_SAVED_DEVMODE, CFile::modeWrite | CFile::shareDenyWrite | CFile::modeCreate);
DEVMODE* mode = (DEVMODE*)::GlobalLock(dlg.m_pd.hDevMode);
file.Write( mode, sizeof( DEVMODE ) + mode->dmDriverExtra );
file.Close();
// ...

再利用時、ファイルから読み出してDEVMODEを作れば、ダイアログを出す必要が無い。

CFile file(PATH_TO_SAVED_DEVMODE, CFile::modeRead | CFile::shareDenyWrite );
DEVMODE tmp;
file.Read( &tmp, sizeof( DEVMODE ) );
file.Seek( 0, CFile::begin );
DEVMODE* mode = (DEVMODE*)malloc( sizeof( DEVMODE ) + tmp.dmDriverExtra );
file.Read( mode, sizeof( DEVMODE ) + tmp.dmDriverExtra );
file.Close();
// ...
free( mode );
// ...

dmDriverExtraを取得するために、一時的なDEVMODEを作っている。その後先頭にシークし直し、全体が入る領域を確保してから読み出している。

インポートしてみた

id:onishiが、インポート機能とても頑張ったといっていたので、気になってインポートしてみた。確かに素晴らしい出来栄えでした。

ただ、たぶん自分の場合「戻す」ということがないので、機能の核でもある「いつでも戻せる」を試すことはないかもしれない。「戻す」は「どんなに素晴らしくてもうまく行くほど使われない」という切ない代物だけれど、「安心感」という形でしっかりと機能はしている。コードが実際に動くことはないのに機能しているなんて、なんというSF…(←SFかぶれ)。