Island Life

2013/12/21

ちょい役 = Co-Star

昨夜放映された "Hawaii Five-0" のシーズン4エピソード11 "Pukana" にちょっとだけ出演した。 ちなみに今まで3回オーディションで落ちてて、これが4度目の挑戦であった。 Casting directorの人に「やっとだね、良かったわね」と喜ばれてしまった。

[image]

脚本のページが色とりどりなのは、差し替えがある度に違う色のページが配られるから。 差し替えは頻繁に起きるので、写真のようにピンで簡単に止めてあるだけ。 撮影当日には、その日のスケジュールとその日に撮影する脚本の該当部分を小さくコピーした "minis" がトレーラーに用意されてて、それで最終確認をする。 (日本の撮影では、ばっちり製本された脚本を見たことがあるんだけれど、 あれって脚本の差し替えにはどう対応してるんだろう?)

以前のAFTRA契約では「せりふが5行以下」というUnder-fiveというカテゴリが あったのだけれど、SAG-AFTRAになってからなくなったようだ (もともとSAGには 無かったのかな)。私のせりふは3行だったけどちゃんとフルレートでの契約だった (現在$880/day)。 撮影時にトレーラーの部屋が割り当てられるし、組合様々である。

契約のタイトルが "Co-Star" となっていて、これだけ見るとまるで主役に準ずる 扱いのようだけど、業界ではこれは「主役にちょっとでも絡む、せりふのある役」という意味らしい。 主役に準ずる形で単独エピソードに出る場合は"Guest star"とか"Show star"になる。

"Five-0" は、事件の大きさのわりに毎回都合良く解決しすぎる気がしてあんまり 観てなかったんだけど、ここ何回か友人が出演してるので観てみて、何となく人気の 理由はわかるような気がした。主役二人(O'LoughlinとCaan)の掛け合いが 上手いバランスで、事件よりもそっちを観る方が正しい見方なんだろうな。

エピソードはオンラインで観られるけれど、日本からだとリージョン制限にひっかかるかも: http://www.cbs.com/shows/hawaii_five_0/video/P3dj9hNz5ghJD_wbKnnv3RP_equHL5fh/hawaii-five-0-pukana/

以下はネタバレ含むので観てない人は注意。

* * *

  • 私の役名は"Mitsue Tanaka"。男なのにMitsue?と思ったけど「田中満衛」ならありかな。 ちなみに役名は契約ほか様々な書類に記されるので、役が決まった時点ではもはやそうそう 変えられるものではない。
  • 出演場面は石巻の仮設住宅なんだけど、撮影したのはホノルルなんで、 冬の東北にはちょっと見えないですな。 衣装は冬装束だけど。
  • 最後に「Merry Christmas」で締めるのはクリスマスエピソードとして綺麗なのだけれど、 クリスマス当日の朝にDannyが箱の持ち主を知ったとして、そこからどんなに急いでも 日の出ている時間に石巻に着くのは27日の朝になると思う。果たして27日に 「メリークリスマス」と言うであろうか、という疑問が。 私は、いきなり訪ねてきたアメリカ人に適切な挨拶が思い浮かばずとっさに出た、と解釈。

Tag: 芝居

2013/12/20

ピアノレッスン113回目

  • Kapustin: Concerto Etude Op40-1
    • 中間部のアドリブっぽいところ、速くすると単調になってしまうので "do something"。
  • Ravel: Ondine
    • 高音域でメロディと伴奏が重なるところで、伴奏にメロディが 埋もれがちになるので注意。

Tag: Piano

2013/12/14

ピアノレッスン112回目

また忙しくてひと月ぶりくらいになった。

  • Kapustin: Concerto Etude Op40-1
  • Ravel: Ondine

すこしづつ進歩はしてる模様。

Tag: Piano

2013/12/13

sqrtが遅かった話

https://twitter.com/tk_riple/status/411433966952923136

最初は環境がネストしてるからだと思ってフラットにしたんだけど変わらなかったので、多分Gaucheだとsqrtが遅いんだな。プロファイラ見てみると%sqrtの呼び出したがsqrtの呼び出しの倍くらいになってる。実装は知らない。

ヘロン三角形

gosh> (time (find-heron 100))
;(time (find-heron 100))
; real   1.011
; user   0.967
; sys    0.032
((100 100 56) (100 99 89) ...

norm> (time (find-heron 100))
((100 100 56) (100 99 89) ...
total 0.897 second
GC    0.0 second
#<undef>
norm> 

ああ、そうか。

sqrt は正確な正の平方数が与えられたら、正確な結果を返す (cf. Exact sqrt) のだけど、その計算を

  1. exact-integer-sqrt で正確な正の引数nに対し n = q*q + m (0 <= m < q) なる正確数q, mを計算
  2. mが0ならqが答え
  3. そうでなければnは正確数の平方数ではないので浮動小数点数にしてCのsqrtに投げる

としていた。これだと引数が有理数の平方数でない場合、 exact-integer-sqrt で一回平方根に近い正確値を計算し、 さらに3.でもう一度sqrtを計算するという二度手間をやってたことになる。

二度手間を避けるようにしたらこれこのとおり。

変更前

shiro@scherzo:~/src/Gauche/src$ ./gosh -ftest ../heron.scm
;(time (find-heron 100))
; real   0.722
; user   0.720
; sys    0.000

変更後

shiro@scherzo:~/src/Gauche/src$ ./gosh -ftest ../heron.scm
;(time (find-heron 100))
; real   0.617
; user   0.620
; sys    0.000

Tags: Programming, Gauche

2013/12/08

コンポジションに便利なpropagatedスロット

Metaobject Protocol(MOP) Advent Calendar 2013参加エントリ (12/9分)

GUI作っている時などによく出会うケースだけど、複数の関連するオブジェクトをまとめて ひとつのオブジェクトとして扱いたいことがある。例えばラベル、テキストボックス、 アイコンイメージを並べたものをひとつのウィジェットとして扱いたい、とか。

これはまあ普通にコンテナとなるクラスのサブクラスを作って 部品を配置し、必要な処理について委譲するメソッドを書いてやればいいんだけど、 GUIなんかだと「子ウィジェットのこのプロパティ(スロット)を合成した部品の プロパティとして見せたい」ってのが多い。上の例のウィジェットで テキストボックスのtextスロットを合成ウィジェットのtextスロットとして 参照させたい、等。

テキストボックス自体をスロットとして見せることで、(~ widget 'text-box 'text) というふうに多段で参照させる手もあるけど、必要以上に中身を見せている感じがして いまいち。(アクセスコントロールがデフォルトで備わっていないCLOSで 中身が見えるのを気にするのも妙な話ではあるけれど、 上のような多段アクセス法を公式なAPIにしてしまうと、後で実装を変えたくなった時に 面倒だったり、途中のオブジェクトへの参照を予想外のところで保持されて困ったりする。)

そんな時にpropagatedスロット。これは自分が内包しているオブジェクトのスロットを あたかも自分のスロットであるかのように見せるスロットオプションだ。 Gaucheでは gauche.mop.propagate モジュールで提供されている。 もともとSTkにあった機能を真似したものだ。 最低限の部分だけ示すとこんな感じ:

(use gauche.mop.propagate)

(define-class <text-box> ()
  ((text :init-keyword :text)))

(define-class <composited-widget> ()
  ((text-box :init-form (make <text-box>))
   (text     :allocation :propagated
             :propagate-to 'text-box
             :init-keyword :text))
  :metaclass <propagate-meta>)

<composited-widget>text スロットへの読み書きは、 text-box に保持された text スロットへの読み書きになる。 通常の方法で初期化もできるので、当初<text-box>を使っていたコードを 変えずにその部品だけ<composited-widget>にすげ替えることが できたりして便利。

gosh> (define cw (make <composited-widget> :text "abc"))
cw
gosh> (~ cw 'text)
"abc"
gosh> (~ cw 'text-box 'text) ; 確かに子ウィジェットに伝わってるか確認
"abc"
gosh> (set! (~ cw 'text) "def")
#<undef>
gosh> (~ cw 'text-box 'text) ; 確かに子ウィジェットに伝わってるか確認
"def"

さて、この機能もMOPで実現されている。 これまでの例と同じく、compute-get-n-set をオーバライドする。 allocation スロットオプションが :propagated なら 自前で作ったアクセサ手続きを返し、そうでなければnext-methodを呼んで デフォルトの振る舞いに任せる。 (matchの二番目の節は、子スロットの名前と違う名前を親スロットで定義したい場合の処理)。

(define-method compute-get-n-set ((class <propagate-meta>) slot)
  (let ([name  (slot-definition-name slot)]
        [alloc (slot-definition-allocation slot)])
    (if (eq? alloc :propagated)
      (match (or (slot-definition-option slot :propagate #f)
                 (slot-definition-option slot :propagate-to #f))
        [(? symbol? prop)
         `(,(^o (slot-ref (slot-ref-using-class class o prop) name))
           ,(^(o v) (slot-set! (slot-ref-using-class class o prop) name v))
           ,(^o (slot-bound? (slot-ref-using-class class o prop) name))
           #t)]
        [((? symbol? object-slot) (? symbol? real-slot))
         `(,(^o (slot-ref (slot-ref-using-class class o object-slot)
                          real-slot))
           ,(^(o v) (slot-set! (slot-ref-using-class class o object-slot)
                               real-slot v))
           ,(^o (slot-bound? (slot-ref-using-class class o object-slot)
                             real-slot))
           #t)]
        [other
         (errorf "bad :propagated slot option value ~s for slot ~s of class ~s"
                 other name class)])
      (next-method))))

compute-get-n-set が返しているのは4要素のリストで、各要素の意味は

  1. スロットを読む時に呼ばれる手続き
  2. スロットに書く時に呼ばれる手続き
  3. スロットが値を持っているかどうかをチェックする時に呼ばれる手続き
  4. このスロットが初期化引数で初期化されるかどうかのフラグ

となっている。詳しくはrefj:compute-get-n-set参照。

Tags: Programming, Gauche, MOP

More entries ...