✖
撮りたい写真とは別に、写真撮るときの、被写体を感じてから、見て、カメラを構えて、ピントをあわせて、呼吸をおいてシャッターを押すときの感覚は割と好きで、これは、腹の底に溜ってるぐでぐでしたものを、うまく外に出せるスキームとしては自分の中で唯一確立しているもので、そのために、そういったものが溜っているなあと感じると、シャッター押す回数自体が増えます。
関連エントリー
- ✖ 写真を撮るときの心構えが乱れてるので撮るときにルールを課したい。
- ストロボを購入 Canon スピードライト 430EX II cho45 キヤノン ★ 3.0 / 5.0 cho45 長らく必要性を感じていなかったので興...
- ✖ Google Picker で Google Photo の画像をとってこようとすると、どのビューにおいても新しい写真から順に表示され、古い...
- ✖ 先日は写真撮るときに、不穏な感じにならないようにレンズ選んだり撮りかた変えたり現像パラメータを変えたりしたけど、普段全くそういうの撮らないの...
- 電子先幕シャッターとは何か。欠点はどこか αシリーズ(?)は電子先幕シャッターがデフォルトだが、デメリットがわかりにくいので調べた。 電子先幕シャッター自体の説明はググったほうがわか...
✖
✖
✖
ミラーレス一眼悪くないと思うし、一眼レフをある程度置き換えるだろうけど、サイズや重さをのぞけば一眼レフはミラーレス一眼の上位互換なので、アナログからデジタルへの移行みたいに完全置換にはならないだろうなあと思った。
Test::HTML::Differences
CPAN にあげました。前回書いたときのは、衝動的に書いて結構挙動が微妙だったので、ちょっとなおしました。
というのも、構造的にだいたい一緒の部分が diff として出てきても鬱陶しいだけなので、比較時にはインデントをせず比較して、表示するときにはインデントして構造がわかりやすくなるようにしました。つまり以下のようになります。
# Failed test at t/03_output.t line 47. # +----+-----------------------+----+-------------------------+ # | Elt|Got | Elt|Expected | # +----+-----------------------+----+-------------------------+ # | | * 0|<foo> * # | 0|<div class="section"> | 1| <div class="section"> | # | 1| foo | 2| foo | # | 2| <a href="/">foo</a> | 3| <a href="/">foo</a> | # | 3|</div> | 4| </div> | # | | * 5|</foo> * # +----+-----------------------+----+-------------------------+
インデント量が違う部分も、変化無しとして検出されます。
あるいは
# Failed test at t/03_output.t line 47. # +----+-------------------------+----+-------------------------+ # | Elt|Got | Elt|Expected | # +----+-------------------------+----+-------------------------+ # | 0|<div class="section"> | 0|<div class="section"> | # | 1| <div class="section"> | 1| <div class="section"> | # | 2| <p>foo</p> | 2| <p>foo</p> | # | 3| </div> | 3| </div> | # | | * 4|</div> * # | 4| <div class="section"> | 5|<div class="section"> | # | 5| <p>foo</p> | 6| <p>foo</p> | # * 6| </div> * | | # | 7|</div> | 7|</div> | # +----+-------------------------+----+-------------------------+
とかになります。
また、冒頭のスクリーンショットのように、いろつきに対応しました。これは単に use するときに -color をつけると Test::Differences::Color を使うようになるだけです。
なお、Test::HTML::Differences は HTML の構造をテストするもので、そのテストの書きやすさのために、要素内の始め・終わりの空白類を無視するようになっています。XML 的等価性を検証するテストではなく、あくまでデータの構造テスト用です。つまり、空白を含めた厳密なテストは例えば is とか別の手段でもっと最小限のテストを書くべきです。
✖
gerry++
IE で postMessage 的実装をちゃんとやる
postMessage、便利でいいですね。ドメインを跨いでうまく連携してスクリプトを書けたときの楽しさはパズル的でこのうえない感じであります。しかしながら postMessage は古い IE で動かないので、代替実装が必要です。ググるといっぱい出てきはするのですが、自分の要求にかなったものがなかったのでひとまず書きました。
$ cat /etc/hosts
127.0.0.1 anotherhost
$ git clone git://gist.github.com/701752.git gist-701752
$ cd gist-701752
$ plackup -MPlack::App::Directory -e 'Plack::App::Directory->new({root=>"."})->to_app' -p 5000とかやっておいて、http://localhost:5000/test.html にアクセスするとなんか出るので、ボタンをクリックしたりするとどうにかなります。フレームの中と外で別ドメインです。
要件
実装するにあたって必要だったのは、まさに postMessage だったので、以下のようなことが求められました。
- メッセージのとりこぼしがない
- IE で動く
逆に、古いブラウザで動けばいいので速度はそれほど求められていません。
実装
とりあえず動いてほしいので、古くから伝わり慣れている location.hash によるドメイン間通信を用いることにしました。location.hash による通信を要約すると以下の通りです。
- データを送信したいフレームの location.hash を書きかえる
- 書きかえるだけならドメイン関係なくできます
- 読みだし側は location.hash を監視して変化を検知したら処理する
ただ、これには以下のような問題があります。
- IE の URL 長制限。
- 2038 バイト制限が存在します。
- location.hash を監視する以上の速度でデータを送信することができない
- 監視に使用するのは setTimeout/setInterval なので、監視間隔は厳密には不定です。
なので、2038バイト制限を超えるデータを送信するためにはデータのパケット化が必要なのと、データの紛失を防ぐために何らかの方法が必要ですが、要はパケロスする環境で信頼できるデータ通信を行いたいということなので TCP のやりかたをパクって実装してあります (シーケンス番号 + ACK)。
備考
window.name を使う方法であればデータ長制限がなくなるのでパフォーマンスは向上しそうですが、実装は複雑そうです。また、空のリソースを両方のドメインに求めるので、失敗確立があがります。
ちゃんとした postMessage 互換実装があったら教えてください……








