トップ 最新 追記

日々の破片

著作一覧

2010-06-01

_ クライバーのラボエーム

良くまあ、こんな録画が残っていたものだと、タワーレコードの店頭で見かけて思わず買ってしまった。

PUCCINI : LA BOHEME [DVD](Kleiber. Pavarotti. Cotrubas.)

1979年のスカラ座の舞台録画で、音はPCMだけどモノラル。ビデオはぴんぼけ気味(おそらく、テレビ用の業務用VTRから起こしたのだと思うが、もしかすると素人海賊版なのかも)、MacBook Proで再生したのだが時々画像が止まってしまったりプレイヤーがハングしたりするひどい代物だ。Macではなく、DVDプレイヤーで再生しても再現したら、お取替えに行くしかないだろうな。

が、良い。

パヴァロッティが高らかに、僕って何? 僕は詩人を歌い上げるし、コトルバスは実に美しく、ルチアポップは丸っこい悪戯娘を愉しく演じている(ポップはミミを歌ったCDを持っているが、両方こなせるんだなぁ)。

クライバーの指揮は歯切れ良い。もっとも、ボエームの指揮はそれほどうまいへたは出ないような気がするから、これがクライバーならばこそなのかどうかはちょっとわからないけど。

演出はゼッフィレッリなので、2幕目は2階建てで演じられる。でも以前観たメトロポリタン歌劇場のやつよりはあっさりとした雰囲気。でも良くも悪くも19世紀風のボエムだな。

と、アラが粗荒かしこだが、でも、これは本当に素晴らしい。


2010-06-02

_ 大辞林は無駄にはならなかった

まあ、拡大した時のフォントが汚いのは我慢できるが、そうは言っても嬉しくはないなぁというか、なんと贅沢になったことか。でもやっぱり嫌だな、今となっては(アップルのデバイスに期待しているのは結局、「きれいさ」だということのようだな、と自己分析)。

一方、小さいの(オリジナルサイズ)は読めないわけではないのに、どうして、こうも気分が悪いのか考えてみると、どうも画面全体に対する小ささのバランスが気に食わないという感覚レベルでの拒否反応のようだ。というか、往年のサイドキックみたく、何かボタンを押すと、現在実行しているアプリケーションの上にポップアップされるのなら、オリジナルサイズのほうが具合がよさそうだが、もちろんiPadはそういうデバイスではない。そういう意味じゃ、極端なタイルウィンドウのウィンドウシステムを採用していると言えるのかもな。そこがつまるところは気に食わない。

で、何気なくというわけでもないが、バッテリーが残り少なくなったので久々にMacBook Proに繋げて、ついでにiTunesで同期したらちゃんとアプリケーションってところに保存されて、へー、こうなるのかと知った(というか、バックアップできるのを知らずに買ったところは携帯文化に毒されているということだ)。

で、もしかしたら、買ったソフトって他のデバイスにもコピーできるのか? と、試しに以前入手して幾つもの理由から使い物にならないのでバッテリーが枯れ果てていたiPod touchを繋いでみるとコピーできて、しかも使える。良くわからんが、iPod touchで表示すると、iPadでオリジナルサイズで表示するより読みやすい(実際のサイズはiPadのほうが大きいのはドットピッチの差かなぁ)。これも、そういうものだという意識が働いているのだろう。

っていうか、アップルは閉鎖的なクズだと思っていたが、携帯文化な観点からは、すさまじく開放的だね(商品の利用勝手という点では)。あるデバイスでダウンロードしたアプリケーションが別のデバイスでも利用できるわけだから。

すると、これまで引き出しの肥やしになっていたiPod touchが、今や使える大辞林に変わったことになる。(紙版と違って普通に読めるし)

どうやら、おれは優れた電子辞書デバイスを再発見したらしい。

というわけで、英和、和英について、iPad専用が出たら買おうと(今もひとつ出品されているけど良くわからないので、選択肢が増えるのを待ち状態)、大辞林の経験から考えていたのだが、iPhone用=iPod touch用のを買えば、それでいいんじゃないか? という気になった。iPadで使う気になるかは別問題だが、いずれにしろiPadはオンラインでなければ使わないから2の次でいいや。

Apple iPod touch 第2世代 late 2009 8GB MC086J/A(-)

電子辞書として考えると、フォントはきれいで読みやすいし、入力は専用機の小さなキーよりむしろしやすいし、中身に何を選ぶか比較的自由に選択できるし、WiFiが使えればWebも見られるし、これは良いデバイスだ。(とiPhone知らずに育ったおれが再発見をしまくっているところ)

# でも、速度は(=反応は)実用範囲だとは言え、iPadとは比較できない(初代iPod touchだというのもあるけど)。確かにiPadは高速だ。


2010-06-03

_ 5/28の続き

良く良く見たら、改版のほうは単純なバグ(同列、同行の比較をすべきなのに間違えて同一始点か見てた)なので直して、それから意味無く冗長だった箇所を修正。

・readIOの呼び出しに2回クッションがあったけど、なぜそうしたのか今となってはわからないので直接呼び出すように修正。

・最大のやつを求める関数のmaximumByを見つけたので置き換え。

・重複したコードを1つにするとか。

・長すぎる気がしたところを変数に束縛したり。

・concatの使い方を覚えた気がする。

・>>=を使ってみたり。

import IO
import Array
import Data.List(maximumBy)
import Debug.Trace
 
rLine :: IO [Int]
rLine = do
          lis <- getLine
          readIO $ "[" ++ lis ++ "]"          
        
data Area = Area Int Int Int Int
          deriving (Eq, Show)
 
showArea :: [Area] -> IO ()
showArea [] = putStrLn ""
showArea (x:xs) = do
                    putStrLn $ show x
                    showArea xs
 
areaX :: Area -> Int
areaX (Area x _ _ _) = x
 
areaY :: Area -> Int
areaY (Area _ y _ _) = y
 
samePos :: Area -> Area -> Bool
samePos (Area x0 y0 _ _) (Area x1 y1 _ _) = x0 == x1 && y0 == y1
 
sameLine :: Area -> Area -> Bool
sameLine (Area x0 y0 _ _) (Area x1 y1 _ _) = x0 == x1 || y0 == y1
 
checkArea :: Area -> [Area] -> [Area]
checkArea _ [] = []
checkArea a0 (ar:as) = if sameLine a0 ar
                       then ar:checkA0 as
                       else filter (samePos ar) as ++ checkA0 as
             where checkA0 = checkArea a0                            
 
calcArea :: Area -> [Area] -> [Area]
calcArea _ [] = []
calcArea a0 ((Area sx sy _ _):as) = Area sx sy w h : calcArea a0 as
  where   
    w = areaX a0 - sx + 1
    h = areaY a0 - sy + 1
 
accumArea :: Area -> Array (Int, Int) [Area] -> Array (Int, Int) [Area]
accumArea ar a = a // [((x, y), ar : calcArea ar list)]
  where   
    x = areaX ar
    y = areaY ar
    list = checkArea ar (a ! (x - 1, y) ++ a ! (x, y - 1))
 
accumAreas :: [Area] -> Array (Int, Int) [Area] -> Array (Int, Int) [Area]
accumAreas [] a = a
accumAreas (ar:as) a = accumAreas as $ accumArea ar a
 
compArea :: Area -> Area -> Ordering
(Area _ _ w0 h0) `compArea` (Area _ _ w1 h1) = (w0 * h0) `compare` (w1 * h1)
 
maxAreas :: Array (Int, Int) [Area] -> [Area]
maxAreas a = [maximumBy compArea $ concat [es | es <- (elems a)]]
 
makeArea :: [Int] -> [Int] -> [Int] -> [Area]
makeArea _ _ [] = []
makeArea _ [] _ = []
makeArea [] _ _ = []
makeArea (_:xs) (_:ys) (0:vs) = makeArea xs ys vs
makeArea (x:xs) (y:ys) (_:vs) = Area x y 1 1 : makeArea xs ys vs
 
readSquare :: Int ->  IO [Area]
readSquare 0 = return []
readSquare nn =  mapM (rsqr [1..nn]) [1..nn] >>= return . concat
    where
      rsqr :: [Int] -> Int -> IO [Area]
      rsqr sq n = do
        putStrLn $ "input line " ++ (show n) ++ "..."
        rLine >>= return . makeArea sq (repeat n)
        
setArea :: [Area] -> Array (Int, Int) [Area] -> Array (Int, Int) [Area]
setArea [] a = a
setArea (ar:as) a = setArea as (a // [((areaX ar, areaY ar), [ar])])
 
main :: IO ()
main = do
          let size = 5
          let a = array ((0, 0), (size,size)) [((x, y), [])| x <- [0..size], y <- [0..size]]
          lis <- readSquare size
          showArea $ maxAreas $ accumAreas lis $ setArea lis a

以下の箇所は気に食わない。

makeArea _ _ [] = []
makeArea _ [] _ = []
makeArea [] _ _ = []

makeArea _ _ [] = []はあり得るが、下の2つはあり得ない。しかし省略すると-Wallだと文句を垂れてくる。コンパイラの警告を止めるためだけの無意味なキャストとか嫌いなのだが(だからがちがちのCコンパイラを使うときは警告はわりと気にしない。戻り値を使わない関数呼び出しにいちいち(void)とか書くのは愚の骨頂だろ)、Haskellの場合はどうするんだろう? やっぱり警告が出ないように書くのかな。

あと、>>=の使い方がやっとわかった。

*Main> :t (>>=)
(>>=) :: (Monad m) => m a -> (a -> m b) -> m b

だから、→の先はm bを返す関数でなければならないので、上のリストだとconcatを与えることができず、return . concatを与える必要があるということなのか。

手元の向井さんの本の

関数の返り値型はモナドですから、その結果はやはりIOとしてしか受け取れず、いつまでたってもIOの「印」を取り除けずに、しかしどんどん計算を進めることができるというわけです。

の意味が腑に落ちた。

入門Haskell―はじめて学ぶ関数型言語(向井 淳)

なんか、アマゾン評はやたらと低いし、すでにカタログには無いが、おれにはこの語り口は妙に読みやすいんだよね。でも索引がずれているからリファレンスとしては使えない(正誤表はあるのだが、これが印刷すると変な順序になるので今3つくらい使えない)のが残念な点。


2010-06-04

_ Smalltalkの位置

みねこあさんの「プログラミングパラダイムについて、つれづれと」を読みながらつらつら考えるに、Smalltalkは命令型言語だが、ステートメントにそれほど依存していない(と調べずに書く)のだから、手続き型言語(もっとも、Rubyだってwhileもifもみんな式であってステートメントではないのだが、それは元々の実装の都合のような気はする)の箱から外して、本文のほうではハイブリッド型というのは技術的な特徴がどうしたと書いているのだから関数がファーストクラスオブジェクトである以上はハイブリッド箱に変えてみて(もっともsumimさんのSmalltalk-76と-80についてのコメントを読むと、「Smalltalk」と一括りにして良いのかどうかも怪しいけど。そこでSmalltalk-76を「Small」、Smalltalk-80を「Talk]とそれぞれ略称することにして、併せて「SmallTalk]と表記することを提案してみたり。でもそうは書かないけど)書き直してみました。

プログラミング言語分類

この図自体は、井出先生の本の分類(から読み取った内容。だからオブジェクト指向パラダイムが命令型/関数型に直交しているのはみねこあさんが書いている通り)の上に、現在の言語をマップしたもので、「〜言語」というキャプションが入っていない箱はソースの見た目による括りです(というところで大雑把にAlgol系とLisp系に分けているけど、Rubyは言語仕様という点からは何でも式だからLispに近いと思うし、JavaScriptはクラスベースのOOPLでは無いという点から仲間外れだったりするわけだけど)。

_ RubyForgeのリリースとgemの更新が同期されなくなっていた

rjb-1.2.2をリリースしたのに、gem install rjbすると1.2.0がインストールされるので不思議だなぁ、ファイルコピーに失敗してるのかな、とダウンロードページからダウンロードして確認してみたり、1.2.0は名前をつけ間違えてrjb-1.2.0ではなく1.2.0というリリース名になっていたので、同じように1.2.2というリリース名に変えてみたりしたが、とにもかくにも変わらない。

で、gemがどこからダウンロードしているのか、gem environmentで見てみると、http://gems.rubyforge.org/ と表示された。

で、そのURIをアクセスすると、gem pushしろと書いてある。

むむ、ってことは1.2.0のリリース後にルールが変わったのだな。気づかなかった。

が、

$ gem19 push rjb-1.2.2.gem
ERROR:  While executing gem ... (RuntimeError)
    Unknown command push

なるほど、ではgem update --system してからもう一回試すと、RubyForgeのログインを求められて、無事プッシュできた。

すると、RubyForgeのほうは、一般にgem installされる安定版とは別に、非安定版をばりばりアップロードする使い方ができるのだな。

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

Before...

_ sumim [Squeak は、よく、新しい Smalltalk であるかのように紹介されますが、実質としては Alk つまり -..]

_ arton [ってことはみんなが考えるSmalltalk≒Alkということですね。(するとますますTalk派(いるのか?)は間違っ..]

_ sumim [やりすぎで―というのは、アラン・ケイが「かくあるべき」「これで十分(工夫次第で他を損なわずに)可能」と考えるところを..]


2010-06-05

_ OSXでrubiniusをrakeするメモ

いろいろ要求されるものの関連がわからずに時間がかかったので、rubiniusを作るためのメモを残す。

後で必要になるものをまず用意する(素のOSXの場合)。

Xcode。これは当然。

portコマンドを作る。結局、これがなければ後の作業がとんでもなく大変になる。

pkgもあるが、作っても良いかも。svnのリリースレポジトリのタグリストから今ならrelease_1_8__2を取り出す。svn export http://svn.macports.org/repository/macports/tags/release_1_8_2。Make用ディレクトリはbaseなのでcd baseする。このままだと/optにインストールされて面倒なので、--prefixを使ってインストールしたい場所にしておく。cf)./configure --prefix=$HOME。そこまでできたら、make install。--prefix=/usr/localとかしたら、当然sudoする。

portができたら、いろいろportする。

port -d selfupdate
port install nkf
port install git-core(長時間注意)

rakeとgemが新しくないといろいろ困ることになるので、OSXデフォルトのrubyを利用する前提で、全部更新する。

sudo gem update --system
sudo gem install rake
(複数のrubyがいり混ざった環境だと、/usr/bin/rubyを見に行ったりされることがある(どれか忘れた)ので厄介なことになる)

gitが手に入ったので、rubiniusを取り出す。

mkdir git;cd git
git clone git://github.com/evanphx/rubinius.git
cd rubinius ./configure --prefix=$HOME
rake install

$HOMEを指定した場合、rubiniusは、$HOME/rubinius/にインストールされる。現在のバージョンだとコマンド(rbx)は$HOME/rubinius/1.0/binにインストールされるので、PATHに加えておく。

はまったところ。

途中でいろいろportを入れたりいじったので、$HOME/includeや$HOME/libが正しく参照されていなかったらしく、rake時にはOSXに最初から入っているlibiconvを参照して、しかし実行時にはportが入れたlibiconvを参照して、動作しなかった。

rubinius/1.0/lib/iconv.rbを開くと、attach_functionで参照する関数名が乗っているので、iconv -> libiconvのように、関数名の先頭にlibを付けるか、または実行時にロードするlibiconvを/usr/lib/libiconvに変えるように設定する(が、面倒なので直接iconv.rbを修正した)。

_ rubinius用に拡張ライブラリを書き直す

使いたい関数やマクロが定義されていないので、いろいろ直す必要がある。

基本は、rb_funcallを使うこと。

いずれにしろMRI互換レイヤーみたいなものは、rb_funcallで実装されているので同じことだ。

互換レイヤのソースディレクトリは、vm/capi。

特に、RHASH_TBLは「1」にdefineされているので、そのままではmakeできなくなる。#if defined(RUBINIUS)する。

_ rubiniusでirb

rbx irb 盲点だった。

2010-06-06

_ アイアンマン

子供がホームズ観て気に入ったらしく、ロバートダウニージュニアつながりでアイアンマンのDVDをツタヤで借りてきたので一緒に観た。

観ていてなんとなく思ったのだが、ファンタスティックフォーといい、X menといい、あるいはバットマンのブルースウェインもそうなのだが、アメコミのヒーローって基本的に科学者なのだよな。

アイアンマンの主役のトニー・スタークだって、兵器会社の社長で単なる女たらしのようでいて、特殊なエネルギー装置を手近のガラクタ(というセリフを技術的に作れませんという言い訳を部下の技術者に聞かされた悪の親玉が使うけど、実際はまともな材料だったかも)を使って(もっともそうしなければ死んでしまうという前提つきなわけだが)さくっと作ってしまう天才科学者(しかも自分で溶接までする技術者でもある)だ。

アイアンマン デラックス・コレクターズ・エディション(2枚組) [DVD](ロバート・ダウニーJr.)

なんでだろう? と不思議に思うが、マンガとは言え、本を買える層でかつ本を読む層というとその時点でフリークスだから、当然のようにヒーローは科学者ってことになってしまうんだろうか? もしそうならば、アメコミにはそれほどスポ根みたいなものはないことになるだろう。どうなのかね。

そういえば、手塚治のマンガは1960年代途中まではロック少年にしろ、W3の星少年にしろビッグXの小僧にしろそれなりに科学的少年だったし、久松なんちゃらのスーパージェッターとか8マンとか(これはSF作家たちが原作/脚本書いてたからか)それっぽかったのが、だんだんそうでなくなって(手塚治のどん底期になる)、妖怪とスポーツマンの世界に変わっていったような気がする。空手バカ一代とか。またはワルとか(ちょっと違うが)国松君とか愛と誠とか石井ひさしとか、不良少年が主人公だったり。手塚治の晩年はブラックジャックは医者だけど、あとはタクシー運転手とか役者とかブッダだしな。

で、アイアンマンは想像以上におもしろかった。これがスポ根タイプなら、直截的にイスラム原理主義者が敵になるところが、奇妙な多国籍集団だったりして(もちろん、見るからに邪悪そうな男がすべての黒幕だし)、モビールアーマの戦いは面白いし、氷結して墜落するところが一応伏線になっていたり、いろいろ細部まできちんと作ってあって笑いながら観ていられる良い娯楽作品。

そう言えば思い出したが、アンブレラ・ファミリーも買って読んだが、これも主人公の長男のスペースボーイはゴリラの体を持った科学者だったな。

アンブレラ・アカデミー ~組曲「黙示録」~ (ShoPro books)(ジェラルド・ウェイ(作))


2010-06-08

_ ティーヴィーディナー

レインボーズエンドを読んでいて、突如、「TV食」という訳語に目眩を覚えた。

そのままおれは遠い過去の記憶をたどり、ハンガリーから来た従姉妹に食事を出すやせぎすな男とその友人が住むステュジオが視界に入るのを確認する。

次に以前の異様に緩慢に上下する青山の紀ノ國屋で時たま買い込む輸入された冷凍食品の味を舌に乗せる。

それは明らかにディナーと呼べる代物ではなく、だからこそそう呼ぶにふさわしい。

誤訳たよ。仮に原文がTV foodだとしても。

レインボーズ・エンド上 (創元SF文庫)(ヴァーナー・ヴィンジ)

ストレンジャー・ザン・パラダイス [DVD](ジョン・ルーリー)

_ ダイナーズでディナー

ウィズダムは「TV食」だが、ロングマンは「テレビディナー」。

ウィズダム英和辞典(永幸, 井上)

ロングマン英和辞典(Geoffrey Leech)

(これだけ取ってどうこう言ってもせんないが、ロングマンのほうが読んでいて面白い)

結局、iPod TouchとiPadには両方買った(同期したら両方に入ったからそういうものらしい。音楽と同じか)。ウィズダムは和英を買ったら英和も付いてきたという感じ。


2010-06-09

_ パス名

環境変数などにディレクトリ名を設定する時に、末尾へディレクトリ区切り文字を置くかどうかに基準はあるのだろうか。

rjbを置いていない前提で作ったのが、結構厄介をもたらしているらしいことに昨日、気付いたのだが。

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

_ i [基準は無いので正規化せざるを得ない、というのが個人的な結論です。]

_ arton [やっぱりそうなりますよね。]


2010-06-10

_ 7月5日の予定

マイクロソフトの荒井さんにお誘い頂いて、Tech Fielders セミナー 東京 [邪道編〜Ruby × Windows で出来ること]でセッションを持つことになりました。

なんといっても注目したいのは、荒井さんのIronRubyセッションですね。

一方、僕のセッションは、札幌Ruby会議01で行ったASR(Ruby on Windows)セッションをリバイズして、DLやWin32OLE、SWin、DXRubyなどのデモを交えたものにしようと考えています。

というわけで、.NET上のRubyとWin32上のRubyがOSTに並ぶ日ということになります。

OSTの近くには紀伊國屋書店の1階もあれば、クリスピークリームドーナツ(さすがに今は普通に買える)とかもあるので、お誘いあわせのうえ、来ていただければいいなぁと思います。

参照:荒井さんのBlogでの告知

というか、実は邪道編10周年記念なんだなぁと月日の流れにはうんざりしますね。

Rubyを256倍使うための本 邪道編(arton)

_ プログラムプロムナードの2回目

乗りかかった船なので、今度は複数の文字を含む区間の検索をHaskellでやってみようとしたが、1時間くらいいじっていても作れない。

もしかして考え方が間違っているのかと、ためしにRubyで作ってみたら10分かからずにできた(どうやるかはHaskellで書こうとした時に考え済みだったので、実装時間ということかな。でもほとんどはEnumerator#find_allの名前が思い出せなくてirbをいじくっていた時間だったりする)。(下のリストは推敲後なので実際には40分くらいになったけど、出力内容の重要な点は最初のバージョンからそんなに変わってはいない)

class String
  def exclude?(x)
    !include?(x)
  end
  def each_char_with_index
    i = 0
    each_char do |x|
      yield x, i
      i += 1
    end
  end
end
 
def add(c, i, b, key)
  b.map do |e, k|
    if e.size == 1 && k.exclude?(c)
      k << c
      if k.size == key.size
        e << i
      end
    end
    [e, k]
  end
end
 
text = 'program-promenade'
key = 'pma'
 
bag = []
text.each_char_with_index do |x, i|
  if key.include? x
    bag << [[i], '']
    add(x, i, bag, key)
  end
end
 
bag = bag.find_all do |e, k|
  k.size == key.size
end
 
p bag

どうも解答例を見るとおれのやり方と違ってえらく空間の使い方が良いが、でも同じ長さだった場合の列挙のための保存とか無視しているから、結局は同じようになりそうな気もする。

で、Rubyで書いたらあまりに簡単に書けたので、逆になんでこうもHaskellで書くのが大変なのかなぁと考えると、結局、あまりにもライブラリ関数を知らないのが問題のような気がしてきた。少なくともpreludeで読まれる関数くらいは覚えておくべきなんだろうな。

ただ、手続き型言語だと用意されている関数(オブジェクト)を知らなくても自分で手続きを書いていけばどうにでもなるのだが、関数型だと手続き(つまり手順)が書けないので、知らないと手も足も出なくなるように感じる(というか手も足も出ない)。そこが手続き型と関数型の一番の違いではないだろうか。

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

_ arai [10周年というのは気がついておりました。というのは、今回のことを思案していて、書籍を読み直していたからなんです。]


2010-06-11

_ 10日の続き

で、Haskellで書いたらこうなった。
check :: String -> (Char, Int) -> ([Int], String)
check key (x, i) | elem x key = ([i], [x])
                 | otherwise = ([], [])
 
comp :: String -> ([Int], String) -> Bool
comp key v = length key == length (snd v)
 
pile :: ([Int], String) -> ([Int], String) -> ([Int], String)
pile (is, x) (is2, x2) | x == x2          = (is2, x2)
                       | elem (head x2) x = (is, x)
                       | otherwise        = (is ++ is2, x ++ x2)
                
pileAll :: String -> [([Int], String)] -> [([Int], String)]
pileAll _ [] = []
pileAll key (v:vs) = (foldl pile v vs) : (pileAll key vs)
 
findSections :: String -> String -> [([Int], String)]
findSections key str = filter (comp key) $ pileAll key 
                       [(a, s) | (a, s) <- map (check key) $ zip str [0..], not $ null a]
 
main :: IO ()
main = do
--  readFile "nkdata.txt" >>= putStrLn . show . (findSections "pma")
  putStrLn $ show (findSections "pma" "program-promnade")

約1時間30分かかった(実際に動くまで。推敲は別)。


2010-06-12

_ 1年前の自分は他人

翔泳社から上梓したRuby1〜3の学習日記を書いているvan勉だぃありぃ〜をLDRで読んでいたら(それは気にならないと言えば嘘になるわけだ)、

Ruby3は読んでいて、ストーリーがしっかりしているから面白い。

この項目の流れも面白かった。

と、誉められているではないか。わーい、ありがとう、と知らない人ではあるけど面白いと言ってもらうとそれは嬉しいので礼も出る。しかしその一方で、あれそんなに面白かったっけ? と疑問に感じて、思わず読み返してみたら、確かにおもしろい。

1章から2章にかけて、同じプログラムを単なる構造化プログラミングから始めて構造体(値オブジェクト)の導入、メソッドの導入、継承の導入、ポリモーフィズム、コンポジション、ダックタイピングと変形させていくところは書き方にえらく苦労した(古臭いOOP3種の神器を使った上でダックタイピングにまで持って行くストーリーとコードを作ったわけだから)ので覚えていたし、出来上がってみれば自分でもコードを見ていて楽しいので印象的なのだが、後半はほぼストーリーが出来ていたので逆にどんなこと書いたか忘れていた。

CD付 Ruby 3 オブジェクト指向とはじめての設計 (プログラミング学習シリーズ)(arton)

後半は応用(中半はるいもさんが担当したデザインパターン)例として、フレームワークとは何かを簡単なWebサーバーを示して説明してから、次の章でユニットテストに入るのだが、思い出してみれば、この順序には頭を使ったのだった。

フレームワークとは何かを最初に示すことで、フレームワーク無しのユニットテスト(まさに反復である)から始めてテスティングフレームワークの導入がスムーズにできることと、フレームワーク内で動く呼ばれるまで何もできないオブジェクトを動かすためのユニットテストという流れを作れるからだ。

「ストーリーがしっかり……」という評は、その意図を汲んでくれているし、しかも面白がってもらえてるので、正直な話、とても嬉しいのだった。


2010-06-13

_ レント

子供が突然(たぶん、ラボエームとかWickedとか魔法にかけられて繋がりのような気がするが)レントと言いだして、DVDを買って見まくっている。

というか、最初、1年は何分か知ってるか? とか言い出したのはそのせいだと後からわかった。えーと、365×24×60だから700×12×60だから700^2でだいたい500000分くらいか? とか言ったら大雑把さを蔑むように526500分だと教えてくれたが、はてなんのことだろうと思ってしばらくしたら、一緒にDVD観ようと言い出して、いきなり始まった歌で、1年は526500分とか歌っているので、ああ、なるほどと気づく。

レント デラックス・コレクターズ・エディション [DVD](ロザリオ・ドーソン)

なんかユダヤ人の映像作家の声はエルビス・コステロで、ロッカー(なんか行きがかり上、荒川河岸に棲んでいる星のような)はヒューイ・ルイスとブルース・スプリングスティーンのようで……とか思わぬもないが、そういうことは置いておいて、なるほど、これは確かに優れたハイティーン映画だなと楽しめた。それにしても、サンタフェの崖の上のシーンには爆笑してしまったが、後でこれまた子供と、監督と役者の呟き音声で観ていると、まさにMTV用の有名なロケ地だというようなことを笑いながら話していて、おおやっぱりと納得したり。というか、最近のDVDはすべて関係者の与太話トラックが入っているのかな。こうやってメタな鑑賞手段が用意されているのが当然のこととなるとは、ずいぶんと良い現在だ。

唐突に70年代のマンハッタンの青春映画を思い出す。

グリニッチ・ビレッジの青春 [DVD](レニー・ベイカー)

時は流れ、グリニッジビレッジつまりウェストビレッジが再開発されてアーティストの卵たちはイーストビレッジへ移って、でもそれが再開発で失われつつある、それがレントなのだろう。おれが最後にそのあたりの情報を見たときはABC地区へ移ったのがさらに再開発されて、とまあ時代と共に場所は変わる。カルチェラタンからレアルへ、とか。日本だと大正では浅草で、昭和になって新宿が来て、さて今はどこなんだ、とか。

で、ウェストビレッジのやつはまったく同時代感覚はないからすべてカタログ的な感覚で、これっぽっちも覚えていないが、レントはまさにおれと同世代(よりちょっと若いかな)の連中なだけに台詞の端々がえらくわかっておもしろい。

で、子供に、あー、こういったニューヨークスタイルのパフォーマンスでやたらとモニター並べるのに、たとえばローリーアンダーソンってのがいてさぁとか、エビータってのが引用されたけどおそらくアメリカ人のミュージカル作家としては窓から投げ捨てたいってことだろうね、そういえばローリングストーンズがテレビをホテルの窓から投げ捨てるというパフォーマンスをしていたけど窓から投げ捨てるという意味は……茶の間テレビの気安さから知ったかしようとすると、「それWikipediaで調べたから」とか「うるさい、そんなの知ってるに決まってる」とか生意気言いまくられて、くそぅおれは同時代の空気を吸ったリアルなものとしてそれを皮膚感覚でわかっているのだよ、この単なる知識主義者めと子供の成長を祝福しながらもむかつきながら(でもおれは素直ないいやつなのでそこで口を噤む。紡ぐと似ているがえらく違うな。言葉を紡ぎ口を噤む)、あ、この情景をこないだ読んだぞ、とレイボーズエンドの一節を思い出す。

レインボーズ・エンド上 (創元SF文庫)(ヴァーナー・ヴィンジ)

子供がわからないことがあるとウェアラブルを使って検索してあたかも自分の知識のように、しかし単なるオリジナルに対するプロクシとして言葉を通過させているという状況に気づいた元詩人が辛辣にやりこめるところだ。

まあ、そんなものだろう。おれは大山倍達が毎日10000回の正拳突きの練習をして、空手の神様になったということを知識としては知っていても、だからといって毎日10000回の正拳突きを体でものにしているわけではない。

知とは、誰かが時間をかけて喜怒哀楽や生活やその他いろいろなものと複雑にからませながら習得したものを皮相的な存在に変化させたものだ。それを形式知と呼び、内面の葛藤を必要としない故に教育に利用できるために尊ばれる。それが人類の秘密だ。

それがたかだか30年程度の差となると、まだその知が知となる前のものとして体に染みついている人もいるから、軋轢もあるのだろう。なかなか、おもしろいものだ。


2010-06-14

_ clean-encの謎

Rubyのmakeしようとして、でも何か理由があって途中(.cのコンパイル中くらい)に失敗したとする。

で、クリーンしようとすると途中でstopする。

調べるとclean-encの中でエラーになる。

C:\Users\arton\ruby-1.9.2-preview3>nmake clean-enc
 
Microsoft (R) Program Maintenance Utility   Version 6.00.9782.0
Copyright (C) Microsoft Corp 1988-1998. All rights reserved.
 
cleaning encodings
NMAKE : fatal error U1052: ファイル 'enc.mk' が見つかりません。
Stop.

ところが、clean-encのところ($(SRC)/common.mk)を見ると

clean-enc distclean-enc realclean-enc:
 	  @echo $(@:-enc=ing) encodings
	  @-$(MAKE) -f $(ENC_MK) $(MFLAGS) $(@:-enc=)

となっていて、先頭に「-」が付いているからエラーチェックは働かないはず。

事実、最後までmakeを終わらせた後は、何度make clean-encとかやってもエラーにはならない。(修正。ここは嘘)

おれにとっては、これがRubyの一番の黒魔術だ。

追記:わかってしまえば何のことはなく、nmakeが呼び出すnmakeがStopエラーになっていて(それは前提なので@-としているわけで)、元のnmakeはそのまま処理を継続していました。お騒がせしてすみません。

_ clean-encの続き

でもちょっと待てよ。(ここは嘘)

makeが最後まで走った後は

C:\Users\arton\ruby-1.9.2-preview3>nmake clean-enc
 
Microsoft (R) Program Maintenance Utility   Version 6.00.9782.0
Copyright (C) Microsoft Corp 1988-1998. All rights reserved.
 
cleaning encodings @-nmake -f enc.mk -l clean

echoの出力が異なるなぁ。ここに秘密がありそうだ。


2010-06-15

_ test

while (0 < i) {
  ...
}

が、

test bx, bx
jl   $label

とコンパイルされて、はて、なぜこうなるんだ? とちょっと悩む。

cmp $0, bx  #ちょっと嘘かも。
jge $label

なら、わかるんだけど。cmpだし(最適化しないとこうなるのだが、それは別の話)。

で、testはANDの結果をフラグに設定するということをWikipedia(インストラクションレベルでページがあるんだね)を軽く読んで(固有の単語がいっぱい並んでいるので読む気が失せたのだった)理解したので、0はまあ良いとする。

0 and 0は、0だからzフラグが立つし、1 and 1は1だからzフラグはクリアされる。

で、再びWikipediaを眺めるとMSBという文字が見えたので、ああ、と理解できた。0xffffffff and 0xffffffffは0xffffffffだからMSBが立つ。testはどうやら算術テストのようだからそれは負値でつまりLとみなされるということなのだろう。

久々にアセンブリリスト眺めるとおもしろいな。

x86アセンブラ入門―PC/ATなどで使われている80x86のアセンブラを習得 (TECHI―Processor)(大貫 広幸)

Windowsのお勧めは32ビットアプリケーションだということは、まだ当分、このタイプも役に立つんだろうなぁ(おれは買わないんだけど、まだ必要かどうかはとても悩ましい)。


2010-06-16

_ VC++のバグ

発端:バグか?バグなのか?

結論:0 < 0 は true らしいぞ

追記:(ちゃんと上のリンクをたどると、0 < 0が偽になるのは、API呼び出し先のアドレスがレジスタにキャッシュされたwhileループの時で、かつ0との比較かつ……のような複雑な条件のときだということがわかるんだけど、ぶくまされた部分だけ読んで単に0 < 0が偽になるバグがあるとか誤解しないでくださいね)

当人にとっては深刻ではあるが、無茶苦茶おもしろい。

ためしてみたけど、/O2 /GL でVS2008で再現した。

アセンブリリストを出してみたら、do { ... } while (0 < i); のようなコードが生成されていたから、そりゃ0を与えてもだめだなぁ。

それはだめな点だが、:Sleepの呼び出しがループの中で繰り返されるからだと思うが、dlにアドレスを突っ込んで、以降はレジスタ先へのcallになっているのにはしびれた。

で、明日は我が身ってこともあるので、確認してみたら/GLがプロジェクトのリリースビルドの規定値となっていたので、同僚とこれはおっかないなぁという話となった。

で、やっとこさ導入したVS2010で試してみたら、コメントにもあったけど確かに再現しない。

どんなコードを生成したのかと確認して驚いた。ループが外されて(多分、最大でも2というのを見ているのだろう)、DRYじゃないだめなプログラマが書いたようなコードにコンパイルされていてちょっとびっくり。条件判断もジャンプも無いんだから、そりゃ速いだろう。

確かに、そこら中のPCのメモリは最低でも2GBとかになっているから、その気持ちは良くわかるが、でもVC++を組み込み用に使っている人たちだっているのだから、本当にそのコンパイルで良いのか? という疑問もないわけではない。

Microsoft Visual Studio 2010 Professional アカデミック(-)

アカデミックは安いな。


2010-06-17

_ 指揮者の話

ふと思いついたが、

・集団に対する指導者が必要→故にその集団を「プロ」を付けて呼ぶ。

例)プロ市民

まあ、それはどうでも良くて、あの話の元ネタはきっとこいつだろう。

オーケストラ・リハーサル [DVD](ボールドウィン・バース)

オーケストラを追っかけたまじめな映画。

たとえば、チューバ吹きは体型と担当楽器について深い哀しみを持っていたり。

で、チェリビダッケ・スタイルの独裁者がやって来て、それに対して団員が革命を決起する。

さらには、ディストピアもどきの巨大メトロノームをあがめむのん時代とかが過ぎて、といったような話だと思ったけど忘れた。

つまり、われわれは二流なのだろうか。

プロ国民としては二流かも知れないが、それこそがまさに自立した国民のあるべき姿である。

僕らは今の音頭取りだけが嫌いなのじゃない。今のその犬だけがいやなのじゃない。音頭取りそのもの、犬そのものがいやなんだ。そして、一切そんなものはなしに、みんなが勝手に躍って行きたいんだ。そしてみんなのその勝手が、ひとりでに、うまく調和するようになりたいんだ。

―― 大杉栄

ザ・大杉栄 愛蔵版(大杉 栄)

想像してみればすぐにわかるが、プロの国民なんてものには、なりたかないね。

だって金もらってるんじゃないぜ。金を払ってやってるんだ。


2010-06-18

_ 本日のお勧め

リバースエンジニアリング ―Pythonによるバイナリ解析技法 (Art Of Reversing)(Justin Seitz)

アマゾンでお勧めされた。

確かに興味あるジャンルだが言語がなぁ。


2010-06-19

_ ActiveScriptRubyの更新

ダウンロードページ

以下の修正を行いました。

・RScript18.dll

IObjectSafetyに対し0を返します。この結果、Internet Explorerでは動作しなくなりました。

HTMLと組み合わせたアプリケーションについては、HTAを利用してください。

・GRScript18.dll

上と同様の修正をしました。逆に言うと、これまでGRScript18.dllもInternet Explorerでアクティベート可能でした。

これはバグです。まずいことに、GRScript18.dllはシングルスレッドで呼び出されている前提で動作するため、IEに組み込むとほぼ確実にクラッシュします。

別件で、CScript、WScriptからの実行時にサイズ0のテンポラリファイルを作成し削除しないまま残していくバグを修正しました。

・DXRubyのバージョンを1.0.9に更新しました。

Infoseekの配布サイトについても更新しています。

GRScript18.dllのバグは、ASRをインストールしたPCで比較的簡単にIEをクラッシュさせられます。したがって、速やかなバージョンアップをお願いします。

不可能な場合は、コマンドラインから以下を実行してください。

regsvr32 /u <インストールディレクトリ>\bin\GRScript18.dll


2010-06-20

_ ロイヤルバレエのリーズの結婚

上野でロイヤルバレエのリーズの結婚。リーズは先日の熊川版ロメオとジュリエットで来日したロベルタマルケス。相手はコボーの代わりに真夏のオベロンをやった人。

小柄で可愛いので、妊娠して子供は二人、いや三人、おいたをしてはだめよペンペン、あら見てたのね、恥ずかしいからハンカチかぶって……みたいな演技が実に微笑ましい。階段滑り台にしろ、やたらと母親に熱を計られるのも。逆にタイミングをきちんととる必要がありそうだから難しい演目かも知れない。でもリーズは2回目なのでコラの出現シーンを待ち構えてしまって、逆にちゃんと観れなかったかも知れない。もっと威勢良く飛び出して来るように思ってたのかも。

音楽の適当さといい内容の文字通りのギャフンっぷりが実にくだらない演目だが、その分、純粋に退屈させない面白さがあって、リーズの結婚って好きだな。

それにしても演出はともかく幕までこないだの牧阿佐美バレエ団のリーズとおなじだったが、ああいうのは演出権料なんかと一緒にセット販売しているのか、それとも世界中で融通しあっているのか不思議だった。


2010-06-21

_ でっかなテレビ買った

4、5年前にpcのおまけで買ったDELLのテレビ(でもPCリサイクルマーク付き)が壊れて外部入力が全部おかしくなった。メニューとかはまともなので、ADコンバータとかかなぁとか思うけど、なんか修理に出すよりも(地デジ未対応だからレコーダ経由で見ているのであった)買っちまうかという話になって、さてどうするかということになったのが先週の水曜日。

で、とりあえずアマゾン眺めて家電コーナー行ったら1番売れてますと東芝の40インチが出ていて、面倒だからそれを選んだ。

東芝 40V型 液晶 テレビ 40A9500 フルハイビジョン 2010年モデル(-)

そしたら、一緒に買われていますと、妙なコネクタをお勧めされて我に帰った。

ここまで何も知らないで買うのはまずいなぁと。

で、仕様みたらコネクタは何も付いてないことが判明。75オームのは余ってるから良いけど、その妙なのは一応カートに入れた。WiiのD4はそまま使えそうなのでこれもOK、後は価格COMで値段を調べるとそれほど安くはないけど在庫ありというのがポイント高くて結局アマゾンで注文。実際はまいどっていう名前の店。

で、2日後には届いた。

玄関に超巨大な段ボールでびびる。が、意外に軽くて(多分DELLの23インチより軽い)、一人で抱えて二階に運んで設置。

軽いはずで、金属がほとんど使われていない。

安いはずで可動式の箇所が全くない。オンオフスィッチすらフィルム状だ。最初、突起を探したので、説明書で確認するまでどこにスィッチがあるのかわからなかった。

ケーブルはたまたま一緒に届いたが(扱いはアマゾン自身)、これは買って正解で、レコーダも東芝だったおかげでテレビのリモコンでレコーダの操作もできることが判明。

PLANEX ハイスピードHDMI Ver1.4ケーブル 2m (PS3/Xbox360対応) PL-HDMI02(-)

ちゃんときれいに見えるし、画面は格段にでかくなったし、音は割れないし(余りにプラスチックなのでちょっと不安だった)、でかいのに軽いし気に行ったのだった。が、なんというか新しいモノ買ったという楽しさみたいなものがほとんどない。


2010-06-22

_ ジェネレーションギャップサンドイッチパターン

基底クラスと大量の派生クラスをジェネレートするのだが1ファイルにしたい。かつ、手書きクラスを基底クラスと派生クラスの間に挟みたい。

完全にファイルレベルで循環参照だ。でも派生クラス群をばらばらファイルに分けたくない。

で、ダメ元で作ってみたらちゃんとコンパイルできた。

このへんはC++のincludeよりJavaのimportのほうが格段に上だな。(まあ処理が違うから比較しても意味ないけど)


2010-06-23

_ うたかたの恋

ロイヤルバレエのうたかたの恋。

ルドルフがコボーで、男爵令嬢のほうのマリーはリャーンベンジャミンという人。リャーンのエロティックな踊り(多分、体の柔軟さと筋肉のつき方の美しさに負っている)とコボーのどえらく表現力があるソロに深く感じ入る。これはおもしろさという点ではともかく、20世紀のバレエ作品(苦悩の表現が、それまでせいぜい喜怒哀楽しかなかったバレエに導入された、大仰に言えば)としてとても優れた作品だと思った。気に入った。良いものを観られた。二人で踊るときは(1幕ではソフィー皇女とだけど)とにかく投げて受け止めての大連続で、小柄なコボーにルドルフを演じさせるには小柄な踊り手が多いロイヤルは良い環境なんだろうなぁとか思ったが、それにしてもこれだけ観ていて派手に美しいのはなかなか無いと思う。

演目についてはろくに知らずに行ったため、筋は追えるものの誰が誰だかさっぱりわからなくて閉口した。(プログラムは通しなので、今回は買わなかったし予習もしていなかったからだ)

いきなり、冒頭、おれの大好きなファウスト交響曲で始まる。

ああ、ハンガリーが関係するからか、と納得したが、その後も2幕でメフィストワルツは出てくるし、どうも全編リスト三昧だった(当然のように知らない曲もたくさんある)。

驚くべきなのは、オーケストラがとてもバレエとは思えないほど良い音を出していることで、休憩時間中に友人とやはりオーケストレーションがまともで遣り甲斐があるからじゃないか、とか話し合う。

ファウスト交響曲は、中学生のころ、クラシック(というよりロマンティックなのだが正確には)を聴き始めたころ、それは聴きたくて聴きたくてたまらなかったのだが(冒頭にいきなり12の音を散らすとか、リストの持つ反逆の前衛魂の炸裂交響曲だという知識だけは入ってくるわけだ)、実際に聴けたのはバーンスタインがCBSとの契約が終わってDGからレコードを出し始めてからだ。

今アマゾンを見るとDVDになっている。

バーンスタイン/リスト・ファウスト交響曲 [DVD](ボストン交響楽団)

これは素晴らしい名演だと思うのだが、何しろそれしか音源が無いのだから比較してどうこうはできない(LPなのでとうの昔に廃棄してしまった)。バーンスタインという現代的なアナリーゼができてかつ表現力が多彩な指揮者と、ボストンというアメリカの機能性とフランスの音色を持つオーケストラ、ハンガリー生まれパリ育ち無神論者だと思うのにカトリック神父、ヴィルトォーゾなのに技術否定という矛盾の塊のリストという組み合わせ。

ただ、さすがに第3楽章まで来るとだれたような記憶がある。

CD時代になったら、バーンスタイン版は入手できなくなっていて、代わりにショルティ・シカゴが出ていたのでそれが手元にある。

リスト:ファウスト交響曲(ショルティ(サー・ゲオルグ))

これは、悪くないどころか、聴いている間のおもしろさではバーンスタイン版より遥かに上なのだが、ヴァグナーの前座としてのリストという側面が強調され過ぎているような気もする。イデ・フィクスからライトモティーフへと続く音楽史の中のエピソード的な扱いというか。

そこが気に食わなくて、つまりそれはフランス風な要素の欠如だろうと、あとになって買いなおしたのが、バレンボイム・パリ(と思って買ったら実はベルリン)なのだが、これはだめだ。

リスト:ファウスト交響曲(バレンボイム)

わざわざドミンゴを連れてくるという豪華っぷりなのだが、これくらいつまらないリスト=みんなが良く知っているリスト、というような演奏もないんじゃなかろうか。

と、踊りはすばらしく、音楽は絶品(に近い)と、平日にわざわざ観に行った甲斐があった。


2010-06-25

_ 永久不滅

クレディセゾンのポイントが不滅なのは、使い道がなくて貯まる一方だからだ。

でもJAFカード(すごく早い時期にETC対応したので作った)は、ボイントでJAF会費が払えるので結構重宝だ。QPも使えるし。

問題は一本化出来ていないことで、メインのセゾンカードの存在だ。全ての引き落とし契約をJAFに変える手間とか。後、インターネットの向こう側に番号を教えたり、海外のショッパーのMSRに読ませたりするリスキーな用途に使っているから必要と言えば必要だし。したがってポイントは貯まる一方。しかしどれだけ貯まっても使い道はやはりない。

と思っていたが、今日アマゾンギフト券に交換出来ることがわかって解決。しかしJAF会費の還元率とは違うなぁ。


2010-06-26

_ HAVE_NATIVETHREAD

1.8.7-p299にしたらvrswinのmakeが失敗した。

1.9対応の定義が有効になって1.8では未定義の定数(RUBY_UBF_IO 多分、unblock functionの頭語で、グローバルロックを解除可能な待ち状態に入る場合に指定する)を参照したからだ。

とりあえずその定数を&& !defindしてしのいだ。

が、HAVE_NATIVETHREADでは1.8と1.9が区別できないので、RUBY_UBF_IOを見たほうが意図的にも良さそうに思う。

diff -u -p swin.c~ swin.c
*** swin.c~	Sat Feb 07 23:52:50 2009
--- swin.c	Sat Jun 26 22:35:02 2010
*************** swin_call_threadblocking(DWORD chk_th, i
*** 1000,1006 ****
      }
      va_end(args);
  
! #ifdef HAVE_NATIVETHREAD
      if(chk_th!=GetCurrentThreadId()){  // another thread from current
          r = (DWORD)rb_thread_blocking_region((VALUE(*)())Swin_WinAPI_Call,
                          &calldata,RUBY_UBF_IO,0);
--- 1000,1006 ----
      }
      va_end(args);
  
! #if defined(RUBY_UBF_IO)
      if(chk_th!=GetCurrentThreadId()){  // another thread from current
          r = (DWORD)rb_thread_blocking_region((VALUE(*)())Swin_WinAPI_Call,
                          &calldata,RUBY_UBF_IO,0);

追記:今まで気づかなかったのはASRに含めていたSwinが1.9対応前のバージョンだったからでした。

追記2:Ruby-1.8のHAVE_NATIVETHREADの役割は、GCやシグナル、tkutilなどで、クロススレッド呼び出しの判定をする必要性からのようで、Ruby-1.9のように積極的なジャイアントロック外しのためではありません。

_ ASR-1.8.7.299

Ruby-1.8.7-p299を元にActiveRuby 1.8.7.299をリリースします

関係諸氏に感謝します。


2010-06-27

_ ロイヤルバレエのロミオとジュリエット

昨日は、コジョカルとコボー(の代役のペネファーザー、やっと主役に本国人が出てきたような)のロミオとジュリエット。

これまで、シティバレエ、熊川で2回+DVDのロイヤルと観て来たが、観るたびに発見があるのは、音楽の変え方と演出の力の入れ所がそれぞれ違うからだろうな。

ケネス・マクミランのロミオとジュリエット [DVD](英国ロイヤル・バレエ)

(これより良かった)

まず、前奏の激しいテンポの変え方に驚く。いや、これはすごいや。こんなに情動的だとは。

そして大公の登場シーンが(これまでちゃんと意識していなかったのだが)序曲冒頭の金管による激しい不協和音が弦によって解決されそうでされない不安定なモティーフだということに意表を突かれる。

おそらく序曲での振り方が、ジュリエットの(仮の)死の衝撃によって物語が(僧ロレンツォの思惑通りに進めば)解決するはずが、解決されずにさらに悲劇が尾を引く、という物語の主題の表現を示しているかのように聴こえたからだろう。いや、大公の仲裁が結局は役に立たなかったことを考えれば、これはこれで悲劇と解決できない状況というモティーフだろうという聴き取りは間違いではないかも知れないが。

演出でおおおおおおと賛嘆、感嘆、驚嘆したのは、キュピレット家の舞踏会で、これまでは退屈していたのだが、この演出は異なる。

舞台背景と客人とキュピレット夫妻の油彩を思わせる渋い色調で重たい舞踏をしている(それは舞踏会の政治的な重要さをうかがわせるに足る演出だと最初は読めるし、事実その通りなのだが)のに対して、妙にロミオの服がパステルカラーの水色と白タイツで違和感があったのだが、そこにジュリエットの白い服が入ると、こはいかに。両袖で二人がお互いに意識しあっているその最中に舞台全体で繰り広げられる重層な舞踏会という構図が実に見事に浮き上がってくる。ライティング、舞台装置の造形、衣装の選択、これこそ舞台芸術ってものだ。素晴らしい。二人の物理的な距離と色彩による近さ、それを分断する重層な何か(歴史的な諸因縁とか)の描き方が見事だ。したがって、心の動きが鮮明に舞台化されているので退屈する閑などありはしない。

マンドリンはジュリエットが演奏する演出となっている。

前後するが、ジュリエットの登場シーンでは子供っぽさが強調される。乳母との縫いぐるみを使ったおふざけ、縫いぐるみに乳をやるままごととそれに対してまだまだ子供のくせにという乳母の乳房の大きさを揶揄されるやり取り(これはすべてのバージョンで出ていたが、子供っぽさの強調が縫いぐるみのキャッチボールによって強調されている)。14歳どころか、11歳ぐらいだよね、と後で子供と話す。

という子供の浅知恵で、僧ロレンツォ(こいつがこれまた世間知らずの大馬鹿者だというのが問題)を通して神様(こいつが沈黙する存在だということはシェークスピアの時代からみんな知っている)がすべて解決してくれると結婚(これがベッドシーンのための方便だということは50年代のギャング映画を通して文芸的な意味をおれは知っている)して、死んだふりして、すべてが破滅したと知って絶望して死ぬ(そしてカソリックであれ英国教会であれ、自殺がどれだけ重い意味を持つのか社会通念として誰もが知っている)物語なのだから、大人視線で見てかわいそうにならないわけがない。

ベンヴォーリオの日本人(クラークケントから取った芸名なんだろうか)のすかし方(個人的にはキュピレット家の舞踏会でロミオの目立ち方をごまかすためにマーキューシオが暴れた後に半回転しながら暴れるところはうまいなぁと思った)とラテン系っぽいマーキューシオのおどけ方(もちろん剣技も見事だ)はいずれも素晴らしい。急な代役だったと思うのに、ペネファーザーのロミオっぷり(なんかハムレットぽい気もしたが)も良い感じ。友人が、むしろコボーよりロミオらしくていいんじゃないかとか言っていたが確かにそうだな。ただ、3人揃って踊るところで息が見事に合わない(そもそも間隔がずれているし)のは急な代役だからか、ビデオでも顕著なロイヤルの集団舞踏の息の合わなさ(それが特徴なんだろうと思う)なのかはわからない。しかし急な代役にしてはティボルドとのちゃんばらに全く破綻が無いのですげぇなぁと感心したが、後からプログラムで見て見たら既にロミオ役を何度か演じたことがあるとわかって納得した。

バルコニーはなんじゃこりゃと思わずびっくりするマニエリックな装置。中央と右に階段。このシーンは有名だけど、バレエ全体としては初夜が明けた朝の別れの舞踏のほうが好きだな。

2幕。ティボルドは酔っ払って乱暴狼藉する設定(剣を受け取れずに落としたのはアクシデントなのか酔っ払っていて腕前が鈍っていることを示しているのか。というのは物語上、剣技(当然、優勝劣敗の世界)に関してはマーキューシオ>ティボルド>>>ロメオのはずだから最後にあっさりとロメオに刺し殺されるのはご都合主義が過ぎるからだ)。乳母をからかうときに3人がマスクをかけて舞踏会の夜を再現(しているようだけど乳母は気づいていない)する演出。やたらとロミオが乳母にキスする。

1幕目の騒動で寡婦となった婦人を含めた女性陣と、娼婦3人組が対立するという演出はこれまでもそうだったのかも知れないが今回気づいた。

それどころか傷痍軍人(軍人ってこたないだろうが)を舞台に出すことで、キュピレットとモンターギュの諍いが強調されている(のだと思う)。舞台右側2階から足を揺らせている二人組みがおもしろい。

3幕。

朝の別れ。バレエ版はどれをとってもきちんと二人が一緒に朝を迎えたことを強調しているが(確かシェークスピアでは小鳥の声についての言質でそれがわかる仕組みだと記憶している)、これも同じ。そっと出て行こうとするロミオにジュリエットが追いすがって一緒にマントにくるまってともにゃもにゃする可愛い演出。

このパリスは異常に積極的で、ジュリエットの嫌がりっぷりも派手。

で、一人残された後の暗い寝室でじっとジュリエットが固まる姿を強調する演出。固まる時間が長い分だけ、子供の浅知恵がもたらす悲劇を強調しようとしているのかな? おれはシティバレエ団の走りまくるジュリエットの演出が好きだが、この溜めに溜めた末にショールをなびかせて走る演出も良いと思った。

で、散々ためらい左に配置した十字架に祈って薬を飲み、ベッドに這い上がって仮死状態。

薬を渡す時に僧ジョンへ御遣いを頼まないだけに単刀直入。いきなりカタコンベ。

ロメオは左の柱の蔭から様子をうかがっている。パリスは無造作。あっという間に殺される。すげぇ早い展開。

で、ジュリエットのかんかんのう。どうしても日本人のおれは文化的にラクダのかんかんのう(白土三平の鬼の話にも引用されていたっけなぁ)が最初に頭に浮かぶので、どうにも滑稽な印象を持ってしまうのだが、もちろん哀切極まりないシーンではある。というか、コジョカルの脱力ぶりは見事だな。

ロメオは薬を飲んで床に崩れて寝台の左にもたれた状態で死ぬ。ジュリエット入れ替わりに目覚め、右から降りてすぐさまパリスを発見、血が手についてびっくり、すぐさまロミオを発見、あっというまに状況を把握。すぐにパリスのところに取って返して落ちてたナイフで腹を突く。そのまま倒れて、じわじわ寝台に上り、左のロミオに近づき手をたらして(バルコニーのシーンの最後と対称を成しているのだろう)幕。

最後のシーンの演出は熊川版のマルケスと熊川のほうが好きかも知れない。が、一幕の演出力はロイヤルのほうが良いし、3幕の説明抜きの割り切りっぷりも、こちらのほうが好きかも(まあ、どれだけ原作の知識を前提にするかで演出を変えるのは当然かも知れない。であれば熊川版の僧ジョンのエピソードは必須ということになると思うが、それはおれの勘違いでやはり誰でもシェークスピアは読んでいるかも)。

ロミオとジュリエット (白水Uブックス (10))(ウィリアム・シェイクスピア)

おれは小田島が好きだ。

それはそれとして、水曜日には苦悩に満ち満ちたルドルフを好演していたコボーがいきなり帰ってしまうのはよほどの家族の急病なのか、よほどの急病だとわかっていた故の水曜日の苦悩表現なのか、下世話にコジョカルと破局があったのか、とかいろいろな可能性があるキャスト交代ではある。それにしてもコジョカルは可愛いなぁ。

にしても、ジュリエットの死は神に対する異議申し立てという文芸的な意味があることを今回初めて気づいた。

沈黙 [DVD](イングリッド・チューリン)

追記:カーテンコールで幕を上げなかったけど、どうしてだろう? 墓だからそれはしないとかいう不文律でもあるのか?


2010-06-28

_ ロングマン現代英英辞典(LDOCE5)の前書き

なんとなくLDOCE5のaboutを読んでいたらランドルフ・クワークという人が書いている前書きが、やたらとかっこいい。

いきなり冒頭からこう始まる。

Young people the world over know that English is the most important single tool they need to achieve success in their careers.

訳せばこんな感じだろうか。『世界中の若者はみんな、英語が「キャリアで成功を収めるため」の最も重要な「単一のツール」だと知っている。』

「キャリアで成功を収めるための」「単一のツール」――特に「ツール」と呼んでしまう割り切りっぷりが目から鱗。

こういう言明はこれまで辞書のような(固い)本では見かけた覚えがない。おそらく、日本の英語教育に欠けているものは、まさにしょっぱなに、この言葉を教えるという発想じゃなかろうか(もっとも、現在ではそういう教育をしているかも知れないけど)。

ロングマン現代英英辞典 [5訂版] DVD-ROM付(-)

そこでイディオム(用例)ががんがん掲載されているのかも知れない。

(なんとなくプログラミング言語での「コーディング規約」と同じ発想を見た気がしたのだ)

補足

i = 0
while i < 10
  foobar
  i += 1
end
とか、ネイティブスピーカーならやらないわけで、普通
(1..10).do |i|
  foobar
end
とか、
1.upto(10) {|i| foobar } # この場合iって省略できたっけ?

とか書くけど、世界中の別の母語を持つ人含めた混合チーム用のツールなら、最初の書き方しとけば良いわけじゃん(このイディオム押さえておけばばっちり)という印象を受けたわけ。

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

_ なかだ [10.times {foobar}]

_ はら [ふーん、なるほど。僕も眼から鱗が落ちました(while文)。]

_ arton [timesか。]


2010-06-29

_ Kバレエカンパニーの眠れる森の美女

日曜は文化村でKバレエカンパニー。

が、1幕目がぱっとしない。舞台の色調は淡いばかりで平面的だし、リラの精の前座は文字通り前座というか子分というか同じような服を着ていて何が何やらだし、カルボスですらぱっとしない。

休憩時間に配役表(当日情報)を眺めると2幕が30分とか書いてある。子供に、マラーホフ版みたく超短縮でやってくれりゃいいのに、これたぶん寝てしまうから、もし熊川がぴょんぴょん跳ねたら起こしてくれ、とか頼んで熟睡しようかと思っていたらこはいかに。

深みのある森の中に(画に書いたような紋切り型とも言えるけど)ブリューゲルのような狩猟風景が始まり、なんというか大久保利通の若い頃のような雰囲気で熊川哲也が登場。子分たちに大威張りのいやな王子として振舞う。当たらない矢を投げて八百長で拍手喝采(という見た目通りなのか、そこは当たったことにしておいてね、という演出なのかはわからないけど)。

えらくおもしろい。目がすっかり覚めてしまった。で、リラの精に絵姿見せられて、さらに幻影を見せられてすっかりその気になって光る剣で妙な船に乗ってカラボス退治の旅に出て、あっという間に敵に捕まってあわやというときになぜかカラボスがのこのこ前に出てきたおかげで刺し殺して良かったね、さあ接吻だ、目覚めなさいまで一気につながって、これは抜群におもしろい。舞台も演出も踊りもすべて良し。というか、2幕を目立たせるために、あえて1幕をぐだぐだにしたのかな? (あるいは、単に熊川哲也が出ているかどうか、という話なのかも)

いや、年とは思えないほど動きにも切れがあるし、観ていて実に楽しい。表現力ある踊りだよなぁ。

そして3幕。右から左へふらみ左に階段、右に玉座と位置は普通だが背景画の柱の遠近感の出し方が異様でおもしろい。

金と銀でなぜか金が2人いるが銀が絶妙。おもしろかった。赤頭巾は、エピソードを始める前に植木鉢を4方向から従者がのんびりと運んできて森を作り、最後にのんびりと撤去する演出が妙に印象的。青い鳥は衣装の青さだけが印象的だけど、それでもこのバレエ団は男性の動きがいいよなぁといつも思う。

猫が妙で、これまで観たのは(パリのDVD、マラーホフ版、キエフあたりのDVD)どれも、牝猫の行儀の悪さを最後に牡猫がぽかぽかやっつけて終わるのだが、最初から最後まで一貫して雌猫が牡猫をぽこぽこ叩く。なぜそんなところで違うのかなぁとか、そこは不思議ではあった。

くるみ割り人形で使ってしまっているからか、サンドリヨンは無し。音楽的には最も好きなのだが、しょうがないな。

パドドゥとか、まあ普通におもしろかったし、結局最後まで観れば良い眠りの森の美女だった。

カーテンコールでのカラボスが、ちょっとマラーホフの影響下にあるのかなという動き(影響を受けても当然だと思うし、おもしろいから良いのだけど)で、1幕ではつまらなかったし、3幕には出てこなかったけど、最後の動きはおもしろかった。

というわけで、一幕目に退屈したのは、もしかしたら体調とか気分の問題だっただけで勘違いだったかも知れない。そのくらい、2幕以降は楽しめた。


2010-06-30

_ Javaのスコープの素朴な疑問

ある人が書いた本の中のサンプルコードに次のようなものがあった。
do {
    String buff = bufferedReader.readLine();
    if (buff != null) {
        doSomething(buff);
     }
} while (buff != null);
これはもちろんコンパイルできない。
String buffの可視性は{}の中で閉じているからだ。
でも、次のは違う。
for (int i = 0; i < len; i++) {
    doSomething(i);
}
iのスコープは、for節全体となり、for()の中で宣言したものが{}内でも有効で、そこを外れると参照できなくなる。
この、あるステートメントを構成する()内で変数を宣言できるというのをwhile系にも適用すればよかったのだ。
while ((String buff = br.readLine()) != null) {
    doSomething(buff);
}
どうも、try-catch-finally節といい、Javaのスコープルールは無意味に固い(コンパイラを簡単に実装できるようにしたのだろうか? でも、それは今となっては大した問題ではなかろうし、forの特別扱いが気持ち悪い)。
本日のツッコミ(全9件) [ツッコミを入れる]

Before...

_ arton [なるほど。宣言が文か式か、か。確かにそうですね。>中田さん ああ、後から結構変えてましたね。> るいもさん で、僕は..]

_ るいも [Iteratorを使えないのは、例のチェック例外の呪いのせいかと。next()やhasNext()はIOExcept..]

_ arton [ちょっと長くなるので、続きは、7/1のほうで。]


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|

ジェズイットを見習え