アーカイブ

2008 年 8 月 のアーカイブ

「Railsレシピブック」出張版に行ってきました。 このエントリーを含むはてなブックマーク はてなブックマーク - 「Railsレシピブック」出張版に行ってきました。

2008 年 8 月 29 日 Comments off

資料はmoroさんとursmさんのところに、

Rails Summer Festival 2008で話しました – moroの日記

以前いっていた通り、id:ursmといっしょにウェブキャリアさんのRails Summer Festival 2008で話してきました。

Ruby on Rails Summer Festival 2008 で話しました – ursmの日記

今回は3本立てで、id:moro が Capistrano と named_scope の話、私が Haml の話をさせていただきました。

動画が角谷さんのところに、


Rails Summer Festival 2008 の講演動画を公開しました – 角谷HTML化計画 (2008-08-28)

id:moroとid:ursmがしゃべったウェブキャリアさんのセミナーを撮影したのをニコニコ動画で公開しました。

すでにアップされています。仕事がね、はっやい。

いまはふつうに仕事しているとほぼ単独行動な感じになってしまうので、やはり現場での話が聞けるのはうれしい。
CapistranoでSubversionのパスワードを取るところ、Rubyを普段使い(Rails以外という意味で)してないと$stdin.getsは思いつかない気がするなー。

カテゴリー: Rails タグ:

GistべんりだよGist。 このエントリーを含むはてなブックマーク はてなブックマーク - GistべんりだよGist。

2008 年 8 月 29 日 Comments off

今日行ってきたウェブキャリアさんのセミナー角谷さんに、「ソースはGistに張ったらいいんじゃない?」とコメントをいただいたので、このまえのAutotest::Screen
をさっそく張ってみました。
使ったことなかったけれど、これはべんり。これからはまるごとソースはこっちに張っていこうと思います。

あとは、自分がまだgitを使いこなせてないことが問題だ。(えぇー

カテゴリー: プログラミング一般 タグ:

Abstractクラス。 このエントリーを含むはてなブックマーク はてなブックマーク - Abstractクラス。

2008 年 8 月 15 日 コメント 5 件
class Curry < ActiveRecord::Base; end
class SeafoodCurry < Curry; end
class VegetableCurry < Curry; end

という関係のクラスがあって、CurryをAbstractクラスのようにしたかったので

validates_presence_of :type

を付けたのだけれど、これって普通のことなのかどうか気になる。
あと、出来心でtypeを存在しないクラス名に変えたら

ActiveRecord::SubclassNotFound: The single-table inheritance mechanism failed to locate the subclass

とおこられてARから触れなくなってしまった。ご注意。(って、普通はやらんか。)

カテゴリー: Rails タグ:

初めてのRuby。 このエントリーを含むはてなブックマーク はてなブックマーク - 初めてのRuby。

2008 年 8 月 14 日 Comments off
初めてのRuby 初めてのRuby
オライリージャパン(2008-06-26)
オライリージャパン
新品価格:¥ 2,310
中古価格:¥ 2,981
ASIN:4873113679

すこし時間が経っているけれど、読み返しつつ。
薄いのだけれど、中身は詰まってる。なんというか「抜けのない」本だなという印象。
まず、章ごとにまとめがあるのに加えて、そこで扱っていないことが書いてある。これで「では○○はどうなんだろう?」という疑問に対して補完がされている。
また、ところどころで著者が「自分はこうしている」ということが書かれている。たとえばP37にある「doと{」の使い分けだとか、P115の「ifとunless」やP119の「timesとupto」など。
これが「○○と△△があるのは分かって、同じ結果になるのも分かったのだけれど、自分はどうしよう?」という疑問に対して、結果として選択を助けてくれる絞り込みになっている。(気がする。)
自分は後者でよく立ち止まって時間がかかるので、こう受け取ったのかもしれないが。
ともあれ、途中で放り出されることがないまま最後まで行けて、そのあともどこに向かえばいいか分かるようになっているという意味で「抜けのない」本だな、と。
他言語の経験があるプログラマ向けと明言されているだけに「じつは中がこうなっているからこうなんだよ」的なことが足跡マークにちりばめられていて、これも同様に迷ったときの判断の基準になってくれる。
こういうことって、ふつうの入門書には書いてなくて、でもどうやって聞いたらいいのか分からない(うまく言葉で表せない)ことだと思う。誰かの経験談を見たり聞いたりして「あーそれ気になってたんだよ」という感じで解けることが多い、クックブックやレシピと似てはいるけど、ちょっとベクトルが違う「なるほど」。

Rubyを使い始めて1年以上経ったので、もう「初めて」ではないと思っていたのだけれど、それでもこれを読んでコードが変わったところがあったり、そういうものだと鵜呑みにしていたところの裏付けが出来たりして、収穫があった。

始めたあとでも、そのRubyがさらにRubyまる本だと思う。

カテゴリー: Ruby タグ:

ステータスコード。 このエントリーを含むはてなブックマーク はてなブックマーク - ステータスコード。

2008 年 8 月 14 日 Comments off
HTTP/1.1 200 OK
Status: 200 OK

この2つについて聞かれて、うまく答えられなかったので調べたメモ。

RFC 2616 – Hypertext Transfer Protocol — HTTP/1.1

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

RFC 3875 – The Common Gateway Interface (CGI) Version 1.1

Status = "Status:" status-code SP reason-phrase NL

後者はCGIのヘッダーフィールドなのかー。

カテゴリー: ネットワーク タグ:

子クラスもgettextの対象にしたい。 このエントリーを含むはてなブックマーク はてなブックマーク - 子クラスもgettextの対象にしたい。

2008 年 8 月 12 日 Comments off
class Curry < ActiveRecord::Base
end
class SeafoodCurry < Curry
end
class VegetableCurry < Curry
end

という関係のクラスがあって、

GetText.update_pofiles

でmsgidを抽出しようとしたのだけれど、対象となったのはCurryのみでSeafoodCurryとVegetableCurryは対象とならなかった。
このままではなにかと不便なので原因を追ってみました。
以下追跡ログ。キーとなった箇所は強調してあります。
gettext-1.92.0/lib/gettext/utils.rb

132     rgettext(files, refpot)

gettext-1.92.0/lib/gettext/rgettext.rb

241         file.puts generate_pot(parse(targetfiles))
170       @ex_parsers.each do |klass|
171         if klass.target?(file)
 35       ["active_record.rb", "ActiveRecordParser"],

gettext-1.92.0/lib/gettext/parser/active_record.rb

135     if @ar_re =~ v
 67       @ar_re = /class.*(#{@config[:activerecord_classes].join("|")})/
 27       :activerecord_classes => ["ActiveRecord::Base"],

ここまで。1.92.0ではclass定義の開始行に"ActiveRecord::Base"があるか否かで対象を判断しているようでした。
ancestorsを使って判断するように変えてみようとしたのだけれど想像以上にふくらんでしまい挫折。

class SeafoodCurry < Curry # < ActiveRecord::Base
end

としたら出るようになったので、ひとまずこれで。

カテゴリー: Rails タグ:

gettextでのメッセージ。 このエントリーを含むはてなブックマーク はてなブックマーク - gettextでのメッセージ。

2008 年 8 月 11 日 Comments off

RubyForge: Ruby-GetText-Package: リリースノート

* Improve to support mo-files.
  * Support revision 1 of mo-file format.
  * Freeze msgstrs.

1.92.0からフリーズされるようになってました。

flash[:notice] = _('Foo')
flash[:notice] << _('Bar') if ~

とかしてるとおこられますよ。

カテゴリー: Ruby タグ:

親クラスとしてform_forしたい。 このエントリーを含むはてなブックマーク はてなブックマーク - 親クラスとしてform_forしたい。

2008 年 8 月 11 日 コメント 2 件
class Curry < ActiveRecord::Base; end
class SeafoodCurry < Curry; end
class VegetableCurry < Curry; end

という関係のクラスがあって、

map.resources :curries

という定義がしてある場合の話。
すべてCurryとして編集したかったのだけれど、

<% form_for(@curry) do |f| %>

のところで詰まってしまった。
[13:05 追記] @curryはSeafoodCurryやVegetableCurryのインスタンスです。
こう書いたら、

undefined method `seafood_curry_path' for #<ActionView::Base:0xb7149864>

だとか

undefined method `vegetable_curry_path' for #<ActionView::Base:0xb72efdd0>

のように、子クラスでルートをつくろうとしているらしく、おこられてしまう。ただインスタンスを投げているだけだからこれはしかたない。

で、問題はここから。form_forを呼ぶときにアップキャストすればいいだけだと思ったのだけれど、そもそもキャストってないじゃないか、と。
ドキュメントを読んだら

Module: ActionView::Helpers::FormHelper

Resource-oriented style

<% form_for @post do |f| %>

<% form_for :post, @post, :url => post_path(@post), :html => { :method => :put, :class => "edit_post", :id => "edit_post_45" } do |f| %>

となるらしいのでこれをベタ書きで対応したのだけれど、いかんせん長すぎる。
なんかスマートな方法があるんじゃないかと思うのだけれど、どこかで道を間違ったのかなぁ。

カテゴリー: Rails タグ:

Autotest::Screenのhookを整理してみた。 このエントリーを含むはてなブックマーク はてなブックマーク - Autotest::Screenのhookを整理してみた。

2008 年 8 月 10 日 Comments off

以前.autotestに書いたままになっていたhookが、いつの間にやら効かなくなっていたので調べてみました。
原因は、
ZenTest-3.10.0/lib/autotest.rb

645   def self.add_hook(name, &block)
646     HOOKS[name] << block
647   end

のようにそれぞれのhookに複数のブロックを登録出来るようになっていて、実際に呼ばれるところでは

636     HOOKS[name].any? do |plugin|
637       plugin[self]
638     end

のようにいずれかのブロックがtrueを返すと以降のブロックは実行されないようになっていたことでした。

なるほどなるほど、と納得したところで問題が。

続きを読む…

カテゴリー: Rails タグ:

Gem実況プレイ動画。 このエントリーを含むはてなブックマーク はてなブックマーク - Gem実況プレイ動画。

2008 年 8 月 5 日 Comments off

GemCasts

便利そうなRubyGemsを使ってみるゲーム実況動画風、プログラミング実況動画です。

komagataさんがたんたんと続けられている動画サイトです。最新では実際にGemをつくって公開してます。


ゲーム実況プレイ風ってのが、社内勉強会を彷彿とさせていいなー。

カテゴリー: Ruby タグ: