2012年1月5日

Cocoa Emacs + inline patch で "Args out of range: x, y" エラーが頻発する問題

Google の検索をしてもほとんど引っかからないので、他の人はこの問題にはハマってないのであろうか、というのが一番の疑問だったりするのだけれども、自分の環境では Cocoa Emacs + inline patch がイマイチ不安定で、どうにも困った。

現時点(2012年1月初頭)では、
  • Emacs23 の最新版 emacs-23.3b.tar.gz (http://ftp.gnu.org/gnu/emacs/emacs-23.3b.tar.gz)
  • MacEmacs JP の inline patch の最新版 trunk (http://sourceforge.jp/projects/macemacsjp/) - 以下を含む:

    • emacs-inline.patch: patch for input method
    • font.patch: patch to fix trembling font when user inputs japanese by input method
    • xcode4.patch: patch to compile by xcode4 (gcc-4.2 64bit)
    • lion.patch: patch to compile on MacOSX 10.7. It contains xcode4.patch.

  • KAYAC さんの OS X Lion 用のフルスクリーン用パッチ (http://bm11.kayac.com/2009/project/opensource/kayac-emacs)
  • popup 時にクラッシュする問題に対するパッチ (http://moimoitei.blogspot.com/2010/05/fix-cocoa-emacs-23.html)
  • MacEmacsJP の ML で報告された SIGSEGV 問題(http://sourceforge.jp/projects/macemacsjp/lists/archive/users/2011-August/001699.html) に対するパッチ (https://github.com/n-miyo/homebrew/commit/f45111c99bf287b197f21a6faf28417e9ffa72ef)
でビルドして、Lion についてくるOS標準のことえりで日本語入力をしている。

以上の先達の成果物によって Emacs 自体がクラッシュしてしまうことはなくなったのだが、漢字変換中にしばしば "Args out of range: x, y" エラーが頻発し、これが出ると変換された文字がバッファ内に表示されないという問題が出現する。

こういうときには Google に頼るのだが、数件の問題報告は見るものの、パッチが出てきた様子はない。
というわけで、Email も Emacs + Wanderlust で読み書きしている自分には死活問題なので、Lisp は知らないけれど、2011〜2012の年末年始にこの問題を追うことにした。

基本はいわゆる「printf デバッグ」作戦を Emacs Lisp に対してやってみたのだが、src/nsterm.m の "#define NS_KEYLOG 0" を 1 にして入力キーの様子を stdout に出しつつ、lisp/term/ns-win.el に message 出力を仕込んでみたところ、問題っぽいところを発見した。

こんなふうに message 出力を仕込んで
--- lisp/term/ns-win.el.patched 2012-01-01 00:56:06.000000000 +0900
+++ lisp/term/ns-win.el 2012-01-05 18:28:27.000000000 +0900
@@ -649,10 +649,20 @@
 `ns-working-overlay' and `ns-marked-overlay'.  Any previously existing
 working text is cleared first. The overlay is assigned the faces 
 `ns-working-text-face' and `ns-marked-text-face'."
+  (message "DEBUG: pos=[\%d]  len=[\%d]  ns-working-text=[\%s]  text-len=[\%d]" pos len ns-working-text (length ns-working-text))
   (ns-delete-working-text)
+  (message "DEBUG: ns-delete-working-text done")
   (let ((start (point)))
-    (put-text-property pos len 'face 'ns-working-text-face ns-working-text)
+    ; check pos and ns-working-text length
+    (if (<= pos (length ns-working-text))
+      (progn
+      (put-text-property pos len 'face 'ns-working-text-face ns-working-text)
+      (message "DEBUG: put-text-property pos len 'face 'ns-working-text-face ns-working-text done")
+    )
+      (message "DEBUG: SKIPPED put-text-property pos len 'face 'ns-working-text-face ns-working-text")
+    )
     (insert ns-working-text)
+    (message "DEBUG: insert-ns-working-text done")
     (if (= len 0)
         (overlay-put (setq ns-working-overlay
                            (make-overlay start (point) (current-buffer) nil t))

この状態でことえり経由で文字をピコピコ入力する経過を *Message* バッファで見張ってみた。そうしたところ、得られた結果がこれ:
DEBUG: pos=[1]  len=[0]  ns-working-text=[k]  text-len=[1]
DEBUG: ns-delete-working-text done
DEBUG: put-text-property pos len 'face 'ns-working-text-face ns-working-text done
DEBUG: insert-ns-working-text done
DEBUG: pos=[1]  len=[0]  ns-working-text=[か]  text-len=[1]
DEBUG: ns-delete-working-text done
DEBUG: put-text-property pos len 'face 'ns-working-text-face ns-working-text done
DEBUG: insert-ns-working-text done
DEBUG: pos=[2]  len=[0]  ns-working-text=[かn]  text-len=[2]
DEBUG: ns-delete-working-text done
DEBUG: put-text-property pos len 'face 'ns-working-text-face ns-working-text done
DEBUG: insert-ns-working-text done
DEBUG: pos=[3]  len=[0]  ns-working-text=[かんg]  text-len=[3]
DEBUG: ns-delete-working-text done
DEBUG: put-text-property pos len 'face 'ns-working-text-face ns-working-text done
DEBUG: insert-ns-working-text done
DEBUG: pos=[3]  len=[0]  ns-working-text=[かんが]  text-len=[3]
DEBUG: ns-delete-working-text done
DEBUG: put-text-property pos len 'face 'ns-working-text-face ns-working-text done
DEBUG: insert-ns-working-text done
DEBUG: pos=[4]  len=[0]  ns-working-text=[かんがえ]  text-len=[4]
DEBUG: ns-delete-working-text done
DEBUG: put-text-property pos len 'face 'ns-working-text-face ns-working-text done
DEBUG: insert-ns-working-text done
DEBUG: pos=[5]  len=[0]  ns-working-text=[かんがえt]  text-len=[5]
DEBUG: ns-delete-working-text done
DEBUG: put-text-property pos len 'face 'ns-working-text-face ns-working-text done
DEBUG: insert-ns-working-text done
DEBUG: pos=[5]  len=[0]  ns-working-text=[かんがえた]  text-len=[5]
DEBUG: ns-delete-working-text done
DEBUG: put-text-property pos len 'face 'ns-working-text-face ns-working-text done
DEBUG: insert-ns-working-text done
DEBUG: pos=[6]  len=[0]  ns-working-text=[かんがえたほ]  text-len=[6]
DEBUG: ns-delete-working-text done
DEBUG: put-text-property pos len 'face 'ns-working-text-face ns-working-text done
DEBUG: insert-ns-working-text done
DEBUG: pos=[6]  len=[0]  ns-working-text=[かんがえたほ]  text-len=[6]
DEBUG: ns-delete-working-text done
DEBUG: put-text-property pos len 'face 'ns-working-text-face ns-working-text done
DEBUG: insert-ns-working-text done
DEBUG: pos=[7]  len=[0]  ns-working-text=[かんがえたほう]  text-len=[7]
DEBUG: ns-delete-working-text done
DEBUG: put-text-property pos len 'face 'ns-working-text-face ns-working-text done
DEBUG: insert-ns-working-text done
DEBUG: pos=[8]  len=[0]  ns-working-text=[かんがえたほうh]  text-len=[8]
DEBUG: ns-delete-working-text done
DEBUG: put-text-property pos len 'face 'ns-working-text-face ns-working-text done
DEBUG: insert-ns-working-text done
DEBUG: pos=[8]  len=[0]  ns-working-text=[かんがえたほうほ]  text-len=[8]
DEBUG: ns-delete-working-text done
DEBUG: put-text-property pos len 'face 'ns-working-text-face ns-working-text done
DEBUG: insert-ns-working-text done
DEBUG: pos=[9]  len=[0]  ns-working-text=[かんがえたほうほう]  text-len=[9]
DEBUG: ns-delete-working-text done
DEBUG: put-text-property pos len 'face 'ns-working-text-face ns-working-text done
DEBUG: insert-ns-working-text done
DEBUG: pos=[10]  len=[0]  ns-working-text=[かんがえたほうほうh]  text-len=[10]
DEBUG: ns-delete-working-text done
DEBUG: put-text-property pos len 'face 'ns-working-text-face ns-working-text done
DEBUG: insert-ns-working-text done
DEBUG: pos=[10]  len=[0]  ns-working-text=[考えた方法は]  text-len=[6]                <----- !!!
DEBUG: ns-delete-working-text done                                                    <----- !!!
DEBUG: SKIPPED put-text-property pos len 'face 'ns-working-text-face ns-working-text  <----- !!!
DEBUG: insert-ns-working-text done
DEBUG: pos=[0]  len=[3]  ns-working-text=[考えた方法は]  text-len=[6]
DEBUG: ns-delete-working-text done
DEBUG: put-text-property pos len 'face 'ns-working-text-face ns-working-text done
DEBUG: insert-ns-working-text done

あれ、ns-working-text がおかしい。「かんがえたほうほうh」のあと "a" をタイプしたので「かんがえたほうほうは」になるはずなのに、それがなくて、いきなり感じ変換されちゃった後の「考えた方法は」になってるね。なのに、そのとき pos の数値はまだ「かんがえたほうほうは」をベースにした 10 になっている。結果、ns-working-text の方の文字列はすでに漢字変換後のデータになっていて 6 文字しかないのに、pos の数値は 10 になってる。ふむむ。

ソースの中で関連しそうなのは src/keyboard.c の
   4204       struct input_event *event;
   4205 
   4206       event = ((kbd_fetch_ptr < kbd_buffer + KBD_BUFFER_SIZE)
   4207                ? kbd_fetch_ptr
   4208                : kbd_buffer);
   
       ...... (snip) ......
   
   4241 #if defined (HAVE_NS)
   4242       else if (event->kind == NS_TEXT_EVENT)
   4243         {
   4244           if (event->code == KEY_NS_PUT_WORKING_TEXT)
   4245             obj = Fcons (intern ("ns-put-working-text"), Qnil);
   4246           else if (event->code == KEY_NS_UNPUT_WORKING_TEXT)
   4247             obj = Fcons (intern ("ns-unput-working-text"), Qnil);
   4248           else if (event->code == KEY_NS_PUT_MARKED_TEXT)
   4249             obj = Fcons (intern ("ns-put-marked-text"), event->arg);
   4250           kbd_fetch_ptr = event + 1;
   4251           if (used_mouse_menu)
   4252             *used_mouse_menu = 1;
   4253         }
   4254 #endif

と、さっき手を入れた lisp/term/ns-win.el の
    638 (defun ns-put-marked-text (event)
    639   (interactive "e")
    640 
    641   (let ((pos (nth 1 event))
    642         (len (nth 2 event)))
    643     (if (ns-in-echo-area)
    644         (ns-echo-marked-text pos len)
    645       (ns-insert-marked-text pos len))))
    646 
    647 (defun ns-insert-marked-text (pos len)
    648   "Insert contents of `ns-working-text' as UTF-8 string and mark with
    649 `ns-working-overlay' and `ns-marked-overlay'.  Any previously existing
    650 working text is cleared first. The overlay is assigned the faces 
    651 `ns-working-text-face' and `ns-marked-text-face'."
    652   (message "DEBUG: pos=[\%d]  len=[\%d]  ns-working-text=[\%s]  text-len=[\%d]" pos len ns-working-text (length ns-working-text))
    653   (ns-delete-working-text)
    654   (message "DEBUG: ns-delete-working-text done")
    655   (let ((start (point)))
    656     ; check pos and ns-working-text length
    657     (if (<= pos (length ns-working-text))
    658       (progn
    659       (put-text-property pos len 'face 'ns-working-text-face ns-working-text)
    660       (message "DEBUG: put-text-property pos len 'face 'ns-working-text-face ns-working-text done")
    661     )
    662       (message "DEBUG: SKIPPED put-text-property pos len 'face 'ns-working-text-face ns-working-text")
    663     )
    664     (insert ns-working-text)
    665     (message "DEBUG: insert-ns-working-text done")
    666     (if (= len 0)
    667         (overlay-put (setq ns-working-overlay
    668                            (make-overlay start (point) (current-buffer) nil t))
    669                      'face 'ns-working-text-face)
    670       (overlay-put (setq ns-working-overlay
    671                          (make-overlay start (point) (current-buffer) nil t))
    672                    'face 'ns-unmarked-text-face)
    673       (overlay-put (setq ns-marked-overlay 
    674                          (make-overlay (+ start pos) (+ start pos len)
    675                                        (current-buffer) nil t))
    676                    'face 'ns-marked-text-face))
    677     (goto-char (+ start pos))))

のあたり。

keyboard.c で (input_event)event にセットしたイベントを引数にして Lisp 関数の ns-put-marked-text を呼んでいて、ns-win.el 側で定義されている Lisp 関数 ns-put-marked-text 側で渡された引数から変数 pos / len に何文字目をいじるのか、を入れているようなのけれど、稀に pos/len の数値は漢字に変換される前のデータなのに対し、ns-working-text の文字列は漢字に変換された後のデータとなっていて、ここに情報に不一致があるために ns-win.el 側で put-text-property するところで pos/len のデータが ns-working-text の文字数をはみ出してしまうので out of range エラーとなるみたい。
タイミングの問題かなにかで、event が発生した後、put-text-property するまでの間に ns-working-text が更新されてしまっているのか?

というわけで、本当なら pos/len のデータ ns-working-text を一致させるべきなのだろうけど、どうやって同期を取ったらいいのかわからないので、とりあえず pos の数値が ns-working-text の文字数を超えていたら put-text-property はしないでやり過ごす、ということにした。

こんな感じ:

--- lisp/term/ns-win.el.patched 2012-01-05 20:07:58.000000000 +0900
+++ lisp/term/ns-win.el 2012-01-05 20:10:16.000000000 +0900
@@ -651,7 +651,8 @@
 `ns-working-text-face' and `ns-marked-text-face'."
   (ns-delete-working-text)
   (let ((start (point)))
-    (put-text-property pos len 'face 'ns-working-text-face ns-working-text)
+    (if (<= pos (length ns-working-text))
+        (put-text-property pos len 'face 'ns-working-text-face ns-working-text))
     (insert ns-working-text)
     (if (= len 0)
         (overlay-put (setq ns-working-overlay

副作用として、漢字変換で入力している文字がたま〜に位置がずれて挿入されちゃうのが確認されているのですが、これで out of range エラーなく動いているので、とりあえず ok とします。



(2012/01/07 追記): 上の副作用があったので、こうしました。
--- lisp/term/ns-win.el.patched 2012-01-05 20:07:58.000000000 +0900
+++ lisp/term/ns-win.el 2012-01-05 20:10:16.000000000 +0900
@@ -651,6 +651,8 @@
 `ns-working-text-face' and `ns-marked-text-face'."
   (ns-delete-working-text)
   (let ((start (point)))
+   (if (<= pos (length ns-working-text))
+    (progn
     (put-text-property pos len 'face 'ns-working-text-face ns-working-text)
     (insert ns-working-text)
     (if (= len 0)
@@ -664,7 +666,7 @@
                          (make-overlay (+ start pos) (+ start pos len)
                                        (current-buffer) nil t))
                    'face 'ns-marked-text-face))
-    (goto-char (+ start pos))))
+    (goto-char (+ start pos))))))
     
 (defun ns-echo-marked-text (pos len)
   "Echo contents of `ns-working-text' in message display area.
これで、漢字変換している文字がずれて挿入される問題も回避できている模様。
ただ、これは根本的な解決策ではない。本当は、event の中身と ns-working-text の同期をとれるようにしないといけないはず。まあ、でも、こうしてブログに晒しておけば、だれかもっと造詣の深い心優しい人がもっとまともなパッチを作ってくれるかもしれないし。

(2012/01/14 追記): ソースの引っ張り方とそれぞれのパッチの当て方を教えて、というリクエストがありました。長くなるので、コメント (Comment) のほうに一通りの手順を載せておきます。たしかに trunk とか、パッチのパッチみたいなのもあって、わかりにくかったですね。ごめんなさい。

2010年11月18日

iTunesにビートルズがついにやって来た


2010年11月17日。ついにビートルズが iTunes に登場。

音に関しては、すでに ザ・ビートルズ・ボックス を大枚はたいて購入済みだし、加えて、まんまとその商魂に乗せられて ザ・ビートルズBOX (USBメモリ)
 も購入している。USB には 24bit 44.1KHz の FLAC (Free Lossless Audio Codec) で納められているので、個人的には iTunes の AAC 256kbps iTunes Plus には惹かれるものはなし。

しかし、問題は全オリジナルアルバムを抱き合わせしたボックスセット *だけ* のおまけ映像。映像は2種類、片っぽのミニドキュメンタリーの方はボックスについてくる DVD と同じだと思うので(要確認)まあどうでもよかったのだけれども、もう一方の ライブ映像 はまさにビートルマニア垂涎のシロモノ。ビートルズ念願のアメリカ初上陸時、1964年2月11日のワシントンD.C.コロシアムで行われた歴史的なアメリカでの初コンサートの模様を収録した映像で、これがすごかった。

Washington DC のコンサートはドキュメンタリー作成用に撮影されていたが、アメリカ上陸時のあまりの反響に、急遽劇場での公開が決定した、といういきさつがあり、これを元にした映像はあちこちに出回っていて、ビートルズ・シネ・クラブが主催していたフィルムコンサートなどでも時折お目にかかる機会はあった。たとえば、1978年にIP/集英社配給で公開された ザ・ビートルズ グレイテスト・ストーリー という映画の中で数曲見られたり(後年、東映ビデオからβ/VHSでビデオもリリースされた)、1982年に日本テレビで放映されたビートルズ電リク番組で放映されたりしたこともあったものの、この時点では現存する画像はフィルム起こしの状態の悪いもののみ、最後から2曲目の Twist And Shout が尻切れトンボで終わる、というのが最長版だと考えられていた。

この状況が大きく前進したのは、その後、ビートルズ側が公式に1990年にリリースした ザ・ビートルズ ファースト U.S.ヴィジット に I Saw Her Standing There, I Wanna Be Your Man, She Loves You の3曲が比較的良好なフィルム映像で収録された時。これだけでもマニアは大喜びしたのだが、さらに1995年制作の ザ・ビートルズ・アンソロジー の作業過程で、ついにマスターとなるビデオ収録映像の存在が確認され、幻と言われていた Long Tall Sally の映像がプロモ用映像としてTV放映が許可された。このとき、ようやくビートルマニアはワシントンDCの映像は元々ビデオ収録で、映画館公開時のフィルムはキネコ(ビデオ映像をフィルムに変換すること)だったのを知ったのだ。

以降、マニアの間では「ワシントンD.C.コロシアムのコンサートは高画質ビデオ映像版が (Beatlesの) Apple Corps にはあるはずだ」という共通認識が確立されたが、そのあと公式に高画質版が長編で発表されることは無く、ビートルマニアはまさに「おあずけくった犬」状態の飼い殺しになっていた。

2003 年には The Beatles In Washington D.C. Feb. 11th, 1964 なる DVD がビートルズ未公認ながら正規流通に載ったのだが、こちらは古くから出回っている保存状態のあまり良くないフィルムを元に作成されていたため、多いにガッカリさせられたのだ。こんな感じ↓



そして、2010年11月17日。ビートルズが iTunes にやってきたのを記念して、ついにビデオマスターの全長版が公開されたのだ。
いまなら期間限定で iTunes ストア、および (Jobsの) Apple.com の 特設ページ でストリーミング映像を見ることができる。

from 特設ページの解説:
1964年2月11日。歴史的な「エド・サリヴァン・ショー」出演から、わずか2日後。ビートルズはアメリカ初のライブコンサートを行い、さらに歴史を作りました。ワシントン・コロシアムで7,000人を超えるファンの目の前に登場した彼らは、「I Saw Her Standing There」「She Loves You」「I Want to Hold Your Hand」などのヒット曲を次々とプレイしたのです。

ビートルズのスタジオアルバム全13枚。そのすべてのiTunesでのリリースを記念して、伝説的な2月11日のパフォーマンスの完全版をストリーミングでお届けします。さらに「The Beatles Box Set」を購入すると、このコンサートのビデオがあなたのものになります。


すばらしい。もちろん画質は過去最高。音質も過去最高。演奏は荒削りだし、ステージ上のボーカルマイクは John (画面向かって右側) のほうばかりオンになっているし、という状態だが、なんといっても初のアメリカでのコンサートという熱狂と興奮による勢いが全てを補って余りある様子が伝わってくる。

悩ましいのは、先に述べた通り、これを「入手」するには(またもや大枚はたいて)iTunes 版の The Beatles Box を購入しなければならない、ということ。

ちなみに、ビートルズ/EMI/Apple と iTunes の契約は2011年のある時期までの独占契約、とのこと。他の音楽配信サイトにビートルズが登場するのは、もうしばらく後のことになりそうだ。

2010年3月27日

祝 - Hollies、 Rock & Roll 殿堂入り

レコードコレクターズ2004年2月号の『ホリーズ特集』に掲載された Graham Nash の(当時の)最新インタビュー『ホリーズはロックの殿堂入りすべきだよ』から足掛け6年、ついにそれが実現する日がやってきた。

2010年3月15日、NYC の Waldorf Astoria ホテルでの記念式典では、歴代 Hollies から Graham Nash, Allan Clarke, Eric Haydock, Bernie Calvert, Terry Sylvester の5人が参加。残念ながら、現役 Hollies を率いて UK ツアー中の Tony Hicks, Bobby Elliott は参加できず、件のナッシュのインタビューで語られていた「一緒にホリーズとして唄う」は完全には再現されなかった。記念式典前の Bobby のインタビュー The Hollies - The Hollies Rockers To Miss Hall Of Fame Induction - Contactmusic News では、「授賞式に参加するみんなを祝福するよ、彼らが僕のを無事に持ってかえってくれることを祈ってる(bring my award back in one piece)。(UKツアーの)会場の日取りを変えるのは無理なんだ。ちょっと厳しい選択だったけど、やっぱり母国のファンを優先しなくちゃね」と語っていた。授賞式では Graham がこれに答えて、「Bobby と Tony は昨晩 London Palladium でプレイしたので来られません、彼らの分を無事に持って帰れればいいけどね(hope we take their awards home in one piece)」とスピーチしていた。(動画はこちら on YouTube)

それに先立つ Allan のスピーチは感動的。「親父に音楽でプロになるって言ったとき、もっても3-4年だろうって言われたのを覚えてる。だから、手に入ったお金をせっせと銀行に預けたんだ。なあ、親父、俺はこうして殿堂の一員に迎えられたよ。なんて長い年月なんだろうな(How's that longevity)」だって。いいなあ。
これに続いた Graham のスピーチは、彼の人柄がわかる感じ。彼にとって、Hollies の殿堂入りは長年の願いだったのは先のレココレのインタビューからも知れる通りで、ノミネートと投票に尽力してくれたいろんな人にまず感謝。病気で来られなかった初代ドラマー Don Rathbone に早く良くなるように祈ってる、とか、先の Bobby と Tony に祝福と感謝を、とか、Hollies のプロデューサーで昨年亡くなった Ron Richards とかへの感謝も忘れない。でも、彼にとってこの殿堂入りで「特に」とスピーチで念押しするくらいうれしかったのは彼が5歳のときから63年間の親友である Allan が殿堂入りすること、と述べている。(動画はこちら on YouTube)

登壇した5人全員のスピーチが終わった後、Graham と Allan がステージに残って3曲を披露。バックは CBS の看板番組の一つ、Late Show with David Letterman Show の番組ハコバンを担当している Paul Shaffer band が勤めた。(動画は こちらこちら on You Tube)
2000年にエンターテイメント界からは引退していた Allan がどうなのか、と、見ているこちらは期待半分、怖さ半分状態。当の Allan 本人もステージに上がることには相当ナーバスになっていたようで、Graham も記念式典前のインタビュー Graham Nash Says Entering the Rock Hall With the Hollies Is Bigger Than With CSN - Spinner では「Allan はもう唄えないんだ、でもタンバリンとギターで演奏に参加する予定だよ」と答えるなど、Allan にプレッシャーをかけないように気配りしていた。(ちなみに、このインタビューでも Graham の Allan に対する親友としての思いが端々から伝わってくる。)
記念式典後の Graham のインタビュー The Hollies - Nervous Clarke Took Singing Lessons Before Hall Of Fame Concert で明かされたエピソードでも、「(殿堂入りが決まって)初めて Allan に電話して殿堂入りされるときに何曲かやれるかいって訊いたんだ、そしたら『もう10年も唄ってないんだし、唄えると思えないよ。とりあえずヴォーカルコーチのところに行ってみて、どうなるか見てみるしかない』って言ったんだ。一週間後、彼が電話してきて言うには、『わかるだろう、昔と同じに唄えないんだったら唄いたくないんだ、だから唄うって約束できないよ』って。」と語っている。しかし、このインタビューの締めくくりの Graham の言葉は「でも、リハーサルの最中に Allan は唄いだしたんだ、それも昔通りにさ」...そう、Allan は唄った。10年のブランクがある御歳67歳なんて思えないくらい溌剌としていた。

初めの2曲、Bus Stop と Carrie Anne は Maroon 5 の Adam Levine と Jesse Carmichael がサポートヴォーカルとして参加。Allan のヴォーカルマイクはミックスを小さめにしてあって、ちょっと聴きづらいのだけれども、時折 Allan の声が聴き取れる。そして Allan にとってのハイライトは3曲目、72年に US Cash Box で1位に輝いた Long Cool Woman In A Black Dress。こちらには Train の Pat Monahan がリードヴォーカルとして、また今回 Hollies へのプレゼンターを務めた Little Steven Van Zandt がギターで参加。この曲は Allan が主導して書いたナンバーで、かつイントロの印象的なギターリフも Allan が「発明」したとあって、まさに Allan Clarke 一世一代の大ヒットと言え、Graham 脱退後のナンバーであるにもかかわらず Graham も友人として嬉々として演奏に加わっている。やっぱり親友の晴れ姿がこの人にとってはなにより嬉しいんだね。こちらでも Allan のマイクはミックスが小さめだが、こっちの方が唄いやすいのか、往年の Allan 節が端々に聴こえ、嬉しくなる。
この Long Cool Woman In A Black Dress 演奏中にちょっとした事件が。Terry Sylvester が飛び入りのように参加して、1stヴァースの終わり頃に Pat Monahan に耳打ちしてマイクを奪取(笑)、2ndヴァースを嬉々として唄い始めるのだが、Allan は毅然とマイクを Pat に返すように Terry に促すのだ。はしゃぎ過ぎ Terry をたしなめる Allan 兄貴、といったところか。


Graham は殿堂入りが伝えられた直後のインタビュー Graham Nash "Honored" By the Hollies' Rock and Roll Hall of Fame Induction でも「Hollies は殿堂入りするに値するグループだと思う、けれど(殿堂入りの報に対する)僕の一番最初の反応は僕の親友である Allan に対するものだった」と語っているし、式典のあとのインタビュー Graham Nash Reflects on The Hollies’ Hall of Fame Career - RollingStone Magazine Blog でも「昔からのパートナー(Allan)が殿堂入りしたことに興奮を抑えきれなかったよ、彼はずっと過小評価されてきたリードシンガーなんだから」と語っているなど、Graham にとって Allan は本当に大切な幼なじみ、かつ、親友であり続けているんだな、とわかる。なんとも心温まる話ではないか。

なにはともあれ、Hollies おめでとう。これでしばらく音沙汰のないポリドール期のアルバムのEMIからのリマスターが再始動すると嬉しい限り。

(2012/01/10 追記): どうも Terry にとっては癪に触る出来事だったようで、彼のオフィシャルサイト www.terrysylvester.com の News セクションの 2011/1/13 付けの箇所では以下のようにコメントされている:
In answer to lots of emails regarding the 2010 induction of the Hollies into the R&RHOF, Terry has this to say, "Nash & Clarke were extremely disrespectful to me, & that kind of behavior will not be tolerated". Also, why was Nash still on the stage for 'Long Cool Woman, In A Black Dress' playing tambourine? Hypocrite!
そうはいうけれど、ご自分にとっても名誉この上ないはずの晴れの席にサッカーユニフォームとだぼだぼコートで現れて、Pat Monahan が全編リードを歌うという段取りも無視して、自分のエゴでマイクを奪い取るってのは褒められたもんじゃないんじゃないですかね… Terry さん。

2010年1月24日

ジョン・レノン・ミュージアム閉館検討報道について

大成建設が運営している、さいたま新都心のさいたまスーパーアリーナ内にあるジョン・レノン・ミュージアム (John Lennon Museum、略称 JLM)の閉館が検討されている、との報道が世間をにぎわせたのは昨年末(リンク先:asahi.com 「ジョン・レノン・ミュージアム」閉館を検討 来場者減)。
これを流れを打破すべく、ジョンレノンミュージアムの存続を求める市民(ファン)の会 が活動中との報道があった。会のブログを読むと、表にはなかなか出てこない情報が掲載されていて、「なるほど、かなか難しい問題がいろいろあるのだなあ」と思わされる。展示品の保険料が莫大だ、ということもこのブログで初めて知った。会では、1/22 にさいたま新都心、1/23 に大宮駅西口で街頭署名活動を実施したほか、ネット経由での署名募集も実施中とのこと。
報道では「来場者数低迷による経営不振から、ミュージアムはオノさん側と結んでいる2010年10月までの展示契約を更新しないことを考えているという」となっているが、存続を求める市民(ファン)の会の見解では「企業の活動には予算がつきものなので年度末には決まっちゃうのではないかと思っています」とのこと。つまり、運営母体である大成建設の 2010年度の予算に JLM の予算を入れてもらわなければならない、というのが会の(現時点での)最終目標、ということになる。時間との戦いの側面もあると思うので、頑張ってほしいと思う。

ここで、JLM に関して自分を振り返ってみた。正直に言うと、ビートルズファン暦30年弱になるのに JLM にはまだ行ったことがない。なんでなんかな、をできるだけロジカルに考えてみた。
振り返ると、80年代とか90年代は期間限定のビートルズ展とかがデパートとかでたまにあり、ああいうのは「いま見逃すと見られない」というところがあるので足を運んでいた。見たこともないものが、一気にまとめて見られたからね。
それに比べると、JLM はいつでも 365 日そこにあり、いつでもオープンしている、という安心感があった。自分が元は横浜、今も千葉に住んでいて「いつでもいける」という気分だったのも大きいな。横浜にいるからって、しょうっちゅう中華街にいったり氷川丸にいったりマリンタワー昇ったり港の見える丘公園に散歩に行くわけではないよね。それと同じ。
そして、いわゆる「アート」全般に造詣がない自分にとって、「ミュージアム」というところは特に何度もリピートして通う存在ではなかった。もちろん、世界中の美術館や博物館がいろいろな企画展などを通してリピーターを取り込む努力をしているのも知っている。けれど、それも企画次第だと思う。今、JLM のニュースページ にある過去のイベントを見ても、それぞれが「埼玉まで足を運ぶ、入場料に 1500 円払う」気分になる催しだったか、を考えると難しい。「Happy Xmas (War Is Over) の作詞原稿を期間限定で展示します」と言われても、うーん、確かにそれは見てみたいけど、でもそれだけで再度の訪問を期待するのは厳しいというのが正直なところ。
つまり、一度行けばいい、そしていつでも行ける、というのが JLM に足を運ぶのを留まらせていたのではないだろうか。

そうならないことを祈っているが、もし閉館が正式に発表されてしまった場合は、それが自分にとって JLM に足を運ぶきっかけになるのは間違いない。
まあ、その前でもスーパーアリーナに行く機会があれば行っちゃうと思います。そう、これまで生まれてから一度たりとも、さいたま新都心・さいたまスーパーアリーナに行ったことがないのだ。

(2/5 追記) 残念ながら、大成建設から正式に 9/30 をもって閉館する旨の発表がなされた。閉館にむけて寄せられたヨーコさんのメッセージによると、「まず、5年と思っていたのがみなさんのミュージアムへの愛によって10年になった」とのこと。今は、ジョンのミュージアムが10年もの間、日本においてオープンされたことに対して素直に感謝しつつ、閉館前に JLM を訪問したいと思う。

2010年1月10日

お買い物記録~Hollies

Hollies の Rock'n'roll Hall of Fame 殿堂入り記念として、手を出していなかった 70's Hollies の CD の中で、いまだ EMI からのリマスタリングで再発になっていない CD をお買い物。

調べてみると、微妙に品切れとかも多い模様。なので各国のサイトを駆使して在庫を検索。アマゾンの場合、ヨーロッパ3国(.co.uk/.de/.fr)は在庫はシェアしてるので、どこで注文してもいいんですが、今回は「In Stock」のところでおさえました。(見分け方は、どこか1国だけ Shipped in 24 hours でほかのところが 2~3 days なら、1ヵ所にしか在庫がないと思って OK。)Hollies を大量にストックしているとは思えないし、殿堂入りの余波で万が一売れちゃったら、次に出会えるのがいつになるか危うい、というのは中途半端にメジャーなグループの悲しいところです。送料は余計にかかっちゃうけど、以下のようにオーダー。

amazon.co.jp で Russian Roulette (1976)5317704 (1979)
amazon.de で Hollies Live Hits (1977)
amazon.fr で Write On (1976)A Crazy Steal (1978)
HMV Japan で Out On The Road (1973)

amazon.de と amazon.fr はそれぞれドイツ語、フランス語しかないので博打ですが、各国のサイトの作りはだいたい共通なので、当てずっぽうでもなんとかなるものです。ヘルプページは英語もありますが、ほとんど役にたちません。だって、Your Account で「何ができるか」は書いてあるけど、「どうやるか」は書いてないんだもの。そこは Google 翻訳などを駆使しつつ、荒野を進むのだ。
Write On はリイシューが 1999 年と古いため amazon.co.jp のカタログではマーケットプレイスからすごいお値段の出品しかなかったので、CD の販売元の France は Magic records のお膝元、Amazon.fr で注文。
残念ながら、リリース当時、ドイツなど数カ国でしかリリースされなかったという幻のアルバム Out On The Road は注文時点では amazon.co.jp には在庫なし、ということで HMV Japan で注文。

これでとりあえず一安心、と思ったら、Russian Roulette は「歌詞・解説付/デジパック仕様」と detail page にあるのですが、届いた商品はプラケースで解説なし。VIVID のシールは貼ってあったのですが、わざわざ日本仕様盤で買うのはひとえに解説のため。Amazon には返品し、HMV で買い直しとなりました。

とりあえず全部通して聴いてみた。今のところの結論は、これよりちょっと前に入手していた Hollies (1974)Another Night (1975) も含めて、僕は 60 年代 Hollies のビート感が好きなので、70 年代 Hollies はピンとこない感じ。でも、Hollies Live Hits のライブ音源はいいんだよね。まあ、オーヴァーダブしてるところもあるんですけど(ゴダイゴのライブ盤みたいにヴォーカルがダブルトラックになってるところがあるのでわかっちゃうよね)演奏はライブ感が出ていて、そこが良いんです。

まだ聴き込みが足りていないだけかもしれないので、これから強制ヘビーローテーションに入れてみる予定です。