トップページ⇒tech
1001コメント311KB

【RoR】Rubyについて Part 41【CPAN vs RubyGems】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/08/11(水) 05:48:14
オブジェクト指向スクリプト言語Rubyについて扱うスレッドです。
仲良く使ってね。

Ruby Home Page
http://www.ruby-lang.org/ja/

= 前スレ
Rubyについて Part 40
http://hibari.2ch.net/test/read.cgi/tech/1272248179/

過去スレ・関連スレは >>2-
0153デフォルトの名無しさん2010/09/11(土) 09:15:51
>>152
escape は parse 可能を保証しないんじゃなかったっけ
0154デフォルトの名無しさん2010/09/11(土) 19:01:25
>>152
URI.escapeはURIとして使えない文字をescapeするだけで、
その結果が正しいURIになるとは限らない。
議論の結果、使い物にならないって事で廃止予定です。
0155デフォルトの名無しさん2010/09/11(土) 19:44:37
なんでそんなに独特な言い回しなんだw
0156デフォルトの名無しさん2010/09/11(土) 19:47:43
URI 構成要素ごとにパーセントエンコーディングすべき文字というのが決まっているので
URI 全体を特定の正規表現でチェックして一気に置換とか本当はありえないんだよね
Addressable::URI の方向性は正しい
0157デフォルトの名無しさん2010/09/12(日) 16:05:26
>>135
Rails3系ではrubyは1.9系を使おうと思ってるよ。
0158デフォルトの名無しさん2010/09/12(日) 18:05:12
犬かうんだがRuby関係の名前にしようかと思ってる。
0159デフォルトの名無しさん2010/09/12(日) 18:14:41
松江ラーメン
で
0160デフォルトの名無しさん2010/09/12(日) 18:24:21
instance_eval とか犬の名前にすんのか?
0161デフォルトの名無しさん2010/09/12(日) 18:28:41
飼い猫の名前に、nilって名前つけたら早死にしたわ。
あんなに可愛かったのに、GCの対象になったらしい。
0162デフォルトの名無しさん2010/09/12(日) 18:38:54
Ruby on わんこ
0163デフォルトの名無しさん2010/09/12(日) 18:41:14
そういや飼っていた兎にπと名づけていたOS研究者がいたな。
本の献辞に memory of Bram and Sweetie π とあって(兎の名前だと知られるまで)
読者はなんだそりゃと思ったという。
0164デフォルトの名無しさん2010/09/12(日) 22:09:22
>>161
どんなわかりやすい嘘だよw
0165デフォルトの名無しさん2010/09/13(月) 08:46:48
>>161
おまいがしっかりと参照してやってれば…
0166デフォルトの名無しさん2010/09/13(月) 09:13:33
nil は普通に実装したら即値にするだろうから、
GC は関係ないんじゃないかなぁ
0167デフォルトの名無しさん2010/09/13(月) 09:27:24
飼い猫を nil にしたら飼い猫として参照できなくなって飼い猫がいなくなった、が正しいと思う
0168デフォルトの名無しさん2010/09/13(月) 09:35:05
>>158
ゆきひろ でいいんじゃね?
0169デフォルトの名無しさん2010/09/13(月) 09:40:10
>>168
フイタw
0170デフォルトの名無しさん2010/09/13(月) 10:29:09
そういえば、まつもとっていう名前のウサギかなんかを飼ってる人がいたような。
0171デフォルトの名無しさん2010/09/13(月) 15:09:32
>>158
モルモン
0172デフォルトの名無しさん2010/09/13(月) 16:29:35
force_encoding("utf-8") は今すぐ絶滅して欲しい今すぐ
force_encoding("binary") とかのほうが数万倍マシだ

っていうか外人産ライブラリからこれを取り除いて欲しいんだけど外人さんをどう説得すればいいですか
0173デフォルトの名無しさん2010/09/13(月) 16:34:40
>>172
String#valid_encoding? が false になる例を1ダースくらい持っていく
全てに対して force_encoding(Encoding::ASCII_8BIT) して、全てが true になることを示す

valid_encoding? という字面は強力なのでたいていあちらさんが折れるぞ
ほんとは encoding が valid かどうかを示してるわけじゃないんだけど、
そんな知識があるならそもそも force_encoding('UTF-8') なんてしないから大丈夫バレない
0174デフォルトの名無しさん2010/09/13(月) 18:35:07
なんでデフォルトをUTF8にしなかったんだ?
もちろんいろいろ検討した結果なんだろうけど
0175デフォルトの名無しさん2010/09/13(月) 18:41:08
>>174
UTF-8に変換しないといけなくなるじゃないか
0176デフォルトの名無しさん2010/09/13(月) 19:05:48
>>174
当時は EUC がベストと思われてたから
0177デフォルトの名無しさん2010/09/13(月) 20:12:52
当時っていつ頃なんすか?w
ゆとり世代の自分からしたらUTF-8しかありえないんですけど^^;
0178デフォルトの名無しさん2010/09/13(月) 20:30:39
>>176
EUCがベストって1.9のデフォルトはUS-ASCIIじゃんかよ
0179デフォルトの名無しさん2010/09/13(月) 20:37:46
>>178
>>176は>>174がRuby1.8の話をしてると思ってる
0180デフォルトの名無しさん2010/09/13(月) 20:50:02
なんで嘘吐くかな
RubyはLatin-1だろ
0181デフォルトの名無しさん2010/09/13(月) 23:07:24
>>174
それやるとWindowsとの親和性が上がっちゃうから
0182デフォルトの名無しさん2010/09/14(火) 04:01:09
WindowsならShift-JIS(CP932)だろJK、気持ちはわかるがUTF-8もWindowsにとってはかなりアレなんだぜ
0183デフォルトの名無しさん2010/09/14(火) 08:01:26
Rubyの魔術 − @IT
http://www.atmarkit.co.jp/news/201009/13/spell.html
0184デフォルトの名無しさん2010/09/14(火) 08:44:50
 このPerrotta氏の著書『メタプログラミングRuby』の序文に寄せて、Rubyの設計者である、
まつもとゆきひろ氏は、こう書いている。

 「Rubyは君を信頼する。Rubyは君を分別のあるプログラマとして扱う。
Rubyはメタプログラミングのような強力な力を与える。
ただし、大いなる力には、大いなる責任が伴うことを忘れてはいけない」

 コアクラスも書き換え可能である「オープンクラス」というのが典型だが、Rubyではプログラマ自身が自覚している限り、
破れないルールは少ない。例えば、クラス定義の中にある「private」以降に定義があるメソッドはレシーバを省略した形
でなければ呼び出せないため、事実上クラスメソッドのように振る舞う。しかし、動的ディスパッチと呼ばれる引数に
メソッド名を指定する方法だと、当該クラスと関係のないコンテクストからですら呼び出せてしまう。これは一見危険な
ことだが、このことによってクラスを動的に拡張して、一群のメソッドを追加するような“魔法”が、Rubyでは1行で実現
できてしまう。Perrotta氏は、「Rubyの世界では、private()は命令ではなく提案だと考えられている。これはRubyの
哲学に不可欠なものだ」と書籍の中で説明している。

 結局、メタプログラミングとは強力で危険な、特殊なプログラミング技法なのか? どこで使い、どこで使うべきでないのか?

 同書のエピローグには、禅問答のような短いやりとりが掲載されている。山の頂で瞑想している師匠に向かって、
「メタプログラミングの真髄とは何ですか」と、ひと通り学び終わった弟子が問うシーンがある。Perrotta氏は、
師匠にこう言わせている。

 「メタプログラミングというものなど存在しない。すべてはただのプログラミングじゃ。去るがいい。静かに瞑想させておくれ」



どう見ても宗教です本当にあり(ry
0185デフォルトの名無しさん2010/09/14(火) 08:59:26
言いたいだけの奴は勝手に言ってろ
0186デフォルトの名無しさん2010/09/14(火) 09:02:41
>Rubyは君を信頼する。Rubyは君を分別のあるプログラマとして扱う。

別にRubyに限った話ではない
例えばこの辺りの思想は、おそらくC譲りのもの
それを宗教と呼ぶのは自由だが
0187デフォルトの名無しさん2010/09/14(火) 09:11:52
自分の足を撃つにはどうプログラムするか、というやつだなぁ
C→自分の足を撃て
Pascal→コンパイラはあなたに自分の足を撃たせない
みたいな。
0188デフォルトの名無しさん2010/09/14(火) 09:12:57
 同書のエピローグには、禅問答のような短いやりとりが掲載されている。山の頂で瞑想している師匠に向かって、
「メタプログラミングの真髄とは何ですか」と、ひと通り学び終わった弟子が問うシーンがある。Perrotta氏は、
師匠にこう言わせている。

 「メタプログラミングというものなど存在しない。すべてはただのプログラミングじゃ。去るがいい。静かに瞑想させておくれ」



の部分だろ問題あるのは
0189デフォルトの名無しさん2010/09/14(火) 09:14:36
ずいぶん長い夏休みだな
0190デフォルトの名無しさん2010/09/14(火) 09:21:48
もうすぐ3年目
0191デフォルトの名無しさん2010/09/14(火) 10:11:55
rubykaigi2010 でも Perrotta 氏が来ていて
セッションを聞いていたけど、Perrotta 氏の話は
面白くてとても謙虚な方だったよ。

Perrotta 氏は Java の Hibernate のコミッタでもあるそうだが、
本人も「元はJavaプログラマだったけど ruby をやりはじめて、
はじめは(railsなどの、rubyに見られる)黒魔術がなにがなんだか
わからなかった」と言っていた。

冒頭はそのときの体験談なんかもあったよ。

英語もすごい聞きやすかったな
# というかセッション後の質疑応答時間で、聴衆の外人から
# 「あなた(Perrotta)は アメリカ人ではないのに、
# どうしてそんなに英語が上手いの?」と聞かれていて
# 会場が沸いていた
0192デフォルトの名無しさん2010/09/14(火) 11:01:52
>>188
外人ハッカーのZenへの憧れを知らないと見える。
0193デフォルトの名無しさん2010/09/14(火) 11:08:30
Ruby2.0ではirbからrequire selfするとMatzのポエムが読めます
0194デフォルトの名無しさん2010/09/14(火) 11:08:52
どう問題があるのか言えないくらいだからたいしたことない
0195デフォルトの名無しさん2010/09/14(火) 11:15:00
It's the ZEN of Ruby
0196デフォルトの名無しさん2010/09/14(火) 11:39:25
哲学が理解できないのは知性が低い証拠
0197デフォルトの名無しさん2010/09/14(火) 12:32:22
Paolo PerrottaのMetaprogramming Ruby のAppendices Spell Bookの部分は公開されてるんだが、
公式のドキュメントかリファレンスマニュアルにいれとけよっていうくらいのまとめだな

http://media.pragprog.com/titles/ppmetr/spells.pdf
Google Doc経由 http://docs.google.com/viewer?url=http://media.pragprog.com/titles/ppmetr/spells.pdf

0198デフォルトの名無しさん2010/09/16(木) 15:06:06
rvm 使ってる人に質問
システムが使ってる Ruby はどうしてる?
まさか自分の .rvm ディレクトリにシンボリックリンク張ってるわけじゃないよね?
0199デフォルトの名無しさん2010/09/17(金) 05:25:15
システムが使う Ruby と自分だけが使う Ruby は別
システム用の Ruby は別途固定のものをインストールする
システム用に rvm をインストールしてもいい
人数分プラス 1 の Ruby がインストールされる状態
ディスクの無駄遣いだな
0200デフォルトの名無しさん2010/09/17(金) 08:25:47
ファイルが存在しないときだけ、新規にファイルを作成する方法を探しています。
unless File.exist?
 File.open('filename', 'w') {|f| f.write(data) }
end
だと、File.exists? と File.open とがアトミックに行われるわけではないので、
File.exist? と Filee.open とのあいだで別プロセスによりファイルが作成される
可能性があります。
これを避けるにはどうしたらいいでしょうか。
0201デフォルトの名無しさん2010/09/17(金) 08:39:57
ファイル作成のアクセスをロックさせることのできるファイルシステムを使う
0202デフォルトの名無しさん2010/09/17(金) 08:44:42
ディレクトリの書き込み権限を自分だけにしてからファイルの存在チェックを行う
ファイルの存在チェックからファイル作成までの間に誰かが割り込む可能性はない
ただし管理者自身のアクセスまたは管理者の許したプロセスやユーザを除く
0203デフォルトの名無しさん2010/09/17(金) 08:49:32
Unix ならこの例みたいに、
ttp://doc.okkez.net/187/view/library/fcntl
Fcntl::O_EXCL | Fcntl::O_CREAT を指定して IO.sysopen すればできるんじゃないかな?
0204デフォルトの名無しさん2010/09/17(金) 08:56:56
>>203
| を処理する間に割り込んで欲しくないのだろ
0205デフォルトの名無しさん2010/09/17(金) 09:08:52
えっ?
0206デフォルトの名無しさん2010/09/17(金) 09:43:55
>>204
節子それメソッドやない、open に渡すフラグや
0207デフォルトの名無しさん2010/09/18(土) 11:21:33
'wn'とか指定できるようにしようぜ
0208デフォルトの名無しさん2010/09/18(土) 21:59:37
ML盛り上がってるなと思ったら<=>のせいか
0209デフォルトの名無しさん2010/09/18(土) 22:11:18
spaceship operator を UFO演算子というのは訳しすぎな気がする。
0210デフォルトの名無しさん2010/09/18(土) 23:27:00
ruby 1.9.2からpsychが付くって宣伝されてるけど
実際、psychって(従来のsyckと比べて)どの辺が素晴らしいんだ?
日本語の情報が少なくてよくわからない
0211デフォルトの名無しさん2010/09/18(土) 23:57:30
>>210
* (今のところ)メンテナ(ひげの山男)にアクセスが取れる。
(syckの_whyは失踪した)
* 対応しているYAMLの仕様が新しいらしい。
* BOM付きUTF8が読めた。(自分で作ることは決してないんだけど)

パフォーマンスの差は知らぬ。
0212デフォルトの名無しさん2010/09/20(月) 01:12:16
psyche?
0213デフォルトの名無しさん2010/09/22(水) 11:31:23
ライブラリ本体をLGPLとかでリリースしたとき、ライブラリをテストするために添付したデータもLGPLとかになる?

…なるか
…なるよな
迂闊に既存のデータをテストデータとして添付するのはまずいか
困ったー
0214デフォルトの名無しさん2010/09/22(水) 20:26:03
ファイルの更新日時なんていつでも変更できると思うんだ…
0215デフォルトの名無しさん2010/09/22(水) 23:58:49
>>186
Javaとかが君を信頼してないから、そう書いたんじゃないか?
確かにK&Rにも同じようなこと書いてあった気がするけどな。
0216デフォルトの名無しさん2010/09/23(木) 11:06:45
拡張ライブラリを書いてるんだが、Ruby1.8と1.9とでコードを分けたい。
そのための方法を教えてください。たぶんマクロかなんかあるんだとおもうけど。
0217デフォルトの名無しさん2010/09/23(木) 11:12:13
Rubyにマクロはありませんが、とりあえず定数 RUBY_VERSION を使ってやりたいことは
できませんか?
0218デフォルトの名無しさん2010/09/23(木) 11:20:14
>>216
バージョン自体は
RUBY_VERSION "1.9.2"
RUBY_VERSION_MAJOR 1
RUBY_VERSION_MINOR 9
RUBY_VERSION_TEENY 1
あたり。
1.9.1と1.9.2はABI互換性があるので、TEENY は 1 のまま。

俺の場合はエンコーディング処理の有無の違いだったので、HAVE_RUBY_ENCODING_H
を使った。
02192172010/09/23(木) 11:21:56
あごめん、「拡張」を読み損ねてた
0220デフォルトの名無しさん2010/09/23(木) 12:06:18
>>217
RUBY_VERSIONという定数はなさそうだけど。
include/ruby-1.9.1/ruby/version.h あたりに載ってるかと思ったけどなかった。

>>218
えーとこれはRubyスクリプトでの話?
今は拡張モジュールの話なので、Cレベルでのやり方を教えて下さい。

#if RUBY_MINOR_VERSION == 9
#endif

とかできないっすかね
0221デフォルトの名無しさん2010/09/23(木) 12:19:41
>>218
>HAVE_RUBY_ENCODING_Hを使った。

よく読んでなかったけど、そんな方法があるのか。
調べたら HAVE_RUBY_VM というのがあったから、これを使うことにした。
ありがとう。

ところでruby1.9のvmに、拡張ライブラリからアクセスしたいんだけど、
vm_core.h とかを読み込んだり、そこに載っている関数を呼び出したりするには
どうしたらいいんでしょうか。
もちろん未公開関数だとか仕様が変更される可能性があるといったリスクは
承知の上でのはなしです。
02222182010/09/23(木) 12:28:32
>>220
version.h 見てこい。
02232182010/09/23(木) 12:32:44
スマン。
version.h は include の外にあるので、公開APIではなかった。

0224デフォルトの名無しさん2010/09/23(木) 23:18:06
あれ、Ruby1.9.2 で require 'spec/my/dir/../../spec_helper' が動かない
File.expand_path 必須?
0225デフォルトの名無しさん2010/09/23(木) 23:19:13
CPUがどんどん速くなってるのにRubyってなんか重くあり続けてるよな
すごく不思議
0226デフォルトの名無しさん2010/09/23(木) 23:31:25
>>225
640KBあればじゅうぶんですよ
0227デフォルトの名無しさん2010/09/24(金) 06:56:34
逆に考えるんだ。CPUがRubyの進化の速度に追いつけていないと、そう考えるんだ。
0228デフォルトの名無しさん2010/09/24(金) 11:03:36
>>224
Ruby 1.9.2から、requireでカレントディレクトリを見に行かなくなってるけど
それと関係ある?
0229デフォルトの名無しさん2010/09/24(金) 12:24:02
>>221
>ところでruby1.9のvmに、拡張ライブラリからアクセスしたいんだけど、
>vm_core.h とかを読み込んだり、そこに載っている関数を呼び出したりするには
>どうしたらいいんでしょうか。

まさに自分も同じことで悩んでいるんだけど、どうしようもなさそう。
そもそもruby/vm.hってほとんど空でなにも定義されてないから、
外部から触るのは無理っぽい。
0230デフォルトの名無しさん2010/09/24(金) 13:20:23
インターフェイスを公開しちゃうと内部を自由に変えられなくなるから
公開したくないのかなぁ。

RubyVMとかRubyVM::InstructionSequenceとかのC実装は公開APIだと
思っていいんだろうか。
0231デフォルトの名無しさん2010/09/27(月) 09:06:39
>>230
将来の実装変更の自由を奪っちゃうからというのもあるだろうし、
まだ拡張ライブラリでどんなAPIが要求されるかの知見が十分に得られてないからってのもあるだろうね
ユースケースを添えてこんなC APIが欲しいってのを出せば、
既存のは将来の互換性、ないものは追加を考えてくれるかもなので、ruby-devに投げるといいよ
0232デフォルトの名無しさん2010/09/27(月) 16:56:08
1.9.2 でだいぶ速くなったのは確認できた
後は AOT コンパイラさえ揃えば不満はないっす
0233デフォルトの名無しさん2010/09/28(火) 03:39:41
>>231
VMにどんなAPIが必要かなんて、VM作ったことのない人にはわかるかよ。
とりあえずVM内部のデータにアクセスできればそれでいい。

それよりRubyのバグ登録って、どこでどういう手順でやればいいの?
当然どっかに説明が書いてあるんだろうけど、どこを見ればいいんだ?
0234デフォルトの名無しさん2010/09/28(火) 08:20:24
http://www.ruby-lang.org/ja/dev/
Redmineに行ったらあとは見りゃわかるだろう……
0235デフォルトの名無しさん2010/09/28(火) 10:00:10
>>234
いやわからんだろ
0236デフォルトの名無しさん2010/09/28(火) 14:00:58
Redmineはゲストだとチケット切れないのかな、アカウント登録してチケット登録するか、
メーリングリストに投げたら登録してくれるんじゃないの

ただし、脆弱性がらみのバグ見つけちゃった!!ってときははpublicなところに登録したらいかんけど
Ruby - SecurityFixProcess - Ruby Issue Tracking System
http://redmine.ruby-lang.org/wiki/ruby/SecurityFixProcess


0237デフォルトの名無しさん2010/09/28(火) 14:27:14
英語圏のgemで中途半端にヤバいかなあというのが一番困る
0238デフォルトの名無しさん2010/09/29(水) 00:04:44
>>234
なるほど、まったくわからん
0239デフォルトの名無しさん2010/09/29(水) 00:10:10
バグなんて2chに投げときゃいいんだよ。
修正コードも合わせて貼るとなおよし。

そうすればもっと報告しやすい環境を整えてくれるよw
0240デフォルトの名無しさん2010/09/29(水) 00:16:39
>>239
> 修正コードも合わせて貼るとなおよし
2chに書かれたコードは取り込めません
0241デフォルトの名無しさん2010/09/29(水) 01:19:05
基本的に、たまたま居合わせたコミッタ(というかyugui氏)が
対応してくれることもあるぐらいの話
0242デフォルトの名無しさん2010/09/29(水) 01:40:33
去年の rubykaigi で、yugui さん含めコミッタは 2ch の ruby スレは見ないけど、
「たまに有益なレスが着いているのを聞いている」ので、
駄レスはいらないけど有益なレスが着いていたら ML に転送してほしい、と言っていたぞ。
0243デフォルトの名無しさん2010/09/29(水) 01:57:22
おおむね平均すると10スレ消費するごとに1レスくらいだがな
0244デフォルトの名無しさん2010/09/29(水) 02:11:16
2chにはられたコードは著作権が不明確なのでうかつに取りこめない。
のかな。
0245デフォルトの名無しさん2010/09/29(水) 02:29:39
>>243
いやもっと低いって
1000に1つもあればいいほう
0246デフォルトの名無しさん2010/09/29(水) 02:30:08
2chの投稿規約のことを考えると
なおのことややこしくなる
そんなコードを取り込むわけには、さすがにいかないのだろう
0247デフォルトの名無しさん2010/09/29(水) 05:48:42
>>245
レスじゃなくてスレだから万に一つって事な
0248デフォルトの名無しさん2010/09/29(水) 06:31:14
>>246
2ch自体がライセンスだからな
メジャーなソフトウェアライセンスと一見競合しそうな以上、スレにコードを貼るのはそもそも危険
0249デフォルトの名無しさん2010/09/29(水) 07:10:28
>>247
ああ
素で読み間違えてた
あなたのおっしゃるとおりです
0250デフォルトの名無しさん2010/09/29(水) 10:38:10
そのうち、ソフトウェアにも「2ch ライセンス」というのがあっていいかも

・当然無保証
・著作権者はなし(誰でも流用してよい)
・バグもあるので、嘘を嘘と見抜けないと・・・・

これじゃあ PDS と同じかな
0251デフォルトの名無しさん2010/09/29(水) 12:38:08
出所がわからんから
うっかり他人の著作権侵害してるかもしれんぞ
0252デフォルトの名無しさん2010/09/29(水) 13:18:24
どこかwebに貼ってから、その引用という形をとればいいんじゃないか?
引用元の著作権まで譲渡するわけにはいかんだろ
■ このスレッドは過去ログ倉庫に格納されています