レースクイーン情報
レースクイーンを各種ブログ(Blog)から一括検索します。
トップ > common > common - 人気ブログ(Blog)検索結果詳細 (2008年12月1日 9時)
[Rails][Ruby]Rails2.2でRuby1.9.1-preview1がさっぱり動かない件
Ruby on Rails 2.2 Release Notes
1.2. Compatibility with Ruby 1.9 and JRuby Along with thread safety, a lot of work has been done to make Rails work well with JRuby and the upcoming Ruby 1.9. With Ruby 1.9 being a moving target, running edge Rails on edge Ruby is still a hit-or-miss proposition, but Rails is ready to make the transition to Ruby 1.9 when the latter is released.
おぉ,それじゃあruby1.9.1-preview1で試してみるか.
% mkdir sample_1_9_1_pre1 % cd sample_1_9_1_pre1/ % rails-1.9.1-pre1 . % ruby-1.9.1-pre1 ./script/server /1.9.1/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:153:in `require': no such file to load -- test/unit/error (MissingSourceFile)
ちょ.動かん.
test/unit/自体もう1ヶ月前に削除されてるのに..
ただgithubを観てみると着々と1.9対応は進んでいるようで.
ちょこちょこ修正するとかろうじて動きました..
rails自体は悪くない感じで主にrackとかそこら辺のライブラリが怪しい..
Rails2.3では1.9.1がちゃんと動いてくれそうですね.
追記
rackがruby1.9.1で動かない件は文字列のeachを使用している所にあったのでパッチを投げておいた.
というかgithubだったのでforkしてpull requestしたってだけだけど.
作者:authorNari
更新日:2008年12月2日 0時20分
[NaCl]Unlambdaについて〜第8回NaCl勉強会〜
今日の勉強会はyharaさんの「Unlambdaについて」です.
いつも通り,午後六時頃から.
本日はUstreamなしです.
感想
終わりました.
λすげー!
引き算とかマジで凄すぎた.
昔の人は頭良いなぁー.
作者:authorNari
更新日:2008年12月1日 10時15分
[Ruby]そろそろ分かっておきたいY Combinator
もうすぐ年明けだし,Yコンビネータの魔法みたいな動きに惑わされる人
たちがでてくるんじゃないかなと思ってRubyで解説してみます.
参考に
[ruby-list:35058] Y Combinator
Y Combinatorって何?
3年周期くらいでお騒がせのYさんってそもそも何なのかという話ですが,動機として
再帰の時に自分の名前を使わずに,なんとかして関数そのものを呼びたい
というのがあって,例えば階乗とかしたいときに
def fact(n); n == 0 ? 1 : n * fact(n-1); end # ここを消したい!
と言う事です.
何が嬉しいのかというと,さっぱり分かりませんし,arguments.calleeとか普通に名前使える所では使えばいいんじゃないのかな.
前置き
Ruby1.9のlambdaでは
->{|n| puts n}[3] #=> 3
ちょっとネストしたりすると分かりづらいので説明では
lambda{|n| puts n}[3] #=> 3
としますね.
ちなみに[]は配列の要素指定では無く.『.call』の別名です.
Rubyで分かるY Combinator
これのfactという名前をなんとか消したい.
def fact(n); n == 0 ? 1 : n * fact(n-1); end
だったら,factのメソッドを生成するものを定義すればいいじゃないかという事で.
fact_makerというfactを生成するlambda作る事にします.
fact_maker = lambda{|proc| lambda{|n| n == 0? 1 : n * proc[(n-1)] }} puts fact_maker[5] #=> <Proc:0xb7c399cc@./ycombinator.rb:8>
引数に5を入れたらProcが返ってきた!Rubyのバグですか!
違います.よく見ると当然のことですね.
fact_makerはfactを生成するだけですので,それに5とか与えられてもね.
これが正しい呼び出し方
fact_maker = lambda{|proc| lambda{|n| n == 0? 1 : n * proc[proc][(n-1)] }} puts fact_maker[fact_maker][5]
変更した点は二箇所
- fact_maker[fact_maker]
- proc[proc]
つまり
- fact_maker呼び出し
- 次回に呼ぶfact_maker渡し
- 生成された関数に引数渡し
という流れになります.
しかし,やっぱりfact_makerという名前が残ってしまった.しかもproc[proc]というのもちょっとダサい.
そこでfact_maker[fact_maker]の部分を生成するものを作ることにしましょう.
これには
5 #=> 5 lambda{|n| n}[5] #=> 5
が等価だって事を利用します.
上と下が違うのはlambdaを挟んで遅れて評価しているという点です.(これ重要)
これを何も考えずに当てはめてみると.
fact_maker = lambda{|proc| lambda{|n| n == 0? 1 : n * lambda{|args| proc[proc][args] }[(n-1)]} } puts fact_maker[fact_maker][5] #=> 120
になります.
そして,ここから一気にその部分を外に抜き出すと..
fact_maker = lambda{|f| lambda{|n| n == 0? 1 : n * f[(n-1)]} } proc_proc = lambda{|proc| fact_maker[lambda{|args| proc[proc][args] }]}
これでproc[proc]という呼び出しが fact_maker のlambda内から消えましたね.
次は肝心の fact_maker[fact_maker] の部分を消す所ですが,これは簡単ですね.
なぜなら fact_maker って proc[proc] の事なんですから.
fact_maker = lambda{|f| lambda{|n| n == 0? 1 : n * f[(n-1)]} } proc_proc = lambda{|proc| fact_maker[lambda{|args| proc[proc][args] }]} puts proc_proc[proc_proc][5] #=> 120
次は proc_proc から fact_maker という名前も消したいと思います.
これも引数から取るようにすればいいので.
fact_maker = lambda{|f| lambda{|n| n == 0? 1 : n * f[(n-1)]} } proc_proc = lambda{|f| lambda{|proc| f[lambda{|args| proc[proc][args] }]}} puts proc_proc[fact_maker][proc_proc[fact_maker]][5] #=> 120
次はproc_proc[proc_proc]の部分を一つにしてしまいましょう.
面倒ですので.
fact_maker = lambda{|f| lambda{|n| n == 0? 1 : n * f[(n-1)]} } pppp = lambda do |f| lambda{|proc| f[lambda{|args| proc[proc][args] }]}[ lambda{|proc| f[lambda{|args| proc[proc][args] }]} ] end puts pppp[fact_maker][5] #=> 120
次に fact_maker はもう fact_ を make しないので名前を変えてしまいましょう.
fact = lambda{|f| lambda{|n| n == 0? 1 : n * f[(n-1)]} } pppp = lambda do |f| lambda{|proc| f[lambda{|args| proc[proc][args] }]}[ lambda{|proc| f[lambda{|args| proc[proc][args] }]} ] end puts pppp[fact][5] #=> 120
それで Y Combinator って何かっていうと.
fact = lambda{|f| lambda{|n| n == 0? 1 : n * f[(n-1)]} } Y = lambda do |f| lambda{|proc| f[lambda{|args| proc[proc][args] }]}[ lambda{|proc| f[lambda{|args| proc[proc][args] }]} ] end puts Y[fact][5] #=> 120
これの事なんですね.
factが参照しているlambdaの引数に自分自身の名前を入れてくれるようなんです.
ファンタジーですね.
Unlambda
The Unlambda Programming Language
について調べていたら Y Combinator なんて勉強する羽目に..恐ろしい子.
作者:authorNari
更新日:2008年11月30日 1時45分
[emacs][rails]rails.elの設定ではまった
色々バグフィックスされているがまったくリリースする気なさげなので最新を取得しておく.
$ svn co http://emacs-rails.rubyforge.org/svn/trunk/
yasnippetとの相性
ちょっと併用して使えないので
(add-hook 'rails-minor-mode-hook '(lambda () (yas/minor-mode-off)))
でオフした.
Ctr+Enter
rails.elでは,
render :partial => "hoge" render :action => "fuga"
などの部分でCtr+Enterを押すとそのテンプレートに飛んでくれる.
しかし,".rhtml"拡張子にしか対応してない.
最近のRailsでは".html.erb"を使うのでこれを修正した.
Index: rails-core.el =================================================================== --- rails-core.el (リビジョン 232) +++ rails-core.el (作業コピー) @@ -236,14 +236,14 @@ "Return the file name of partial NAME." (if (string-match "/" name) (concat "app/views/" - (replace-regexp-in-string "\\([^/]*\\)$" "_\\1.rhtml" name)) + (replace-regexp-in-string "\\([^/]*\\)$" "_\\1.html.erb" name)) (concat (rails-core:views-dir (rails-core:current-controller)) - "_" name ".rhtml"))) + "_" name ".html.erb"))) (defun rails-core:view-name (name) "Return the file name of view NAME." (concat (rails-core:views-dir (rails-core:current-controller)) - name ".rhtml")) ;; BUG: will fix it + name ".html.erb")) ;; BUG: will fix it (defun rails-core:helper-file (controller) "Return the helper file name for the controller named @@ -669,6 +669,6 @@ (defun rails-core:rhtml-buffer-p () "Return non nil if the current buffer is rhtml file." - (string-match "\\.rhtml$" (buffer-file-name))) + (string-match "\\.html.erb$" (buffer-file-name))) (provide 'rails-core) Index: rails-view-minor-mode.el =================================================================== --- rails-view-minor-mode.el (リビジョン 232) +++ rails-view-minor-mode.el (作業コピー) @@ -43,7 +43,7 @@ (insert "\n") (split-window-vertically) (other-window 1) - (find-file (concat "_" name ".rhtml")) + (find-file (concat "_" name ".html.erb")) (goto-char (point-min)) (erase-buffer) (insert content)
かなりアドホックだけど..まぁいいか.
作者:authorNari
更新日:2008年11月29日 13時20分
atokx3のiiim-propertiesがsegvする
久々にPCを再起動するとATOKのCtr+Spaceが復活した.
原因はiiim-propertiesのsegvにあるらしい.
$ iiim-properties
で起動して「適用」ボタンを押すと
zsh: segmentation fault iiim-properties
ちょ..
原因は設定ファイルである~/.gconf/desktop/input_methods/%gconf.xmlの肥大化にあるそうだ.
対策は以下のサイトを参考させていただいた.
ubuntu hardy amd64 で ATOK X3 の iiim-properties を動作させる - Assemblr
これはしかし酷いバグだなぁ.
作者:authorNari
更新日:2008年11月29日 13時5分
[抜粋]ユートピアとは
作者:authorNari
更新日:2008年11月27日 21時14分
[Rails][Ruby]Rails2.2でRuby1.9.1-preview1がさっぱり動かない件
Ruby on Rails 2.2 Release Notes
1.2. Compatibility with Ruby 1.9 and JRuby Along with thread safety, a lot of work has been done to make Rails work well with JRuby and the upcoming Ruby 1.9. With Ruby 1.9 being a moving target, running edge Rails on edge Ruby is still a hit-or-miss proposition, but Rails is ready to make the transition to Ruby 1.9 when the latter is released.
おぉ,それじゃあruby1.9.1-preview1で試してみるか.
% mkdir sample_1_9_1_pre1 % cd sample_1_9_1_pre1/ % rails-1.9.1-pre1 . % ruby-1.9.1-pre1 ./script/server /1.9.1/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:153:in `require': no such file to load -- test/unit/error (MissingSourceFile)
ちょ.動かん.
test/unit/自体もう1ヶ月前に削除されてるのに..
ただgithubを観てみると着々と1.9対応は進んでいるようで.
ちょこちょこ修正するとかろうじて動きました..
rails自体は悪くない感じで主にrackとかそこら辺のライブラリが怪しい..
Rails2.3では1.9.1がちゃんと動いてくれそうですね.
追記
rackがruby1.9.1で動かない件は文字列のeachを使用している所にあったのでパッチを投げておいた.
というかgithubだったのでforkしてpull requestしたってだけだけど.
作者:authorNari
更新日:2008年12月1日 15時20分
[NaCl]Unlambdaについて〜第8回NaCl勉強会〜
今日の勉強会はyharaさんの「Unlambdaについて」です.
いつも通り,午後六時頃から.
本日はUstreamなしです.
感想
終わりました.
λすげー!
引き算とかマジで凄すぎた.
昔の人は頭良いなぁー.
作者:authorNari
更新日:2008年12月1日 1時15分
[Ruby]そろそろ分かっておきたいY Combinator
もうすぐ年明けだし,Yコンビネータの魔法みたいな動きに惑わされる人
たちがでてくるんじゃないかなと思ってRubyで解説してみます.
参考に
[ruby-list:35058] Y Combinator
Y Combinatorって何?
3年周期くらいでお騒がせのYさんってそもそも何なのかという話ですが,動機として
再帰の時に自分の名前を使わずに,なんとかして関数そのものを呼びたい
というのがあって,例えば階乗とかしたいときに
def fact(n); n == 0 ? 1 : n * fact(n-1); end # ここを消したい!
と言う事です.
何が嬉しいのかというと,さっぱり分かりませんし,arguments.calleeとか普通に名前使える所では使えばいいんじゃないのかな.
前置き
Ruby1.9のlambdaでは
->{|n| puts n}[3] #=> 3
ちょっとネストしたりすると分かりづらいので説明では
lambda{|n| puts n}[3] #=> 3
としますね.
ちなみに[]は配列の要素指定では無く.『.call』の別名です.
Rubyで分かるY Combinator
これのfactという名前をなんとか消したい.
def fact(n); n == 0 ? 1 : n * fact(n-1); end
だったら,factのメソッドを生成するものを定義すればいいじゃないかという事で.
fact_makerというfactを生成するlambda作る事にします.
fact_maker = lambda{|proc| lambda{|n| n == 0? 1 : n * proc[(n-1)] }} puts fact_maker[5] #=> <Proc:0xb7c399cc@./ycombinator.rb:8>
引数に5を入れたらProcが返ってきた!Rubyのバグですか!
違います.よく見ると当然のことですね.
fact_makerはfactを生成するだけですので,それに5とか与えられてもね.
これが正しい呼び出し方
fact_maker = lambda{|proc| lambda{|n| n == 0? 1 : n * proc[proc][(n-1)] }} puts fact_maker[fact_maker][5]
変更した点は二箇所
- fact_maker[fact_maker]
- proc[proc]
つまり
- fact_maker呼び出し
- 次回に呼ぶfact_maker渡し
- 生成された関数に引数渡し
という流れになります.
しかし,やっぱりfact_makerという名前が残ってしまった.しかもproc[proc]というのもちょっとダサい.
そこでfact_maker[fact_maker]の部分を生成するものを作ることにしましょう.
これには
5 #=> 5 lambda{|n| n}[5] #=> 5
が等価だって事を利用します.
上と下が違うのはlambdaを挟んで遅れて評価しているという点です.(これ重要)
これを何も考えずに当てはめてみると.
fact_maker = lambda{|proc| lambda{|n| n == 0? 1 : n * lambda{|args| proc[proc][args] }[(n-1)]} } puts fact_maker[fact_maker][5] #=> 120
になります.
そして,ここから一気にその部分を外に抜き出すと..
fact_maker = lambda{|f| lambda{|n| n == 0? 1 : n * f[(n-1)]} } proc_proc = lambda{|proc| fact_maker[lambda{|args| proc[proc][args] }]}
これでproc[proc]という呼び出しが fact_maker のlambda内から消えましたね.
次は肝心の fact_maker[fact_maker] の部分を消す所ですが,これは簡単ですね.
なぜなら fact_maker って proc[proc] の事なんですから.
fact_maker = lambda{|f| lambda{|n| n == 0? 1 : n * f[(n-1)]} } proc_proc = lambda{|proc| fact_maker[lambda{|args| proc[proc][args] }]} puts proc_proc[proc_proc][5] #=> 120
次は proc_proc から fact_maker という名前も消したいと思います.
これも引数から取るようにすればいいので.
fact_maker = lambda{|f| lambda{|n| n == 0? 1 : n * f[(n-1)]} } proc_proc = lambda{|f| lambda{|proc| f[lambda{|args| proc[proc][args] }]}} puts proc_proc[fact_maker][proc_proc[fact_maker]][5] #=> 120
次はproc_proc[proc_proc]の部分を一つにしてしまいましょう.
面倒ですので.
fact_maker = lambda{|f| lambda{|n| n == 0? 1 : n * f[(n-1)]} } pppp = lambda do |f| lambda{|proc| f[lambda{|args| proc[proc][args] }]}[ lambda{|proc| f[lambda{|args| proc[proc][args] }]} ] end puts pppp[fact_maker][5] #=> 120
次に fact_maker はもう fact_ を make しないので名前を変えてしまいましょう.
fact = lambda{|f| lambda{|n| n == 0? 1 : n * f[(n-1)]} } pppp = lambda do |f| lambda{|proc| f[lambda{|args| proc[proc][args] }]}[ lambda{|proc| f[lambda{|args| proc[proc][args] }]} ] end puts pppp[fact][5] #=> 120
それで Y Combinator って何かっていうと.
fact = lambda{|f| lambda{|n| n == 0? 1 : n * f[(n-1)]} } Y = lambda do |f| lambda{|proc| f[lambda{|args| proc[proc][args] }]}[ lambda{|proc| f[lambda{|args| proc[proc][args] }]} ] end puts Y[fact][5] #=> 120
これの事なんですね.
factが参照しているlambdaの引数に自分自身の名前を入れてくれるようなんです.
ファンタジーですね.
Unlambda
The Unlambda Programming Language
について調べていたら Y Combinator なんて勉強する羽目に..恐ろしい子.
作者:authorNari
更新日:2008年11月29日 16時45分
[emacs][rails]rails.elの設定ではまった
色々バグフィックスされているがまったくリリースする気なさげなので最新を取得しておく.
$ svn co http://emacs-rails.rubyforge.org/svn/trunk/
yasnippetとの相性
ちょっと併用して使えないので
(add-hook 'rails-minor-mode-hook '(lambda () (yas/minor-mode-off)))
でオフした.
Ctr+Enter
rails.elでは,
render :partial => "hoge" render :action => "fuga"
などの部分でCtr+Enterを押すとそのテンプレートに飛んでくれる.
しかし,".rhtml"拡張子にしか対応してない.
最近のRailsでは".html.erb"を使うのでこれを修正した.
Index: rails-core.el =================================================================== --- rails-core.el (リビジョン 232) +++ rails-core.el (作業コピー) @@ -236,14 +236,14 @@ "Return the file name of partial NAME." (if (string-match "/" name) (concat "app/views/" - (replace-regexp-in-string "\\([^/]*\\)$" "_\\1.rhtml" name)) + (replace-regexp-in-string "\\([^/]*\\)$" "_\\1.html.erb" name)) (concat (rails-core:views-dir (rails-core:current-controller)) - "_" name ".rhtml"))) + "_" name ".html.erb"))) (defun rails-core:view-name (name) "Return the file name of view NAME." (concat (rails-core:views-dir (rails-core:current-controller)) - name ".rhtml")) ;; BUG: will fix it + name ".html.erb")) ;; BUG: will fix it (defun rails-core:helper-file (controller) "Return the helper file name for the controller named @@ -669,6 +669,6 @@ (defun rails-core:rhtml-buffer-p () "Return non nil if the current buffer is rhtml file." - (string-match "\\.rhtml$" (buffer-file-name))) + (string-match "\\.html.erb$" (buffer-file-name))) (provide 'rails-core) Index: rails-view-minor-mode.el =================================================================== --- rails-view-minor-mode.el (リビジョン 232) +++ rails-view-minor-mode.el (作業コピー) @@ -43,7 +43,7 @@ (insert "\n") (split-window-vertically) (other-window 1) - (find-file (concat "_" name ".rhtml")) + (find-file (concat "_" name ".html.erb")) (goto-char (point-min)) (erase-buffer) (insert content)
かなりアドホックだけど..まぁいいか.
作者:authorNari
更新日:2008年11月29日 4時20分
atokx3のiiim-propertiesがsegvする
久々にPCを再起動するとATOKのCtr+Spaceが復活した.
原因はiiim-propertiesのsegvにあるらしい.
$ iiim-properties
で起動して「適用」ボタンを押すと
zsh: segmentation fault iiim-properties
ちょ..
原因は設定ファイルである~/.gconf/desktop/input_methods/%gconf.xmlの肥大化にあるそうだ.
対策は以下のサイトを参考させていただいた.
ubuntu hardy amd64 で ATOK X3 の iiim-properties を動作させる - Assemblr
これはしかし酷いバグだなぁ.
作者:authorNari
更新日:2008年11月29日 4時5分
[抜粋]ユートピアとは
作者:authorNari
更新日:2008年11月27日 12時14分

