開発時のコードリロード
Sinatraの最新版からDevelopment時のコードリロードがなくなったようです。
リリースノートによると
http://rtomayko.github.com/shotgun/
これ使えと。
gem install shotgun
shotgun hello.rb
あとRackの1.0でも動くようなったようで。嬉
SinatraのSessionには注意
SinatraでSessionはこんな風に使えます
enable :sessions get '/foo' do session[:message] = 'Hello World!' redirect '/bar' end get '/bar' do session[:message] end
SinatraではRackのCookieSessionをつかってるのですが、secretキーを指定していないため、MarshalしてBase64するだけのデータをクッキーに乗せてきます。
このままじゃ書き換えられて大変な事になるので、デフォルトのsessionは有効にせずに、RackのSessionをsecretキーを指定して使うべきではないだろうか。secretキーを指定した場合は、データとdigestをクッキーに乗せてくるので書き換えが検出できます。
use Rack::Session::Cookie, #:key => 'rack.session', #:domain => 'foo.com', #:path => '/', :expire_after => 3600, :secret => 'change' get '/foo' do session[:message] = 'Hello World!' redirect '/bar' end get '/bar' do session[:message] # => 'Hello World!' end
Sinatraの使い方はココに書きました
http://labs.unoh.net/2009/05/sinatra.html
Canvas使ってLanczos試した
「画像をモノクロに変換するブックマークレット」をgetImageDataで再発明 - JavaScriptで遊ぶよ - g:javascript
ここみたらcanvasが面白そうだったので、
以前やったLanczos縮小を試してみた。
とりあえずCanvas#getImageDataはFirefoxとOperaでしか動きません。
あと同じドメイン内の画像しか扱えません。
こちらで実際に試せます。
http://file.giox.org/lanczosJS/
ベンチマークにでも使うといいんじゃ。
しかし、意外に速くてビックリした。
JSすごい
Lanczos拡縮アルゴリズムの実装
原理
画像の拡大縮小アルゴリズムはいくつか存在します
・ニアレストネイバー
・バイリニア
・バイキュービック
・Lanczos-2
・Lanczos-3
この中で理論上最も美しいとされているのはLanczos-3であり、漢はだまってこの方法を選ぶべきなのですが、いくつかの実装では正確な計算がされておらず、もったいない事になっています。
なので今回はできるだけ正確な高品質な画像を目指して実装してみました。
rubyで。
原理的なものはコチラが詳しいです。こんなブログを見るよりお勧め
http://gwaihir.hp.infoseek.co.jp/wiki.shtml?Lanczos%E9%96%A2%E6%95%B0%E3%81%AB%E3%82%88%E3%82%8B%E7%94%BB%E5%83%8F%E3%81%AE%E6%8B%A1%E5%A4%A7%E7%B8%AE%E5%B0%8F
前提
画像のピクセルデータを取得しないといけないのだが、画像のデコードは別の話なので、また今度にします。
今回は無圧縮のPPM形式を使用。
そしてPPM画像を得るためにImageMagickを使った。
convert test.jpg test.ppm
実装
まずはPPMを読み書きする簡単なクラスがコチラ
image.rb
そして拡大縮小するコードがコチラ
lanczos.rb
※このコードは手続きをダラダラ書いただけな上に、とてつもなく遅いので実用性は皆無です。
最後に
遅すぎ。rubyでやるもんじゃない。