Rubyについて Part 40 at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
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 アプリケーションはどれも重いんですけどね


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

5245日前に更新/131 KB
担当:undef