2月の映画
気まぐれがおきないかぎり、今月はもう映画を見れないと思うのでまとめる。今月は6本。テレビでやっているのはいれていない。
RED/レッド
こちらは劇場で。とっても素晴らしいエンタメでした。爽快。音楽もちゃんとあっていてよかった。なんというか、ベテラン役者が退役軍人として生活しているところをどんどん事件にまきこまれていくんだけど、やっぱりかっこいい。
告白
ずっとグルグル回る感じの映画。日本映画らしいというと日本映画らしいストーリーだったなぁ。
- 出版社/メーカー: 東宝
- 発売日: 2011/01/28
- メディア: Blu-ray
- 購入: 4人 クリック: 29回
- この商品を含むブログ (16件) を見る
BECK
役者だけでみると、カブトと電王と水木さんがフロントをつとめるバンドのお話。もともと原作が好きだったのもあって見てみた。見る前はだいぶ不安だったけど、全然大丈夫。途中ちょこちょこ変に芸人を使っているのは気になったけど、全体でみたらちゃんとしてた。脇役としての斎藤さんにサイトー(カンニング竹山)や、蘭さんに中村獅童という配役はピッタリすぎた。
- 出版社/メーカー: バップ
- 発売日: 2011/02/02
- メディア: Blu-ray
- 購入: 2人 クリック: 23回
- この商品を含むブログ (8件) を見る
カンフーパンダ
なんで、こんな素晴らしい映画を今迄見ていなかったのか、わかんない。素晴らしいの一言。
- 出版社/メーカー: パラマウント ホーム エンタテインメント ジャパン
- 発売日: 2010/09/16
- メディア: Blu-ray
- 購入: 1人 クリック: 4回
- この商品を含むブログ (7件) を見る
ヒーローショー
なんで、見たんだろうなぁ。何もない映画。痛いの見たいだけだったら、青い春 [DVD]見るわー。
- 出版社/メーカー: よしもとアール・アンド・シー
- 発売日: 2010/11/26
- メディア: DVD
- 購入: 3人 クリック: 89回
- この商品を含むブログ (96件) を見る
ゾンビランド
ヒーローショーと一転して、全部入りの映画。素晴らしい。ストーリーも成長も恋愛も家族愛もスリルも。タイトルにゾンビとついているわけだが全然ロードムービー。個人的には本物のゾンビ映画好きには、あまり好かれないんじゃないかなぁと思う。何度も見たい。
- 出版社/メーカー: Happinet(SB)(D)
- 発売日: 2011/02/04
- メディア: Blu-ray
- 購入: 2人 クリック: 16回
- この商品を含むブログ (44件) を見る
Mac で XZ 形式を圧縮・解凍したいときの備忘録
XZ 形式というのは、比較的新しい圧縮形式で、GNU tar 1.22 からサポートされていて gzipより圧縮効率が大きいらしい。
そんな XZ 形式なんだけど、Mac 標準の tar コマンドだと扱うことができない。
% tar Jxvf ./hoge.tar.xz Usage: List: tar -tf <archive-filename> Extract: tar -xf <archive-filename> Create: tar -cf <archive-filename> [filenames...] Help: tar --help
で、Homebrew で以下をインストール。
% brew install xz % brew install gnu-tar
gnu-tar を使うには prefix として 'g' の付いた、gtar コマンドを使用する。
% gtar Jxvf ./hoge.tar.xz
1月に見た映画
諸先輩の方が、プレゼンで映画のスライド使ったり、映画音楽かけたりしていているので、今年は映画を沢山見ようと決心したんだけど、そんなに見れてない。プレゼン時に音楽をかけるとしたら、わたしは短い人生でわたしの中での情景がうかぶ曲しかセレクトできないんだけど、映画音楽だとシーンと音楽を共有できるという点でいいなぁと思った。
ということで、1月は6本のはず。
インセプション Blu-ray & DVDセット (初回限定生産)
- 出版社/メーカー: ワーナー・ホーム・ビデオ
- 発売日: 2010/12/07
- メディア: Blu-ray
- 購入: 14人 クリック: 189回
- この商品を含むブログ (98件) を見る
- 出版社/メーカー: 東宝
- 発売日: 2011/03/18
- メディア: Blu-ray
- 購入: 15人 クリック: 265回
- この商品を含むブログ (134件) を見る
- 出版社/メーカー: 角川映画
- 発売日: 2010/10/20
- メディア: DVD
- クリック: 5回
- この商品を含むブログ (11件) を見る
特攻野郎Aチーム THE MOVIE(初回生産限定) [DVD]
- 出版社/メーカー: 20世紀フォックス・ホーム・エンターテイメント・ジャパン
- 発売日: 2011/02/25
- メディア: DVD
- 購入: 2人 クリック: 10回
- この商品を含むブログ (14件) を見る
- 出版社/メーカー: ワーナー・ホーム・ビデオ
- 発売日: 2010/04/21
- メディア: Blu-ray
- 購入: 8人 クリック: 88回
- この商品を含むブログ (126件) を見る
- 出版社/メーカー: ブエナ ビスタ ホーム エンターテイメント
- 発売日: 2007/09/19
- メディア: DVD
- 購入: 8人 クリック: 71回
- この商品を含むブログ (59件) を見る
Rails3ではrelative_url_rootが無くなっていた
とりあえず、Rails3.0.3ではまったので備忘録。
thinを使って、以下のようにディレクティブを使って一つのドメインで複数のRailsアプリを動かそうとすると、画像等の静的ファイルがみえなくなってしまった。
http://exsample.com/app1 http://exsample.com/app2
原因は、Rails3になって ActionController::Base.relative_url_root が無くなってしまったため。そのため上記のようなことをやろうとする場合、config/environments/XXX.rb 内で config.action_controller.asset_path or config.action_controller.asset_url を設定する必要があるみたい。
今回は、静的ファイルは同一ドメイン内に配置しているのでconfig.action_controller.asset_path を使用した。config.action_controller.asset_path の使用方法は、Stringを渡す方法と proc を渡す方法の2種類。
String を使うときは printf のようになる。
config.action_controller.asset_path = "/app1/%s"
proc を使う場合は、ブロックの評価結果となる。
config.action_controller.asset_path do |path| "/app1#{path}" end
オブジェクトの中身が知りたーい
昨日のRubyスクリプトをdaemonで起動する - tricknotesのぼうけんのしょでした。
で、Ruby逆引きレシピAdvent Calendar : ATNDの5日目です。まず最初に大事なこと。このままだと明後日には、このカレンダーは終了となってしまいます。レシピ先輩にお世話になっている人とか、興味のあるひとは参加するといいとおもうの。
Ruby 逆引きレシピ すぐに美味しいサンプル&テクニック 232 (PROGRAMMER’S RECIPE)
- 作者: 島田浩二,設樂洋爾,村田賢太,前田智樹,谷口文威
- 出版社/メーカー: 翔泳社
- 発売日: 2009/07/25
- メディア: 単行本(ソフトカバー)
- 購入: 16人 クリック: 349回
- この商品を含むブログ (77件) を見る
で、まずこの本の書評を。
この本は、やりたいことをRubyでどうやるの?という形で参照するレシピブックです。Rubyの自体の機能だけでなく、他のライブラリも使用しており、どのようにやるのかがとても参考になります。また、5名の著者によっての共作ですので、いろんな分野のことが幅広くカ バーされているのも特徴です。普通に読んでもおもしろい本ですが、手元に1冊おいておくだけでもとても重宝します。
で、本日はレシピ197「オブジェクトの中身を調べたい」を紹介します。
みなさんはプログラムを書いていてデバッグをするときはruby-debugをお使いになると思うのですが、だいたい問題点が把握できており実行も簡単というときは俗にいうprintfデバッグも便利です。
Rubyでprintfデバッグをするときは、pメソッドが便利です。pメソッドは、Object#inspectの結果を表示してくれます。
class User attr_reader :id, :name def initialize(id, name) @id, @name = id, name end end ruby-1.8.7-head > u = User.new 1, "takkanm" => #<User:0x1006856e0 @name="takkanm", @id=1> ruby-1.8.7-head > u.inspect => "#<User:0x1006856e0 @name=\"takkanm\", @id=1>" ruby-1.8.7-head > p u #<User:0x1006856e0 @name="takkanm", @id=1>
また、ppというライブラリもあります。ppはpretty printの略になります。ppは
require 'pp'
することで使用できます。pとppの違いは以下のようになります。
ruby-1.8.7-head > require 'pp' => true ruby-1.8.7-head > users = [User.new(1, "takkanm"), User.new(2, "takkan_m"), User.new(3, "m")] => [#<User:0x1007499a0 @name="takkanm", @id=1>, #<User:0x100749838 @name="takkan_m", @id=2>, #<User:0x100749680 @name="m", @id=3>] ruby-1.8.7-head > p users [#<User:0x1007499a0 @name="takkanm", @id=1>, #<User:0x100749838 @name="takkan_m", @id=2>, #<User:0x100749680 @name="m", @id=3>] => nil ruby-1.8.7-head > pp users [#<User:0x1007499a0 @id=1, @name="takkanm">, #<User:0x100749838 @id=2, @name="takkan_m">, #<User:0x100749680 @id=3, @name="m">]
ppのほうが、pよりも出力がわかりやすいですね。
さて、ここからはレシピ先輩に書かれていないこと。
みなさんプログラムを書いているとメソッドチェーンの評価中の値がどうなっているか気になるときに、一度その式を切って確認していたりしないでしょうか?そのような便利なライブラリtappをご存知でしょうか?
tappはRuby1.9から採用されたtapを拡張したものです。tapは1.8.7でもバックポートされています。
tappを使うには、gemでインストールする必要があります。
gem install tapp
後は
require 'tapp'
するだけ。簡単!!(といっても、1.8.系の人はrequire 'rubygems'してね)
では使ってみましょう。こんな式があったとします。
users.map(&:id).inject(0) { |i,j| i + j}
このとき、mapする前のusersの状態が知りたいとしましょう。その場合、こんなふうにすると簡単にわかります。
ruby-1.8.7-head > users.tapp.map(&:id).inject(0) { |i,j| i + j} [#<User:0x100328010 @id=1, @name="takkanm">, #<User:0x1003279a8 @id=2, @name="takkan_m">, #<User:0x100327340 @id=3, @name="m">] => 6
ほら、簡単でしょう。tappの便利なところは、tapと同じで途中に差し込むだけでppしてくれ、式の評価に影響を与えないことです。また、tappはみんな大好きなブロックをとることができ、tapと同じことができます。
ruby-1.8.7-head > users.tapp{|us| us.size }.map(&:id).inject(0) { |i,j| i + j} 3 => 6
また同様の動作をするtaputs(tappと違いputsする)もあります。
さて、最後に。レシピ先輩は去年(西暦)のRuby会議で買ったので、もう1年以上も前の本です。ですが、今でもペラペラめくると面白い内容が見つかったりするので、とても満足な1冊です。著者の5名さん、ありがとう。
札幌Ruby会議03に参加してきました。
日記を全然書いていなかったわけなんですが、やっぱり感極まったので書きます。内容については、他の人がきっとすごい記事書くんだから、ブクマでもおっかけてください。私的感想。
Ruby札幌: 札幌Ruby会議に初めて現地で参加をしました。過去二回はUstでの参加していました。
なんというか、わたしにとって札幌Ruby会議というかRuby札幌は、全然遠い地域Rubyist集団なのですが、とても好きな集団です。
去年の札幌Ruby会議02の翌日は、ちょうどRuby Advent Calendar jp: 2009に記事を書く日でした。そのときは、実際は前もって書くことは決めていたのですが、角谷さんの発表でだいたい言ってもらった感じで、どうしようかと思いながら記事を投稿した記憶があります。あのときから、自分はどうRubyにかかわることができるかということがテーマになった記憶があります。
で、あの札幌Ruby会議02の後、1年でRubyにまつわるetcにどのように関われたかを振り替えってみたいと思う。
- RubySpecをやって、簡単なTestのfailだったけど修正しパッチをだした
- 東京Ruby会議03でワークショップをやった
- Rails勉強会の司会をやるようになってきた
- Ruby会議のレポート班としてスタッフをやった
- 札幌Ruby会議でLTをさせていただいた
なんだかんだで何かは関われていたんだよなぁ。しかし、わたしがこういうことをできたといのはコミュニティの力が強い。ほんとうにまわりには感謝している。
よく「Asakusa.rbってなんだか、初心者とか行けなそうなんですかね。」とか言われることがある。わたしの回答は、「そんなこと無いよ、むしろ来い」っていうようにしている。たしかに、面子をみたら普通はびっくりしそうなメンバーの集りは他の地域Rubyist集団には無いのはわかるし、今のわたしの環境が恵まれているっていうのも認める。しかし、数年前のわたしも他の人と一緒だったんだけど(環境も今とは違ったし)、一人でRHGの逆襲とかに参加したりしていた。RHGの逆襲には、諸事情(東京から地元に引っ越し)で、結局2回しか行けなかったが、そのまま居れれば続けていっていたと思う。結局、コミュニティや勉強会
(Asakusa.rbは勉強会ではありません)には、少しの興味と勇気があれば参加できるんだと思う。
そして、現代には発達したインターネットがあるわけで、インターネットがあるおかげでその場に行かなくても人と繋ることができる。わたしの札幌Rubyとの関わり(といってもわたしの一方的なLove)もインターネットが最初だった。レシピ先輩の執筆者のメンバーとも最初はインターネットで知って(ほんとtwitterは偉大)、RubyKaigi2009のサイン会では、何故か名前を覚えていただいていてビックリしたのをすごく印象にのこっている。ちょっと踏みだせば世界は本当に近いと思う。twitterみたいな関わり方以外にも、Rubyには日本語で気軽に参加できるMLなどがあるわけだし。門はほんとそこらじゅうにある。
最後に、しまださんは本当に卑怯だと思う。何故かあの人のせいで、こっちまで感極まってしまう。2009のRubyKaigi後には、あの人のせいで感極まって、るびまの編集者になりたいって手をあげてしまったわけで。今年は感極まって無茶な内容でLTに応募してしまった。
最後に、LTをさせてくれてありがとうございました。きっと、あのメンバーの並びでやるには、わたしには役者不足だし、内容も見合わないもの以外の何ものでもなかったと思うし。
今年の札幌Ruby会議が終わったので、来年一年どうするかを考えなくてはならない。それは、ここ(今新千歳空港)で書くには時間が足りないので、別に書こう。
最後に、Ruby札幌ほんとうにありがとうございました。
Sexy Validationで独自のValidationを
いつのまにか、Rails3+1.9.2というモテコンビで仕事をやっております。で、Rails3から入った新機能として、SexyValidationというのができたので、それを使ってみました。
Sexy Validationとは、いままでのRailsのvalidationの書き方とは違い、Modelに対してのvalidationがスッキリ書けるようになりました。例えば、titleカラムを持つPostというModelがあるときに、title要素は必須なんだというvalidationを書こうとすると、以下のようになります。
class Post < ActiveRecord::Base validates :title, :presence => true end
今迄の
validates_presence_of :name
よりわかりやすいのではないでしょうか。
独自のvalidationをしたくなったらどうすればいいのでしょうか?
その場合、ActiveModel::EachValidatorを継承したクラスを作り、each_validatorメソッドをオーバーライドします。文字列にあらかじめ設定されたwordが含まれていないか確認するvalidationを定義してみましょう。
class NgWordValidator < ActiveModel::EachValidator def validate_each(record, attribute, value) record.errors[attribute] << 'include ng word' if value =~ /NG WORD/ end end
引数valueには、validateメソッドの第一引数のカラムの値が渡ってきます。validationを失敗とするときは、record.errors[]にエラーメッセージをいれます。attributeはvlidationの名前が入ってきます。
validationを利用する側では、以下のように設定できます。
class Post < ActiveRecord::Base validates :title, :presence => true, :ng_word => true end
簡単ですね。実際にどうなるか確認してみましょう。
> post = Post.new => #<Post id: nil, title: nil, created_at: nil, updated_at: nil> > post.valid? => false > post.errors => {:title=>["can't be blank"]} > post.title = "NG WORD TITLE" => "NG WORD TITLE" > post.valid? => false > post.errors => {:title=>["include ng word"]} > post.title = "TITLE" => "TITLE" > post.valid? => true
正しくvalidationできていることがわかります。
今回は、内部でエラーとする文字列を保持していましたが、利用する側から渡したい場合は、trueとしているとこにハッシュを渡します。
class Post < ActiveRecord::Base validates :title, :presence => true, :ng_word => {ng:"NG WORD"} end
validate_each側では、渡されたハッシュはoptionsに入ってわたってきます。
class NgWordValidator < ActiveModel::EachValidator def validate_each(record, attribute, value) record.errors[attribute] << 'include ng word' if value =~ /#{options[:ng]}/ end end
作成したValidatorは全てのActiveModelで使用することができます。例えば、bodyカラムを持つCommentモデルを作成して、以下のようにvalidationを設定すれば、先程のng_word validatorが使用できます。
class Comment < ActiveRecord::Base validates :body, :ng_word => {ng:"XXXX"} end
> comment = Comment.new => #<Comment id: nil, body: nil, created_at: nil, updated_at: nil> > comment.body = "NG WORD" => "NG WORD" > comment.valid? => true > comment.body = "XXXX" => "XXXX" > comment.valid? => false
とても、簡単なのでどんどん利用していきたいです。目下の悩みどころは、このValidatorのクラスをどこに配置するべきかがわかっていないので、有識者の方に教えてもらいたいです。(libにいれたのですが、勝手にrequireされなくて。。)