83's

Top > Archives > 2007 > September

September 06, 2007

ルーティングにquery stringのパターンは書けるけど使えない 22:22

map.connect "/foo/:action?:id", :controller => 'foo'

みたいなルーティングはエラーもなく書けてしまうし、url_forもうまくいくし、 assert_routingも通ってしまうんだけど、 ブラウザでアクセスしてみるとno route foundになってしまう。

なんだろうと思って調べてみたら、リクエストを処理するときに request.pathとパターンマッチしてるのが原因だった。 これquery string含まないからね。 でもマッチングに使うパターンには含まれるからマッチしないわけだ。なるへそ。

マッチングをするメソッドは動的に定義されて、上の例の場合はこう。

def recognize(path, env={})
  if (match = /\A\/foo\/([^\/;.,?]+)\?(?:([^\/;.,?]+)\/?)?\Z/.match(path))
    params = parameter_shell.dup
    params[:action] = match[1] || "index"
    params[:id] = match[2] if match[2]
    params
  end
end

September 08, 2007

Railsのプラグインに手を噛まれる 02:46

Railsの動作がおかしいなってときにRailsのソースを追って追ってそれでもわかんなくて、 最後にあやしいプラグインにたどり着いてそれを消すと直るってことがこれまで2度あった。

既存のメソッド置き換えるようなプラグインはそもそも潜在的に危険なんだよな。 その再定義が単純にまずい場合もあるだろうし、 例え単体ではうまく動いていても他のプラグインが同じメソッドを再定義したら……とかね。 今まで振り返ると原因が掴みにくかったりするし厄介だなぁ。

とりあえず便利と見ると喜んでインストールしていた以前のオレは恐いもの知らず過ぎる\(^o^)/ これからはインストール前にソースに目を通して、 おっかないことしてないかどうか確認するようにする。

まあこうなるのは当たり前の話で、それをいちいち指摘するのは坊やだからですね、はい。

それにしても意外と平気で再定義しちゃうプラグインあるんだよなぁ。 オレもよくやっちゃうけどさ。 なんかもう、プラグインというよりパッチだよねこういうの。

September 09, 2007

letの束縛部 02:41

Scheme(Gauche)

gosh> (let (x y) (list x y))
*** ERROR: Compile Error: syntax-error: malformed let: (let (x y) (list x y))
"(stdin)":1:(let (x y) (list x y))

Common Lisp(clisp)

[1]> (let (x y) (list x y))
(NIL NIL)

へぇ。

September 13, 2007

del.icio.usへ移行 02:18

することにした。はてブと同期はとっていくけどね。

  1. はてなブックマークからブックマーク形式でエクスポート
  2. del.icio.usにインポート
  3. インポートしたものがnot sharedになって、しかもはてブのタイトルがタグになって全部に付いてる
  4. API使って修正

という流れだった。

過去のブックマークくらい他人と共有しないnot sharedでも良いかなと思ったけど、 not sharedだけについてるタグがタグ補完のときに出てこないみたい。

あとはてブのタイトルがタグになってインポートしたブックマーク全部についてる件。 一応del.icio.usのページから特定のタグを削除することができるんだけど、 3000も関連を持つタグはさすがに無理みたいだった。

ということでAPI(/posts/add)を使ってsharedとタグをひとつひとつ上書きすることに。 最低1秒置きにしないと拒否るよって書いてあったからsleep 1してたけど甘かったw 途中で蹴られました(ノ∀`) アチャー

しかしインポートこんなめんどくていいのかdel.icio.us。途中でやめたくなったぞ。

新世界 02:35

そういえば家のパソコンを買い替えた。

Athlon 64 X2 4200+(2.2GHz)、メモリ2GByte。やっと世間一般くらいの水準に……。 ちなみに昨日まではAthlon XP 1800+(1.2GHz)、メモリ512MByte。

まず静かになったな。前はテレビが聞こえにくかったんだ。 それから部屋の温度が下がった気がするw 前は扇風機当ててないと熱でCPUが止まってたくらい。

ネットも快適だな、もたつかないし。 flash再生中につっかかることはないし、もう今までとは時間の流れ方が違う。人生無駄にしてた気分。

そして何よりテストが速ええええええええええええええええええええええええ.........................................F................EE..............FFFFFFFFFFF.....

幸せって身近なところに転がってるんですね。金さえあれば。

September 25, 2007

helper_method 23:23

メモメモ。

コントローラで

class FooController < ActionController::Base
  def foo
    ...
  end
  helper_method :foo
end

とやるとビューの中でfooが使える。 controller.fooを呼んでくれるぽい。 ちょっと幸せになれる。

helper_attrなんてのもある。

      # Declare a controller attribute as a helper.  For example,
      #   helper_attr :name
      #   attr_accessor :name
      # makes the name and name= controller methods available in the view.
      # The is a convenience wrapper for helper_method.