kayakaya日記
Sep 02, 2010 (Thu)
# 『初めてのJavaScript 第2版』
オライリージャパン
¥ 2,940
僕がJavaScriptを仕事で使っていたのは10年ほど前のこと。その後にAJAXの波が来て、最近ではjQueryなどのライブラリを利用するのが当たり前になってきました。今ではもうJavaScriptを書く機会は稀ですが、当世風のJavaScriptの流儀を知っておきたいと思い読んでみました。tDiaryに jquery.jsが取り込まれたしね。
特に
- クロージャ
- プロトタイプ(prototpye)
が新鮮でした。クロージャかわいいですね。プロトタイプはもっと前に知っておけば良かったと後悔してます。プロトタイプを使えばカスタムオブジェクトを強力にいじったり拡張できるので、ちょっとしたプログラムでも役立ちそう。
そうそう、AJAXのサンプルプログラムはサーバ側でPHPを動かすのですが、手元のMacBookにPHPが動く環境が見当らなかったので(オフラインだったのでレンタルサーバも使えなかったのです)、仕方なくRubyでCGIを書くことに。MacにビルドインされてるWebサーバではPHPは動かないのかしらん? (後できちんと調べてみたい)。
昔のとは言え、過去にJavaScriptで仕事をしていただけに、比較的さくさくと読む進めることができました。もちろん手も動かしながらですが、夕方だけ読んで3、4日程度でしょうか。僕にとってはJavaScriptを全体から俯瞰して復習することができました。
難易度とは関係なしに好感を持てたのが変数や関数名の命名規則について触れていることです。言語によって常識や風習が異なるので、JavaScript界の習わしをきちんと説明しているところはポイント高いです。サーバサイド側でどの言語(例えばJava)を用いているかによってJavaScriptの命名ルールはサーバサイド側に引っ張られるとか。どうしてもJava風になってしまうみたいな。他にも著者は明確にPrototypeライブラリの"$"には賛同しないと書いています。
当世風JavaScriptの雰囲気が掴めたので、次はjQueryを学習してみようかかな。あるいはprototype.jsのコードリーディングかな。もう少しJavaScriptの世界を漂ってみます。
Aug 29, 2010 (Sun)
# 『精霊の守り人』
2007年の「新潮文庫の100冊」で購入したまま、積ん読の山に埋もれてしまった一冊。ときどき手にとっては読もうかどうしようかと思案しても、そのたびに本棚に戻してました。というのも僕は異世界ファンタジーが苦手だったりします(ならば買うなよというツッコミはなしで)。まともに読んだのは『ゲド戦記』くらいなもの。世界観に入り込むとっかかりが少ない、たいてい巻数が多くて読むのに躊躇するなどが異世界ファンタジーから遠ざかっている理由でしょうか。『指輪物語』は一生読まない自信がありますね(えっへん)。『精霊の守り人』も世界観に入り込むことができるのだろうかという不安と共に表紙をめくったのですが、2、3ページ読み進めると杞憂に終わりました。
キャラの設定の細かさ云々よりも、物語全体を貫く体系がしっかりしているからでしょうね。その体系は緻密というよりも、どっしりとした安定感に支えられている感じがします。先住民ヤグーに古くから言い伝えられている神話と征服者である新ヨゴ皇国の神話が食い違っていて、それには支配者の思惑が背後にあることが読み手にも伝わってくるのですが、その食い違いが物語の謎を解く鍵となっていて、ちょっとした謎解きに参加してる気分になれるのも良いポイントでした。
文庫でも続刊が次々と出版されているようですから、続きも手を出してみるとしますか。何となくのんびりとしたペースで残りの巻を読んでみたいですね。
Aug 28, 2010 (Sat)
# 祝tDiary 3.0.0リリース
開催中のtDiary会議@Ruby会議で、tDiary 3.0.0がリリースされました。おめでとうございます!
で、この日記にも早速適用しました。もっとも2.3系のHEADで運用していますから、大きな変更点もアップデートにかかる不具合もありません。節目であり、時を刻むという感覚かな。後日tDiary会議参加者による日記が公開されることを楽しみにしてます。
3.0.0絡みでtestableなtDiaryの開発が進んでいるようです。testableではrackのフレームワークを用いていますが、この日記が動いているレンタルサーバでrackを使うにはちょっと不便(使えないわけではない)。そこで、rackがより使いやすいVPSに移行したいなぁと検討しています。herokuに過去の日記データを読み込ませるのは面倒そうですし。いずれにせよ、まだ先の話ですが。
# Yahoo! BOSS Searchプラグインの暫定パッチ
ruby-1.9.2環境ではYahoo! Search BOSSプラグインがエラーになるに書いてように現在日記を検索できません。暫定処置としてopen-uriではなくNet::HTTPを使うようにプラグインを書き換えて検索できるようにしました。パッチは以下のとおりです。
処理系のバグなのか仕様なのか現時点では不明なため、codereposのプラグインにはコミットしません。不便を感じている人は各自でパッチを適用してください。
Aug 22, 2010 (Sun)
# 『戦場でワルツを』
ワーナー・ホーム・ビデオ
¥ 2,600
イスラエルのアニメーション映画で、監督自らの従軍体験を基にレバノン戦争に従軍した兵士の映像化した作品。『おくりびと』と同じ時にアカデミー賞外国映画作品賞ノミネートされているので、作品のタイトルを耳にした人は多いかもしれません。この映画は映画館で鑑賞するつもりでしたが、結局DVDで観ました。けっこう重い作品なので自宅でDVDの方が精神的に楽だったかもしれません。ただし、アニメーションの映像がコミック調で刺激的。見応えがある絵ですから、そこは映画館で味わった方が良さそうでした。
『戦場でワルツを』はアニメーションの中では異色のドキュメンタリー。主人公の映画監督(監督自身)はレバノン戦争に従軍したものの、当時の記憶が抜け落ちていることから、戦友や知り合い、心理学者にインタビューして当時自分がどこで何をしていたかを探り出す構成。特に親イスラエル派民兵がパレスチナ難民を虐殺した、サブラ・シャティーラの虐殺の記憶は、彼が従軍していたにも関わらず存在しないし、よみがえった虐殺の記憶も当時とかけ離れており、主人公を戸惑わせます。
レバノン戦争への従軍だけならば、よくある(と書くと失礼ですが)戦争映画ものとあまり変わりませんが、サブラ・シャティーラの虐殺を最大の関心事に持ってきていることにこの映画の意味があるでしょう。虐殺に加担したことから来る主人公の精神的ダメージ。そしてホロコーストを経験しつつもベイルートで虐殺を行なったイスラエルという国家への問いかけです。日本に置き換えれば、南京虐殺に参加した兵士が南京攻略をはじめ日中戦争に従軍した記憶一切なく、その原因は戦場体験からのPTSDらしい、戦友や家族との会話で虐殺を思い出してゆく、みたいな感じでしょうか(乱暴なたとえですが)。
『戦場でワルツを』は女子供を含めて虐殺した凄惨な事実をきちんと取り上げていますが、あくまで兵士の視点であり、現地住民の視点はありません。もちろんインタビューもなし。この点でイスラエル寄りだとしていろいろと批判されているようです。まぁ分からなくもありません。しかしながら、本作のキーは"戦場体験から来る記憶の喪失"と"対話による記憶の復活"だと思います。"記憶"に『戦場とワルツを』が実写ドキュメンタリーではなくアニメーションという技法を選んだかという理由も隠されています。実写の映像は誰が目にしても同じものですが、アニメーションは、見た人の目を通した映像をその人の記憶で、つまり曖昧な形で再現できるのです。失われたおぼろげな記憶を伝えるのに適した映像手法がアニメーションだったわけです。
映画のラストで、虐殺事件があった翌日に難民キャンプ入りした従軍記者のフランス人の回想シーンがあります。ガレキに埋もれた、彼の子供とそう年が変わらぬであろう少女の遺体についてその様を語ります。彼が語る内容とアニメーションの絵の内容が若干食い違っているのですが、彼の記憶も曖昧だからでしょう。どちらが正しいのかは定かではありません。そして、映像は実写へと変わります。この映画の中で唯一の実写カットで、虐殺後の難民キャンプの模様を撮影したもの。そこでガレキからわずかに体と顔がのぞいている子供のカットがあります。フランス人記者が語った少女の遺体でしょう。ここで誰もが同じものを見る実写と、個人の記憶であるアニメーションがリンクされて、記憶と現実が繋ったことを映画は示しています。実はまだ衝撃的なラストシーンがあるのですが、そこは映画で見てください。
戦争映画を鑑賞したと言うよりも、野心的なアニメーションを見たという感じです。久しぶりに表現って面白いんだな、と思わせられた作品でした。
外部リンク
Aug 20, 2010 (Fri)
# ruby-1.9.2環境ではYahoo! Search BOSSプラグインがエラーになる
意味もなく先っちょを走るkayakaya日記ですが、ruby-1.9.2もリリース日に導入しています。1.9.2に上げたことによる目立ったエラーはなさそうと安心していましたが、Yahoo! Seach BOSSプラグインでエラーが出ました。さて、
エラースタックの通り、open-uriでYahoo! Search BOSS APIを呼び出しているところでInsecure operationが発生します。
Insecure operation - expand_path (SecurityError) /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/tmpdir.rb:132:in `expand_path' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/tmpdir.rb:132:in `create' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/tempfile.rb:134:in `initialize' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/open-uri.rb:379:in `new' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/open-uri.rb:379:in `<<' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/open-uri.rb:322:in `block (3 levels) in open_http' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/net/protocol.rb:387:in `call_block' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/net/protocol.rb:378:in `<<' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/net/protocol.rb:84:in `read' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/net/http.rb:2437:in `read_chunked' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/net/http.rb:2411:in `read_body_0' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/net/http.rb:2371:in `read_body' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/open-uri.rb:321:in `block (2 levels) in open_http' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/net/http.rb:1186:in `block in transport_request' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/net/http.rb:2334:in `reading_body' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/net/http.rb:1185:in `transport_request' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/net/http.rb:1169:in `request' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/open-uri.rb:312:in `block in open_http' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/net/http.rb:627:in `start' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/open-uri.rb:306:in `open_http' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/open-uri.rb:769:in `buffer_open' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/open-uri.rb:203:in `block in open_loop' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/open-uri.rb:201:in `catch' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/open-uri.rb:201:in `open_loop' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/open-uri.rb:146:in `open_uri' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/open-uri.rb:671:in `open' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/open-uri.rb:33:in `open' (plugin/search-yahoo.rb):41:in `block in search_boss_api' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/timeout.rb:57:in `timeout' /home/kayakayaichthys/local/ruby192/lib/ruby/1.9.1/timeout.rb:87:in `timeout' (plugin/search-yahoo.rb):40:in `search_boss_api' (plugin/search-yahoo.rb):57:in `search_result' (TDiary::Plugin#eval_src):19:in `block in eval_src'
irbで調べてみると、$SAFE=1の時にopenの戻りがStringIOではなくTempfileの場合にInsecure Operationが出ます。bodyのサイズが小さければStringIO、大きいサイズはTempFileが戻るようです。
$ irb -ropen-uri
ruby-1.9.2-p0 > open uri = 'http://www.tdiary.org'
=> #<File:/var/folders/l9/l9qMHjEzH8qj049CSwBD3++++TI/-Tmp-/open-uri20100820-9588-7pwv87>
ruby-1.9.2-p0 > open uri = 'http://www.tdiary.net'
=> #<StringIO:0x00000101ae10a8>
ruby-1.9.2-p0 > $SAFE=1
=> 1
ruby-1.9.2-p0 > open uri = 'http://www.tdiary.net'
=> #<StringIO:0x00000101abf200>
ruby-1.9.2-p0 > open uri = 'http://www.tdiary.org'
SecurityError: Insecure operation - expand_path
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/tmpdir.rb:132:in `expand_path'
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/tmpdir.rb:132:in `create'
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/tempfile.rb:134:in `initialize'
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/open-uri.rb:379:in `new'
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/open-uri.rb:379:in `<<'
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/open-uri.rb:322:in `block (3 levels) in open_http'
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/protocol.rb:387:in `call_block'
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/protocol.rb:378:in `<<'
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/protocol.rb:84:in `read'
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/http.rb:2416:in `read_body_0'
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/http.rb:2371:in `read_body'
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/open-uri.rb:321:in `block (2 levels) in open_http'
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/http.rb:1186:in `block in transport_request'
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/http.rb:2334:in `reading_body'
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/http.rb:1185:in `transport_request'
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/http.rb:1169:in `request'
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/open-uri.rb:312:in `block in open_http'
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/http.rb:627:in `start'
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/open-uri.rb:306:in `open_http'
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/open-uri.rb:769:in `buffer_open'
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/open-uri.rb:203:in `block in open_loop'
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/open-uri.rb:201:in `catch'
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/open-uri.rb:201:in `open_loop'
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/open-uri.rb:146:in `open_uri'
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/open-uri.rb:671:in `open'
from /Users/kayakaya/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/open-uri.rb:33:in `open'
確かにhttp://kayakaya.net/d/?q=メガネのように結果があるクエリーはエラーになり、http://kayakaya.net/d/?q=megane のように結果がヒットしないクエリーではエラーが出ません。bodyサイズが大きければTempfileが返るので関係ありそうです。
この件で色々とググりましたが、tDiary界隈は$SAFE周りで難儀していることがよくわかりました。また、ruby-1.9.2のリリースノートの類を見る限り仕様ではなくバグに思えるのですが確信が持てません。またプラグイン側のソースコードをいじって解決できるとも思えず様子をみることにします。セキュリティ周りの挙動は全く把握していないので手が出ないんですよねぇ。
年間聖句(2010年)
あながたは皆、信仰により、キリスト・イエスに結ばれて神の子なのです。洗礼を受けてキリストに結ばれたあなたがたは皆、キリストを着ているからです。
新共同訳聖書ガラテヤの信徒への手紙3章26節You are all sons of God through faith in Christ Jesus. for all or you who were baptized into Christ have clothed youselves with Christ.
Galatians 3:26-27 (New International Version)

_ ただただし [あれはtempdirのバグだと確信していますが、どっちにしろ1.9.3が出るのはずーっと先の話なので、そのパッチはあ..]
_ kayakaya [パッチ当ててコミットしました。1.9.3までそのまんまなのですねぇ。そっちに驚きました。]