YAMAHAさんのWeb Music Platform。
bower使ってmodule化されつつあり、自分のモジュールを追加した魔改造もしやすくなってきてます。とりあえず自分の方でもtssやtmalibなんかをPolymer化、bowerで突っ込めるようにして、2つばかりVisualizerとして追加、さらにHerokuにdeployできるようにした魔改造版を作ってみました。
実際にdeployしたデモはこちら。
そう言えばHeroku、ここ2ヶ月くらいで変な最適化が入ったのか、謎な挙動をしますよね。例えばpostinstallのスクリプト中にgit cloneしたリポジトリから特定のrevisionをcheckoutしようとすると、そこはrepositoryじゃないよ、的な事を言われてcheckoutできない。Google Codeからだとbranch作ってbranch直指定でcloneする以外に解決方法見つからなかった。GitHubの場合はtagを切ってないモジュールをbowerでinstallしようとしても、同じように怒られる。さらにbowerが途中でエラーするとbuild directoryから最終的なdeploy先にbower_componentsの中身がコピーされない? こっち系はあまり詳しくないので、詳しい人がいたら対処法というか裏で何が起きてるのか教えてもらえると嬉しいです。というか、今日ささださんとお昼食べるから聞いてみれば良いのか。
それはそうとscript tag injectionとかXHR、そのままだと並列読み込みとか扱いが面倒なので、Promise化してPromise.allで一気に待つようにしてみたら結構お手軽に高速化できた。もうPromiseなしでは生きていけない。
2014年10月22日水曜日
2014年9月1日月曜日
ニコファーレ続き
この週末はコントローラ周り、サウンドからのFFT入力、シーケンスをプログラムするためのライブラリとか用意してた。だいぶTODO潰したけど、まだスケジュールきつい。
昔2D向けに作ったWaypointsを3Dに拡張。ポイントスプライトとして頂点計算しつつ、フラグメントシェーダで火球っぽく描く方法を試してみた。点を打つだけなら10万パーティクルくらいいけそうだったんだけど、ポイントサイズが大きくなってくると1万くらいで厳しくなる。空間が広いので1万パーティクルくらいだと結構スパース。
こっちは前に作ったキューブが飛んでくる奴。ワイヤーフレームで表示するモード作って、エフェクトでぼかしてみたら結構かわいくなった。
あと、関係ないけどherokuにデモdeployする時、postinstallの中でライブラリをクローンして特定のリビジョンをチェックアウトという処理をしてたんだけど、チェックアウトの段階で.gitが空とかいうエラーに遭遇。前は動いてたんだけどなぁ。とりあえずbranch作ってgit clone -bで逃げてるけど、なんか不便だ。
昔2D向けに作ったWaypointsを3Dに拡張。ポイントスプライトとして頂点計算しつつ、フラグメントシェーダで火球っぽく描く方法を試してみた。点を打つだけなら10万パーティクルくらいいけそうだったんだけど、ポイントサイズが大きくなってくると1万くらいで厳しくなる。空間が広いので1万パーティクルくらいだと結構スパース。
こっちは前に作ったキューブが飛んでくる奴。ワイヤーフレームで表示するモード作って、エフェクトでぼかしてみたら結構かわいくなった。
あと、関係ないけどherokuにデモdeployする時、postinstallの中でライブラリをクローンして特定のリビジョンをチェックアウトという処理をしてたんだけど、チェックアウトの段階で.gitが空とかいうエラーに遭遇。前は動いてたんだけどなぁ。とりあえずbranch作ってgit clone -b
ラベル:
Heroku,
HTML5,
JavaScript,
WebGL,
メディア・アート
2014年1月24日金曜日
昔のサイトをHerokuに詰め込んだ
仲間内の共有サーバに詰め込んでた昔のサイト。マシン乗り換えの話が出たので「えいやっ」とクラウドに載せ替えた。古いサイトなので、基本はほとんど静的なページばかり。リンク先やら取り込んでるコンテンツやらが死亡しまくりなので、動的コンテンツも真面目にサルベージするほどでもない。
ってことで、とりあえずSinatra/Ruby/Herokuの組み合わせで対応してみた。ドメイン的には10サイトほどあるけど、まぁ1Dynoでさばけるでしょう、と。(むしろ、まとめてた方がインスタンスが寝なくて好都合?)
とりあえず静的なコンテンツはSinatraに丸投げしたかったんだけど、VirtualHost対応はApacheやnginxで行い、その下でSinatraが動かすのが一般的だったのかな? Sinatra単体でスマートな方法はなさそうだったんだけど、ここはSinatra単体で行きたかったので小細工で対応しました。動作はRuby 2.0.0 + Sinatra 1.4.4で確認。
require 'sinatra'
set :add_charset, []
before '*/' do
request.path_info = request.path_info + 'index.html'
end
before do
request.path_info = '/' + request.host + request.path_info
static! if (request.get? || request.head?)
end
本当はbeforeフィルタでpath_infoを書き換えれば後はよしなに・・・というのを期待したんですが、ファイル存在判定はbeforeフィルタより手前でやってるんですね。なので、path_infoを書き換えた後に、もう一度static!を呼んでファイル再判定させてます。ちょっとしかコード追ってないんですが、ファイルチェックを一番最初にやってbeforeフィルタは常に回して、afterフィルタはファイルの時には回さない、という挙動っぽいけど、何か意味あるのかな?Sinatra詳しいってわけではまったくないので、詳しい人、あるいはもっと良い方法あるよ、という場合は教えて頂けると幸いです。
あと、add_charsetは明示的に空にしてます。これやらないとtext系のContent-Typeにcharset=utf-8を自動的に付けちゃって古いShift_JISのコンテンツに悪影響与えるので。HTTPヘッダのContent-TypeについてるcharsetとHTML側のcharsetのメタ情報が一致しない、Content-Languageとhtmlのlang情報が一致しない・・・ってのはChromeでも良くハマる問題で。文字化けや、間違った翻訳サジェストの原因になってます。頑張って間違い推定するようにしたんだけど、完全にはできないのでサーバ側で気をつけたいところです。
あと、http://toyoshima-house.net/ にあったコンテンツは有用な物だけ当ブログにマージして、元ドメインには転送をしかけました。Google+には更新情報として古いコンテンツも飛んでたみたいですが、コンテンツ自体は古い日付でエントリされてます。加えて、このブログにも独自ドメインを振りました。
登録:
投稿 (Atom)



