Shiro:log:2006前半

Shiro:log:2006前半

Shiro


(2006/06/30 14:15:38 PDT) 税金

エンジニアの生“給料明細”拝見、 ぱっと見て思ったのは「税金安っ!」。特に家族持ちの人の方、 桁がちょうどひとつ違う感じ (独身のケースの方も、こっちの感覚の半分くらいかな)。 健康保険(医療保険)も安いなあ。これは雇用者からのマッチングがあるんだっけ。 それに比べると年金は高めかな。こちらでサラリーマンなら自己拠出年金に回せるのは 最大でも給料の7%くらいまでだったと思う。

もうひとつ税金ネタ。 内田樹の研究室: Why do only fools pay the tax?。 税務署から「消費税払え」って通知が来て面倒だって話。 えーっと、払う方がデフォルトで、今までが「免除されててラッキー」だったわけで。 今まで楽してたぶん、大変に感じられるだけではなかろうか。 金を払うのはやぶさかではないが時間が惜しいというなら 小飼さんの 言うように税理士に投げればいい。 (もっとも、制度的に日本の方が複雑っぽいところ には同情する。ハワイ州の消費税(GET)の場合「1000万円以下」なんて免除制度は無いし 「仕入れにかかった消費税は控除する」なんて話もない。小売と卸(wholesale)の 区別はあるけれど、単純に売上げに税率をかけた金額が納税額だ。 日本の制度の方が「払わなくて良い場合」が多くなるから良し悪しだが。)

源泉徴収制度+年末調整とか、上記の1000万以下の消費税課税免除とか、確かに それに該当する人は納税のことをほとんど考えないでも良いから楽ではあるんだが、 そのぶん、「税金のことを考えない人間」にさせられるような気もする。

(2006/06/13 14:22:25 PDT)

Cat's cradle って、日本の(2人でやる)あやとりと全く同じものだったのね。 (ヴォネガットの小説で、紐で作る形である、ということはわかってたけど…) 一昨日、楽屋で、衣装からほつれた紐をもてあそんでた隣の役者が 「Cat's cradleやろう」って言って子供の頃に見慣れたあの形を作ったので ちょっとびっくりした。後で調べたら世界中で同じように遊んでいるらしい。

(2006/06/02 19:20:40 PDT)

Hop: Hop is a new programming language designed for the Web 2.0. It is a higher-order language for programming interactive web applications such as web agendas, web galleries, music players, etc.

Schemeライクな言語でインタラクティブなWebアプリが組める。 インタラクション部分はクライアントサイドJavascriptに変換している。 作者はBiglooの人やSTklosの人。サーバと処理系はBiglooで書かれてるようだ。

(2006/06/01 18:44:14 PDT) Review

劇評。

最も好意的な評を寄せてくれたのは Honolulu Weekly

Kumu Kahua's Another Heaven is a sharp and compelling retelling of Hawai`i's first lynching.

... This is not just another historical Hawai`i drama with nasty haoles.

... Another Heaven is crisply directed, full of sharp, compelling dialogue, with riveting acting throughout. The actors, in fact, are outstanding.

Starbulletinは 手放しで褒めてるわけじゃないが、ポイントは押さえてくれたもよう。

[Playwright] Anderson and director Sammie Choy wisely avoid presenting "Another Heaven" as an exercise in simplistic agitprop theater.

一方、Honolulu Advertiserは手厳しい。

'Heaven' lacks core strength in play about Island lynching.

The unfortunate thing about Eric Anderson's "Another Heaven" is that its potentially most interesting character [Goto] is relegated to a minor supporting role. ...

... There are no villains of stature among them, nor any heroes of the common man.

もっとも、villain vs heroという提示を敢えて避けたこと、 殺されたGoto本人を主役に据えるのではなくその周囲の人々の群像劇にしたこと、 というのがそもそもこの芝居のポイントなわけで、 そこを批判されてもなんだかなあという気はする。

(2006/05/21 04:38:28 PDT)

3日目まで終えた。観客の反応はわりと良い…かな?

今回、共演者がみな上手い人で、助けられつつもなかなか着地点を 見つけられなかったのだが、初日にやっといい感じに掴めた。

(2006/05/16 02:13:00 PDT)

昨日はきっかけ稽古 (cue to cue) と衣装、照明ありの通し (wet run)。 今日は音効も入れて、客のいない最後の通し。 明日はもう客を入れたプレビューだ。

なのだけど、日本とメインランドから人が来てて、 製作中のソフトのデモをしなくちゃならなかったんで、 ひさびさに修羅場ってた。眠い。

(2006/05/08 04:56:47 PDT)

Unix User改めオープンソースマガジン2006年6月号の「ハッカー養成塾」というコーナーに2ページほど記事を書いた。 私が読むことの出来た過去の記事では「入門」みたいな話が多かったので、ちょっと対象読者をずらしたところに置いてみた。人によっては当然すぎて面白くないかもしれないけど、それは対象読者では無かったということで。

関係ないが、明日(いや、もう今日だ)マイルストーンを出すはずだったのだが、夜半を過ぎてからリビングでゴキブリの成虫が次から次へと現れるのはどういうことだ。もう6匹殺った。コンバットの効き目が切れた? にしては突然すぎる。 はっ、まさか奴等はライバル企業の送り込んだ刺客、もしくはスパイ?!

(2006/05/05 02:47:43 PDT) The Art of Stunts

今回の芝居でも若干ステージアクションが入るので、 アクションコリオグラファーに来てもらって指導を受ける。 徹頭徹尾、「どう見えるか」という点からシーンを組み立てるのが興味深い。 Kumu Kahuaの芝居は客席が非常に近いこともあって、 普段はあまり「見せるための演技」はやらないだけに。

前にも書いたかもしれないが、用語のメモ。

(2006/04/28 03:57:06 PDT)

"Another Heaven" の案内がKumu Kahua Theaterのwebpageに出た: http://kumukahua.org/05heavenmain.html

こんな話:

19世紀末のハワイ。日本からの最初の移民船でハワイに移住し、3年間の サトウキビ農園での農作業に従事した後藤潤は、契約終了後に 移民組としては初めて商店を開いた。英語にも堪能であった彼は 商店のあった地区のプランテーションで働く日系移民のブレーン的 存在になる。しかし、移民労働者の待遇改善に奔走することで、 アメリカ人農場主やポルトガル人農場管理者達と対立を深めてゆく。 そしてある朝、後藤は死体となって発見される。

街の支配階級の人々は自殺ということで事件を片付けたがったが、 ホノルルから派遣された日本人調査官が地道なインタビューによって 事実を徐々に明らかにしてゆく。その過程で、人種のるつぼと化し、 さまざまな階級が存在していた当時のハワイ社会の様子が浮き彫りになってゆく。

ハワイ島ホノカアで1889年に実際に起きた殺人事件をドラマ化したもの。 脚本のEric Andersonは史実を丹念に追いながらも、単純な正義vs悪者の 図式に落とすことなく、むしろ複雑な社会を背景とした人間ドラマに仕上げている。

(2006/04/20 14:28:09 PDT)

昨日、らむ太は「ハイハイより歩く方が速い」ということに気づいたらしい。 ここ何週間か、気が向くとよいしょと立ち上がって2〜3m歩く、というのを やっていたのだが、昨日の朝突如として、どこに移動するのにも歩くようになった。

(2006/04/18 00:08:03 PDT)

東大で電子工学の人気が急落中…。 情報系やりたい人は機械か計数、デバイスやりたい人は物工に行っちゃうのかね。 デバイスから回路、その上に載るソフトまでひと続きでいじれる環境ではあるんだが (強電系の実験もおもしろかったし)。むしろその中途半端さが問題?

(2006/04/04 03:48:19 PDT)

初稽古。共演者のレベルがめっさ高い。脚本もめっさ完成度高し。 えらい挑戦になりそうだが、得られるものは大きそうだ。

(2006/04/02 15:03:53 PDT)

うげ。また瞬断があった。このひと月で3回目か4回目? マシンとメインディスプレイはUPSがあるから平気なんだが、 UPSを経由せず直接つないでいたサブディスプレイの方が壊れたっぽい。 電源が入らなくなった。電圧低下ではなくサージがあったのだろうか。 困ったな。

(追記)しばらく電源コードを抜いといて、再び差したら復活した。

(2006/04/01 20:44:00 PST)

やっと晴れた。まだ雲は多いけど。

しかし、昨日までのはまさに椎名誠の「雨がやんだら」の世界。

http://starbulletin.com/2006/04/01/news/story01a.html http://starbulletin.com/2006/04/01/news/story02.html

Kahala mallやMakikiなど、普段あまり浸水しなさそうなところまで被害が出てる。 Waikikiではあふれた下水がAla Wai運河経由で海に出て、Hilton側のビーチは閉鎖中。

(2006/04/01 03:15:03 PST)

うーん、sf.netのdeveloper CVSがずっと落ちてる…

(2006/03/31 03:59:23 PST)

ハワイは雨続き。2月下旬からほぼ1月半、天気が良かったのは数日間だけである。 普段の雨期は12月〜1月、しかも雨が続いても3日くらいなのに…

いつもは雨期の間だけほんのり緑色になるダイアモンドヘッドが、 今年はパンチボウル並の緑に覆われている。

(2006/03/19 01:22:33 PST)

enbug diary : スクリプト言語はコンパイラ言語より遅いのか?!。 向こうにもコメントを書いたのだけれど、少し詳しく。 もちろんうるさいことを言えばスクリプト言語とコンパイラ言語を対比するのは 変なのだろうけど、ここでは文脈から「スクリプト言語」は実行形式をソースの まま持っておいて実行時にインタプリト、もしくはVMコードくらいにコンパイル して実行するもの、「コンパイラ言語」はバッチコンパイルしてバイナリの実行 形式を作っておくもの、くらいの意味だろう。

で、Lispは昔から実行時解釈も実行時コンパイルもバッチコンパイルも可能だった わけで、他の言語、特に新しい言語が同じことを出来ない理由は無いし、既に そういう流れになっていると思う。

ところで、同じソースファイルを、インタプリトした場合と コンパイルした場合に、全く同じ動作を保証するのは見かけほど自明な話 ではない。特にプログラムの意味に影響を与えるメタレベルの操作が実行時に 許されている場合、実行してみないとプログラムの意味が決定できない→ コンパイルできない、ということがしばしば起こる。Lisp界隈ではこれに ついて20年前くらいにさんざん議論されて、一応の落としどころは 見えている (もっともその中にはeval-whenみたいなアドホックな解決もある。 Scheme界ではそういうのを嫌って、本当に「正しい」セマンティクスを 追求しているせいで、未だにポータブルなモジュールシステムや低レベルマクロが 無いのだが)。まあ、少なくともCLやSchemeの言語仕様の設計時には、 その仕様がインタプリタでもバッチコンパイラでも矛盾のない自然な動作に なるかどうか、かならず検討されている。

さて、新興言語はLispの歴史に学ぶだろうか。それとも処理系をコンパイラ向けに チューンしてゆく過程で、Lispがひっかかった罠に再びはまり、同じ歴史を 繰り返すだろうか。

(2006/03/15 21:06:38 PST)

申告の書類作りに会計士さんのところへ。扶養家族が増えたからちっとは 安くなるかなと思ってたんだが、昨年は全く出張しなかったせいで経費が大幅減 していたのを忘れてたよ。一昨年より高くなっちまった。

「家でも買えばうんと(税額を)安くできるんですけどね」と言われたけど この不動産相場の高騰ぶりじゃ到底無理だしなあ。

(2006/03/15 04:06:17 PST)

YouOS。 Y Combinatorの支援を受けたスタートアップ。ブラウザで走るOS。 デモをいじる限りではそれなりに面白い。どこまでenvelopeを拡げられるかに注目。

(2006/03/14 21:31:12 PST)

AA折れ線グラフ

入力は'R','F','C'の3種類の文字からなる長さ1以上の文字列

  • 'R'は上昇を表し,折れ線グラフの要素としては '/' (スラッシュ)1文字に対応
  • 'F'は下降を表し,折れ線グラフの要素としては '\' (バックスラッシュ)1文字に対応
  • 'C'は変化なしを表し,折れ線グラフの要素としては'_'(アンダスコア)1文字に対応

わしの答え。

(use gauche.sequence)

(define (graph input)
  (define (input->plist input)
    (fold2 (lambda (cmd r y)
             (case cmd
               ((#\R) (values (acons y #\/ r) (+ y 1)))
               ((#\F) (values (acons (- y 1) #\\ r) (- y 1)))
               ((#\C) (values (acons y #\_ r) y))))
           () 0 input))
  (define (draw-row plist y)
    (fold (lambda (p r)
            (cond ((= (car p) y) (display (cdr p)) #t)
                  (else          (display #\space) r)))
          #f plist))
  (let ((plist (reverse (values-ref (input->plist input) 0))))
    (let loop ((y (apply max -1/0 (map car plist))))
      (and (draw-row plist y) (display #\newline) (loop (- y 1))))))

最後に空行が入るのは気にしないっと。

yの最大値はinput->plistの段階で計算するって手もある。

gosh> (graph "RCRFCRFFCCRFFRRCRRCCFRFRFF")
                  __      
                 /  \/\/\ 
 _/\_/\        _/        \
/      \__/\  /           
            \/            
                          #f

(2006/03/02 16:23:47 PST)

2月末締切の仕事が2つ重なって、どうにか間に合わせたのだが その日の夜から寝込んでしまった。もう無理が効かない年なのかのう。ごほごほ。

(2006/02/26 13:22:53 PST)

キングの "CELL" 読み終わった。Dark Towerシリーズを終わらせて 肩の荷が下りたのか、力を抜いて「語る楽しみ」を味わってる 感じが良かった。ある意味話の骨子は "Mist" と全く同じなんだけれど、 語り口は"CELL"の方がずっとスムース。

思えば、中後期のKingには「作品に書かされている」 という雰囲気がつきまとっていた。作品が書かれたいと頭の中で暴れ回って いるのをKingがどうにかなだめている感じ。"Dark Tower"を完結させた ことでそれがふっきれたのか。

夕食後、居間で暖炉を囲みながら、孫に「恐い話」をねだられて 語られた話…のような感覚で読める。

assume makes ass out of you and me.

Survival is like love. Both are blind.

Tony, Tony, come around, something's lost that can't be found.

(2006/02/25 14:24:44 PST)

YAMDAS現更新履歴 - 殺し屋ネリのギャラはいくらだったのだろう?

それで思うのは、スターなんかじゃなく、脇役専門の人のギャラってどの程度なのかなということ。それもスティーブ・ブシェミのように怪優として有名だったりアカデミー助演賞をとるような人でなく、完全な脇役なんだけど気をつけて見れば識別できるというような。

そうさね、例えばチャールズ・ネイピアとか。彼の名前だけ出して分かる人は少ないだろうが、『羊たちの沈黙』でレクター博士に磔にされた警官役の人といえば、ああ、あのおっさんかと分かるでしょ? そうした人たち。

もちろん舞台とかテレビとかにも出ているのだろうが、フィルモグラフィーを見る限り毎年映画に出ているわけでもないわけで、それで彼らは食っていけるのかとまったく余計なことを考えたりしたのだ。

本当のところどうなのかはわしも知りたい。のだけれど、表に出てる資料から 多少は推測できることもある。

SAGに入っている場合、エキストラでない (基本的にはセリフが一言でもある) 役につけたら、撮影一日につき最低保証がだいたい$700。まあ、完全な脇役だと 出番もせいぜい数シーン、撮影は1〜2日で終わるだろう。ちなみにTVシリーズの レギュラーが取れれば30分番組でだいたい$3000/週くらいが最低保証。 あとはコマーシャル。全国規模のコマーシャルの役はかなりいいらしい。 ("that paid my bills for long time" と以前取ったacting classの 先生は言っていた。もっともそれ以外の時期は常にかつかつだったらしい)。 一方、舞台はきつい。組合としてはAEAになるけれど、最低というところでは $200/週を切る場合も。

このへんの数字は全て各unionの出している資料から。あくまで最低保証なので、 上にゆく可能性はあるわけだが… 実際にどのくらい稼げてるかについては、SAGのサイトには 「組合員の大半はSAGプロダクションからの収入が年間$7,500以下」の記述がある。 ソースを忘れたが「SAG組合員の90%は役者としての収入が年間$10,000以下」というのも どこかで見たことがある。「ちょくちょく見る」レベルの人はまあ上から10%には 入っているだろうけれど、day job無しでやれてるとも思えない。 (もっとも、stand up comedyとかDJとかバンド演奏でそれなりの 収入を得て、残りの時間で役者をやっている人もいる。そういう人にとって どれが副業でどれが本業かは判断がつけがたいかもしれない)。

(2006/02/21 20:14:09 PST)

Y Combinator.com の記事 on NYTimes: Running a Hatchery for Replicant Hackers

(2006/02/20 13:57:12 PST) Reddit

Paul GrahamらのY Combinatorが昨年出資した Reddit.comに日本語版ができたそうな→ http://ja.reddit.com

ちょっと試してみたがutf-8でない日本語ページのタイトルを うまく取れなかったり、まだ課題は多そうだ。 外部性のメリットがでるユーザ数の閾値を越えられるかどうかだな。 (ちなみに本家 http://reddit.com は結構おもろい記事が上がってくる)。

(2006/02/21 16:42:11 PST 追記): エンコーディングの問題は開発者が徹夜で直して くれたみたい。ちなみにどんなシステムかというと、面白いURLを シェアしましょうってことなんだが、自分的におもしろかったかおもしろく なかったかをvoteしてゆくとだんだん賢くなって似たような傾向の 記事をrecommendしてくれるようにもなる。

(2006/02/03 00:47:19 PST) キングの新作

先日とうとう "Dark Tower" シリーズを読み終わったところだが 本屋に行ったらキングの新作 "CELL" が安売りしてたので思わず購入。 やっぱり「もう書かない」なんてことはできないのね。 秋にはまた新刊が出るらしいし。

"CELL"は冒頭からいきなり不条理世界が出現。キング節は健在。

(2006/02/02 00:13:35 PST)

とうとうこのWiLiKiにもspamが来ていたようで。revertしてくれたこびとさん、 ありがとうございます。いたちごっこになるとは思うけれど、アクセスログを 睨んで何か対策を考えなければ。

月曜から今日まで、某ホテルチェーンのプロモーションフィルムの撮影だった。 ちょっとしたドラマ仕立ての数分のプログラム。 太陽光を利用する屋外での撮影は早朝から夕方までのことが多く、 集合は朝5時とか6時だ。夕方仕事が終わってから子供を 風呂に入れて飯を食わせ、自分達も食事を済ませると8時。 翌日の台本を確認して、ストレッチとヨガをやって9時就寝。 こういう生活も悪くはない。コンスタントに(役者の)仕事があればいいんだけれど そううまくはいかないね。

クルーの中に去年の映画で一緒だった人が2人ばかり。こちらも狭い業界である。 ほんの3日でも、一緒にプロダクションをやると他人とは思えなくなるのが 芝居の魔力だ。

(2006/01/28 17:20:55 PST)

プログラミングパラダイム及び言語の進化ってのは、 複雑すぎでそのままでは人間の頭に入りきらない問題をいかにして 頭に入りきる大きさに収めるかという試みに他ならない。構造化も抽象化も カプセル化も、そのための道具だ。

オブジェクト指向の出自は現実の世界のモデル化にあったはずだが、 ある時、それが「簡易抽象データ型+簡易名前空間+簡易クロージャ」として 使えることに誰かが気づいた (誰が最初に気づいたかは知らないけれど 広めたのはStroustrupだろう)。これらの概念はそれぞれが、 モジュラリティの高いプログラミングに使える道具であり、 問題の複雑さを整理するのに役立った。で、後者の方が広まってしまった。

オブジェクト指向がわかりにくいとされる理由の一端は、 このような経緯にあるのだろう。 小飼さんが「『オブジェクト指向』は『構造化』の進化系ではなく、 元来直交して扱える概念」という時、それは出自に遡ってとらえている。 一方、プログラミングパラダイムの方から見ると、構造化の後でたまたま 「使える」概念として出てきたのがオブジェクト指向だったわけで、 Matzさんの「実際には、オブジェクト指向プログラミングは、 構造化プログラミングの『次』と 認識されるべきものだと思う」というのは そっちの立場なんだと思う。

後者が広まったのはC++のせいもあるが、旧来のプログラミングに 慣れていた人々が現実のモデル化というのを具体的にイメージするには、 Smalltalkのような環境が無いと難しかった、ということもあるのではなかろうか。 私自身は、アセンブラでちょっと面倒なプログラムを書いてて スパゲティになってしまった時に、伝え聞いていた「データと手続きを 一緒にして、オブジェクト間のメッセージパッシングでプログラムを記述する」 という手法を試してみたらびっくりするほどすっきり書けて、 ああこれが巷でいうオブジェクト指向というやつなのかと納得した 覚えがある。つまり方法論から入ったわけだ。C++どころかCもろくすっぽ 知らなかった頃だ。もしCを使い込んでいてC++に触れて、 構造体の延長として抽象型もどき、名前空間もどき、クロージャもどきを 手に入れればこりゃ便利だと思っただろう。

上で「簡易」とか「もどき」とか言っているのは、初期のC++が提示した それらは結局本来の概念の代用、もしくは一次近似に過ぎなかったからだ。 それ自体は悪いことではない。 それも一種のモデル化(それも、結構使えるモデル化)だから。 ただ、言語の限界を押し広げるように使ってゆくといつか近似はほつれてきて、 不満が出てくる傾向はある。テンプレートを導入したり名前空間を別に入れたり、 あるいは無名クラスやデリゲートやらと言っているのは、 ほつれを何とかしようとして近似の度合を二次、三次と上げているようなものである。

(2006/01/28 03:21:18 PST)

劇的な人生:The Peekaboo Paradox

(2006/01/26 02:01:08 PST)

CVS管理してるもの以外のデータは以前は適宜CD-ROMに焼いてバックアップと していたのだが、1枚に入りきらなくなって面倒になってきた。 こういう大事な仕事が面倒だとプロクラするようになって後で悲劇が起きる ことになっている。 付ける場所が無くて転がってたEIDEのディスクがあったのでHDDエンクロージャを 買ってきてバックアップディスクにすることにした。 USB2のだともう安いねえ。デザインで選ぶようなものになってるんだなあ。

バックアップそのものはrsync --link-destで。Gauche:gdumpfsもあるけど、 まあ出来合いのコマンドがあるならそっちがいいかと思って。 でもいちいちコマンドラインをタイプするのも面倒なので 結局wrapperを書いてしまった。

(2006/01/23 02:41:43 PST)

センター試験のリスニングのトラブルのニュースを読んでいて思ったんだが、 新しい機械を50万台近く配って、一回限りの試験をやらせようっていう発想が 何というか、日本人的だなあと思う。「ちゃんと動いて当然」という頭 があって、付けたしのようにトラブルへの対応手順を考えたんじゃなかろうか。 こっちじゃそういう発想は出てこない。うまくいきっこないから。

人間が相手の場合、失敗に大きなペナルティを課すことで「ちゃんとやる」 圧力をかなりの程度まで増やすことができ、実際に日本社会の多くの部分が そのようにして動いているのだが、機械の故障率ってのは人間ほど柔軟じゃない。 メーカーにプレッシャーをかけて多少調整することは出来たとしても、 結局はコストとのトレードオフになる。入試センターは当初 「故障はゼロと思っていた」と言ってたそうだが、 本気で故障率を10^-6以下にしたつもりだったんだろか。

エラー処理が醜くなる時っていうのはだいたい設計をしくじっている。 トラブルが一定率で起きることを織り込んでいれば、 トラブル時の再テストや再試験などにあまり複雑な手順を設定できないはずだ。 例えば「一度しか聞けない」という制限をはずせばずいぶんすっきりすると 思うのだが。装置に頭出しをつけなくちゃならないけれど、機器トラブルは すぐに交換すれば済むし、操作ミスのリカバーも容易になる。 それによって故障率のマージンが広く取れるならコスト的には どっこいどっこいになるかもしれない。

何度も聞けていいのか、に関しては、そもそもリスニングで何を 試験したいのかってことになる。ネイティブのスピードで読まれた英語を 一発で聞き取れる受験生なんてほんのごく一部だろうから、問題はかなり ゆっくり読み上げられていたのだろうと想像する。 だが、今後受験生が英語を使ってゆく場面で、(1)相手がゆっくりと 一度だけ喋ってくれる (2)相手は普通に喋るが、聞き返したら何度でも 言い直してくれる、のどちらに遭遇することが多いだろう。

自分の経験からすると、リスニングの能力はリニアに向上するのではなく、 不連続な段階がある。その一番重要なものは、「どの単語が聞き取れな かったかが自分でわかる」という段階だ。それをクリアすると実用上 あまり不自由することがなくなる。 で、複数回聞くことによって救われるのはその段階に達している受験生 だけなので (それ以下だと何回聞いてもわからない)、複数回聞けるように することの影響ってあんまり無いんじゃなかろうか。

(2006/01/17 02:38:07 PST)

昨年、short filmで一緒にやった役者さんが亡くなっていたことをついさっき知った。 Entertainer Ray Bumatai, 52, succumbs to brain cancer。 撮影が6月半ばだったから、撮影のほとんど直後に脳腫瘍が再発していたのだ。

一緒に仕事をしているだけで勉強になった。もっと経験を積んでから また共演できたらいいと思っていた。 チャンスというのはいつでも一回限りなのだ。舞台でも、人生でも。

(2006/01/10 23:54:26 PST)

関数型言語でfor文が無いのは、という話がどこかでもりあがってるのを見た。 それについては「再帰が基本で、forはsyntax sugar」でいいと思うのだけれど、 もうひとつ、for文みたいなイディオムは、ファーストクラスクロージャと 組み合わさると、変な落とし穴を作ることがある。

ナイーブな実装を考える。

(define-syntax for
  (syntax-rules ()
    ((for (var init) test update body ...)
     (let ((var init))
       (let loop ()
         (when test
           body ...
           update
           (loop)))))))

gosh> (for (i 0) (< i 5) (set! i (+ i 1))
           (print i))
0
1
2
3
4
#<undef>

一見うまく動く。しかし、for文のbodyでクロージャが作られ、それが for文のエクステントを越えて生き延びると、困ったことが起きる。

gosh> (define p '())
p
gosh> (for (i 0) (< i 5) (set! i (+ i 1))
           (push! p (lambda () i)))
#<undef>
gosh> p
(#<closure #f> #<closure #f> #<closure #f> #<closure #f> #<closure #f>)
gosh> (map (cut <>) p)
(5 5 5 5 5)

処理の本体をクロージャにして抽象化するのはSchemerなら息を吸うように やってることだが、ループ変数を破壊的に変更してしまうとそれが 等価な変換ではなくなってしまうのだ。 些細なことに思えるかもしれないが、こういうところにトラップがあると まるで息を吸うのに不自由する感じがある。

Schemeのdo構文は再帰のsyntax sugarなのでこの問題はない。forも ループ変数を破壊的変更でなく再帰関数の引数にして持ち回ればこの問題は 起きないのだが、手続き型言語のfor文は(C++の「イテレータ」イディオムを 含めて)破壊的変更を暗黙のうちに仮定しているかのようだ。

なおCommon Lispのloopマクロやdotimesマクロはループ変数を 破壊的変更しくさるのだが、これはきっと破壊的変更の悪をプログラマに 教えんとするSteeleの親心に違いない。そうに違いないのだ。 過去に学ばないプログラマは何度も何度も何度も何度もクローズした はずの変数がいつのまにか書き換わってることに悩んで何時間も デバッグに費すのだ。おかげで昨日も締切前の貴重な時間を無駄にした。くそぅ。

More ...