Rubyでフォトアルバムを作ってみた。 [プログラミング]
そろそろ、新しいMacBookのために資金を貯め始めようかなぁ。Snow Leopardに変わる時は、まだアルミ削り出しのままだろうし、もう少しハードディスクが大きいのが欲しい。いくら何でも80GBってのは今時どうよ。何もできないわけじゃないけど、HDDの容量を気にしながら開発するのは気分的にあまりよろしくない。
http://www.gizmodo.jp/2009/03/macbookdiy_1.html
こういうのは欲しいな、なかなかに。
Rubyが全然やれてないから、初歩的に何とかなりそうなスクリプトを組んでみようと思う。
完成図。
この件で本質的なコーディングって最後の方の数行ですね。たった数行でこれらができるんだから、Rubyはやっぱり楽だ。って他の言語だってこのくらいなら大した違いもないと思うけど。というか、HTMLの表現フォーマットとしての素養の良さが、楽をできる要因を作っているような気がします。
初心者様に一応説明。
files = Dir.entries(picpath).find_all{|x| x =~ /(?:.*jpg)|(?:.*png)|(?:.*gif)/i}
ここが一番分かりにくいですよね。指定したフォルダの中の画像ファイルを、filesっていう配列に押し込めてるだけですね。
Dir.entries()で、ファイルが選ばれて出てきます。出てくるのが配列なので、find_allで選んでjpegとpngとgifを拡張子で選んでいます。ちょっと特殊っぽいけど、{}内がtrueならばそのままファイル名を返すみたい。当てはまるかどうかは、正規表現でやってます。//の中はなるべく読みやすい書き方にした方が、Rubyとしての可読性が高まると思います。
細かく分けて書くと
あんま分けて書いても、分かりやすくなんなかった。(T-T)
最近のRubyだと正規表現に正規表現を埋め込み可能になったそうなので、それをやってみた。余計見にくくなったような気もする。
細かいところを突っ込むと、このままだとhogehogejpgとかいうディレクトリがあっても、ファイルと分けてないとか、拡張子がなくても拡張子名で該当してしまうとか、画像じゃないファイルがあってもスルーしてるとか、面倒な事を一切やっていないので、ダメダメですね。でも、本質的なところだけを読めるので、それはそれで悪い事もない。元々、そういうの納得ずくでやっているので、運用的に逃げればいいわけで。仕事じゃそうも言っていられないんだけど、お気楽にプログラミングするのも大切な事かなと最近ちょっと思います。人のエラーを予測してガチガチにプログラムするわけじゃないのでね。
ちょっと気付いたとこ。Rubyを実行したカレントディレクトリやサブディレクトリには、表示するファイルが置けないところ。これはCGIみたいに実行するものではほとんどマストな条件になる。表示するファイルが見える事より、表示させるファイルのソースやらが見えてしまう事の方が問題ある。今更だけど、これはWebアプリ全般に通じるところ。まぁGPLとか他人にソースを晒す状態なら大使的にならないんだろうけど、お金貰って書いて外に出しちゃ行けない場合の方が仕事では多いだろう。
さらに、実行スクリプトから直接見えるディレクトリじゃないと使えない事が気になった。例えば、他の場所にあるファイル群が別サーバにあるとする。そうした場合は、別サーバ内の状況を知る事ができないので、NFSでマウントでもしない限りは今の方法では見られない。と、考え過ぎか…。なんにしても、実行ファイルから遠いと面倒である。使うのがフルパスで書いちゃうのもどうかと思うしなぁ。それはそれで、割り切り方としては悪くないとは思うけど、他のマシンにもってくとか(デプロイっていうのかな)するのを考えると、相対パスで近めの距離のパスを指定してあげた方がいいんでしょうね。どっちにしても、C言語のマクロみたいに指定してあげましょう。
次はサムネイルを作ってみる。今時の回線は太いからやらなくてもいいかもだけど。
# Beastie Boysを聞いていたら、なんとなくジャパネットたかたの社長にラップをやって欲しくなった。
http://www.gizmodo.jp/2009/03/macbookdiy_1.html
こういうのは欲しいな、なかなかに。
Rubyが全然やれてないから、初歩的に何とかなりそうなスクリプトを組んでみようと思う。
完成図。
#!/usr/bin/ruby # 簡易アルバム ver. 0.1 require 'cgi' # サムネイル作り def makeThumbnail end # アルバムページ作り makeThumbnail cgi = CGI.new print cgi.header("text/html") print <<EOS; <html><head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title></title></head><body> EOS # 初めは縮小せずにアルバムに張り付け。 picpath = "..\/files\/" files = Dir.entries(picpath).find_all{|x| x =~ /(?:.*jpg)|(?:.*png)|(?:.*gif)/i} files.each do |x| file = picpath + x # puts file puts "<a href='%s'> <img src='%s' width ='100'> </a>" % [file, file] end print "</body></html>"
この件で本質的なコーディングって最後の方の数行ですね。たった数行でこれらができるんだから、Rubyはやっぱり楽だ。って他の言語だってこのくらいなら大した違いもないと思うけど。というか、HTMLの表現フォーマットとしての素養の良さが、楽をできる要因を作っているような気がします。
初心者様に一応説明。
files = Dir.entries(picpath).find_all{|x| x =~ /(?:.*jpg)|(?:.*png)|(?:.*gif)/i}
ここが一番分かりにくいですよね。指定したフォルダの中の画像ファイルを、filesっていう配列に押し込めてるだけですね。
Dir.entries()で、ファイルが選ばれて出てきます。出てくるのが配列なので、find_allで選んでjpegとpngとgifを拡張子で選んでいます。ちょっと特殊っぽいけど、{}内がtrueならばそのままファイル名を返すみたい。当てはまるかどうかは、正規表現でやってます。//の中はなるべく読みやすい書き方にした方が、Rubyとしての可読性が高まると思います。
細かく分けて書くと
jpeg_reg = /.*jpg/ png_reg = /.*png/ gif_reg = /.*gif/ all_element = Dir.entries(picpath) files = all_element.find_all{{|x| x =~ /jpeg_reg|png_reg|png_reg/i}
あんま分けて書いても、分かりやすくなんなかった。(T-T)
最近のRubyだと正規表現に正規表現を埋め込み可能になったそうなので、それをやってみた。余計見にくくなったような気もする。
細かいところを突っ込むと、このままだとhogehogejpgとかいうディレクトリがあっても、ファイルと分けてないとか、拡張子がなくても拡張子名で該当してしまうとか、画像じゃないファイルがあってもスルーしてるとか、面倒な事を一切やっていないので、ダメダメですね。でも、本質的なところだけを読めるので、それはそれで悪い事もない。元々、そういうの納得ずくでやっているので、運用的に逃げればいいわけで。仕事じゃそうも言っていられないんだけど、お気楽にプログラミングするのも大切な事かなと最近ちょっと思います。人のエラーを予測してガチガチにプログラムするわけじゃないのでね。
ちょっと気付いたとこ。Rubyを実行したカレントディレクトリやサブディレクトリには、表示するファイルが置けないところ。これはCGIみたいに実行するものではほとんどマストな条件になる。表示するファイルが見える事より、表示させるファイルのソースやらが見えてしまう事の方が問題ある。今更だけど、これはWebアプリ全般に通じるところ。まぁGPLとか他人にソースを晒す状態なら大使的にならないんだろうけど、お金貰って書いて外に出しちゃ行けない場合の方が仕事では多いだろう。
さらに、実行スクリプトから直接見えるディレクトリじゃないと使えない事が気になった。例えば、他の場所にあるファイル群が別サーバにあるとする。そうした場合は、別サーバ内の状況を知る事ができないので、NFSでマウントでもしない限りは今の方法では見られない。と、考え過ぎか…。なんにしても、実行ファイルから遠いと面倒である。使うのがフルパスで書いちゃうのもどうかと思うしなぁ。それはそれで、割り切り方としては悪くないとは思うけど、他のマシンにもってくとか(デプロイっていうのかな)するのを考えると、相対パスで近めの距離のパスを指定してあげた方がいいんでしょうね。どっちにしても、C言語のマクロみたいに指定してあげましょう。
次はサムネイルを作ってみる。今時の回線は太いからやらなくてもいいかもだけど。
# Beastie Boysを聞いていたら、なんとなくジャパネットたかたの社長にラップをやって欲しくなった。
タグ:Ruby
コメント 0