Rubyについて Part 40at TECH
Rubyについて Part 40 - 暇つぶし2ch1:デフォルトの名無しさん
10/04/26 11:16:19
オブジェクト指向スクリプト言語Rubyについて扱うスレッドです。
お前らケンカすんな。

Ruby Home Page
URLリンク(www.ruby-lang.org)

= 前スレ
Rubyについて Part 39
スレリンク(tech板)

過去スレ・関連スレは >>2-

2:デフォルトの名無しさん
10/04/26 11:17:53
Rubyリファレンスマニュアル刷新計画
URLリンク(doc.loveruby.net)
ライブラリ一覧
URLリンク(doc.loveruby.net)

RubyExtensionProgrammingGuide
URLリンク(i.loveruby.net)
Ruby Hacking Guide
URLリンク(i.loveruby.net)

よくわかるにっき
URLリンク(www.rubyist.net)
URLリンク(www.rubyist.net)
URLリンク(www.rubyist.net)
URLリンク(www.rubyist.net)
URLリンク(www.rubyist.net)
可視性メモ
URLリンク(blade.nagaokaut.ac.jp)
URLリンク(blade.nagaokaut.ac.jp)
YARV without 1.9
URLリンク(www.rubyist.net)
URLリンク(www.atdot.net)
URLリンク(i.loveruby.net)
JSON
URLリンク(json.rubyforge.org)
URLリンク(webos-goodies.jp)
URLリンク(webos-goodies.jp)
YAML
URLリンク(www.ruby-lang.org)
URLリンク(jp.rubyist.net)
URLリンク(www.namikilab.tuat.ac.jp)

3:デフォルトの名無しさん
10/04/26 11:18:34
Ruby/Gtk+
URLリンク(www.unixuser.org)
URLリンク(takeposo.sakura.ne.jp)
URLリンク(ruby-gnome.sourceforge.net)
URLリンク(ruby-gnome.sourceforge.net)
URLリンク(ruby-gnome2.sourceforge.jp)
URLリンク(psux1.kek.jp)
URLリンク(www.rubycgi.org)
URLリンク(ruby.gfd-dennou.org)
URLリンク(www.magicianmaster.jp)

Ruby on Rails
スレリンク(tech板)
URLリンク(jp.rubyist.net)
URLリンク(www.onlamp.com)
URLリンク(kyotosanga.com)
URLリンク(blog.hacklife.net)
URLリンク(www.metadata.co.jp)
URLリンク(japan.cnet.com)
URLリンク(japan.cnet.com)
URLリンク(journal.mycom.co.jp)
URLリンク(www.atmarkit.co.jp)
URLリンク(www.atmarkit.co.jp)
URLリンク(www-06.ibm.com)
URLリンク(itpro.nikkeibp.co.jp)
URLリンク(itpro.nikkeibp.co.jp)

4:デフォルトの名無しさん
10/04/26 11:20:46
      ,―ヽ_(((((_、―
   ,/  ノ       ヽ  ~\
  /   ノ   IPA    ヽ   ~\
/   ノ           ヽ、  `ヽ
|    ノ / ̄\   / ̄~ヽ ヽ    i
|   ノ              |  ノ
\  |  <●>  <●>  (  )
 \ |      | |       i /
    |      /  ヽ       レ
   i     (●_●)      /  
    i、    ,-―-、   ・ /
    i、  <(EEEEE)> ∵/    >>1 スレ立て乙ピョん☆
      i、  \   ./  /
       \   ーー   ,ノ       
  ,,.....イ.ヽヽ、ー-―一ノ゙-、.
  :   |  '; \_____ ノ.| ヽ i
      |  \/゙(__)\,|  i |

5:デフォルトの名無しさん
10/04/26 11:20:55
関連スレ

初心者スレ:
スレリンク(tech板)
Ruby1.9スレ:
スレリンク(tech板)
アンチスレ:
スレリンク(tech板)

GUIスレ:
スレリンク(tech板)
Windowsスレ:
スレリンク(tech板)
Railsスレ:
スレリンク(php板)


6:デフォルトの名無しさん
10/04/26 11:22:01
 ○  >>1 乙 もうお前に用はない 
 く|)へ
  〉   ヽ○ノ
 ̄ ̄7  ヘ/
  /   ノ
  |
 /
 |


7:デフォルトの名無しさん
10/04/27 08:22:09
体が目当てだったのね

8:デフォルトの名無しさん
10/04/27 14:20:16
IronRuby1.0のおはなし

button01 = System::Windows::Forms::Button.new()
button01.Name = "button01"

って感じでボタンを定義してやって
ボタンを押したときに

puts sender.name + "押した!\n" #=> button01ツ可淞つオツつスツ!
puts "button01" + "押した!\n" #=> button01押した!
puts sender.name.chomp + "押した!\n" #=> button01押した!
puts sender.name == "button01" #=> ture

って感じになるんだよな
日本語については、なんか使いずらそうだな

9:デフォルトの名無しさん
10/04/27 14:29:45
よくわからないけどとりあえず芸スポから来ましたオッスオッス

10:デフォルトの名無しさん
10/04/27 16:25:39
ねー質問
Mechanize のクラスを再オープンしてメソッド付け加えたり書き換えたりするライブラリを作ったんだよ

 require 'mechanize'
 require 'mechanize/plus' # ←こんなノリのやつ

Mechanize は GPL だから、そのソースを動的に改変するこれを誰か第三者に公開するときは
やっぱり GPL で公開「しなければならない」よね?

11:デフォルトの名無しさん
10/04/27 16:27:18
動的に改変するってそんな大層なことしてるわけじゃなかった
えーと、GPL なクラスの構造を頼りにしたソースコードってやっぱ GPL だよねみたいなそんな質問

12:デフォルトの名無しさん
10/04/27 16:33:21
説明と解釈に迷うようなら親と同じライセンスにしておくのが超無難

13:デフォルトの名無しさん
10/04/27 16:42:51
お、じゃあMechanizeにメソッド足したりクラス継承したりしてるライブラリはみんなGPLか

14:デフォルトの名無しさん
10/04/27 17:08:21
GPLはそういうライセンス

15:デフォルトの名無しさん
10/04/27 18:25:59
>>14
class Mechanize
end

これが GPL ライセンスに感染するの?

16:デフォルトの名無しさん
10/04/27 20:15:44
それだけなら感染するわけがない

17:デフォルトの名無しさん
10/04/27 20:37:50
Mechanize クラスは既に GPL のもとにあるはずだが

18:デフォルトの名無しさん
10/04/27 23:56:35
GPLは著作権に依拠したライセンスである。
よって、GPLで保護できるのは著作権が発生するコードのみである。

classとendはRubyの予約語だから誰が書いても同じになる。
よって著作権が発生し得ない。

問題はクラス名であるMechanizeだが、クラスMechanizeにアクセスするためには
当然クラス名をコード中に記述することが必要なわけで、ゆえにクラス名自体は
一種のAPIであると考えられる。
ところが、API自体は著作権で保護されないとされている。

以上により、>>15 のコード例には著作権は発生せず、よってGPLで保護される
こともない。

19:デフォルトの名無しさん
10/04/28 00:15:20
GPLはRubyスクリプトライブラリみたいなものにイマイチ合わない気がする

20:デフォルトの名無しさん
10/04/28 00:27:39
再オープンしてメソッドを追加したり上書きしたりするのはGPLの影響を受けないと思う
元のクラスのメソッド定義をコピペして改変した新メソッドで上書きするとGPLに従う必要が出てくると思う
どんだけ改変すれば元のライセンスから逃れられるかは裁判所へGoだ

21:デフォルトの名無しさん
10/04/28 00:32:06
>>20
>メソッドを追加したり上書きしたりするのは
GPLの影響をうけるだろ

22:デフォルトの名無しさん
10/04/28 00:43:32
「元のプログラムから派生したもの」ではないと断言できる場合、
その「派生したものではない何か」は GPL の影響は自動では受けない
たとえば、GPL のプログラムに対して BSD ライセンスのパッチを作ることは可能

クラス再オープンして中に何か書いた時点で元のコードのライセンスの影響を受けるとか怖過ぎるだろ
標準クラスにメソッド追加したら Ruby ライセンス?

23:デフォルトの名無しさん
10/04/28 01:00:34
ソースコードの履歴として追加や上書きされてるわけじゃないから問題ないと思う

24:デフォルトの名無しさん
10/04/28 01:20:49
>>10
動的に~・・・とか問題にできるのはLGPLの話だからなあ
GPLだと再オープンも含めてGPLになるわな

25:デフォルトの名無しさん
10/04/28 08:03:16
>>24
クラスの再オープンに元のクラスのソースが必要になるとは思えない

26:デフォルトの名無しさん
10/04/28 08:32:22
とりあえずGPL1とGPL2は分けて考えるべきだと思った
MechanizeはGPL2
んで、Rubyのクラス再オープンは

URLリンク(www.gnu.org)
> GPLの下で公開されていたプログラムがプラグインを使うとして、
> プラグインのライセンスにはどのような条件がありますか?

のプラグインに該当するような気がする
プラグインはなくても動作するが、プラグインの実行にはGPL2のプログラムが必要
require 'mechanize' した時点でそのプログラムの公開はGPL2限定

27:デフォルトの名無しさん
10/04/28 08:52:09
Mechanize オブジェクトに引数渡してメソッド使って返り値を取得してるだけならセーフ
メソッド追加したらその部分がアウト
Mechanize オブジェクトに extend してもアウト

WWW が Mechanize から無くなったのは、 require 'mechanize' したあとに
他のライブラリがたまたま WWW というモジュールを作って中にクラス作ると
WWW::Mechanize のライセンスに引っかかるからな気がする

28:デフォルトの名無しさん
10/04/28 08:58:14
GPLのライブラリを利用しておきながらGPLを回避しようと考えること自体おこがましい
使いたい便利なライブラリがGPLだったなら、それはもう諦めてGPLとして公開すべき

自分の好みのライセンスを使いたいならゼロから自分で作るか、
好みのライセンスとかち合わないライセンスで公開されている類似のソフトウェアを使う

29:デフォルトの名無しさん
10/04/28 09:10:38
      ,―ヽ_(((((_、―
   ,/  ノ       ヽ  ~\
  /   ノ   IPA    ヽ   ~\
/   ノ           ヽ、  `ヽ
|    ノ / ̄\   / ̄~ヽ ヽ    i
|   ノ              |  ノ
\  |  <●>  <●>  (  )
 \ |      | |       i /
    |      /  ヽ       レ
   i     (●_●)      /  
    i、    ,-―-、   ・ /
    i、  <(EEEEE)> ∵/    どういたしまして
      i、  \   ./  /
       \   ーー   ,ノ       
  ,,.....イ.ヽヽ、ー-―一ノ゙-、.
  :   |  '; \_____ ノ.| ヽ i
      |  \/゙(__)\,|  i |

30:デフォルトの名無しさん
10/04/28 11:28:34
require して agent 使うだけなら大丈夫
Mechanize クラスにメソッド追加したりしたら GPLv2

でいっすか
>>10に対する回答としては「本体と同様 GPLv2 です」だな

31:デフォルトの名無しさん
10/04/28 23:31:04
>>28
適用可能なライセンスを正確に知るための調査、と
GPLを回避しようと考えることの間には随分飛躍があると思うが

32:デフォルトの名無しさん
10/04/29 00:27:18
なんかrubyって衰退する一方だね

33:デフォルトの名無しさん
10/04/29 01:05:54
無駄に盛り上がり過ぎただけだとは思うけどね
Railsのブレイクがなければ、未だに魅力的な言語の印象が先行してそうな気はする
良くも悪くも実務に揉まれたって所じゃないのかな

ユーザにとっては、正直PerlやPythonと同等に魅力有る言語だってことで十分
信者って言われても別にいい。慎ましく使わせてもらうさね

34:デフォルトの名無しさん
10/04/29 01:30:54
>>32
Scalaでいいからね

35:デフォルトの名無しさん
10/04/29 08:16:51
くまくまーの人がScala記事書いてたな

36:デフォルトの名無しさん
10/04/29 08:45:46
Scalaの記事なのでRubyスクリプト部分が不自然でへちょいというなんともアンバランスな

というか使ってみればわかるがScalaは文法が変態だ
馴染みのない概念×変態な文法というハイレベル敷居

37:デフォルトの名無しさん
10/04/29 09:30:29
変態というか関数型なんかOCamlもF#もScalaもみんな同じ
ラムダ式と呼ばれるごく一般的な文法だ
エンタープライズ分野だとオブジェクト指向+関数型が主流になる日が遠くはないので
ラムダ式理解できないと歯が立たないぞ

38:デフォルトの名無しさん
10/04/29 09:38:10
いや、PerlとRuby程度には違う
Scalaはシンタックスシュガーの使いどころ絶対間違ってる
OCamlのほうがなんぼか親しみやすい

39:デフォルトの名無しさん
10/04/29 10:00:15
実務に揉まれた結果Rubyは使用に耐えないと判断され(バレ)ました

40:デフォルトの名無しさん
10/04/29 10:09:31
ラムダ式って文法か?

41:デフォルトの名無しさん
10/04/29 10:13:30
何の話題かと思ったら、はてブで盛り上がってた記事か
URLリンク(wota.jp)

この記事は若干ズレてると思うし、Rubyから乗り換えようという気にはならないけど
ほぼ純粋オブジェクト指向で、静的型付け(コンパイル可能)というのは確かにおいしそうだ

42:デフォルトの名無しさん
10/04/29 11:20:33
純粋オブジェクト指向で静的型付けならC#で十分
明らかに黎明期にありがちな過大評価>Scala
同じ関数型ならF#の方が実用性は高いしC#との連携だって柔軟にできるし
インタプリタ型としても使える
関数型だけで何かしようと思ってるストイックな人には向いてるかもしれんが
Rubyと比較するのはアホもいいとこ

43:デフォルトの名無しさん
10/04/29 11:52:43
F#はWindows2000でインストールできないから嫌い
いやサポート切れてるしワガママなんだけどねw

44:デフォルトの名無しさん
10/04/29 14:53:13
メソッド引数に対する respond_to? 地獄または kind_of? 地獄について本スレとして何かコメントでもあれば

45:デフォルトの名無しさん
10/04/29 15:07:46
口で「Ruby1.9の場合は…」と言っておきながら str.respond_ro?(:force_encoding) とか書く奴は池沼

46:デフォルトの名無しさん
10/04/29 15:12:03
そんなチェック書いたことないし、書く方がおかしいと思う。

47:デフォルトの名無しさん
10/04/29 15:19:41
respond_ro? は寡聞にして知らんが respond_to?(:force_encoding) ならけっこう見るな
URLリンク(www.google.com)
うーん…
URLリンク(www.google.com)

48:デフォルトの名無しさん
10/04/29 15:24:09
case-whenでクラスのチェックは頻繁に使う

49:デフォルトの名無しさん
10/04/30 07:04:45
型チェックとか絶対いやだ。
そんなことするくらいならポリモーフィズムを使う。

50:デフォルトの名無しさん
10/04/30 07:41:06
Rubyに型なんてありませんよ

51:デフォルトの名無しさん
10/04/30 07:44:40
変数に型がないだけで、値には型があるんだが

52:デフォルトの名無しさん
10/04/30 07:59:30
スクリプト上からいわゆる「型チェック」をする機構は無いような気もする
メッセージ応答性と所属クラスのチェックは型チェックとは違うような

53:デフォルトの名無しさん
10/04/30 07:59:51
型チェックをしたいならしたいで
新しい便利メソッドを1つ定義すればいいだけの話
わざわざrespond_toとかkind_ofとかを重ねる必要はないと思う

54:デフォルトの名無しさん
10/04/30 08:02:06
Rubyとしては
「妥当なオブジェクトを引数に指定しなかったユーザーが悪い」
「kind_of? とかするくらいなら受け付けるオブジェクトをマニュアルに書いと毛」
でいい?

55:デフォルトの名無しさん
10/04/30 08:34:21
ユーザーにメソッド名で選択させればいいじゃん?
「引数に何が来るかわからない」なんてのは多くの場合嘘だしさー

def hoge_with_str(str)
 hoge_with_hash(:text => str)
end
def hoge_with_params(*arr)
 keys = [:text, :opt1, :opt2]
 hoge_with_hash(Hash[keys.zip(arr).flatten])
end
def hoge_with_hash(h)
 ...
end

56:デフォルトの名無しさん
10/04/30 08:42:07
>>55
次の日くらいにめんどくさくなって

def hoge(*arg)
case arg[0]
when String then hoge_with_string(arg[0])
when Hash then hoge_with_hash(arg[0])
else hoge_with_array(*arg)
end
end

とか速攻作られそうだな

57:デフォルトの名無しさん
10/04/30 09:27:08
逆回しのリファクタリングを見ているかのよーだ

58:デフォルトの名無しさん
10/05/01 10:07:18
>>1
次スレのテンプレに入れておいてね

RubyからScalaに乗り換えた15くらいの理由
URLリンク(wota.jp)

59:デフォルトの名無しさん
10/05/01 10:53:11
RubyはScalaに負けてしまうん?

60: [―{}@{}@{}-] デフォルトの名無しさん
10/05/01 11:17:43
釣りにはちょっと遅いな

61:デフォルトの名無しさん
10/05/02 00:34:39
釣りとかじゃなくて、>>58の文章読んだところ本当にそう思った

62:デフォルトの名無しさん
10/05/02 00:36:48
くまくまーの人はBerryzからAKB48に乗り換えた15くらいの理由って記事を

63:デフォルトの名無しさん
10/05/02 01:16:31
℃-ute から S/mileage に乗り換えた 15 くらいの理由

64:デフォルトの名無しさん
10/05/02 10:20:03
Windows で require 'iconv' した場合、使われる iconv.dll ってどこにあるもの?

65:デフォルトの名無しさん
10/05/02 10:23:44
ruby\bin

66:デフォルトの名無しさん
10/05/02 10:31:38
1.9.1の場合は bin\libiconv2.dll が読まれるような気がする

Nokogiri なんかは自前で iconv.dll が入ってるけど、これは nokogiri がパス固定で読んでるんだよね
require 'iconv' で使用される iconv.dll と Nokogiri が使用する iconv は別だよね

67:デフォルトの名無しさん
10/05/02 10:39:34
>>66
nokogiri.rb:
 ENV['PATH'] = [File.expand_path(
  File.join(File.dirname(__FILE__), "..", "ext", "nokogiri")
 ), ENV['PATH']].compact.join(';') if RbConfig::CONFIG['host_os'] =~ /(mswin|mingw)/i

ということで、ENV['PATH'] が弄られてる
require 'iconv'
require 'nokogiri'
とすると、Iconv は ruby-1.8/bin/iconv.dll を、
require 'nokogiri'
require 'iconv'
とすると、Iconv は nokogiri/ext/nokogiri/iconv.dll を使う
…ように見える
誰か検証プリーズ

68:デフォルトの名無しさん
10/05/02 19:08:21
>>67
最初に呼ばれた方を使うはず。
ただ、いずれにしろWindowsバイナリ版Gemに同梱されてるiconv.dllは随分古くて日本向けパッチも当たってないもののはず。
このせいで配布されてるActiveScriptRubyでNokogiri使う場合、

Rubyについて Part 36
スレリンク(tech板:262番)
>NokogiriがWindows-31Jエンコーディングをサポートしていない気がする。
>正確にはNokogiriが使っているlibxml2が呼んでいるiconvかもしれないけど。

>>irb -Ks -rrubygems -rnokogiri
>#Shift_JISの範囲外の文字を含んだWindows-31J(=CP932)エンコーディングの文字列
>irb(main):001:0> s="<html><HEAD><TITLE>11①11①</TITLE></HEAD><body></body></html>"
>=> "<html><HEAD><TITLE>11①11①</TITLE></HEAD><body></body></html>"

>#Windows-31JエンコーディングでHTMLパース。失敗。
>irb(main):003:0> Nokogiri::HTML.parse(s,nil,'Windows-31J')
>encoding error : output conversion failed due to conv error, bytes 0x82 0x50 0xC
>2 0x87
>I/O error : encoder error
>=>

あたりの問題を踏むことになる。

69:デフォルトの名無しさん
10/05/02 19:08:45
対処としては
スレリンク(tech板:641番)
>どうもnokogiriのWindows版gemに同梱されてるDLLは
>libXML2の公式サイトからリンクされてる
>URLリンク(www.zlatkovic.com)
>のもののようなので、
>URLリンク(www.zlatkovic.com)
>のDLLの情報等を参考にしつつ、libiconvの1.13に
>森山さんのところのパッチ
>URLリンク(www2d.biglobe.ne.jp)
>をあてたものを
>MinGW/MSYSでビルドして、MSYS環境でそのままビルドすると
>libiconv-2.dllとかしか出来ないので、ビルド時に生成された*.oに
>libiconv-2.dllから抜き出したdefファイルを加えて
>dllwrapでiconv.dllを生成……

みたいにlibiconv-1.13-ja-1相当のiconv.dllを作成してruby/bin配下のiconv.dllを置換で。

70:デフォルトの名無しさん
10/05/02 19:10:58
本来ならActiveScriptRubyとRubyInstallerの中の人、
あとはgemでiconv.dll同梱してるような方々にiconv.dllの更新をお願いすべきなんだろうけど。

それはちょっと敷居が高いよね。

71:デフォルトの名無しさん
10/05/02 20:06:24
あ、いや、Nokogiri の iconv.dll は Windows-31J に対応したは…ず

irb> html = "<title>①1①㌔㍉</title>"
irb> puts Nokogiri::HTML.parse(html, nil, 'Windows-31J').at('title').inner_text
①ツ1ツ①ツ㌔ツ㍉

…ごめんなさい嘘でした

irb> p RUBY_DESCRIPTION
"ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32]"

Nokogiri は gem build 時にここにあるのを wget してパッケージングして gem として配布してる
fURLリンク(ftp.xmlsoft.org)
自力で dll を作ってるわけではないから、パッチ示されてもどうにもならない
たぶんそこまでサポートしきれないんだろうし、それは仕方ないよね

偏見だけど、RubyInstaller を使う海外の人は iconv.dll が強まっても嬉しくないと思うんだ
いざとなったら MinGW を自力で入れてコンパイルできるし

だから ActiveScriptRuby の中の人に頑張って欲しいのだけど、
現在でも「追加物」が多いってのにさらに増やすのは流石に

72:デフォルトの名無しさん
10/05/02 20:07:55
MinGWを入れるってなんだ
MSYSね

73:デフォルトの名無しさん
10/05/02 20:12:07
iconv-ja という gem パッケージを作る
require 'iconv/ja' でジャパニーズフレンドリーなインターナショナルコードセットコンバセーションライブラリが

74:デフォルトの名無しさん
10/05/02 20:20:39
結論としては「おまえらRuby1.9.1使え」ということでよろしいですか

75:デフォルトの名無しさん
10/05/02 20:25:25
>>74
いや、iconv.dll に Windows-31J を使わせなければなんとでもなる
事前にわかってさえいれば、泥臭く回避は可能

irb> puts Nokogiri::HTML.parse(html, nil, 'Shift_JIS').at('title').inner_text.tosjis

irb> puts Nokogiri::HTML.parse(html, nil, 'CP932').at('title').inner_text.tosjis
①1①㌔㍉
irb> puts Nokogiri::HTML.parse(html, nil, 'Windows-31J').at('title').inner_text.tosjis
①ツ1ツ①ツ㌔ツ㍉
irb> puts Nokogiri::HTML.parse(html.toutf8, nil, 'utf-8').at('title').inner_text.tosjis
①1①㌔㍉

76:デフォルトの名無しさん
10/05/02 20:32:34
そんなのやだよ

77:デフォルトの名無しさん
10/05/02 20:46:49
Nokogiriに限ればひげの山男に言えば対応してくれそうな気もする。
最近Windows環境も手に入れたみたいだし。


78:デフォルトの名無しさん
10/05/02 20:48:19
>>73
以前同じ動機で>>69の人の
>.とりあえず今回生成したiconv.dllは
>.需要があるかどうか何とも言えないけどうpっておきます。
>.URLリンク(www1.axfc.net)

だけ入ってるgem作ったんだけど、
gemucutter(当時)にup出来なくて投げた覚えが。

自分のところではiconv.dll上書きすれば動くのわかってるから
あんまり頑張る気がしないというか。

79:デフォルトの名無しさん
10/05/02 20:52:33
>>77
・ActiveScriptRubyの人(arton氏?)にiconv.dllのパッチ版を入れてもらう
・ひげの山男の人にiconv.dll同梱をやめてもらう
でrequire順で結果が変わることなく(日本人的には)おおむね望ましい結果になるのかな

80:デフォルトの名無しさん
10/05/02 21:00:18
日本向けっていうかWindows向けじゃないのか<iconvのパッチ

81:デフォルトの名無しさん
10/05/02 21:05:42
いや、「りなっくすにほんごかんきょうぱっけーじ」とか入れると日本用パッチ入りiconvが入ったりする…はず

82:デフォルトの名無しさん
10/05/02 21:17:50
そもそも iconv に全世界が利用してるというオフィシャルの気概がないのが悪い(逆切れ

日本語レガシーエンコードのぐちゃぐちゃに対応し切れないような感じだったと風聞
日本人でも「これが一応決定版もう何もしなくていいですこれだけやって」というようなパッチ出せないしなあ

83:デフォルトの名無しさん
10/05/02 21:40:03
海外の人は現状で困ってないだろうからなあ
処理速度遅くして日本人のために頑張ってください、というのはなかなか

84:デフォルトの名無しさん
10/05/02 23:29:26
>>78
gemcutterはなにかと不安定なのでRubyForge推奨

85:デフォルトの名無しさん
10/05/03 10:45:43
というか、ActiveScriptRuby か RubyInstaller か OneClickInstaller を使っている限り、
gem が自前で iconv.dll を持つ必要はないんだよね
Iconv 用の iconv.dll がくっついてるはず(または別途自力で用意するはず)だから

libxml2/libxslt のサイトには「iconv.dll も必要ですこれをダウンロードしてね」とか書いてあるけど、
$PATH にあればなんでもいいはず
配布もとの iconv.dll を libxml2.dll と同じディレクトリに必ず入れなければならないわけではない(少なくとも libxml2.dll に関しては)
あれは iconv.dll が用意されてない環境向けの文言であって、 iconv.dll が常にくっついてる Windows 用 Ruby には不要だ

と、思う

86:デフォルトの名無しさん
10/05/03 10:55:57
ライセンス上セットにしておくことが必要なのかも

87:デフォルトの名無しさん
10/05/07 10:43:44

整数から浮動小数点への暗黙の型変換ってRubyではどう実装されているのでしょうか?
例えばT_FLOAT型を期待している関数にT_FIXNUMを渡すと、そのままではエラーとなります。
関数の入り口で全部方をチェックして変換しているのでしょうか?


88:デフォルトの名無しさん
10/05/07 10:55:42
> 整数から浮動小数点への暗黙の型変換
そんなもんあったっけ

89:デフォルトの名無しさん
10/05/07 10:58:52
3/2
=> 1

(3 / 2) + 0.5
=> 1.5

90:デフォルトの名無しさん
10/05/07 11:00:33
2じゃないのかよw

91:デフォルトの名無しさん
10/05/07 11:08:39
Cでも2じゃないだろ?

92:デフォルトの名無しさん
10/05/07 11:08:50
irb> 1.coerce(0.5)
[0.5, 1.0]


93:デフォルトの名無しさん
10/05/07 11:14:08
>>89
これは暗黙の型変換と言っていいのか

94:デフォルトの名無しさん
10/05/07 11:20:22
def +(o)
 b, a = if o.instance_of?(self.class) then [o, self] else corce(o) end
 a.c_function_add(b)
end

こんな感じ?
C の機能関係ない Ruby 的処理の部分で完結してるん?

>>93
1 + 0.5 は TypeError を起こしてもいいはず
起こさないんだからどっかで型変換
ユーザーが明示的に行ってないんだから暗黙

1 + 0.5 が 1 で 1 +. 0.5 が 1.5 になるべきかもしれない

95:87
10/05/07 11:20:24
ごめんなさい、そう言う事じゃないです。
関数引数としてT_FLOAT型を期待する関数が
T_FIXNUM型を受け取った場合内部的にどういう動作をするのか、
と言うことです。
C/C++みたいにT_FLOAT型からT_FIXNUM型の暗黙の型変換が
起きるのではないかと予想しているのですが。

96:デフォルトの名無しさん
10/05/07 11:31:11
C/C++では、引数としてT_FLOAT型を期待する関数が、
T_FLOAT型からT_FIXNUM型の暗黙の型変換を起こしたりはしません。

97:デフォルトの名無しさん
10/05/07 11:37:31
ソース見るのが一番よくわかると思うけど、単に関数ごとにチェックして変換してる

98:デフォルトの名無しさん
10/05/07 11:38:56
おきない
C++のテンプレートみたいなものだと思えばいい

99:デフォルトの名無しさん
10/05/07 11:59:11
「変換」って単にメソッドの戻り値の型が違うだけなのだが
戻り値の型が、レシーバーや引数の型と違うことが変換なのか?
RubyならRubyらしく考えないと理解できんぞ

100:デフォルトの名無しさん
10/05/07 12:01:05
rubyのCのソース読むときの話だろ?

101:デフォルトの名無しさん
10/05/07 12:54:45
え、そうなの?

102:87
10/05/07 14:45:51
>>97

関数に入ったら引数(arg)のチェックを

float a;

if (TYPE(arg) == T_FIXNUM)
  a = FIX2INT(arg);
else if (TYPE(arg) == T_BIGNUM)
  a = NUM2LONG(arg);
else if (TYPE(arg) == T_FLOAT)
  a = RFLOAT_VALUE(arg)
else
  // エラー

こんな感じで行っているのでしょうか?

>>100-101
拡張ライブラリの話です。
Rubyは何が飛んでくるかわからないから、
全部チェックするのがセオリーですか?


103:デフォルトの名無しさん
10/05/07 14:49:21
しなくて済むならもちろんチェックしなくてもいいよ

104:デフォルトの名無しさん
10/05/07 15:10:31
全部チェックできるもんならやってみろやオラみたいな

基本マニュアルで縛るよね
指定以外の変なもの寄越したほうが悪い

105:デフォルトの名無しさん
10/05/07 15:12:05
拡張ライブラリは自作ラッパーとセット
拡張ライブラリだけを配布するといろいろ頭が痛くなるので、Rubyインタフェースを併用して縛る

106:デフォルトの名無しさん
10/05/07 15:28:27
Ruby が遅い理由を垣間見た気がする

107:デフォルトの名無しさん
10/05/07 17:00:00
>>102
rb_Float関数(rubyでいうFloat関数)を使えばT_FLOATなVALUEを返してくれるんで
普通はこれを使えばいいと思う。
rb_Floatがやってることはそれと大体いっしょ。

108:デフォルトの名無しさん
10/05/07 22:44:44
1.9.2用ブランチ切られたのね。


109:87
10/05/07 22:49:29
>>107
ありがとうございます。オリジナルマクロで大分書いてしましたが
標準の方が良いのでそれでやってみます。
大分理解出来るようになりました。

110:デフォルトの名無しさん
10/05/08 09:22:37
>>87
NUM2DBL()というマクロ、あるいはその実体のrb_num2dbl()という関数使え

111:デフォルトの名無しさん
10/05/09 06:11:11
IRBのDebianパッケージってなんで未だにreadline5にリンクしてんの?
readline6で作ってほしい。


112:デフォルトの名無しさん
10/05/09 15:00:26
ソースから入れるのは絶対嫌だっていうポリシーなら仕方ないが、
そうでないなら、Rubyはソースから入れるほうが不便がない。



113:デフォルトの名無しさん
10/05/09 15:22:22
SSLとreadlineだけ気をつけてあとは自前コンパイルしてホームにインストール

114:デフォルトの名無しさん
10/05/09 16:34:25
rvmで楽しよう。


115:デフォルトの名無しさん
10/05/09 18:15:39
ソースから入れる場合だけど、1.8.7-p249(1.8.7の最新版)をインストールする場合は、
string.cのinspectのバグを修正してからmakeする点に注意ね。
------------------------
2645c2645
< if (ismbchar(c) && p - 1 + (len = mbclen(c)) <= pend) {
---
> if (ismbchar(c) && p + (len = mbclen(c)) <= pend) {
------------------------

UTF-8な文字列をinspectすると末尾のマルチバイト文字列が文字化けするので。
これ直さないとけっこう不便なんだ。


116:デフォルトの名無しさん
10/05/10 16:28:54
あのね mes というメソッドを作ったのです

mes(1, 2)
mes([1,one], [2, two])
a = [[1,one], [2, two]]; mes(a)

の3つをユーザーフレンドパークな感じで受け付けたいです
one と two の部分はオブショナルで、 mes(1, 2) は mes([1, nil], [2, nil]) と同一視したいです

def mes(*args)

とメソッド書いた時点で引数の処理がめんどくさいことに気づきました
なんかいい方法ないですか
3タイプの引数すべてを、配列の配列である [[1,opt1], [2, opt2]] 形式に揃えて each で回したいです

117:デフォルトの名無しさん
10/05/10 16:36:27
# 引数を mes する
#   mes(1, 2)
#   mes([1, one], [2, two])
#   mes(*[[1,one], [2, two]])
def mes(*args)
arr = args.map{|e| e.kind_of?(Array) ? e : [e, nil]}
arr.each do |x, opt|
 …

「配列は*つけて渡せ」とマニュアルに書いておく

118:デフォルトの名無しさん
10/05/10 16:49:41
>>116
そーゆーのは mes([a, b]) としたときに

  [[a, nil], [b, nil]] のつもりなのか
  [[a, b]] のつもりなのか(b は opt)

自動判別するのが超めんどいのでやめようぜ、ということになってる
「データ列としての配列使いたいときはユーザー側で*つけれ」という指示が真っ当


119:デフォルトの名無しさん
10/05/10 21:51:04
拡張ライブラリ書いてます。
C++側で Transform:: set (float* matrix) という関数があるのですが、
これをRubyに持っていくと、どういう名前がいいでしょうか。
個人的には Transofrm#matrix がいいと思うのですが
C++とRubyで名前が違ってしまうのが今ひとつ。
基本的にRubyに持っていくときは set/get は削除しています。


120:デフォルトの名無しさん
10/05/10 22:15:56
変換行列? どういう使い方(C++で)なの?


121:デフォルトの名無しさん
10/05/10 22:35:42
MLに投げた方が良いかもだが、あっちのアカウント取るのが面倒いので、ここで失礼。

RubyのトランクのBigDecimal/math
atan()に1.08を入れると戻り値の有効桁数が足りない

return pi.div(neg ? -2 : 2, prec) if x.infinite?
return pi / (neg ? -4 : 4) if x.round(prec) == 1
* x = 1 / x if inv = x > 1
x = (-1 + sqrt(1 + x**2, prec))/x if dbl = x > 0.5

irb(main):004:0> BigDecimal("1")/BigDecimal("1.08")
=> #<BigDecimal:9940ce4,'0.9259259259 25926E0',16(24)>
irb(main):005:0> BigDecimal("1").div(BigDecimal("1.08"), 30)
=> #<BigDecimal:9957468,'0.9259259259 2592592592 5925925926E0',32(44)>
irb(main):006:0>

ここで桁数が足りなくなるのね。
分母と分子の有効桁数が少ないときに、出力の有効桁数の指定が無い場合は、
適当にちょんぎるのは、言語仕様的には、正解でありましょう。
1/3が来たら、メモリを全部使い切りました、では悲しい。
はい、
x = BigDecimal("1").div(x, prec)
で、なおります。
y = tan(atan(x, prec), prec)
で、ループを廻して、xとyの値を比較していてたら、たまたま発見しました。
あ、トランクにはtanはないのだけど、sinとcosの組み合わせで間に合わせました。
tanはパッと見、収束が遅いようなので後回し。
続く


122:デフォルトの名無しさん
10/05/10 22:36:39
あと、expの絶対値が大きくなると、戻って来ないのよね。
exp(a*b+c) = exp(a)**b * exp(c)
を使うと、幸せになれるかも。(ん十倍の威力で)
んで、powerも全部の桁を計算してご苦労さんなんだが、integerではないのだから、そんなに気張らなくても..
とは、思います。
expと同じ要領でやると、実行速度がずいぶん速くなります。
(Rubyのコードからpowerをcallするんだが、それでもとても速い。
ソースを書き換える手もあるのだけど、コンパイルするのがめんどくさい。
そもそも、その手の労力を厭わない人は、こっちに来なくて良いでしょ)

logは、exponentが負の場合、
を書いてあるから、正で2桁以上の場合、を追加すると良いですね。
expとlogが実用範囲内になると、実数**実数が(実用的に)使えるようになります。

今のメンテナの方は、前の方よりアクティブのようで、
ここ1年で随分よくなった感じがします。
.rbでの動作が安定して、.soにして貰えると、実行速度がさらに上がってさらにうれしい。

さて、おいらは、gammaも書いたし、erfの逆関数も書いたので、しばらくお休みするべ。
てか、動作確認が一番コストがかかる訳なんだが。


123:デフォルトの名無しさん
10/05/10 23:11:15
>>117
> arr = args.map{|e| e.kind_of?(Array) ? e : [e, nil]}
これ不要。eachのブロック引数で展開させれば済む。

$ ruby -e '[1, 2].each {|(x, opt)| puts "#{x.inspect}=>#{opt.inspect}"}'
1=>nil
2=>nil
$ ruby -e '[[1, "one"], [2, "two"]].each {|x, opt| puts "#{x.inspect}=>#{opt.inspect}"}'
1=>"one"
2=>"two"


124:デフォルトの名無しさん
10/05/10 23:40:55
わー便利と思えないような機能を紹介するのはやめよう

125:デフォルトの名無しさん
10/05/10 23:45:43
いや便利かどうかで言えばふつうに便利だと思うぞ
微妙に紛らわしいうえに nil がどこから来てるんだか不明なだけで

126:デフォルトの名無しさん
10/05/11 04:13:57
なんか読んでて微妙に不安だよね

irb> a, b = 1
irb> p b
nil

これと理屈は同じなんだろうけどさ
あとカッコで括るご利益はなんかあったっけか

127:デフォルトの名無しさん
10/05/11 07:21:11
rubyinstaller-1.8.7-p249-rc2.exeをインストールしたんだけどirbが
あほかー!ってレベルで重たいんだけど何なんですかね。
ま、Windowsはたまにしか使わないからどうでもいいっちゃどうでもいんですけど。

128:デフォルトの名無しさん
10/05/11 07:24:12
irb --noreadline

129:デフォルトの名無しさん
10/05/11 11:09:25
>>128
軽くなった!ふしぎ!

130:デフォルトの名無しさん
10/05/11 11:14:34
FAQ

131:デフォルトの名無しさん
10/05/11 11:26:40
rubyinstaller なんて使うから…

132:デフォルトの名無しさん
10/05/11 11:32:02
初心者スレではもう何も言わずActiveScriptRuby使えって言われてるなw

133:デフォルトの名無しさん
10/05/11 11:34:18
readline の dll を手作業で入れ替えてもいいんだっけか

134:デフォルトの名無しさん
10/05/11 11:55:57
4スレくらい前から常識

135:デフォルトの名無しさん
10/05/11 14:11:04
>>123見て思い出したんだけど、each_pair って使うのあまりよくない?
collection.each do |k, v| なら collection が配列の配列でも平気だけど、
collection.each_pair do |k, v| だと Hash 限定になるよね

あんまり原理主義振り回す気はないけど、Hash と配列の配列っておおむね同じに扱われてもいいよね

136:デフォルトの名無しさん
10/05/11 18:24:27
1.8.7あたりから(1.9からのバックポート?)
Hash[ 配列の配列 ] # => Hash
ができるようになってる
が、マニュアルには載ってないっぽい


137:デフォルトの名無しさん
10/05/11 21:35:16
>>136
俺もこの前知った
けっこう前から入ってるんだよな
もっと早く知ってれば無駄に inject 使わなくて済んだのに

138:デフォルトの名無しさん
10/05/11 21:42:11
>>135
ハッシュはキーと値のペアをバッグにしたものと同じように扱える。
ペアのバッグ

139:デフォルトの名無しさん
10/05/11 21:51:16
配列の配列からは

Hash[*arr_in_arr.flatten]

だろ
inject わざわざ使わなくてもいいと思うんだが

140:デフォルトの名無しさん
10/05/11 22:00:34
>>139
キー列からハッシュ作る場合の話。
keys.inject({}) {|h, x| h[x] = ...; h }
よりも
Hash[ keys.map {|x| [x, ...] } ]
のほうが記述が短くてしかも速い。

ちなみに flatten して * 展開は一番遅い。


141:デフォルトの名無しさん
10/05/11 23:54:54
>>140
興味深いな。手元で試さないで訊いて申し訳ないんだが、
何桁程度の要素数から有為に遅くなる感じなんだろうか?

3~4桁なら大差ないだろうと今までflatten使ってたが、
もっと少ない領域で遅くなりだしたりする?

142:デフォルトの名無しさん
10/05/12 10:16:47
>>141
よっぽど古いマシンで大量のデータでループ、とかじゃなければ
気にしなくていいレベル。

かなり古いLinuxで 1..100000 から to_s への Hash 生成でベンチ。
map して Hash[] は 0.77、inject({}) は 0.87、map 結果を flatten して * は 1.15


143:142
10/05/12 10:22:12
おっと、1.8.7 です。
1.9 最新は Linux 古すぎてビルドできんかった orz

去年 7 月頃の 1.9.2dev が残ってたんでやってみたら、
flatten 版は SystemStackError になったw

144:デフォルトの名無しさん
10/05/12 18:08:18
松江市の食品会社が「Rubyラーメン」発売、売り上げの一部でRuby支援
URLリンク(itpro.nikkeibp.co.jp)

松江・・・

145:デフォルトの名無しさん
10/05/12 18:44:34
聖地巡礼のお土産にどうぞ
ってことかw
まるきり宗教だなwww

146:デフォルトの名無しさん
10/05/12 18:47:31
早速注文
URLリンク(www.amazon.co.jp)

147:デフォルトの名無しさん
10/05/12 19:03:09
アニメで町おこしみたいなもんだろww

148:デフォルトの名無しさん
10/05/12 19:07:02
売り上げが寄付されるとは益々宗教くさい

149:デフォルトの名無しさん
10/05/12 19:24:50
>>148の考える宗教の概念が興味深い

150:デフォルトの名無しさん
10/05/12 20:24:31
どんな味なのかまったく想像できんw

151:デフォルトの名無しさん
10/05/12 20:26:37
想像だけど、醤油ラーメンっぽい味じゃないかな

152:デフォルトの名無しさん
10/05/12 20:33:04
ダシは何でとってるんだろう

153:デフォルトの名無しさん
10/05/12 20:34:46
麺にRubyスクリプトが記述されてたりするの?

154:デフォルトの名無しさん
10/05/12 20:37:36
なにこのスラドくさい流れ

155:デフォルトの名無しさん
10/05/12 20:46:14
Matzさん何かコメントを。

156:デフォルトの名無しさん
10/05/12 21:19:09
みなさんもっとお布施を

157:デフォルトの名無しさん
10/05/12 22:35:26
スパゲティもラーメンも麺の絡まり具合という意味では大差ないよな

158:デフォルトの名無しさん
10/05/12 22:48:40
ラーメンはちぢれてて絡まる可能性がさらに高いのもあるからな

159:デフォルトの名無しさん
10/05/12 23:18:51
ruby-devを見ると、log遅いじゃん、
と思ってるのは、おいらひとりだけでは無いようですね。
バグでは無いので、1.9.2には間に合わないようでして、
御用とお急ぎの方は、以下を参考に自己責任でどうぞ。
部分的にちょこっとの修正だけど、全文載せます。
興味の無い方は、跨いでお通りくださいませ。
def log(x, prec)
raise ArgumentError, "Zero or negative argument for log" if x <= 0 || prec <= 0
return x if x.infinite? || x.nan?
bdf = BigDecimal.double_fig
n = prec + bdf
flg = false
if (expo = x.exponent) < 0
x = x.mult(BigDecimal("1E#{-expo}"), n)
flg = true
elsif expo > 2
expo = expo - 2
x = x.mult(BigDecimal("1E#{-expo}"), n)
flg = true
end
続く


160:159
10/05/12 23:20:19
one = BigDecimal("1")
two = BigDecimal("2")
x = (x - one).div(x + one,n)
x2 = x.mult(x,n)
y = x
d = y
i = one
while d.nonzero? && ((m = n - (y.exponent - d.exponent).abs) > 0)
m = bdf if m < bdf
x = x2.mult(x,n)
i += two
d = x.div(i,m)
y += d
end
if flg
y.mult(two, n).add(log(BigDecimal("10"),n).mult(BigDecimal(expo.to_s), n), n)
else
y.mult(two, n)
end
end


161:デフォルトの名無しさん
10/05/12 23:26:05
これ?
URLリンク(redmine.ruby-lang.org)

162:デフォルトの名無しさん
10/05/12 23:36:44
なんか上にもいたけど、なぜここに貼る

163:159
10/05/12 23:37:42
うん、それ。
リクエストがあれば、expの高速版も公開できると思う。

164:デフォルトの名無しさん
10/05/12 23:37:43
なんか1.9の文字エンコード情報を持つやつ苦労してるみたいだな
Yuguiさんがツイッターで嘆いてたぞ
混乱が出ても根本的な解決を選択してほしいのだが

165:デフォルトの名無しさん
10/05/12 23:38:27
>>159
ここにそのまんま貼っちゃうとライセンス的に取り組みが面倒になるようなので
gistあたりを使うのが吉。

……といっても、それぐらいだったらredmineに貼るかw

166:デフォルトの名無しさん
10/05/12 23:39:44
あぁ、迷惑だったらもう来ない。
さようなら。

167:デフォルトの名無しさん
10/05/12 23:47:54
ここはメソッドチェーンの使い方を競うだけのスレなのに場違いだろ

168:デフォルトの名無しさん
10/05/13 00:53:42
ネタだと思ったらマジですか

169:デフォルトの名無しさん
10/05/13 08:44:55
>>159
貼り付けたコードの著作権は 2ch に移譲されるので
無闇に貼り付けない方がいいぞ、取り込むのが難しくなる

170:デフォルトの名無しさん
10/05/13 08:50:51
2ch もうすぐ潰れるから権利主張の主体が無くなる

171:デフォルトの名無しさん
10/05/13 08:53:06
redmine を使いたくて解説通り gem install rails とやったら
動いてんだか死んでんだかさっぱりわからない状態で5分経過
rails みたいな巨大パッケージのインストールのコマンドライン解説は全員詳細表示つきで書け
いろんな意味で不安でいまさら止められないじゃないか

>>169
2ch側が権利を主張するどうこうではなく
「Rubyのソースコードの一部の権利が他者に渡っているようですが問題ないのですか?」
という外部指摘の可能性をどうするかという話だな
わざわざ爆弾抱える必要もないわけで

172:デフォルトの名無しさん
10/05/13 08:56:30
痴呆症のように何度も同じ話しなくていいよ

173:デフォルトの名無しさん
10/05/13 09:18:41
>>171
-v


174:デフォルトの名無しさん
10/05/13 15:02:46
>>169
> 2ch側が権利を主張するどうこうではなく
> 「Rubyのソースコードの一部の権利が他者に渡っているようですが問題ないのですか?」
> という外部指摘の可能性をどうするかという話だな
> わざわざ爆弾抱える必要もないわけで

法に無知なバカをいちいち相手にしていたらキリないわ

175:デフォルトの名無しさん
10/05/13 15:14:23
>>174
じゃああなたが全コストを負って迎撃して説明してください
そういう人は大歓迎です

176:デフォルトの名無しさん
10/05/13 15:20:16
正しいことさえしていれば何も言わなくてもみんなわかってくれる…
そう考えていた時期が俺にもありました

177:デフォルトの名無しさん
10/05/13 20:34:17
>>159
URLリンク(svn.ruby-lang.org)

178:デフォルトの名無しさん
10/05/13 20:36:46
>>111
readline6はGPLv3だからじゃないか

179:デフォルトの名無しさん
10/05/13 21:16:05
v3の嫌われっぷりは異常

180:デフォルトの名無しさん
10/05/14 14:49:01
V3はオタクが持ち上げ過ぎなだけ

181:デフォルトの名無しさん
10/05/14 19:19:12
Vを大文字でV3と書くと「ブイスリー」としか読めなくなるので避けたほうがよいがどうでもいい

Redmine をインストールしたがこのマシンでは超重い
なんか残念だ
いやまあうちでは Rails アプリケーションはどれも重いんですけどね

182:デフォルトの名無しさん
10/05/14 20:12:18
ほんとにどうでもいいなw
ちなみにどの程度のスペック?


183:デフォルトの名無しさん
10/05/14 20:35:32
$ cat /proc/cpuinfo | grep -E "name|MHz"
model name : Celeron (Mendocino)
cpu MHz : 400.907
$ cat /proc/meminfo | grep -E MemTotal
MemTotal: 124696 kB
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 8.10
Release: 8.10
Codename: intrepid
$ ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-linux]


184:デフォルトの名無しさん
10/05/14 20:42:35
しまった 8.10 か、ずいぶん古いなこれ

…アップグレードめんどい
バックアップめんどい

185:デフォルトの名無しさん
10/05/14 21:55:55
>>183
それってひょっとしてCeleron300Aをオーバークロックして450MHzで動かしてたりしてたような時代の代物か。
……12年前?

186:デフォルトの名無しさん
10/05/14 22:05:37
そんな古くねえよ

えーと…(サイトを調べて)1999年5月発売。ちょうど11歳だね。
このころのIBMのデスクトップPCは物持ち良過ぎて困る

Celeron400MHzの64MBの8GBが本体だけで当時17万ですってよ奥様
128MB増設済みを5年位前に中古で3000円で買ったのに

何の話だっけ

うん、えーと、メモリ128MBだと Rails では即スワップ突入してとても遅いよとかそんな報告

187:デフォルトの名無しさん
10/05/14 23:59:18
とても有用な報告だ

188:177
10/05/15 00:19:34
途中で切れてた
>>159
r27747以降でもやっぱり遅い?

189:デフォルトの名無しさん
10/05/15 00:31:51
>>181
ヴイスリャー

190:デフォルトの名無しさん
10/05/15 03:31:31
URLリンク(store.shopping.yahoo.co.jp)
ruby on matsue

191:デフォルトの名無しさん
10/05/16 00:08:09
>>180
ライダーマンdisってんのか、ぁあ?

192:デフォルトの名無しさん
10/05/16 03:54:42
PHPerだけどRubyラーメン食べてみた - あっきぃ日誌
URLリンク(d.hatena.ne.jp)

URLリンク(f.hatena.ne.jp)
URLリンク(f.hatena.ne.jp)
URLリンク(f.hatena.ne.jp)
URLリンク(f.hatena.ne.jp)
URLリンク(f.hatena.ne.jp)

Rubyラーメンうまそーだな、おい・・・
画像見てたら腹減ってきた

193:デフォルトの名無しさん
10/05/16 04:15:06
Rubyとの関係が解らん
初音以外

194:デフォルトの名無しさん
10/05/16 10:43:45
Ruby.開発者.出身地.ご当地ラーメン
=> 松江ラーメン

195:デフォルトの名無しさん
10/05/16 11:14:53
開封すればするほどRubyと関係無くなっていく

196:デフォルトの名無しさん
10/05/16 11:18:38
Rubyロゴの海苔くらいは同封すべきだな

197:デフォルトの名無しさん
10/05/16 11:35:16
そうだねえ、プリント海苔の出番のはずなんだが

198:デフォルトの名無しさん
10/05/16 11:56:13
野球カードみたいなの入れるとか
ライブラリには載せてない隠しクラスをこっそり書いておくとか
そのぐらいの商魂は見せてほしいね

199:デフォルトの名無しさん
10/05/16 12:08:13

 ・ Rubyロゴの印刷された海苔を2枚入れとく
 ・ 標準/添付クラスのチートシートカード(全10枚、2枚ランダム封入)
 ・ Rubyコア開発者ブロマイド(裏には自己紹介兼ねた短いRubyスクリプトつき)
 ・ コンピュータ完動祈願の松江の神社のお守りが入ってる(サーバに貼れるシール1枚同封)



200:デフォルトの名無しさん
10/05/16 12:08:57
Rubyチョコ新発売!
組込、添付クラスライブラリのAPIカード付き。
APIカードを集めてRubyウィザードになろう!

どうよ。企画→俺。駄菓子メーカー→やおきん

201:デフォルトの名無しさん
10/05/16 12:12:21
萌えRuby

各種クラスライブラリを擬人化
Stringたん
Arrayたん

202:デフォルトの名無しさん
10/05/16 12:16:07
カードくらいは入れるべきだったな。
そもそもターゲットがいわゆるマニアなんだから、
カードをコンプリートするまで買うやつ多いだろ。

203:デフォルトの名無しさん
10/05/16 12:24:50
Matzのターン!中田さんを召還!とか出来るのなら箱買いしてもいい

204:デフォルトの名無しさん
10/05/16 17:37:59
>>199
出雲大社のなら欲しい

205:デフォルトの名無しさん
10/05/16 18:54:34
class C ; attr_accessor :data ; end

describe "C" do
it "changes data from {} to {'k' => 'v'}" do
@c = C.new
@c.data = {}
lambda{ @c.data.update({'k' => 'v'}) }.should change(@c, :data).from({}).to({'k' => 'v'})
end
end

----------------
$ spec c_spec.rb
F
1)
'C changes data from {} to {'k' => 'v'}' FAILED
data should have initially been {}, but was {"k"=>"v"}
.c_spec.rb:7:


ピキッ

206:デフォルトの名無しさん
10/05/16 19:12:43
>>205
rspec 2.0.0.beta.8でもそうなった。

Rspec::Matchers::Change#matches? の中で、ブロックを呼ぶと
@beforeの中身自体が変更されてしまうね。
これはバグといっていいんじゃないだろうか。

@before = evaluate_value_proc

@before = evaluate_valu_proc.dup
にすれば一応解決ではあるが、チケット出すべきか……



207:デフォルトの名無しさん
10/05/16 19:14:39
チケットあった。
URLリンク(rspec.lighthouseapp.com)

208:デフォルトの名無しさん
10/05/16 19:37:18
うーん、テスト漏れだね

rspec本家でもこのへん漏れるか
テスト大事だなー

209:デフォルトの名無しさん
10/05/17 09:37:21
プライベートメソッドのテストは @obj.__send__(:mes) と書くしかないよね?
っていうかプライベートメソッドのユニットテストは書くよね?

210:デフォルトの名無しさん
10/05/17 09:45:06
プライベートメソッドは公開API内部から呼ばれるんだから、
そのAPI内でそのプライベートメソッドを呼ぶようなAPIテストパターンを(全部)書くべきという考え方はある
プライベートメソッドのテストを100個書いてもAPI内の状態で失敗しないことをぜんぜん保証しない

がぶっちゃけめんどいし rspec -fs とかするとメソッド動作一覧みたいにできるので
とりあえずユニットテストはプライベートメソッドでもあらかた書くほうが間違いないんじゃねみたいな感じ
API内で呼んだときの動作をどんだけテストするかはAPIのテストを書く人に任せるということで
いやたいてい同じ人だけど

プライベートメソッドの __send__ はヘルパーメソッドにされることが多い印象

211:デフォルトの名無しさん
10/05/17 10:19:48
プライベートメソッドのテストを書かなきゃ…という規模になると、
それはライブラリを作るためのライブラリが必要な状況に近い。
とうなると設計の見直しが要るかなとそわそわする。

212:デフォルトの名無しさん
10/05/17 10:37:03
Ruby のプライベートメソッドの92%は private ではなく # :nodoc: の使用が適切です

213:デフォルトの名無しさん
10/05/17 12:03:00
そもそもprivateってRubyではどんな意図でつけるもんなの?

214:デフォルトの名無しさん
10/05/17 14:28:36
レシーバを省略したメソッド呼び出しでしか呼ばせなくしたいメソッド

215:デフォルトの名無しさん
10/05/17 22:59:11
private までテストするって、もはやテスト自体が目的になってるな
目的と手段を混同するのはよくある過ちだが

216:デフォルトの名無しさん
10/05/17 23:26:02
>>215はまだRubyの考え方に慣れてないようだ
Rubyのプライベートメソッド化は実質何も行わない
いまだにC++やJavaの論理を持ち出す人がいて困る

217:デフォルトの名無しさん
10/05/17 23:32:25
せっかくprivateにしてるのになんちゃらevalとか使って
ユーザがアクセスしやがるから困る

218:デフォルトの名無しさん
10/05/17 23:39:02
irb> class C ; private ; def hidden ; "hidden!"; end ; end
irb> p C.new.hidden
NoMethodError: private method `hidden' called for #<C:0xb74fc358>
irb> p C.new.__send__(:hidden)
"hidden!"
irb> class C ; def call_hidden ; hidden ; end ; end
irb> p C.new.call_hidden
"hidden!"

まあテストするかどうかはそのメソッドがprivateかどうかで決めるべきではないな

219:デフォルトの名無しさん
10/05/17 23:41:36
そもそも>>213への回答がない時点で「privateメソッドだから」などという理由は存在し得ない

220:デフォルトの名無しさん
10/05/17 23:44:33
微視的とはこのことだなw

221:220
10/05/17 23:45:38
>>218へのレスね。スンマソ

222:デフォルトの名無しさん
10/05/17 23:50:36
private にしておいてよかったと思うことは特にないな
マニュアルに表示されないようにするなら nodoc があるし

223:デフォルトの名無しさん
10/05/18 00:22:21
Rubyでのprivateにはトルクスねじ的な警告の意味があるような。

224:デフォルトの名無しさん
10/05/18 00:28:59
>>216
むしろ逆に聞きたいだが、何のためにprivateメソッドをテストするの

225:デフォルトの名無しさん
10/05/18 00:30:48
>>218
そりゃわざわざ__send__まで使って
(クラスCの作者が隠した)privateメソッドにアクセスしようとするユーザが悪い

この場合テストすべきはcall_hiddenであって、hiddenではない

226:デフォルトの名無しさん
10/05/18 01:45:45
初心者スレ落ちそうなので立てて下さい・・・頼む
立てられない・・・

227:デフォルトの名無しさん
10/05/18 04:44:21
>>213に誰も答えない件について

要は用途上のコンセンサスがないんだな

228:デフォルトの名無しさん
10/05/18 05:01:40
テストの種類や粒度についても特に考慮されてないと思います
最終的に「製品」に付属して提供するテストはパブリックメソッドの機能テストだけでいいよそりゃ
インストール時に1回しか実行されないんだからね

229:デフォルトの名無しさん
10/05/18 05:04:52
Ruby 初心者スレッド Part 37
スレリンク(tech板)

230:デフォルトの名無しさん
10/05/18 06:10:44
>>225
この場合、クラスCを再オープンしてcall_hiddenを定義したのはユーザーだと思う

231:デフォルトの名無しさん
10/05/18 07:52:13
>>227
1つ下の>>214ですでに書かれている件について

232:デフォルトの名無しさん
10/05/18 09:29:25
それは形式的なものだろ
何のためにそれを選ぶのかについての答えがねえ

233:デフォルトの名無しさん
10/05/18 12:44:36
>>214ではないが、レシーバを省略するということは、
そのインスタンス内からしか呼び出せないということなのだが。
その縛りを入れることが目的という回答を否定させても困るだろ。

234:デフォルトの名無しさん
10/05/19 08:42:59
不完全にしておよそ正しくないプログラミング言語小史
URLリンク(www.aoky.net)

> 1995 オーストラリアがモヒカン刈りの戦士とティナ・ターナーの疾走する砂漠になるという漠然
>とした啓示の実現を回避するため、ユキヒロ・“Mad Matz”・マツモトがRubyを作る。この言語は
>後に本当の作者であるデビッド・ハイネマイヤ・ハンソン(DHH)によりRuby on Railsと改名された。
>[MatzがRubyという言語を作ったというくだりは間違いだから次に改訂するときに取った方がいいよ DHH]

はは、わろすw

235:デフォルトの名無しさん
10/05/19 10:40:00
自作のautotest(というかautospec)用スクリプトを .autotest ファイル内で require すると
autosepc してもファイル更新待ちにならずに即終了する

自作のスクリプトのどっかでエラーが起きてるんだと思うんだが、
バックトレースとかが一切表示されないのでわけがわからない
このへんを表示させる方法はある?

236:デフォルトの名無しさん
10/05/19 11:19:16
begin
end

237:デフォルトの名無しさん
10/05/19 13:01:32
>>236
無理だと思うなあ

238:デフォルトの名無しさん
10/05/19 23:57:33
たしかに.autotestやらはエラーでなかったかもしれないね。
ruby .autotestしてみたら。中身はRubyスクリプトなんだし。
その前にそのrequireするファイルをエラーでないか試してみるほうがさきだけど

239:デフォルトの名無しさん
10/05/20 03:54:44
ruby -d

240:デフォルトの名無しさん
10/05/20 07:42:22
↓このdo~endを使ったブロックの書き方のメリットが解らない。braceを使った場合より3文字もタイプ数が多い。
Enumerable#each do |e|
 # 何か
end

↓しかもこうなるとキモイw
Enumerable#each do |e1|
 Enumerable#each do |e2|
  Enumerable#each do |e3|
  # 何か
  end # e2 ←コメントで必死(笑)
 end # e2 ←コメントで必死(笑)
end # e1 ←コメントで必死(笑)

↓やっぱこうだよな。
Enumerable#each{ |e1|
 Enumerable#each{ |e2|
  Enumerable#each{ |e3|
  # 何か
}}}

241:デフォルトの名無しさん
10/05/20 07:50:01
>>240
Enumerable#each{ |e1|
 Enumerable#each{ |e2|
  Enumerable#each{ |e3|
  # 何か
end; end; end

でいいんでね?フォントにもよるが、} より数えやすいかもよ?

242:デフォルトの名無しさん
10/05/20 07:50:51
>>241 訂正
Enumerable#each do |e1|
 Enumerable#each do |e2|
  Enumerable#each do |e3|
  # 何か
end; end; end

243:デフォルトの名無しさん
10/05/20 07:55:02
>>241
Lispの使用歴が長いと括弧なんて数えないらしいぞ。
非Lispユーザーさん「Lispは括弧が多くてとっつきにくいんだよねぇ。」
Lispユーザーさん「括弧?そんなものあったかなぁ。」
非Lispユーザーさん「えっ?」

244:デフォルトの名無しさん
10/05/20 08:44:42
まあ好きにしろとしか言えんのだが


○○
○○○
○○○○
○○○○
○○○
○○


という形と


○○
○○○
○○○○
○○○○


なら前者のほうが若干シンメトリック気味でいいんじゃね、という気分はある
ブロック終端をまとめて書くとがくんと急に閉じる感じがなんかちょっと

245:デフォルトの名無しさん
10/05/20 08:47:30
>>244

h = {k1 => v1,
   k1 => v2,
   k1 => v3}

と書くと怒るタイプ

h = {
   k1 => v1,
   k1 => v2,
   k1 => v3
}

こう書く

246:デフォルトの名無しさん
10/05/20 09:20:07
Lisp でもあとで何か追加する可能性がある場所では閉じ括弧の前で改行しておくことがあるよ
(list
(foo 1)
(bar 2)
(baz 3)
;; ここに値が追加されるかも
)
みたいに。 Structure Editing すればいいんだけどこちらの方が楽なことが多いし。
Lisper が普段括弧を気にしないのは Structure Editing と auto indent の関係もあると思う。
と、これは do ~ end と { ~ } とは関係ないか。

ブロックに do ~ end を使うのは他の場所で { ~ } を使っていることとも関係あると思う。
Hash の { ~ } とブロックの括弧が同じでもいいのか、別にした方が読みやすいか、とか。
言語によっては記号を多用して {< ~ >} としてみたり、 << ~ >> みたいなリテラルがあったりもするけど
ASCII で使える記号は少ないので、できるだけ簡単な記号は残しておきたいとか。
まあこのあたりは言語の作法にしたがっておけばいいんじゃないかと思う。

247:デフォルトの名無しさん
10/05/20 09:50:58
普段はdo endを使うことで、
ここぞという時のブレースを浮かせたいココロがあるんじゃないかね
File.openとかcatch~throwのブロックは特にブレースを使うって規約を聞いたことがある

タイプ量は許容範囲だと思う
っていうか普通のキーボードだとブレースの入力にはシフトキーを使うわけで
実質1文字の差しかない

248:デフォルトの名無しさん
10/05/20 10:12:11
前田さんの規約に従ってる

249:デフォルトの名無しさん
10/05/20 11:19:53
買います?

プログラミングRuby 1.9 ?言語編?: Dave Thomas with Chad Fowler and Andy Hun
URLリンク(www.amazon.co.jp)

250:デフォルトの名無しさん
10/05/20 11:27:49
やっと出るのか……

251:デフォルトの名無しさん
10/05/20 11:42:04
オライリーの「プログラミング言語Ruby」とどっちがいいの?

252:デフォルトの名無しさん
10/05/20 11:47:14
ピッケル本の1.9版か。

オライリーの方はrubyの組み込みかたとかの解説あったっけ?

253:デフォルトの名無しさん
10/05/20 12:02:40
>>252
ない。フラナガンのやつは言語仕様が中心で、
MRIとか処理系の話はメインでない

254:デフォルトの名無しさん
10/05/20 12:42:14
>>245
v3 の後ろに , がないとめっちゃ怒るよ。俺は。

255:デフォルトの名無しさん
10/05/20 12:55:11
前田さんの規約狂ってる

256:デフォルトの名無しさん
10/05/20 12:58:40
>>254
きめえ
そんなこと言うと配列の最後に要素がひとつ省略されているとみなして nil 挿入するぞ

257:デフォルトの名無しさん
10/05/20 22:07:01
>>255
どの辺が?
言うほどおかしな箇所は見当たらなかったが


258:デフォルトの名無しさん
10/05/21 00:20:02
JRuby良さげ

259:デフォルトの名無しさん
10/05/21 07:14:43
URLリンク(shugo.net)

* ソースコードの整形
** インデント
プログラムを読みやすくするため、インデントを適宜行う。インデント
幅は2とする。また、インデントにはスペースのみを使用し、タブは使用
しない。(環境によりタブ幅が異なるため。)

> 環境によりタブ幅が異なるため。
はーいせんせー、わかりませーん。
タブを使えばバイナリレベルで同じソースファイルを各個人好きなタブ幅で表示できるので、
その方が開発者は快適なのではないでしょうかー。

260:デフォルトの名無しさん
10/05/21 07:20:35
URLリンク(shugo.net)
** 一行の桁数
> 一行の桁数は最大80桁までとする。
はーいせんせー。流石に80桁は狭すぎるんじゃないでしょうかー。
メリットがわかりませーん。

261:デフォルトの名無しさん
10/05/21 07:25:07
** コメント
> メソッド定義の中にはコメントは記述しない。(コメントが必要だと思わ
> れるようなコードにはリファクタリングを行う。) ただし、クラス・モ
> ジュールやパブリックなメソッドには仕様をRDocス タイルで記述する。

はーいせんせー。実際の開発ではパフォーマンスとかの兼ね合いでいつもリファクタリングできるとは限りませーん。
必要なコメントは書くべきだとおもいまーす。
あと、コメントとドキュメントはまったく違うものでーす。Ruby的にはおんなじコメント文ですけどー。
そこんとこちゃんと切り分けて説明すべきではないでしょうかー。

262:デフォルトの名無しさん
10/05/21 07:28:38
> * メソッド呼び出し
> メソッド呼び出しの引数リストには括弧を付ける。ただし、引数がない
> 場合は、括弧を省略する。また、printやputsやpの 場合は、引数の括弧
> を省略してもよい。

> * return
> メソッドの値を返す場合は、必ずreturnを使用する。 また、returnの括
> 弧は省略する。

はーいせんせー!メソッドの引数は括弧つけなきゃだめなのに、どうしてreturnには括弧は省略するんですかー。
なんかポリシーが破綻してるきがしまーす。

と言う感じで、こんなのWebに公開すべきじゃない。

263:デフォルトの名無しさん
10/05/21 07:31:33
前田さん?と言う方には面識はないが、なんかふるーい、いにしえのC言語をあれこれを引きずり過ぎてるという印象。
Lispとかやったこと有るのかな?
RubyはLispだよ。

264:デフォルトの名無しさん
10/05/21 07:35:06
他人のしかも3年前の規約に突っ込みとかずいぶん暇そうだな

265:デフォルトの名無しさん
10/05/21 07:39:00
だってニートだもん。
とまぁ、書き方は気に障ったかもしれないので誤ります。
けど、この規約に色々と疑問点があるのは事実。
出来れば修正してほしい。


266:デフォルトの名無しさん
10/05/21 07:55:13
横に長いメソッド定義は単純に読みづらいので、改行可能な位置で適当に改行しておくというのがメソッドチェーンしがちなRubyには合うとは思うんだが、じゃあ何文字が適当かというとうまい根拠もないんだよな

267:デフォルトの名無しさん
10/05/21 08:00:42
実際のプロジェクトに適用する際には、このコーディング規約をカスタマイズして用いることを推奨する。

268:デフォルトの名無しさん
10/05/21 08:03:03
メソッド10行超したら機械的にでも分割しとけ
ただし単純要素列挙でメソッド呼ぶ形式のcaseは許可

case x
when cond1 then mes1
when cond2 then mes2
when cond3 then mes3
when cond4 then
  ……
when cond5 then mes5

とか20個くらい続くハブメソッド

269:デフォルトの名無しさん
10/05/21 08:11:39
前田さんの規約は万人が遵守すべきものとは思わないが、
Ruby界では権威のある人だけに、こういうのを公開してると
影響が大きいんだよな。


270:デフォルトの名無しさん
10/05/21 08:14:36
「守ったほうが実は得するもの」と「ポリシーがない場合に従う例」を混ぜこぜにしてるのが難点

271:デフォルトの名無しさん
10/05/21 08:15:50
ここで騒いでも、1ビットたりとも改善されないことだけは確かだ

272:デフォルトの名無しさん
10/05/21 08:16:14
>>268
分割したメソッドはプライベートにすべきですか?
というような話がちょっと上の議題の根っこだった気もする

273:デフォルトの名無しさん
10/05/21 08:17:27
>>259
インデントを全部タブでするつもりならそういう規約もなくはないと思う。
スペースがまざると地獄。
>>260
画面幅 80 桁ならまずどこでも表示できる。
Ruby のコードは横に長くなるという気持ちはわかる。
そのためのインデント幅 2 でもあると思う。
>>261
コメントよりもコードで、というのは Smalltalk あたりからの文化だと思う。
あと、あとで直そうっていうのは往々にして直されないので
最初から綺麗に書こうという方が規約としてはいいんじゃないだろうか。
ドキュメントとコメントの話は別の話だというのは確かに。
>>262
return はメソッドじゃない。
p, puts, print は統一感がないけれど慣習。戻り値を使うかどうかで分ける人もいる。
return 必須は大人数だとこっちの方が便利なこともあるんだろう。

前田さんは net/ftp の作者で昔からの Rubyist だよ。
Sather とか他の言語の話をしているのもちらほら見掛ける。
あと、この規約と Lisp 文化はまったく関係ない。

274:デフォルトの名無しさん
10/05/21 08:19:59
>>272
Ruby の private は「ユーザーに使ってほしくない内部メソッド」の意図を示さないんだってば
そういう意図を示す機能は Ruby には無い
RDoc の nodoc がやや近いが

275:デフォルトの名無しさん
10/05/21 08:20:07
最近の一番大きな仕事はIPAのRuby言語仕様だろうね。




276:デフォルトの名無しさん
10/05/21 08:20:43
規約なんて局所的に宗教論争を抑えるくらいの現実的効能しかないのに
それを肴に宗教論争おっぱじめるとかもうね…

277:デフォルトの名無しさん
10/05/21 08:21:29
肴としてつつく程度なら楽しいけど、叩き始めるとか、もうね。


278:デフォルトの名無しさん
10/05/21 08:34:29
>>274
普通のクラスレベルでは「基本的にユーザーに触ってほしくないメソッド」
くらいの機能と理解しておいていいんじゃないかなあ。
特殊な使い方はとりあえず置いておいて、
send とかを使って呼ぶのはもうわかっててやっているものとして。
そもそもの話として、 Ruby の private は
Smalltalk の private カテゴリくらいのゆるいものだから
Java とかの言葉で説明しようとすると破綻すると思う。

279:デフォルトの名無しさん
10/05/21 08:40:04
実際問題としてどっかのライブラリの private のメソッドを __send__ で呼ぶ羽目になることはけっこう多い
ぜんぶ public でいいじゃんと思うのだが
というか private とかあるからみんなマニュアル書かねえんだよ

280:デフォルトの名無しさん
10/05/21 08:41:44
>>274
いや、意図は示せるんじゃね。
ユーザがどうするかは別で

281:デフォルトの名無しさん
10/05/21 08:53:47
「マニュアル書きたくないからこっから下全部 private」というのはなくもないわけでもなく

282:デフォルトの名無しさん
10/05/21 08:56:32
>>273
>コメントよりもコードで、というのは Smalltalk あたりからの文化だと思う。

間違いではないですが、一方でメッセージパターン(シグニチャ)に続いてコメントを書くことも
一般には推奨されています。念のため。

URLリンク(www.druby.org)
“メソッドの先頭にコメントを書くことで、コードから読み取れない重要な情報を伝えるようにしよう”

283:デフォルトの名無しさん
10/05/21 09:30:06
>>279
>実際問題としてどっかのライブラリの private のメソッドを __send__ で呼ぶ羽目になることはけっこう多い
これホント?
何かがおかしいと思うのだけど。


284:デフォルトの名無しさん
10/05/21 12:11:39
>>277
いや、実際前田さんの趣旨としては
「ゼロベースから作るよりはなにか叩き台でもあった方が」ぐらいの気持ちじゃね?
ver0.0.1的な。

不幸なのは他にそういうのを公開してる人が出てこなかったのと、
前田さんが有名人だったがためにver0.9.8ぐらいの受け取り方をされてることで。

285:デフォルトの名無しさん
10/05/21 12:19:32
他にもいくつかあるよー

286:デフォルトの名無しさん
10/05/21 12:38:03
>>283
一度だけprivateメソッドを外から呼び出したことがあったが例外だな

287:デフォルトの名無しさん
10/05/21 13:17:19
とりあえずはーいせんせーがこの上なくムカついた

80文字とかなまぬるいから78文字にすべき

288:デフォルトの名無しさん
10/05/21 13:18:07

前田さんてまだ生きてんの?

289:273
10/05/21 20:57:10
>>282
おっとそうでした。 Smalltalk Best Practice Pattern は一応読んだのに
Intention Revealing Message ばかり頭に残っていた。
SBPP だと、そういうコメントの例として
「メソッドの依存関係」とか「変更の理由」が挙がってた。
あと見掛けるのはアルゴリズムの出典論文とかかなあ。

290:デフォルトの名無しさん
10/05/21 22:37:43
>>288
URLリンク(twitter.com)

291:デフォルトの名無しさん
10/05/22 00:01:19
>>265
修正して欲しいならこんなところで煽ってないでメールするなりなんなりしろよ

>なんかふるーい、いにしえのC言語をあれこれを引きずり過ぎてるという印象
お前これ言いたかっただけだろ

292:デフォルトの名無しさん
10/05/22 00:10:09
個人的なコーディング規約なんだから
修正しろと言われても困ると思うのだが・・・

293:デフォルトの名無しさん
10/05/22 00:18:46
小人閑居してなんとやら

294:デフォルトの名無しさん
10/05/22 00:45:38
むしろ修正した規約をまとめてwebに出して,こっちの方がいいだろ? と
問いかけたらどうだ.ほんとに良いなら基準になるし,ダメならダメ出しか
無視されて終わり.どっちに転んでも損無し.

295:デフォルトの名無しさん
10/05/22 01:30:56
批評される側に立つなんてとんでもない!

296:デフォルトの名無しさん
10/05/22 07:02:03
Wikipediaみたいにコーディング規約を議論しつつ良さげなのを決めるのはどうかとおもったけど、
戦争が始まってしまうか、人が寄り付かなくなるな…

297:デフォルトの名無しさん
10/05/22 07:02:44
訂正
×Wikipediaみたいに
○Wikipediaみたいなシステムで

298:デフォルトの名無しさん
10/05/22 08:40:06
>>296
気取るつもりはないけど典型的な自転車置場の議論
URLリンク(0xcc.net)
だからなあ。

多分タブ幅を決めようとしたあたりで頓挫

299:デフォルトの名無しさん
10/05/22 10:14:20
>>262
>はーいせんせー!メソッドの引数は括弧つけなきゃだめなのに、どうしてreturnには括弧は省略するんですかー。
>なんかポリシーが破綻してるきがしまーす。

これまったく意味がわかんないんだけど、メソッドとreturnでなんでポリシーを同じにしなきゃいけないの?

300:デフォルトの名無しさん
10/05/22 10:20:18
未だにreturnを書くかどうか悩む

301:デフォルトの名無しさん
10/05/22 10:23:45
Cの規約では、うっかりretrunとかしてしまった時にコンパイルエラーにできる、
という理由で、returnの値はカッコで囲まない、としてるものが多いな。

ruby では理由にならないが。

302:デフォルトの名無しさん
10/05/22 10:24:23
しかしつまらんスレだな

303:デフォルトの名無しさん
10/05/22 12:12:36
returnはメソッドじゃないのにカッコで囲む理由がないだろ

304:デフォルトの名無しさん
10/05/22 13:50:01
はい燃料投下きました~

305:デフォルトの名無しさん
10/05/22 14:03:25
前田さんの規約だけどRails対応版ってないの?
モデルやコントローラ内の記述順序の方針を参考にしたい

306:デフォルトの名無しさん
10/05/22 14:06:48
そもそもRubyでreturnに括弧つけるとエラーになる場合もある
タプルを返す時に

307:デフォルトの名無しさん
10/05/22 14:48:25
return自体をめったに書かない。


308:デフォルトの名無しさん
10/05/22 23:59:43
少なくともメソッドの最後には絶対に書かない

309:デフォルトの名無しさん
10/05/23 03:31:30
悪臭

310:デフォルトの名無しさん
10/05/23 10:47:18
ここの規約で return 書くって書いてあったから書くことにした。
URLリンク(shugo.net)

少なくとも意識的に返り値を返したい場合は return 書いたほうがいいと思う。
ソース読んで「偶然返ってるだけなの?それとも返したい意図があるの?」っていうのが分かるしね。

少なくともコードがドキュメントとか言って得意げな奴らは書くべきだ。

311:デフォルトの名無しさん
10/05/23 11:00:39
ライブラリ作ってると非常に厄介な問題
どういうつもりでその値を返してるのかわからんからね
意味のある値を返してることを示すためだけの専用クラスに包んで返すパターンとかも見かける

312:デフォルトの名無しさん
10/05/23 11:06:33
でも実際は現場でreturn書く奴はほとんどおらんよ。
もっともらしい思想を貫くのは勝手だけど、仕事で使うなら周に合わせないと駄目。

313:デフォルトの名無しさん
10/05/23 11:08:58
道理でみんなScalaに逃げちゃうはずだよ
こんな液状化したあやふやな地盤じゃコード書きたくないだろう

rubyは1画面に収まるシェルスクリプト++的に使うのがベストだね

314:デフォルトの名無しさん
10/05/23 11:14:35
rubyで大規模開発となるとRails必須だから。

315:デフォルトの名無しさん
10/05/23 11:14:39
おまえがそう思うのならおまえはそうすればいいだろう。

316:デフォルトの名無しさん
10/05/23 11:46:59
なぜRubyではreturn必須にしなかったのだろう
理由というか、思想について知っている人がいれば教えて欲しい

317:デフォルトの名無しさん
10/05/23 12:12:00
Perlを踏襲、じゃないの?


318:デフォルトの名無しさん
10/05/23 12:25:32
lisp とかの流れでは?

319:デフォルトの名無しさん
10/05/23 12:28:03
単純に冗長だからとか
return 必須じゃ tap も魅力半減

320:デフォルトの名無しさん
10/05/23 12:31:20
tap関係ないぞ

321:デフォルトの名無しさん
10/05/23 12:36:05
>>316
Lisp の影響だと思っていた。
ちなみに、 RnRS Scheme だと副作用を目的に呼び出す手続きの戻り値は
不定ということになっていて、ある処理系が偶然返してきた値に依存するような
プログラムは可搬性がないということになっている。
戻り値に意味があるかどうかはドキュメントで決められている。
最後の式の値がそのまま返るというのは関数型言語では普通。
Scala もこうなる(メソッドの型が Unit だった場合は自動的に () が挿入されたりするけど)。
こちらの流儀だと基本的に return は書かない。
他の言語だと、例えば Smalltalk は ^ を使って値を返さないと self が返ることになっている。
この流儀なら、意味がある値を返すときは return を書く。

322:デフォルトの名無しさん
10/05/23 13:19:49
Cも実はreturn不要

323:デフォルトの名無しさん
10/05/23 13:28:29
return 書けなやつらは、mapメソッドとかに引き渡すブロックにも return を書いてるのか?

324:デフォルトの名無しさん
10/05/23 13:33:48
メソッドとクロージャの違いとかわからない人は書き込まないで下さい

325:デフォルトの名無しさん
10/05/23 13:42:16
>>322
戻り値の型が存在して、return なしに関数の終わりに到達した時の値は未定義だぞ >C

> If the } that terminates a function is reached, and the value of the function call is used by the caller, the behavior is undefined.

値を使わなければ問題は無いが

326:デフォルトの名無しさん
10/05/23 13:59:43
>>324
クロージャの概念がわからないやつは書き込むなよ

327:デフォルトの名無しさん
10/05/23 14:16:17
returnしたらどうなるかやってみりゃいいじゃん

328:デフォルトの名無しさん
10/05/23 14:25:42
へー、こんな挙動するんだ。知らなかった。
そもそもクロージャ書くときなんてタイプ数減らしたいんだから書こうと思ったことすらなかったけど。

irb(main):004:0> (1..10).select {|i| (i % 2 == 0)}
=> [2, 4, 6, 8, 10]

irb(main):005:0> (1..10).select {|i| return (i % 2 == 0)}
LocalJumpError: unexpected return
from (irb):5
from (irb):5:in `select'
from (irb):5:in `each'
from (irb):5:in `select'
from (irb):5
from :0


329:デフォルトの名無しさん
10/05/23 14:28:56
メソッドは自分以外の誰かに呼ばれる処理なんだから、戻り値に意味があるか無いかはどこかで示さなければならないよね。
別にそれを示すのはドキュメントでもいいと思う。
コードがドキュメントとか得意げに言う奴は今の Ruby の仕様のだと return 書いといたほうがいいと思う。(意図をコードに残せ)

とは言え、Rubyってそういう文化圏じゃないよな。
「わー、動いた、パチパチ」で十分許される世界なんだから、もともと誰もまともなドキュメント書く気なんて無い。

330:デフォルトの名無しさん
10/05/23 14:30:23
クロージャだとnextで値返すんだっけ

331:デフォルトの名無しさん
10/05/23 14:31:07
(1..10).select {|i| break (i % 2 == 0)} => false

332:デフォルトの名無しさん
10/05/23 14:32:56
reuturnの有無でここまで議論する情熱があるなら、
wordpressみたいなソフトでも作ってくれよ
生産性のない情熱だなw

333:デフォルトの名無しさん
10/05/23 14:35:45
>>329 インタプリタの意図がそもそもおまえにはわかっていない

334:デフォルトの名無しさん
10/05/23 14:37:34
インタプリタというより、スクリプト言語と言った方がいいな
「素早く書けて、すぐに動かせる」がスクリプト言語の条件であり目的だな

335:デフォルトの名無しさん
10/05/23 14:40:31
>>329
本当にコードに語らせたいのなら、
戻り値に意味があるかどうかはある程度メソッド名からわかるようにしないと駄目じゃね。
中身を読まないと意味がわからないのはメソッド名がわるい。
例えば、標準で使われているメソッド名と同じ名前のものは
だいたい似たようなインタフェースにするとか。
あまり突き詰めても仕方ないから、俺はそれはコメントに譲るけど。

>>330
ドキュメントの「手続きオブジェクトの挙動の詳細」のあたりを参照。


336:デフォルトの名無しさん
10/05/23 14:58:23
Rubyは日本で生まれたのに、
Railsが日本で生まれなかった理由がなんとなくわかるな

337:デフォルトの名無しさん
10/05/23 15:01:31
まあそもそもみんな Rails 好きかというとそういうものでもないんだけどね

338:デフォルトの名無しさん
10/05/23 15:42:28
RailsというよりActiveSupportとかActiveRecordが好き

339:デフォルトの名無しさん
10/05/23 19:06:39
それって他の言語のフレームワークにはない機能なの?

340:デフォルトの名無しさん
10/05/23 23:12:43
Rails以外でRuby使う機会無いんだけど。価値も無いし。

341:デフォルトの名無しさん
10/05/23 23:22:27
確かに ActiveRecord はとてつもなく便利だ。
あれこそ動的言語の良さを一番よく伝えてる気がする。
静的型言語ではなかなかああは出来ない。

342:デフォルトの名無しさん
10/05/24 00:19:08
>>259
>>‎ 環境によりタブ幅が異なるため。
> はーいせんせー、わかりませーん。
> タブを使えばバイナリレベルで同じソースファイルを各個人好きなタブ幅で表示できるので、
> その方が開発者は快適なのではないでしょうかー。

その疑問は、タブとスペースまぜてリリースするアホがいなくなれば俺はまだ許せるんだが

343:デフォルトの名無しさん
10/05/24 09:18:58
あとデフォルトのハードタブの幅8がちょっと大きすぎるという問題が

344:デフォルトの名無しさん
10/05/24 09:29:44
アセンブラ使ってたときはタブ8が快適だった
CとかJava使ってるときはタブ4が快適だった
PythonとかRuby使い始めてタブ2が快適になった
これは進化だと思う

345:デフォルトの名無しさん
10/05/24 11:16:09
ほう、ならばインデントはもう要らないな…

346:デフォルトの名無しさん
10/05/24 12:09:12
スペースを混在させずにタブだけ使うとしても、
文の後にくっついてるコメントはタブ幅の設定によっては開始位置が揃わないよね
あれイラッとくる

347:デフォルトの名無しさん
10/05/24 12:11:07
行頭以外でタブは使わない

348:デフォルトの名無しさん
10/05/24 13:13:18
Ruby 使ってるとスペース使っちゃうのでタブ使わなくなった


349:デフォルトの名無しさん
10/05/24 15:23:36
>>345
ワンライナーの時代と聞いて

350:デフォルトの名無しさん
10/05/24 19:49:28
そのうちタブじゃなくて1スペースしか空けなくなるだろう

351:デフォルトの名無しさん
10/05/24 21:00:51
インデントやらスペースやらは全部フォーマッタ任せだわ。
餅つきみたいにぺっったん!ンパッンパッ、ぺっったん!ンパッンパッ、ぺっったん!
と言う感じ。
# どういう感じだ(w

352:デフォルトの名無しさん
10/05/24 21:02:52
3タブが最高とか言ってた奴とかほんとセンス無いと思ったわ。ってか、あれ誰だったっけ?

353:デフォルトの名無しさん
10/05/24 21:08:08
>>352
>3タブが最高とか言ってた奴とかほんとセンス無いと思ったわ
そう思った理由は?

354:デフォルトの名無しさん
10/05/24 21:09:08
正直そこら辺はどうでもいいな
2でも3でも4でも5でも何がどうにかなるわけじゃない

355:デフォルトの名無しさん
10/05/24 21:49:08
>>353
主観はどうでもいいからコードのインデントなんぞ素直に長いのに巻かれとけって意味でセンス無いと思った。
さらにハードタブとか使われるとdiffも取りにくくなったりするし。
個人でやるなら別にいいんだが、多数に薦めて混乱を助長する所がありえんと思った。

俺もローカルでコードリーディングするときには好きな設定に変えてるけど、みんなでやるときはみんなに合わせないと駄目だろ。

356:デフォルトの名無しさん
10/05/24 21:52:59
> さらにハードタブとか使われるとdiffも取りにくくなったりするし。

ソフトタブだとdiff取りやすいのか?

357:デフォルトの名無しさん
10/05/24 21:54:54
diff -b とか -w とか知っとけ。


358:デフォルトの名無しさん
10/05/24 21:58:33
イヤだと思うなら、使わなければいい
相手も勧める程度で、強要してるわけじゃないんでしょ

そういえば、一時期試してみてたw
確かにendが揃って良い感じなのは分かったが、
デファクトスタンダードの2を上回る優越性は無いなあという感触

359:デフォルトの名無しさん
10/05/24 22:02:47
個人でやるとか好きな設定として3タブを叫んでいる人はいたけど規約にしてた人はいたかなぁ
tdiaryもいま見たらインデント2タブ4の混在インデントだった

360:デフォルトの名無しさん
10/05/24 22:03:41
>>357
そんなの使うかよ。
svn diff か redmine の diff 使うし、チームの人間にそんなしょーもないオプション強制させんな。ボケ。

>>358
迷惑撒き散らしてるだけなのに「美的感覚持ってる孤高のマイノリティ」みたいな感じで騒いでるのがイラつくんだよ。

361:デフォルトの名無しさん
10/05/24 22:06:10
あれはネタだろう
イラつくとかどんだけ沸点低いんだ

362:デフォルトの名無しさん
10/05/24 22:10:26
あーくだらね

363:デフォルトの名無しさん
10/05/24 22:16:46
3タブってのは、ハードタブで勝手に揃えればいいじゃん派でしょ
メインの人たちがスペースとタブを混在させてるのが迷惑なんだよね

364:デフォルトの名無しさん
10/05/24 22:21:26
仮想同僚をでっちあげて発狂するのがRubyコミュニティの流行なんですか?

365:デフォルトの名無しさん
10/05/24 22:21:30
なんか俺は旗色が悪くなってきたな。おれは尻尾巻いてトンズラするわ。アバヨ!

366:デフォルトの名無しさん
10/05/25 00:30:08
>>360
> 迷惑撒き散らしてるだけなのに「美的感覚持ってる孤高のマイノリティ」みたいな感じで騒いでるのがイラつくんだよ。
俺はお前の勝手な決めつけの方がイラつくな

367:デフォルトの名無しさん
10/05/25 02:24:30
男は黙って1タブ

368:デフォルトの名無しさん
10/05/25 14:14:48
Railsリリース早すぎワロタw

369:デフォルトの名無しさん
10/05/25 15:44:09
それだけRailsの進歩が早いということだな、うんうん

370:デフォルトの名無しさん
10/05/25 16:04:44
テスト駆動の限界をみた。極端な崇拝はよくないな

371:デフォルトの名無しさん
10/05/25 22:15:25
>>360
>svn diff か redmine の diff 使うし、

svn diff でも -b や -w が使えるだろ。
初心者だから今まで知らなかったというだけなんだから、教えてもらって感謝こそすれ逆切れすることないのに。

372:デフォルトの名無しさん
10/05/25 23:15:44
混在させるのが問題ってなら、解決策は一つしかない
次善の妥協案だとしても、ハードタブ使うな

宗教論争や好みは置いておいて、現実的な問題として考えると
スペースでのインデントには、ぶっちゃけ、慣れてないか機能不十分な
エディタで、カーソルやスペースキーを連打しなきゃいけない、ってくらいの
デメリットしかないと思うんだが

373:デフォルトの名無しさん
10/05/25 23:26:39
ハードタブとソフトタブがごっちゃになってないか?

374:デフォルトの名無しさん
10/05/25 23:33:40
ごっちゃにはなってないんだろうが、書き方が悪いな
ソフトタブのデメリットだけ書いてるから、否定してるように見える
メリットは自明って前提なんだな

375:デフォルトの名無しさん
10/05/25 23:35:35
この人10年以上同じことばっかり言ってそう

376:372
10/05/25 23:38:00
推敲したよ!

×
スペースでのインデントには、ぶっちゃけ、慣れてないか機能不十分な
エディタで、カーソルやスペースキーを連打しなきゃいけない、ってくらいの
デメリットしかないと思うんだが


スペースでのインデントのデメリットには、ぶっちゃけ、慣れてないか機能不十分な
エディタで、カーソルやスペースキーを連打しなきゃいけない、ってくらいしかないと
思うんだが

377:デフォルトの名無しさん
10/05/26 00:51:00
スペースをタブに変えてもいいような文章だな

378:デフォルトの名無しさん
10/05/26 00:52:56
ここの人らはエディタなにつかってるの?

379:デフォルトの名無しさん
10/05/26 01:00:12
男は黙ってEmEditor
4200円也

380:デフォルトの名無しさん
10/05/26 01:39:43
秀丸ちゃんは?
10万行だったら、EmEditorより秀ちゃんの方が早かったYO
ただPro版だったら逆転してるかも

381:デフォルトの名無しさん
10/05/26 01:55:05
エディタとしてのクオリティで、秀丸がEmEditorに勝ってるところってどの辺?
その10万行云々の、Apacheログ見るときでもそうそうない状況以外で

さらにこのスレ的には、んなWindows有償エディタの話なんてどうでもいい空気がすごい気が

382:デフォルトの名無しさん
10/05/26 02:10:23
何も考えずにgedit使ってるけど、なんかお勧めある?

383:デフォルトの名無しさん
10/05/26 02:14:26
>>382
それは多分ほぼ唯一の選択肢じゃないかな
それでダメならeclipseしかない茨の道
転向するならEmacsとかvimとか素敵らしい世界が広がるかもしれないけど

384:デフォルトの名無しさん
10/05/26 02:20:38
別に無理して雑談しなくていいんだよこのスレで

385:デフォルトの名無しさん
10/05/26 02:23:50
この流れワロタw

386:デフォルトの名無しさん
10/05/26 06:23:28
今日からお前はルビ夫だ。

387:デフォルトの名無しさん
10/05/26 08:33:05
>>382
geany

388:デフォルトの名無しさん
10/05/26 09:00:42
vim
いまくそはクソ

389:デフォルトの名無しさん
10/05/26 20:38:49
>>388
そんなに苛めないでよ、好みでいいじゃない。

390:デフォルトの名無しさん
10/05/26 22:45:15
matzがemacsだからみんなemacs使ってるのかと思ったらそうではないんだな。
デフォルトの ruby-mode って 2 スペだよな。

391:デフォルトの名無しさん
10/05/26 22:57:36
TextMateとvim


392:デフォルトの名無しさん
10/05/26 23:05:43
emacs で viper-mode だなあ
vim script は書く気にならない

393:デフォルトの名無しさん
10/05/26 23:45:20
>>390
DHHがMacだからRails開発者はみんなMac使っていることはない

394:デフォルトの名無しさん
10/05/27 00:05:59
普通Eclipseだろ

395:デフォルトの名無しさん
10/05/27 00:14:13
いや全然

396:デフォルトの名無しさん
10/05/27 00:24:00
RubyのIDEって補完がイマイチなの多くない?
Pythonはそこそこできたり、PyScripterみたいなお手軽なのもあるのに

397:デフォルトの名無しさん
10/05/27 00:36:24
returnの次はタブ、その次はテキストエディタの話かよ

398:デフォルトの名無しさん
10/05/27 00:57:38
言語自身はの話題は1.9系への移行に失敗して停滞中だから、あんまり話すこと無いと思う。
高速化もそれに引きずられて停滞中だし、YARVはまず1.8系で入れるべきだったよな。

遅いけど、1.8系を使わざるをえない現状は結構キツイ。

399:デフォルトの名無しさん
10/05/27 00:58:30
emacsからvimに転向した人をたくさん見てるんだけど
まだemacsって人気あったのか?

400:デフォルトの名無しさん
10/05/27 01:04:39
>>398
失敗ってまだこれからじゃんかよ
昔のHTMLソースの汚さを知ってるやつは、今のHTMLソースにびっくりすると思う
踏み出さないと始まらんと思うよ

401:デフォルトの名無しさん
10/05/27 01:42:03
>>400
それもこれも1.9.2次第だな。期待せざるを得ない。

402:デフォルトの名無しさん
10/05/27 09:25:29
移行に失敗って...
現状移行できてないものはほとんどが文字列まわりだろ。

1.9.2だからどうにかなるという性質のもんじゃないと思うが。

403:デフォルトの名無しさん
10/05/27 18:24:34
>>402
gem周りは最悪

404:デフォルトの名無しさん
10/05/27 22:15:37
Webアプリで名を馳せた言語なんだから、文字列周りに問題抱えるのはキツいよな。
Railsチームと連携とって一気に両方移行すれば、ある程度の切り捨てはあっても素早く移行できたと思う。

RailsとRuby本体の人たちってなんか溝あるよな。

405:デフォルトの名無しさん
10/05/28 00:44:16
Ruby作ってる人たちが一番興味あるのは汎用言語としてのrubyだから、じゃないかと思ってる

406:デフォルトの名無しさん
10/05/28 06:45:39
RailsはRubyからみたら寄生虫だからなぁ

407:デフォルトの名無しさん
10/05/29 11:47:51
rubyなんてRailsが無ければ存在自体知らんかったわ

408:デフォルトの名無しさん
10/05/29 11:51:59
それは威張って言うようなことじゃなかろう

409:デフォルトの名無しさん
10/05/29 12:50:06
純粋オブジェクト指向だっていうから勉強してみたけど失敗だったかな。。。

410:デフォルトの名無しさん
10/05/29 13:28:36
Twitterの中の人がRubyよりScala採用するとか言っているから、Rubyはわるい意味で再評価されてる

411:デフォルトの名無しさん
10/05/29 14:26:42
Ruby使いがお勧めする多言語ってなんだべ?

412:デフォルトの名無しさん
10/05/29 14:27:25
失礼
×多言語
○他言語

413:デフォルトの名無しさん
10/05/29 14:29:02
Perlについて知っておくとMRIにパッチを提案するときに有利、かもしれない

414:デフォルトの名無しさん
10/05/29 14:33:52
>>411
JRuby、IornRuby


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch