Ruby言語やLinuxのネタが多いです。
March 02, 2003
■ [Ruby] オブジェクトのコピー
久しぶりにハマったのでメモしておこう。
1: h = Hash["test", "a"] 2: ret = h["test"] 3: ret << "b" 4: p ret #=> "ab" 5: 6: p h["test"] #=> "ab"
オレが期待していたのは、6行で"a"が返ってくることだったんだけど、上に書いてあるとおり、実際は"ab"が返る。
これは2行目のretが指しているのがh["test"]のポインタそのもので、3行目でh["test"]の値自身にconcat(<<)しちゃうから、結果として、6では"ab"になるということだ。
回避策としては以下の2つかな。
- 2行目でret = h["test"].clone(or dup)としてretにはh["test"]内のデータのコピーを作ってそれを使う
- 3行目で破壊的なメソッド(concat)ではなくコピーを作るメソッド(+=)を使う
上記例だと簡単に問題箇所がわかるけど、ちょっと複雑なコードで1度Hashから取り出した情報を(コピーするの忘れて)使い回し続けるとハマりそう、ってかそれでハマったんだけどね〜。
#そういうのオレだけ?(^^;)
■ [Ruby] 八声のフーガ, Simon Cozens
ruby-talkでSimon Cozensって人を見るたびにサイモン&ガーファンクルと昔1曲だけ有名になった(2曲目もか?)カズンズっていう二人組のミュージシャンを密かに思い出しては含み笑いをしてしまうのだが(恐い)、なかなかおもしろいことを書いていた。
議論好きの英語圏の人はああいう話が好きなのかと思ってたのだけど、うんざりしている人もいるのね〜。
っていうかそれを小粋に訳す方(SugHimsiさん?)もさすがだ。
ちと話は変わるんだけど、最近ますます英語のドキュメント不足を嘆く声が挙がってきてる割には自分で訳そう(あるいは1から作ろう)って人がそれほど多くない気がする。まぁ、日本語読めなきゃできないっつーのもわかるんだけどさ。
#これを機会に日本語話せる人が増えたらおもしろいんだけどなぁ。
March 02, 2004
■ [Ruby] ObjectPool by さかいさん
元々、オレの作ったものを使ってみて、いろいろ問題がありそうなところを直していったら別物になったというモノ(^^;)。
オレのより全然良いのでオレの方は公開取りやめようかな。RAAのエントリも一度削除した方が良いのかしらん。
それとも同じ名前でそのままメンテナンスも引き継ぎます? > さかいさん
■ にしても、オレが公開するRuby関連のライブラリでさかいさんの手が入っていないのはないな。Ruby-GNOME2しかり、Ruby-GetText-Packageしかり(^^;)。
■ [Misc] orkut
なにやら方々で話に出てるので何モノかと思ってたんだけど、一緒に仕事してる人から招待されたので入ってみた....。
が、しかし。いったい、これでオレに何をしろと????(オヤヂ化?)
■ [Ruby] 予約語の扱い
Ruby/GLibではプロパティ値からアクセッサ(foo=, set_foo, foo)というメソッドを自動生成するんだけど、そのときに予約語が入っている場合を想定していなかった。
irb(main):011:0> RUBY_VERSION
=> "1.9.0"
irb(main):012:0> def if=(val); p val; end
=> nil
irb(main):013:0> if = 10
SyntaxError: compile error
(irb):13: syntax error
if = 10
^
from (irb):13
irb(main):014:0> self.if = 10
10
=> 10
irb(main):015:0>
irb(main):001:0> RUBY_VERSION
=> "1.6.8"
irb(main):002:0> def if=(val); p val; end
SyntaxError: compile error
(irb):2: parse error
def if=(val); p val; end
^
(irb):2: parse error
from (irb):2
irb(main):003:0>
■ というわけで、今までCVS版のRubyを使っていたので気づかなかったんだけど1.6系でRuby-GNOME2は動かなかったのね...。いかにテストできていないかバレバレだ(^^;)。まぁ、見つけちゃった以上、なおさんといかんなぁ。
#そろそろ1.6系は捨てたいというのがホンネなんだけど。
March 02, 2005
■ [Ruby-GNOME2] Rucd
ルシード、と読むそうです。Ruby/GTK2で書かれたCDからのリッピング(cdparanoia)、MPエンコード(lame)を行うGUIフロントエンドとのこと。
March 02, 2010
■ [Ruby] rvm - 1バージョンのRubyに複数のgemのバージョンを入れる
例えば、ruby-1.8.7の環境にrails-2.3.4とrails-2.3.5を入れてそれぞれでテストしたい。詳しくはこちらから。
% rvm 1.8.7 % rvm gemset create rails234 % rvm 1.8.7%rails234 % gem install rails -v 2.3.4 % rvm gemset create rails235 % rvm 1.8.7%rails235 % gem install rails -v 2.3.5 --no-rdoc
rvm 1.8.7%rails234でテストを実行すればrails-2.3.4の環境でテストができる。1.8.7%rails235でテストを実行すればrails-2.3.5ね。
両方でテストをしたい場合は
% rvm 1.8.7%rails234,1.8.7%rails235 rake test
でOK。便利。
■ [Rails] gettext_rails:とりあえず2.3.5対応
無事、2.3.5対応が終わった。
distance_of_time_in_wordsが機能拡張されてたのでそれに追随した。
こういうのはもう、i18nに任せちゃった方が楽だよなぁ。
ま、ともかく、次は3.0か。
% rvm gemset create rails3beta % rvm 1.8.7%rails3beta % gem update --system % gem install tzinfo builder memcache-client rack rack-test rack-mount erubis mail text-format thor bundler i18n % gem install rails --pre
gemは最新版が必要な模様。
% cd gettext_rails % rake test
いきなりエラー … orz。ま、そりゃそうだよな。続きは明日にするか。
■ [Rails] 3.0 betaを試してみる(2)
ちょっと悔しいので、gettext_railsのサンプルアプリをrails3化してみることにした。Rails3のリリースノートに、rails3化するプラグインが紹介されていたので、それを使ってみることにした。
% rvm 1.8.7%rails3beta % cd git/gettext_rails/sample % script/plugin install git://github.com/rails/rails_upgrade.git
ここでインストールされるRakeタスクが表示される。以下、ざっくりと説明(翻訳)してみる。
- rake rails:upgrade:check … チェック/分析のみ。
- rake rails:upgrade:backup … checkを実施した後に出力結果を参考に全て手作業で修正していくのが良いのだけど、自動的にアップデートしたいよね。で、その時のもっとも速いやり方が、"rails ."。これは単に存在するコードを新しく生成されたappで上書きしてしまう。なので、その前にこのコマンドを使ってバックアップを取っておく。バックアップはupgrade後に削除しても良い。
- rake rails:upgrade:routes … 古いroutesファイルから新しいroutesファイルを生成する。
- rake rails:upgrade:gems … Gemfileを生成する。
- rake rails:upgrade:configuration … config/environment.rbから新しい設定ファイルであるconfig/application.rbを生成する。
ということなので、まずは、上からやってみる…。けどやり始めたら長そうなので、今日は寝る。続きはまた後で。
