Ruby 初心者スレッド Part 43

このエントリーをはてなブックマークに追加
1uy
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
前スレ Part 42 http://hibari.2ch.net/test/read.cgi/tech/1303353905/1
★注意★ Ruby 1.9.2 は初心者には若干時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
 文字エンコーディング等の外部基礎知識が必要な上、不完全対応の第三者ライブラリでの問題の切り分けが手間です。
 迷う点の少ない1.8.7に習熟→おもむろに1.9.2の変更点のみ重点学習、とすればスムーズに移行できるでしょう。

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

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

■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
2デフォルトの名無しさん:2011/05/21(土) 20:32:59.55
>>1がいないスレなんて久々に見たわ
3デフォルトの名無しさん:2011/05/21(土) 22:38:14.81
>>前スレ992
>require_relativeって嫌われてるの?
1.9.1以前で動かないから嫌われてるだろうと推測
4デフォルトの名無しさん:2011/05/21(土) 23:36:30.12
>>1
乙。ところで推奨はまだ1.8.7でいくのか?
5デフォルトの名無しさん:2011/05/22(日) 01:46:22.58
Part42 >>956,957

957さんのコードだと、やはりダブルコロンで読み込まれない
場合もあるようで、うまくいきませんでした。

なので、956さんを参考にバイナリモードで読み込んで
957さんの変換をすることで回避することができました。

なんか色々勉強になりました。
6デフォルトの名無しさん:2011/05/22(日) 07:36:29.21
>>1
>わけわかな質問にもエスパー発揮で。

日本語でおk
7デフォルトの名無しさん:2011/05/22(日) 09:27:36.41
>>1
乙、と言いたいところだが立てるときくらいコテ外しなよ。
8デフォルトの名無しさん:2011/05/22(日) 10:18:13.68
別にスレ建てようぜ
ここを使う理由もない
9デフォルトの名無しさん:2011/05/22(日) 10:25:35.15
黙ってNGに突っ込んどけや

そんなどうでもいい理由で重複とかRubyアンチが増えるだけ
10デフォルトの名無しさん:2011/05/22(日) 11:00:49.77
重複で別スレ立てたいなら勝手に立ててろ
いちいち別スレ立てようとかこっちはうぜえんだよ
11デフォルトの名無しさん:2011/05/22(日) 11:12:29.78
rubyに
PHPでいうprint_rやvar_dumpに相当するメソッドってありますか?
12デフォルトの名無しさん:2011/05/22(日) 11:21:41.09
またか

当たり前だがそっくりそのまま相当するものはない

オブジェクトについて情報を出力したければ
p

そのとき出力されるものを文字列として得たいなら
inspect

少なくともクラス設計者が変なinspectを作っていない限りはpで中身もクラスもわかる。
リテラルがあるものはクラス表示してくれないが、スクリプト上のリテラルと同じ形式なので、
標準的なクラスは全部わかるようになっている。
1311:2011/05/22(日) 11:27:29.93
知らないなら書きこまないでください
あなたよく説明ばかり長くて的はずれなことばっかり言うと陰口たたかれませんか?
引き続き募集します
14デフォルトの名無しさん:2011/05/22(日) 11:34:40.47
var_dumpとprint_rの区分けはないが p でおk
15デフォルトの名無しさん:2011/05/22(日) 11:42:34.05
>>13
p
16デフォルトの名無しさん:2011/05/22(日) 11:45:16.25
print_r var_dump

NGワードっと
17デフォルトの名無しさん:2011/05/22(日) 11:50:53.05
>>13
pだよ
18デフォルトの名無しさん:2011/05/22(日) 12:06:15.30
>>11
p
19デフォルトの名無しさん:2011/05/22(日) 12:08:26.59
なにこの流れ
20デフォルトの名無しさん:2011/05/22(日) 12:24:40.75
前スレでその質問した本人ですけど11とは別人ですよ
立ったスレが気に食わなくて荒らしてるんだと思うのでスルーが一番かと
21デフォルトの名無しさん:2011/05/22(日) 13:06:33.29
webだとRuby on railsがよく上げられるけどもっと良いフレームワークだってあるんだよ
このフレームワークはPHPでいうとCakePHPという知名度が高いっていう位置付けがあるから使っている人が居るけど
探すとRubyでももっと良いMVCフレームワークあるんだよ
22デフォルトの名無しさん:2011/05/22(日) 14:03:55.04
だから何なんだよ
23デフォルトの名無しさん:2011/05/22(日) 14:33:42.93
あるなら書けばいんじゃね
24デフォルトの名無しさん:2011/05/22(日) 14:41:41.47
>>20
活動時間帯は他のスレ見れば一発なので、今回は逆だと思うなあ
25デフォルトの名無しさん:2011/05/22(日) 14:59:13.26
どっちかっていうと、せっかくスレを立てたのにみんなが自分を褒めてくれないということで暴れているように見える
これを言ってしまったあとだと模倣犯が出るので参考にならんが
26デフォルトの名無しさん:2011/05/22(日) 15:04:57.58
それはなんだか切ないな
ただコテつけて非技術的な内容で馴れ合いしたいのなら
ム板以外でやってほしいもんだ
27デフォルトの名無しさん:2011/05/22(日) 15:12:43.08
今の2chで名前欄に何か書く人は本物騙り含めてもれなく基地外さんなので(これは確定事項)、
そういう人の思考形態を推測することはもれなく基地外さんへの道まっしぐらなので、
正直どう思ってるかなんてのは恐ろしいこと以外のなにものでもないわけで

>>26
正直、マ板があるじゃんとは、思わなくもない
受け入れられない場所で暴れ続けるその心中をお察しすることは、残念ながらできないんだけど
28デフォルトの名無しさん:2011/05/22(日) 15:19:32.83
すいません、自分11ですが>>13は書いてないです
>>12さんありがとうございました
29デフォルトの名無しさん:2011/05/22(日) 15:29:05.40
>>27
アクの強い文体もコテつけるのと大差ないんじゃw
技術的なレスなら個人的には別に問題ないかなと
30デフォルトの名無しさん:2011/05/22(日) 16:42:07.55
1.upto(3){|x| puts x }
という式の戻り値が1なのはなぜですか?
最後の式が戻り値らしいので3が返ってくると思いました。
31デフォルトの名無しさん:2011/05/22(日) 16:48:32.52
>>30
整数1のインスタンスメソッド(で、selfが返ると定義されてる)なので、selfである整数1が返ります

ブロックの見かけならなんでもかんでも最後に評価された値が返ると決まってるわけではない
これは Integer#upto というメソッドで、それの定義による
32デフォルトの名無しさん:2011/05/22(日) 16:55:10.98
>>30
ついでに補足しておくと、それで最後のブロックの最後の評価値が戻るとすると、
戻り値は nil になるはずだよ。 puts の戻り値は引数に何与えてもnil
33デフォルトの名無しさん:2011/05/22(日) 16:57:41.86
なるほど!納得です。ありがとうございます。
一応、 ri Integer.upto で調べたら

----------------------------------------------------------- Integer#upto
int.upto(limit) {|i| block } => int
------------------------------------------------------------------------
Iterates _block_, passing in integer values from _int_ up to and
including _limit_.

5.upto(10) { |i| print i, " " }

_produces:_

5 6 7 8 9 10

と出て、selfが返されることまでは書かれていませんでした。
が、オンラインマニュアルには

upto(max) {|n| ... }
self から max まで 1 ずつ増やしながら繰り返します。 self > max であれば何もしません。

self を返します。

downto, step, times も参照。

と、しっかりselfが返されることが書いてありました。
34デフォルトの名無しさん:2011/05/22(日) 17:12:30.87
>>33
> int.upto(limit) {|i| block } => int
レシーバと返り値が一緒だからint ... => intと表記している

もし別の整数を返すのであれば例えばceilのように
num.ceil -> integerと表記する
35デフォルトの名無しさん:2011/05/22(日) 17:32:05.76
あ、ri 使ってる人いるんだ
gem インストールでも --no-ri --no-rdoc がデフォになりつつあるのに
36デフォルトの名無しさん:2011/05/22(日) 17:47:17.17
ri はうまく使えば強力なツールになり得たのに(既に過去形)
37デフォルトの名無しさん:2011/05/22(日) 19:03:14.65
ある大規模電子回路の動作内容をお客さんに説明しなくてはなりません。
頑張ってパワーポイントで資料作成していましたが、パワーポイントの
アニメーションではインタラクティブでないため、いまいちわかりずらく
なってしまいます。Rubyは初心者レベルながらなんとか使えますので、
Rubyで作った回路のクラスをどうにかして図解できないでしょうか?
38デフォルトの名無しさん:2011/05/22(日) 19:07:29.07
だからなぜRubyにGUIをもとめるんだよ
静的に図にするだけなら画像なりHTMLなりで吐けばいいだろうけど
クリックすると動いて〜とかは難しい道のりだ
39デフォルトの名無しさん:2011/05/22(日) 19:10:54.14
>>37
パワーポイントより遥かに大変
Rubyはライブラリやドキュメントが貧弱すぎてGUI向いてない
40デフォルトの名無しさん:2011/05/22(日) 19:28:30.06
素早い回答有難うございます。
やはりRubyにGUIを求めるのは無理ですか。。SystemCとかのシステム記述言語
を使うべきかも知れないですね。dxrubyはかなりいいところまで行ってるんですが、
画面デザイン(回路のブロック図)を直接描くのが大変そうで二の足を踏んでしまうんです。
41デフォルトの名無しさん:2011/05/22(日) 20:07:15.62
Ruby昨日から初めました
RDE(rubyの開発エディタ)があることがわかり日本語など設定しました。

日本語があるスクリプトを実行すると
出力画面にinvalid multibyte char (US-ASCII)が出てしまいます。

コマンドプロンプトでRuby -Ks スクリプト名だとうまくいくのですが、
RDEだと-Ksが設定できなくてエラーが起きてしまうようです
なにか良い方法ありませんか>?
42デフォルトの名無しさん:2011/05/22(日) 20:44:44.00
>>41
使ってるrubyのバージョンとエディタ(?)の名前+バージョンは?
43デフォルトの名無しさん:2011/05/22(日) 20:54:13.87
>>41
RDEはRuby上級者向けなので手を出してはいけない
44デフォルトの名無しさん:2011/05/22(日) 20:54:16.09
ruby1.9.2 180と秀丸8.10です
45デフォルトの名無しさん:2011/05/22(日) 21:11:28.96
>>44
1.9ならマジックコメントで対応できる…はず
ttp://doc.okkez.net/static/192/doc/spec=2fm17n.html#magic_comment
46デフォルトの名無しさん:2011/05/22(日) 21:13:57.32
>>41,44
ruby 1.9.2はRuby初心者にはお薦めできない(>>1を参照)
少なくとも
invalid multibyte char (US-ASCII)
の意味を理解できない人向けのバージョンではない
今すぐアンインストールしてruby 1.8.7を入れ直すんだ
47デフォルトの名無しさん:2011/05/22(日) 21:18:30.49
>>41>>44
そもそも-Kオプション自体が1.9系列で使うものじゃない。1.8系列との互換性のために残されてるだけ。

1.9系列ではソースファイルのエンコーディングは
# coding: 文字コード
というマジックコメントというものをファイルの先頭に書いて指定する。

いわゆるShift-JISで書いてるなら、スクリプトの最初に
# coding: CP932
と書いておけばいい。
48デフォルトの名無しさん:2011/05/22(日) 21:21:53.11
>>45
対応できると言うか、マルチバイト文字をソースに含めるならマジックコメントは必須
-Kオプションはあくまで互換性のためにおいてあるだけ
49デフォルトの名無しさん:2011/05/22(日) 21:29:54.13
>>43でFA
50デフォルトの名無しさん:2011/05/22(日) 23:17:56.41
UTF-8しか使わないんですけどそれでもRuby1.9.2はダメなんですか?
51デフォルトの名無しさん:2011/05/22(日) 23:21:51.40
>>50
別に1.9.2がだめってことはぜんぜんないよ。

ただWeb上で集めた情報が1.8仕様だったとしてもめげずに自分で1.9用に書き直す能力が要るだけ。

むしろいろんな文字コードを併用するときには1.9系列の方がいい。
エンコーディングの変換も楽だし、ソースファイルごとにエンコーディング指定できるし。
5241です:2011/05/23(月) 00:17:59.67
>>42 
rubyバージョン1.9.2 RDEバージョン1.1.1.1です

>>43 
上級者向けなんですか。。けどいちいちcmdで実行しないところが僕が
使いたい理由なんです。


Ruby1.8.7にすれば-Ks指定しなくてもSHJISで日本語出力できますか?
53uy:2011/05/23(月) 00:26:10.78
RDEが上級者向け? WHAT?


>>52 できる

Ruby1.9は、慣れても現時点、マルチバイト文字に悩まされ続ける処理系だから
1.9では日本語使えないと思ったほうが良い  けど良く考えてみて欲しい、 日本語を表示することが、そんなに重要かね?
54uy:2011/05/23(月) 00:32:03.85
個人的にオススメなのは
日本語表示したいときは1.8でかき、それ以外は1.9で書くという事、
1.8と、1.9だといくつか致命的に仕様が違うから 1.8構文で遺産を築いちゃうと
1.9へ移行するときにソース捨てる事になりかねないし、1.9は1.8よりも部分的には1〜10倍くらい速い
1.9は使ってるうちに、時期にこんなとこで聞かずともマルチバイト文字についてはわかってくるよ Ksの意味も ググレks
55デフォルトの名無しさん:2011/05/23(月) 00:41:56.57
>>52
1.9.2でShift-JISの文字列を使いたければスクリプトの先頭に

# coding: CP932

と入れるだけでいいよ。
5641です:2011/05/23(月) 00:43:07.20
解決しました

Ruby1.8.7のパスをRDEに指定して実行で日本語化できました。

しかし、rubyのバージョンが2つあるのですが、cmdで実行する際は
1.9.2のほうが適用されて日本語表示エラーが起きてしまうようです。

cmdで1.8.2を適用する際のコマンドなどありますか?
57デフォルトの名無しさん:2011/05/23(月) 00:44:05.15
そんなにどうしてもマジックコメントを使いたくないのか
それとも頭がおかしいのか
58デフォルトの名無しさん:2011/05/23(月) 00:46:42.69
日本語使いたいならむしろ1.9だろ

文字数の取り扱いがバイト単位とかめんどくさくてやってられん
59デフォルトの名無しさん:2011/05/23(月) 00:48:55.87
>>56
cmdで1.9.2を使わないなら環境変数Pathの先頭にRuby1.8.7のruby.exeがあるフォルダを追加してやればいい

でもそこまでしなくても、なんども言われてるようにマジックコメントさえつければ1.9.2でも普通に日本語使える
60デフォルトの名無しさん:2011/05/23(月) 00:48:58.50
>>56
環境変数PATHから1.9.2のexeの入ってるフォルダを外すか
1.8.2のフォルダを先に持ってくる
または.rb拡張子の関連付けを1.8.2に設定

cmd.exeからの実行形態にあわせてどちらかか両方を
61uy:2011/05/23(月) 12:46:54.54
>>58
え・・・・?   困るよ君 初心者スレッドでも、そういうのは
puts "あいうえおaiueo".split(//s)


>>56
あるけど教えねーよ( 長いから )

俺は、Ruby1.8は、
Rubyのexeの名前のruby187.exeにして使ってる
Rubyの1.9はそのままruby.exeで使ってる
>ruby187 [filename] → 1.8
>ruby [filename] → 1.9
62デフォルトの名無しさん:2011/05/23(月) 13:32:46.53
s = "a b


5235349023c"

r = Regexp.new(/a.*?b(.+?)c/)
puts s.scan(r)

改行やホワイトスペースを無視してscanする方法ってございませんか?
63デフォルトの名無しさん:2011/05/23(月) 13:45:57.91
空白文字群が「あってもなくても動作する」ので、その正規表現で実質無視してると思うけど
結果がどうなって欲しいのん?

irb> p "a b\n\n\n5235349023c".scan(/a.+?b(.+?)c/m)[0].map{|m| m.gsub(/\s/){''}}
["5235349023"]

こう?
64uy:2011/05/23(月) 13:57:44.61
s = "a b


5235349023c"


puts s.split


splitなめんなよこら
65デフォルトの名無しさん:2011/05/23(月) 14:04:23.46
説明不足ですみません
bとcに挟まれた部分(数字とは限りません)が取りたいのですが
s = "a b 5235349023c"
r = Regexp.new(/a.*?b(.+?)c/)
puts s.scan(r)
だと取れますが、
s = "a b


5235349023c"
r = Regexp.new(/a.*?b(.+?)c/)
puts s.scan(r)
みたいに文字列に改行が入っているときは>>63先生のパターンmを利用してうまく取ることができました。

66デフォルトの名無しさん:2011/05/23(月) 14:17:43.81
■test.txt
/a.*?b(.+?)c/m

■コード
require 'csv'
CSV.foreach('./test.txt') do |row|
s = "a b
5235349023c"
r = Regexp.new(row)
puts s.scan(r)
end

テキストファイルに1行だけパターンが記入されてます
テキストファイルを読み取って、そのパターンを使いたいのですがこれだとエラーで取得できませんでした
9行目をr = Regexp.new(/a.*?b(.+?)c/m)とすると取得できました
パターンを外部ファイルに置く方法はございませんか?
67デフォルトの名無しさん:2011/05/23(月) 14:21:56.30
正規表現のmオプションを使う
「.」 が改行にもマッチするようになる
s = "a b\n\n5235349023c"
r = Regexp.new(/a.*?b(.+?)c/m)
p s.scan(r) # => [["\n\n5235349023"]]
68デフォルトの名無しさん:2011/05/23(月) 14:23:37.32
m はくっついてこないんだよね

str = File.open('regexp.txt', 'rb'){|f| f.read}
re = Regexp.new(str, Regexp::MULTILINE)

CSV.foreach('test.csv') do |row|
puts row.scan(re)
end

でどう
69デフォルトの名無しさん:2011/05/23(月) 14:27:50.53
r = Regexp.new(row,Regexp::MULTILINE)
または
r = /#{row}/m
70デフォルトの名無しさん:2011/05/23(月) 14:28:58.37
あ、regexp.txt の中身忘れてた
おまけに改行処理とかやってねえ
要は Regexp.new("なんとか", Regexp::MULTILINE) と /なんとか/m は同じ
前者をリテラルで書いたものが後者
Regexp.quote についても調べるといい

regexp.txt:
a.+?b(.+?)c

str = File.open('regexp.txt', 'rb'){|f| f.read}.chomp
re = Regexp.new(str, Regexp::MULTILINE)

CSV.foreach('test.csv') do |row|
puts row.scan(re)
end
71デフォルトの名無しさん:2011/05/23(月) 14:32:53.67
勉強になりました
72デフォルトの名無しさん:2011/05/23(月) 14:34:53.08
>>66
p Regexp.new("/a.*?b(.+?)c/m") #=> /\/a.*?(.+?)c\/m/

"/a.*?b(.+?)c/m"という文字列を Regexp.new でコンパイルしても
/a.*?b(.+?)c/m
というリテラルと同じ結果にはならないんだ。

それをやりたければ、 Regexp.new じゃなくてevalというメソッドを使って
eval("/a.*?b(.+?)c/m")とするか、そうでなければテキストファイルには

a.*?b(.+?)c

とだけ書き込んで
Regexp.new(row, Regexp::MULTILINE)とかすればいい。

それから、1行だけならcsv使う必要ないよね?
r = File.open('./text.txt') {|f| f.read.chomp }
でいいんじゃないの?
73デフォルトの名無しさん:2011/05/23(月) 14:36:58.31
r =
じゃなくて
row =
だた
74デフォルトの名無しさん:2011/05/23(月) 14:37:34.84
rubyって何でこんなに濃いの?phpとかすぐ荒れるのに
75デフォルトの名無しさん:2011/05/23(月) 14:38:35.33
>>74
濃いって?
76デフォルトの名無しさん:2011/05/23(月) 14:39:01.49
77uy:2011/05/23(月) 14:40:42.42
### test.rb
def func
/a.*?b(.+?)c/m
end

### code
require File.dirname(__FILE__)+"/test"

s = "a b

5235349023c"

puts s.scan func



結局、コードにしないなら、何を取り繕っても最終的にevalでしょ
78デフォルトの名無しさん:2011/05/23(月) 14:50:16.71
単純に人気の差じゃね?

人が集まれば変なのが集まる。
79デフォルトの名無しさん:2011/05/23(月) 15:20:18.41
これからRubyはじめてみようと思うんだけど
みんな開発環境なにつかってんの?
動作軽いのあったら教えて
80デフォルトの名無しさん:2011/05/23(月) 15:31:28.28
>>79
すこしかしこいエディタとすこしかしこいてすとスイーツ()とたーみなるえみゅれーた
もしあなたのかんがえるRubyがRuby on RailsのことならRailsスレにいくといろいろてとりあしとり
81uy = 79:2011/05/23(月) 15:42:38.92
日本語で
82デフォルトの名無しさん:2011/05/23(月) 15:50:30.30
>>80
autotestと何か通知アプリケーションがあればエディタでも最低限の快適性は確保できるよね
エディタだとそこまで自前で頑張らなければならない(しかも頑張っても最低限な)のでめんどくせえという話でもあるんだが

オールインワン統合環境からは見捨てられてる状態だからどうにもならんな
83デフォルトの名無しさん:2011/05/23(月) 16:12:28.38
Win Ruby1.9.2です ファイルの文字コードはUTF-8で保存しました
15行目の print line + "\n"でエラーになってしまいます
ttp://d.hatena.ne.jp/dambiyori/20081227/1230393234を見ながらニコ生でコメントを取得したいのですがエラーで困ってます
ファイルの文字コードをShift_JISにして1〜2行目を削除するとエラーはなくなるのですが、コメント部分が文字化けして見えません
どなたかアドバイスお願いします

C:/test.rb:15:in `write': "\xE3" to UTF-8 in conversion from AS
CII-8BIT to UTF-8 to Windows-31J (Encoding::UndefinedConversionError)

# -*- encoding: utf-8 -*-
$stdout.set_encoding(Encoding::Windows_31J, Encoding::UTF_8)

require 'socket'
msgsvr = "省略" #メッセージサーバのホスト名
port = 省略 #メッセージサーバのポート番号
thread = 省略 #スレッド番号

s = TCPSocket.open(msgsvr,port)
req = "<thread thread=\"#{thread}\" res_from=\"-200\" version=\"20061206\" \>\0"

s.print req

s.each("\0") do |line|
print line + "\n"
end
84デフォルトの名無しさん:2011/05/23(月) 16:14:55.65
msgsvr,port,threadの部分は
http://live.nicovideo.jp/api/getplayerstatus?v=○○←(番組のhttp://live.nicovideo.jp/watch/lv○○の数字の部分を入れます)
にアクセスして<addr>〜</addr>,<port>〜</port>,<thread>〜</thread>の値を代入します
85デフォルトの名無しさん:2011/05/23(月) 16:29:32.05
>>83
>>46
86uy:2011/05/23(月) 16:33:33.17
ヒャッハー悲惨な文字コードスレだぜ
87デフォルトの名無しさん:2011/05/23(月) 16:34:40.04
>>83
ソケットで読み込んだ文字列がUTF-8ではなくてASCII-8BIT扱いになってるのが問題みたいだから、
line.force_encoding('UTF-8') + "\n"
でいいと思う
88デフォルトの名無しさん:2011/05/23(月) 16:38:02.62
Ruby1.8.7なら表示の寸前まで何も考えずにUTF-8固定にできるな
89デフォルトの名無しさん:2011/05/23(月) 16:42:27.57
ところで、このスクリプトだとどちらにせよコメントに非Windows-31J文字列が出て来た時点で変換エラーでアウトだから、
cmdでニコニコ動画のコメントを見るのはやめた方がいいみたいだよ。
90デフォルトの名無しさん:2011/05/23(月) 16:58:23.18
http://rurema.clear-code.com/1.9.2/method/String/i/encode.htmlを見ながらこのように修正してみましたが
# -*- encoding: utf-8 -*-
$stdout.set_encoding(Encoding::Windows_31J, Encoding::UTF_8)

require 'socket'

msgsvr = "msg101.live.nicovideo.jp"
port = 2812
thread = 1092549465

s = TCPSocket.open(msgsvr,port)
req = "<thread thread=\"#{thread}\" res_from=\"-200\" version=\"20061206\" \>\0"

s.print req
s.each("\0") do |line|
line = line.force_encoding('UTF-8')
line = line.encode!(::Encoding::Windows_31J, :undef => :replace)
print line + "\r\n"
end

91デフォルトの名無しさん:2011/05/23(月) 17:07:22.89
>>88が簡単そうに言うのでやってみた
あまり簡単じゃなかったので責任取れ

require 'socket'
require 'kconv'

msgsvr = 'omsg102.live.nicovideo.jp'
port = "2810"
thread = "1092287512"

TCPSocket.open(msgsvr,port) do |s|
s.write("<thread thread=\"#{thread}\" res_from=\"-200\" version=\"20061206\" \>\0")
s.each("\0") do |line|
puts NKF.nkf('-Wsx --fb-html', line).scan(/>(.+?)</)[0]
end
end
92デフォルトの名無しさん:2011/05/23(月) 17:10:17.86
>>91
コメントなんて一部が消えても問題ないだろうしふつうにtosjisでよくね
93デフォルトの名無しさん:2011/05/23(月) 17:12:58.64
>>90
force_encodingもencode!も破壊的だから
line =
とかしなくていいと思う

あと、Windowsでも普通に扱う分には改行は\nだけでおk
\nで書いとけば出力時に勝手に\r\nに変換される
94デフォルトの名無しさん:2011/05/23(月) 17:16:40.54
>>92
ですよねー

require 'socket'
require 'kconv'

msgsvr, port, thread = 'omsg102.live.nicovideo.jp', '2810', '1092287512'

TCPSocket.open(msgsvr,port) do |s|
s.write("<thread thread=\"#{thread}\" res_from=\"-200\" version=\"20061206\" \>\0")
s.each("\0"){|line| puts line.tosjis.scan(/>(.+?)</)[0]}
end
95デフォルトの名無しさん:2011/05/23(月) 17:29:19.12
どっちもどっちだな。
返ってくる文字列がUTF-8だって知らなきゃいけない分ほんのわずかに1.9が手間かな?
1.9.2 ↓

require 'socket'

msgsvr, port, thread = 'omsg102.live.nicovideo.jp', '2810', '1092287512'

TCPSocket.open(msgsvr,port) do |s|
s.write("<thread thread=\"#{thread}\" res_from=\"-200\" version=\"20061206\" \>\0")
s.each("\0"){|line| puts line.encode('CP932', 'UTF-8', :undef=>:replace).scan(/>(.+?)</)[0]}
end
96デフォルトの名無しさん:2011/05/23(月) 17:56:16.97
HTTPSのwebページにPOSTをしたいのですが
アドレスにhttps://を含めることができないみたいで方法がわかりません


http = Net::HTTP.new('localhost')
response = http.post('/~test/test.php', 'ei=UTF-8&p=test')
p response.body
97デフォルトの名無しさん:2011/05/23(月) 17:58:20.60
>>96
require 'net/https' してから
Net::HTTPS をお使いください
98デフォルトの名無しさん:2011/05/23(月) 18:07:30.17
すいません、こんな感じで出来ました

uri = URI.parse("https://localhost/~test/test.php")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(uri.request_uri)

response = http.request(request)
p response.body
99デフォルトの名無しさん:2011/05/23(月) 18:19:22.35
ミス

uri = URI.parse("https://localhost/~test/test.php?a=123")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(uri.request_uri)
request.set_form_data({:a=>"1bcd"})
response = http.request(request)
p response.body
100デフォルトの名無しさん:2011/05/23(月) 18:38:56.36
VERIFY_NONEすんなや。
101デフォルトの名無しさん:2011/05/23(月) 19:20:12.40
x = 540 if x > 540
こういう書き方がすごくムズムズする
何かメリットあるんだろうけど
書き方統一して可読性高めてホスィ
102デフォルトの名無しさん:2011/05/23(月) 19:35:39.34
if で区切って読むようにするんだすぐ慣れる
個人的には or や and をカッコなしで使う人は死滅して欲しい

自己再代入は、これはもう仕方ない
整数オブジェクト540に x という名前ラベルをぺたっと貼るという行為でしかないわけだし
103デフォルトの名無しさん:2011/05/23(月) 19:38:51.01
x = 540 if x > 540

のなにが問題なのかよくわかりません。
ifやunlessの後置修飾嫌いな人?
104デフォルトの名無しさん:2011/05/23(月) 19:50:04.42
>>100
調べて修正してみます
105デフォルトの名無しさん:2011/05/23(月) 19:52:03.84
GETでデータを送信したいのですが
webページにはアクセスできるのですが、どうもデータが送信されません
test.phpはGETデータを返すファイルなので、response.bodyにはabcdが入っているようになってます
アドバイスお願いします

uri = URI.parse("http://localhost/~test/test.php?a=abcd")
request = Net::HTTP::Get.new(uri.path)
response = Net::HTTP.start(uri.host, uri.port) {|http|
http.request(request)
}
p response.body

106uy:2011/05/23(月) 20:12:02.62
101とは違う話だろうけど、個人的な意見をいうと
ifにも戻り値が欲しい

x = 540 if x > 540 を
x = if x > 540  まぁ、これじゃダメだけど、

540を2回書かなきゃいけないってのは言語の甘さ
実装するなら
x = ifrhs x > 540 でrhsが帰るようにするとか
x = if(x > 540).rhs こうか
ans , rhs , lhs = if x > 540  こんな感じのを希望
107uy:2011/05/23(月) 20:17:43.04
あと
x ||= 5  これは x が nilだったら 5を代入って意味だけど
x = || y  これで y が trueだったら代入、 nilだったら代入しないって構文が欲しい
これないせいで
x = y if y  とかやっちゃってる
演算子のオーバーライドは基本的にやりたくない
108デフォルトの名無しさん:2011/05/23(月) 20:23:18.39
>>106-107
色んな書き方を取り入れてるRubyならではの悩みではあると思うけど
そこまでいくとちょっと演算子が爆発的に増えそうな悪寒
109デフォルトの名無しさん:2011/05/23(月) 20:24:55.38
そりゃあ"http://localhost/~test/test.php?a=abcd"をパースした結果のうち、
pathとhostとportしか使ってなくて、queryを送ってないからね。
110デフォルトの名無しさん:2011/05/23(月) 21:10:06.73
>>108
なんでレスしてるの?自演なの?
111uy:2011/05/23(月) 21:36:42.79
>>108
演算子が増えるのは困るな
今の所、lambdaにハッシュを渡して、関数を返す関数を実行したときに変数に入れた値を
返された関数を実行するときに中の変数を書き換えたい時にx = y if y みたいな事やってるだけだから
普段のコーディングで困ってるほどでもない
112デフォルトの名無しさん:2011/05/23(月) 21:43:19.62
最近更新したら更新しましたって出るのにレスが増えない現象が多発してる
113デフォルトの名無しさん:2011/05/23(月) 21:44:29.03
>>61
いちいち正規表現つかって配列に分割してとかめんどくさいに決まってんだろ
114uy:2011/05/23(月) 21:56:50.23
ねぇ


このスレの住民も、Ruby1.8はマルチバイト扱いにくいって思っているの?


>>113
何つくってんの?
bbsみたいの作るにしても
splir(//s)すんのは、プログラム中、普通は一箇所ですし、
115デフォルトの名無しさん:2011/05/23(月) 21:59:32.50
>>112
つブログでやれ
116uy:2011/05/23(月) 22:07:55.13
なんだろ、もし多用するならこういうの作るっていう発想がないんだろか、
class String
  def uyueach
    self.split(//s).each do | m |
      yield m
    end
  end
end

"うゆうゆuyu".uyueach do |m|
  puts m
end
117デフォルトの名無しさん:2011/05/23(月) 22:13:25.78
長い文字列をたくさん文字数チェックするようなスクリプトだと
split(//s)とかやったら無駄なオブジェクト増えまくりでいやーん
118デフォルトの名無しさん:2011/05/23(月) 22:22:47.48
そういう用途のためにString#charsとか#bytes、#linesがあるんだが。
Enumeratorが返ってきて、つまりArray生成しないから効率も悪くない。
119uy:2011/05/23(月) 22:25:26.62
そんなのCでかけよ しらんわ
120デフォルトの名無しさん:2011/05/23(月) 22:52:57.23
a.rbからb.rbを読み込んでb.rbのクラス内のメソッドをa.rbから利用したいのですが
マニュアルのどのページを読むと良いのでしょうか?
121デフォルトの名無しさん:2011/05/23(月) 23:02:51.19
http://dic.nicovideo.jp/a/%E3%83%8B%E3%82%B3%E7%94%9F%E3%82%A2%E3%83%A9%E3%83%BC%E3%83%88(%E6%9C%AC%E5%AE%B6)%E3%81%AE%E4%BB%95%E6%A7%98を見ながらやってます
ニコ生でログインがgetplayerstatus保持されないのですが何故でしょうか?アドバイスお願いします
require 'net/http'
require 'net/https'

def login(username, password)
uri = URI.parse("https://secure.nicovideo.jp/secure/login?site=nicolive_antenna")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Post.new(uri.request_uri)
request.set_form_data({:mail=>username, :password=>password})
response = http.request(request)
regex = Regexp.new(/<ticket>(.+?)<\/ticket>/)
return response.body.scan(regex)[0][0]
end

def getplayerstatus(lv)
uri = URI.parse("http://live.nicovideo.jp/api/getplayerstatus?v=#{lv}")
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)
return response.body
end

username = "" # ユーザー名
password = "" # パスワード
lv = "lv" # http://live.nicovideo.jp/watch/lv○○の「lv○○」を入力
ticket = login(username, password)
p gps = getplayerstatus(lv)
122デフォルトの名無しさん:2011/05/23(月) 23:15:27.96
>>120
まず、クラスの中で定義されていない、
ふつーにトップレベルで定義されているメソッドを別ファイルから利用することはできない
思いっきりテクニカルにすれば不可能ではないが、Rubyの制限だと思ってくれていい
素直にクラスかモジュールに属するように作るか、
関数的メソッドを提供したい場合は Kernel のインスタンスメソッドにしてくれ

で、
・ require の引数は .rb を普通は書かない(require 'b.rb' よりは require 'b')
・ require の引数はとりあえずカレントディレクトリに対する相対パスでも動く
・ require FIle.join(File.dirname(__FILE__), 'b.rb') とか書くとまず間違いない
・ 既存の(標準)ライブラリファイルと同じ名前のファイルは作ってはいけない(Ruby1.8限定)
ということで require
123デフォルトの名無しさん:2011/05/23(月) 23:15:37.39
124デフォルトの名無しさん:2011/05/23(月) 23:17:36.34
>>121
コードは1ミリも試してないが、クッキーの概念がないな
HTTP Cookie におけるセッションに関する勉強がたぶん必要
125デフォルトの名無しさん:2011/05/23(月) 23:37:57.55
>>118
charsってブロック変数指定しなかったら中身使いもしない無駄な文字列オブジェクトを
大量生成しないステキ仕様だったりするの?
126デフォルトの名無しさん:2011/05/24(火) 00:05:07.91
>>124
明日調べてみます
127uy:2011/05/24(火) 00:20:56.17
string.c 5904行

static VALUE
rb_str_each_char(VALUE str)

chars気になってchars調べたんだけど、別のことが気になった
long n; が、どうみても未初期化で
for (i = 0; i < len; i += n) {
やってんだけど、C言語で未初期化のローカルlong変数は初期値「1」であるなんて仕様あんの? ぼくC言語しらないからしらないんだけど
128uy:2011/05/24(火) 00:23:40.93
あー、for文の中が先に実行されるから問題ないや
バグじゃなかったです
129デフォルトの名無しさん:2011/05/24(火) 06:15:16.09
>>125
Rubyの文字列のメモリ消費はぶっちゃけ鬼門なんだよね
最初から最後まで、全員が慎重に設計されたライブラリを慎重に使用して自作メソッドを慎重に設計しない限り、
使用メモリ量は加速度的に増大する
130デフォルトの名無しさん:2011/05/24(火) 06:21:17.77
>>129
JavaやPythonなんかと比べてもメモリ消費が激しいの?
131デフォルトの名無しさん:2011/05/24(火) 06:32:36.02
ruby1.9ではdup.force_encodingとか書いてあるから目立つだけで、1.8でもメソッドの最初に
str = Iconv.conv(to, from, arg)とか書くのは普通だったような

むしろdupだとメモリ上の位置は動かないから省資源なんじゃないの? よくわからん
132デフォルトの名無しさん:2011/05/24(火) 06:56:40.48
>むしろdupだとメモリ上の位置は動かないから省資源なんじゃないの?
ワシもそう思う博士

ということで、実際にやったほうが実感できそうなので実験
用意するもの、使用メモリ表示するマッスィーン(topとか)、使用メモリ表示に引っかかる程度に大きなファイル
irb で str = File.read(path);nil して arr = [] して str.dup.object_id や arr << str.dup; nil 連打
…メモリ変動なし
1.9.2 の irb にて、str = File.read(path);nil して arr = [] して str.dup.object_id や arr << str.dup; nil 連打
…メモリ表示は特に動かんな、っていうか1.8.7より微妙に動作速くないか気のせいか
dup.force_encoding('ASCII-8BIT') と dup.force_encoding('Shift_JIS') と dup.force_encoding('EUC-JP') を連打
まだ動かない
str.dup.force_encoding('Shift_JIS').valid_encoding?
まだ
str.dup.force_encoding('EUC-JP').valid_encoding?
まだまだ

結論
>>129
Ruby本体の提供するライブラリ的にはFUD
へちょい第三者ライブラリがあるのを否定はしないが
133デフォルトの名無しさん:2011/05/24(火) 10:46:07.29
第二の言語としてRuby勉強しているのですが習得するまでどのくらいかかりそうですか?習得の定義は基本的な事が出来るか出来ないかです
134デフォルトの名無しさん:2011/05/24(火) 11:00:16.19
Rubyの基本ってどのへんだろう?
クラスとモジュール作って特異メソッドの概念掴んで、日常用途では継承はカスでMix-Inが有効と覚えて、
目的に応じた gem をソースコード見ながら使えるようになるくらいのレベルでいい?

既存言語を知っているなら、寄り道なしで20時間以下くらいな気がする
135デフォルトの名無しさん:2011/05/24(火) 11:12:43.84
最初の方で「Rubyではクラスすらオブジェクトでメソッドはインスタンスメソッドのみでselfが違うだけ」
というようなことをきちっと学ぶとその後の学習曲線が綺麗だと思いたい
クラスとモジュールとインスタンスメソッドとクラスメソッドとモジュールのメソッドを別個に覚えてしまうと無駄で大変
136デフォルトの名無しさん:2011/05/24(火) 11:47:52.18
rubygemsを1.8.3にアップデートしてもいいですか?
137デフォルトの名無しさん:2011/05/24(火) 11:52:15.74
たすけてください
gem install machanize
gem update --system
gem update machanize
ってしたらmachanizeを利用したスクリプトを起動すると↓みたいなのが出ます
これはどのように対処したらよいのでしょうか?

NOTE: Gem::Specification#default_executable= is deprecated with no replacement.
It will be removed on or after 2011-10-01.
Gem::Specification#default_executable= called from C:/Ruby192/lib/ruby/
gems/1.9.1/specifications/nokogiri-1.4.4.1-x86-mingw32.gemspec:11.
NOTE: Gem::Specification#default_executable= is deprecated with no replacement.
It will be removed on or after 2011-10-01.
Gem::Specification#default_executable= called from C:/Ruby192/lib/ruby/
gems/1.9.1/specifications/rubygems-update-1.8.3.gemspec:11.
1.8.3
138デフォルトの名無しさん:2011/05/24(火) 12:03:12.79
いいのかわかんないんですけどこうやったら出なくなりました

C:\Ruby192\lib\ruby\gems\1.9.1\specifications\rubygems-update-1.8.3.gemspec
をエディタで開いて11行目のs.default_executable = %q{update_rubygems}をコメントアウト
139デフォルトの名無しさん:2011/05/24(火) 12:39:21.43
gem pristine --all で再構築するのが正解
140デフォルトの名無しさん:2011/05/24(火) 12:58:47.60
あ、インストールオプションが必要な場合は
gem pristine nokogiri -- --with-xml2-include=なんとか とか書いてね
141デフォルトの名無しさん:2011/05/24(火) 13:21:30.81
それrubygems-updateのチェンジログに載ってるんだぜ。
142デフォルトの名無しさん:2011/05/24(火) 13:30:42.83
# -*- encoding: utf-8 -*-
$stdout.set_encoding(Encoding::Windows_31J, Encoding::UTF_8)

require 'socket'

addr = "msg○○○.live.nicovideo.jp"
port = ""
thread = ""

s = TCPSocket.open(addr,port)
req = "<thread thread=\"#{thread}\" res_from=\"-200\" version=\"20061206\" \>\0"
s.print req
s.each("\0") do |line|
line.force_encoding('UTF-8')
line.encode!(::Encoding::Windows_31J, :undef => :replace)
regex = Regexp.new(/<chat.+?date="([0-9]+?)".+?>(.+?)<\/chat>/)
line = line.scan(regex)[0]
p "time:#{line[0]} msg:#{line[1]}"
end

このコードではlineには["値1", "値2"]っていう風に入っているのにline[0]、line[1]とやるとエラーになってしまいます
何故なんでしょうか?
別ファイルにて
a = ["a", "b"]
p a[0]
p a[1]
と最小コードで試したらちゃんと表示できたのですが原因がわかりません
143デフォルトの名無しさん:2011/05/24(火) 14:14:20.10
>>142
scanの使い方が間違っている。

p "abcabc".scan(/(c).+(b)/) #=> ["cab"]
144デフォルトの名無しさん:2011/05/24(火) 14:15:21.11
と思ったら全然違った
145デフォルトの名無しさん:2011/05/24(火) 14:18:23.11
>>142
エラーメッセージをコピペして書いてください。
それから
>このコードではlineには["値1", "値2"]っていう風に入っている
と言いますが、もしそうなら
line[0], line[1]がエラーになることはありえないので、

p "time:#{line[0]} msg:#{line[1]}" をコメントアウトして代わりに
p line
してみてlineに実際何が入っているか確認してください。
146デフォルトの名無しさん:2011/05/24(火) 14:21:31.13
>>142
> このコードではlineには["値1", "値2"]っていう風に入っているのに
入ってないよ

ソケット通信で文字列受け取るところが若干特殊だが、メインは普通の文字列処理に過ぎないので、読み下す
 「"\0" で区切られた文字列ごとに、文字エンコーディング名義をUTF-8にし、文字エンコーディングをWindows-31Jに変換し、
 <chat...> にマッチする正規表現の結果を line という変数にして、その0要素目と1要素目を表示」
うん、で、「"\0" で区切られた文字列」って具体的にはどんな文字列?
s.each("\0"){|line| p line} で表示してみると、こんなふうになってる(これはニコ生の仕様を読んでもいい)

 "<thread resultcode=\"0\" thread=\"1092600265\" last_res=\"11081\" ticket=\"0xd24ab40\" ... \x00"
 "<chat thread=\"1092600265\" vpos=\"1797100\" date=\"1306212871\" mail=\"184\" user_id ... \x00"
  ...

つまり、<chat...> に絶対マッチしない文字列が来ることがある
マッチしないんだから、 String#scan の戻り値は空の配列 [] で、 それの0要素目は nil だ
nil[0] と nil[1] を p で表示しようとしてエラーになっている
> undefined method `[]' for nil:NilClass (NoMethodError)

# -*- encoding: utf-8 -*-
$stdout.set_encoding(Encoding::Windows_31J, Encoding::UTF_8, :undef => :replace)
require 'socket'
addr, port, thread = 'omsg103.live.nicovideo.jp', '2809', '1092600265'
regex = Regexp.new(/<chat.+?date="([0-9]+?)".+?>(.+?)<\/chat>/)

TCPSocket.open(addr,port) do |s|
s.write "<thread thread=\"#{thread}\" res_from=\"-200\" version=\"20061206\" \>\0"
s.each("\0").each do |line|
line.force_encoding(::Encoding::UTF_8)
line.scan(regex){|match| puts "time:#{match[0]} msg:#{match[1]}"}
end
end
147デフォルトの名無しさん:2011/05/24(火) 14:27:57.18
>>146
簡単に解決するには

line = line.scan(regex)[0]
の下に
next unless line
148デフォルトの名無しさん:2011/05/24(火) 14:29:32.86
each多かった
・ socket を open したら必ず close 「しなければならない」。close し忘れしないよう、普通はブロックを使う
・ リテラル /re/ で書ける限り、Regexp.new は使わない
・ $stdout.set_encoding... は「標準出力表示のときにこれでString#encodeする」のとほぼ同じ。処理被ってるので他のは消したよ
・ String#scan はブロックが使える。マッチした配列か、マッチした要素が渡る。今回の match は配列

# -*- encoding: utf-8 -*-
$stdout.set_encoding(Encoding::Windows_31J, Encoding::UTF_8, :undef => :replace)
require 'socket'
addr, port, thread = 'omsg103.live.nicovideo.jp', '2809', '1092600265'
regex = /<chat.+?date="([0-9]+?)".+?>(.+?)<\/chat>/

TCPSocket.open(addr,port) do |s|
s.write "<thread thread=\"#{thread}\" res_from=\"-200\" version=\"20061206\" \>\0"
s.each("\0") do |line|
line.force_encoding(::Encoding::UTF_8)
line.scan(regex){|match| puts "time:#{match[0]} msg:#{match[1]}"}
end
end
149デフォルトの名無しさん:2011/05/24(火) 14:31:05.24
どうでもいいけど、

ソースファイルにマルチバイト文字ないから
# -*- encoding: utf-8 -*-
とかいらないし、

line.force_encoding('UTF-8')
line.encode!(::Encoding::Windows_31J, :undef => :replace)
するなら
$stdout.set_encoding(Encoding::Windows_31J, Encoding::UTF_8)
とかいらないし、

line.force_encoding('UTF-8')
line.encode!(::Encoding::Windows_31J, :undef => :replace)
するぐらいなら
line.encode!('Windows-31J', 'UTF-8', :undef => :replace)
で十分だし、

Regexp.new(/<chat.+?date="([0-9]+?)".+?>(.+?)<\/chat>/)

/<chat.+?date="([0-9]+?)".+?>(.+?)<\/chat>/
と同じ意味で冗長だし
150デフォルトの名無しさん:2011/05/24(火) 14:32:22.56
>>147
それだと多分ただのおまじないになってしまうと思ったのでやらなかった
nil が返るというのは、Ruby スクリプトのデバッグにおいては大変大きなシグナル
これを怖がってもらうと、ちょっと困る
151デフォルトの名無しさん:2011/05/24(火) 14:42:07.52
>>148
>$stdout.set_encoding... は「標準出力表示のときにこれでString#encodeする」のとほぼ同じ。

str.encode(to, from)は
str.dup.force_encoding(from).encode(to,from)

と同じだけど、

$stdout.set_encoding(to, from)の場合、
str.encode(from).encode(to, from)と同じ処理になるから挙動が全く違うような……。
152デフォルトの名無しさん:2011/05/24(火) 14:49:13.82
そもそものアレとして、$stdout.set_encoding はわりと小手先テクニックの部類だよね
世の中ではあんまり使われてないと思うので、できれば他の方法覚えたほうがいいんじゃないかな…
153デフォルトの名無しさん:2011/05/24(火) 14:52:51.25
>ソースファイルにマルチバイト文字ないから
># -*- encoding: utf-8 -*-
>とかいらないし、
"プレーンテキスト"にはエンコーディング不要とか信じ込んでる>>149はメリケン
154デフォルトの名無しさん:2011/05/24(火) 14:58:27.55
以下の条件を満たす関数を作ろうと思っています。
・引数に文字列を取る
・引数がURLとして正しければtrue、間違えて入ればfalseを返す
URLとして正しいかどうかを判定できるライブラリって、rubyにありませんでしょうか。
正規表現で判定するしかないのでしょうか。
155デフォルトの名無しさん:2011/05/24(火) 15:00:48.29
>>154
require 'uri' して URI.regexp('http') にマッチするかどうかを試せばいい
HTTP URI でなくてもいいなら単に URI.regexp

URI.parse したほうがいいと思うけど…
156デフォルトの名無しさん:2011/05/24(火) 15:16:45.46
>>154
どこまで細かくやりたいか次第だけど
最悪Addressable使えば何とかなるかな
157デフォルトの名無しさん:2011/05/24(火) 15:19:40.55
>"プレーンテキスト"にはエンコーディング不要とか信じ込んでる>>149はイケメン
に見えた
疲れてるのだろうか
158デフォルトの名無しさん:2011/05/24(火) 15:21:43.03
URIの正規表現表示なんて RFC2396 できっちり定義されてるから自分で考える必要は全くないしな。

%r|^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?|

>>155の言うとおりライブラリに教えてもらうのが手っ取り早い。
159デフォルトの名無しさん:2011/05/24(火) 15:51:37.64
秀丸でRuby書いてます
初心者は秀丸でもいいですか?
160デフォルトの名無しさん:2011/05/24(火) 15:59:32.62
・ 着色されている
・ 自動インデントしてくれる
・ 普段の操作感で操作できる

の3つが揃っていればなんでもいいです
「Rubyの学習のために〇〇を導入しました〇〇の勉強と並行して進めてます」みたいなことでなければOK
特殊環境はRubyに書き慣れてからおもむろに移行しても充分間に合うから
161デフォルトの名無しさん:2011/05/24(火) 17:11:04.67
>>159
初心者は、というか別にいつまでも秀丸でも全然構わんよ。
Rubyスクリプトを書くには使いやすテキストエディタがあればそれで十分。

なにか画期的なIDEがあるわけでもなし。
Radrailsは大した機能もないのに禿重いし、RDEは重くはないが問題多いし。
162デフォルトの名無しさん:2011/05/24(火) 18:23:45.76
p "\a"でビープが再生できないのは何故ですか?
printとputsではできたのに
163デフォルトの名無しさん:2011/05/24(火) 18:41:55.43
>>162
実際に何が出力されてるのかというと

% ruby -e 'p "\a"' | hexdump -C
00000000 22 5c 61 22 0a    |"\a".|

% ruby -e 'print "\a"' | hexdump -C
00000000 07          |.|

もしよくわからなかったら16進数とASCIIコードを調べて
164デフォルトの名無しさん:2011/05/24(火) 18:47:56.07
s = "あいうえ"
ptn = "/い/"
r = Regexp.new(ptn)
p s.match(r)

はヒットしないのに

s = "あいうえ"
p s.match(/い/)

はヒットする理由を教えてください
165デフォルトの名無しさん:2011/05/24(火) 18:55:37.94
ptn = "/い/"; r = Regexp.new(ptn) で出来上がる正規表現が
最初にスラッシュ、次に い、最後にスラッシュ、にマッチする正規表現だから
Regexp.newに渡す場合は /.../ は不要
166デフォルトの名無しさん:2011/05/24(火) 18:55:58.15
p r

p /.い/
の結果を比べてみなさい
167デフォルトの名無しさん:2011/05/24(火) 19:05:41.13
Regexp.new とか Regexp.compile に "/pattern/"渡しちゃう人多いねー。
"pattern" 渡さなきゃいけないのに。
168デフォルトの名無しさん:2011/05/24(火) 19:33:15.47
>>167
多いというかこのスレに限っては多分同じ人
169デフォルトの名無しさん:2011/05/24(火) 19:40:12.79
r = eval(ptn) としましょう、とかネタで答える奴はいないか
170デフォルトの名無しさん:2011/05/24(火) 19:47:09.68
正規表現リテラルの
//
もパターンの一部だと思ってるんじゃね?
171デフォルトの名無しさん:2011/05/24(火) 19:51:23.95
ウソだと思って笑いながら "/ を検索したら、結構ある。
172デフォルトの名無しさん:2011/05/24(火) 22:41:34.79
Ruby1.9.2-p180を、VS2010のnmakeでコンパイルしようとしたら、
こんなエラーが出るのでてビルド失敗するんですがどうして?

フォルダ\ruby-1.9.2-p180\win32>nmake

Microsoft(R) Program Maintenance Utility Version 10.00.30319.01
Copyright (C) Microsoft Corporation. All rights reserved.

-I./.. ./../tool/compile_prelude.rb ./../prelude.rb miniprelude.c
'-I.' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
NMAKE : fatal error U1077: '-I.' : リターン コード '0x1'
Stop.
173デフォルトの名無しさん:2011/05/24(火) 22:52:42.15
>>172
WindowsでRubyをビルドするにはいくつかの準備が必要で
それを怠ると謎のエラーがでるので、それに該当してるんじゃないかと思う

とりあえず、以下のあたりが必要

- 既存 ruby (ruby.exe が使えるようパスを通す)
- bison for Windows <http://gnuwin32.sourceforge.net/packages/bison.htm>
- sed for Windows <http://gnuwin32.sourceforge.net/packages/sed.htm>
- libintl-3 <http://gnuwin32.sourceforge.net/packages/libintl.htm>
- libiconv-2 <http://gnuwin32.sourceforge.net/packages/libiconv.htm>
- regex <http://gnuwin32.sourceforge.net/packages/regex.htm>

設定方法は上記をキーワードにインターネットで検索すれば分かる
174173:2011/05/24(火) 23:07:15.73
自分も最近ハマったくちなのでもう少しだけ補足しておくと
gnu関連のツールをインストーラでなくzipから直接展開して使う場合、

C:\gnu

みたいなフォルダを作って、そこに bison.exe や sed.exe だけを展開してもダメで、

C:\gnu\bin
C:\gnu\share

の2つのフォルダを作って、binに bison.exe や sed.exe、その他 dll を入れ、
share 配下には各 zip に含まれる share 配下をそのままコピーしたうえで、
C:\gnu\bin に path 通して使うとよい

このあたりの情報がうまく見つからなくて2時間ほど無駄にした
175172:2011/05/24(火) 23:28:31.16
>>173-174
WindowsでRubyを自分でビルドするのって大変みたいですね
その情報をもとに頑張ってみます
ありがとうございました
176デフォルトの名無しさん:2011/05/24(火) 23:45:23.65
rubyの初心者向け勉強会をどなたか都内で開いてください
177デフォルトの名無しさん:2011/05/24(火) 23:47:40.38
つ言い出しっぺの法則
178デフォルトの名無しさん:2011/05/24(火) 23:52:58.27
初心者の僕が開いても講義はp "hello world"ぐらいしか出来ないのですいません。。。
179デフォルトの名無しさん:2011/05/24(火) 23:56:00.23
そして参加者から「p はデバッグ向けだろ。ちね」とか言われるんですね
わかります
180デフォルトの名無しさん:2011/05/25(水) 00:13:01.82
$ bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)

rvmインストールする際のコマンドらしいのですが、
このコマンドでは何が行われてるのですか?
181デフォルトの名無しさん:2011/05/25(水) 00:15:37.78
curlで該当個所にあるインストーラシェルスクリプトをゲットしてきて
bashでそれを実行している。
182デフォルトの名無しさん:2011/05/25(水) 00:40:46.00
人に勉強会開いてもらう暇あったらコードのひとつでも書くか読むか汁
183デフォルトの名無しさん:2011/05/25(水) 07:02:14.99
>>180
wget URL -O /tmp/rvminstall
bash /tmp/rvminstall
rm /tmp/rvminstall

を、一時ファイルを介さない形で標準出入力を駆使して実行
コピペ1発実行できるよう1行にまとめてしまったので呪文になってる
使用シェルがbashでない場合は動作しないかもしれないが、rvm自体bash必須なのでどうということはない
184デフォルトの名無しさん:2011/05/25(水) 10:10:58.61
冗長なくせに低速な言語w
ライブラリの豊富さスピード可読性習得コストすべてにおいてpythonに劣る糞言語w
185デフォルトの名無しさん:2011/05/25(水) 10:15:38.40
pythonで書いたスクリプトが起動が遅いからRubyに着たんですけどPythonのほうが早いのですか?
186デフォルトの名無しさん:2011/05/25(水) 10:21:54.27
>>185
超一般論としては、完成したスクリプトの実行時間はPythonのほうが速い
Pythonでやって遅くて、その遅い理由が不可避であったのなら(アルゴリズムとかデータ処理量とか)、
Rubyで同じことをやってもやっぱり遅いというか、より遅い可能性が大
187デフォルトの名無しさん:2011/05/25(水) 10:29:24.58
起動が遅いってのはなんとなく俺も感じる。Python3だからかな
188デフォルトの名無しさん:2011/05/25(水) 10:44:34.03
Python は名前とかわいくない蛇のアイコンがダメ
189デフォルトの名無しさん:2011/05/25(水) 10:47:10.23
ぼくもPython3です
print "a"だけのコードでも起動が遅いのでRubyに来たのですよ
190デフォルトの名無しさん:2011/05/25(水) 11:00:02.95
アホな話題だな。
リアルでこんな話されたらミミクソほじほじしてフッって吹きかけるわ。
191デフォルトの名無しさん:2011/05/25(水) 11:05:43.77
PHPとPythonの単語を聞くと発狂する人がいるから気をつけてw
192デフォルトの名無しさん:2011/05/25(水) 11:33:28.58
RubyスレにPythonとPHPの宣伝しに来る人がそもそも発狂してると思う
193デフォルトの名無しさん:2011/05/25(水) 12:36:00.50
xmlの整形がしたいんですがおすすめのライブラリってありませんか?
194デフォルトの名無しさん:2011/05/25(水) 13:06:03.55
>>191
そんな人は見たことがない
あなたが演じないとそもそも存在しないのでは

>>193
整形とはそもそもなんぞやという…
Nokogiri::XMLでできなければ、できない要件を添えて報告すると誰かが対案出すかも
195デフォルトの名無しさん:2011/05/25(水) 13:59:38.80
サーバから送られてくるCookieを保存したいのですが
curlのCOOKIEJARみたいな事をするにはRubyで参考になるサイトございませんか?
196デフォルトの名無しさん:2011/05/25(水) 14:04:36.19
Mechanize で agent.cookie_jar を save して load すればだいたい用は済む気がする
Mechanize が大仰だというならなんか httpclient かなんかふつうの使うとか
汎用的なクッキーライブラリはあったかなあ
197デフォルトの名無しさん:2011/05/25(水) 14:43:55.31
Cookie を URL と関連付ける専用のライブラリというのは見たことがない
あったらあったで便利な気がするけど

>>195
まあレスポンスヘッダ読んで保存して読み込んでリクエストヘッダにセットするだけの簡単なお仕事です
Cookie のしくみを知らないのなら絶対に書けないので、
勉強していただくか Net::HTTP 単体を諦めて>>196のクローラ使うかどっちか
198デフォルトの名無しさん:2011/05/25(水) 14:44:21.07
ここの住民ってRubyしかできない人が多い?
PythonやPerlやPHPもできる人っている?
199デフォルトの名無しさん:2011/05/25(水) 14:49:19.45
>>198
Rubyしかできないってのは珍しいと思う
C/C++なんかはRubyと補完関係にあるし連携も比較的いいから
どちらも使えるって人は多いっぽい

Perlからの移行組も一定数いるはず
Python/PHPはちょっと分からんが、まあいないとは思えない
200デフォルトの名無しさん:2011/05/25(水) 14:52:16.43
他人が作ったRubyライブラリを使おうと思うとCの読み書きはどうしても必要になってくるので、
必要に迫られてある程度(偏って)できるようになったりする

Ruby+Perl と Ruby+Python は普通にいるだろ
Ruby しか使えない人間なんて Ruby にとってもゴミでしかない
他の言語にも目を向けて視線は高く持ちましょう
201デフォルトの名無しさん:2011/05/25(水) 15:00:00.50
お前らがそういう
「Rubyで書きにくいからこれは他の言語で書いちゃえ」
ってやってばっかりいるからRubyの書きにくい分野が進展しないのだw

いや、頑張るところはよく考えて配分されるべきだしそれでいいんけどさ
202デフォルトの名無しさん:2011/05/25(水) 15:01:46.39
C, Lisp, Perl, Python, PHP, Smalltalk, shあたりの話は普通に通じる人が多い印象。
あとその人の志向によってはHaskellやJavascriptも。
203デフォルトの名無しさん:2011/05/25(水) 15:08:45.85
>>198
その中ならPerlは昔それなりに使ってたから書ける(読める自信はあんまりない)
CとDは読み書きできる。
204デフォルトの名無しさん:2011/05/25(水) 15:15:18.24
DHHがPHPerだったよな
205デフォルトの名無しさん:2011/05/25(水) 15:18:55.62
ループ中にキーボードが何押されたか取得する場合って何のライブラリを使うのでしょうか?
秀丸マクロで言うとiskeydownのような事をやりたいのです
206デフォルトの名無しさん:2011/05/25(水) 15:19:39.96
まさかrubyを自分のスキルのメインにしてる奴なんてほとんどいないだろ。
207デフォルトの名無しさん:2011/05/25(水) 15:22:15.27
メインはなに?
208デフォルトの名無しさん:2011/05/25(水) 15:30:46.34
Mechaizeを使わないでRuby標準のライブラリのNET::HTTPだけでクッキー取得するのは難しい作業になりますか?
209デフォルトの名無しさん:2011/05/25(水) 15:43:06.44
>>208
httpとかCookieの仕組みというか仕様を知ってるなら簡単
知らないならそれをお勉強してください
210デフォルトの名無しさん:2011/05/25(水) 15:47:56.11
俺httpとCookie知ってるんだぜwwwwwwwwwwwwwwwwwwwwwwwww
211デフォルトの名無しさん:2011/05/25(水) 15:57:00.60
そのへんの知識があれば書けるというものでもないと思うが
212デフォルトの名無しさん:2011/05/25(水) 16:04:24.97
文字列を1オクテットずつ16進表記で配列にいれる場合、Perlなら

my @hex_strings = unpack("(H2)*", "ABC"); # => ("41", "42", "43")

とするのですが、Rubyの場合はどのようにすればいいのでしょうか?
213デフォルトの名無しさん:2011/05/25(水) 16:17:33.37
>>211
サーバから受け取ったものを持続的接続のために同じサーバへ返すだけなら結構なんとかなる

>>212
"ABC".each_char.map{|x| x.unpack('H*')}.flatten
214uy:2011/05/25(水) 16:18:50.98
>>205

require 'Win32API'
# require 'dl/win32'

class Win32API
  def Win32API.GetKeyState( int )
     func = Win32API.new('user32', 'GetKeyState', %w(i), 'i')
     func.call( int ) & 0x80 
  end
end

loop do
  sleep 0.01
  break if 0 != Win32API.GetKeyState( 0x1B )  # ESCAPE
end

p :end
215デフォルトの名無しさん:2011/05/25(水) 16:31:03.73
>>205
Windowsでいいんだよね?

特定のキーが押されているかどうか取得するなら

require 'Win32API'
api = Win32API.new('user32.dll', 'GetKeyState', 'i', 'i')
loop do
"'Enter' is down" if api.call(0x0d) < 0
end

0x0dのところは仮想キーコードでぐぐってくれ。
押されてるときはapi.callの戻り値が負になる。
216デフォルトの名無しさん:2011/05/25(水) 16:32:10.39
>>213
d
217デフォルトの名無しさん:2011/05/25(水) 16:46:00.49
>>209
簡単ではないがまあ、ハマるポイントも想定しやすいし
ここに聞きに来る前提なら何とかなる公算は高いかも
218デフォルトの名無しさん:2011/05/25(水) 17:03:00.35
s = [1,2,3]
s.each do |line|
puts line
end
で配列を一つずつ出力できましたが
たまにeach("文字列")みたいにs.each("文字列") do |line|な感じのコードを見るのですが
これはどういう場合に使うのですか?
219デフォルトの名無しさん:2011/05/25(水) 17:03:41.90
>>213
1.9だとマルチバイト文字が1文字として返るので、 each_byte で。
bytes もいいよ。

# coding: utf-8
'ABC'.bytes.map{|x| '%02x' % x}
=> ["41", "42", "43"]
'あいう'.bytes.map{|x| '%02x' % x}
# => ["e3", "81", "82", "e3", "81", "84", "e3", "81", "86"]

# オクテットとバイトは違うというツッコミは勘弁な。
220デフォルトの名無しさん:2011/05/25(水) 17:07:18.95
>>218
1.8までのString#eachは行単位の処理を行う。
そのとき、行区切り文字を $/ (通常は改行文字を意味する)以外にしたいときに指定する。

1.9 だと s.lines("文字列").each になるのかしらね。
221デフォルトの名無しさん:2011/05/25(水) 17:10:37.92
>たまに
っていうか、このスレくらいでしか見ないと思う(今年見たのはここが初めて)
だらだら無限に流れてくる、非改行区切りの文字列なんてそうそうあるもんではない
222デフォルトの名無しさん:2011/05/25(水) 17:12:20.74
日記はブログで
223デフォルトの名無しさん:2011/05/25(水) 17:24:13.58
>>221
ファイルとして確保可能なら最後まで1回で read してしまうからなあ
ああそうだよこんなことするから消費メモリ多くなるんだよ Ruby
224デフォルトの名無しさん:2011/05/25(水) 17:39:01.39
>>221
COBOLの呪いがかかった固定長文字列とかはあるけど、
普通、別の何かで取り込むだろうしな。
225デフォルトの名無しさん:2011/05/25(水) 20:20:02.13
以下のスクリプトを実行したとき、
test(2)とtest(3)では、結果のエンコーディングが違うのですが、何故このような結果になるのでしょうか

#encoding: Windows-31J
# test(1)
s1 = "".encode("utf-8");
s2 = "".encode("utf-8");
p (s1+s2).encoding
s1 += s2; p s1.encoding
# test(2)
s1 = "".encode("utf-8");
s2 = "".encode("Windows-31J");
p (s1+s2).encoding
s1 += s2; p s1.encoding
# test(3)
s1 = "".encode("utf-8");
s2 = "あいうえお";
p (s1+s2).encoding
s1 += s2; p s1.encoding

1.9.2p136の実行結果
------------
#<Encoding:UTF-8>
#<Encoding:UTF-8>
#<Encoding:UTF-8>
#<Encoding:UTF-8>
#<Encoding:Windows-31J>
#<Encoding:Windows-31J>
226デフォルトの名無しさん:2011/05/25(水) 20:30:36.76
>>225
えーと、異なるエンコーディングの文字列を「連結」するように指示された場合、
「ベースとなる」ほうの文字エンコーディングが「連結しようとする」文字エンコーディングと互換な場合、
結果のエンコーディングは「連結しようとする」文字エンコーディングに揃えられる

A+B のとき、Aが変換なしでBの文字エンコーディングとみなすことができる場合、結果の文字エンコーディングはBと同じになる

"abc" + "UTF-8な文字列" は、 "abc" の文字エンコーディングに関わらず UTF-8
"abc" + "Windows-31Jな文字列" は、 "abc" の文字エンコーディングに関わらず Windows-31J
"UTF-8な文字列" + "WIndows-31Jな文字列" は、変換なしでは連結できないのでエラー
227デフォルトの名無しさん:2011/05/25(水) 20:42:39.84
>>225
空文字列とそうでない文字列の連結では空じゃない文字列のエンコードが優先される。
どちらも空か、どちらも中身がある場合はレシーバ(左の項)のエンコードが優先される。
(どちらも中身があって、互換性のない部分(非ASCII文字)があると例外発生)

たぶんできるだけエンコーディングの変換をせずに文字列としての妥当性を保つための仕様。

#encoding: Windows-31J
# test(4)
s1 = "".encode("utf-8");
s2 = "aiueo";
p (s1+s2).encoding #=>#<Encoding:Windows-31J>

# test(5)
s1 = "aiueo".encode("utf-8");
s2 = "";
p (s1+s2).encoding #=>#<Encoding:UTF-8>

# test(6)
s1 = "aiueo".encode("utf-8");
s2 = "aiueo";
p (s1+s2).encoding #=>#<Encoding:UTF-8>
228デフォルトの名無しさん:2011/05/25(水) 20:52:04.59
String<< なら変わらないので、文字列連結の時はちょっと気をつけるといい

irb> s = ""
irb> p s.encoding
#<Encoding:UTF-8>
irb> s = s + 'abc'.encode('Windows-1252')
irb> p s.encoding
#<Encoding:Windows-1252>

irb> s = ""
irb> p s.encoding
#<Encoding:UTF-8>
irb> s << 'abc'.encode('Windows-1252')
irb> p s.encoding
#<Encoding:UTF-8>

str = str + 何か という文字列の再代入記述はオブジェクト的にカッコ悪いということであんまり支持がなかったんだけど、
1.9 で不支持の意図が明確になった
1.8 使ってる人は気をつけよう
229デフォルトの名無しさん:2011/05/25(水) 20:53:12.14
>>225-227

# test(7)
s1 = "aiueo".encode("utf-8");
s2 = "あいうえお";
p (s1+s2).encoding #=>#<Encoding:Windows-31J>

# test(8)
s1 = "あいうえお".encode("utf-8");
s2 = "aiueo";
p (s1+s2).encoding


ということで>>226>>227どちらもルールとして不十分

・空文字列とそうでない文字列の連結では空でない文字列のエンコードが優先される。
・どちらも空か、どちらも中身があり、相互に互換性がある場合はレシーバ(左の項)のエンコードが優先される。
・どちらか一方に互換性のない文字列がある場合は互換性のない方が優先される
・AとB相互に互換性のない文字列があるとエラー
230デフォルトの名無しさん:2011/05/25(水) 20:53:24.99
rubyから利用できるライブラリで強度のある暗号復号化が出来るライブラリは何を使えばよいか?
231デフォルトの名無しさん:2011/05/25(水) 20:58:48.04
ということはOpenSSLで使えるAESなどより強度のあるものを求めているわけだな?
Camelliaは評判どうなんだろうね。OpenSSL 1.0では組み込まれたようだけど。

232デフォルトの名無しさん:2011/05/25(水) 21:00:36.65
>>228
str = str + 何か

は捨てるオブジェクトが増えるのも問題。
回数の多い繰り返し処理ではやってはいけない。

オブジェクトを出来るだけ捨てないようにすることの大切さは以下

require 'benchmark'

CHAR = '*'
N = 100000
Benchmark.bm(4) do |x|
str = ''
x.report('+ : '){ N.times{ str += '*' } }
str = ''
x.report('<<: '){ N.times{ str << CHAR } }
end

user system total real
+ : 3.578000 2.234000 5.812000 ( 5.921875)
<<: 0.031000 0.000000 0.031000 ( 0.031250)
233225:2011/05/25(水) 21:12:55.15
>>226-229,232
ありがとうございます
いろいろ勉強になりました

基本は、複数のエンコードが混在する可能性があるなら、右辺値を明示的にエンコンードしてから
結合する必要がある、ということですね。
言われてみれば、まったく当たり前のことですが、試した結果が右辺値が優先される場合がある、
というのにとらわれて、思考停止してました。
でも、詳しいルールが分かったので聞いてみて良かったです

>>についても勉強になりました。
234デフォルトの名無しさん:2011/05/25(水) 21:13:27.53
今からRubyの勉強をしようと思うのですが
みなさんどんなテキストエディタを使っていますか?
235デフォルトの名無しさん:2011/05/25(水) 21:14:39.89
Ruby自身が暗号化機構提供してるわけじゃないので、
目的に合致する暗号化技術を見つけてからそれのRubyバインディングを探す、という手順になるかと思う
236デフォルトの名無しさん:2011/05/25(水) 21:16:12.36
>>234
Windowsではxyzzy
LinuxではEmacs
237デフォルトの名無しさん:2011/05/25(水) 21:33:52.92
>>234
使い慣れたえでぃたー

前にもあったが、Rubyのために新規アプリ導入とかマジキチ
…まあ、エディタなんて使ったことないですワードでいいですかみたいな人もいそうだけれど
238デフォルトの名無しさん:2011/05/25(水) 21:35:45.56
>>234
サクラエディタ
239uy:2011/05/25(水) 21:51:19.00
Ruby in Steelつかおうぜ
Ironrubyはともかくエディタ性能はそこそこ
VisualStudioの癖に軽いよ 唯一の欠点は実行後に、フォーカスが出力ウィンドウに取られること、調べたけど設定どうしようもなかった
240デフォルトの名無しさん:2011/05/25(水) 21:51:42.15
>>234
Notepad++をおぬぬめぬめぬぬめぬめしとく。
241デフォルトの名無しさん:2011/05/25(水) 22:30:30.25
この質問何回目だ
242デフォルトの名無しさん:2011/05/25(水) 22:37:47.53
HTTPとCOOKIEはwikipediaに書いてあることだけじゃダメですか?
243デフォルトの名無しさん:2011/05/25(水) 23:00:24.14
>>242
英語版のWikipediaにcookieの実装がまるまる書いてあるから
それ読めばいんじゃね
244デフォルトの名無しさん:2011/05/25(水) 23:10:28.94
>>242
日本語のHTTP Cookieの項目読んでもレスポンスやリクエストのCookie周りの読み方わかんないよね。
RFCか、英語がどうしても嫌ならその日本語訳でも読んでみたら?
245デフォルトの名無しさん:2011/05/25(水) 23:11:24.02
クッキーを受信するためにヘッダーで送れってことですか?
246デフォルトの名無しさん:2011/05/25(水) 23:15:31.76
HTTP Cookie を理解するには HTTP と URI の理解がどーしても必要
いろいろ積み上げた上の方にある糞みたいな技術なので、一足飛びに読んでもまったく使えない
送ってしまったクッキーが正しいかどうかはこちらからは全くわからないのも面倒
247デフォルトの名無しさん:2011/05/25(水) 23:25:13.43
>>245
レスポンスのヘッダに書かれてるSet-Cookieを読んで解析して、
リクエストのヘッダにCookieを書き出すの
248デフォルトの名無しさん:2011/05/25(水) 23:25:53.46
>>245
たぶん、このスレの人でも分からないかと
詳しくは
ttp://okwave.jp/qa/q1026034.html
249デフォルトの名無しさん:2011/05/25(水) 23:29:54.86
def login(username, password)
uri = URI.parse("https://secure.nicovideo.jp/secure/login?site=nicolive_antenna")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Post.new(uri.request_uri)
request.set_form_data({:mail=>username, :password=>password})
response = http.request(request)
p response.get_fields('Set-Cookie')
#regex = Regexp.new(/<ticket>(.+?)<\/ticket>/)
#return response.body.scan(regex)[0][0]
end
としてみましたけどクッキーが取れないのです
250デフォルトの名無しさん:2011/05/25(水) 23:33:17.51
>>248
たぶん君だけ間違ってる
CGIの話じゃない
クライアントがサーバからCookieを受け取って送り返す話

いや、まあ、全く関係ないタイミングで>>242がCGIの話を始めた可能性は確かにあるんだがw
251デフォルトの名無しさん:2011/05/25(水) 23:33:28.99
Pythonなら簡単に出来るよからPython覚えてみ
252デフォルトの名無しさん:2011/05/25(水) 23:45:37.32
>>251
Pythonでのコードをお願いします
253デフォルトの名無しさん:2011/05/26(木) 00:02:27.61
>>249
何かうまくいかないときに response 全体を読んで確かめないのはおばあちゃんの遺言かなにかですか
254デフォルトの名無しさん:2011/05/26(木) 00:07:25.03
ニコ動はログインに何回か失敗するとロックされるよね
レスポンスヘッダだけ見てたんじゃわからんわな、そりゃ
255デフォルトの名無しさん:2011/05/26(木) 00:20:58.73
いろいろ言いたいことはあるんだが、とりあえず相手先のサーバのAPIの規則は守れ
送るデータは mail=メールアドレス&password=パスワード だ
256デフォルトの名無しさん:2011/05/26(木) 00:30:42.65
usernameのところはメールアドレスでpasswordのところはパスワードが入ってます
responseをやっても200コードが帰ってきてるのを確認できててbodyに文字列がはいってるのですがcookieが帰ってきませんでした
257デフォルトの名無しさん:2011/05/26(木) 00:31:17.77
258デフォルトの名無しさん:2011/05/26(木) 00:37:53.51
なにその大雑把にひどいオチ

まあ、マニュアルはとりあえず読んどけというお話でした
次の方どうぞ
259デフォルトの名無しさん:2011/05/26(木) 04:29:28.18
なにかうまく行かないところはあちこち小単位でpとかなんとかそういうので出力してみてバグの場所を特定するとか、
エラー吐いたときはエラーメッセージ読んでみて、意味が分かればそれに合わせて修正とか、
意味がわからなかった/解決法がわからないときだけは仕方ないからエラーメッセージちゃんとつけて質問するとか、


最近はうるさく言われることは減ったけど、これ守るだけでスキルもつきやすくなるし、
問題の解決もずっとずっと早いよね。
260デフォルトの名無しさん:2011/05/26(木) 06:32:17.83
>>256
今回(も)、ステータスコードとログイン失敗には関連性はない
(本来はあるべきなんだが、システム作った人の考え方依存)
ニコニコ動画ではログイン失敗でも HTTP status として "200" を返すので、その情報には1ミリも価値がないw
送信データの結果として何が起こってるかは、メッセージボディを直接読まなければならない

まあ、たぶん、200 以外でエラーを返すとエラーメッセージ読めない人がいるという経験則なんだろうと思う
261デフォルトの名無しさん:2011/05/26(木) 07:27:31.80
最近くだらない(しかもRubyと関係ない)質問が多いなぁと思ったけど、
これは良いことなのか。
プログラミング初心者がRubyを使っているということなのか。
Rubyユーザーの新規開拓や〜
262デフォルトの名無しさん:2011/05/26(木) 07:49:08.38
RubyではWindows用アプリケーション(ウィンドウ出る普通のやつ)は作れませんよー
ああいうのつくりたい人はC#とかやったほうが速攻で作れるようになりますよー

一応定期的に釘差しておく
263デフォルトの名無しさん:2011/05/26(木) 07:59:33.25
最初からWindowsでRubyやってる人がいるっぽいけど、頑張るなあと思う
WindowsのRubyなんて、LinuxあたりでRuby使ってた人が代替で使うもんだとばかり思ってた
264デフォルトの名無しさん:2011/05/26(木) 08:10:27.88
Win32APIが普通に叩けるからWindows用アプリケーションは作れないということもないが苦行だな。
265デフォルトの名無しさん:2011/05/26(木) 08:16:05.17
逆立ちしながら徒競走に出るのは、その人は何か考えるところがあって頑張ったかもしれないが、でも徒競走としてはビリだ
逆立ちしながら徒競走選手権があれば褒められたかもしれないが、早く終われよ次の人待ってるんだからよ、と思われてる可能性が大
266デフォルトの名無しさん:2011/05/26(木) 08:24:16.02
Windows用のGUIアプリケーションをRubyで作ると言うことと
Windows用のアプリケーションやツールをRubyで作ると言うことは
微妙にニュアンスが違う

前者はやや苦行かもしれないが
今となっては、後者が苦行と言うことはないだろう
普通に便利だよ、Windows上でRuby
267デフォルトの名無しさん:2011/05/26(木) 08:25:56.43
GUIはTitaniumDesktopでおおむねイケるよね
268デフォルトの名無しさん:2011/05/26(木) 08:51:46.46
どうでもいいんだけど、 encoding: utf-8 と書くのはできればやめて欲しい
coding: utf-8 と書いて欲しい
269デフォルトの名無しさん:2011/05/26(木) 09:04:13.45
coding:utf8と書けるようにしなかったのは世紀の大失策
270デフォルトの名無しさん:2011/05/26(木) 09:58:51.18
p response.bodyの結果はこのようにチケットが帰ってきてるので正常に認証はおこなえてました
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<nicovideo_user_response status=\
live_antenna_数字</ticket>\n</nicovideo_user_response>"

PHP5.3ですがcurlでやるとログインAPIその1用の所でクッキーが取れているのでRubyでも文字列だけでなくクッキーが帰って来るはずなんですが勘違いしてますでしょうか?
function login($param) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://secure.nicovideo.jp/secure/login?site=niconico");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_COOKIEJAR, "./saveCookie.txt);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
curl_exec($ch);
curl_close($ch);
}
login(array('mail'=>'メールアドレス', 'password'=>'パスワード');

クッキーの内容(認証用チケットの数字が当てはまる箇所はありませんでした)
# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

secure.nicovideo.jp  FALSE  /secure/  FALSE  数字  user_session  deleted
secure.nicovideo.jp  FALSE  /  FALSE  数字  user_session  deleted
.nicovideo.jp  TRUE  /  FALSE  数字  user_session  user_session_数字_数字
271デフォルトの名無しさん:2011/05/26(木) 10:14:58.50
>>270
https://secure.nicovideo.jp/secure/login?site=niconico が返すのはキー文字列ではなくクッキーだな
API の仕様にそう書いてあ
…仕様どこだ
まあいいや、とにかく API が違うんだから動作も違う
サーバが何を返すかどうかはサーバが決める
272デフォルトの名無しさん:2011/05/26(木) 10:29:38.02
ニコニコ動画は URL の ? のあとに何が書いてあるかでログイン後にどうするかを振り分けてる
site=niconico と site=nicolive_antenna が返すものは別
Ruby 関係ないシリーズ絶好調だが、外界と無関係に Ruby を使うことはできないのであんま気にしなくていいと思う
273デフォルトの名無しさん:2011/05/26(木) 11:08:46.44
クエリにsite=nicolive_antennaってどこから出てきたんだ
274デフォルトの名無しさん:2011/05/26(木) 11:14:34.52
site=niconico と site=nicolive_antennaでもどっち使ってもログインよ
275デフォルトの名無しさん:2011/05/26(木) 11:45:17.46
>>268
意味的にはencoding=符号化の方法、coding=プログラムを書くこと
だと思ってたから、encodingのほうが合ってるような気がするんだが
276デフォルトの名無しさん:2011/05/26(木) 11:49:46.67
>>263
コマンドプロンプトのサポートツールとしては結構役に立つよ
標準コマンドにテキストツールが不足気味だからね
277デフォルトの名無しさん:2011/05/26(木) 11:51:44.96
>>273
>>249

この人はクッキーを返さない API の動作を不審に思って、クッキーを返す API を curl から実行してレスしている
そりゃ API 違うから動作も違うじゃん? としか言えない
278デフォルトの名無しさん:2011/05/26(木) 11:52:12.98
LinuxでRuby使うのとWinで使うのは何が違うの?
279デフォルトの名無しさん:2011/05/26(木) 11:55:57.36
>>277
niconicoもnicolive_antennaも同じだけど?
280デフォルトの名無しさん:2011/05/26(木) 12:02:10.29
# -*- coding: utf-8 -*-
# encoding: utf-8
# coding: utf-8

のどれかを推奨
-*- をつけると Emacs さんが自分向けだと思ってコマンド解釈開始するので、その場合は conding でないと困る

# -*- encoding: utf-8 -*-

はファイル開くときに Emacs さんが毎回文句言うのであまりよくない
ああ、vim くんはなんかこうオリジナリティ(苦笑)のある書き方があったはず
281デフォルトの名無しさん:2011/05/26(木) 12:03:07.86
GUIなんかwxRubyで簡単に作れる時代になってるのに、遅れたやつばっかりだな
282デフォルトの名無しさん:2011/05/26(木) 12:06:35.66
>>281
Ruby「を」選択する理由にはならない
RubyからGUIを操作できることは、RubyでGUIアプリケーションを作ることを初心者に勧めるのに足ることとイコールじゃない
283デフォルトの名無しさん:2011/05/26(木) 12:15:33.64
まあ、ねえ

Rubyに慣れた人がウィンドウが欲しいなと思ったとして、Tkしか持ってねえ状態にならずに済んでるということは素晴らしい
でも、「ぷろぐらむってわーどみたいなやつ」な人の制作ご希望に添えるものじゃないよな
別物別物
284デフォルトの名無しさん:2011/05/26(木) 12:22:16.09
てか、Tkの時代から「GUIは簡単に作れた」のよ
単に、Tkから抜け出せなかっただけで

ま、GUIの話はGUIスレでどうぞ
285デフォルトの名無しさん:2011/05/26(木) 12:22:47.22
rss取得するときってopen-uriつかえばいいの?
286デフォルトの名無しさん:2011/05/26(木) 12:32:26.69
>>285
まあだいたいなんとかなる
なんとかならなかった時はその時別個対応で

irb> require 'open-uri'
irb> puts open("http://b.hatena.ne.jp/entrylist?sort=hot&mode=rss").read.scan(/title>(.+?)<\/title>/)
はてなブックマーク - 新着エントリー
HTML5、W3C で Last Call (最終草案) へ | WWW WATCH
一人で仕事をする上で学んだ5つの事*ホームページを作る人のネタ帳
セールスフォース・ドットコム、東京データセンターを11月に稼働開始。利用料金は変わらず − Publickey
287275:2011/05/26(木) 12:33:32.54
>>280
なるほど、よくわかりました。
288デフォルトの名無しさん:2011/05/26(木) 12:47:11.41
>>286みたいにWindowsで動かないサンプル書く人って恥ずかしくないの?
289デフォルトの名無しさん:2011/05/26(木) 12:51:37.81
redmineがruby1.9でも動くように要望出したいんだけどどこで言えばいいか至急教えてください
290デフォルトの名無しさん:2011/05/26(木) 12:51:56.32
>>288
いや、動くだろ?
291デフォルトの名無しさん:2011/05/26(木) 12:53:30.09
だって長くなるんだもん…

irb> require 'open-uri'; require 'kconv'
irb> puts open("http://b.hatena.ne.jp/entrylist?sort=hot&mode=rss").read.toutf8.scan(/<title>(.+?)<\/title>/).flatten

Windowsのirbの人は真ん中へんにあるtoutf8をtosjisにしてね!
292デフォルトの名無しさん:2011/05/26(木) 12:58:21.35
beginとrescue
javaでいうtryとcatchってことですか?
293デフォルトの名無しさん:2011/05/26(木) 12:59:18.71
ニコ生のログインは難しいので今回は諦めて他に簡単なものから作れるように勉強してみたいと思います
294デフォルトの名無しさん:2011/05/26(木) 13:00:09.03
>>289
実は、開発版先っちょのtrunkは1.9で全く動かないというわけではない
…いや、めんどくさいし動かないでいいや
295デフォルトの名無しさん:2011/05/26(木) 13:11:01.28
GUIなんてオブジェクト指向のプログラミングの学習にも最適なのに、キチガイみたいに嫌ってるやついるね
Ruby界では継承をアホみたいに嫌ってるやつもいるし、せっかくのオブジェクト指向スクリプト言語が台無し
296デフォルトの名無しさん:2011/05/26(木) 13:14:57.93
297デフォルトの名無しさん:2011/05/26(木) 13:17:37.05
>>296
自分で立てたスレの紹介?
298デフォルトの名無しさん:2011/05/26(木) 13:20:48.83
int i;
for (i=2;i<5;i++) printf("%d", i)
これをRubyで書き直すとどうなるの?
299デフォルトの名無しさん:2011/05/26(木) 13:22:30.23
>>292
その通り
try{ 〜 }catch(クラス名 変数名){ 〜 }finally{ 〜 } がそれぞれ
begin 〜 rescue クラス名 => 変数名 〜 ensure 〜 end に対応するよ
300デフォルトの名無しさん:2011/05/26(木) 13:23:42.08
>>298
(2...5).each{|i| printf("%d", i) }
301デフォルトの名無しさん:2011/05/26(木) 13:27:29.56
なんでrubyだけforの挙動が他の言語と違うんだよ
まじrubyきめえ
302デフォルトの名無しさん:2011/05/26(木) 13:28:10.02
>>278
Rubyは公式ではWindows版の保守を全くしておらず、基本的にUnix系OS向けとなってる
出回ってるWindows版Rubyは、有志で多少の手直しをしてコンパイルしたもの
Windows環境限定のことには弱く、逆にUnix系限定のことには比較的強い傾向がある
詳細には俺も把握してないんで調べて欲しい
303デフォルトの名無しさん:2011/05/26(木) 13:30:52.82
>>300
ありがとうございます
(2...5)と(2..5)で挙動が違うのかきのせいでごわすか?
304デフォルトの名無しさん:2011/05/26(木) 13:31:14.89
>Windows環境限定のことには弱く
なんでそんなこと思っちゃったのか気になるな
305デフォルトの名無しさん:2011/05/26(木) 13:31:30.26
>>301
for文の書き方や挙動はいくつかの流派(みたいなもの)に分かれます
例えば同じALGOL系言語ですらC系とPascalなどでは全然違うものです
Rubyだけ違う、なんてワケではないですよ
306デフォルトの名無しさん:2011/05/26(木) 13:34:31.96
whileが一番やで
307デフォルトの名無しさん:2011/05/26(木) 13:34:52.69
>>303
(2..5)というピリオド2つの形式は終端を含み
(2...5)というピリオド3つの形式は終端を含みません

>>304
ん〜…ちと語弊はあるか
でも強くはないだろ?
308デフォルトの名無しさん:2011/05/26(木) 13:36:48.61
俺がRubyを知った頃はprintなんてなかったのに
いつからprintが出来るようになったのか分かる人いますか?
309デフォルトの名無しさん:2011/05/26(木) 13:39:07.46
>>286
rssってライブラリが便利そうだったのでこれで書いてみました(ぇ

require 'rss'
rss = nil
rss_source = 'http://weather.livedoor.com/forecast/rss/11/60.xml'
begin
rss = RSS::Parser.parse(rss_source)
rescue RSS::InvalidRSSError
rss = RSS::Parser.parse(rss_source, false)
end

質問なんですがitem要素の数を数えるにはどうしたらいいのですか?
310デフォルトの名無しさん:2011/05/26(木) 13:59:44.45
>>308
少なくとも俺がRubyを知った1.4では既に出来るようになってたと思うからそれより昔だと思うが…
311デフォルトの名無しさん:2011/05/26(木) 13:59:56.40
rss.items.class
=> Array
312デフォルトの名無しさん:2011/05/26(木) 14:11:02.07
IDEとしてEclipseがいいと聞いたんですが、導入で行き詰ってます。
どこか、分かりやすく解説してるサイトなどありますでしょうか。
313デフォルトの名無しさん:2011/05/26(木) 14:15:20.60
んーopen-uriでrssを文字列として取得してxmlでカウントしたほうが早いかな・・・
314デフォルトの名無しさん:2011/05/26(木) 14:16:54.88
Rubyは日本では流行ってるって言うけどググってもあんまり参考になるサイトがないのな
おまけに日本では流行ってないと言われるPythonのほうが参考になるサイトが多いという
315デフォルトの名無しさん:2011/05/26(木) 14:30:55.74
>>298
2.upto(4){|i| print i}
見かけ上、なにがなんでも「5未満」でなければならず、printf の書式が必要な場合は>>300
316デフォルトの名無しさん:2011/05/26(木) 14:33:44.60
317デフォルトの名無しさん:2011/05/26(木) 14:36:20.47
>>314
>Rubyは日本では流行ってるって言うけど
別にそれほど「流行ってない」です
またあなたメディアの言うこと鵜呑みにして騙されちゃいましたね
318デフォルトの名無しさん:2011/05/26(木) 14:40:49.32
>>302
大雑把には間違ってない(大雑把すぎるが)
UNIX系OS上では意図したとおりに動くけど、Windows上では意図したとおり動くとは限らない
その原因は様々だけど、同じように動かすのには多大な努力が必要な事実は変わらない
319デフォルトの名無しさん:2011/05/26(木) 14:48:05.98
>>311
これをどうやって使うと要素を数えられるのですか?
320デフォルトの名無しさん:2011/05/26(木) 14:48:27.84
ほんとは繰り返し数が不要で、単に3回繰り返せばいいだけなら 3.times{ puts "やっほー" } でも…

他の言語の for 文/式 は、指定回数繰り返すという動作のみ必要であるということがけっこうある
そう言う場合、Ruby では整数クラスのメソッドを用いて、回数繰り返しのみを行う

整数クラスにそんなメソッドがくっついているのはキモいという指摘は時々見るし実際のところそう思う
321デフォルトの名無しさん:2011/05/26(木) 14:55:35.59
>>309
require 'rubygems'
require 'nokogiri'
uri = URI.parse('http://weather.livedoor.com/forecast/rss/11/60.xml')
doc = Nokogiri::XML.parse(uri.read)
p doc.search('item').size #=> 8


8個だそうです
322デフォルトの名無しさん:2011/05/26(木) 14:59:30.28
>>320
C#で
3.Times(_=> Console.WriteLine("やっほー"));
とかやったりする俺が通りますよ。
323デフォルトの名無しさん:2011/05/26(木) 15:03:25.08
ああ、open-uri が抜けてた

require 'rubygems'
require 'nokogiri'
require 'open-uri'
uri = URI.parse('http://weather.livedoor.com/forecast/rss/11/60.xml')
doc = Nokogiri::XML.parse(uri.read)
p doc.search('item').size
doc.search('item').each{|i| puts i.at('description').inner_text}
324デフォルトの名無しさん:2011/05/26(木) 15:05:22.05
>>323
やっぱり文字列としてrssを取得してそれをrexmlでパースしないと無理でしたか
rssライブラリは便利だなあと思ってwhileでitemの数分回して表示させたかったのですがその方法に乗り換えたいと思います
325デフォルトの名無しさん:2011/05/26(木) 15:10:51.94
>>302
> Rubyは公式ではWindows版の保守を全くしておらず、基本的にUnix系OS向けとなってる

間違い。
公式が「サポート」しているのは
Debian GNU/Linux 4.0 on IA32
プラットフォームのみ。
このプラットフォームでテストがエラーになる場合リリースされない。

Windows系はそれより一段落ちていくつかテストがエラーとなってもリリースが許容される。

その他のUNIX系OSは更に一段落ちて、テストで大量にエラーがあったとしてもリリースを左右しない扱いか、
全くのサポート外という位置付け。

細かい定義は
ttp://redmine.ruby-lang.org/projects/ruby-19/wiki/SupportedPlatforms
参照。
326uy:2011/05/26(木) 15:47:15.26
b = []
b.push 3
b.each do | m |
# b.push 2 # mugen loop
end

a = Hash.new
a.store:ss,3
a.each do | m |
a.store:tt,6 # `store': can't add a new key into hash during iteration (RuntimeError)
end


これハッシュはエラーでてるけど配列だとエラーでないんだけどいいの? なんなの?
327デフォルトの名無しさん:2011/05/26(木) 15:50:08.15
WindowsでやるならPerl,PHP,Pythonなにがいいの?
328デフォルトの名無しさん:2011/05/26(木) 15:52:09.93
>>324

だから、rss.itemsが配列なんだからそのまま rss.items.size でいいだろうが。
329デフォルトの名無しさん:2011/05/26(木) 16:21:07.87
>>327
スレ違い
330デフォルトの名無しさん:2011/05/26(木) 17:57:05.22
>>320
言語によっては、if文すらあたかもブール型のメソッドかのように書くものもあるんだぜ
331デフォルトの名無しさん:2011/05/26(木) 18:04:12.72
>>330
戻り値が真偽値依存なんだからそれほど問題なかんべ
整数オブジェクトのインスタンスメソッドにループ処理メソッドが入ってるというのは若干奇妙と言えなくもないが

まあ今更どうしようもないし別にいいけどさ
332デフォルトの名無しさん:2011/05/26(木) 18:46:56.61
アスキー互換であることがわかっている文字列の最初の1文字を
普通に文字として取り出す方法ってどう書けばわかりやすいですか?
対応はRuby1.8.7以降で構いません
333デフォルトの名無しさん:2011/05/26(木) 19:19:39.48
アスキー互換? アスキーオンリーじゃないのね…
334デフォルトの名無しさん:2011/05/26(木) 19:19:50.26
>>332
String#[]

ruby -e "p 'aiueo'[0] "
"a"
335デフォルトの名無しさん:2011/05/26(木) 19:21:25.19
>>334

Rubyでは "あ" (UTF-8) みたいなのも「アスキー互換」なのだが、
1.8 で "あ"[0] は1バイト目が出てきてしまう。
336デフォルトの名無しさん:2011/05/26(木) 19:23:56.18
1.8だと、$KCODEを適切に指定した上で str.split[0] だろうか。
337デフォルトの名無しさん:2011/05/26(木) 19:25:11.38
>>328
p rss.channel.item.lengthって書いてました
p rss.channel.items.sizeって書いたら取れました
でも天気は7日分+広告1個で合計8にならないといけないのに9になりました
あとrssにはitemsという要素がないんのですが酔うその数を数えるときは複数形にするというのがRubyなのでしょうね
338デフォルトの名無しさん:2011/05/26(木) 19:25:24.22
str.chars.first のほうが無駄な配列を作らずに済むかな。

339デフォルトの名無しさん:2011/05/26(木) 19:34:35.05
アスキー互換って微妙な表現だなオイ
ascii_compatible? が true だとかそういうのですかね
っていうか普通にアスキーの範囲ってことでいい?
340デフォルトの名無しさん:2011/05/26(木) 19:58:39.94
Rubyのm17nにおける「アスキー互換」
http://jp.rubyist.net/magazine/?0025-Ruby19_m17n#l29
341デフォルトの名無しさん:2011/05/26(木) 20:03:54.58
>>337
rss.channelで返ってくるオブジェクトに要素の配列か何かを返すitemsというメソッドが用意されてるだけ。
ライブラリ作成者がそういう名前をつけただけ。

「要素の数を数えるときは複数形にする」なんてルールはRubyにはない。
342デフォルトの名無しさん:2011/05/26(木) 20:14:08.29
>>341
了解です。
343デフォルトの名無しさん:2011/05/26(木) 21:54:06.02
多言語から来たぼくちんのために誰かまとめてください

for ($i=0; $i<10; $i++) {
print $i;
}

while ($i < 10) {
print $i;
}

switch ($n) {
case 1:
print 1;
break;
case 2:
print 2:
break;
default:
print 0;
}

try〜catch
344デフォルトの名無しさん:2011/05/26(木) 21:58:26.36
C#でいうとhtp://dobon.net/みたいなのがRubyでもあると助かるんだけどそういうのない?
345デフォルトの名無しさん:2011/05/26(木) 21:59:01.59
こんなかんじの
htt://dobon.net/vb/dotnet/form/index.html
346デフォルトの名無しさん:2011/05/26(木) 22:01:40.12
はじめましてRubyはじめました
% ruby -v -e 'puts "htt://dobon.net/vb/dotnet/form/index.html".sub(/htt/, "ttp")'
ruby 1.9.2p180 (2011-02-18 revision 30909) [i686-linux]
ttp://dobon.net/vb/dotnet/form/index.html
347デフォルトの名無しさん:2011/05/26(木) 22:12:33.10
>>343
改行があってもいい場合、print は puts で書くことが多いのでとりあえず puts で書く


[9要素ある配列].each{|x| puts x} # 最も一般的、数値をインクリメントして配列を単純ループ処理することはまずない
[9要素ある配列].each_with_index{|x, i| puts "#{i}要素目は#{x}です"} # i は 0 から 9 まで
0.upto(9){|i| puts i} # 0から9まで
(0...10).each{|i| puts i} # 0から10の一歩手前まで
9.times{|x| puts x} # 9回

好きなの選べ

case x
when 1
puts "1!"
when 2
puts "2!"
else
puts "0!"
end

begin
some_process
rescue SomeError => ex
# 例外オブジェクト ex でなにかする
end
348デフォルトの名無しさん:2011/05/26(木) 22:16:45.97
>>343
while i < 0
print i
end

case n
when 1
print 1
when 2
print 2
else
print 0
end
# Cのswitch文と違ってbreakしなかったらn=1のとき1と2が両方出力されるとかはない

for文はそのまま相当するものはないので、イテレータや制御構文調べてやりたいことに応じて使い分け。単純繰り返しなら
10.times{|i| print i }
とか
for i in 0...10
print i
end
とか
(0...10).each {|i| print i}
とか

try - catch - finallyは
begin - rescue(例外キャッチ) - else(例外が発生しなかった場合) - ensure(どちらでも必ず実行) - end
elseやensureは省略可。その他rescue修飾詞なんてのもある
自分で例外上げるときはraise
349デフォルトの名無しさん:2011/05/26(木) 22:21:02.40
Integer#upto や Range#each はこういう説明のときくらいにしか使わないよね
たいてい Array#each とかで、たまに Integer#time 使う程度
350デフォルトの名無しさん:2011/05/26(木) 22:21:36.59
>>347
>>348

温かい思いやりに感謝する
351デフォルトの名無しさん:2011/05/26(木) 22:27:07.05
>>349
うん、だから>>343みたいな例を出されると実はちょっとだけ困る
配列操作するとか、もう少し実際的な例だと違いが出せてほんとは嬉しい
352デフォルトの名無しさん:2011/05/26(木) 22:29:25.57
何気なくfor文紹介したけど自分で使ったことはない
353デフォルトの名無しさん:2011/05/26(木) 22:30:29.35
Integer#stepは紹介しておいてもよかったかもしれないと思った
354デフォルトの名無しさん:2011/05/26(木) 22:31:02.70
IntegerっていうかNumericか
355デフォルトの名無しさん:2011/05/26(木) 22:31:05.66
forはリファレンス見ないと間違いなく書ける自身がないな。
そんな存在なのに予約語を2つも使うなんてけしからん。
356デフォルトの名無しさん:2011/05/26(木) 22:32:28.50
10から54までの乱数を表示したい
そういうときはマニュアルのどのページをみたらよいですか?
357デフォルトの名無しさん:2011/05/26(木) 22:33:20.85
while は gets 専用
for は何やってるのか正直さっぱりわからないし、この数年書いた記憶がない
358デフォルトの名無しさん:2011/05/26(木) 22:34:21.43
1.9.3から
Random.rand (10..54)が使えるらしいよ!
359デフォルトの名無しさん:2011/05/26(木) 22:35:45.08
こうですか?なんか気持ち悪いです><

def FOR(prelude, cond, epilogue)
  eval prelude
  while eval(cond)
    yield
    eval epilogue
  end
end

FOR("$i=0", "$i<10", "$i+=1") {
  print $i
}
360デフォルトの名無しさん:2011/05/26(木) 22:35:51.14
>>356
10+rand(45)
乱数とかで適当に調べればいいんじゃないかな
361デフォルトの名無しさん:2011/05/26(木) 22:38:09.42
2.0からはforなくして欲しい
クラスメソッドを::で呼べる機能も外して高速化して欲しい
362デフォルトの名無しさん:2011/05/26(木) 22:39:04.74
>>356
乱数ならrand(n)で 0からn-1の乱数なので、
rand(45) + 10
で10から54

def orerand(n, m)
if n < m
rand(m-n+1) + n
else
rand (n-m+ 1) + m
end
end

とかやればn以上m以下(またはm以上n以下)の乱数吐くよ

マニュアルでいうと組み込み関数とか、1.9ならRandomクラスも見てみるといい。
363デフォルトの名無しさん:2011/05/26(木) 22:39:42.62
>>356
100000.times.map {rand(54-10+1) + 10}.minmax
=> [10, 54]
まぁ、どの言語でもそんなに基本的なことは変わらぬ。
364デフォルトの名無しさん:2011/05/26(木) 22:40:11.11
>>356
10から54までの(整数の)乱数なら
(10..54).to_a.sample
とかどうかな?
ttp://doc.ruby-lang.org/ja/1.9.2/class/Array.html
365デフォルトの名無しさん:2011/05/26(木) 22:40:34.18
>>359
epilogueならprologueにしないと。
366デフォルトの名無しさん:2011/05/26(木) 22:43:09.07
ruby-1.9.2> p (10..54).to_a.sample
29
イエスアイガッチュ

>>360がおそらくいちばん無難
rand(44) では44が永遠に出ないことに注意
367デフォルトの名無しさん:2011/05/26(木) 22:44:56.20
>>365
きゃ…はずかしい><
368デフォルトの名無しさん:2011/05/26(木) 22:45:04.90
>>358
1.9.2でも先にrandom = Random.newとかしとけば
random.rand(10..54)できるよね
369uy:2011/05/26(木) 23:55:02.91

lm = lambda do | a |
  n = a.to_a.shuffle
  i = 0
  lambda do
    n[ i=((i+1)%n.size) ]
  end
end
n = lm.call 10..54

puts n.call
puts n.call
puts n.call
370デフォルトの名無しさん:2011/05/27(金) 00:01:37.48
おまえらいくつですか?Rubyやるぐらいだからかなり歳いってますよね
371デフォルトの名無しさん:2011/05/27(金) 00:03:09.88
84ちゃい
372デフォルトの名無しさん:2011/05/27(金) 00:05:43.02
Rubyやってる人って結構若いイメージがあるんだが…
373デフォルトの名無しさん:2011/05/27(金) 00:23:18.34
マジレスでたのむ!俺がこれからRubyを触るべきかの参考にしたいので
374デフォルトの名無しさん:2011/05/27(金) 00:27:57.87
このスレの連中はリアルタイムで玉音放送を聞いてる奴ばかりですよ
375デフォルトの名無しさん:2011/05/27(金) 00:30:42.81
俺もルビーはじめたいが、忙しくて時間がとれない・・・
ルビーちょっと本をみてみたけど、楽しそうだ・・・
376uy:2011/05/27(金) 00:34:39.29
[22,33,44,55].each_with_index.inject(0) do | a, (b , c) |
p a, b, c
end

majiyabai ruby majiyabai koresugoiyone
377デフォルトの名無しさん:2011/05/27(金) 00:39:13.85
>>372
かなり幅広い

RoR開発時のDHHは20代半ば
今のティム・ブレイは55歳
378デフォルトの名無しさん:2011/05/27(金) 00:44:41.55
toRubyの池澤さんはわりと高齢のはず。
中二コミッタもいるね。
379デフォルトの名無しさん:2011/05/27(金) 00:57:44.50
うちの猫がコミッタになりたいと…
380デフォルトの名無しさん:2011/05/27(金) 01:05:52.95
それはちょっとこみったな
381デフォルトの名無しさん:2011/05/27(金) 01:19:32.51
流れをsplit()してごめんなさい、例えば

SUITS = [:SPADE, :HEART, :CLUB, :DIAMOND]

という配列があるとして。これを元に

foundation = {
    :SPADE => [],
    :HEART => [],
    :CLUB => [],
    :DIAMOND => [],
}

というハッシュを作りたいのですが、何か簡潔な方法はないでしょうか
もろちん各配列はそれぞれ別々のobject_idを持ってて欲しいです。
今のところ、2行に分けて

foundation = {}
SUITS.each{|s| foundation[s] = [] }

という感じちゃってます。
無理して1文に詰め込むより、こっちのが見やすいんかなと。
382デフォルトの名無しさん:2011/05/27(金) 01:23:29.50
あ、ちなみに foundation は組札のことです。
383デフォルトの名無しさん:2011/05/27(金) 01:25:40.95
>>381
その二行がいちばん簡潔と思う
384デフォルトの名無しさん:2011/05/27(金) 01:38:23.76
最近RoR始めた新参者ですが
Rails3とmongodbの組み合わせはいいね
まだ良くわからんのでまたお邪魔します
385デフォルトの名無しさん:2011/05/27(金) 01:40:55.57
>>381
こんなのはダメかな?ダメだよね…
fundation = SUITS.inject({}) { |h, s| h.tap { |x| x[s] = [] } }
386デフォルトの名無しさん:2011/05/27(金) 01:47:00.10
>>318
ハッシュの中身なんて必要なときに作れば良い。
foundation[:SPADE] ||= []
387デフォルトの名無しさん:2011/05/27(金) 01:58:24.12
>>386
それなら Hash.new { |h, k| h[k] = [] } でいいような…
388デフォルトの名無しさん:2011/05/27(金) 03:56:37.22
foundation = Hash[SUITS.zip([[]]*SUITS.size)]
389uy:2011/05/27(金) 04:18:18.55
SUITS = [:SPADE, :HEART, :CLUB, :DIAMOND]
p Hash[SUITS.map do|m|[m,[]]end]

p(SUITS.inject({})do|a,m|a[m]=[];a end)
390uy:2011/05/27(金) 04:30:17.40
SUITS=[":SPADE",":HEART",":CLUB",":DIAMOND",""]
p eval(%!{#{(SUITS*"=>[],")}}!)
391デフォルトの名無しさん:2011/05/27(金) 04:31:42.34
結論としては、まあ2行が最善ということで
392デフォルトの名無しさん:2011/05/27(金) 04:51:47.99
ちなみに今回の便所掃除は>>388さんです
393デフォルトの名無しさん:2011/05/27(金) 04:57:25.85
畳み込みを使うやり方(>>385)はまあまあ応用が効いて
簡潔だが、とりたてて可読性が良いというほどではないなあ
関数型言語屋には読みやすいのかも分からん
394デフォルトの名無しさん:2011/05/27(金) 06:07:05.73
tapが必要ない>>389のinjectがベストかすら
395デフォルトの名無しさん:2011/05/27(金) 07:44:52.67
おめーら無理すんな。
あと病院いったほうがいいぞ。
頭のな。
396デフォルトの名無しさん:2011/05/27(金) 08:01:53.28
>>391
うむ
一般論として、inject で 1行にまとめてもあまりいいことはない
あれは変数定義をまとめて表記してるだけ(という振り回された使い方が多い)
inject や any? で処理をまとめると、わかりにくくてあとあと問題になったりする
397デフォルトの名無しさん:2011/05/27(金) 10:10:45.68
>>394
可読性がよくないし簡潔でもないな。
398デフォルトの名無しさん:2011/05/27(金) 10:17:15.42
ついこの前まで書き込み速度が30以下だったのに今では70までにアップした
399デフォルトの名無しさん:2011/05/27(金) 11:36:20.11
プログラミングって書かないとうまくならないんだな
一年前のソース見たらスパゲティソースで吹いた
気付かないうちに上達してましt
400デフォルトの名無しさん:2011/05/27(金) 11:41:27.56
>>397
ヒント:自で始まって演で終わる言葉
401デフォルトの名無しさん:2011/05/27(金) 11:52:23.21
自衛隊OB特別出演
402394:2011/05/27(金) 12:39:24.55
自演でも自衛隊OB特別出演でもないよ

hash = [:s, :h, :d, :c].each_with_object({}) {|k, h| h[k] = [] }
403デフォルトの名無しさん:2011/05/27(金) 13:39:38.34
each_with_objectとかはじめて見たわ
404デフォルトの名無しさん:2011/05/27(金) 13:47:11.86
いろいろ考えてるみたいだが結局>>381のままが一番シンプルでいい
405デフォルトの名無しさん:2011/05/27(金) 13:55:45.69
ここの先生方の力を集結して逆引きサンプル集をwikiにまとめていっていただけませんか?
406デフォルトの名無しさん:2011/05/27(金) 14:20:46.44
>>405
本買え本
407デフォルトの名無しさん:2011/05/27(金) 14:25:57.62
>>405
ここじゃダメかな?
ttp://www.namaraii.com/rubytips/
408デフォルトの名無しさん:2011/05/27(金) 14:43:47.76
空白のページが目立つのでちょっと厳しいです
409デフォルトの名無しさん:2011/05/27(金) 15:44:26.61
ここで教えてもらった知識をまとめてHPに書いてもいいですか?
410デフォルトの名無しさん:2011/05/27(金) 15:51:12.27
2chに書き込まれたコードは権利関連めんどくさいからやめとけ
411381:2011/05/27(金) 16:01:32.05
無理して読みにくくなるより、このままのが良さそうですね
相談に乗ってくれてありがとうございました
412uy:2011/05/27(金) 16:06:33.76
>>409
どうぞ

>>410
え、面倒くさいことになった事例とかあるの?
413デフォルトの名無しさん:2011/05/27(金) 16:13:19.92
来年2.0出るんだよね
今から1.8やる意味ってないよねあんま
414デフォルトの名無しさん:2011/05/27(金) 16:19:00.12
>>413
>来年2.0出るんだよね
たぶん出ないし、出たとしても数年は使いものにならないと思う

1.8.7 自体に問題はないよ
1.9.2 との差分もそれほど多いわけじゃないし、
1.9.2 だからといって劇的に便利になって記法が特殊になって 1.8.7 の知識が通用しなくなるとかそういうわけじゃない

ただ、Rails をやろうとしているのなら1.8.7 しか選択肢がない
415uy:2011/05/27(金) 16:19:58.70
>>413
マジで?
凄い楽しみだから情報元がみたい
416デフォルトの名無しさん:2011/05/27(金) 16:21:27.55
そういう話題こそ本スレに持って行こうぜ
417uy:2011/05/27(金) 16:22:20.23
1.8系では許される構文が、1.9だとエラーになる箇所あるから、
1.8をメインでやるにしても、両方触った上でやったほうがいいよ
そうしないと非互換コードをかいてしまう
418デフォルトの名無しさん:2011/05/27(金) 16:23:00.31
今この板で2番目に更新速度が速いのはここだぜ
あの宿敵C言語スレに俺たちは勝ったんだ
419デフォルトの名無しさん:2011/05/27(金) 16:24:45.10
>>418
あんなものまだ表示してるの
なんの意味もないのに…
420デフォルトの名無しさん:2011/05/27(金) 16:26:24.00
>>419
レスの内容はどうでもいいという人がよく気にする
どうでもいいというか、理解できないという人も、これしか話すことがなかったりする
421デフォルトの名無しさん:2011/05/27(金) 17:02:50.79
Win rubyからhttp://www.iana.org/domains/example/をchromeで開く
っていうのはできますか?
422デフォルトの名無しさん:2011/05/27(金) 17:10:43.62
a = nil
a = a + "a"
a = a + "b"

これってaの頭にはnilが入ったままになりますか?
423デフォルトの名無しさん:2011/05/27(金) 17:18:59.17
2.0はPerl6のように互換性無視の大改編をお願いします
424uy:2011/05/27(金) 17:20:56.30
a = nil
a = a ? (a+"a") : "a"
a = a ? (a+"b") : "b"

p a

a = ""
a += "c"
a += "d"

p a

a = ""
a << "e"
a << "f"

p a

a= ""
a ="#{a}g"
a ="#{a}h"

p a
425デフォルトの名無しさん:2011/05/27(金) 18:05:30.96
>>421
それがシェルから可能なら、同じことを system(' ') で書けばいい
ということで、Ruby 関係なく system("chrome.exeへのパス" "URL")
もし chrome が標準のWeb ブラウザになっているなら、 system("start #{URL}") でも動作するかもしれない
どっちもコマンドプロンプトのお話

>>422
…それくらいは自分で試そうよ
nil + "a" をやろうとして、nil には + メソッドがないから NoMethodError になる
nil かもしれないオブジェクトに + を行なうこと自体があまりよくないし、
文字列に流用されて + メソッドを使われるかもしれない変数名を nil に使うのもあまりよくない
426デフォルトの名無しさん:2011/05/27(金) 18:10:00.27
nil は undef みたいな印ではなく、確固としたひとつのオブジェクトだからなあ
使用オブジェクトがわかってて、そのオブジェクトのメソッドが呼ばれることがわかっているなら、
そのオブジェクトの初期値を指定しておけばいい
文字列なら ''、数値なら 0
427デフォルトの名無しさん:2011/05/27(金) 18:29:09.19
変数名が例示用の 1文字だからアレだけど、実際は

str = str + "a"

とかになるからな
そりゃ str の最初の値は nil ではなく "" だ
428デフォルトの名無しさん:2011/05/27(金) 18:33:14.50
>>425
system("chrome.exeへのパス", "URL")
429デフォルトの名無しさん:2011/05/27(金) 19:16:30.17
ダウンロードについてご教示おねがいします
url = 'http://www.google.co.jp/images/nav_logo72.png'

filename = File.basename(url)
open(filename, 'wb') do |file|
file.puts Net::HTTP.get_response(URI.parse(url)).body
end

これを実行するとgoogleのロゴをダウンロードする所まで書きました
スクリプトを実行した箇所に画像が保存されてしまいます
スクリプトの実行フォルダに関わらず、常に指定したフォルダC:\image\に保存する方法をご教示おねがいします
430デフォルトの名無しさん:2011/05/27(金) 19:33:53.50
なんか基本的なこと書いてある本とか買ったり借りたりしてまとめて勉強したほうが速攻でやりたいことに進めると思う
一度もプログラム言語に触れたことがない場合、クラスやメソッドの解説を読むだけではまず歯がたたない
431デフォルトの名無しさん:2011/05/27(金) 19:35:09.72
>>429
そりゃあopenにただファイル名渡せばカレントディレクトリに吐くよ。

パス指定したいなら、
open("C:\\image\\#{filename}", 'wb') do |file|
とかすりゃいいんじゃないかしら

Windows用Rubyのパス区切りって\でいいんだっけ
432デフォルトの名無しさん:2011/05/27(金) 19:38:52.67
>>431
open は rubyfilepath を受けとるので、OS に関わらず / だけでよい
"C:/image/#{filename}"
433デフォルトの名無しさん:2011/05/27(金) 19:44:22.33
そういや文字列の式展開って普通のブロックと同じなのかな。スコープは外と同じっぽいけど。

p "#{a = 1; b = 2; c = a + b; c} #{d = 1
e = 2
d + e}" #=>"3 3"
p a #=> 1
434デフォルトの名無しさん:2011/05/27(金) 19:47:00.36
ブロックまったく関係ない
埋め込み開始文字と埋め込み終了文字がたまたまブロックと同じなだけ
まあ紛らわしいとは思う
435デフォルトの名無しさん:2011/05/27(金) 20:17:34.31
>>429
バイナリや設定の外部ファイルをputsするのはダメ
printとかにしないと末尾に改行がくっつくぞ
ブラウザで保存した画像とファイルサイズ比べてみ
Rubyでputsしたもののほうが1バイトほど大きいはず
436uy:2011/05/27(金) 20:41:09.97
そういやputsでも書き込めたね
"wb"でオープンしたときはputsなくしちゃっていいんじゃないの
バイナリをputsで書き込まなきゃいけない状況なんてなくね
437デフォルトの名無しさん:2011/05/27(金) 20:46:16.13
万が一putsで書き込んだ場合はどうやって画像から改行を消せばいいの?
438デフォルトの名無しさん:2011/05/27(金) 20:56:50.02
>>437
ぶっちゃけ画像の場合は末尾改行は無視されることが多いので放置でもよい

もう一度Rubyで読み込んでchompして再度書き込むのが妥当
String#chompは「改行っぽい文字」が文字列末尾にあった場合にのみそれを取り除く
439デフォルトの名無しさん:2011/05/27(金) 21:40:55.71
Rubyでおすすめの本を教えてください
440デフォルトの名無しさん:2011/05/27(金) 21:42:59.70
>>439
他のプログラミング言語を何か一通り習得してそれなりのものが書けるのか
それともプログラミング自体はじめてでプログラミングの入門にRubyをやるのか
441デフォルトの名無しさん:2011/05/27(金) 21:48:16.25
javascriptの経験があります
442デフォルトの名無しさん:2011/05/27(金) 21:52:37.89
>>441
経験があると言われてもどれくらいかわかんないと困る。

まあ無難にたのしいRuby 第3版とRubyレシピブック第3版あたり読んどくといいんじゃないかな。
それからリファレンスマニュアルをひととおり読んでみるといい。
443デフォルトの名無しさん:2011/05/27(金) 22:06:18.85
Rubyはタイムゾーンに設定した地域の時刻で、サマータイムを自動的に計算して表示してくれるものでしょうか?
444デフォルトの名無しさん:2011/05/27(金) 22:23:18.27
標準のTimeは動いている環境の地方時とGMTを扱える。
445デフォルトの名無しさん:2011/05/27(金) 22:25:15.63
タイムゾーン間の変換や世界各地の夏時間を同時に扱いたい場合はtzinfo gemなのかな。
446デフォルトの名無しさん:2011/05/27(金) 22:35:51.66
http://www.ruby-lang.org/ja/man/html/Time.htmlみてやってみたんですけど
tzinfoを別途用意しないとTime.localtime("Asia/Tokyo")みたいに任意のタイムゾーンを設定できないってことですか?
447デフォルトの名無しさん:2011/05/27(金) 22:43:41.36
できない。
わりと更新あるしな。
448デフォルトの名無しさん:2011/05/27(金) 22:50:44.08
標準のDateTimeクラス(require 'date')はnew_offsetを指定して、
異なるTime Zoneの日時を作ることが出来るが、指定できるのは
24を分母とするRational。
449デフォルトの名無しさん:2011/05/27(金) 22:57:32.46
海外のサマータイムのある地域の時刻を表示する場合
GMTから時間をずらして、そこから夏時間を計算して時刻を調節して出力する
って方法しかないですね
450デフォルトの名無しさん:2011/05/27(金) 23:06:28.65
ワールドワイドに使うものは、内部的にはGMTで持っておいて、
表示時にオフセットかませることになるでしょうなー。
451デフォルトの名無しさん:2011/05/27(金) 23:53:59.59
Ruby1.9.2です
文字列の中に@という記号1文字が含まれるかチェックする場合って以下のでいいですか?
それともmatchやscanを使ったほうがいいですか?

if /@/ =~ str
p "含まれてます"
else
p "含まれてません"
end
452デフォルトの名無しさん:2011/05/28(土) 00:02:05.97
>>451
それでいいよ
それだとマッチ位置とかさっぱりわからないが、必要ないことも多いし
453デフォルトの名無しさん:2011/05/28(土) 00:08:39.40
ありがとうございます
含まれてるかどうかだけチェックしたい場合はこれのほうがmatchやscanよりも速度は速いですか?
454デフォルトの名無しさん:2011/05/28(土) 00:09:44.94
あ、でも1文字含まれてるだけ調べる場合に正規表現を使うって言うのが何かもったいない気もしてます
455デフォルトの名無しさん:2011/05/28(土) 00:12:12.37
あー、そういうことは昔気にした覚えがある
1回マッチしたらそのまま成功として諦めるので、
マッチするものを文字列末尾まで探して配列にするscanやmatchよりはリクツ的には速い
456デフォルトの名無しさん:2011/05/28(土) 00:14:50.04
速さはよく分からないけど、String#include?ってのもあるよ
「文字列の中に@という記号1文字が含まれるか」をそのまま書くとこうなると思う
if str.include?("@")
457デフォルトの名無しさん:2011/05/28(土) 00:16:45.62
>>454
埋め込みのないふつうの正規表現はじゅうぶん速いし正規表現で書いたほうが潰しが効くので、素直に正規表現にしとけ
一応、String#include? というのがあるにはあって、これは正規表現よりも速いことはあるんだが
458デフォルトの名無しさん:2011/05/28(土) 00:27:35.79
全部十分に速いけど、あまりに予想と結果が違った。
何回試しても似たような結果。

require 'benchmark'

s1 = 'nantoka@kantoka'
s2 = 'nantokakantoka'
n = 100000

c = '@'
r = /@/

Benchmark.bm(10) do |x|
x.report('include?:'){ n.times{s1.include?(c); s2.include?(c)} }
x.report('s.match :'){ n.times{s1.match(r); s2.match(r)} }
x.report('r.match :'){ n.times{r.match(s1); r.match(s2)} }
x.report('=~ :'){ n.times{r =~ s1; r =~ s2} }
end

user system total real
include?: 0.062000 0.000000 0.062000 ( 0.062500)
s.match : 0.422000 0.016000 0.438000 ( 0.437500)
r.match : 0.375000 0.000000 0.375000 ( 0.375000)
=~ : 0.297000 0.000000 0.297000 ( 0.312500)
459デフォルトの名無しさん:2011/05/28(土) 00:31:23.14
>>458
それは不誠実だ
充分に長い文字列において
・ 最初のほうにある
・ 真ん中へんにある
・ 最後のほうにある
・ 存在しない
のパターンを試すべき
460デフォルトの名無しさん:2011/05/28(土) 00:33:17.85
>>451
すいませんif 〜thenのthenって書かなくても大丈夫なんですか?
僕が勉強してるサイトではthenが書いてあります
461デフォルトの名無しさん:2011/05/28(土) 00:34:31.67
>>459
どれも正規表現にとって不利な条件じゃないですかやだー!
462デフォルトの名無しさん:2011/05/28(土) 00:36:50.47
>>460
then を書かない場合は改行を書かなければならない
then を書いた場合は改行は不要

puts if /@/ =~ str then "あったよ" else "ないよ" end

then を書かない人は半々くらい
個人的には書いたほうがいいと思う
463デフォルトの名無しさん:2011/05/28(土) 00:38:14.95
>>462
そうでしたか。知識に入れておきます
464デフォルトの名無しさん:2011/05/28(土) 00:41:59.73
wxrubyはUbuntu10.10ではインストール微妙なのね
素直にTkで書くか…
465デフォルトの名無しさん:2011/05/28(土) 00:50:06.93
>>459
細かいなあ。

user system total real
include|beg: 0.015000 0.000000 0.015000 ( 0.015625)
r.match|beg: 0.172000 0.000000 0.172000 ( 0.171875)
s.match|beg: 0.188000 0.000000 0.188000 ( 0.187500)
r =~ s |beg: 0.031000 0.000000 0.031000 ( 0.031250)
s =~ r |beg: 0.047000 0.000000 0.047000 ( 0.046875)
include|mid: 3.609000 0.000000 3.609000 ( 3.640625)
r.match|mid: 12.625000 0.000000 12.625000 ( 12.781250)
s.match|mid: 12.640000 0.000000 12.640000 ( 12.828125)
r =~ s |mid: 12.454000 0.000000 12.454000 ( 12.687500)
s =~ r |mid: 12.484000 0.000000 12.484000 ( 12.703125)
include|end: 7.141000 0.000000 7.141000 ( 7.218750)
r.match|end: 25.109000 0.000000 25.109000 ( 25.437500)
s.match|end: 25.141000 0.000000 25.141000 ( 25.578125)
r =~ s |end: 24.968000 0.000000 24.968000 ( 25.296875)
s =~ r |end: 24.860000 0.000000 24.860000 ( 25.281250)
include|not: 7.093000 0.000000 7.093000 ( 7.203125)
r.match|not: 24.875000 0.000000 24.875000 ( 25.296875)
s.match|not: 24.985000 0.000000 24.985000 ( 25.328125)
r =~ s |not: 24.937000 0.000000 24.937000 ( 25.375000)
s =~ r |not: 24.985000 0.000000 24.985000 ( 25.359375)
466デフォルトの名無しさん:2011/05/28(土) 00:50:39.24
>>459
require 'benchmark'

s = []
s[0] = 'nantokakantoka' + '@' + 'nantokakantoka'*9999
s[1] = 'nantokakantoka' * 5000 + '@' + 'nantokakantoka'* 5000
s[2] = 'nantokakantoka' * 9999 + '@' + 'nantokakantoka'
s[3] = 'nantokakantoka' * 10000 + 'a'

t = %w(beg mid end not)

n = 50000

c = '@'
r = /@/

Benchmark.bm(18) do |x|
s.each_with_index do |s, idx|
x.report("include|#{t[idx]}:"){n.times{ s.include?(c)} }
x.report("r.match|#{t[idx]}:"){n.times{ r.match(s) }}
x.report("s.match|#{t[idx]}:"){n.times{ s.match(r) }}
x.report("r =~ s |#{t[idx]}:"){n.times{ r =~ s }}
x.report("s =~ r |#{t[idx]}:"){n.times{ s =~ r }}
end
end
467デフォルトの名無しさん:2011/05/28(土) 00:57:22.26
>>465
なんつうかわかりやすいそのまんまの結果だな
バイナリレベルでの存在チェックしかできないString#include?の爆速っぷりが目につく
468デフォルトの名無しさん:2011/05/28(土) 00:57:27.11
数メガあるバイナリからチャンクタグみたいなの探す場合なんかには
バカにならない時間差だね
469デフォルトの名無しさん:2011/05/28(土) 01:03:08.53
初心者の前でそういうこと言うのやめようよ
String#index とか駆使するようなめんどくさい子になっちゃうよ
470uy:2011/05/28(土) 02:48:04.10
このスレの住民はどんだけベンチマーク好きなんだよ
471デフォルトの名無しさん:2011/05/28(土) 03:16:23.42
データが超巨大とか回数が多いとかでどうしても速度が気になるときはindexやinclude?ってのが正しい使い方かな?
472デフォルトの名無しさん:2011/05/28(土) 03:42:42.73
差はせいぜい数倍程度しかないから、
正規表現で耐えがたいほど遅いケースだと、データ構造やアルゴリズムを一工夫するか、
別の言語を使うとかも視野に入れる必要があるんじゃないかなあ
473uy:2011/05/28(土) 04:44:56.11
Rubyで速度の話されると、普通にCと連携しやすい言語なんだから速度気になる部位はC使えよwwwwwwwwwwwwwwwwwwと思うwwwww
知識として、俺はかなり調べるたちだけど重箱の隅だと思ってるよ
LinuxだったらRubyinlineあるし、Windowsでも適当にCコンパイラと繋げて以下略
474デフォルトの名無しさん:2011/05/28(土) 04:48:22.40
uy君いつもよりwが多いよ
Cで拡張ライブラリ書けるからいいじゃんって考えは甘え
475デフォルトの名無しさん:2011/05/28(土) 06:26:30.11
時間のかかる処理が数倍早くなるんならそっち使うけどなあ
正規表現を指定なんてオーバーキルだし

だいいちString#include?とindexはもとからCで書いてあるので
Cで書き直しても早くはならないだろう
476デフォルトの名無しさん:2011/05/28(土) 08:14:38.86
Perlはindexより正規表現のほうが速い場合が多いんだよね。
Perlのindexの実装が気になる。
477デフォルトの名無しさん:2011/05/28(土) 08:25:20.59
本質的にはただの文字列探索のはずなので
String#include?が速いというよりは、正規表現エンジンに問題があるんじゃないか?
478デフォルトの名無しさん:2011/05/28(土) 08:45:12.22
>>477
/aaa/ という正規表現が、文字列に対し一般にどういうサーチ動作をするか250字以内で簡潔に述べよ(配点60)
479デフォルトの名無しさん:2011/05/28(土) 09:07:45.20
>>478
正規表現に対してBoyer-Moore法を適用する最適化があったはず
もちろん素のDFAよりも高速
480デフォルトの名無しさん:2011/05/28(土) 09:20:03.95
indexで済むならindex使ってください、その最適化はプログラマにお任せします、みたいな感じだと思う
や、/aaa/ =~ str と書いたら自動で str.index('aaa') が適用されるというのは素敵ではあるんだが
481デフォルトの名無しさん:2011/05/28(土) 10:24:58.52
>>465
この結果を見るとincludeを使うのが一番早いって事ですか?
482デフォルトの名無しさん:2011/05/28(土) 10:30:59.11
include? や index で済むような極めて単純なサーチ範囲内であるなら、それらのほうが高速
483デフォルトの名無しさん:2011/05/28(土) 11:07:50.71
まぁ速度の最適化は後でやれ、な。
484デフォルトの名無しさん:2011/05/28(土) 11:14:04.62
一週間後もinclude?が残ってる確率というのは意外と低い
たいてい他の処理や正規表現に組み込まれて姿を消してるので、
どうせなら最初から正規表現前提で他のところに気を遣ったほうがいいと思う
include?の速度でなければどうにもならないというなら、たぶん、Rubyで作るのが間違ってる
485デフォルトの名無しさん:2011/05/28(土) 11:33:09.69
Rubyで日本語マニュアルがそろってるお勧めのGUIってありませんか?
486デフォルトの名無しさん:2011/05/28(土) 13:04:17.01
IDEのことか? > GUI
487デフォルトの名無しさん:2011/05/28(土) 13:07:00.12
>>485
残念ながらない
どれもオリジナルを英語で参照する根性が必須
488デフォルトの名無しさん:2011/05/28(土) 13:12:16.36
>>485
JRubyじゃだめかい?Swingの解説なら日本語のもいっぱいあるし
489デフォルトの名無しさん:2011/05/28(土) 14:17:10.83
最近
n == 1 ? 1 : n * (n-1)
みたいなのを
(n == 1) ? 1 : n * (n-1)
と書くようになった。なんとなくこっちの方が読みやすい気がする。
490uy:2011/05/28(土) 14:50:10.62
def ifelsereturn a, b, c
  a ? b : c
end
ifelsereturn( (n == 1) , (1) , (n * (n-1) ) )
module Kernel
  def ifelse a,b
    self ? a : b
  end
end
n = 0
p (n == 1).ifelse( (1) , (n * (n-1) ) )

491デフォルトの名無しさん:2011/05/28(土) 14:59:32.75
[
[1,2,3],
[4,5],
[6,7,8,9],
[10]
]

こういう入れ子の配列から、
[
[1,4,6,10],[1,4,7,10],[1,4,8,10],[1,4,9,10],
[1,5,6,10],[1,5,7,10],[1,5,8,10],[1,5,9,10],

[2,4,6,10],[2,4,7,10],[2,4,8,10],[2,4,9,10],
[2,5,6,10],[2,5,7,10],[2,5,8,10],[2,5,9,10],

[3,4,6,10],[3,4,7,10],[3,4,8,10],[3,4,9,10],
[3,5,6,10],[3,5,7,10],[3,5,8,10],[3,5,9,10]
]

みたいな形で、内部の各配列からひとつずつ取り出して組み合わせるすべてのパターンを取り出すのに、
簡潔な記述方法はありますか? 大本になる配列の要素数は今回は4ですが、実際は不定です。
全てのパターンが取り出せれば、最終的に出てくる配列の中身の順番はどうでも構いません。
492デフォルトの名無しさん:2011/05/28(土) 15:02:07.33
>>491
その行為を一発で表現する数学的な言葉があるなら、もしかしたら誰かが用意してるかも
493デフォルトの名無しさん:2011/05/28(土) 15:03:49.32
[... ].inject(&:product).map(&:flatten)
あってるかな?
494デフォルトの名無しさん:2011/05/28(土) 15:04:20.58
直積 ね。
495デフォルトの名無しさん:2011/05/28(土) 15:05:03.28
今のところ、こういうメソッドを作って強引に実装しています。

def combi(arys)
result = [[]]
arys.collect{|ary| ary.collect{|i| [e]} }.each{|addary| result = add(result, addary)}
result
end

def add(baseary, addary)
result = []
addary.each do |addvalue|
baseary.each do |ary|
result << ary + addvalue
end
end
result
end
496デフォルトの名無しさん:2011/05/28(土) 15:07:09.93
>>492
>>493
>>494

直積(product)というのですか。ありがとうございます。
そういうメソッドがあるのですね。
497デフォルトの名無しさん:2011/05/28(土) 15:13:18.81
組み合わせ(combination)かと思った
p [[1,2,3], [4,5], [6,7,8,9], [10]].flatten.combination(4).to_a
=> [[1, 2, 3, 4], [1, 2, 3, 5], ...]
498デフォルトの名無しさん:2011/05/28(土) 15:14:04.66
数学関連は頑張った人がいたんだっけか
499デフォルトの名無しさん:2011/05/28(土) 18:53:16.37
productを教えてもらったのはいいけれども、
実際に動かす環境が1.8.5なので結局自分で実装して使うことになりますた。
とほほ。
500デフォルトの名無しさん:2011/05/28(土) 18:59:49.10
Ruby1.9で動作するGUIって早いですか?
501デフォルトの名無しさん:2011/05/28(土) 19:06:57.34
>>489
俺はむしろ
(n==1 ? 1 : n*(n-1))
だな
502デフォルトの名無しさん:2011/05/28(土) 19:20:27.74
GUIで一番遅いのは「人間」
503デフォルトの名無しさん:2011/05/28(土) 19:32:20.95
>>502
マシンが十分速ければそうだろうが
現状まだまだだわな。

Rubyの場合GC問題があるから複雑なGUIは避けたいところ。

大して凝らない、Webレベルで実現できるようなGUIなら
TitaniumDesktopで十分だし。
504デフォルトの名無しさん:2011/05/28(土) 21:17:10.97
rubyinstallerでインストールしたのにfxrubyが入ってない
これでインストールしたらfxrubyは最初から入っているって説明してるサイトに騙された
505デフォルトの名無しさん:2011/05/28(土) 23:00:54.33
インターネットは真実だけでもないし。
本屋に逝って紙の世界に戻ったら。
506デフォルトの名無しさん:2011/05/28(土) 23:33:29.55
>>504
いまさらFOXなんかでプログラミングする羽目にならずに済んでよかったじゃないか
とか言ってみる

今は gem install fxruby による別途インストールが必要
が、うまく動作しないかもしれない
507デフォルトの名無しさん:2011/05/28(土) 23:45:22.96
教祖と同じデビアンにするのが確実。
508デフォルトの名無しさん:2011/05/29(日) 00:10:10.82
GUI作るなら何がいいの?やっぱC#か
509デフォルトの名無しさん:2011/05/29(日) 00:13:25.66
C#は使うなって教祖がいってた
510デフォルトの名無しさん:2011/05/29(日) 00:16:53.95
RubyでMIDIを鳴らすことって難しいですか?
511デフォルトの名無しさん:2011/05/29(日) 00:20:18.68
midiファイルを再生するのではなくmidiメッセージを送信して音を鳴らすという事です
512デフォルトの名無しさん:2011/05/29(日) 00:22:53.52
>>508
WindowsでやるならWindowsを作ってる人が作ったものが確実
即コケしておらず、普及に全力で、言語センスが妥当な上、実際に使いよい

複数の言語を学ぶと死ぬとかそういう不思議な人じゃない限り問題ないっしょ

>>510
サウンドドライバに直接アクセスする根性があるか、OSがなにかAPIを提供しているか、
コマンドラインの再生プログラムがあるなら可能
Rubyは言語としてそれに関与はしないし、演奏するような第三者ライブラリも存在しない

midiファイルそのものの編集はできるっぽいんだけど
513デフォルトの名無しさん:2011/05/29(日) 00:34:05.15
よくあるチャンク式のバイナリだからフォーマット調べれば編集ぐらいはできるよね。
mmlコンパイラなんかも書けると思う。
514デフォルトの名無しさん:2011/05/29(日) 00:39:59.75
515デフォルトの名無しさん:2011/05/29(日) 00:52:26.34
それいいですね
でも僕の環境だとサンプルのmelody.rbを実行しても音が鳴らなくて文字列が出力されるだけでした
ライブラリを使わないとなるとAPIを叩かないといけなくなりますよね、やっぱり
midiは難しいなあ
516デフォルトの名無しさん:2011/05/29(日) 00:52:56.19
なんでrubyは公式でwindows向けを出さないの?
517デフォルトの名無しさん:2011/05/29(日) 01:01:25.22
windows買うお金がないから
518デフォルトの名無しさん:2011/05/29(日) 01:02:39.27
リソースが足りない
519デフォルトの名無しさん:2011/05/29(日) 01:11:30.43
>>516
他のOS向けもバイナリは置いて無いから、Windowsだけに限った話ではないわけだが
520uy:2011/05/29(日) 02:13:56.25
WindowsならMCI触ればすぐ演奏出来るだろJK
10分でCでdllかいて5分でRubyにリンクできる
WinAPIすら触った事ないんだな・・・・・・・・・・・・・・・・・・・・・・・

それかゲーム系のライブラリに頼れよ
wav、midiはたいていどれも演奏できる
521デフォルトの名無しさん:2011/05/29(日) 02:15:54.16
そういうときにしれっと15分で書いたソースを持ってくればイケメンなのに
522uy:2011/05/29(日) 02:35:56.94
http://www.geocities.jp/c_zelos/soto/midi.zip

はいはい
dllの作り方くらいはわかるよな?

bccの晒してもいいけど中途半端
523デフォルトの名無しさん:2011/05/29(日) 03:39:34.30
uyさんはコテハンな上に一見偉そうな発言を繰り返してるから
第一印象は良くなかったんだが
最近、実は良い人なんじゃないかと思えてきた
524デフォルトの名無しさん:2011/05/29(日) 04:22:28.80
単に頭が弱い
普通の発言するときくらいコテ外しゃいいのに
525デフォルトの名無しさん:2011/05/29(日) 04:39:54.81
スレはコテが散見される方がおもしろいよ
526デフォルトの名無しさん:2011/05/29(日) 05:38:46.41
そりゃスレによるw
527デフォルトの名無しさん:2011/05/29(日) 10:06:23.74
midiファイルを再生する事とMIDIメッセージを送信して直接鳴らすのはイコールじゃないのに何言ってんだ
528デフォルトの名無しさん:2011/05/29(日) 12:12:01.07
>>527
何書いてあるかわからないけど、それを実感したなら今後はレスごと表示させないことをお勧め

質問する人へ:
そんなわけで、何か間違っていてもそのレスが誰にも読まれず誰にも訂正されないので、
あれは常に間違い続けています(そして、誤りに気づく術すら、構造的に持ちあわせていません)
決して参考にしないでください
529デフォルトの名無しさん:2011/05/29(日) 12:49:58.03
>>528
MCIでMIDIコントロールできないって事
530デフォルトの名無しさん:2011/05/29(日) 13:40:08.82
ruby1.9.2で、
97.chr => "a"
と、文字コード→文字にするメソッドは知っているのですが、逆に文字→文字コードとするメソッドを教えて下さい。
531デフォルトの名無しさん:2011/05/29(日) 13:44:18.23
irb1.9> p "a".ord
97
532デフォルトの名無しさん:2011/05/29(日) 13:44:58.70
わかりました。ありがとうございます。
533デフォルトの名無しさん:2011/05/29(日) 13:45:14.89
"a".getbyte(0)
はだめか
534デフォルトの名無しさん:2011/05/29(日) 13:46:04.76
ordって何の略かわからんぬ
535デフォルトの名無しさん:2011/05/29(日) 13:50:26.99
>>534
ordinal
序数
正確に表現した結果わかりにくくなってる好例
まあ、Rubyが決めた使いかたじゃないから仕方ないんだけど
536デフォルトの名無しさん:2011/05/29(日) 14:12:15.25
>>535
んまー、言われてみれば確かに。
537デフォルトの名無しさん:2011/05/29(日) 14:15:41.37
>>515
自分の環境に合わせて書き代えれば動作しそうな気もする
538uy:2011/05/29(日) 16:50:52.86
訂正するやつはソースコードで語れよ…
中学生でもできるレスはいらねえ………
midi慣らすなんてMIDIファイルの中身しってりゃファイル読めた時点で物理的に可能なんだけどな……
携帯じゃぐぐれないが、midiならすなんて5分で調べてdllかいて2分でリンクできる……………
WinAPIすら
 しらないんだな………
539デフォルトの名無しさん:2011/05/29(日) 16:52:55.14
a.txt (10byte)があります
Rubyでa.txtの内容を読み込みます
次の日、a.txtに文字列を追加します
a.txtは13byteに増えました(+3byte)
Rubyでこの3byte分だけ取得する方法ってございませんか?
13byte読みに行くのではなく、転送量を減らしたいので3byteだけ取得したいのです
540デフォルトの名無しさん:2011/05/29(日) 16:55:47.79
IO#seek か IO#sysseek
541デフォルトの名無しさん:2011/05/29(日) 16:56:57.29
>>538
さっきのソースコードうpには感心したので
ぜひもう一度質問に合ったサンプルを上げてほしい
MIDIメッセージを送信するってやつね
542デフォルトの名無しさん:2011/05/29(日) 17:35:01.96
>転送量
というのが若干気になるが、基本は>>540
読み込み開始位置を11バイト目にセットして、そこからreadとかで3バイトだけ読めばいい

ふつーのファイルシステムの上での場合だけどな
もしHTTPとかを経由しているとサーバが差分取得を許可してるかどうかがポイントになって面倒に
543uy ◆yyC0rYWEq2 :2011/05/29(日) 18:24:29.11
>>541
 こ れ す ら  出来ないゴミなんだな・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
http://www.geocities.jp/c_zelos/soto/midi_cruby.zip

そんな知識量で大丈夫か?
544uy ◆yyC0rYWEq2 :2011/05/29(日) 18:28:52.38
>>543
close関数追加
// close
int _export uy_midi_close( void ){
midiOutReset(hMidiOut);
midiOutClose(hMidiOut);
}
545デフォルトの名無しさん:2011/05/29(日) 18:40:32.95
>>543
>>541は別に煽ってるわけじゃなく素直に感心したんだと思うよ
コード示せば言い訳きかないから
546デフォルトの名無しさん:2011/05/29(日) 18:42:01.53
>>543
答えてくれてありがとう
参考にさせてもらうよ
547デフォルトの名無しさん:2011/05/29(日) 20:51:13.35
Ruby1.9.2です
時刻の比較がしたいのですがアドバイスお願いいたします
ifのところでエラーになりました

t = Time.parse("2011/05/29 21:05:30").class
n = Time.now

if n >= t then
puts "時間です"
else
puts "まだ大丈夫です"
end
548デフォルトの名無しさん:2011/05/29(日) 21:07:04.45
>>547
t = Time.parse("2011/05/29 21:05:30").class
ってしちゃうと、tにはTimeというクラスが設定されちゃう
t = Time.parse("2011/05/29 21:05:30")
にすればうまくいくと思うよ
549デフォルトの名無しさん:2011/05/29(日) 22:13:45.01
ロケール依存にならない?
550デフォルトの名無しさん:2011/05/29(日) 22:35:57.20
日時文字列にタイムゾーンが明記されてないから、システムのタイムゾーン依存になるかも
t = Time.parse("2011/05/29 21:05:30 +0900")
ならいいのかな?
551デフォルトの名無しさん:2011/05/30(月) 02:41:35.67
>>533
String に getbyte setbyte メソッドなんてあったのか
知らなかった
るりまにも載ってねぇ

#coding:cp932
a='あ'
p a.ord # => 33440
p a.codepoints.first # => 33440
p a.getbyte(0) # => 130
p a.bytes.first # => 130
552デフォルトの名無しさん:2011/05/30(月) 08:34:11.55
なんでエラー吐いたときにエラーメッセージを書かないんだろ

最近多いね
553デフォルトの名無しさん:2011/05/30(月) 08:48:41.58
>>552
エラーだから
554デフォルトの名無しさん:2011/05/30(月) 09:57:38.31
>>553の指摘は意外と根深い
「解決のヒント」とかいう名目で表示するようにすればいいのかもしれない
555デフォルトの名無しさん:2011/05/30(月) 10:26:29.76
>>552
テンプレも読まないクズだから
556デフォルトの名無しさん:2011/05/30(月) 12:09:22.51
VisualRubyって開発停止してますか?
557デフォルトの名無しさん:2011/05/30(月) 12:45:13.30
VisualuRubyのこと?
558デフォルトの名無しさん:2011/05/30(月) 13:05:35.11
a〜zのアルファベットで1桁から4桁まで全て出力する方法って簡単にできませんか?

PHPで書くと
<?php for ($i="a"; $i<="zzz"; $i++) echo $i."\n";?>
でa〜zzzzまで全て書き出せるのですがRubyだと実装難しいですか?
559デフォルトの名無しさん:2011/05/30(月) 13:09:56.49
puts ('a'..'zzzz').to_a
puts(('a'..'zzzz').to_a)
括弧の取り扱いの問題があるので、ptus の直後に空白を入れるか、
誤解されないようにもう1つ括弧をつけること。

560デフォルトの名無しさん:2011/05/30(月) 13:26:21.28
('a'..'zzzz').each {|s| puts s}
のほうがメモリに優しいか。

561デフォルトの名無しさん:2011/05/30(月) 13:29:22.44
Rubyだと綺麗に書けるんですね
勉強になりました
562デフォルトの名無しさん:2011/05/30(月) 14:09:05.59
'あ'..'んん' はそれっぽかったけど、
'α'..'ωω' でやったら途中によく分からない文字が。
文字入力ツールで見たら一応ギリシャ文字ではあるらしいけど。
563uy ◆yyC0rYWEq2 :2011/05/30(月) 17:04:22.49
>>555
お前もクズだけどね
564デフォルトの名無しさん:2011/05/30(月) 17:19:37.40
じゃあおれもクズだぜ!
565 【東電 78.2 %】 忍法帖【Lv=1,xxxP】 :2011/05/30(月) 20:15:58.06
みんな屑だからrubyなんて嵌り込んじゃう訳でw
566うゆ:2011/05/30(月) 20:22:31.06
一応文字ツールでみたらギリシャ文字ではあるらしいけど(キリッ)

プログラマさんてすごいですね!!
ギリシャ文字よめるんですか!!!(キリッ)wwwwwwwwwwwwwwwwwwww
567デフォルトの名無しさん:2011/05/30(月) 20:28:06.86
だいたい一文字一音対応の表音文字をちょっと調べて読めないのは相当アレだと思う。
意味はわからなくても文字自体はすぐ読める。
568デフォルトの名無しさん:2011/05/30(月) 22:45:46.97
>>566
読めなくても、ツールの同じグループの中にあることはわかるんだよ。
569デフォルトの名無しさん:2011/05/30(月) 22:47:41.06
ガーン、よく見たら、「ギリシャ文字およびコプト文字」で1グループだったぜ。
コプト文字ってエジプトだっけか。
570uy:2011/05/30(月) 22:59:08.68
>>569
ップゲラッチョwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
ねえねえ今どんな気持ち?wwwwwwwwwwww
uy程度のコテハンに揚げ足取られちゃってどんな気持ち?wwwwねえねええwwwwwwwwwwwwww
571デフォルトの名無しさん:2011/05/30(月) 23:15:47.58
>>569
コプト語(4世紀以降〜17世紀ぐらいのエジプト語)を記述するために
ギリシア文字にいくつか文字をつけくわえたのがコプト文字
572デフォルトの名無しさん:2011/05/31(火) 01:33:56.79
揚げ足…取れてるか?
573 忍法帖【Lv=1,xxxP】 【東電 55.6 %】 :2011/05/31(火) 03:14:37.27
日本人ってホント1バイト文字の認識能力無いのがよくわかるスレ。
英数26+記号しか無いと思ってるよねw
574uy:2011/05/31(火) 04:39:08.31
[email protected]
22♂です
メールまってます
575uy:2011/05/31(火) 04:41:09.55
可愛い女の子だけ大歓迎です
576デフォルトの名無しさん:2011/05/31(火) 04:43:53.47
キモイんだよ鼻デカブサイクwww
577デフォルトの名無しさん:2011/05/31(火) 05:00:23.77
>>573
αがいつから1バイト文字になったのですか
まさかキャラクタセットの理解なしにそんな話を…いやまさか
578デフォルトの名無しさん:2011/05/31(火) 05:02:55.24
焼肉屋にあったらありそうだな<コプト
579うゆ:2011/05/31(火) 05:23:37.97
うゆにかまう奴もいい加減にしろ
隔離スレでやれ
580デフォルトの名無しさん:2011/05/31(火) 11:35:19.28
英数記号以外を「1バイト文字」として認識するのは危険ですな。

近頃はやりのUTF-8でも1バイトなのASCIIだけだし、マルチバイトだと思っておいた方が安全。
581デフォルトの名無しさん:2011/05/31(火) 11:56:48.22
ギリシャ文字はたまたまISO-8859-7なら1バイトだけど、それはISO-8859-7だけでのお話
「日本語は2バイトだ」と同レベルの、現在となってはかなり恥ずかしい間違い
582デフォルトの名無しさん:2011/05/31(火) 12:12:26.04
Windows
Rubyで特定の処理を10ミリ秒ごとに鳴らしたい場合、正確に10ミリごとに動作させられますか?
583デフォルトの名無しさん:2011/05/31(火) 12:33:02.29
>>582
Win32APIのSleep関数でも使ってみたらどうだろう。
スリープの精度はOS依存だから難しい問題だね。
584 忍法帖【Lv=1,xxxP】 【東電 73.9 %】 :2011/05/31(火) 12:37:57.17
日本語が一バイトの時代ってあったっけ?
元から二バイトだろ。その為に漢字ロム積んでまともな速度になる様にしてたんだし。


リアルタイムosでもないかぎり正確さは保証はされないと思うよ。
585デフォルトの名無しさん:2011/05/31(火) 12:38:05.97
どれぐらいの正確さを要求するかによる。

あと極端な話スラッシングが起きてるような状態でも正確な動作が継続されることを望む?
586デフォルトの名無しさん:2011/05/31(火) 12:38:46.45
半角カタカナが日本語ではないという説は初めて聞いた
587 忍法帖【Lv=1,xxxP】 【東電 73.9 %】 :2011/05/31(火) 12:44:19.38
まだ半角仮名使ってる馬鹿が居るのか。
jis規格満たしてないから使えないぞwww
588デフォルトの名無しさん:2011/05/31(火) 12:45:19.11
>>584
半角カナは昔1バイトで扱われてたし、
日本語が2バイトってのは「2バイトで表現できる」ってだけで、UTF-8だと日本語の文字は3バイト使うね。
589デフォルトの名無しさん:2011/05/31(火) 12:45:54.68
>>584
ぷぎゃー。
590デフォルトの名無しさん:2011/05/31(火) 12:47:18.10
>日本人ってホント1バイト文字の認識能力無いのがよくわかるスレ。
>英数26+記号しか無いと思ってるよねw

>日本語が一バイトの時代ってあったっけ?

>まだ半角仮名使ってる馬鹿が居るのか。
>jis規格満たしてないから使えないぞwww


なんだただのキチガイか
591デフォルトの名無しさん:2011/05/31(火) 13:18:07.94
負荷が全然かからない処理なので3〜5ミリで処理は終われるようになってます
たとえスラッシングが前の処理が終わらなくても10ミリ間隔で実行できればかまいません
スラッシングがおきたときは手動で終了させます
Windows7 64bitだとスリープの精度がよくなってたししますかね
592デフォルトの名無しさん:2011/05/31(火) 13:32:56.16
タイマー設定の精度向上はMediaplayerが入ったあたりで追加されたんだったかな
593デフォルトの名無しさん:2011/05/31(火) 13:37:17.97
11ミリ秒や9ミリ秒になったら死ぬ、みたいな場合はWindowsに降りて操作したほうがいいと思う
594デフォルトの名無しさん:2011/05/31(火) 13:43:40.45
基本的には

ループ始点
 時間計測しながら処理
 (繰り返したい間隔 - 処理にかかった時間)だけ停止
ループ終点


正確に10ms刻みで動作させるってのがどの言語使っても大抵はめんどくさくなるような処理だし。

大げさでもいいならいっそRuby/SDLのfpstimer使えばいいんじゃないかしら。
595デフォルトの名無しさん:2011/05/31(火) 18:36:29.90
>>590
なんでお前そんなにイライラしてんの?
596デフォルトの名無しさん:2011/05/31(火) 18:39:25.96
>>595
すっかり終わった話題であるはずの>>590の書き方が気になるという人はたぶんこの世に一人だけだと思う
597 忍法帖【Lv=2,xxxPT】 【東電 72.9 %】 :2011/05/31(火) 18:55:42.71
何か図星だったみたいねwww
598デフォルトの名無しさん:2011/05/31(火) 19:05:29.69
「自分の発言で相手が図星を突かれた」と思い込む人よくいるよねー。

>>590は自分だけど>>596は別人でありまする。
599デフォルトの名無しさん:2011/05/31(火) 19:16:46.28
rspecでいい? shoulda がいいかな?
600デフォルトの名無しさん:2011/05/31(火) 19:32:14.33
>>599
RSpecでいいならRSpecで
Shouldaはassert_equalタイプが(教育的コストなどの点で)好ましいという場合に使う
ライブラリを公開したとして、開発者が集まりやすいのはtest/unitかShouldaなんじゃないかね
601デフォルトの名無しさん:2011/05/31(火) 22:40:31.62
Dateクラスを継承してMonthクラスを作り、+演算子をn日後でなくnヵ月後(>>と同じ動作)にしたいのですが
class Month < Date
def +(n)
 self >> n
end
end
としたところ、Dateクラスの>>メソッド内で+を呼んでおり循環してしまいます。
どうすれば+(n)でnヵ月後を返すようにできるでしょうか?
602uy:2011/05/31(火) 23:02:54.34
わからないから
そーす全部うp
603デフォルトの名無しさん:2011/05/31(火) 23:11:23.96
>>601
継承せずにインスタンス変数で持たせて
同様のメソッドを持たせるとか
604デフォルトの名無しさん:2011/05/31(火) 23:37:48.11
枝葉から根っこに向かって継承させるとは斬新
605デフォルトの名無しさん:2011/05/31(火) 23:53:59.33
言語つかプログラムになれるまで継承とか、演算子オーバーロード・ライド使っちゃあかんよ
これらはプログラミング極めた後に、更なる効率的な管理を考えるときに使う機構
なくても作れる
1万行とかいうソースさえも扱ったこともない & 想像すら 出来ない子が、サンプルみながら練習しようと無意味
606デフォルトの名無しさん:2011/06/01(水) 00:02:10.77
1万行ってどんなことをするときに書くのですか?
607デフォルトの名無しさん:2011/06/01(水) 00:06:57.14
>>605
ちょっとこれを思い出したわ。
ttp://www.ariel.com.au/jokes/The_Evolution_of_a_Programmer.html
熟練するちょっと前位に、やたら無駄に凝る時期があるっていう。
608デフォルトの名無しさん:2011/06/01(水) 00:22:48.35
そもそもDate#<<は動作がキモすぎる

はともかく
>>681
・ Month クラス自体、存在意義がまったくないので、Month#+ を使うのを諦めて Date#<< を使う

・ てきとうな alias を作成してお茶を濁す
irb> class Date
irb> alias :proceed :>>
irb> end
irb> puts Date.today.proceed(1)
2011-07-01

・ インスタンス変数に入れておいて、なんか適当な操作メソッド作る
class C
def initialize
@today = Date.today
end
def mon_plus(n=1)
@today >> n
end
end
609 忍法帖【Lv=2,xxxPT】 【東電 63.6 %】 :2011/06/01(水) 01:08:19.08
rubyで一万行も書くなら、cやjavaでちゃんと作れと思うなw

小刀でログハウス作ってる様な無茶を感じる。
610デフォルトの名無しさん:2011/06/01(水) 03:30:16.55
Rubyで一万行ってなにやってるんだろう……。
611デフォルトの名無しさん:2011/06/01(水) 07:10:11.67
Rubyを使うこと自体が目的なんじゃね?
612デフォルトの名無しさん:2011/06/01(水) 11:04:08.79
なんかあるかなと思ったが
$ cat `find mail-2.2.19/lib/ | grep "rb$"` | grep -vE "#|^ *$" | wc --lines
15347
ふむ
613デフォルトの名無しさん:2011/06/01(水) 12:24:47.08
find -name foo -exec bar | baz ...
とかでよくね?
と思ったがそっちの方がわかる人間が多いか。
614デフォルトの名無しさん:2011/06/01(水) 12:40:12.32
find のオプションは進化の悪い例
とってもアリガチなんだけど、悪い例だ
615デフォルトの名無しさん:2011/06/01(水) 19:02:23.77
windows XP で1.8.7使ってます
プログラム初心者でほんと申し訳ないですがお願いします

一応yahooファイナンスから過去の株価データ持ってくるの目的で
やり始めたんですがhttpからデータ引っ張ってくると文字化けします
文字コード指定とかどの辺りでするんですかね?

http上の文字コードとかも分からなくて・・・
検討はずれな事言ってるかもしれませんがお願いしますm(_ _ )m

require "net/http"
require "uri"
url = URI.parse("http://table.yahoo.co.jp/t?c=2011&a=2&b=28&f=2011&d=6&e=1&g=d&s=1554&y=0&z=8471&x=sb")
http = Net::HTTP.start(url.host, url.port)
doc = http.get(url.path)
puts doc
616デフォルトの名無しさん:2011/06/01(水) 19:32:05.17
>>615
そのページの文字コードはEUC-JPだね。
コマンドプロンプトに表示したいならどうせtosjis使うから気にしないでいい。

require 'kconv'
しておいて
puts Kconv.tosjis(doc.body)

そのdocにはヘッダが含まれるからhtmlの部分だけ取り出したければdoc.bodyしないといけない。

でもそのアクセスの仕方だとクエリが含まれないから株価データは返ってこないね。
uri.pathの代わりにuri.request_uriを使うといいよ。

余計なお世話かもしれないけど、その様子だと取ってきたHTML出力するだけで解析とかできなそうだし、
ちゃんとした本でひととおり勉強してから実際のプログラムの作成に入った方がいいんじゃないかなあ。
617 忍法帖【Lv=3,xxxP】 【東電 77.7 %】 :2011/06/01(水) 19:52:43.37
それより調子扱いて取得しまくってるうちに鯖の管理者にdenyされて同様に情報取得してるお仲間さんもろとも困ることになりそうだw
あと業務妨害でも訴えられたりするみたいね。ほどほどに。

まあ複数情報元からの取得が基本だけど。
618デフォルトの名無しさん:2011/06/01(水) 19:57:48.42
エンディアンを判定しようとして以下のコードを書きましたが
LE,BEどちらを読ませても、"BE"に落ちてしまいます。
何が悪いか分かりますか?

ruby 1.9.2p136 (2010-12-25 revision 30365) [i386-mswin32_100]

f = File.open(filename)
f.binmode
lines = f.read
bom = lines[0..1]
if bom == "\xFF\xFE"
p "LE"
else
p "BE"
end
どうやら、packなるものを勉強しないといけなさそう
だけど、リファレンスみてもピンとこない・・・
619デフォルトの名無しさん:2011/06/01(水) 20:00:00.70
>>616
ありがとうございます。しっかり表示されました

楽しいruby読んで勉強中なんですが、
ちょっと、実際に試したくなってやってました

解析等は22章にあるようです
今17章なので続きは読んでから進めてみたいと思います
620デフォルトの名無しさん:2011/06/01(水) 20:09:42.10
>>618
なぜp bomしないんだ
621デフォルトの名無しさん:2011/06/01(水) 20:22:27.34
>>618
f.closeしろ

というのはおいといて

UTF-16BE
UTF-16LE
UTF-16
の三種類あるのはわかってる?
622デフォルトの名無しさん:2011/06/01(水) 20:52:44.32
ダウンロードできるHTML版のマニュアルってないんですか?
623デフォルトの名無しさん:2011/06/01(水) 21:00:32.51
>>622
古いのだったら
ftp://ftp.ruby-lang.org/pub/ruby/doc/ruby-man-ja-html-20051029.tar.gz

新しいのはHTMLはないからchmのコレか
http://www.ruby-lang.org/ja/man/archive/ruby-refm-1.8.7-20110529.chm
コレを導入するといい
http://www.ruby-lang.org/ja/man/archive/ruby-refm-1.9.2-dynamic-20110529.tar.xz

旧版の最新内容のHTMLにして固めたものはないと思うから、欲しければ巡回ソフトで
http://www.ruby-lang.org/ja/man/html/
以下を巡回すればよろし
624デフォルトの名無しさん:2011/06/01(水) 21:02:28.09
>>622
chmで1.9用のが欲しければこっちね
http://www.ruby-lang.org/ja/man/archive/ruby-refm-1.9.2-20110529.chm
625デフォルトの名無しさん:2011/06/01(水) 21:05:03.49
>620
BOM付のBE,LEについて、p bomすると以下が出力されます。
結果の説明が足りてませんでした。
"\xFE\xFF"
"\xFF\xFE"

>621
文字が長くてカキコはじかれたことがあるので、コードはエッセンスだけにしています。
closeしても期待通り動いていません。(コード等が足りないなら教えてください。)
種類理解しているつもりですが、今回の趣旨ではないと考えています。
BOM付のUTF16を判別したいと考えています。
知りたいのは、判定処理が正しく動かない理由になります。

ちなみに、1.8.6で試したら動きました。さらに??です。
626デフォルトの名無しさん:2011/06/01(水) 21:09:12.86
>>623
>新しいのはHTMLはないから
>旧版の最新内容のHTMLにして固めたものはないと思う
そうですか、では諦めます

>欲しければ巡回ソフトで
すこしリンク見ただけですが、メソッドがひとつのHTMLになってるので、
サーバへのアクセス回数は数千回になるはずですよね
そういう手段を初心者スレで安易に他人に勧めるものではないと思います
627デフォルトの名無しさん:2011/06/01(水) 21:11:51.28
>>625
Ruby1.9.x の String[0..1] は「先頭2バイト」ではなく
「与えられた文字エンコーディングで考えるところの先頭2文字」
628デフォルトの名無しさん:2011/06/01(水) 21:12:34.40
>>626
>メソッドがひとつのHTMLになってる
そんなことはない
629デフォルトの名無しさん:2011/06/01(水) 21:12:57.94
(めんどくせぇ…!)
630デフォルトの名無しさん:2011/06/01(水) 21:14:18.59
>>626
だーいぶ前にもマニュアルはサーバから全部持って来いというレスがあったんだが、
たぶん言ってるのは同じ人で、たぶん実際には試してない
631デフォルトの名無しさん:2011/06/01(水) 21:20:28.06
>>628
手元に1.9.2のchmが分解されたものがあるよ
$ find .chmsee/bookshelf/01bc1c1fc37aeaf2a9d23bbd7d0a7499/method | grep html$ | wc -l
11107

ということでめでたく1万ファイルオーバーだと推測
632デフォルトの名無しさん:2011/06/01(水) 21:39:42.93
まあ、回答で動かないコード書くような人もいるとこなので…
なんのためのirbなのかと…
633デフォルトの名無しさん:2011/06/01(水) 21:46:34.45
>>630
以前にこの質問に答えたことはないし、試したこともあるよ。
憶測でもの言うのやめなよ。

>>631
以前5秒間隔で取得したときの取得結果
http://www.ruby-lang.org/ja/man/html/*.html
472ファイル

1万ファイルオーバーねえ。
#のガイドリンクまでHTML化してんじゃないの?
634デフォルトの名無しさん:2011/06/01(水) 21:52:54.03
635 忍法帖【Lv=3,xxxP】 【東電 75.0 %】 :2011/06/01(水) 21:53:30.62
zipしておいといたほうがいいレベルだな。
巡回して取ってこいとは言えないレベルだわw
636デフォルトの名無しさん:2011/06/01(水) 21:54:47.38
>>634
それ新マニュアルでしょ?
旧マニュアルの話だよ?
637デフォルトの名無しさん:2011/06/01(水) 21:59:17.74
>>636
既に旧マニュアルに価値はない
「読みやすいが内容古い」と「読みにくいが内容新しい」で天秤して、「内容古い」が負けた状態
638デフォルトの名無しさん:2011/06/01(水) 22:00:59.12
>>637
>旧版の最新内容のHTMLにして固めたものはないと思うから、欲しければ巡回ソフトで
http://www.ruby-lang.org/ja/man/html/
>以下を巡回すればよろし

>>欲しければ巡回ソフトで
>すこしリンク見ただけですが、メソッドがひとつのHTMLになってるので、

>メソッドがひとつのHTMLになってる
>そんなことはない

日本語読める?
639デフォルトの名無しさん:2011/06/01(水) 22:02:20.51
>>627
bomに入るのは、UTFで与えられた先頭2文字、
ということでよいでしょうか?

p bom.size # => 2
となりました。

"\xFE\xFF"と記載すると、UTFとはことなるBOM表現だったり
するのでしょうか。

言われていることがよく理解できませんでした。すみません。。
640デフォルトの名無しさん:2011/06/01(水) 22:04:46.91
てゆーか、Stringなら
http://doc.okkez.net/static/192/class/String.html
の1枚だけでいいよね公開
メソッド詳細へのリンクは String.html#downcase みたいにアンカーでもつけとけばいい
dynamicのアーカイブ見ると絶望するんだが、なんであんなにファイル細かいんだ
641デフォルトの名無しさん:2011/06/01(水) 22:19:23.06
>>640
ファイル数三万とか何事かと思う

旧版みたいにクラスでまとめてくれよ……。
642デフォルトの名無しさん:2011/06/01(水) 22:23:50.81
>>618
str = File.open(filename, 'rb'){|f| f.read}
if str.start_with?("\xFF\xFE")
p "LE"
else
p "BE"
end

1.8.6 では動作しない
643デフォルトの名無しさん:2011/06/01(水) 22:26:04.65
マニュアルといえば、riとかまったく動作しないんだけど、使うのになにか初期設定とかいるのかな

$ ri String
Nothing known about String

rvmでインストールしたら動かないの?
644デフォルトの名無しさん:2011/06/01(水) 22:37:48.25
>>640の1枚形式ってどうやって出力するの?
645 忍法帖【Lv=3,xxxP】 【東電 65.3 %】 :2011/06/02(木) 00:55:27.67
ruby -html -ichimai
とかw
646デフォルトの名無しさん:2011/06/02(木) 01:38:04.67
>>642
in `start_with?': incompatible character encodings: ASCII-8BIT and Windows-31J (Encoding::CompatibilityError)
1.9.2です。こんな関数あるんですね。知りませんでした。
647デフォルトの名無しさん:2011/06/02(木) 01:44:49.93
>>639
>>618
>if bom == "\xFF\xFE"
の"\xFF\xFE"がまずい
Windows日本語版だとスクリプトエンコーディングが
デフォルトでWindows-31Jになってて
ASCII-8BITの文字列とWindows-31Jの文字列を比べてるので
7bit外の文字の比較が常に偽になっている

#coding:Windows-31J
bom = [0xFF,0xFE].pack('C2')
p bom
p bom.encoding
p "\xFF\xFE"
p "\xFF\xFE".encoding
p bom == "\xFF\xFE"
p bom == "\xFF\xFE".force_encoding('ASCII-8BIT')
648デフォルトの名無しさん:2011/06/02(木) 02:14:27.35
新リファレンスのchm版は、内容が新しいのはいいんだけど、若干読みづらいと思う
旧リファレンス時代にあった有志配布のchm版みたいなのがほしい
649デフォルトの名無しさん:2011/06/02(木) 05:35:43.65
>>640
システムリソースに対してファイルが多過ぎるとルックアップが激烈に遅いということが理解できなかったのですよ
rubygemsと本質は一緒
あの一見妥当なディレクトリ構成は、もう少し要素が少ないかもう少しマシンスペックが高いかするときにのみうまく動く
650デフォルトの名無しさん:2011/06/02(木) 05:59:38.28
なにか検索したいと思った場合、全文検索なんて必要ないんだから、もうちょっとやりようはあったんじゃないかと
もし全文検索が必要だというのなら、それは単にその項の外部参照リンクかコードサンプルのどちらかが足りないのよ
Foo#bar について検索した結果に必要なものは、
Foo#bar そのものの説明と、それに関する他のメソッドのリンクと、Foo#bar を使ったコードサンプルの3つ
他のメソッドやクラス概観の解説やコードサンプルで Foo#bar または bar が書かれている部分が必要になることはない、はずだ
651デフォルトの名無しさん:2011/06/02(木) 06:05:41.43
>>650
ASCIIコードを扱うクラスやメソッドが知りたいので検索しましたが
「ASCIIコードというクラスやメソッド名は存在しませんでした」とか言われましたどうすればいいですか

riが売れなかったのは、クラスやメソッド(の一部)をあらかじめ知っていて指定しないといけなかったからだと思うの
静的HTMLが提供されてれば検索の要求が出るのは普通だし、うまい案がないというのも確かなのだと思う
652デフォルトの名無しさん:2011/06/02(木) 09:42:40.56
>>648
chmはただで作れるから、chmを分解してhtml化してから作り直すとかして自分で作ったら?
メソッドごとのhtmlのせいでファイル数が某大なのがあれならパッケージ版が何やってるか調べて、
クラス毎にまとめたhtmlだけ用意してchm作るとかさ。

って、初心者スレで要求することではないな。
653デフォルトの名無しさん:2011/06/02(木) 10:10:05.67
静的HTMLは動的生成のコストがつれーわーマジつれーわーだから欲しいんだよね
自前で静的HTML生成させたらメモリ不足で吹っ飛ぶ、搭載メモリ500MB未満の環境のことも考慮して頂けると嬉しいです
654デフォルトの名無しさん:2011/06/02(木) 10:17:02.90
>>643
そもそものデータ自体が生成されないみたいね
rvmではriは使用できない模様
655デフォルトの名無しさん:2011/06/02(木) 10:34:24.11
オブジェクトは必要なくなったらすぐ捨てて定期的にGC.startすればいいんじゃないかしら。
HTML一枚生成するだけでメモリがいっぱいになるわけじゃあるまいし。
(HTML一枚生成するだけで飛ぶようならそんな環境でブラウザ開きながらRuby走らせようとするな)

時間はかかるけどメモリ足りないんだから仕方ないよねー。
656デフォルトの名無しさん:2011/06/02(木) 10:44:28.95
>>655
RubygemsやBundlerみたく、必要なデータかき集める時点でメモリオーバーかもしれないぞ
スクリプトの全部が全部、メモリ利用を気にして逐次実行を行なってるわけじゃないし
超でっかいデータ.each do{...} は、どこでどうGCを噛ませても超でっかいデータぶんのメモリ増大は防げない

余談だけど、配布のダイナミックなんちゃらは単体で静的HTML生成ができる
bitclust/tools/bc-tohtmlpackage.rb だかなんだったかを実行
書き出すディレクトリの指定が必須だったはずなのでソースかヘルプ見れ
657デフォルトの名無しさん:2011/06/02(木) 11:13:02.03
めんどくさいなあ
CPU1個やメモリ2GB未満の場合はRuby使用禁止とかにできない?
658デフォルトの名無しさん:2011/06/02(木) 11:13:50.02
>>656
超でっかいデータ.eachが発生するって、それは全ファイルを一旦メモリに読むような、
メモリ不足環境としてはあってはならないバカなことをしてるからじゃあ……。
659デフォルトの名無しさん:2011/06/02(木) 11:17:30.59
>>657
今のcrubyはCPU1個しか使ってなかったはずなので、それは薮蛇のような

>>658
たとえば、今話題に出てるbc-tohtmlpackage.rbはそれを制御できない
660デフォルトの名無しさん:2011/06/02(木) 11:19:39.89
初心者が
窮乏環境で
Rubyを使うな


でおk

上級者なら設計やアルゴリズムを工夫してメモリを節約しながらLL使うこともできるけど、
LLはほっとけば湯水のごとくメモリを消費するから、
そんなちょっとのことでメモリがいっぱいになって飛ぶような環境ではまともなスクリプトは書けまい。
661デフォルトの名無しさん:2011/06/02(木) 11:21:38.09
>>659
いやいや、窮乏環境でメモリアンフレンドリーかもしれない人様のスクリプト使う時点でなにかおかしいと気づけよ。
662デフォルトの名無しさん:2011/06/02(木) 11:27:02.38
httpclientかなんかで簡単にformの値を取得する方法ってありますか?
とりあえずhtml取得して正規表現をかけるくらいしか思いつきません
663デフォルトの名無しさん:2011/06/02(木) 11:30:53.33
変換スクリプトひとつでメモリ300MB以上使ってるのも正直どうかと思うが
いやデータ量依存なんだけど

>>662
Mechanize
664デフォルトの名無しさん:2011/06/02(木) 11:34:01.01
>>663
メモリ10GBが当たり前の時代にたかが300MBで文句言うとかありえん
665デフォルトの名無しさん:2011/06/02(木) 11:36:34.23
Ruby1.9ってUTF-32のNKF.guessやめちゃった?
NKF.guess "うまいつゆ".encode('UTF-32BE', 'UTF-8')
=> #<Encoding:US-ASCII>
マニュアルにも返す候補として書いてないような
666デフォルトの名無しさん:2011/06/02(木) 11:37:28.63
UTF-32とか使わないからどうでもいい
667デフォルトの名無しさん:2011/06/02(木) 11:42:53.11
推奨環境が示されるべきだという話はときどき聞く
CPUが3GHz相当、メモリは2GB、HDDの空きは…いや、これはどうもいいか
668デフォルトの名無しさん:2011/06/02(木) 11:49:05.42
10GBが当たり前のじだいじゃねえよwwwwwwwwwwwwww
669デフォルトの名無しさん:2011/06/02(木) 11:52:16.10
>メモリは2GB
情弱貧乏人は帰れ
いやマジで
670デフォルトの名無しさん:2011/06/02(木) 12:04:53.41
メモリは2GBぐらいの人が多いんじゃないかな。
671デフォルトの名無しさん:2011/06/02(木) 12:10:07.61
メモリとSSDを誤解してる説をおしてみる

まあどちらにしても、Rubyのための物理メモリの空きは1GBから2GBくらいは欲しい
rubyと各種gemが全部ロードされ、生成データが全部乗ってなお余る状態が必須

だいぶ前にBundlerが重いというレスがあったが、たぶんそのマシンはもうRuby実行に向いてないんだ
672デフォルトの名無しさん:2011/06/02(木) 12:16:28.27
>rubyと各種gemが全部ロードされ
いやさすがにそれが無理なマシンは現役になってないだろ…
ライブラリやスクリプトが取り扱い確定のデータの大きさのほうが問題なのだと思う

まあ、今回で言えば「静的HTMLの生成には空きメモリが500MBくらい必要です」
というDOS時代っぽいコメントがついてれば問題なかったのではないかと
673デフォルトの名無しさん:2011/06/02(木) 12:18:18.63
っていうか情強(っていうの?)ほどこまいマシン多く持ってて、
256MBとか512MBとか、メインマシンでも1GBとか2GBとか、多くて4GBだったりするよね。

ハイエンドのモンスターマシン持ってるのは情弱と情強の中間ぐらいの人
674デフォルトの名無しさん:2011/06/02(木) 12:18:55.67
てゆーか、消費メモリの測定ってRubyではできないんだよね
これはプロファイラで表示されるべきだと常々思ってるんだけど、どうにかならないかしら
675 忍法帖【Lv=3,xxxP】 【東電 81.2 %】 :2011/06/02(木) 12:27:58.00
そこはわざと実装してないかと。
結局インタプリタはメモリ喰いと言う時点でrubyを避けるべきだもの。
cやアセンブラなら少ないメモリでもサック策に行き着くw
676デフォルトの名無しさん:2011/06/02(木) 12:33:55.45
>>674
消費量の監視は環境依存になっちゃうから組み込みみたいなのではダメなんじゃないかな
677デフォルトの名無しさん:2011/06/02(木) 13:04:28.11
jrubyならJMX使えば可能なのかな?
678デフォルトの名無しさん:2011/06/02(木) 15:12:14.56
>>677
JMXでもjheapででもなんとでもなるだろうね。

さらにWeblogicのJRockitVM使ってるならMissionControl使ってスレッドもヒープも追えるし
リークしてるオブジェクトの参照を辿ったりできるしで。
679デフォルトの名無しさん:2011/06/02(木) 15:49:31.36
rubyという実行ファイルが消費(というか、確保)してるメモリの量はOSに調べてもらえばわかるんだけど、
どっちかっていうとオブジェクトのメモリサイズみたいなのが大雑把にでもわかると嬉しい
なんとかなんないもんすかね
680 忍法帖【Lv=3,xxxP】 【東電 80.5 %】 :2011/06/02(木) 16:38:56.91
最初に上限宣言しとくと越えようとするとエラーにしてくれるのでもいいね。
681デフォルトの名無しさん:2011/06/02(木) 16:55:01.98
もうPHP使えよ
682デフォルトの名無しさん:2011/06/02(木) 17:40:40.64
GC.start
683デフォルトの名無しさん:2011/06/02(木) 20:14:21.04
PHPのHTMLマニュアルはたしかに見やすいな
あれと同じレイアウトにしてほしいですわん
684デフォルトの名無しさん:2011/06/02(木) 23:10:38.44
RubyがインストールされていないPCで動作させたいのですが
コードをexeにする方法ありませんか?
685デフォルトの名無しさん:2011/06/02(木) 23:12:14.08
exerb とか、他にもあった気がする
686デフォルトの名無しさん:2011/06/02(木) 23:28:34.50
ありがとうございます
exerbなどを利用してexeにして実行した場合、速度は落ちたりしますか?
687デフォルトの名無しさん:2011/06/02(木) 23:35:03.39
落ちる
Rubyのexe化はすべて
「ruby.exeとライブラリをzipでまとめて配布しておき、exe実行畤にzipを展開してruby.exeに渡す」という概念に沿ってる
zip展開に相当するものが毎回あるぶん、どう足掻いてもオリジナルより遅い
688デフォルトの名無しさん:2011/06/02(木) 23:39:39.70
それは困りました
ということはruby.exeとコードを同じフォルダに入れて実行すればexeにしなくても実行できるって考えても良いですか?
ライブラリなどは使いません
Rubyのhttp://www.ruby-lang.org/ja/LICENSE.txtライセンスにしたがってruby.exeを入れておけば問題ないですよね
689デフォルトの名無しさん:2011/06/02(木) 23:40:31.63
>>687
横槍なんだけど、起動に時間がかかるだけ?
それとも実行自体の速度も落ちる?
690デフォルトの名無しさん:2011/06/02(木) 23:48:37.29
>>688
読み込みパスとかがあるし、ruby.exeだけではほぼなにもできないのでそういうのは無理
ファイル配置をめちゃくちゃ精密に行なえば可能だが、それを行なってくれるのがexe化

exe化は手間の削減のためにのみ行なう
実行速度がどうしても必要でRuby実行環境がインストール不可能なのなら、Ruby以外ではりきってどうぞ
691デフォルトの名無しさん:2011/06/02(木) 23:53:14.11
>>689
気にしたこともないけど、まあ、リクツ上はそれほど変わんないんじゃね?
exeの中からライブラリ用のファイルを探すオーバーヘッドだけが致命的

…いや、今Rubyスレ界隈でホットな話題であるマシンスペックにも依るけど、
別にそんなに遅いってわけじゃないんで試すだけ試してみてもいいかと

バイトコードみたいなのをexeにする、とかだとよかったんだけど、まあ、ないものねだり
692デフォルトの名無しさん:2011/06/02(木) 23:57:19.02
時代がwebに移ってるしCとかC++を今から覚える気力がない
693デフォルトの名無しさん:2011/06/03(金) 00:01:10.39
プログラミング楽しみたいのなら、Cはある程度読めたほうがいいぞ
いやわりとマジで

自分で作れなくてもいいし、「Cであることは間違いないのだが何書いてあるかさっぱりわからん」とかいうレベルでもOK
694デフォルトの名無しさん:2011/06/03(金) 00:01:42.43
>>691
あるいはjrubyでJava経由でネイティブコンパイルとかw
695デフォルトの名無しさん:2011/06/03(金) 00:02:57.88
「Cであることは間違いないのだがこれ以上は何書いてあるかさっぱりわからん」
だった
Cプログラムソースであることが判別可能なだけでは流石にどうにもならんw
696デフォルトの名無しさん:2011/06/03(金) 00:08:29.94
猫でも分かるCでwindows apiで勉強終了
697デフォルトの名無しさん:2011/06/03(金) 00:26:19.11
>>687
exerbは一時ファイル展開せずに
exeファイル内蔵のスクリプトを読みに行ってるはずじゃないか?
698デフォルトの名無しさん:2011/06/03(金) 00:54:15.49
たまにはIronRubyのことも思い出してあげてください
699デフォルトの名無しさん:2011/06/03(金) 01:09:02.62
>>652
あー俺もそれやってる
目次付き、1クラス1メソッドの自作chm

実際に作ってみると1クラス1メソッドも便利なんだけど、目次があるのがそれ以上に便利
なぜ今の新リファレンスchmにはちゃんとした目次がないんだろう
700デフォルトの名無しさん:2011/06/03(金) 01:25:52.09
↓な風にライブラリを使う直前でrequireを書いてたら、


require 'nkf'
NKF.hogehoge


「ファイルの上に書いとかないとだめだろ」って言われました。
意味が解かりません…。どういう意味ですか?
701デフォルトの名無しさん:2011/06/03(金) 01:49:05.46
「ファイルの上に書いとかないとだめだろ」って意味だろ
てか再現取れないからバージョンとソースを省略せずに書けよ
702デフォルトの名無しさん:2011/06/03(金) 01:53:06.18
いや単純に

#!/usr/bin/env ruby
... えんえんとコードが続いたそのあとに
def foo
 require 'nkf'
 NKF.hogehoge

みたいなコードを書いて叱られたということだろう

>>700
requireはファイルの先頭に固めて書いてねってこと
703デフォルトの名無しさん:2011/06/03(金) 02:04:15.21
nkf.NKF.hogehoge
みたいな書き方はできませんか?
requireめんどいです。
704デフォルトの名無しさん:2011/06/03(金) 02:06:50.20
また叱られるだけだよ
705デフォルトの名無しさん:2011/06/03(金) 08:27:43.81
いくつかの試行錯誤を経て、ユーザーが最初に読み込むファイルのはじめのほうに
まとめて人力でrequireを書いとくのがいちばんマシという結論に至ってる

まー、面倒かそうでないかで言えば、まあ、めんどいw
最初の1回だけなんだけどね
706デフォルトの名無しさん:2011/06/03(金) 08:54:12.33
irb併用でなんとかしてたり
707福盛俊明:2011/06/03(金) 09:10:40.93
23 名前:福盛俊明 :2011/06/02(木) 23:51:15.53
俺はDarkBASICの天才♪”
俺に答えられない質問はない

質問はこちらへ
http://www.geocities.jp/courant_de_console/main_street/index.html

アハアハ〜♪”
708デフォルトの名無しさん:2011/06/03(金) 13:12:19.90
>>702
おお、env厨は氏ね今すぐ今すぐにだ
709デフォルトの名無しさん:2011/06/03(金) 13:29:28.35
#!ruby -Ku
とか書いてる(1.8の場合)

もちろんこのままでは実行できないが、ぶっちゃけスクリプトの中身読まずに
いきなり実行権限つけて ./hello.rb とかするほうが一方的に絶対的に悪・即・斬

お使いの環境に合わせて書き替えてご利用ください
っていうか ruby hello.rb でいいじゃん問題起きないよ普通
710デフォルトの名無しさん:2011/06/03(金) 13:34:35.48
envってなに?
711デフォルトの名無しさん:2011/06/03(金) 13:36:57.28
>>709
1.9前提のコードには #!/opt/local/bin/ruby1.9 とか書いてるよ俺は
712デフォルトの名無しさん:2011/06/03(金) 13:42:05.03
>>710
スクリプト言語全体に言えることだが、インタプリタのパスは環境によって違う
んでenvというコマンドは、その環境で設定されたパスを前提に引数に書かれたコマンドを実行する

…のだが、そもそもenv自体のパスが微妙に違う環境があったり
rubyのほうのコマンド引数の解釈に問題が出たりするから
素直にテキトーなパス書いて各自で書き換えるほうが実は面倒が少なかったりもする、という話
713デフォルトの名無しさん:2011/06/03(金) 13:51:06.17
そのための-xオプションがrubyにあるので、
先頭行は/bin/shにするという技を使ってる。
714デフォルトの名無しさん:2011/06/03(金) 13:58:30.98
>>713
Emacs は1行目を読んで、そのファイルが何のファイルかを決定しています
#!/bin/sh と書いてあったなら、sh-mode で編集を開始してしまいます
配布する際は 2行目に # -*- ruby -*- と書いておいてくださいね
715 忍法帖【Lv=4,xxxP】 【東電 78.4 %】 :2011/06/03(金) 14:31:52.37
そんな個々のエディタの為に配慮してたら切りがないなw

java helloと比べると./hello.rbは楽でいいけどねえ。

xemacsのsumoみたいにrequire-sumoとか、require '*'でとりあえず全部読めって出来ても最近のスペックなら問題無い気もする。
javaでもimport java.*で楽する傾向だしw
716デフォルトの名無しさん:2011/06/03(金) 14:45:43.84
>>709
実行する前にソース読め主義が高じるとgemだのaptだのすら使えなくなるわけで。

利便性の拡大のために一部に決めを作ろうってのは
よくある話だし仕方ないだろうさ。
717デフォルトの名無しさん:2011/06/03(金) 14:56:34.00
さすがにEmacsでどうとかまでは配慮する気にならない
718デフォルトの名無しさん:2011/06/03(金) 15:01:03.86
>>717
fileコマンドでPOSIX shell script text executableだと判断されるのはあまりいいことではない
いや、まあ、起動されるもの的には間違ってはいないんだが…
719デフォルトの名無しさん:2011/06/03(金) 15:05:36.81
>>716
envの問題は
「これで利便性があがったと思ってるのは書いた本人だけで、全体的には利便性も可搬性も下がってる」
「ぶっちゃけ配布後にインストーラや人力で書き変えたほうが早い」
ということだと思う
ruby -Ku とかが動作しそうで実は動作しないってのはよろしくないわ
720デフォルトの名無しさん:2011/06/03(金) 15:07:33.80
「env使えねー」というのは共通認識だと思ってたので、いまだに固執する人がいるのは驚き
721デフォルトの名無しさん:2011/06/03(金) 15:08:25.67
>> 10.times.inject(['A']){|r,i|r << r.last.succ}
=> ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K"]

これより良い書き方有るかいな?
722デフォルトの名無しさん:2011/06/03(金) 15:11:58.61
>>721
('A'..'K').to_a
723デフォルトの名無しさん:2011/06/03(金) 15:16:39.56
>>721は「'A'とそのあとの10個」だけど、>>722は「'A'から'K'」で微妙に意味合いが違うかも。
アルファベットなら並びが分かってるから大差ないけど。
724デフォルトの名無しさん:2011/06/03(金) 15:16:48.41
'A'
725デフォルトの名無しさん:2011/06/03(金) 15:17:35.93
10回succした結果(リテラルではない)との配列が欲しいんだよね
それでいいんじゃないかな
726デフォルトの名無しさん:2011/06/03(金) 15:29:07.86
envとか環境変数に依存するのもどうかなと思うけどね。
作る側の手抜きにすぎない。
727デフォルトの名無しさん:2011/06/03(金) 15:34:57.37
手抜きではない
もともと過剰に手厚くユーザーサービスするようにはシステムができてないんだから無理無茶するなさせるな、が正確

たとえばrubygemsだと「Rubyスクリプトを実行するシェルスクリプト(またはバッチファイル)」を作成してくれる
ユーザーに親切にしたいならこういうビッグウェイィィブに乗るべきだろう
728デフォルトの名無しさん:2011/06/03(金) 15:42:32.10
>>719
ああ、先のレスは「ぶっちゃけ〜」以降のくだりへのレスな。
envがNGという話に異論はないよ。

まあ、インストーラで自動設定としてその場合の決めを作るとか、
ruby起動時に与えるオプションを起動後にも設定できるようにして
コマンド起動時には
ruby xxx.rb arg1 arg2
とかで済むようにするとかかなあ。

今だとソースの文字コードが起動時にしか設定出来ないんだっけか。
729デフォルトの名無しさん:2011/06/03(金) 16:02:34.83
シェルが頑張ることであって、スクリプト作者がどうこうすることじゃないよね
このファイルはrubyに-Kuオプションつきで渡してください、ということを指示できないとしたら、
そりゃ単にシェルの実行システムが悪いんだよ

たとえばWindowsではこの問題は発生しない
エクスプローラが問答無用で、スクリプト実行以前にrbファイルに関連付けが設定されていたruby.exeに渡すからだ

まー、現状どうしようもないですというのが答えではある
730デフォルトの名無しさん:2011/06/03(金) 16:07:22.10
>>729
Linuxのファイルマネージャでも似たようなことはできるよ
その場合はshebangがシェルによって解釈されることはない
rubyだけが読む

ターミナルからでも ruby -Ku foo.rb とかすればいいだけだし、
実行ビット立ててコマンドとして実行するというかなり限定された状況でのみの問題な気がする
731デフォルトの名無しさん:2011/06/03(金) 16:13:44.47
'A'..∞ が簡単に書ければ
('A'..∞).take(10) とかできるだろうけど

def infinite_loop(n=0)
return enum_for(__method__,n) unless block_given?
loop do
yield n
n = n.succ
end
end
p infinite_loop('A').take(10) # => ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"]

むむむ >>721に比べて一個少ないな
初期値+10個 と 全部で10個の違いか
732デフォルトの名無しさん:2011/06/03(金) 16:16:27.73
「一発実行」用のシェルスクリプトやバッチファイルを含めて配布してる人は時々見る
たぶん、このへんの問題に翻弄された経験のある人なんだろう
Rubyスクリプトファイルひとつだけで対処できるような話じゃないって実感があるんだろう

てことで、次の方どうぞ
733デフォルトの名無しさん:2011/06/03(金) 16:22:17.04
>>731
succに引数が設定できれば一発なんだよ

irb> class String; alias succ_orig succ; def succ(i=1); x = self; i.times{ x = x.succ_orig}; x; end; end
irb> p "A".succ
"B"
irb> p "A".succ(2)
"C"
irb> p "A".succ(10)
"K"
irb> p ('A'..'A'.succ(10)).to_a
["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K"]
734デフォルトの名無しさん:2011/06/03(金) 16:32:54.62
>>733
設定できればというか、succ メソッドは任意なので、したければ御自由にって感じではある
引数なしの succ さえ妥当に動作すれば文句は出ないだろう
今度 succ を定義する機会があったら引数取れるようにしてみようかな

でも ('A'..('A'[0]+10).chr) とか succ の内容見越して書いたほうが早かったり
735デフォルトの名無しさん:2011/06/03(金) 17:04:24.59
shellなら単にalias ruby !/usr/bin/ruby -kuしとけばいいだけだな。
httpのContent-Type: text/html;charset=utf-8指定ぐらい乱暴だけど。
736デフォルトの名無しさん:2011/06/03(金) 17:12:17.15
>>735
自分で作ったスクリプトを自分の環境で実行するときの話じゃないんよ
自分で作ったスクリプトを他人の環境で実行させるときのお話
737デフォルトの名無しさん:2011/06/03(金) 17:14:59.82
Rubyでカラーダイアログを表示するサンプルコードを掲載されてるサイトってありませんか?
738デフォルトの名無しさん:2011/06/03(金) 17:43:05.89
日本語環境でしか動作しない.appを配布しておいて今更w
739デフォルトの名無しさん:2011/06/03(金) 20:33:52.77
>>721
11B
[*'A'..'K']
740デフォルトの名無しさん:2011/06/03(金) 22:20:30.69
Rubyはけっこうゴルファーに使われてると聞いたが
どうやら本当らしいな
741デフォルトの名無しさん:2011/06/04(土) 03:01:02.73
module A
class B < ::C
という記述を見たことがあるんですが、このスーパークラスCはどこにいるんでしょうか?
742デフォルトの名無しさん:2011/06/04(土) 05:44:28.26
>>741
左辺なしの :: はトップレベルを明示する書き方なので
恐らくトップレベルで定義されてる
743741:2011/06/04(土) 22:06:20.14
>>742
助かりました
ありがとうございます
744デフォルトの名無しさん:2011/06/05(日) 02:49:17.81
eclipse3.42でruby1.87を使っているのですが、
プログラムを書き実行をするとき、ファイルごとに一つづつ、実行の構成から
ファイルを選択しないとコンソールに表示されません。
JAVAをつかっていたときはF11キーを押すだけで選択して開いてるファイルを簡単に実行できたきがするのですが、
rubyの場合はどこの設定をいじれば、開いて選択されているファイルを簡単に実行できるでしょうか?
よろしくお願いします。
745デフォルトの名無しさん:2011/06/05(日) 02:56:38.35
http://hibari.2ch.net/test/read.cgi/tech/1295886572/
Eclipse統合M31【Java/C++/Ruby/Python/Perl】
http://hibari.2ch.net/test/read.cgi/tech/1238911707/
【日本語不自由】Eclipse Pleiades プラグイン
http://hibari.2ch.net/test/read.cgi/tech/1292073293/
emacsでeclipseと同等の開発環境は作れるのか?
746デフォルトの名無しさん:2011/06/05(日) 03:06:10.43
スレ違いでした、すいません。
747デフォルトの名無しさん:2011/06/05(日) 12:04:30.92
みんながエクリプスは使ってないだろう。
748デフォルトの名無しさん:2011/06/05(日) 12:39:16.57
スクリプト言語はIDE使ったことないから分かりません
749デフォルトの名無しさん:2011/06/05(日) 13:23:04.20
ネットを巡回していると、下記のようなサンプルを載せてくれてる方がいました。
ですが、3つ目がfalseになる理由がわかりません。
1つ目も3つ目もStringだと思うのですが、何故結果が違うのでしょうか。

irb(main):009:0> String.respond_to?(:class_eval)
true
irb(main):011:0> Enumerable.respond_to?(:module_eval)
true
irb(main):012:0> 'xxx'.respond_to?(:class_eval)
false
750デフォルトの名無しさん:2011/06/05(日) 13:32:25.35
>>749
1つめは「Stringクラス」というクラスそのものに対してclass_evalというメソッドを持っているかとたずねている。

対して、'xxx'はStringクラスそのものではなくて、Stringクラスのインスタンス。
クラスではなくて単なる一介のオブジェクトにすぎない。

クラスじゃない単なるのオブジェクトなので当然class_evalなんていうメソッドは持っていない。
751デフォルトの名無しさん:2011/06/05(日) 23:23:24.26
RubyはみなさんどんなIDEつかっていますか?
752デフォルトの名無しさん:2011/06/05(日) 23:47:02.42
秀丸(試用)
753デフォルトの名無しさん:2011/06/06(月) 00:24:03.46
Geany
754デフォルトの名無しさん:2011/06/06(月) 00:49:53.48
Rubyはどうやって勉強していますか?
755デフォルトの名無しさん:2011/06/06(月) 01:12:13.53
>>750
emacs。

でも、それなりのボリュームがあるソースを読んでるとき、
自分がどのModuleやClassの定義を読んでるかわからなくなるときがあるんですよね。
1ファイル1クラスならいいんですが...
756デフォルトの名無しさん:2011/06/06(月) 01:30:30.76
>>751
NetBeans

>>754
最初のとっかかりは書籍
あとはリファレンスとWeb上の記事などで独学
757デフォルトの名無しさん:2011/06/06(月) 03:46:34.02
2年やったjava挫折して、楽しいRubyという本を買ってきて勉強してますが
javaより手応えを感じています。
758デフォルトの名無しさん:2011/06/06(月) 04:11:21.73
Javaで挫折するならプログラムなんて止めた方が良い。
http://local.joelonsoftware.com/mediawiki/index.php/Java%E3%82%B9%E3%82%AF%E3%83%BC%E3%83%AB%E3%81%AE%E5%8D%B1%E9%99%BA
759デフォルトの名無しさん:2011/06/06(月) 05:00:08.44
別に誰が何やろうがお前に関係ないだろ
760757:2011/06/06(月) 06:02:33.75
>>758
頭の悪い自分のだめさにいやになっていますが、言い訳はできないので、
できることをやるのみです。Rubyでは絶対挫折したくない。
761デフォルトの名無しさん:2011/06/06(月) 06:26:18.23
どちらもクラスとオブジェクトの概念が理解できずに終わるかもな。
c言語のポインタとかアセンブラとか回り道してでもしっかり理解を深めたほうが確実かもね。
762デフォルトの名無しさん:2011/06/06(月) 06:43:38.02
C言語のポインタが理解しづらいのは、は概念が難しいんじゃなくて、書き方が紛らわしいせい。
763デフォルトの名無しさん:2011/06/06(月) 07:39:39.21
>>760
Rubyと比べるとJavaの方が「本質的でない難しさ」が多いので
挫折したことはあんまり気にしない方が良いし
Javaで挫折してRubyなら何とかなるというのは、特に変なことでもない

Rubyを習得できるなら、プログラムの資質にはそんなに問題ないと思う
764デフォルトの名無しさん:2011/06/06(月) 08:33:19.54
>>761
Cのポインタ(正確には、ポインタのポインタの演算)を理解できるかどうかと、
オブジェクト指向の個々の実装を理解できるかどうかには直接の関連はない
765デフォルトの名無しさん:2011/06/06(月) 09:06:13.09
761って別にポインタの理解とオブジェクト指向の理解を関係あるとは書いてないだろ。
どういう読解力だよ(笑)
766デフォルトの名無しさん:2011/06/06(月) 11:09:50.76
>>761>>764
のやりとりを見て「どういう読解力だよ」とか言っちゃう奴がどういう読解力だよ、と思いました。
767デフォルトの名無しさん:2011/06/06(月) 12:06:43.63
配列のうしろに要素をn個追加する処理は、どう書くのがスマートですか。
今は
n.times { arr << nil }
としてるんですが、これだと「n回追加する」処理になっているので、
「n個追加する」処理が書けるのならそちらを使いたいと思っています。
768デフォルトの名無しさん:2011/06/06(月) 12:22:31.09
>>767
ary.concat(Array.new(n, obj))
とか
ary.push(obj, obj, obj)
とか
ary.fill(obj, ary.size, n)
とか

まあnilだったらary[ary.size + n - 1] = nilとかやるだけで全部nil入るけど
769デフォルトの名無しさん:2011/06/06(月) 13:47:33.30
ポインタなんて実際のcpuでは多用されてる動作じゃん。
土台の知識も無いのに上位概念だけ勉強しても雲の上状態で理解が進まないと思うけどな。
流れる雲の様にふわふわした人生送って来たpgが多いの?
770デフォルトの名無しさん:2011/06/06(月) 13:55:11.91
>>767
arr += [nil] * 5
771デフォルトの名無しさん:2011/06/06(月) 13:55:34.77
>>769
お使いのPCに搭載されているCPUの知識はございますか?
772デフォルトの名無しさん:2011/06/06(月) 13:56:03.17
はいはい、CPUを自分で作ってどういう仕組みになってるか知らないとアセンブラも使えないね。
773デフォルトの名無しさん:2011/06/06(月) 13:58:05.47
こういうときにCPU命令ばかり話題になって半導体メモリの動作についてが蔑ろにされているのはIntelの陰謀だと思ってる
同じくらい重要なはずなのに
774デフォルトの名無しさん:2011/06/06(月) 13:58:54.72
>>770
配列や文字列の+=いくない。

ary.push(*[nil]*5)
775デフォルトの名無しさん:2011/06/06(月) 14:12:23.18
>土台の知識も無いのに上位概念だけ勉強しても雲の上状態で理解が進まないと思うけどな。
CPUの半導体の仕組みまで知らなくてもプログラムできるのと一緒。
土台の知識が必要なケースはまれ
776デフォルトの名無しさん:2011/06/06(月) 14:13:24.77
Rubyやってる時点でCPUの話なんてどうでもいいよ
Cとかアセンブラやってるわけでもないし
777デフォルトの名無しさん:2011/06/06(月) 14:17:57.77
C言語あたりからすでにCPUの仕組みはどうでもいい。

Rubyならポインタの話もどうでもいい。
778デフォルトの名無しさん:2011/06/06(月) 14:20:34.00
ていうか
>ポインタなんて実際のcpuでは多用されてる動作じゃん。
という時点でどうにもならない
あんな抽象化されたものを見てCPU動作語られてもマジ困る
779デフォルトの名無しさん:2011/06/06(月) 14:24:40.76
プログラムを勉強するときはマシン語からってことで。
780デフォルトの名無しさん:2011/06/06(月) 14:28:53.06
C:\wwwをドキュメントルートにしてHTTPサーバを立ち上げたいのですが
コマンドプロンプトが固まってしまう動きません

require 'webrick'
srv = WEBrick::HTTPServer.new({
:DocumentRoot => 'C:/www',
:BindAddress => '127.0.0.1',
:Port => 9876})
srv.start

コードは間違ってますか?
781デフォルトの名無しさん:2011/06/06(月) 14:34:24.83
>>780
http://127.0.0.1:9876/ にWebブラウザでアクセスしてサーバに反応があれば動いてる
入力を受けつけないだけで、固まっているわけではない
782デフォルトの名無しさん:2011/06/06(月) 14:35:03.20
そのコードだとコマンドプロンプトはそのまま。ブラウザからのアクセスは出来るでしょ?
バックグラウンドで動いて欲しいならデーモン化したりWindowsサービス化したり
する必要があるんだろうけどWindowsの場合のことはよくわからんのでパス。
783デフォルトの名無しさん:2011/06/06(月) 14:43:16.02
>>780
コマンドプロンプトが固まってしまうってどういう状態で?

[2011-06-06 14:37:56] INFO WEBrick ...
[2011-06-06 14:37:56] INFO ruby ...
[2011-06-06 14:37:56] INFO WEBrick::HTTPServer#start: ...

こういう感じの状態で固まるなら正常だよ。ブラウザから
http://127.0.1:9876/filename.ext
みたいにしてアクセスしてみそ。
C:/www/filename.ext
にアクセスできるから。
784デフォルトの名無しさん:2011/06/06(月) 14:49:49.36
ブラウザでアクセスしたら動きました
午前中動かなかったのでOSを再インストールしたんですが無駄のようでしたね
785デフォルトの名無しさん:2011/06/06(月) 16:11:27.34
>>779
いっそVHDL/VerilogでCPUを合成してみるのがいいんでね?w
786デフォルトの名無しさん:2011/06/06(月) 16:17:53.59
普通にフリップフロップと組み合わせ回路を理解してから合成言語に手を出すべき
787デフォルトの名無しさん:2011/06/06(月) 16:25:13.17
もう許してあげて〜
788デフォルトの名無しさん:2011/06/06(月) 16:26:29.29
>>787
Macから書き込み?
789787:2011/06/06(月) 18:09:31.39
Linuxからだけど、「〜」は文字化けしちゃうんだっけ?
ごめんね
790デフォルトの名無しさん:2011/06/06(月) 18:33:56.78
Windowsでは~が普通
これのつもりで>>787のように〜を書き込むと不自然に映る
791デフォルトの名無しさん:2011/06/06(月) 18:58:18.48
いわゆる波線としてはWAVE DASH 〜 のほうが正しいんだけどね
FULLWIDTH TILDE 〜 を変形ダッシュの用法で使用してたことが本来おかしい
792デフォルトの名無しさん:2011/06/06(月) 18:59:27.98
別にWindowsでも文字化けしないからどうでもいい
793デフォルトの名無しさん:2011/06/06(月) 19:02:25.12
あれ、両方とも全角チルダになってる



まあいいや
使ってる日本語入力ソフトでどっちが出るのかはチェックしてたほうがいいよ
次の方どうぞ
794デフォルトの名無しさん:2011/06/06(月) 19:04:25.95
>>792
残念ながら、これはそういうレベルの問題ではない
Rubyでの文字エンコーディング変換エラーの50%くらいはこれが原因
795デフォルトの名無しさん:2011/06/06(月) 19:06:44.89
それはまたエディタとかの問題だ
796デフォルトの名無しさん:2011/06/06(月) 19:14:34.36
は?
797デフォルトの名無しさん:2011/06/06(月) 19:20:39.62
〜 こっちはWindowsでも問題ないはず。
〜 こっちはWindowsだと表示が変かも。
798デフォルトの名無しさん:2011/06/06(月) 19:22:52.97
5割もいかない
799デフォルトの名無しさん:2011/06/06(月) 19:27:08.20
1度もない
800デフォルトの名無しさん:2011/06/06(月) 19:28:09.13
>>797
どっちも普通
801デフォルトの名無しさん:2011/06/06(月) 19:31:42.54
>>797
どっちも同じ表示なんだけど
802デフォルトの名無しさん:2011/06/06(月) 19:39:33.94
>>797
それはどちらも"~"
問題になるのは"〜"
803デフォルトの名無しさん:2011/06/06(月) 19:44:43.33
マカってホント情報弱者だな。
804デフォルトの名無しさん:2011/06/06(月) 19:50:47.43
>>803
まあ、学校はきちんと行っておけという話だな
805デフォルトの名無しさん:2011/06/06(月) 20:56:04.00
ここの人の最終学歴は大卒の人多いですか?
自分は高卒です。
806デフォルトの名無しさん:2011/06/06(月) 20:56:23.31
これで両方同じになってたら、投稿時にバチスカが変換してるな…
〜 FULLWIDTH_TILDE のハズ
〜 WAVE_DASH のハズ
807デフォルトの名無しさん:2011/06/06(月) 21:00:53.10
両方2ちゃんから返ってくるのはWindows-31Jの 0x8160 (FULLWIDTH TILDE)か。
808デフォルトの名無しさん:2011/06/07(火) 01:04:06.20
おまえらって、ほんとバカ
809デフォルトの名無しさん:2011/06/07(火) 02:18:03.56
俺から見ると>>787>>789>>790>>802は波ダッシュが表示されてる
810デフォルトの名無しさん:2011/06/07(火) 06:46:48.67
なぜ文字コードはまともに統一できないのか。
統一しようとしているUTF-8ですらウンコという…。
少なくともUTF-8の次に統一する文字コード決めといてくれ。
811デフォルトの名無しさん:2011/06/07(火) 08:06:04.61
>>810
UTF-8でいちおうの統一の方向性は打ち出されてはいるよ

UTF-8規格自体が引き起こす問題というのもあるんだけど、
実際は世界各地で実装した人が間違えた、または勝手に解釈した結果の実装バグが多い
812デフォルトの名無しさん:2011/06/07(火) 08:50:21.94
表だってはいわないけど、アルファベット圏のOSS開発者とかではなんで俺たちが漢字コードとか
めんどくせえことに付き合わなきゃなんねえんだよ、と不満に思っている人はいるよね。
MLとかでたまにでてくるけど。
813デフォルトの名無しさん:2011/06/07(火) 09:09:06.47
>>812
C++のBoost.Localeでも英語メッセージが存在する前提での
メッセージカタログが標準になっちゃって悲惨なことになったらしいしなあ
814デフォルトの名無しさん:2011/06/07(火) 11:32:39.45
RubyでHTMLの整形で有名なライブラリって何ですか?
また、Rubyに限らずHTML整形ライブラリでメジャーなものってありますか?
815デフォルトの名無しさん:2011/06/07(火) 11:55:36.65
「整形」の趣旨によるけどTidyとかそういう話なのかな
816デフォルトの名無しさん:2011/06/07(火) 13:30:23.80
本家が出してるtidyが一番いいみたいですね
ありがとうございます
817デフォルトの名無しさん:2011/06/07(火) 14:10:20.97
cygwinでrubyを入れようと思い、
ttp://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=Ruby+Install+Guide%3A%3AUNIX%C1%B4%C8%CC
ここを見ながらインストールを進めていたのですが、./configureの所で
bash: .configure: No such file or directory
と出てきてしまいます
上記のエラーメッセージでぐぐったら、そもそも./configureが必要ないという話が出てきたので、./configure無しでmakeしようとしたら
no targets spesified and no makefile found
と出てきて、これでググるとmakefileがない場合のエラーのようです
で、そもそもconfigureっていうのがなんなのかググッてみたら、makefileを作る命令のようなので、no targets〜が出るってことはこれをする必要があると思うのですが、
どうすればいいでしょうか
818デフォルトの名無しさん:2011/06/07(火) 14:26:07.90
実際、asciiでも困ってないだろう。
utf8に文句出すくらいならちゃんと英語の議論に参加してこいよって言われると思う。
国際会議ってそういうものだし。出席しない香具師は欠席裁判されて不利に成るだけ。
tppも先行合意している国同士でどんどん合意事項決まってるから、あとから参加予定の日本はそれに合意して参加するか参加しないかの行動しかない。
あとから蒸し返して日本の為に合意内容の変更なんて行動はまず認められない。
819デフォルトの名無しさん:2011/06/07(火) 14:39:30.95
>>818
極東板にお帰りください
820デフォルトの名無しさん:2011/06/07(火) 14:40:07.43
>>818
勝手に決められたものもあるという理解は必要
821デフォルトの名無しさん:2011/06/07(火) 14:42:11.43
>>817
cygwinはRubyをインストールするためのものじゃない
cygwinの深い知識がないなら使うのやめとけ
822デフォルトの名無しさん:2011/06/07(火) 14:48:07.48
まあ、日本だけでなくアラブ圏とかインドとか中国とか韓国とかの
「ASCIIのみじゃ困る人達」が今後多数派になっていくので、その点はあまり心配しなくていいよね。

あとunicodeは割と簡単に申請したり議論に参加したり出来るというか、
文字集合に旧カナ追加する提案したのは個人だし、
絵文字追加の議論での問題点をとりまとめて収拾したのは
さらに別の個人だったりするし。
823デフォルトの名無しさん:2011/06/07(火) 14:53:03.28
>>817
1.8.7のpachlevelが古いやつならsetup.exeで入れられる
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin]

rvmを使って1.9.2p180を入れることもできるけどあまり勧めない
824デフォルトの名無しさん:2011/06/07(火) 14:54:42.18
そういやせっかくまとまりかけてたタイミングで韓国が俺のところの漢字もいれろ、とか言い出して
大混乱じゃなかったけ? ユニコードって。

自分の名前も漢字で書けない奴ばっかりのクセに。
825デフォルトの名無しさん:2011/06/07(火) 14:56:24.13
それ以前に韓国独自の漢字(韓字?)ってあるの?
826デフォルトの名無しさん:2011/06/07(火) 15:26:46.88
>>820
最初のUnicodeは思いっきり勝手に決まったからな
世の中そんなもんだ
俺らが日本語以外のマルチバイトをわざわざ公募して考慮しないのと同じ
827デフォルトの名無しさん:2011/06/07(火) 15:35:57.45
>>824
それ、Han unificationの件をねじ曲げて覚えてないか?

旧カナの例のように、利用頻度が少なくても
必要性の説明がちゃんと出来るなら入るよ。
828デフォルトの名無しさん:2011/06/07(火) 21:45:03.86
そもそも日本独自の漢字自体、輸入元の支那様にしてみれば漢字じゃねえよ!ってご立腹かもなw

初期の頃は日本国内ではユニコードに注目もしてなかったというより、jis/sjis/eucjで恒例の内輪主権争いしてたくらいだし。
そこはメールをjisに統一したワイドの人たちも海外の動向に食い込めてなかった。
829デフォルトの名無しさん:2011/06/07(火) 21:58:05.28
世界中の文字を16bitの領域にマッピングしようぜ
そんなアホな規格に賛同するわけないじゃん

もちろん間もなく破綻して汚い拡張仕様を策定
ついでに古ハングル5000文字だっけ? を追加してハングルは別領域に移動、
以前のバージョンとの互換性? なにそれ美味しいの?

素性が悪すぎるんだよ
とはいっても、現在じゃしっかり標準に

それはさておき、正規表現で文字コードを指定する“s”などのオプションは
1.9以降でほとんど意味がなくなった気がする
文字列がエンコード情報を持ち、厳密に区別する仕様だと2chのログのように
Windows-31J(CP932)と各社携帯絵文字が混在する超いいかげんなテキストの
処理で困る
830デフォルトの名無しさん:2011/06/07(火) 22:53:21.40
文字コード問題早わかり 4 ユニコード篇
ttp://www.horagai.com/www/moji/code4.htm
831デフォルトの名無しさん:2011/06/08(水) 00:32:29.04
俺も初めてUnicodeを知ったときはこれほど普及するとは思わなかったわ
Javaが出てきたときもそうだったな
832デフォルトの名無しさん:2011/06/08(水) 00:41:43.32
>>828
>そもそも日本独自の漢字自体、輸入元の支那様にしてみれば漢字じゃねえよ!ってご立腹かもなw

つーても輸入元は輸入元で、簡略化させまくってどうなのよって状態だけどな
その言葉が言えるのは未だに繁体字使ってる台湾とか、中国の一部だけだと思う
833デフォルトの名無しさん:2011/06/08(水) 00:53:31.19
Javaは最初確かに最初おもちゃみたいだったな。ブラウザ上でちょっとアプレット動かして
おしまいみたいな。

まだそのころの偏見というか、イメージが残っちゃってる。
834615:2011/06/08(水) 01:11:57.71
楽しいRuby読み終わってHTTPスクレイピング始めてみました
1.9.2→1.8.7→1.9.2と結局1.9.2で頑張ってみることにしました
文字コードの扱いムズカシす・・・

# encoding UTF-8
$stdout.set_encoding(Encoding::Windows_31J, Encoding::UTF_8)
require 'rubygems'
require 'open-uri'
require 'nokogiri'

doc = Nokogiri::HTML(open(
"http://table.yahoo.co.jp/t?c=2011&a=2&b=28&f=2011&d=6&e=1&g=d&s=1554&y=0&z=8471&x=sb"),nil,"UTF-8")
p doc.class
doc.css("td").each do |td|
puts td.text
end
835615:2011/06/08(水) 01:13:34.10
ほとんど本のサンプル通りにやってみたんですが
どうも文字コードの扱いがおかしいようです・・・

docからtd部分だけ取り出して表示するってやってるつもりなんですが
文字コードのところでエラーが出てるみたいです

色んなサイトめぐって調べてみたんですがちょっと分からなくて
すいませんがお願いします
836デフォルトの名無しさん:2011/06/08(水) 02:25:54.30
前にEUC-JPだって言われてるじゃん
837615:2011/06/08(水) 03:57:35.22
>>836
それも試したつもりだったんですが、今もっかいやってみたら出来てしまった
なぜだ・・・
ほんと申し訳ありません・・・。ありがとうございます
838デフォルトの名無しさん:2011/06/08(水) 05:30:21.80
>>834
ひとつ
# coding:utf-8

もうひとつ
$stdout.set_encoding(Encoding::Windows_31J, Encoding::UTF_8)
はバグの元なのでスクリプト完成前に使用してはいけない
839デフォルトの名無しさん:2011/06/08(水) 07:18:27.34
ホラ害とか他に何もなかった頃ならともかく今更参考にすんなw
840デフォルトの名無しさん:2011/06/08(水) 08:12:58.08
そういうときは代わりにここをみろぐらい書くもんだ。
841デフォルトの名無しさん:2011/06/08(水) 10:28:28.03
>>838
>バグの元なのでスクリプト完成前に使用してはいけない
望まれた新機能のハズなのに皮肉なもんじゃのう
まあ、機能的であることと初心者向けであることは同一じゃないか
842デフォルトの名無しさん:2011/06/08(水) 10:39:56.89
入門者は敢えて機能を絞り込んだほうが理解しやすい。
何でも出来る機能充実だと、どうすればいいのか分からなく成るのが入門者。
843デフォルトの名無しさん:2011/06/08(水) 11:34:49.34
標準的な名前のライブラリを作ってしまいそうな場合、どう逃げるのがいいのでしょうか?
例えばですが、2ちゃんねるのスレッドを取り扱うthread.rbを書いた場合、
$:の検索順位的には全く別物の標準ライブラリであるthread.rbを読み込んでしまいます。
844デフォルトの名無しさん:2011/06/08(水) 11:38:44.16
>>843
Ch2::Thread とモジュールネストして ch2/thread.rb とディレクトリ掘って ch2.rb には require 'ch2/thread' と書く
これなら require 'ch2' でうまく動く

トップレベルのモジュールを作るのは必須に近い
それすら被ることも、まあ。gem間ではあるんだが
845デフォルトの名無しさん:2011/06/08(水) 11:39:35.32
>>843
名前の頭か終わりに何かつけるとか、クラスをネストさせて下位フォルダに置くとか。
846843:2011/06/08(水) 11:44:33.77
>>844-845
requireで階層構造を書けると知りませんでした。
ありがとうございます。
847615:2011/06/08(水) 21:02:40.15
>>838
ありがとございます。大変参考になりました
また、つまったら質問に来たいと思うのでお願いします
848615:2011/06/09(木) 00:59:14.73
とりあえずデータ部分だけを取り出して、
2次元配列に格納するところまですすめました

この配列データをcsv形式か何かで保存したいのですが
どういった感じですればよいのでしょうか?

require 'csv'してやるっぽいのですがよく分からなくて・・・
849615:2011/06/09(木) 01:07:58.29
とりあえず作ったものです。あんまりおかしい所があればご指摘お願いします
# coding UTF-8
require 'rubygems'
require 'open-uri'
require 'nokogiri'
require 'kconv'

# データ格納用の2次元配列の初期化
height = 50
width = 6
stockdata = Array.new( height, nil ) # 各要素は、とりあえずnilで初期化.
stockdata.length.times{ |y| # 要素の数だけ..
stockdata[y] = Array.new( width, 0 ) # 各要素について、new.
}
850615:2011/06/09(木) 01:09:10.27
# ループ内の数え上げ変数
roop_count=0
i=0
j=0

doc = Nokogiri::HTML(open(
"http://table.yahoo.co.jp/t?c=2011&a=2&b=28&f=2011&d=6&e=1&g=d&s=1554&y=0&z=8471&x=sb"),nil,"EUC-JP")
doc.css("small").each do |small|
doc_text=small.text

if /分割による/=~doc_text #株価データ部分が終わればループを終わる
break
end

unless /\d+/=~doc_text #文頭からの数値以外の部分は読まない
next
end


#株価データを二次元配列stockdata[i][j]に格納
#行データiはループカウントの商jはるーぷカウントの余りにあたる
i=roop_count.div(7)
j=roop_count.modulo(7)
stockdata[i][j]=doc_text
puts "stockdata[#{i}][#{j}]=#{stockdata[i][j]},roop_count=#{roop_count}".tosjis

roop_count+=1
end

あと、あんまりこうやってコードずらっと書かない方がいいですよね・・・
どうしたらいいんでしょう・・・
851デフォルトの名無しさん:2011/06/09(木) 01:14:02.56
テンプレないな
ttp://ideone.com/
852デフォルトの名無しさん:2011/06/09(木) 01:19:46.71
require 'csv'したあとは、 CSV.openのブロックの中で1行分ずつデータを<<で流し込む。
http://www.ruby-doc.org/stdlib/libdoc/csv/rdoc/classes/CSV.html
Writing
To a File
のあたり。

コード貼るならgist.github.comでも使えばいいんじゃない? 色付けもされるし。

853デフォルトの名無しさん:2011/06/09(木) 06:51:00.83
というか、コードを貼る必要なんかない
Stringオブジェクトを中間形式としてライブラリ間で遣り取りできるということがわかっていれば済むはず
AというライブラリからBというライブラリへデータを受け渡ししたい場合、
Bが受け付けるオブジェクトをAに書き出させるか、
Aが書き出せるオブジェクトからBが受け付けるオブジェクトに自力で変換すればいい
受け渡しに使われるオブジェクトはたいていStringかStringのHashかStringのArrayだ

コード書いてる最中になんの気なしにputsして値確かめたりするが、
puts可能ということはそれは文字列(にto_sすれば変換可能)ということで重要な示唆だったりする
「さっきまでputsしてた文字列を他のライブラリに渡して作業続行」みたいな考え方をよくする

それと、そのスクリプト書くのに参考にした解説はRuby的に役に立たないので今すぐ燃やして捨てろ
854デフォルトの名無しさん:2011/06/09(木) 06:54:59.42
アメブロの画像を一括ダウンロードする ruby スクリプト
というのを使いたいのですが、プログラミングには殆ど縁がなく
導入の仕方がわかりません。(C言語をコンパイルして実行くらいならあります
おおまかにでもいいので教えてください。お願いします。

http://d.hatena.ne.jp/kenkitii/20081223/p1
855デフォルトの名無しさん:2011/06/09(木) 07:26:52.87
>アメブロの画像を一括ダウンロードする ruby スクリプト
絶対教えてやんねー手作業でダウンロードしろやバーカバーカと過去の職業倫理が囁いておる
が、まあ、あのアメブロが損するだけなら別にいいか

Rubyスクリプトなので、Ruby実行環境のインストールが必要
mechanizeというgemライブラリが必要なので、そのインストールも必要
正規表現の関係上UTF-8でないと動作しないので、スクリプトはUTF-8で保存しておく

ていうかこのスクリプト、自動で止める方法がないんだけど
そのサイトに存在する全ページを取得するまで止まらない
1週間後に新しい画像を取得しようとしても、また全ページをページあたり3秒かけて取得する

他のプログラム使ったほうがよくないすかこれ
856デフォルトの名無しさん:2011/06/09(木) 07:35:44.85
>>855
今、Ruby192をインストールしました。(C:\Documents and Settings\user
rubygems-update-1.8.5.gemをダウンロードしました。(C:\Documents and Settings\user\Ruby192
ameblo_downloader.rbをダウンロードしました。(C:\Documents and Settings\user\Ruby192

コマンド開いたらC:\Documents and Settings\user>_ と出ます。

mechanizeのインストールコマンド教えてください。
857デフォルトの名無しさん:2011/06/09(木) 08:09:09.06
>>856
出来ました ありがあとうございました
858デフォルトの名無しさん:2011/06/09(木) 08:26:54.46
たのしいRubyは色々言われているが、「Rubyとしての書き方」を最初から行なっているので価値がある
Rubyの配列は自動で増えるもので初期化なんて必要ないし(どこの方言?)、
配列自身に枚挙させるものでループカウンタなんて使ったりしない(ていうかループカウンタって何?)

>>849
# coding:UTF-8
require 'open-uri'
require 'kconv'
require 'rubygems'
require 'nokogiri'

#html = open('kabuka.html','rb'){|f| f.read} # ネットにアクセスしないで済むテスト用
html = open("http://table.yahoo.co.jp/t?c=2011&a=2&b=28&f=2011&d=6&e=1&g=d&s=1554&y=0&z=8471&x=sb").read

data = []
doc = Nokogiri::HTML(html.toutf8)
# <table cellpadding="5">なテーブルの2番目(1要素目[1])から<tr>を探し、0要素目を飛ばした配列[1..-1]をeach
doc.search('table[cellpadding="5"]')[1].search('tr')[1..-1].each do |tr|
# <tr>の中にある<td>を探して、テキストだけにしてカンマを削除したものを配列にしてdataに追加
data << tr.search('td').map{|td| td.inner_text.gsub(/,/){''}}
end
# タブ区切りのようなもので保存
File.open('kabuka.tsv','wb'){|f| data.each{|line| f.puts line.join("\t")} }
# 読み込みテスト
require 'pp'
pp File.open('kabuka.tsv','rb').readlines.map{|line| line.chomp.split("\t")}
859デフォルトの名無しさん:2011/06/09(木) 09:37:24.46
てかCSVは読み込みや編集はともかく、
配列の配列を出力するだけならいちいちライブラリ使わないで
File.open('name.csv','w'){|f| f.write(arys.collect{|ary| ary.join(',')}.join("\n")}
とワンライナー書く方がはやそう。
860デフォルトの名無しさん:2011/06/09(木) 09:38:39.21
RDocを使ってソースにコメントを残そうと思っています。
ですが、文章をHTML化するときにどのようにすれば修飾できるかの情報はあるのですが、
「引数はこのように記載する」「戻り値はこのように記載する」といったガイドラインが見当たりません。
皆さんどのようにされてますでしょうか?
861デフォルトの名無しさん:2011/06/09(木) 09:53:53.07
>>860
あのねえ、それは数年来の検討課題なの
Rdoc以外だと、YARDというのがあって、以前はへぼかったんだけど最近はそれなりに見やすい

# Encodes a set of key/value pairs according to the rules for the
# <code>application/x-www-form-urlencoded</code> MIME type.
#
# @param [#to_hash, #to_ary] form_values
# The form values to encode.
#
# @param [TrueClass, FalseClass] sort
# Sort the key/value pairs prior to encoding.
# Defaults to <code>false</code>.
#
# @return [String]
# The encoded value.
def self.form_encode(form_values, sort=false)
...
みたいに、
「@param [引数クラス] 引数名 以下字下げで引数説明」
「@return [戻り値クラス] 以下字下げで戻り値説明」
と書くと、こんな感じのマニュアルになる
ttp://addressable.rubyforge.org/api/Addressable/URI.html#form_encode-class_method
862デフォルトの名無しさん:2011/06/09(木) 09:57:38.60
>>849
配列の配列を作って初期化したいならブロック使って
stockdata = Array.new(height){ Array.new(width, 0) }
とすれば一発で2次元で初期化できるお。
863デフォルトの名無しさん:2011/06/09(木) 09:58:05.42
ソースツリーの lib/*.rb を見るのがいいと思うんだけど、
これを見るといい、というのはちょっとわかんない。
864デフォルトの名無しさん:2011/06/09(木) 10:04:11.40
あ、#to_ary は #to_ary が動作すればなんでもいいってことね
read 可能なオブジェクトならなんでもいい場合は #read と書く
TrueClass と FalseClass はあんまりにも面倒でマニュアルも読みにくいので、細かいこと気にせず Boolean と書いてもいい

- (Boolean) hoge_exists?
  hoge があるかどうか返す

のように表示されてちょっとわかりやすげ
あんまりにもJavaっぽいという指摘は時々見るのだが、
読み書きがめんどくさ過ぎない引数解説マニュアルって結局あんな感じになるんじゃないのという観測が多勢

なお、多言語化は全く考慮されていない
日本語と英語を併記できてきちんと稼動するマニュアルシステムをRubyで見たことはまだ無い
865860:2011/06/09(木) 11:30:37.13
>>861
YARDいいですね。知りませんでしたが、使わせてもらおうと思います。

>>863
なるほど。

ありがとうございます。
866615:2011/06/09(木) 14:22:56.29
>>852 858 859 862
ありがとうございます。フルボッコで泣いたw
しかしこんなにシンプルなコードになるんですねぇ

これからがんばって勉強していきます
867デフォルトの名無しさん:2011/06/09(木) 14:32:32.73
このへんは「あなた」が考えたわけじゃないだろうし、あんまり気にするな
Rubyの教えられ方が悪かっただけだ
868デフォルトの名無しさん:2011/06/09(木) 15:11:49.69
matz 最高や

625 名前:デフォルトの名無しさん [sage]: 2011/06/09(木) 14:46:00.97
yukihiro_matz: 長女はありふれた名前に不満みたいだけど、苗字は先祖
が決めたものだし、あんまり独創的な名前もねえ。結婚を機会に苗字を
変えるか、通名を使うか。私のひらがな表記もありふれた名前への対抗だしね。
  ^^^^^^^^^^^^^

626 名前:デフォルトの名無しさん [sage]: 2011/06/09(木) 14:49:27.14
ぽろっと言っちゃったー
日本人には通名を使うなんて事思いつきません。

通名、通名、痛名か

通名なんて言葉使ったことねーよ
どうやったら通名なんて使えるんです?
869デフォルトの名無しさん:2011/06/09(木) 16:24:59.87
C:\aaa\bbb\ccc\file.txt
C:\aaa\zzz\vvv\test.txt

test.txtを基準にfile.txtへの相対パスは../../bbb/ccc/file.txtです
Rubyでこのように相対パスを求める方法ってございませんか?
C#だとhttp://dobon.net/vb/dotnet/file/getabsolutepath.html#section1のようなのです
870デフォルトの名無しさん:2011/06/09(木) 16:27:12.68
すいません自己解決できました
871デフォルトの名無しさん:2011/06/09(木) 16:28:54.11
すいませんやっぱり解決しませんでした

basedir = Pathname.new('C:/aaa/bb/file.txt')
abspath = Pathname.new('C:/aaa/zzz/test.txt')
relpath = abspath.relative_path_from(basedir)
puts relpath

ってやると../が1個多くくっついてしまいます
間違っている箇所をご指摘お願いします
872デフォルトの名無しさん:2011/06/09(木) 16:35:31.66
dirというからにはディレクトリ名を指定しないと
873デフォルトの名無しさん:2011/06/09(木) 16:41:05.35
ああああああファイル名の部分は認識してくれないのですね
ファイル名を抜かして実行するようにしてみます
ありがとうございます
874デフォルトの名無しさん:2011/06/09(木) 17:24:57.37
>>868
ひょっとして通名が(特定の立場の人が使う変名という意味でなしに)
一般的な語彙だってことも知らないような子が来ちゃった?
875デフォルトの名無しさん:2011/06/09(木) 18:40:26.24
>>874
625の書き込みの中で通名を一般的な語彙で使っているの?
あなたの言う一般的な意味を教えて下さい。
876デフォルトの名無しさん:2011/06/09(木) 18:47:29.09
あ、こっちでなら勝てると思った?
877デフォルトの名無しさん:2011/06/09(木) 18:49:44.73
明らかに一般的な意味で使っているよね。
「世間で通用(させようと)?している名前」

外国人(在日に限らず。どこの国でも)がよく使うってだけで、
別に外国人に限ったものではないよ。
878デフォルトの名無しさん:2011/06/09(木) 19:11:29.51
>>877
娘に対してそんな風に言うか?
879デフォルトの名無しさん:2011/06/09(木) 19:14:14.85
>>878
娘が普通すぎる名前が嫌だと言ってるから
880デフォルトの名無しさん:2011/06/09(木) 19:14:42.07
>>878
「そんなに名前が不満なら長いこと通名使って改名すればいい」
ってことだろ。

名前が不満で通名使い続けて通名の方がずっととおりがよくなったところで
改名ってのは例があるし。
881デフォルトの名無しさん:2011/06/09(木) 19:17:47.01
鈴木とか山田によくあるネタだ
俺も子供の頃に思ったよ、今日から長宗我部にしようって
882デフォルトの名無しさん:2011/06/09(木) 19:32:34.48
Ruby/Tk は標準添付やめて gem にした方が、
メンテナさんも気が楽なんじゃないかという気がするんだけど、どうかな。
Ruby 本体と Tcl/Tk とで、どっちのバージョンに強く依存するか、
前者ならば標準添付が良いけど、後者なら gem の方が良いかなと思う。
883デフォルトの名無しさん:2011/06/09(木) 19:32:46.31
長宗我部は「長」の部分があんまりカッコよくない
超☆宗我部とかならよかった
884デフォルトの名無しさん:2011/06/09(木) 20:03:32.80
長宗我部
これって読めねーよな
ちょうがぶ とかしらねーよ
885デフォルトの名無しさん:2011/06/09(木) 20:15:13.50
長宗我部は日本歴史ゲームくらいでしか目にしない
ああ、あと、四国の中学校の歴史の授業

>>882
昔どうしようかという話が出た頃はrubygemsという選択肢がなかったのよね
今なら、もしかしたらgemにしようという話になるかも
886デフォルトの名無しさん:2011/06/09(木) 20:25:57.89
>>882

標準で付いてきてませんでしたよ
887デフォルトの名無しさん:2011/06/09(木) 20:47:31.86
>>881
読めない名前よりも、普通の名前のが全然良いのに…
888デフォルトの名無しさん:2011/06/09(木) 21:25:45.97
教科書に出てくる名前だから読めるだろう
889デフォルトの名無しさん:2011/06/09(木) 22:26:56.12
日本人なら読める。
890デフォルトの名無しさん:2011/06/09(木) 23:27:20.26
whenで「0未満」を示すにはどうするのが良いですか?
891デフォルトの名無しさん:2011/06/10(金) 00:37:02.92
マイナス無限大...0
のRangeオブジェクトとか?
892デフォルトの名無しさん:2011/06/10(金) 00:40:51.80
-Float::INFINITY...0
893デフォルトの名無しさん:2011/06/10(金) 00:57:29.21
case に式を書かずに、when に評価式全体を書くかな

case
when x == 0
when x < 0
when x > 0
end

それ以前に無理に case 〜 when 使わずに if 〜 elsif で書いちゃうことも多いが
894デフォルトの名無しさん:2011/06/10(金) 01:22:04.28
whenは対象が有限かどうかで書き方が違うと思ってくれ
「負の数」みたいなおーざっぱなのは要素無限だから、case x when ... の形式では「書けない」
>>893のように case を空にして、when を変数入りにするのがいちばん妥当
この書き方は elsif とあんまり変わらないので、正直あんまり嬉しくない
895デフォルトの名無しさん:2011/06/10(金) 01:33:09.72
(0..5).member?(1.214) は true でしょうか、みたいなのってちょっと悩む
範囲オブジェクトはなんか離散的な整数っぽいオブジェクトなイメージがどうにも抜けない
896デフォルトの名無しさん:2011/06/10(金) 01:53:07.37
-Float::INFINITY...0 がx < 0 相当っての見て思ったが
x > 0 相当の方は始点を含まない範囲だからRangeで書けないよな
897デフォルトの名無しさん:2011/06/10(金) 09:01:54.73
>>894
>>892
「書けない」は嘘

>>896
まあ先に == 0を判定しておくとかそういうきれいじゃないやり方になるんだろうね。
898デフォルトの名無しさん:2011/06/10(金) 09:16:00.42
>>897
普通に
case x <=> 0
when -1 then
when 0 then
when 1 then
end
では?
899デフォルトの名無しさん:2011/06/10(金) 09:24:29.55
<=>の返す正負値を-1、1に仮定するのはあんまり良い作法だとは思わんなあ

>>897
1.9系ならwhen proc{}で、それ以前でもwhenに書く値に特異メソッドとして===追加すれば書けんこともないが、正直冗長だなw
900デフォルトの名無しさん:2011/06/10(金) 09:34:02.28
Ruby1.9以上で
[-3,0,3].each do |x|
print "#{x}:"
case x
when ->x{x<0}; puts "negative"
when 0; puts "zero"
when ->x{x>0}; puts "greater than 0"
end
end
901デフォルトの名無しさん:2011/06/10(金) 09:49:32.01
>>897
「書けない」で正しいよ
範囲が定まらないタイプは基本的に記述できない
たとえば、2012年1月1日以降、とか
書けるからといって、それをやっていいかどうかはかなり別
初心者スレにありがちだが
902デフォルトの名無しさん:2011/06/10(金) 09:56:11.20
まあ、>>893以外に選択肢がないのは確かではあるんだが
903デフォルトの名無しさん:2011/06/10(金) 09:58:40.46
>>901
-Float::INFINITY...0
でイテレーションすることはできないが、
このRangeに含まれるかどうかの確認なら問題ない。

caseに変数を書かずにwhenに直接条件式を書くとか、
if elsif...で書く方が妥当ではあるが、
普通に書けるものを手法として妥当でないからって
「書けない」と言ってはいけない。
904デフォルトの名無しさん:2011/06/10(金) 10:10:39.09
Rubyを今月始めた人も、使って4年経った人も、これに関してはたぶん同じようなコードを書くとは思う
じゃあそれでいいじゃんね、という感じ

def (UnderZero = Object.new).===(x) x < 0 end
[1, 0, -1].each {|x| puts case x when UnderZero then "-" else "+" end }
905デフォルトの名無しさん:2011/06/10(金) 10:15:34.83
>>903
書けないと「書けない」にはわりと溝があるんじゃないかと
カッコ重要
906デフォルトの名無しさん:2011/06/10(金) 10:19:21.91
>>905
それは
書かない
とか
書くべきでない
とでも言うべきものだよ。

そんなオリジナルルールで「」を使われても。
907デフォルトの名無しさん:2011/06/10(金) 10:29:24.40
(文字通り)「書けない」みたいに字義通りだってことを強調する意味で括弧でくくることもあるから、
(書けないわけではないが)「書かない」みたいな表現をした方がいいんじゃないかな。

>>906みたいな奴って何言っても引き下がらんし。
908デフォルトの名無しさん:2011/06/10(金) 10:30:12.29
初心者向けなら断言したほうがいいと思うなあ
思わせぶりにさせてニヤニヤするのはオタクの悪い癖だ
909デフォルトの名無しさん:2011/06/10(金) 10:34:04.86
>>908
やろうと思えばできるけどね(知りたい?)、みたいな情報って初心者にとって(中級者以上にとっても)いらないっていうか凄い邪魔
どうせ使わないんだし、ないことにしたほうがいい
>>893-894で納得しない回答人はいろいろ省みたほうがいいと思う
910デフォルトの名無しさん:2011/06/10(金) 10:39:13.86
不可能でないことを不可能と断言することに抵抗が無い人は好きにすれば?
911デフォルトの名無しさん:2011/06/10(金) 10:40:21.00
>>908>>909
実際にもう>>892が書かれちゃってるわけだから、「書けない」なんて変な表現しないで
>>892みたいに書けないこともないけどまわりくどいしわかりにくいから>>893
みたいに事実をありのままに書けばいいだけ。

既に>>892が書かれてんのに
「やろうと思えばできるけどね(知りたい?)」って状況じゃないでしょ。
「書けない」なんていわれても初心者は
>>892でできるみたいじゃん書けないってどゆこと?」となるのがオチ。
912デフォルトの名無しさん:2011/06/10(金) 10:54:39.04
>>908
彼らは自分たちの知識ひけらかし大会を邪魔されると今のように激しく突っかかってきます
質問者のことなんてどうでもいいと思ってるので、放置が原則
913デフォルトの名無しさん:2011/06/10(金) 10:58:06.65
「Rubyしかできない人」にとっては聖域みたいなもんだしな、ここ…
914デフォルトの名無しさん:2011/06/10(金) 11:00:50.94
そうやって初心者が初心者に教えるスレ、になってゆくわけだなw
915デフォルトの名無しさん:2011/06/10(金) 11:04:33.24
・when節にRangeオブジェクトを渡して「この範囲に含まれるとき」という指定ができる
・Float::INFINITYによって∞の概念が使える

ってのは質問者にとって有益な情報だけどな
916デフォルトの名無しさん:2011/06/10(金) 11:11:08.67
どっから荒れたんだこれ、と思って読み返したら「書けない」からか
初心者が読んだら強調のカッコと勘違いしても仕方ないな
917デフォルトの名無しさん:2011/06/10(金) 11:19:55.01
目の前で食べてる人がいるのに「このリンゴは食べられません」とか言われても誰も納得しねーよ。
「食べてんじゃん!!!!」って突っ込み食らうわ。
「見てのとおり食べられないこともないんだけど、不味いんだよねー」ってーのがまともな人間の回答。
918890:2011/06/10(金) 11:41:50.50
変な流れを変えたくて質問したのに別の変な流れにしてしまってすみませんorz
おおまかな下限が分かっているのでRangeで書くことにします
919デフォルトの名無しさん:2011/06/10(金) 12:09:25.89
>>918
case
when x >= 0 && x < 1
when x >= 1 && x < 10
...



case x
when 0...1
when 1...10
...

とじゃ前者の方が1.8で約1.2倍くらい、1.9で数倍速いから
そんなに頻繁に繰り返さないなら見やすいRange
何度も何度も判定するようなら速い >= && < と使い分けるといいと思う
920デフォルトの名無しさん:2011/06/10(金) 12:27:27.02
>>916
どちらかってと、無限大のRangeが原因だと思う
これ、いわゆるハックだろ
こんな書き方してる人見たことないし、誰かが書いてたら第二のcgi.rbを生ませないよう注意するレベル
921デフォルトの名無しさん:2011/06/10(金) 12:39:13.57
まー
 ・ Rangeは始点と終点のデータしかもたない
 ・ Range#=== は Range#include? で、始点 < x かつ x < 終点 なら true
という処理をするということを踏まえた上での、なんぞトリッキーな書き方であることは認める
to_a してどうなるかさっぱりわからんのだがどうなるんだろう
922デフォルトの名無しさん:2011/06/10(金) 12:46:57.55
>>920
Float::INFINITYが入ったのが1.9.2からだからあまり見かけないんだろう
923デフォルトの名無しさん:2011/06/10(金) 12:47:02.14
>>920
>>894の2行目が電波すぎるだけ。
>要素無限だから、case x when ... の形式では「書けない」
実数のRangeはstepするためだけのもので
cover?とか===してはいけないと言ってるようなものだよ、これ。
924デフォルトの名無しさん:2011/06/10(金) 12:47:22.03
>・ Range#=== は Range#include? で、始点 < x かつ x < 終点 なら true
じゃあなんでそれを自力で書いた>>919は速いん?
925デフォルトの名無しさん:2011/06/10(金) 12:51:48.29
>>921
INFINITY関係なく、
RangeにFloat使った時点でeachできないからto_aもできない
926デフォルトの名無しさん:2011/06/10(金) 12:54:04.94
>>911
>実際にもう>>892が書かれちゃってるわけだから、「書けない」なんて変な表現しないで
>「>>892みたいに書けないこともないけどまわりくどいしわかりにくいから>>893
>みたいに事実をありのままに書けばいいだけ。

ほんとその通り。これが理解できないやつはたいていコミュ障。
927デフォルトの名無しさん:2011/06/10(金) 12:59:36.24
なるほど、オタクで、コミュ障で、Rubyしかできなくて、マカーがいる集まり、と…
なんか最低だなこのスレ
928デフォルトの名無しさん:2011/06/10(金) 13:04:18.24
さらにどうでもいいことに
-Float::INFINITY...0
はstepもまともな結果にならないから===するしか使い道がない。

===に使うのはバカバカしいが===にしか使えない誰得オブジェクト
929デフォルトの名無しさん:2011/06/10(金) 13:18:47.59
>>927 自分が一番最低という自覚はないのねw
930デフォルトの名無しさん:2011/06/10(金) 14:10:54.77
横入り失礼。
Class#methodの「#」とか、
こういう書き方の説明って、
どこかにまとまってる?
ググろうにも記号じゃまともに検索できないし、
記法って言うのかなんて言うのか呼び方が分からんから、
調べるに調べられん
931デフォルトの名無しさん:2011/06/10(金) 14:12:58.23
932デフォルトの名無しさん:2011/06/10(金) 14:25:05.25
>>931
ありがとう
というか白状すると、
インスタンス変数についてClass#methodみたいに書く時の記法が知りたかったんだ
この説明には入ってないんだけど、
.でいいの?
よかったら教えてください
933デフォルトの名無しさん:2011/06/10(金) 14:36:03.26
>>932
それはない
オブジェクトの中のインスタンス変数を利用する機会がかなり稀であることが一因なんだと思う
def hoge
@hoge
end
の場合は「(オブジェクトselfの)インスタンス変数@hogeを返します」としか書かない

ものすごーく稀に、「Hogeクラスのオブジェクトのインスタンス変数@val」を Hoge@val と書くことはあるんだが、
変な記述であることは否めないし、あんまりコンセンサスが得られてる気もしないな
934デフォルトの名無しさん:2011/06/10(金) 14:41:19.10
インスタンス変数って基本的にクラスを使う人が
意識しなくていいもののはずだからなあ。
935デフォルトの名無しさん:2011/06/10(金) 14:44:09.90
>>933
>>934
わかりました、
ありがとう
936uy:2011/06/10(金) 16:18:15.23
イテレーション回ってる最中にハッシュへの追加はエラー出るんだけど、回避方法があった

a=Hash.new
a[:aa] =44
a[:bb] =324454
a[:cc] =3355
a[:dd] =32455

a.each do | m |
a = a.merge(:ee => 88666)
end
p a

a.each do | m |
a[:ssstt] = 1111 # []=': can't add a new key into hash during iteration (RuntimeError)
end


いいの? これ?
どうせならもう []=': can't add a new key into hash during iteration (RuntimeError)ださないほうがいいんじゃないの?なんなの?
[]=': can't add a new key into hash during iteration (RuntimeError) って一体なにがしたかったの?
???????????
937デフォルトの名無しさん:2011/06/10(金) 16:29:12.66
それはおかしくないぞ
最初のaには何も追加してないし
938デフォルトの名無しさん:2011/06/10(金) 17:10:23.48
>>936
merge!しないと別オブジェクトを作っちゃいますよ
1.9.2ではちゃんとエラーではじかれます

1.9.2未満だとmerge!が動いちゃいますが、対応漏れだったのでしょう
新規のキーをmerge!していくと無限ループしてしまいますから
939デフォルトの名無しさん:2011/06/10(金) 17:16:30.75
>>937
a?
940デフォルトの名無しさん:2011/06/10(金) 17:20:37.67
rubygems 1.8.x バグだらけやぞなんとかしろ
941デフォルトの名無しさん:2011/06/10(金) 17:54:16.36
942デフォルトの名無しさん:2011/06/10(金) 17:59:58.78
>>939
a.mergeで生成されて新たにaにバインドされるオブジェクトと
a.eachで回ってるオブジェクトは別ものだし、
eachはループ一回ごとにaの参照を辿り直したりしないって話なのかな
943デフォルトの名無しさん:2011/06/10(金) 18:41:57.87
>>939
俺も聞きたい。
>>937はこの流れでいったいどこからaなんて言い出したのか。
944デフォルトの名無しさん:2011/06/10(金) 19:00:31.28
もしかしてレス番飛んでるよアピール?
945デフォルトの名無しさん:2011/06/10(金) 20:49:27.51
そういうことかw
分かりづらすぎて「お前らこそ何言ってんだ」って感じだった
946デフォルトの名無しさん:2011/06/11(土) 21:09:14.21
3回読んでやっと分かったw
結構NG登録してんだな
947デフォルトの名無しさん:2011/06/11(土) 21:11:47.01
NG登録というキーワードが出てくるまで気づかなかった。だめぽ
948デフォルトの名無しさん:2011/06/11(土) 21:48:46.66
ああ、あいつか
949615:2011/06/11(土) 23:04:36.25
require 'csv'
CSV.open('meigaralist.csv', 'r') do |row|
puts row
end

銘柄リストの中身
1301 極洋 東1
1332 日本水産 東1
      ・
      ・
      ・
コードと同じディレクトリに入れてあります
csv→stringにして表示させたいだけなのですが、
ちょっとよく分からなくて・・・

すいませんがお願いします
950デフォルトの名無しさん:2011/06/11(土) 23:06:58.21
質問でもなく何をお願いしてるのか
951615:2011/06/11(土) 23:59:22.94
すいません。これだけだとイミフですね

このmeigaralist.csv
にあるデータを読み込んで(中身は上述)stringの形で
データを表示させたいのですが思惑通りにならず
#<CSV:0x128f7f0>とだけ表示されます

どこがおかしいか等指摘していただければと思います
よろしくお願いします
952デフォルトの名無しさん:2011/06/12(日) 00:07:27.06
CSV.foreach('meigaralist.csv') do |row|
  puts row
end

で配列として取得できる
953デフォルトの名無しさん:2011/06/12(日) 00:10:55.97
CSVの一部APIはRuby1.9と1.8で非互換みたいだね
1.9のopenはブロックにrowでなくcsvを渡す
954615:2011/06/12(日) 00:15:59.25
>>952 953
ありがとうございます
foreachをそのままやると
C:/Ruby192/lib/ruby/1.9.1/csv.rb:1892:in `block (2 levels) in shift'
: Unquoted fields do not allow \r or \n (line 2). (CSV::MalformedCSVError)
でエラーはきました。改行文字とか入ってるとダメよ?ってことなんですかね?
955デフォルトの名無しさん:2011/06/12(日) 00:30:06.01
いつまでも人に聞くきか?エラーでググルことを覚な

Ruby 1.9 - Bug #1075: \r\n と \n が混在した CSV がエラーになる - Ruby Issue Tracking System
http://redmine.ruby-lang.org/issues/show/1075
956uy ◆yyC0rYWEq2 :2011/06/12(日) 00:42:11.81
とりあえずRubyスレにいるなら
.hashでハッシュ値くらい確認してからレスしろよゴミ
957デフォルトの名無しさん:2011/06/12(日) 00:44:17.97
逆に混在して出して来る様な屑アプリって何?
エクセルのエクスポートでも普通に混在されてたりするの?
958615:2011/06/12(日) 00:49:54.02
>>955
これでも分かる範囲で調べながら自分で考えて書いてるんですが
こういう初歩的なつまりが解決出来なくて、
よく1時間くらい悩むんですよ。勉強不足です

一応後は銘柄でループさせれば完成するところまで来てるんですが
教えてちゃんになってますね。すいません

みなさんある程度コード書けるようになるまでどうやって勉強したんですか?
やっぱり自分で書いてみるより人の書いたの読んでいく方がいいのかなぁ
959デフォルトの名無しさん:2011/06/12(日) 00:56:57.63
>>956
さっさと消えろよ
960uy ◆yyC0rYWEq2 :2011/06/12(日) 00:57:52.90
つうか前にも書き込んだけどハッシュの場合はエラーでるけど、配列の場合はイテレーション中にpushしてもエラーはでない
見事に無限ループになる

なぜハッシュ側でだけエラーを出しているのか不明
俺がなぜこんなにこのエラーにつっかかるかっていうと、このエラーが出るせいで組みずらい箇所に当たってる
ハッシュ使って木構造染みたソース書いてるからな
   [Aタスク]
     │
  ┌─┴─┐
[Bノード]  [Cノード]

こうあるときに

CノードからAタスクへ[Dノード]の追加という処理が出来ない

それはつまり、Bノードをウィンドウと見立てて、Aタスクがウィンドウ管理のタスクだとした場合
Bのノードにあるウィンドウから、新規ウィンドウを作るときにAタスクへの追加が出来ない == 詰んでるって事
正直これを無限ループになるのが心配でえらーだしてるんだよ とかいってる奴はバカすぎる・・・
無限ループにならないように制御していくのがプログラミングだろうが
予想するに、そういう仕様にするしかない何らかの事情が絡んじゃってんだろ
[key,value]の値を持った配列で書き直したほうがいいかと思うレベル
961uy ◆yyC0rYWEq2 :2011/06/12(日) 00:59:08.61
>>959
あ?誰に口きいてんだお前

技術的に完膚なきまでにぶっ潰されそんな幼稚な反論も出来なくなっちゃった子ですかア?
962デフォルトの名無しさん:2011/06/12(日) 01:02:29.43
>>956
誰に対するレスだ?
963uy ◆yyC0rYWEq2 :2011/06/12(日) 01:23:30.99
自分だと思ったんなら君へのレスだよ
964デフォルトの名無しさん:2011/06/12(日) 01:28:28.74
>>960
ノードを巡る処理とノードを追加する処理を分離すればいいんじゃないの?
イテレーションで各ノードを巡りながら追加するノードをプールしてイテレーション後にノードを追加する
965デフォルトの名無しさん:2011/06/12(日) 01:30:16.83
相手するなよ
966デフォルトの名無しさん:2011/06/12(日) 02:31:57.85
> 技術的に完膚なきまでにぶっ潰され

ああ、あのストーカーはお前か。
967デフォルトの名無しさん:2011/06/12(日) 02:36:55.45
ttp://hibari.2ch.net/test/read.cgi/prog/1306135242/991+995
> eath_with_object , rotate , cycle , instance_exec __method__ , DATA , erb , instance_eval このあたりの動作わかるか?

> each_with_objectだろ、いきなりスペル間違えてるぞ禁書目録w

あのストーカーもtypoすげー多かった。
コンピュータの歴史の基本部分には詳しかったけど
肝心の言語の知識が皆無だし間違いを訂正しないから専門学校レベルかなと思ってたけど、ビンゴだなこれ。
968けいたいうゆ:2011/06/12(日) 02:57:16.16
>>964
黙れカス
解決方法なんてきいちゃいないしそんなコードはまず書かない
Rubyのゴミ的な部分をね
こっちの世界で影響力のあるお偉いさんが口をとがらせる前に言語のおかしな場所を指摘してやってるだけ
一応これでも応援してる言語だから

配列では可能でハッシュではだめという
しかも回避方法なんていくらでもある
このエラーがいかに不自然なものであるか
それさえもここの奴らは見えないようだな
969デフォルトの名無しさん:2011/06/12(日) 03:04:02.38
ここって基本的にトイレでウンコしてるときに読み書きする場所だから、
難しい事まで付き合いきれないよ。
970デフォルトの名無しさん:2011/06/12(日) 03:08:56.69
セッタとゲッタを使えば解決
971デフォルトの名無しさん:2011/06/12(日) 03:16:49.06
>>955
これ普通は気づかないと思う
まあいいけど

>>958
RubyのCSVライブラリは小難しいことに定評がある
毎回マニュアル読まないとぜんぜん書けない
できれば使いたくないもののひとつ
972デフォルトの名無しさん:2011/06/12(日) 03:22:38.47
CSVフォーマットみたいな遺物は使わんでくれって感じ。
973デフォルトの名無しさん:2011/06/12(日) 03:48:17.98
人が何使おうが関係ない話だ。使いたいもの使えばいい
974デフォルトの名無しさん:2011/06/12(日) 03:53:32.78
自分で使う分には良いけどな。
複数人で使うようなフォーマットとしては駄目。
975デフォルトの名無しさん:2011/06/12(日) 03:59:05.94
何も出来ないやつって、あれしちゃだめ、これしちゃだめってうるさいんだよなあ
どうでもいいことにこだわってるから何も出来ないままなんだよ
976デフォルトの名無しさん:2011/06/12(日) 04:09:41.68
CSVはRDBMSでもSpreadsheetでも日常的に使ってるなあ
sed+awkでも簡単に処理出来るし、LLでもCでも扱うのは楽
977デフォルトの名無しさん:2011/06/12(日) 04:59:39.95
うん CSVはいいよ
へたにリッチなXMLとかで情報交換はめんどくさい
978デフォルトの名無しさん:2011/06/12(日) 06:02:41.37
Excelが出すCSVがクソッタレじゃなければもっと便利なんだが。
979デフォルトの名無しさん:2011/06/12(日) 07:32:37.47
学ばない奴らだな
CSVフォーマットなどというものはない

…というかむしろ、どこかの誰かがきちんと決めててくれさえすれば問題なかったんだよ
980デフォルトの名無しさん:2011/06/12(日) 10:13:13.15
で、誰が従うの?
981デフォルトの名無しさん:2011/06/12(日) 10:16:18.31
Rubyって更新頻度遅い系ですか?
Ruby1.9.2 p180から全然バージョンアップしないんですが
982デフォルトの名無しさん:2011/06/12(日) 10:21:56.01
>>968
イテレーション中のハッシュに値を追加するなんてコードはまず書かない
エラーが不自然であると思うのならバグレポートとして勝手に報告しろ
983デフォルトの名無しさん:2011/06/12(日) 10:34:10.31
英語わかんないからレポート掛けない
984デフォルトの名無しさん:2011/06/12(日) 10:45:41.53
配列ならイテレーション途中に末尾に特定条件で要素追加したりして
追加分もそのまままわして欲しいことがままあるから配列はOKなんだろうね。

配列とハッシュは同じコレクションと言っても根本的に別物だもの。
同じ仕様を要求する方がおかしい。
985デフォルトの名無しさん:2011/06/12(日) 10:58:33.59
>配列ならイテレーション途中に末尾に特定条件で要素追加したりして
>追加分もそのまままわして欲しいことがままあるから配列はOKなんだろうね。

本当にそんなこと考えてると思ってるのか?
986デフォルトの名無しさん:2011/06/12(日) 11:07:05.31
RubyのHashは順序を保証してくれるかもしれないけど、一般的なデータ構造としての
ハッシュには順序の概念は無いよね?
ハッシュを総なめ中にエントリを追加しても、順序づけの基準によっては現在位置の
前かもしれないし後かもしれない
そこら辺の意味合いで禁止されてるんじゃないかな
987デフォルトの名無しさん:2011/06/12(日) 11:07:42.13
ハッシュで途中参加されると「こいつどうすんのよ……」って空気になりそう。

本質的に順番の観念がないから、
「加えられたものは最後に処理する」ってのも仕様としては気持ち悪いし……。
988デフォルトの名無しさん:2011/06/12(日) 11:09:03.28
ここ、初心者スレですよ
989デフォルトの名無しさん:2011/06/12(日) 11:12:12.54
回避方法があるからおかしいという話になると
privateとかprotectedとか……。
990デフォルトの名無しさん:2011/06/12(日) 11:14:02.22
え、Rubyのハッシュって順序保存するの?
ヘンなの。
991デフォルトの名無しさん:2011/06/12(日) 11:22:04.78
>>990
1.9からの仕様で名前はともかく機能そのものは便利

次スレを誰かおねがい。気軽に立てられる人は少ないだろうが
992デフォルトの名無しさん:2011/06/12(日) 11:27:12.14
Ruby 初心者スレッド Part 44
http://hibari.2ch.net/test/read.cgi/tech/1307845568/

はい。テンプレ前スレのとこ以外ここの>>1そのままだけどいいよね?
993デフォルトの名無しさん:2011/06/12(日) 11:33:27.00
>>987
順序のない列挙なら最後に銜えるのが当然であり、
順序のある列挙なら銜えないのが当然。
994デフォルトの名無しさん:2011/06/12(日) 11:33:39.62
>>993
イケメンおつ

テンプレは前は2-5があったけど無くても問題なさそうだから
これでいいんじゃないかな
995994:2011/06/12(日) 11:34:30.19
あれ、アンカずれた
>>993でなく>>992ですよ
996デフォルトの名無しさん:2011/06/12(日) 11:43:59.22
>>993
根拠のない「当然」は受け入れられないなあ。
順序のある列挙なら加えられた後の順序でそのまま続行すりゃいいだけだし。
997デフォルトの名無しさん:2011/06/12(日) 11:47:08.28
これ以上やるならC実装に立ち入った議論をすべきじゃないか
実装そっちのけであるべき論やっても虚しいでしょ
998デフォルトの名無しさん:2011/06/12(日) 11:48:01.66
順序のある列挙なら加えられた順序で取り扱うのが当然であり、
順序のない列挙なら加えないのが当然。

順序がないのに「最後」ってなに?
999デフォルトの名無しさん:2011/06/12(日) 12:56:46.34
梅干
1000デフォルトの名無しさん:2011/06/12(日) 13:02:55.75
1000ならわたしだけのMatz
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。