2011年5月6日金曜日

VJやるよ(3) やったこと報告 - コロラマ

4/30にAPMT NIGHTというイベントでlisglitch名義でVJやりました。
この日のための新ネタとして作ったエフェクトのうち1つを解説&公開します。

もともと、作りやすくて使い勝手の良いエフェクトってどんなの?と細金君に聞いてみたところ「コロラマというエフェクトがAfter Effectsにあるので、それをVDMXで動かしたい」と返事がきたので、Quartz Composerで作ってみました。

(合ってるかどうか分からないですが)コロラマがどんな感じのものか、実際に動かすとどうなるかは以下の動画をどうぞ。




ダウンロードはこちらから。VDMXで動かせるImage Filterと、QCで動作を確認しやすいサンプルが入っています。



仕組みはいたってシンプルで、入力画像の各ピクセルを、その明るさに応じて指定した配列中の色で置き換えるColor Mapを使い、色の配列のスケールと色のセットをいじりやすく加工しているだけのものです。

このエフェクトにデフォルトで埋め込まれている画像。


このうち、パラメータに応じたY座標の1ラインが切り出され、Affine Tileで並べられてColor Mapに渡されます。上下方向にグラデがかかっているのは、このパラメータをいじったときにスムーズにつながらせるため。
もちろん、画像を入れ替えて独自のパレットにすることもできます。

というわけで、やってることとしては超単純なんですが、画面全体の表情に影響を及ぼせるので、かなり効果的に使えると好評です。

他のエフェクトと素材に関してはまた次回。

2011年5月4日水曜日

久しぶりにTwitter API触ったらIDが64bitになっていた

ちょっと遅いネタ。

Twitter検索結果を表示するJavaScriptをメンテしてたのですが、少し前からIDが巨大な数値になっていたようで。

TwitterのIDが64bitになるとJavaScript等で問題が出るので対策を

この記事によると、JavaScriptでそのまま扱うと精度を保てない(※) 53bitのIDは11/26から出現していたそうです。
(※JavaScriptで使われるIEEE754の倍精度浮動小数点数は仮数部が52bitのため)

そうなるとどうなるかというと、例えば僕の以下のツイート

@psyark 食後にMacBookを膝の上に置いて作業すると、タッチパッドが誤作動しますよね。誤作動っていうか膨れたお腹がタッチパッド押してるだけなんですけどそうなりますよね。ならない?おかしいなあ。

のidは 64596791194169344 なのですが、これをそのままConsoleに打ち込むと

誤差が出る・・・。

と僕の場合どうなったかというと、検索リクエストをかけて、次の検索リクエストにその続きをまかせてたのですが、max_idの指定が少しずれてしまい、まれに複数の検索リクエストで結果が重複していました。

Twitter側も、 idと同じ内容を id_strという文字列でくれるようになったのですが、僕がやりたいのは「前回の検索結果の一番若いidを -1 して次回のmax_idにする」ということなので、これを減算しないといけない。

こういう場合の定石として BigIntでぐぐると、やっぱりbigint.jsなるものがあり、弾さんが9月に改良をいれたりしてる。タイムリー。

が、良く考えたら-1するだけなのだから、文字列処理で十分できるんじゃね、と思い。こんなんなった。

function decrement_str(strnum) {
 return strnum.replace(/([1-9])(0*)$/, function (match, a, b, index, all) {
  return (a - 1) + b.replace(/0/g, '9');
 }).replace(/^0(\d)/, '$1');
}

数値文字列の末尾の0を全部9に置換して、先行する[1-9]一文字だけ算術で-1。

0並びと同じ文字数の9並びとか、もっと軽く作れそうだけど横着。

もっと良い方法あったら教えてください。