Ruby 初心者スレッド Part 32 at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
09/10/24 06:18:12
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

★注意★ Ruby 1.9.1 は初心者にはまだ時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
   (理由:現時点では多くの有名ライブラリやアプリが 1.9.1 に完全対応していないためです。)
 1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 を習得すれば将来スムーズに 1.9 系に移行できるでしょう。

関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・モジュール名やエラーメッセージでググる
 ・マニュアルで引っかかったクラスの記述を探す URLリンク(www.ruby-lang.org)
 ・FAQを一応読む URLリンク(www.ruby-lang.org)
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(自力で訳さずなるべくそのままで)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。

■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

2:デフォルトの名無しさん
09/10/24 06:19:04
【よくあるしつもん】
Q:
いちからRubyを始める初心者向けのRuby入門書は何がありますか?

A:
プログラム作成自体の初心者なら
 ・「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
  URLリンク(www.amazon.co.jp)
文法は理解済み(orリファレンスで乗り切る既言語習得者)の場合のRuby様式を知る必携2冊目
 ・「初めてのRuby」
  URLリンク(www.amazon.co.jp)

以下は外れが少ないとされている本です。必ず立ち読みした上で自分の目的とレベルに応じて購入してください。
 ・「Rubyレシピブック 第2版 268の技」(初心者向け)
  URLリンク(www.amazon.co.jp)
 ・「プログラミングRuby 第2版 言語編」(初心者向け)
  URLリンク(www.amazon.co.jp)
 ・「Ruby Way 第2版」(脱初心者向け)
  URLリンク(www.amazon.co.jp)
 ・ 「Rubyクックブック ―エキスパートのための応用レシピ集」(脱初心者向け)
  URLリンク(www.amazon.co.jp)

以下の本は言語作者が書いた最新本ですがとりあえず初学者向けではありません。
 ・「プログラミング言語 Ruby」(言語として深く知りたい人向け)
  URLリンク(www.amazon.co.jp)

3:デフォルトの名無しさん
09/10/24 06:20:08
Ruby 公式・非公式便利サイト2009

・Ruby Home Page 【公式、お役立ち度が微妙】
 URLリンク(www.ruby-lang.org)
・Rubyリファレンスマニュアル 【検索機能休止中、Googleなどの併用を】
 URLリンク(www.ruby-lang.org)
 URLリンク(www.ruby-doc.org) 【詳しい英語版】
・HTMLヘルプ版リファレンスマニュアル配布さん 【Windowsで便利、検索も無論可能】
 URLリンク(elbereth-hp.hp.infoseek.co.jp)
・Programming Ruby - The Pragmatic Programmer's Guide 【好評書籍の初版がネットで、ただし英語】
 URLリンク(www.ruby-doc.org)
・Rubyist Magazine - るびま 【ライブラリ紹介などの読み物、過去のコードレビューは一読の価値あり】
 URLリンク(jp.rubyist.net)

・逆引きRuby 【やりたいことから探すWiki、最近元気ないので編集者募集】
 URLリンク(www.namaraii.com)
・はてなキーワード > Ruby 【うっかりどっさりまとまったリンク集、説明なし】
 URLリンク(d.hatena.ne.jp)

・RubyForge 【○○をやりたい管理されたライブラリを探すならここ、英語】
 URLリンク(www.rubyforge.org)
・GitHub 【○○をやりたいコードをとにかく探すならここ、英語】
 URLリンク(github.com)

・日本Rubyの会 【最近はオフライン勉強会の寄り合い場と化しているので近くで勉強会があれば】
 URLリンク(jp.rubyist.net)

4:デフォルトの名無しさん
09/10/24 06:21:53
関連スレ
・Rubyについて Part 37
 スレリンク(tech板)

アンチスレ
・Rubyについて(アンチ専用) Part004
 スレリンク(tech板)

Railsスレ
・【Ruby】Ruby on Rails Part8
 スレリンク(php板)

Windows用スレ
・【ActiveScript】RubyをWindowsで使うスレ【GUI】
 スレリンク(tech板)

Ruby 1.9 系列スレ
・魁け! Ruby 1.9.X
 スレリンク(tech板)


5:デフォルトの名無しさん
09/10/24 06:22:47
前スレ

Ruby 初心者スレッド Part 31
スレリンク(tech板)

Ruby 初心者スレッド Part 30
スレリンク(tech板)


6:デフォルトの名無しさん
09/10/24 07:04:48
バージョンに関するよくある質問

・Ruby 1.8.5
 レンタルサーバ等にいまだに残ってる非安定な古いバージョン
 1.8.6 にすらなってない理由はたぶん管理の手抜きなので怒ってよい

・Ruby 1.8.6
 過去の長期政権と数の暴力で一大勢力圏を維持中の旧安定版
 公開スクリプトはこれでも動作するべきではあるんだがそろそろ 1.8.7 に譲ってくれ

・Ruby 1.8.7
 1.9 シリーズの機能をいくつか足したハイブリッドなバージョン、初学者にこそお勧め
 1.9 系機能は 1.8.6 では動かないが「えーマジ1.8.6!? 1.8.6が許されるのは小(AA略」と煽ってよい

・Ruby 1.9.0
 不安定にして先鋭機能が超満載の開発版バージョンだったもの
 1.9.x は本来全てが開発版の呼称だったのだが、事情が変わって(ここ笑うところ)1.9.1 は安定板に

・Ruby 1.9.1
 満を持して登場の 1.9 系列安定板(本体は 1.8.6 程度には使えるということになっている)
 本体と添付ライブラリの動作は問題がないのだが外部第三者ライブラリが全く追いついていない
 初心者を脱した人が外部ライブラリの開発コミュニティに参加してくれたりすることを期待中

7:デフォルトの名無しさん
09/10/24 07:07:22
おまけ

・Rubygem 0.x
 極悪動作をすることで有名なRuby外部ライブラリ利用サポートプログラム群のバージョン
 このバージョンしかパッケージが存在しないUNIX系ディストリビューションがあって結構問題に
 しかも「rubygem本体の自己更新機能は殺してるのでパッケージから入れてね」とかほざきやがる
 パッケージがバージョン 1 より前のものしかない場合はソースからインストールするとよい
 Rubygem は 1.0 も 1.1 も 1.2 も肝心なとこにバグ持ちなので極力 1.3 などの最新を使うこと

8:デフォルトの名無しさん
09/10/24 12:42:59
へえ〜。理解した。おつ!

9:デフォルトの名無しさん
09/10/24 13:03:49
WindowsでRubyを始める人のために、前スレより転載


17 名前: デフォルトの名無しさん Mail: sage 投稿日: 2009/09/17(木) 18:28:30
>>14
最初はRubyistMagazineのページを見るといいかも。
URLリンク(jp.rubyist.net)
以下引用
> Windows Me, 2000, XP, Vista (95, 98, 98SE)
> -------------------------------------
> 以下のサイトから ActiveScriptRuby の最新版をダウンロードしてインストールしてください。一番上からダウンロード出来るものをインストールして下さい。
> Windows 98 以前の Windows をお使いのかたは、あらかじめ Windows Installer 1.1 以上を入手しておく必要があります。
> URLリンク(www.artonx.org)
> ActiveScript というものが何であるかを気にする必要はありません。


36 名前: デフォルトの名無しさん Mail: sage 投稿日: 2009/09/17(木) 19:07:18
RubyistMagazineのページに、チュートリアルが紹介してあんのな。

URLリンク(jp.rubyist.net)
> Ruby ではじめるプログラミング
>
> とりあえず何をしたらいいのかわからない、という人は本誌 Rubyist Magazine の初心者向け連載があります。
> URLリンク(jp.rubyist.net)
> ただし、この連載はプログラミング自体の初心者を対象にしているため、 すでに他言語でのプログラミング経験がある方には少々簡単すぎると思います。

10:デフォルトの名無しさん
09/10/24 13:05:21
あとこれも前スレから。


105 名前: デフォルトの名無しさん Mail: sage 投稿日: 2009/09/18(金) 16:25:12
初心者にカリカリしている人が多いようなので、再掲しました。

>>1
>■回答する人へ
>相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
>それができないならこないこと(だって初心者スレだもん)。
> ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
> ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
> ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

ここは初心者がバカな質問をすることを大目に見てあげられるマゾヒストのためのスレです。
初心者にカリカリするような人はこないでね。

11:デフォルトの名無しさん
09/10/24 17:44:09
URLリンク(jp.rubyist.net)

とりあえず落ちていることを報告。

12:デフォルトの名無しさん
09/10/24 19:48:01
質問があります。

cucumberという受け入れテストツールを動かしてみているのですが、
コマンドプロンプト上だとwin32consoleをインストールすることで色づけがされるのですが、
UTF-8が化けてしまいます。
そこで、cygwinのターミナルck上で動かそうとしたのですが、今度は色づけがされません。
どういったことを疑うべきでしょうか?

cucumber 0.4.2
ruby 1.8.7
Windows Vista SP2

13:デフォルトの名無しさん
09/10/24 19:54:21
>>12
コマンドプロンプトというか CMD.EXE 上で UTF-8 文字が表示できないのは当たり前

cygwin のターミナルで着色されないのは環境変数 $TERM あたりが実際のターミナルと合ってないのだろう

14:デフォルトの名無しさん
09/10/24 20:55:11
cucumberがTERM=cygwinに対応してないんだろう

15:デフォルトの名無しさん
09/10/24 21:26:23
cygwin だからといって TERM が cygwin だとは限らない

16:デフォルトの名無しさん
09/10/24 22:19:07
ckはcygwinじゃなかったっけ?

17:デフォルトの名無しさん
09/10/24 23:17:48
いつになったら CMD.EXE 上で UTF-8 表示出来るようになるのかしら

18:デフォルトの名無しさん
09/10/24 23:20:14
だよな
それが解決したら文字コードまわりの問題の殆どが解決する稀瓦斯

19:デフォルトの名無しさん
09/10/24 23:20:55
ブロックパラメータの引数の数を調べる方法はありますか。
やりたいことは、ブロックの引数の数によって処理を変えることです。

def f()
n = ブロックの引数の数
if n <= 0
...
else
...
end
yield
end


20:デフォルトの名無しさん
09/10/24 23:31:08
なんか色々ツッコミ入れたいが、メソッドの不定数引数は *arg のように受け取る

def mes(*arg, &block)
if arg.size.zero? then
puts "no arg"
else
arg.each_with_index do |e, i|
puts "#{i}: #{e}"
end
end
yield if block
end


irb> mes('a', 'b')
0: a
1: b
irb> mes
no arg


21:デフォルトの名無しさん
09/10/25 00:14:09
>>19
def f
prc = Proc.new
n = prc.arity
p n
end
f{|a,b,c| } #=> 3

詳しくはマニュアルでProcを調べろ

22:デフォルトの名無しさん
09/10/25 00:39:05
mapやeachが現在何回目のループなのか知る手段ないですか?

23:デフォルトの名無しさん
09/10/25 00:41:42
>22
with_index

24:デフォルトの名無しさん
09/10/25 00:52:23
>>23
ぐぐってみたんですが使い方がわからないです
こうではないですよね・・

[1,2].map.with_index do |n,i|
puts i
end


25:デフォルトの名無しさん
09/10/25 00:56:25
ubuntu に ruby をインストールしてみました
端末から ruby と入力すると exitで$(bash)に戻れません

どうすれば$(bash)に戻れるのでしょうか?

Googleで調べてみたのですが
あまりに初歩すぎる疑問のようで
回答を見つけることが出来ませんでした

26:デフォルトの名無しさん
09/10/25 01:11:03
mapにwith_index っていうのは、標準にはなくて
自分で定義しろということでしょうか?

27:デフォルトの名無しさん
09/10/25 01:11:16
>>25
Control + D

恐らく、やりたいことに最も近いのは ruby でなく irb を使うこと
ruby はエディタで既に書いたコードを実行するために使うと覚えとこう

28:デフォルトの名無しさん
09/10/25 01:30:11
>>17
chcp 65001
できるだけって感じだけど

29:デフォルトの名無しさん
09/10/25 01:32:30
>>27
ほんとだ、$(bash)に戻ってこれた

けど、rubyの人達って Emacs Emacsって書いてありますけど
やっぱりEmacsなんでしょうか?

30:デフォルトの名無しさん
09/10/25 02:05:34
>>26
.with_index の使い方は>>24であってる。(0始まりに注意)
が、バージョンによってはそもそも存在しなかったり、require が必要
だったりするので、バージョンを明示せよ。


31:デフォルトの名無しさん
09/10/25 02:20:37
>>29
本気でプログラマ目指すとかならemacsとかviも触っておくに越したことはないけど
普通に勉強するならgedit辺りで良いと思うよ
gedit ファイル名 &
でコード書いて、セーブしたらターミナルに戻って
ruby ファイル名
で実行すれば良いんじゃないかな
ファイルに書き起こすまでもないようなコードはirbで直接書いて実行するのも良い

32:デフォルトの名無しさん
09/10/25 02:27:13
1.9系はeach.with_indexとmap.with_index
1.8.7はeach_with_indexもしくはto_enum.with_index.eachとto_enum.with_index.map
1.8.6だとeach_with_indexと・・・mapはわからん、enumerator.rb呼んでもダメそうだし

33:デフォルトの名無しさん
09/10/25 02:31:36
そういえば1.8.7のブロックなしmapは扱いが特殊だったな。


34:デフォルトの名無しさん
09/10/25 02:32:27
Æ
&aElig;

35:デフォルトの名無しさん
09/10/25 02:36:23
1.8.6でインデックス付きmapやるなら、インデックスだけ取ってきて
中身にはイテレータ使わずにループ書いたほうが楽そうだな

36:デフォルトの名無しさん
09/10/25 02:55:50
>>32
ありがとうございます
ヴァージョンは1.8.6です
each_with_indexの動作確認できました

37:デフォルトの名無しさん
09/10/25 03:16:32
RubyってPHPやPerlほどwebで使われてないと思うけどなんで。

38:デフォルトの名無しさん
09/10/25 03:38:03
Perlほど昔から使われてたわけじゃないし、
PHPみたいにWeb専用言語でもないからじゃないか?
使えるアプリもそれほど多くないと思うし

39:デフォルトの名無しさん
09/10/25 04:18:53
>>37
PHPやPerlで用が済むから

40:デフォルトの名無しさん
09/10/25 04:38:57
ていうか Ruby のバージョンによらず何事もなければ each_with_index が出るのが普通
これで間に合わない場合にのみほかの手段を講じる

41:デフォルトの名無しさん
09/10/25 07:38:33
>>32
1.8.6だと
require 'enumerator'
p %w(a b).enum_with_index.map{| v,i | [v,i] }
# => [["a", 0], ["b", 1]]

42:デフォルトの名無しさん
09/10/25 07:44:14
これってバグになりますか?

test = []
test[0] = "aa"
test[1] = "bb"
test[99] = "cc"


t = Array.new(3)
t[99]= 88

43:デフォルトの名無しさん
09/10/25 08:06:38
test = []
test[0] = "aa"
test[1] = "bb"
test[3] = "cc"
t = Array.new(3)
t[6]= 6
p test
p t

#=>
["aa", "bb", nil, "cc"] [nil, nil, nil, nil, nil, nil, 6]



44:デフォルトの名無しさん
09/10/25 08:12:43
動くのは知ってるんですが
仕様上、この構文が許されてるのかどうかを知りたいんです
特に、Array.newなんて関数が用意されてるのに
t = Array.new(3)
t[6]= 6
こんなことできるんじゃArray.newの立場はどこへ?

45:デフォルトの名無しさん
09/10/25 08:13:18
#!/usr/bin/ruby -Ku
print "Content-type: text/html\n\n"

begin

a=0
if a==0
#end

puts "OK"

rescue Exception => e
bt = e.backtrace
puts "#{bt.shift}: #{e.message} (#{e.class})<br />"
puts bt.map{|s| ">>from #{s}"}.join("<br />")
end

ブラウザで「Internal Server Error」が表示されます。
エラーを捕捉できないのでしょうか?

46:デフォルトの名無しさん
09/10/25 08:26:23
>>45
できるはずだけど、もし自分でできないならCGIExceptionをインストールしてみたら?
URLリンク(cgi-exception.rubyforge.org)

47:デフォルトの名無しさん
09/10/25 09:35:13
>>44
Array.new は関数ではない
揚げ足取りではなく本当に学習的な意味で、それを関数と捉えてはいけない

Array.new は Array クラスの インスタンス(オブジェクト)を生成する
Array オブジェクトの [] メソッドは内部領域にデータを追加する
そんだけ

48:デフォルトの名無しさん
09/10/25 09:38:59
インストールしてみましたが、シンタックスエラー?は表示されませんでした。
>>45もシンタックスエラー?以外は捕捉できます。

49:デフォルトの名無しさん
09/10/25 09:55:24
(eval内は別として)文法エラーは、「実行前」に検出されるもの。
検出する処理さえ実行される前だから、当然捕捉できない。


50:デフォルトの名無しさん
09/10/25 10:22:42
>>44
ある程度大きな配列で、サイズが事前にわかっているなら
動的にちまちまと拡張するよりは最初にサイズを予約したほうが効率的

なんだけど普通は気にしなくていい

51:デフォルトの名無しさん
09/10/25 10:32:17
ある程度大きな配列ったって1000や1万では話にならんけどな
なおかつインデックスで要素追加をすること前提

52:デフォルトの名無しさん
09/10/25 12:41:05
>>47
Array オブジェクトの []= メソッドはオブジェクトの内部領域にデータを追加する

だと思う

53:デフォルトの名無しさん
09/10/25 17:57:56
>>47
newは演算子でしたね
でもスクリプトの場合って
コンパイルするわけじゃないし演算子も関数も違いないような気がしますけど
構文的はOKなんですね
(ちょっと かいたスクリプトが途中で落ちてしまうのでバグの箇所を探しています・・)

>>50
なるほど、やっぱりその程度の使い方なんですね

54:デフォルトの名無しさん
09/10/25 18:26:28
>>53
Rubyだとnewは演算子でもなんでもなく、Classクラスから継承したインスタンスメソッド
URLリンク(doc.okkez.net)

55:デフォルトの名無しさん
09/10/25 18:37:40
関数だと考えるとわからなくなるというのは「クラス→インスタンス」モデルを考えれということなんだと思う
呼び名が用語的に間違っているから正しい呼び方をしろという意味ではない、たぶん

Array.new は Array クラスのインスタンス(オブジェクト)を返す
Array.new(引数つき) は Array オブジェクトを作成し、引数に応じた状態に変更してから返す
Arrayオブジェクト[インデックス]=値 は Arrayオブジェクトの []= メソッドに引数 (インデックス, 値) を渡し、
メソッドに規定された状態変更等を行ってから Array オブジェクトを返す
地の文の [] は Array.new を簡単に書けるようにわざわざ組み込まれたもので、Array.new と同じものを返す

56:デフォルトの名無しさん
09/10/25 18:41:06
インスタンスの状態なり情報を内部領域って言うのはなんか怖いな

57:デフォルトの名無しさん
09/10/25 18:42:44
クラスもまた、オブジェクト(Classクラスのインスタンス)で表される、ということが
JavaとかC++からの連想だとわからないよね。

58:デフォルトの名無しさん
09/10/25 18:58:58
>>56
C で書かれてる Array や Hash の場合は格納されたデータ本体を外部から触れないからなー
どこに格納されてると説明する?

59:デフォルトの名無しさん
09/10/25 19:07:46
>>58
まさにそういうCレベルで意識させることに「内部領域」という言葉の怖さを見てとったんだけど
それが目的なら仕方ないとしか

60:デフォルトの名無しさん
09/10/25 19:09:24
>>48
>インストールしてみましたが、シンタックスエラー?は表示されませんでした。

require 'cgi'
require 'cgi-exception'
eval <<'END_OF_SCRIPT'
 # ...
 # ここにコードを書く
 # ...
END_OF_SCRIPT

というふうにすれば、シンタックスエラーも表示されたりしないかな。

61:デフォルトの名無しさん
09/10/25 19:21:13
>>59
URI は、インスタンス変数に URI データを格納してるじゃん
Net::HTTP も、インスタンス変数にサーバからのデータを格納してるよな
でも Array とか String とか Hash とか Regexp とかは、インスタンス変数があるわけじゃないよな

62:デフォルトの名無しさん
09/10/25 19:24:24
>>53
Array.new自体の存在意義を問うてる?
並のユーザーから見たこいつの心髄は、第二引数によるデフォルト値の設定だと思う

> ary = Array.new(3, "hoge")
=> ["hoge", "hoge", "hoge"]
> ary[5]
=> nil
> ary[5] = "fuga"
=> "fuga"
> ary
=> ["hoge", "hoge", "hoge", nil, nil, "fuga"]

まあこれといいHash.newといい、迂闊に触ると火傷するけどね

> ary[0][1] = "a" # ary[0]の二文字目を上書き
> ary
=> ["hage", "hage", "hage", nil, nil, "fuga"]

>>60
スクリプト本体を別ファイルにしてloadなりrequireすれば
問題のスクリプトに触れる前にbeginブロックが実行されるから捕捉できる

begin
load "example.rb"
rescue Exception => e
bt = e.backtrace
puts "#{bt.shift}: #{e.message} (#{e.class})<br />"
puts bt.map{|s| ">>from #{s}"}.join("<br />")
end


63:デフォルトの名無しさん
09/10/25 19:25:11
あ、CGIだっけ?content-type吐き出すの忘れてた

64:デフォルトの名無しさん
09/10/25 19:25:52
>>61
Rubyのインスタンス変数は原則プライベートだから
インスタンスがどういう情報の持ち方をしていようが何の興味もないよ

65:デフォルトの名無しさん
09/10/25 19:51:01
>>45
もしApacheを使ってるなら
Apacheの設定次第で、エラーの内容をログファイルに出すこともできる
どうしても表示されないなら試してみるのもいいかも

66:45
09/10/25 21:37:48
スクリプト本体を別ファイルにしてloadすれば、
シンタックスエラーが表示されました。

今回はこの方法を使わせていただきたいと思います。
ありがとうございました。

67:デフォルトの名無しさん
09/10/25 21:40:23
一回 ruby -wc でシンタックスチェックしてみろよ

68:デフォルトの名無しさん
09/10/25 21:43:03
というか手元に Ruby 実行環境がないのだろ

69:デフォルトの名無しさん
09/10/25 22:56:40
twitterのbotを勉強目的で作ろうとしてるんだが、こんなエラーが発生して対応できない。
誰か解決策を教えてください。twitterのライブラリは入れてあるつもりなのですが。。

エラーメッセージは下です。
# ruby ./aaa.rb./aaa.rb:2:in `require': no such file to load -- twitter (LoadError)
from ./aaa.rb:2

環境はこうなっています。
# gem list
*** LOCAL GEMS ***
actionmailer (2.3.4)
actionpack (2.3.4)
activerecord (2.3.4)
activeresource (2.3.4)
activesupport (2.3.4)
crack (0.1.4)
hoe (2.3.3)
httparty (0.4.3)
json_pure (1.1.9)
mash (0.0.3)
oauth (0.3.6)
rack (1.0.1)
rails (2.3.4)
rake (0.8.7)
ruby-hmac (0.3.2)
rubyforge (2.0.3)
twitter (0.6.15)

70:デフォルトの名無しさん
09/10/25 22:59:13
gem なら require 'rubygems'


71:69
09/10/25 22:59:32
実行したいソースは↓です。

#require 'ruby gems'
require 'twitter'
require 'time'


USERNAME = 'bot'
PASSWORD = '!@#QWE'

client = Twitter::Base.new( Twitter::HTTPAuth.new( USERNAME, PASSWORD ))
client.update( Time.now)

72:69
09/10/25 23:02:09
参考に観てたblogのソースだと空白が仕込まれてたみたいです。。
>>70さん ありがとございました。

73:デフォルトの名無しさん
09/10/25 23:14:53
require 'rubygems' は書くべきではない、という指摘もあったな。
1.9なら不要だし、1.8では、ない場合はどうせエラーにするだけだし、
あるならRUBYOPTにセットしとけ、みたいな感じ。


74:デフォルトの名無しさん
09/10/25 23:24:43
>>73
君は使いもしないライブラリを読み込むべきだと考えるのかね

75:デフォルトの名無しさん
09/10/25 23:30:38
RUBYOPT は自分のために自分の環境で設定するもの
他人に強制したり期待したりするものではない

76:デフォルトの名無しさん
09/10/25 23:43:48
RUBYOPT構想は結局失敗だったな

77:デフォルトの名無しさん
09/10/25 23:47:28
そもそも環境変数自体が失敗

78:デフォルトの名無しさん
09/10/25 23:57:39
使いもしないライブラリとやらが組み込まれてやんのw

79:デフォルトの名無しさん
09/10/25 23:58:47
うるせぇエビフライぶつけんぞ

80:デフォルトの名無しさん
09/10/26 00:03:54
一度でも読み込んだライブラリは二度読み込まないようにすればいいのではないだろうか

81:デフォルトの名無しさん
09/10/26 00:53:10
>>80
それはそうなってるから。


82:デフォルトの名無しさん
09/10/26 02:34:52
Ruby-mswin32版の1.9.1をインストールしたら
gemが入ってたので、ssleay32.dllとzlib.dllをbinフォルダにいれて
パスとおして
gem update --system
ってコマンド打ったら
Updating RubyGems
Updating rubygems-update
Successfully installed rubygems-update-1.3.5
:0:Warning: Gem::SourceIndex#search support for String patterns is deprecated
Updating RubyGems to 1.3.5
Installing RubyGems 1.3.5
D:/ruby-1.9.1-p0-i386-mswin32/lib/ruby/gems/1.9.1/gems/rubygems-update-1.3.5/lib
/rubygems/config_file.rb:39:in `new': wrong number of arguments (5 for 4) (Argum
entError)
        from D:/ruby-1.9.1-p0-i386-mswin32/lib/ruby/gems/1.9.1/gems/rubygems-upd
ate-1.3.5/lib/rubygems/config_file.rb:39:in `<class:ConfigFile>'
        from D:/ruby-1.9.1-p0-i386-mswin32/lib/ruby/gems/1.9.1/gems/rubygems-upd
ate-1.3.5/lib/rubygems/config_file.rb:12:in `<top (required)>'
        from D:/ruby-1.9.1-p0-i386-mswin32/lib/ruby/gems/1.9.1/gems/rubygems-upd
ate-1.3.5/lib/rubygems/gem_runner.rb:8:in `require'
        from D:/ruby-1.9.1-p0-i386-mswin32/lib/ruby/gems/1.9.1/gems/rubygems-upd
ate-1.3.5/lib/rubygems/gem_runner.rb:8:in `<top (required)>'
        from setup.rb:25:in `require'
        from setup.rb:25:in `<main>'
ってかんじで怒られた、どっか間違ったか?

83:デフォルトの名無しさん
09/10/26 06:20:08
p0で失敗しても文句は言えんな

84:デフォルトの名無しさん
09/10/26 07:12:57
うひょう、ruby1.9.1-p0 と ruby1.9.1-p243 で Win32API の initialize の引数の数が違う

p0
 def initialize(dllname, func, import, export = "0")
p243
 def initialize(dllname, func, import, export = "0", *rest)

rubygems-update-1.3.5 の記述

  if RUBY_VERSION > '1.9' then
   SHGetFolderPath = Win32API.new 'shell32', 'SHGetFolderPath', 'PLPLP',
    'L', :stdcall
   SHGetFolderPath.call nil, CSIDL_COMMON_APPDATA, nil, 1, path
  else
   SHGetFolderPath = Win32API.new 'shell32', 'SHGetFolderPath', 'LLLLP',
    'L'
   SHGetFolderPath.call 0, CSIDL_COMMON_APPDATA, 0, 1, path

85:デフォルトの名無しさん
09/10/26 08:15:39
Ruby1.9.1 の Windows 用でそれをするとはいろいろな意味でチャレンジャーというか煽り屋というか

86:デフォルトの名無しさん
09/10/26 08:20:42
そんなんただのラブレターだろ
「いますぐRuby1.9.1の最新版パッチのWindowsバイナリを公開しろ、
さもなくば基幹的デファクトスタンダードライブラリのアップデート不能を以ってRubyの価値を減じる」
というラブコール

87:デフォルトの名無しさん
09/10/26 08:26:30
最新版のWindowsバイナリー! 早く来てくれー!

俺もコンパイルに成功すれば、Windowsバイナリ公開したいのに
make test-allがなかなか通らない……
メンテナの方々はどんな作業をやってるんだろう

88:デフォルトの名無しさん
09/10/26 08:33:12
URLリンク(rubyforge.org)
ruby-1.9.1-p243-i386-mingw32 は一応ないわけでもない

89:12
09/10/26 10:14:19
>>13-18
Thanks
rspecはちゃんとck(cygwin)でも色分けできるんですけどね・・・。

TERMはcygwinでした。export TERM=xtermとかにもしてみたけど駄目ですタ(この辺よく理解してないです)

>>17
ついでにPower Shellも入れてみたんですが、UTF-8対応して中田 orz
nkfでUTF-16にしても化けるし意味わからんちん

90:デフォルトの名無しさん
09/10/26 12:49:19
とりあえず ruby が糞だということは良く伝わりました
本当にありがとうございました

91:デフォルトの名無しさん
09/10/26 12:57:45
ラブレターなら直接相手に言わないと伝わらないんじゃないか

92:デフォルトの名無しさん
09/10/26 13:07:20
>>91
リア充は帰れ

ラブレターってのは
「○○って△△さんのこと好きなんだって」
「えーうそー△△ちゃん可哀想〜」
みたいに周りからじっくり攻めていくのが正しい姿

93:デフォルトの名無しさん
09/10/26 13:10:00
明らかに周りからも祝福されてねーじゃねーか

94:デフォルトの名無しさん
09/10/26 13:24:46
なにごとも一度でうまくいくことはそうそうないよ
突然話を振るよりも事前のネゴとコネと日頃のコミュニケーションが大事

95:デフォルトの名無しさん
09/10/26 13:33:47
>>92
> 「えーうそー△△ちゃん可哀想〜」
やめろ

96:デフォルトの名無しさん
09/10/26 14:57:09
クソワラタwww

97:デフォルトの名無しさん
09/10/27 04:59:52
ruby1.8.7をcheckinstallでRPMパッケージを作成してインストールしたのですが、
ri -cコマンドを打っても標準ライブラリのクラスが表示されません。(Railsのクラスのみ表示される)
ri GCと打ってもNothing known about GCと出力されるのです。
これはrubyのriドキュメントがインストールされてないということでしょうか?
RPMパッケージでインストールせずにconfigureでオプション付けたりしないといけないのかな。

98:デフォルトの名無しさん
09/10/27 05:51:33
>>97
checkinstallはよくわからないけど、自前でコンパイルするときは
./configure
make
sudo make install
sudo make install-doc # ドキュメントのインストール
が必要だった気がする

99:デフォルトの名無しさん
09/10/27 05:59:15
質問です。Mershall使ってインスタンスの状態を保存しているのですが
一度インスタンスをnewしてdumpした後、その後オブジェクトを変更して
追加されたor削除されたクラス変数を検知して初期化したいです
どのようにしたらいいでしょうか 以下のようなソースです

class DataObj
attr_accessor :cnt
def initizalize
@cnt=0
end
end

class SaveData
attr_accessor :data
def initialize(file_name)
load(file_name)
end
 def load(file_name)
if File.exist?(file_name)
@data = File.open(file_name, "rb"){|f| Marshal.load(f) }
else
@data= DataObj.new()
end
end
def save
File.open("test.dat", "wb"){|f| Marshal.dump(@data, f) }
end
end


100:デフォルトの名無しさん
09/10/27 06:35:07
よーわからんが、Marshalはオブジェクト全体の復元しかできない
復元してからオブジェクトが同一かどうかチェックするしかないな

101:デフォルトの名無しさん
09/10/27 06:52:34
>>100
そうですね、Marshalだとかそういうライブラリは、この際あまり関係なかったですね
保存時のオブジェクトが復元時のインスタンスのオブジェクトと違う場合を許容したい場合は
どのような処理をすればいいでしょうか、ということみたいです
クラス変数が一つ一つ存在するかチェックして、なければ初期化、しかないでしょうか

イメージとしては クラス変数にし対して obj.each{|i| i=0 if !i.exist? }
という配列処理っぽいことがやりたいです (もちろん配列じゃないのでこの操作は不適ですが)

102:デフォルトの名無しさん
09/10/27 07:22:48
クラス変数は @@ で始まる
@ で始まるのはインスタンス変数
初期化の意味がわからない

特定の条件の場合にオブジェクトを同一とみなして欲しいというときは
適宜 == メソッドを再定義して new == old を行う

class C
def initialize(params=nil); @params=params; end
def ==(other)
self.instance_variables.all? do |e|
self.instance_variable_get(e) == other.instance_variable_get(e)
end
end
end

c1 = C.new('a')
c2 = C.new('b')
p c1 == c2 #=> false

c3 = C.new('a')
p c1 == c3 #=> true ('a' == 'a' が true なので)

default = C.new
c4 = C.new
[c1, c2, c3, c4].each do |c|
if c == default then puts 'default!' else puts 'modified' end
end
# => modified, modified, modified, default!


103:デフォルトの名無しさん
09/10/27 07:29:36
>>101
>クラス変数が一つ一つ存在するかチェックして、なければ初期化、しかないでしょうか

よーわからんけど、オブジェクトにバージョン番号をつける方法じゃだめかな。
バージョン番号が違っていれば初期化、とか。

104:デフォルトの名無しさん
09/10/27 07:29:49
===

105:デフォルトの名無しさん
09/10/27 07:43:32
質問です。
1. プラットフォームがwindowsかどうかを判定する方法は、どうするのがいちばんいいでしょうか。
RUBY_PLATFORM をチェックするのが王道だと思いますが、そのチェックの仕方で悩んでいます。

2. windowではバイナリファイルの読み書きにはFile.open(file, 'rb')のように'b'をつけないといけませんが、
これはcygwinでも同じでしょうか。
('b'が必要なプラットフォームが何かを知ろうとしています)


106:デフォルトの名無しさん
09/10/27 07:58:24
fopenの仕様を読みましょう

107:デフォルトの名無しさん
09/10/27 08:04:18
皆さんありがとうございます
・・・恥ずかしながらインスタンス変数とクラス変数を勘違いしていました
>>103氏のいうようなバージョン管理でやろうとすると

class DataObj
attr_accessor :ver,:a,:b,:c
def initialize(obj) #
@ver=0
@a,@b,@c=0,1,2
end
end

class DataObj_1 < DataObj
attr_accessor :d,:e,:f # 変数を追加
def initialize(obj)
super
@ver=1
@a,@b,@c=obj.a,obj.b,obj.c
@d,@e,@f=3,4,5
end
end

current_version=1
a=load("save.dat")
a=Data_Obj_1 if a.ver == current_version # あるいは a === DataObj_1 かな?

ということでやりたいことは、できそうです スマートな方法とは言い難いですが・・・

108:デフォルトの名無しさん
09/10/27 08:08:23
すいません、最後は a.ver が 0 のとき
if a.ver < current_version の間違いですね

109:デフォルトの名無しさん
09/10/27 09:13:30
>>105
1. は URLリンク(jp.rubyist.net)


110:デフォルトの名無しさん
09/10/27 09:32:33
>>109
その記事にある「Win32API.soがrequireできるかどうか」は、
1.9だと全部ダメとか、1.8でもWINE環境でrequireできちゃう
とかあるので注意。

2の方は、いわゆるDOSISHなプラットフォームが該当する。
具体的にはcygwin以外のWindows、DOS(djgpp)、
x68000(human68k)、OS/2(emx)

111:デフォルトの名無しさん
09/10/27 09:37:09
自動で判断するぶんには RUBY_VERSION =~ /mswin|mingw/ でいいんじゃね
クラス変数とかに結果入れておいてユーザーが変更可能にしておくとかすれば喜ばれそう

112:デフォルトの名無しさん
09/10/27 09:52:38
バイナリ扱う時に環境判断せずに「とりあえずbつけとけ」ではだめなんだっけ?

113:デフォルトの名無しさん
09/10/27 09:55:16
ミリ秒の差が数千万円になるようなエッジな環境では命取り

114:デフォルトの名無しさん
09/10/27 09:55:44
>>112
それが望ましいっす。

115:デフォルトの名無しさん
09/10/27 10:32:51
>>107
Marshalで保存したオブジェクトは自分のクラスを記録してるから
別のクラスのインスタンスとして復元する事は出来ない
Hashを中間データとして使う方法をすすめる
ついでにmarshal_dumpとmarshal_loadについて調べておくといい

116:デフォルトの名無しさん
09/10/27 10:39:58
>>102で用が済むと思うのだが

117:デフォルトの名無しさん
09/10/27 11:09:13
質問します。
ディレクトリ内にあるhtmlファイルの読み込みで、Data/a/1.htmlを読み込ませたあと
Data/b/1.html→Data/c/1.html・・・とずらずらとディレクトリ違いの同じ名前のhtmlファイルを
読み込ませるにはどうしたらいいですか?

118:デフォルトの名無しさん
09/10/27 11:12:47
それに必要なのはなんだと思う?
というようなとこから考えて欲しいと思った

とりあえずいちばん簡単なの

dirs = ['a', 'b', 'c', 'd', 'e', 'f', ...]

dirs.each do |dir|
File.open("#{Data/#{dir}}/1.html"){|f| f.read}
end

119:デフォルトの名無しさん
09/10/27 11:13:36
>>117
Dir.glob("Data/*/1.html") do |file| ... end


120:117
09/10/27 11:24:16
即レスどうもです!
とても参考になります!
ちょっくら試してみます。
ありがとうございました!

121:デフォルトの名無しさん
09/10/27 22:59:08
しつもーん!
どこからも参照されなくなったオブジェクトは GC によって破棄されるだよね?

loop { /正規表現オブジェクト/ }

この場合 /正規表現オブジェクト/ はループのたびに生成されるの?

122:中田
09/10/27 22:59:18
>>89
Power ShellのUTF-8対応なんてしらん


123:デフォルトの名無しさん
09/10/27 23:04:27
>>121
いいえ、固定の正規表現リテラルはパース時にチェックされ、スクリプト内で1回だけ生成され保持参照されます

ただし、変数を #{ } などで含んでいる場合は毎回変数を参照して新規作成される
最初の1回だけにしたい場合は //o と o オプションをつける
この理屈で言うと、/re/ がたくさんあるとメモリ食う

124:デフォルトの名無しさん
09/10/27 23:19:19
>>123
なるほど、ありがとうございました。

125:デフォルトの名無しさん
09/10/27 23:23:51
>>12
cygwin1.5系や素のcmd.exeは未だにCP932だから、UTF-8はそのままだと表示できません。
考えられる方法はだいたい以下の通り。
(1)素のcmd.exeにて、nkfでCP932に変換して表示
(2)cmd.exe にて chcp 65001 によって UTF-8 モードにして UTF-8 を表示 (挙動妖しい)
(3)cygwin 1.5 にて、nkf で CP932 に変換して表示
(4)cygwin 1.7 (デフォルト UTF-8) にて UTF-8 で表示 (開発途上)

まぁ、どれもろくでもないんで、cucumberだったらHTMLにでも書き出して、
ブラウザで見た方がいいんじゃないですかね。

126:デフォルトの名無しさん
09/10/27 23:31:54
そーいえば、PowerShellはシェルとしてはcmd.exeとしては同レベルです。
コネがある方がいらっしゃいましたら、ちゃんとUnicode通るようになんとかしてやってください

127:デフォルトの名無しさん
09/10/28 00:05:56
WriteConsoleWでがんばってください

128:デフォルトの名無しさん
09/10/28 09:30:42
"123.6"をdecimalの123.6に変換するメソッド(例えばto_iのようなもの)はないでしょうか?

129:デフォルトの名無しさん
09/10/28 09:39:40
decimalではなくてfloatでした。すいません。

130:デフォルトの名無しさん
09/10/28 09:56:03
>>128
マニュアル嫁
文字列だから String のマニュアルを読む
URLリンク(www.ruby-lang.org)

131:12
09/10/28 09:59:20
ロックマンが海外で『Mega Man』の名称に変更された理由とは… - Game*Spark
URLリンク(gs.inside-games.jp)



1993年に発行されたGame Playersマガジンのカプコン副社長Joseph Morici氏のインタビューによると、
当時日本で作られたロックマンのローカライズを検討していたMorici氏は、“Rockman”というタイトル名が単純に気に入らなかったそうです。

  ”あのタイトルは酷すぎました。そこでMega Manという名前を思いついたんです。
  するとそのアイデアは気に入られて北米版で使われることになりました。ゲーム内容は日本版と全く同じでしたけどね。”



パッケージ画像
URLリンク(gs.inside-games.jp)

 ___
/ ||Mega|| ∧_∧
|.....||Man || (     )  どうしてこんなことに…
| ̄ ̄\三⊂/ ̄ ̄ ̄/
|    | ( ./     /

132:12
09/10/28 10:00:08
誤爆

133:12
09/10/28 12:03:40
変なもん誤爆しちゃった…

>>12 の件ですが、結論から言いますと、
--color を引数に明示的に指定することで解決しました。

コマンドプロンプトでは色づけされる、んならすでに指定してたんじゃないんかい!と言われそうなのですが、
実際には指定しておらず、
.featureファイルに以下の記述をして「i18nで日本語を使う」とcucumberに知らせていた場合にだけ、
何故かコマンドプロンプトのみ色付けされるようでした。
# language: ja

--colorの指定は、ルートディレクトリにcucumber.ymlファイルを置いて、

default: features -f pretty --color -l ja

のように記述することで、デフォルトの引数を指定できました。

とりあえず、解決ということでありがとうございました。

134:12
09/10/28 12:04:50
連投スマソ

>>125
ありがとうございます。

もっとロクでもない方法(?)として、以前はRUBY_PLATFORMがwin32でTERMがnilのときだけ、
$stdout.writeでSJISにnkfで変換する方法も使ってました。
Railsスレあたりに投下した覚えがあるので検索すればでてくるかも。

cygwinはUTF-8化用のDLLを入れてあり、ターミナルソフトのck.exeでUTF-8を表示できるのですが、
cygwin上でwin32のautotest使うと、テストが再実行しようとCtrl+Cを押すと何故かされず、即終了してしまうんですよね。

最近は、coLinuxのUbuntuを入れて、かなり普通にあたりまえに動くしUTF-8も問題ないので、それでもいいか、という気がしています…。

135:デフォルトの名無しさん
09/10/28 12:19:05
cygwinのttyはWindowsのコンソールとは見なされないからね。
それはもうcygwinとmswin32を組み合わせるのが悪いとしか言いようがない。

136:デフォルトの名無しさん
09/10/28 15:05:18
拡張モジュールの中で struct FRAME や struct RNode を触りたいんですけど、ruby.hには含まれていなくて困っています。
今はnode.cから extern strct RNode { ... }; を自分のソースにコピーしていますが、
もっといい方法があると思うので、ぜひ教えてください。


137:デフォルトの名無しさん
09/10/28 15:42:49
rbbrのツリーってタブおしたら落ちない?再現率100%なんだけど

138:デフォルトの名無しさん
09/10/28 16:56:22
>>136
node.cって何?

1.8ならenv.h、node.hが普通にあるはず。
1.9なら方法はないので諦めてください。

139:デフォルトの名無しさん
09/10/28 19:18:40
拡張ライブラリのソースを ext/foo/foo.c に置いたら、extconf.rb も同じ場所に置かないといけない?
それともextやREADMEと同じ場所においておくもの?

140:デフォルトの名無しさん
09/10/28 19:21:51
gem なら Rakefile に gem.extensions = 'ext/extconf.rb' とか直接書く

141:デフォルトの名無しさん
09/10/28 20:42:02
>>139
基本的には同じところに置かないといけない。
別のところにも置くことはできるけど、それを聞いてくるということは、説明してもしかたなさそう。

142:デフォルトの名無しさん
09/10/28 22:54:07
>>136
何のために?
99%方針が間違ってる。

143:デフォルトの名無しさん
09/10/29 17:06:54
htmlファイルの読み込みについてなんですが、
マッチングでマッチした文字列以降を表示させるにはどうすればいいですか?

144:デフォルトの名無しさん
09/10/29 17:13:22
HTML あんま関係ないな

簡単なのは「キーとなる文字列の直後から必要な別のキーの直前まで」をマッチさせること
$1 とか $2 とかの正規表現の勉強をするといい

# <title></title>で囲まれた文字列
/<title.+?>(.+?)<\/title>/i =~ html
puts $1

145:デフォルトの名無しさん
09/10/29 17:14:47
>>143
コードを書いて実行すればいいよ

146:143
09/10/29 17:26:50
>>144-145
あざっす!!

147:デフォルトの名無しさん
09/10/29 18:17:28
フォームから入力されたユーザー名とパスワードで
Kerberos認証をしたいのですが何か方法はありますでしょうか?
(ApacheのBasic認証にKerberosを利用するのではなく、
Rubyで作成したCGIの任意の箇所で認証処理をしたいです。)

ライブラリ等あればいいのですが…。
Kerberos認証を行うシェルを作成して、
CGIからユーザー名とパスワードを渡して実行させるしかないですかね?

148:デフォルトの名無しさん
09/10/29 20:26:46
>>143
$'

149:デフォルトの名無しさん
09/10/29 21:34:35
>>147
使ったことないけど、URLリンク(rubyforge.org) とかかな。


150:デフォルトの名無しさん
09/10/30 10:12:29
質問
Time#to_i の秒数って、時差というかタイムゾーンとかどうなってますか?

151:デフォルトの名無しさん
09/10/30 11:07:10
そのオブジェクトが地方時か協定世界時かにかかわりなく、
to_iが返すのはUnixタイム。

152:デフォルトの名無しさん
09/10/30 11:11:15
あのへんは UTC とはなんぞやということを外部で習ってるということ前提だからな
Ruby で初めて意識したという人にとってはやや不親切だ

153:デフォルトの名無しさん
09/10/30 11:19:13
to_i で整数にして計算して at で戻すと一瞬わけわからんことに

154:デフォルトの名無しさん
09/10/31 04:36:09
教祖がデビアン住人だしな。世界の外の事は知らない。

155:デフォルトの名無しさん
09/10/31 07:35:31
>>154
どういう意味?


156:デフォルトの名無しさん
09/10/31 10:27:39
教祖とか宗教とかモルモンとかそういう単語の入ったレスは読み飛ばしてOK
NGにしておいても一向に損をしないことを保証する

157:デフォルトの名無しさん
09/10/31 16:53:54
Pentium4(HT)のWindowsXP環境で
CPUを100%使い切って計算しようとおもったら、マルチスレッド対応にしないとだめかな?
タスクマネージャーみたら、なんかCPUに余力が有るみたいなんだが・・・

158:デフォルトの名無しさん
09/10/31 17:05:46
複数プロセス同時に動かすのは?


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

5388日前に更新/98 KB
担当:undef