Ruby 初心者スレッド Part 15

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん

プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
関連スレやURLは>>2-10あたりを見てください。Ruby on Railsの質問はWebProg板の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デフォルトの名無しさん:2007/10/25(木) 16:43:26

本スレ
Rubyについて Part 28
http://pc11.2ch.net/test/read.cgi/tech/1187298711/

RUBYの宿題教えてください。
http://pc11.2ch.net/test/read.cgi/tech/1106572657/

Railsスレ
Ruby on Rails
http://pc11.2ch.net/test/read.cgi/tech/1191381506/
【Ruby】Ruby on Rails Part3
http://pc11.2ch.net/test/read.cgi/php/1170760209/
3デフォルトの名無しさん:2007/10/25(木) 16:44:08
4デフォルトの名無しさん:2007/10/25(木) 16:44:36
5デフォルトの名無しさん:2007/10/25(木) 16:45:32
= 公式/非公式関連リンク

== Rubyを知る
Ruby Home Page
http://www.ruby-lang.org/ja/

== Ruby使用時の調べもの
Rubyリファレンス
http://www.ruby-lang.org/ja/man/
http://www.ruby-doc.org/ (英語)
リファレンスのHTMLヘルプ版配布
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
# Windowsで便利
Ruby FAQ
http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ

Programming Ruby - The Pragmatic Programmer's Guide
http://www.ruby-doc.org/docs/ProgrammingRuby/
# 好評書籍をWebで公開中、ただし英語
逆引きRuby
http://www.namaraii.com/rubytips/
6ここまでテンプレ:2007/10/25(木) 16:46:56
== Ruby使用時の探し物
RAA - Ruby Application Archive
http://raa.ruby-lang.org/
RubyForge
http://www.rubyforge.org/
# 共にRubyのアプリやライブラリが検索できる

== Ruby関連のニュースや読み物
日本Rubyの会 公式Wiki - 日本Rubyの会Wiki
http://jp.rubyist.net/

Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
# コードレビューが好評

== いろいろRubyサイト
Matzにっき … Ruby作者の日記
http://www.rubyist.net/〜matz/

Ruby hotlinks 五月雨版 … Ruby関連の日記やblog
http://www.rubyist.net/〜kazu/samidare/
Rubyの本一覧
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Ruby%A4%CB%B4%D8%A4%B9%A4%EB%BD%F1%C0%D2
<rubyXML/>
http://www.rubyxml.com/
Ruby Weekly News @ Ruby Garden
http://www.rubygarden.org/rurl/html/
7デフォルトの名無しさん:2007/10/25(木) 16:58:30
8デフォルトの名無しさん:2007/10/25(木) 17:00:34
【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc11.2ch.net/test/read.cgi/tech/1155031689/

Ruby>>>>>Java
http://pc11.2ch.net/test/read.cgi/tech/1158807229/

Rubyは難しすぎ
http://pc11.2ch.net/test/read.cgi/tech/1156496224/

Python厨とRuby厨が仲直りするスレッド
http://pc11.2ch.net/test/read.cgi/tech/1099804004/
9デフォルトの名無しさん:2007/10/25(木) 17:02:04
10デフォルトの名無しさん:2007/10/25(木) 17:02:51
11デフォルトの名無しさん:2007/10/25(木) 17:04:48
莫大な量のURLは初心者のやる気をなくさせる孔明の罠としか思えんな
12デフォルトの名無しさん:2007/10/25(木) 17:11:07
>>1
>Ruby on Railsの質問はWebProg板のRailsスレで。

もうム板に転居済み?

せっかくなので

<英語>
本家: http://www.rubyonrails.org
API: http://api.rubyonrails.com/
Documents&Tutorials: http://documentation.rubyonrails.com/

<日本語>
Rails' wiki: http://wiki.fdiary.net/rails/

今すぐ始めるRubyガイド
http://i.loveruby.net/ja/rhg/book/index.html
http://www.aoky.net/articles/why_poignant_guide_to_ruby/

redMineのML
http://groups.google.com/group/redmine-users-ja?hl=ja
13デフォルトの名無しさん:2007/10/25(木) 17:18:05
>>11
全部読まなきゃいけない訳でもないし
むしろ今時のコピペしたがる風潮で育った子らには
安心感を与えるんじゃない?
14デフォルトの名無しさん:2007/10/25(木) 17:43:36
前スレにおける「テンプレ読め」レス数は1レスでした。
15デフォルトの名無しさん:2007/10/25(木) 18:06:03
質問です。
WWW::Mechanize を使い、リファラをつけて、ページにアクセスしたいのですが、引数がよくわかりません。

agent = WWW::Mechanize.new
agent.user_agent_alias = 'Windows IE 6'
page = agent.get('http://〜〜','第二引数がリファラ??')

get() の第二引数がリファラという事のようなので、
agent.get('http://〜〜','http://google.co.jp')

としても、エラーがでてしまいます。

どなたか、ご存知のかたはいますでしょうか?
16デフォルトの名無しさん:2007/10/25(木) 18:12:46
マニュアルくらい読めって
17デフォルトの名無しさん:2007/10/25(木) 18:16:10
漏れ知ってるぜ
18デフォルトの名無しさん:2007/10/25(木) 18:53:09
むしろわざわざマニュアルわかりにくいWWW::Mechanizeでなければならん理由がわからん
19デフォルトの名無しさん:2007/10/26(金) 16:46:22
便利だと思うけどなぁ

ほかにもっといいものある?
20デフォルトの名無しさん:2007/10/26(金) 21:27:29
Nora とか scRUBYt! とか?
21デフォルトの名無しさん:2007/10/26(金) 22:29:48
Noraって便利なのかな
るびま記事のあの顔写真で、第一印象悪くて試したことないんだが

というかあれスクレイピングできるの?
22デフォルトの名無しさん:2007/10/26(金) 22:47:33
できるっちゃよ。使い勝手もまあ良いっちゃ。
23デフォルトの名無しさん:2007/10/27(土) 01:27:41
んじゃかるーく零崎を始めるちや
24デフォルトの名無しさん:2007/10/28(日) 06:08:27
たのしいRubyは1.8対応の第2版のほうがいいですか?
1.6対応ていうのが図書館にあるんだけど
さてどうしたもんかね
25デフォルトの名無しさん:2007/10/28(日) 09:13:19
Ruby1.6を使ってるなら古いほうがいいかもしれない
26デフォルトの名無しさん:2007/10/28(日) 11:23:35
Nora試してみようとしたらマニュアルが死んでた
やっぱりWEBrickだな
27デフォルトの名無しさん:2007/10/28(日) 16:18:43
たのしいRubyのレベルではたいして変わらんので、金出して買ってずっと手元に置くんでなければ第1版でもおk
「1.6では動いたけど1.8では動かない」という記述は稀だから

…なんかまずいのあったっけ?
28デフォルトの名無しさん:2007/10/28(日) 16:42:15
>>24
気合いの入れ方による。
本気で勉強したいなら、新しいのをかって手元に置いた方がいい。
触ってみたいだけなら、古い方で十分。
29デフォルトの名無しさん:2007/10/29(月) 00:08:40
RubyGemsについて質問させていただきます。

Rubyをワンクリックのやつでインストールして、
RubyGemsもちゃんと入ってるのですが、
Railsをインストールしようと思ってRubyGemsを実行したときに、

C:\>gem install rails
ERROR:  While executing gem ... (Gem::RemoteFetcher::FetchError)
    接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または
接続済みのホストが応答しなかったため、確立された接続は失敗しました。 - connect(2)(Errno::ETIMEDOUT)

というエラーがでてしまいます。なぜでしょうか。教えてください。
よろしくお願いします。
30デフォルトの名無しさん:2007/10/29(月) 00:28:01
gem使用時でいちばん見たくないエラーだ

 ・ プロクシあるいはそれに類するセキュリティ機能があるならプロクシを環境変数に設定する
 ・ パーソナルファイアウォールを使用しているならruby.exeか何かにインターネット接続を許可する

それでなきゃ知らん
31デフォルトの名無しさん:2007/10/29(月) 02:20:54
Server 2003 に SP2 だとそうなるんじゃないかな
DEP を off にするか一部の exe に限定するとか
32デフォルトの名無しさん:2007/10/29(月) 08:24:35
Proxyの時はSocketErrorじゃなかったっけ?
もーすっかり忘れてしまった。
gem install fogefoge -p http://www.proxy.com:8080/
とかでもProxy設定できたような、かわったっけ?

Ruby on Rails
http://pc11.2ch.net/test/read.cgi/tech/1191381506/
こっちで聞いてみるのが正解かも
3320=22:2007/10/29(月) 10:36:23
>>26
あれ?スクレイピングするんじゃなかったの?何故いきなり WEBrick ?
34デフォルトの名無しさん:2007/10/29(月) 22:41:11
Windows環境でUTF-16BigEndianのファイルを読み込みたいのですがうまくいきません
こんなコードです

f_in = open(filename, 'r')

#UTF-16beファイルをS-JISに変換しながら配列に格納
raw_data = f_in.readlines.collect do | line |
# line.kconv(Kconv::SJIS, Kconv::UTF16) # カタカナ変換されちゃうらしいので使えない
# 出力SJIS 入力UTF-16BE mimeデコード無し カタカナ変換無し
NKF.nkf('-s -W16 -m0 -x', line).chomp
end
f_in.close

puts "line count = #{raw_data.size}"


Windowsなので-Ks でShift-JISに設定しています
-KオプションにはUTF16はなさそうなので、-Kuとかしてみても
Invalid char '\377' in expression
と出て実行できません

どなたか、よろしくお願いします
35デフォルトの名無しさん:2007/10/29(月) 22:42:27
連投すみません
先ほどのプログラムで、実際は193行ある入力ファイルが74行と表示されます
36デフォルトの名無しさん:2007/10/29(月) 22:59:44
>>34,35
まずオープンする時は'rb'とするか、オープンした後binmode。
読むときはいったんreadで全部読み込んで、その読み込んだ文字列全体を一括で変換。
変換した後、each_lineで回すなりsplitして配列にするなり好きにしてくれ。
37デフォルトの名無しさん:2007/10/29(月) 23:21:31
読み込めました!
こんなコードになりました

f_in = open(@news_source, 'rb')
all_file = NKF.nkf('-s -W16 -m0 -x', f_in.read)
raw_data = all_file.split("\n")
puts "line count = #{raw_data.size}"

やっと加工に移れます
ありがとうございました
38デフォルトの名無しさん:2007/10/29(月) 23:32:04
第1回Ruby検定は45人が受験 − @IT
ttp://www.atmarkit.co.jp/news/200710/29/rubycert.html

ぬう
「うっかり落ちると恥ずかしい度」がアップしたな
39デフォルトの名無しさん:2007/10/30(火) 12:53:29
大学の試験以下だな
40デフォルトの名無しさん:2007/10/30(火) 18:14:29
最低のロゴ
4129:2007/10/30(火) 21:39:18
>>30-32
大変遅くなりましたが何とか解消しました。
原因はウイルスセキュリティのファイアウォールだったようです。

なぜかruby.exeに例外許可を与えてもブロックしていたらしく
ファイアウォールを解除してgemを実行してみたら
すんなり通りました。

レスくださった方ありがとうございました。
42デフォルトの名無しさん:2007/10/31(水) 19:15:56
出遅れたけど書いとくか・・・

count = Hash.new(0)
File.read("test.txt").each_byte{|c|
count[c.chr] += 1
}

count.to_a.sort.each{|k,v|
puts k + " : " + v.to_s
}
43デフォルトの名無しさん:2007/10/31(水) 19:28:47
>>42
どうでもいいんだけど、その用途なら Hash より Array じゃね?

count = Array.new(255, 0)
File.read("test.txt").each_byte{|c|
count[c] += 1
}

count.each_index{
|i|
if count[i] > 0 then
puts i.chr + ":" + count[i].to_s
end
}
44デフォルトの名無しさん:2007/10/31(水) 19:32:08
>>43
吐いた
45デフォルトの名無しさん:2007/10/31(水) 19:40:14
こういう枚挙は素直にハッシュでいいよ…
46デフォルトの名無しさん:2007/10/31(水) 21:10:03
入門レベルでなければ
Hash.new {|h, k| h[k] = 0 }を集計初期値につかってinjectだな。
47デフォルトの名無しさん:2007/10/31(水) 22:08:14
>>45
Arrayの方が素直でしょ。
48デフォルトの名無しさん:2007/10/31(水) 22:09:52
a = "eeeeeddddcccbba".split(//)
a.uniq.sort.each{|e| puts "#{e}は#{a.grep(e).size}個"}

aは1個
bは2個
cは3個
dは4個
eは5個

たぶんこれが素直な最短
49デフォルトの名無しさん:2007/10/31(水) 22:18:22
「番地」を考えて格納するような配列は
あんま初心者スレ的に素直とは思えねーんだがどうだろう
50デフォルトの名無しさん:2007/10/31(水) 22:21:54
>>47
if count[i] > 0 then のどこが素直なのかと
51デフォルトの名無しさん:2007/10/31(水) 22:25:18
プログラミング出自によって配列依存度は違うと思われ

Cやフォートランから来た人はデータ格納に要素数決め打ちの配列をよく使う
今回ならアルファベット26文字だから26個の要素の配列作って数を格納

Perlから来た人はハッシュをデータ保存に使うことをあまり気にしないと思う
52デフォルトの名無しさん:2007/10/31(水) 22:31:37
>>49
このご時世にスクリプト言語でASCIIコードなんぞ持ち出すのが激しく嫌
文字コードの細かいところが関わった処理かと思ったら何よコレって感じ
53デフォルトの名無しさん:2007/10/31(水) 22:38:34
>>43だとマルチバイト文字も数えるように拡張するのがめんどいな。
手作業で文字を数えるとき、ノートかなんかに、

i)新しい文字が出たら書く
ii)その文字の横に「正」でも書いて数える

ってするイメージがあるから、ifnone=0のHashを使うほうが
そのイメージに合致する感じがある。


ノートに書くって都合上、順番はつくけど、カウント作業の際その順序は問題に
ならないから、順番付けがない。
また、この方法でカウント作業を始める前に、出て来る可能性のある文字の集合なんて
いちいち意識しないと思うので、255長の配列をあらかじめ取るっていうのも何だかな、と思う。

こういう考えから、文字のカウントにはやっぱHashのほうが合ったデータ構造のような希ガス。
54デフォルトの名無しさん:2007/10/31(水) 22:45:34
や、マルチバイト以前に、テキストデータに改行が含まれてるということにするだけで
今回のたいていの短いスクリプトは変なデータ表示するぞ(w

てかこのスクリプトはアドホックな解法であって、汎用性とか意味とか使いまわしとかは考えてないだろ
55デフォルトの名無しさん:2007/10/31(水) 23:00:19
str.split(/\s+/).map{|word| word.split(//) }.flatten.each

…で、/\s+/以外は数えられるかな。重そうだ。
56デフォルトの名無しさん:2007/10/31(水) 23:34:14
>>50
は?じゃあ

count.to_a.sort.each{|k,v|

これは素直なわけ?
57デフォルトの名無しさん:2007/10/31(水) 23:39:34
>>56
それはおそらくただのミス
>>42は Hash を sort すると配列が返ってくるということを知らないんだろ
irb> {1=>2, 3=>4}.sort
[[1, 2], [3, 4]]
「配列」が云々というのはカウント時のデータ格納手段についてだろうし
58デフォルトの名無しさん:2007/10/31(水) 23:44:03
そこは表示用に簡易的に(適当に)書いてるだけだろ
配列がいいって言うならその理由をちゃんと書け
59デフォルトの名無しさん:2007/10/31(水) 23:46:53
素直どうこう言ってる奴がいたから、その浅はかさバカにしてみただけだよ。
60デフォルトの名無しさん:2007/10/31(水) 23:59:06
とりあえずいきなり配列を持ち出してなおかつ領域確保する>>43は時代遅れの化石なので自覚するように
61デフォルトの名無しさん:2007/10/31(水) 23:59:36
スレタイにはそぐわないかもしれんが、珍しく内容のある議論
してるんだから、煽るのはやめよーぜ。
62デフォルトの名無しさん:2007/11/01(木) 00:00:25
はい、むかついたのであおってみました
63デフォルトの名無しさん:2007/11/01(木) 00:08:18
話についていけなくてムカつくのは、
一定未満の学歴の人にはしばしばあることらしいです。
64デフォルトの名無しさん:2007/11/01(木) 00:13:06
>>63 だから煽るなって。
65デフォルトの名無しさん:2007/11/01(木) 00:14:28
>>56のは、ミスにしても流れからしたら素直だろ
66デフォルトの名無しさん:2007/11/01(木) 01:02:02
>>65
あれが素直なら、
↓も素直だろ

>if count[i] > 0 then のどこが素直なのかと
67デフォルトの名無しさん:2007/11/01(木) 02:41:36
>if count[i] > 0 then
コレは十分素直だと思うけど。

HashかArray,数える部分はどっちが素直かと聞かれれば、個人的にはHashかな。
何かの種類別にカウントする時に、「この時はHashあの時はArray」ってやるより、
「とりあえずHash」って方が頭使わないから。
頭使わないってことは、ある意味「素直」ってことなんじゃね?

ま、「素直」の意味の取り方次第なんだろうけどね。
68デフォルトの名無しさん:2007/11/01(木) 03:59:15
Array版のほうでサイズを255って決めうちしてるところ以外は
正直、どっちでもいいと思う。
69デフォルトの名無しさん:2007/11/01(木) 04:19:11
いや、今回の配列のかっこ悪いとこは2つあって

・要素数が事前に決め打ち
・意味的には count[chr-1] であるべきだった(いやこれは別にどうでもいいが)
・文字と対応させるには配列の番地を流用しなければならない

あれ、3つになるか。まあいいや。

alphabets = Array(26, 0)
File.read("test.txt").each_byte{|c|
alphabets[c-97] += 1
}
alphabets.each_with_index{|count,i|
puts "#{(i+96).chr}は#{count}回です" unless count.zero?
}

だから、255でない、たとえこれでもやっぱかっこ悪いと思う
70デフォルトの名無しさん:2007/11/01(木) 05:20:09
それを見て配列にする利点ってのがますます分からなくなった
そもそもこんなに引っ張るほど深いテーマでは無いのだろうけど、
煽るだけじゃなくて利点か意図を説明してほしい、>>43
71デフォルトの名無しさん:2007/11/01(木) 05:47:28
こんな所でこんな小さなことで熱くなってどうする、落ち着け。
72デフォルトの名無しさん:2007/11/01(木) 07:46:11
43じゃないけど
>>70
・わざわざソートする必要がない
・毎回ハッシュ値を計算する必要がないから速い
・Hashのようなデータ構造を組み込みでもってない言語でも使える(まあこのスレ的にはおまけの理由だな)

汎用性という点ではHashを使ったほうがいいけど、今回のお題は『アルファベットの出現頻度』を数えるのが目的であり、キーとなる値の範囲が明確で、しかも順番に並んでいる値だから、配列でも十分自然だと思う。
マルチバイトうんぬんいいだす>>53みたいなのは問題を自分勝手に拡張しててわめいてるようにしかみえない。

>>69
>いや、今回の配列のかっこ悪いとこは2つあって
>・要素数が事前に決め打ち
だって問題自体が要素数を決めうちしてるんだから、べつにいいじゃん。
しかもRubyの配列は固定長ではなく自動的に長くなるから、気にする必要ないと思うけど。
>・意味的には count[chr-1] であるべきだった(いやこれは別にどうでもいいが)
なんで1引く必要があるの?
>・文字と対応させるには配列の番地を流用しなければならない
なぜこれがかっこわるいの?アルファベットというデータの性質を利用した、ごく普通の方法だと思うけど。
73デフォルトの名無しさん:2007/11/01(木) 10:51:00
Array, Hash が自然と思うかどうかはその人の経験じゃないのかな。
Hash 自体が初心者にはわからん、という考えも、初心者には Hash も
Array も一緒という考え方もありうるし。今まで他言語 (Fortran, C/C++,
Java, Pascal, etc)を長く使ってた人は考えないとすぐなんでも Array にすると思う。
74デフォルトの名無しさん:2007/11/01(木) 10:57:33
配列の添え字でアクセスするかハッシュのキーでアクセスするかってのは結構深いかと


まあそのへんはどっちでもいいっちゃいいんだけどな
今回の配列のカッコ悪さの本質はAsciiコードと配列添字の関係のあたりだと思う
75デフォルトの名無しさん:2007/11/01(木) 11:05:38
スクリプト作成の見通し思考中にInteger#chrをどれくらい普通と思えるかどうかにかかってる。
これが平気な人はArrayの数字をアルファベットに変換することを何とも思わん。
これに「うへえぇ」と感じる人はHashを使うはず。

てか、こういう枚挙が全く未経験なのに「いきなりHashを選択できる」人ってそうはいないだろ。
たいていArray(とHash)を検討して、Arrayではどこかが「面倒」に思えたからHashを使おうかと考えるんじゃね?
76デフォルトの名無しさん:2007/11/01(木) 11:12:01
>>75
まず Array があって Hash という考え方はやっぱり C とかをまず
勉強した人の発想だと思う(俺もそうだけど)。Perl/Ruby から入って
くれば、頻度を数える→Hash というのは教科書の典型例。例えば言葉の頻度の例とか。
(教科書は元が英語だから日本語になると厄介だけど)
77デフォルトの名無しさん:2007/11/01(木) 11:18:21
>>75
・一番最初に考えたデータ構造

(a 2個) (b 14個) (c 0個) (d 5個) ...

・配列にしてみる

[ ['a',2], ['b',14], ['c',0], ['d',5], ...]

・ちょwwwwこれただのハッシュwwww

{'a'=>2, 'b'=>14, 'c'=>0, 'd'=>5, ...}

・ハッシュへの登録方法を考える

h[文字abc] = 回数123

・おk
・ハッシュは順番がないから結果表示時に困ったことになりそう
・Hash#sortがあったのでsortしてみるとどっかで見た[ ['a',2], ['b',14], ['c',0], ['d',5], ...]に
・マニュアルのArray#assocをしばらく眺める
・うーん、使ったことないしハッシュでいいや
78デフォルトの名無しさん:2007/11/01(木) 11:18:26
>>75
C とか Perl の経験もなく、いきなり
アルファベット → 数値 → Array のインデックス
という発想というか選択ができるひとも最近は少ないんじゃないかなあと思ったり。
79デフォルトの名無しさん:2007/11/01(木) 11:25:27
ASCIIコードの利用がナチュラルに検討範囲に入るのはBASIC/マイコン世代の思考だと思ってる

いや割とマジ
80デフォルトの名無しさん:2007/11/01(木) 11:37:45
>>77
> 配列にしてみる
や、
> (a 2個) (b 14個) (c 0個) (d 5個) ...
というペア構造を見たら一発でハッシュを考えて欲しいなとちょっと思う
81デフォルトの名無しさん:2007/11/01(木) 11:42:06
>>79
配列のインデックスに使おうとすると範囲外をちゃんと検出して
例外にしてやらなきゃだよな...とか考えてしまった自分の頭の
硬さにorz

ハッシュでやればとりあえずどんな文字でもカウントしちゃえる
ように作れるわけだし
82デフォルトの名無しさん:2007/11/01(木) 12:43:25
>>75
>スクリプト作成の見通し思考中にInteger#chrをどれくらい普通と思えるかどうかにかかってる。
違う。HashのほうでもInteger#chrを使ってる。>>42をよくみてみろ。

>>52
>このご時世にスクリプト言語でASCIIコードなんぞ持ち出すのが激しく嫌
文字コードはHashのプログラムでも使ってるだろ?自分が理解できないからって駄々こねるなよ。
>文字コードの細かいところが関わった処理かと思ったら何よコレって感じ
どこが細かいのかさっぱりわからん。>>42>>43もeach_byteしてる時点で、文字コードを使ってる点ではまったく同じなんだけど。


今回は『アルファベットの文字数』を数えるのが目的だから、Hashでも配列でもどっちも自然に書ける。
『配列は不自然』とか『文字コードを意識するのが面倒』いってるやつは頭が固すぎ。やり方がひとつしか思いつかない、発想が貧困なだけ。
そういうやり方もあるね、で終われば済む話。自分の知能の貧困さを認めず『配列は不自然』とか相手を罵倒するほうがよっぼと不自然。

でも正直言って>>43のプログラムもうまくない。たぶんHash相当が組み込みではない言語から入ってきたRuby初心者だろうけど。
count = Array.new(256, 0)
File.read("test.txt").each_byte {|c| count[c] += 1 }
count.each_with_index {|n, i| puts "#{i.chr}: #{n}" if n > 0 }
83デフォルトの名無しさん:2007/11/01(木) 12:57:44
個人的には外部化してるから改行とか意図しない文字を考慮してしまうなぁ・・・
8483:2007/11/01(木) 12:58:16
ageすまん
85デフォルトの名無しさん:2007/11/01(木) 13:00:41
もしかして、each_byteに拘ってるやつがいるのか?
前スレのfile.split(//)で一旦配列にするやつあたりが常道だろ? ASCIIコードを考える必要すらない。
なんで遠回りな>>42をいちいちベースに持ち出すんだい?
ってこっちのスレに貼られてないな

>>997
hash = {}
str.split(//).each do |c|
if hash[c].nil?
hash[c] = 1
else
hash[c] += 1
end
end
p hash
______________________________________________________________

>>998
file=File.open('g:\test.txt').read
h=Hash.new
file.split(//e).each do |s|
h[s] = 0 unless h.has_key?(s)
h[s] = h[s] + 1
end
h.sort.each do |a|
puts "#{a[0]}は#{a[1]}個です"
end
86デフォルトの名無しさん:2007/11/01(木) 13:21:44
>>85
普通だ
87デフォルトの名無しさん:2007/11/01(木) 13:48:26
>>82
> そういうやり方もあるね、で終われば済む話。

そこで済ましちゃうのは思考停止で良くないというか、
どういうのがより良い方法かとか、こういうときはこっちの方が良いねとか、
あれこれ言い合って論じるのは有意義だと思うけどなあ。

てか、なんですぐそう喧嘩腰な口調になんねん?
88デフォルトの名無しさん:2007/11/01(木) 13:59:43
2chねらーの心理というのは結構複雑で、
「出るところに出たら通用しないレベルの内容である」と自覚しているから2chに書いている一方、
2chの中に居る間は、その書き込みをもって「俺ってなんて"わかってる奴"なんだ」と本気で小鼻をひくひくさせてるんだ。
89デフォルトの名無しさん:2007/11/01(木) 14:03:05
人が議論する場所を2chしか知らないと>>88のようなことを口走ってしまうので気をつけよう
90デフォルトの名無しさん:2007/11/01(木) 14:13:31
とまぁ、こんな感じの「わかったふうな返し」で気分よくなれるわけだ。
91デフォルトの名無しさん:2007/11/01(木) 14:14:39
文字の集計の時点で普通はHashだろw
配列を使う前提がないやつは文字→文字コード(数値)の変換はしない。
更に言えば>>42は文字コードになっちゃったから文字に直してるだけで文字コードなんか欲しくない。
92デフォルトの名無しさん:2007/11/01(木) 14:26:19
>>89
どこでも同じだよな
2ch特有とか言ってるの見ると苦笑するしかない
93デフォルトの名無しさん:2007/11/01(木) 15:02:02
「配列」という名前でも中身は連想配列って言語も結構あるよな
94デフォルトの名無しさん:2007/11/01(木) 20:18:55
よっぽど変態なデータ型つかってるならともかく、HashかArrayぐらいだと
TIMTOWTDIの範囲じゃねーの。お釈迦様の手の上で「俺のが普通」
「いや俺のが」って争っても意味内よ
95デフォルトの名無しさん:2007/11/01(木) 20:58:05
>>94
俺もそう思うよ。結局自分にとって自然な方で処理すりゃいい。
自分のそれまでの経験によって変ってくるわけだから。
実際に書くコードの量もそんな変わらんわけだし。

俺は古い人だからあせっていたら、Hash 使うべきだと思いつつ
Array 使うだろうな。ちょっと考える暇あれば Hash 使うと思う。
96デフォルトの名無しさん:2007/11/01(木) 21:58:11
本筋から外れるけど、
Ruby 1.9の ?x リテラルは1文字の文字列を返すんだよね。
あと str[i] とかも。
97デフォルトの名無しさん:2007/11/01(木) 22:14:53
そうです。
String#ordで文字コードを得ます。
98デフォルトの名無しさん:2007/11/01(木) 22:28:09
じゃあ、"A"[0][0][0][0][0][0][0][0][0][0] は "A" を返すの?


いや、それはどうでもいいか。
それより、

str = "long long long long long .................................. string"
str[5555]

とやると、文字列の最初から一文字づつ数えるようになるの?
99デフォルトの名無しさん:2007/11/01(木) 22:36:15
>>98
どっちも、そのとおり。
100デフォルトの名無しさん:2007/11/01(木) 22:39:40
>俺は古い人だからあせっていたら、Hash 使うべきだと思いつつ
>Array 使うだろうな。ちょっと考える暇あれば Hash 使うと思う。

一文字ごとに切り出すんなら
自前でHash値の計算をするときに
それをコードとしても差し支えなかろう
でoffsetを0にすればArrayと等価であることがわかる
101デフォルトの名無しさん:2007/11/01(木) 22:44:21
>>99
じゃあ、str[n] って、短い文字列にしかもう使えないな。
102デフォルトの名無しさん:2007/11/01(木) 22:55:09
あんまりつかったことないな。
つーか、当然文字が返ると思ってたら数値が返ってきてつかいにきー。
103デフォルトの名無しさん:2007/11/01(木) 23:06:53
数値が返ってきた時点で頭から活用法が消える
104デフォルトの名無しさん:2007/11/01(木) 23:36:31
>>102-103
いやいや、 str[n]という形では使ってないかもしれんけど、
str[n..,m]というよう風な形では使ってるんじゃ?
105デフォルトの名無しさん:2007/11/01(木) 23:49:22
お前らなかなか面白い話をしてるじゃないか
106デフォルトの名無しさん:2007/11/03(土) 02:30:59
Rubyのメソッドの引数は全てJava同様の「参照の値渡し」だと聞いたのですが,

def hoge(a)
  a = a + [2]
end

b = [1]
hoge(b)
p b # => [1,2]が返って欲しいが [1] が返る

となります。
本当に参照の値渡しなんでしょうか?
107106:2007/11/03(土) 02:34:53
すみません,自己解決しました。
a=a+[2]の時点でaという仮引数が新たなArrayオブジェクトを参照してしまったので,元のオブジェクトに変更が加わっていないんですね。
108デフォルトの名無しさん:2007/11/03(土) 02:37:15
自己解決してないけど、まあいいか
109デフォルトの名無しさん:2007/11/03(土) 04:40:34
def hoge(a)
a << [2]
end

b = [1]
hoge(b)
110デフォルトの名無しさん:2007/11/03(土) 07:28:00
>>109
どーでもいい事かもしれないけど、それだと [1, 2] にならないよ
111デフォルトの名無しさん:2007/11/03(土) 09:47:48
a.concat([2])だな
112デフォルトの名無しさん:2007/11/03(土) 09:55:13
>>111
素直に a.push(2) ではダメ?

ちょっと気になってやってみたら >>106 も [1,2] になる。(ruby-1.8.5)


113デフォルトの名無しさん:2007/11/03(土) 10:04:12
>>112
> ちょっと気になってやってみたら >>106 も [1,2] になる。(ruby-1.8.5)
いや、それありえないから。

それはそれとして、配列に要素を追加したいのなら << か push が、配列に配列を連結したいのなら concat が、それぞれ「素直」だと思う。
114デフォルトの名無しさん:2007/11/03(土) 10:13:12
>>112
手元で試したら << も push も要素の追加になったぞ(ruby-1.8.5)
115デフォルトの名無しさん:2007/11/03(土) 10:54:35
> ruby -ve "p [1] << [2]"
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mingw32]
[1, [2]]
116デフォルトの名無しさん:2007/11/03(土) 11:11:53
配列に「1個だけ足す」のはカッコの使い方とか間違えやすいから気をつけないとな

配列への << は見かけだけ汎用性がある状態だから嫌い
concatかpushのどちらかだけを使うようにしてる
117デフォルトの名無しさん:2007/11/03(土) 13:53:26
def hoge(a)
a << 2
end

b = [1]
hoge(b)
118デフォルトの名無しさん:2007/11/03(土) 13:56:25
a = [1, 2, 3] + [4, 5, 6]

のときって

[5, 7, 9]

になって欲しいよね

[1, 2, 3, 4, 5, 6]

って違和感ありまくり
119デフォルトの名無しさん:2007/11/03(土) 13:57:45

[1, 2, 3, [4, 5, 6]]

じゃないのか?
120デフォルトの名無しさん:2007/11/03(土) 14:01:50
>>118
なぜMatrixを使わない

>>119
[1, 2, 3, 4, 5, 6]で合ってるよ
121デフォルトの名無しさん:2007/11/03(土) 14:06:49
>>113
> >>112
> > ちょっと気になってやってみたら >>106 も [1,2] になる。(ruby-1.8.5)
> いや、それありえないから。

ありえない、ってやってみたの?
p [1]+[2] も [1,2] になるし、>>106 も [1,2] 返す。

ありえないという根拠を教えてもらえるかな?
122デフォルトの名無しさん:2007/11/03(土) 14:29:41
だから数値以外に記号の操作使うのはミス誘発しがちでイヤなんだよなあ

>>120
[1, 2, 3] + [4, 5, 6] が [5, 7, 9] になるのはごく普通に数学の行列の計算だよな
行列とみなして計算させれば一発だ

irb> require 'matrix'
irb> (Vector.elements([1,2,3]) + Vector.elements([4,5,6]) ).to_a
[5, 7, 9]
123デフォルトの名無しさん:2007/11/03(土) 14:37:07
>>121
それは君がirbで実行していて hoge(b) の返り値を見てるからだよ
他の人は p で表示される b の値を見てる

irb> def hoge(a)
irb> a = a + [2]
irb> end
nil
irb> b = [1]
[1]
irb> hoge(b)
[1, 2]
irb> p b
[1]
nil
irb>
124デフォルトの名無しさん:2007/11/03(土) 14:43:55
def hoge(a)
a += [2]
end

b = [1]
hoge(b)
p b # => [1,2]が返る
125デフォルトの名無しさん:2007/11/03(土) 14:45:20
>>123
えぇそんなことだったの?無意識のうちに hoge(b) を見ていた。
irb ではないけど。

#!/usr/bin/ruby
def hoge(a)
a = a + [2]
end

b = [1]
p hoge(b)

初めの人もそういう問題だったの??それはこんな凝ったことじゃなくても

x=1 ; x+1; p x → x=1; x=x+1; p x

ってだけなんだが。
126デフォルトの名無しさん:2007/11/03(土) 14:48:05
元のソースみりゃそう書いてあるが
127デフォルトの名無しさん:2007/11/03(土) 14:52:06
いや、だから単にメソッド内のスコープの問題
それ以降のレスも「オブジェクトIDが更新されない」concatとか出してるだろうに
128デフォルトの名無しさん:2007/11/03(土) 14:54:02
くっ!この>>125・・・できるっ!
129デフォルトの名無しさん:2007/11/03(土) 15:03:12
なんという手強い>>125
これが真の初心者か

そしてそんな125をスルーせず、きちんと解答するお前らの優しさに感動した
130デフォルトの名無しさん:2007/11/03(土) 15:03:52
>>125

>>106
よく嫁
131デフォルトの名無しさん:2007/11/03(土) 15:05:27
>>106は参照の値渡しとか言ってるんで要は

b = [1]
before = b.__id__
hoge(b)
after = b.__id__

p after.eql?(before) #=> trueになって欲しい

ってことだよね?
hoge の中の動作は = や += では駄目で concat や push はおkのはず
132デフォルトの名無しさん:2007/11/03(土) 15:06:21
流れ読まずにすまんが
新ロゴ
http://pc11.2ch.net/test/read.cgi/tech/1193668038/l50
133デフォルトの名無しさん:2007/11/03(土) 15:12:59
>>131
class Hoge

def initialize(data)
@data = data
end



という自作クラスで、メソッド間のデータ受け渡しに @data 流用して @data['rawhtml']=html とか使いまくってたら
引数の元の data が凄いことになってて泣いたことを思い出した
dup する癖つけたほうがいいんだろうか
134デフォルトの名無しさん:2007/11/03(土) 15:18:18
hoge! にしないといけないんじゃなかったっけか
135デフォルトの名無しさん:2007/11/03(土) 15:22:38
>>118
それはArrayの振舞いじゃない。
ベクトルとか行列の振舞いだ。
136デフォルトの名無しさん:2007/11/03(土) 15:25:26
なるべく参照透明で非破壊的にしたほうが、後々、見通しいいよ。
代入は操作を非汎用的にしてしまう。
137デフォルトの名無しさん:2007/11/03(土) 15:41:44
gemsでインストールしたライブラリのパスは
どのように設定してますか?

mailfactory-1.2.3というライブラリをgemsでインストールしたら,
/opt/local/lib/ruby/gems/1.8/gems/mailfactory-1.2.3/mailfactory.rb
としてインストールされました。
そこで,
export RUBYLIB=/opt/local/lib/ruby/gems/1.8/gems/mailfactory-1.2.3/
としたのですが,これだと,gemsでインストールしたライブラリは,
その都度,
export RUBYLIB=/opt/local/lib/ruby/gems/1.8/gems/mailfactory-1.2.3/:/opt/local/lib/ruby/gems/1.8/gems/hoge/
みたいにRUBYLIBに追加していくことになります。

そんなものなのですか?それとも,何か工夫してる?
138デフォルトの名無しさん:2007/11/03(土) 15:48:16
そんなものなのです
139デフォルトの名無しさん:2007/11/03(土) 16:03:01
>>137
以下の二通りの方法がある

1. gemの中身(lib)をsite_rubyディレクトリに手動でコピー
2. 環境変数RUBYOPTに -rubygems を追加
140デフォルトの名無しさん:2007/11/03(土) 16:14:07
2. 環境変数RUBYOPTに -rubygems を追加

で間違いないが、利用するスクリプトに

require 'rubygems"

するやりかたもある。
141137:2007/11/03(土) 16:14:17
>>139
参考にググったら,先にrequire 'rubygems'をしておく
という方法もあるようです。

2.の方法か,require 'rubygems'が良さそうです。

どうもありがとうございました。


142デフォルトの名無しさん:2007/11/03(土) 17:23:34
プログラミングRubyライブラリ編(第2版)って
標準ライブラリをすべて掲載してる?
「すべての標準ライブラリを...」って書いてるけど
143デフォルトの名無しさん:2007/11/03(土) 17:51:51
「標準ライブラリ」だからな
144デフォルトの名無しさん:2007/11/03(土) 17:59:13
先行書籍で解説されている基本的な部分は省略されている可能性が
しかもどこが省略されてるかは本には書いてない
145デフォルトの名無しさん:2007/11/03(土) 19:28:35
>>137
横から乗っかってスマソ
mailfactoryとTMailは,どっちがおすすめ?

TMailは,2004年で0.10.8のまま開発が止まっているし,
rubygemsではインスコできないし
でも,日本語メールの扱い良さげだし
146デフォルトの名無しさん:2007/11/03(土) 19:32:55
TMailは青木さんからメンテナ交代になって、
放置されてたパッチが取り込まれつつある。
次回リリースからgem化されるようだ。

http://rubyforge.org/projects/tmail
147デフォルトの名無しさん:2007/11/03(土) 19:33:46
ごめん、gemも出てたわ。

148デフォルトの名無しさん:2007/11/03(土) 20:27:06
>>147
うわっ,ほんの数週間前じゃん。知らんかった。
149デフォルトの名無しさん:2007/11/03(土) 20:44:22
>>141
もう解決しちゃったみたいだけど、
マニュアルに、3通りの方法が書いてあるよ。
ttp://docs.rubygems.org/read/chapter/3#page70

3番目のRUBYOPTを使うのが良いって書いてある。
150デフォルトの名無しさん:2007/11/04(日) 00:03:16
gem search tmail -r
gem query -n tmail -r
どちらをやっても,見つからないっす。どして?
151デフォルトの名無しさん:2007/11/04(日) 00:13:09
>The gem servers are not updating right this minute as the index is being
>rebuilt, however, once they are up you should be able to:
とはあるが、10月29日づけだし更新されてないなんてありえんよなぁ常考。

しかし、確かにないようなので、↓ここから落としてローカルgemで入れとくとか。
http://rubyforge.org/frs/?group_id=4512
152デフォルトの名無しさん:2007/11/04(日) 11:38:20
サブクラスからでは参照できないメンバ変数を定義したい場合は
どうすればいいのでしょうか?
153デフォルトの名無しさん:2007/11/04(日) 11:47:11
>>133
他のクラスの変数データをどうやって参照すれば適当なのかってよくわからん

def initialize(data)
@data=data
end
としておくべきなのか
def initialize
@data=BaseClass.data
end
とするほうがいいこともあるのかいつも悩む

変数データを実際にいちいちコピーしてるわけじゃないんだから名前参照するくらいガンガンやっとけという気もするし
名前参照するだけならインスタンス変数として参照するようにしたほうがスマートじゃね?とか
initializeするクラスのほうで利用するクラス決め打ちしちゃったら
将来に決め打ちした以外のクラスから利用したくなった時死にそうになったりしねえ?とか
154デフォルトの名無しさん:2007/11/04(日) 12:09:38
>>152
Rubyでは「サブクラスから参照できないインスタンス変数」を作ることはできません
変数の名前の衝突をシステムで回避することはできませんので変数名で泥臭く対処してください

大昔「プライベートインスタンス変数を作ろうぜ」という話が出たことはあるようだけど、結局どうなったんだか

# -----------------------------
class Main
def initialize
@hoge='hoge!'
end
attr_reader :hoge
end

class Sub < Main
def run
p @hoge
end
end

p Main.new.hoge #=> "hoge!"
p Sub.new.hoge #=> "hoge!"
Sub.new.run #=> "hoge!" ← nilになって欲しい
155152:2007/11/04(日) 13:11:31
>>154
なるほど。数少ない(シンタックス面での)Rubyの欠点みたいなんですね、
ありがとうございました。
156デフォルトの名無しさん:2007/11/04(日) 13:21:51
漏れはそれは欠点だとは思わない
157デフォルトの名無しさん:2007/11/04(日) 13:29:04
サブクラスから利用できることは利点は多いが
制限の選択肢は提供されてもいいとは思う
158デフォルトの名無しさん:2007/11/04(日) 13:34:32
というか、むしろサブクラスに対してもプライベートな変数を
デフォルトにすべきでしょ。
値の設定、取得はattrつかえばできるんだし、スーパークラスで使われている
メンバ変数を知らない内に変更しちゃうデメリットは結構大きいと思う。
159デフォルトの名無しさん:2007/11/04(日) 13:50:36
ttp://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-dev/14068?13916-14423
> Date: Wed, 25 Jul 2001 16:45:15 +0900

ということで昔からプライベートインスタンス変数の話はあるな
160デフォルトの名無しさん:2007/11/04(日) 15:56:35
>>157
利点って何?

それは「オブジェクト指向言語Ruby」において、本当に利点と言っていいべき利点なの?
161デフォルトの名無しさん:2007/11/04(日) 16:16:45
隠蔽・カプセルブラックボックス化よりも
再利用性を重視したのがRailsだろ

どこぞのJavaみたいにコントロールに不満がでて
自分で継承して機能追加しようと思ったら
finalばっかりで結局新たに作らにゃならんとか糞だろ
162デフォルトの名無しさん:2007/11/04(日) 16:23:58
まあ名前がぶつかった(と思われる)ときに警告が出れば十分じゃないのかな
163デフォルトの名無しさん:2007/11/04(日) 16:27:19
オーバーライドしたのかただの継承なのか、はたまた親クラス固有の属性なのか定かではない
164デフォルトの名無しさん:2007/11/04(日) 16:35:51
>>161
railsはあんま関係ないでしょ。
インターフェイスさえしってればスーパークラスを拡張できるというのが一応OOPの利点なのに、
スーパークラスのインターフェイスだけでなく、メンバ変数の名前も知っておかないと
バグの原因になってしまうRubyのスコープが今の論点なんだから
165デフォルトの名無しさん:2007/11/04(日) 18:01:49
なんとなくプログラムを勉強し始めた初心者ですが、
rubyでできる実用的なことってなんでしょうか。
今、文字列ををアルファベット順に並べ替えるとかやっていたんですが。
166デフォルトの名無しさん:2007/11/04(日) 18:03:49
>>165
君がやりたいことがないならRubyは何もしてくれない
素直にプログラミングは諦めて読書でもするといい
167デフォルトの名無しさん:2007/11/04(日) 18:14:59
>>165
rubyじゃ実用的なことは何もできません。
pythonおよびPerlなどに移行することをおすすめします。
168デフォルトの名無しさん:2007/11/04(日) 18:15:22
>>165
RSSリーダでも作ってみたら?
WindowsだかLinuxだか何か知らないけど、
WindowsでGUIなら、Rubyで実用アプリって
俺はオススメしないけどな。
169デフォルトの名無しさん:2007/11/04(日) 18:20:46
>>168
RSSを利用してる人なら真っ先に思いつく
つまりRSSを使ってないということでRSSを選ぶ理由はゼロだ

プログラム言語は目的にはならない
作りたいものややりたいことが無いならプログラム言語を学ぶ必要はない
170デフォルトの名無しさん:2007/11/04(日) 18:45:32
>>169
まぁまぁ、それはもっともなんだけども。

他の言語やってたならまだしも、多分まだ「プログラムで何が出来るか」も
分からない状態なんだろうし、取っ掛かりぐらいは無いと辛いっしょ。

そもそも作りたいものややりたいことがある人間は、
最初の言語にRubyなんて選択しないと思うよ。
171デフォルトの名無しさん:2007/11/04(日) 20:18:26
初心者のうちは「何ができるのか」なんてよくわからないんだよね
そのことと「やりたいこと」のあるなしは別問題

>>165
RUBYの宿題教えてください。
ttp://pc11.2ch.net/test/read.cgi/tech/1106572657/

Python の宿題ここで答えます Part 1
ttp://pc11.2ch.net/test/read.cgi/tech/1153585095/

この中から自分の出来そうなやつを探してやってみるといいよ
172165:2007/11/04(日) 20:26:46
なんか程度の低い質問をしてしまったようですいません。
プログラムができれば、データ処理とか定型処理が楽にできるのかな、と思ったのがきっかけです。
しかしアルファベット順に並べ替えるとか勉強していると、これが何に応用できるのかなと思いました。
また、DOSプロンプト?でプログラムを実行させているんですが、これが最終的に
どのような形になってPC上やWEB上で活躍するのかイメージがつかめないでいます。
とりあえずみなさんのアドバイスをもとにもっと勉強したいと思います。
レスありがとうございました。
173デフォルトの名無しさん:2007/11/04(日) 20:28:25
>>165
やりたい事は特に無いけどプログラムの勉強はしたいって人には Java がお奨め
ドキュメントが豊富で整然としてる(ruby はここがなってない)
蛇足だけど、本気でプログラムやるつもりの人は C はマスターしとけ
ruby python perl とかはその後でいい
174デフォルトの名無しさん:2007/11/04(日) 20:48:39
全く無目的に言語練習のドリルだけやって一生を終えることもできる本末転倒言語がJava

Javaは情熱もインセンティブも無しで学ぶには「おまじない」が多すぎてなあ
よく言われるけど、

puts 'hello!'

に相当するJavaのコードってどんだけよ、みたいな
175デフォルトの名無しさん:2007/11/04(日) 20:52:52
>>172
俺のお奨め

1. 簡単な定形処理をやるスクリプト。ファイルの整理とかHTMLの自動作成とか
2. CGIスクリプト。Rubyがかなり得意とする分野
3. Ruby/SDLやMyGameでゲーム作る。ただし3Dや高スペックを要求されるものはつらい
4. GUIツールの製作を目指す。敷居は高いがやってみる価値はある

でも他の人も言ってるとおり、そもそも作りたいものがないと
勉強って言っても難しいと思う
176デフォルトの名無しさん:2007/11/04(日) 20:53:09
>>172
文字列の処理も立派なデータ処理なんだが、どういう処理がしたいんだ?
177165:2007/11/04(日) 21:10:12
>>173
Javaと迷ったのですがRubyおすすめといわれ選びました・・・
Cは大学のときにやりましたが理解できず・・・
>>175-176
http://chururun.jp/archives/2006/01/08_2214.php
のようなジェネレータなどもRubyでできるんでしょうか?

また、http://you2be.blog43.fc2.com/の左上で更新サイトをのせていますが
このような自動で生成できるようなものも作りたいです。
サイト作りに関したものがいいです。

他には株式投資もやっているので会社の財務状況まとめるとか、
売買記録のこすとかそういう処理もできますかね?
178デフォルトの名無しさん:2007/11/04(日) 21:10:26
>>172
いずれ余裕が出来たら『たのしいUNIX』でも読むといいよ
知りたいことがいっぱい書かれてるはず(標準入出力、環境変数等)
179デフォルトの名無しさん:2007/11/04(日) 21:23:29
java勧めるならC#勧めるだろ・・・
180デフォルトの名無しさん:2007/11/04(日) 21:24:01
ageすまん
181デフォルトの名無しさん:2007/11/04(日) 22:46:06
Rubyでできないことって言うのは基本的に無いよ。
コマンドベースの処理はもちろん、Webアプリでもデスクトップアプリでも何でも作れる
182デフォルトの名無しさん:2007/11/04(日) 22:52:29
>>172
MacかえばRubyCocoaでアプリもつくれるよ!

と、マカーな俺が言ってみる
183デフォルトの名無しさん:2007/11/04(日) 22:54:37
では、Wiiのゲームも作れますか?
184デフォルトの名無しさん:2007/11/04(日) 23:22:13
>>179
どこの誤爆か分かってしまった
185184:2007/11/04(日) 23:23:09
すまん今の発言は忘れてくれ。勘違いだった
186デフォルトの名無しさん:2007/11/04(日) 23:26:32
>>179
なんで? C# はプラットフォーム依存性高いんじゃない?
C# とかでの携帯ゲームとかある?
187デフォルトの名無しさん:2007/11/04(日) 23:38:35
>>186
どっから携帯ゲームが出てきたか知らんがwまだまだプラットフォームとか気にするレベルじゃないし。
>>165は物作ってる実感がわいてないンだと思うし、直感的に動くWinアプリ作った方が物作ってる気になると思う。
C#⇔javaなら移行はしやすいし。
188デフォルトの名無しさん:2007/11/04(日) 23:47:24
>>187
どうせするならプラットフォーム依存性が低い方が良いと俺は思うけど。
携帯にしろ Unix 系にしろ。C# に簡単に移れるなら別に Java でもいいじゃん。
189デフォルトの名無しさん:2007/11/04(日) 23:55:35
>>150
現在 rubyforge のインデックス作成が腐っている。
http://rubyforge.org/forum/forum.php?thread_id=18879&forum_id=2

だから tamil だけじゃなくて最近リリースされたものは
まだgemではインストールできない。

俺が先週リリースしたものもなorz
190デフォルトの名無しさん:2007/11/04(日) 23:58:18
他のOSで動作させる理由も予定もないのに
「プラットフォーム間の移植性が…」とか言うのはアホ
191デフォルトの名無しさん:2007/11/05(月) 00:01:01
>>165
自分も最近Ruby勉強し始めましたが、同じような印象ですね・・・
間もないので、文字列の並び替えすら作った事ないレベルですが。
(思った理由はちょっと違うかも知れませんが)

C/C++とWinAPIでGUIアプリ作ってて、簡単なのはBATとかVBSで済ますし・・・
WebのCGIとかをPerlの代わりに作る位しか思いつかない。(Perlは使えないしので、代わりに覚える位?)
ただ、それならJava覚えた方がより使えそうな印象を持ってしまう。
流行ってるみたいなので試してみてるけど、
実用的な意味で、「これやるときならRubyがいいな」ってのがあまり思いつかないです。
192デフォルトの名無しさん:2007/11/05(月) 00:02:38
>>188
とりあえずC#触ってみな、>>187の2行目の感覚わかってもらえると思う。

まぁスレチだから終わりって事で
193デフォルトの名無しさん:2007/11/05(月) 00:05:28
>>191
Ruby初心者とプログラミング初心者じゃ視点違うってw

>これやるときならRubyがいいな
それは俺も模索中w誰か教えて
194デフォルトの名無しさん:2007/11/05(月) 00:10:19
>>188
俺は187と同意見かな。
JavaとC#の言語そのものの良し悪しはさておいて、
最初は見た目が派手な方が良いと思う。
だからまぁ、JBuilderみたいなのでウィンドウがチョロっと出せれば、
Javaでも良いと思うよ。

Rubyは・・・うーん・・・VisualuRuby?
195デフォルトの名無しさん:2007/11/05(月) 00:15:56
もう何度も何度も言われてるが、現在のRubyの実際はBetter Perlの域を出ない。
まあ、Better Perlと言える位置に一番近いだけで有り難くて後光が差してはいるんだが。

つーことで、PerlやPHPあたりで
「うわーーーーーめんどくせーーーーーーー」
と思えるようなスクリプトを読み書きできる程度に習熟してからまた来てみてくれ。
そのときにこそRubyのよさやRubyでやりたいことが実感できるはず。
196デフォルトの名無しさん:2007/11/05(月) 00:23:42
RubyやPythonはPerlやPHPに懲りてこそ意味がある
いきなりRubyやPerlを学んでもピンと来なくて当然

あと、Rubyのアウトプットは所詮テキストファイルなので
他の手段でテキストファイルを生成できているのなら
Rubyを学んで「リプレース」する意義は薄いかもしれない

プログラム製作過程が楽しい又は安楽であるというのがウリなので
何か他のプログラミング言語にできないことができるわけじゃない
たとえば、この世の全てのRubyプログラムはPerlで置き換え可能だと思う
197デフォルトの名無しさん:2007/11/05(月) 01:01:12
RubyやPython、あるいはC#なんかでかなりいいとこまでは来てる
だから次出る言語あたりで何とか頼むよ
198デフォルトの名無しさん:2007/11/05(月) 01:51:54
俺はWindowsのバッチをvbsで書くのが嫌になってRubyはじめた。
win32oleが便利すぎ
199デフォルトの名無しさん:2007/11/05(月) 02:24:05
>>198
Windows 限定なら powershell でもいいんじゃまいか?
使った事ないけど。便利そうなんだがMS の解説コーナーの script guy
前置きが長くて読む気がうせる。
200デフォルトの名無しさん:2007/11/05(月) 04:33:58
自分で使ったことないのによく人に薦められるなあ
厚顔無恥に感心するよ
201デフォルトの名無しさん:2007/11/05(月) 04:55:42
お前こそ相当なモンだろ…
202デフォルトの名無しさん:2007/11/05(月) 08:38:07
>>201
言い返せないと意味不明な切り返し方になっちゃうのね
203デフォルトの名無しさん:2007/11/05(月) 11:42:10
俺はよくコマンドプロンプトから一行野郎するなぁ。
Linuxなんかだと標準コマンドで済むこともwinじゃ結構面倒だったりするし。

↓環境変数を改行して表示とか。
ruby -e "puts ENV['Path'].split(';')"

↓cat -n とか。
ruby -pe "printf '%7d ',$." ファイル名
204デフォルトの名無しさん:2007/11/05(月) 11:50:50
納品するときにソース見られたくない(どっちかというとコピーされたくない)のですが
コンパイルとか難読化するツールとかありますか
205デフォルトの名無しさん:2007/11/05(月) 11:53:50
ない
206デフォルトの名無しさん:2007/11/05(月) 11:54:23
>>199
script guy はなんか関係ありそうで全然関係ないことを
うだうだ書いて話を煙に巻くというか
2chでいう釣りとか荒らしと変わらんよなぁ

スルー汁
207デフォルトの名無しさん:2007/11/05(月) 11:56:11
>>204
難読化じゃないけどExerbで圧縮とかなら
208デフォルトの名無しさん:2007/11/05(月) 11:57:35
>>203
環境変数は SET コマンドで表示される
209デフォルトの名無しさん:2007/11/05(月) 11:58:56
http://exerb.sourceforge.jp/opinion.html
作者本人の喜びの声も載ってるのかw
210デフォルトの名無しさん:2007/11/05(月) 12:02:40
>>208
ruby -e "puts ENV['Path'].split(';')"

これと同じことをWindowsのコマンドプロンプトでどうやって出来るか教えてくれ
211203:2007/11/05(月) 12:19:10
>>208
分かりにくい書き方してごめん。
「環境変数Pathを、セミコロンの代わりに改行で区切って表示」
と書けば良かったな。
212デフォルトの名無しさん:2007/11/05(月) 12:39:39
>>189
rubyforgeのインでクッスなおったみたい。
gem search -r tmailでの結果

hotmailer (1.0.1, 1.0.0)
    Package for programatically accessing hotmail accounts

TMail (1.1.0, 1.0.0)
    The Ruby Email Library
213デフォルトの名無しさん:2007/11/05(月) 13:04:26
214212:2007/11/05(月) 14:14:01
さっそくTMailつかおうとおもってますが、gems初心者
コマンドラインでri TMailとしても,白紙の情報...orz

http://i.loveruby.net/ja/projects/tmail/doc/
にはないメソッドも加わっている気配(attachementsなど)

1.0用のどこかサンプルとかマニュアルとか知ってる?

以前はhttp://sonic64.com/2004-07-02.html
ヘッダ用,本文用,添付用それぞれ,インスタンスを作成して
最後に結合してみたいだけど
(ちょー分かりにくいし,オブジェクト指向らしさにかける)
一つのインスタンスで一通のメールに対応できたのかな?
215デフォルトの名無しさん:2007/11/05(月) 18:05:47
>>202
>>199は俺じゃないし、言い返すつもりもないよ
お前の文章からいやらしさがにじみ出ててさあ、何でこんな人間になっちゃったのかと
216デフォルトの名無しさん:2007/11/05(月) 18:16:18
gemsはインストール時にバカみたいにメモリとCPUと時間使うからウンコ
というか一体何にこんなにリソース食われてるんだ?
217デフォルトの名無しさん:2007/11/05(月) 20:07:15
        |
       ∧∧
       /⌒ヽ)  もはようちゃん
      i三 U  
     〜三 |    
      (/~∪    
    三三
  三三
三三
218デフォルトの名無しさん:2007/11/05(月) 20:17:44
>>216
メモリは128MBじゃ足りないよ
219デフォルトの名無しさん:2007/11/05(月) 20:43:39
>>207
古いexerbしか知らんのだけど、最近のexerbって圧縮されるようになったの?
220デフォルトの名無しさん:2007/11/05(月) 21:30:51
>>219
あ、自分で拡張したの忘れてたよ
221デフォルトの名無しさん:2007/11/05(月) 21:44:32
>>218
20分くらいずっとガリガリ言ってて嫌になる
それでたった1行「xxが入ってないので中止します」とかもうね
222デフォルトの名無しさん:2007/11/05(月) 21:55:45
gem嫌いは俺だけじゃないはずだと信じたい
223デフォルトの名無しさん:2007/11/05(月) 21:58:22
もっと時間をかけて土台を作った上で広めるべきだった
不完全なままで無理矢理広まったから面倒でかなわん
224デフォルトの名無しさん:2007/11/05(月) 22:20:47
>>216
コンパイル
225デフォルトの名無しさん:2007/11/06(火) 00:36:25
>>219
昔からzlib圧縮はあったと思う
226デフォルトの名無しさん:2007/11/06(火) 01:12:30
>>225
まじ?試したけどうまくいかなかったような
ダウンしたあとで追加されたんかな
227デフォルトの名無しさん:2007/11/06(火) 11:08:22
あった
228デフォルトの名無しさん:2007/11/06(火) 11:25:36
>>222
嫌いじゃないけど、いきなり使うのは結構恐い。必ずテストする。
ただ、プログラミング自体が目的ではないんで楽して使うことがよくある。
229212:2007/11/06(火) 11:59:16
TMailもMailFacrotyも単体では日本語のメール作れません。
ヘッダや本文をISO-2022-JP (7bit JIS)にエンコードするメソッドがない。
nkfをrequireして自分でやるしかないみたい。

日本語メール作成用のスクリプトなら,MailFactoryを承継して,
新しいクラスを作るのがいいかも
230デフォルトの名無しさん:2007/11/06(火) 12:08:44
そりゃ、規格は日本語専用じゃないからな
エンコーディング変換と記述は外部モジュールで自前でやってくれってことだろ
それはそれで正しい振る舞いだと思うぞ
231デフォルトの名無しさん:2007/11/06(火) 17:10:09
tmail運用して初めて気づくマルチバイト関連のバグ
232デフォルトの名無しさん:2007/11/06(火) 17:20:52
tmail 運用して 初めて マルチバイトの バグ気づくもの
233デフォルトの名無しさん:2007/11/06(火) 23:20:45
以前、goo、OKwave で質問したんですが、やっぱり納得いかなくなりました。
2chでまた質問させてください。

Windows上でRuby使っています。
NetBeansで勉強していて、ファイルはすべてUTF-8で書くようにしています。
以下のコードのように、あるファイルを保存するプログラムを書いて、
日本語ファイル名で保存したとき(この場合、ファイル名はUTF-8の文字列になるんですよね。)、
(1)と、(2)で同じファイル名の出力を期待しているんですが、名前が変わってしまいます。なぜでしょうか。
Windows上では、ファイル名はShift-JISなどに変換してから保存しないとうまくいかないのでしょうか。
RubyがUTF-8扱えないのか、Windowsの問題なのか。もし後者なら、Linuxマシンを調達しようかと考えてます。

saving_folder = "C:/testrubyfolder/"
filename = "ユニコードです"
puts filename #←(1)
open(saving_folder + filename , "w"){|file|
file << "test"
}
puts Dir.entries(saving_folder) #←(2)
234デフォルトの名無しさん:2007/11/06(火) 23:49:54
むしろ、この回答のどのへんが気に食わないんだよ
ttp://oshiete1.goo.ne.jp/qa3413696.html
235デフォルトの名無しさん:2007/11/07(水) 00:13:38
全くわからんので適当に喋るが、WindowsのRubyはUTF-8ファイル名システムを理解できないんだろう
Dir.entriesのほうは
「UTF8の"ユニコードです"という文字列をShiftJISだと思い込んでファイル名として書き込まれたものをそのままShiftJISとして表示してる」
だけなんじゃないかね
require 'nkf'して

puts NKF.nkf('-sU', Dir.entries(saving_folder).to_s)

とすればおそらくお望みの表記になるはず
236デフォルトの名無しさん:2007/11/07(水) 00:28:25
require 'nkf'
s = 'ユニコードです'
puts s
File.open(s,'w'){|f| f.write(s)}
File.open(s,'r'){|f| puts f.read}

> ruby utf8.rb
繝ヲ繝九さ繝シ繝峨〒縺
繝ヲ繝九さ繝シ繝峨〒縺


うむ、ファイルアクセスするぶんには問題ないな(w
237デフォルトの名無しさん:2007/11/07(水) 04:25:17
添え字が1からはじまる配列が欲しいのですが、
いかにも既出っぽいのに見つけられない。
238デフォルトの名無しさん:2007/11/07(水) 04:38:49
添字に1を足しなさい
239デフォルトの名無しさん:2007/11/07(水) 04:48:34
>>238
a.index(x)の返値がちゃんと補正されるとか、
そういう細かいところをやろうとするとかなり面倒です。
すでにそういうクラスがあるとおもうのですが?
240デフォルトの名無しさん:2007/11/07(水) 06:03:32
>>238
無いよ。何であると思ったの?VB.NET ですら 0 なのに。
配列は 0 ではじまり、0 または 長さ -1 でおわる。
そうでない言語は糞。異論は聞かないし認めない。
241240:2007/11/07(水) 06:06:34
>>238 ごめん、レス番書き間違えた。239 ね
242デフォルトの名無しさん:2007/11/07(水) 06:33:33
>>240
そうじゃなくて。
1から始まる連番と要素が結びついたコンテナクラスが欲しいんです。
これが0だったら単にArrayを使い回せばすむ話。
添え字の細工をクラスに隠蔽するのは自然な発想だとおもうんですが?
243デフォルトの名無しさん:2007/11/07(水) 06:48:41
VBでもやっと0が発見されたのに
わざわざ退化するようなことして楽しい?
244デフォルトの名無しさん:2007/11/07(水) 06:57:02
配列が0オリジンであるべきだということには異論はないけどね。
自然数の連番って頻出するとおもうんだけどなぁ。
0を隠蔽したくならないのかなぁ?
245デフォルトの名無しさん:2007/11/07(水) 07:00:08
ageと全角英数字が揃うと、9割方はこういうレベルだな。
不思議なくらい高確率。
246デフォルトの名無しさん:2007/11/07(水) 07:01:39
class MyArrayでも作ったら簡単にできるんじゃないの?
>>239みたいな#indexとかの補正も別に細かくないし、面倒でもない。

俺はそんな馬鹿なことはやらないってだけ
247デフォルトの名無しさん:2007/11/07(水) 07:08:10
まあ自分で書いたんだけどさ。
こういうレベルなのは初心者スレッドなんだから勘弁してよ。
248デフォルトの名無しさん:2007/11/07(水) 07:17:41
なんか気が立ってるのか?そんなに怒らなくてもいいじゃないか。
>>237 に対する答は
そういうクラスは用意されてない。
ほしいなら Array のサブクラスでも作ってください。
で、いいんじゃね?
249デフォルトの名無しさん:2007/11/07(水) 07:27:55
>>237
なんとしても 1 からはじまって欲しいなら Hash 使ったら?
set,get は [] でできるし繰り返しは
hash.keys.sort.each {|key| val = hash[key] } とか
250sage:2007/11/07(水) 07:36:41
>>249
連番を保証するのに手間暇かかるし、
Arrayの添え字をいじる方がいい。
251デフォルトの名無しさん:2007/11/07(水) 07:37:27
ありゃ、ageたったw
252デフォルトの名無しさん:2007/11/07(水) 08:09:36
反論が過剰反応過ぎて吹いたwww
なんか1オリジンの配列に嫌な思い出でもあるのか

いじる必要があるのは
[]、at、delete_at、index、rindex、insert、slice、values_at、
each_index、each_with_indexぐらいか。あれ意外に多いな
253デフォルトの名無しさん:2007/11/07(水) 09:20:08
別にArrayクラスをそのまま使って、単に最初の要素をダミーデータにすればいいだけじゃないの?
eachつかうときは最初の要素をはじくようにする必要あるけど。
254デフォルトの名無しさん:2007/11/07(水) 09:22:09
つうか初心者に厳しいやつはここにくるな。初心者スレはお前みたいなのが威張り散らすとこじゃねえ。
255デフォルトの名無しさん:2007/11/07(水) 09:51:24
教える側も初心者ってこった
256デフォルトの名無しさん:2007/11/07(水) 10:13:53
だから自分で作れと
それ以上の回答はないぞ
257デフォルトの名無しさん:2007/11/07(水) 10:16:56
>>254
誰宛か不明だが(明らかに複数人が回答してるし)、「質問に対して適切な回答をしている」時点で、
初心者スレに必要な初心者への優しさは十分満たしてるだろう。
この場合、「その目的自体がアホだ」ということが色んな角度から書かれているよね。十分すぎる。

この回答を与えずに引っかき回しているなら、確かにそれは「初心者スレにあるまじき反応」だろうけど。
「その目的はアホだ」ではなく「お前はアホだ」で返したりね。でもそんなの>>245くらいしか見当たらん。

それとも、初心者には常に敬語を使え、へりくだれ、最後は「ご利用頂きまことにありがとうございました。
またの起こしをお待ちしております」で締めろ、みたいな話?
258デフォルトの名無しさん:2007/11/07(水) 10:27:45
>「その目的自体がアホだ」ということが色んな角度から書かれているよね
(´・ω・`)?
259デフォルトの名無しさん:2007/11/07(水) 10:33:01
mime-types (1.15, 1.13.1)とshared-mime-info (0.1)
どっちが多数派?主従といってもいいのかな?

http://d.hatena.ne.jp/keita_yamaguchi/20070805/1186304326(一応両者に得手不得手があることをふまえた上で)
260デフォルトの名無しさん:2007/11/07(水) 10:59:03
>>248
んっんー・・・
俺の記憶違いじゃなきゃ、組み込みクラスのArrayを継承するのは、リファレンス的に非推奨と違ったか?
やるんならインスタンス変数にArrayな変数を持ったラッパクラスを作ることになるのかな
261デフォルトの名無しさん:2007/11/07(水) 11:00:23
>「その目的自体がアホだ」ということが色んな角度から書かれているよね

んなことどこにどんな角度で書かれてるんだ、っつー話で、
>>248, >>252 あたりのは「適切な回答」と思われ。

Smalltalk とかもそうだし、配列の添字が one-origin ってそんなにアホでもないと思う。
262デフォルトの名無しさん:2007/11/07(水) 11:03:19
言語仕様のレベルで既に1から始まってるなら問題ないんだよ
自力で1から始まる配列のようなものを作るのも問題ない
263デフォルトの名無しさん:2007/11/07(水) 11:44:38
収集したデータからHTMLを生成しようと思います

諸般の事情でヒアドキュメントの形式ではなく、HTMLを表す変数に << で追加していく動作をしてます
で、エラーなどが起きた場合、data_Aは存在しますが、data_Bが存在しないことがあります
それの対応は
---------------------
html = 事前のいろいろ
html << mkhtml_from_data_A
html << mkhtml_from_data_B


def mkhtml_from_data_B
return 'エラー:Bのデータがありませんでした' if data_B.empty?

end
---------------------
html = 事前のいろいろ
html << mkhtml_from_data_A
if data_B.empty? then
html << 'エラー:Bのデータがありませんでした'
else
html << mkhtml_from_data_B
end

---------------------

どっちが「ふつー」でしょうか
264デフォルトの名無しさん:2007/11/07(水) 11:53:25
>>263
どっちでもいいよ
メソッドに判断させる前者が見栄え的に楽だと思う
どうせ data_C とか data_D とかたくさんあるんだろうし

Ruby としては mkhtml_from_data_B の中で例外出させて捕捉するべきかもしれん(w
265デフォルトの名無しさん:2007/11/07(水) 14:57:23
data_Aとかdata_Bとかをちゃんとクラスにして、

html = ...
begin
 data.each do |data|
  html << data.to_html
 end
rescue to_htmlに投げてもらった例外
 ...
end

ってポリモルフィズム効かせてやるのが私的に理想っぽい。

266デフォルトの名無しさん:2007/11/07(水) 14:58:16
あ、まちがえた。

datas.each do |data|

とかだな。
267デフォルトの名無しさん:2007/11/07(水) 17:33:50
>>265
dataをどこの変数にどう保持してどう渡してるかにもよると思うんだが、
そういうのって構造が美しいだけでエラーのHTML自体を書くのは面倒そうだな
268デフォルトの名無しさん:2007/11/07(水) 17:45:27
まあ、例外を自力で適宜発生させて外部で捕捉して処理します、というのは
それ自体はものすごくカッコいい論理的な動作に見えるけど、動きの実際は goto 文とほぼ同じだからね
事前に気をつけて設置しないと、ループが1個挟まっただけでスパゲティになったり
269デフォルトの名無しさん:2007/11/07(水) 20:18:57
>>266 恐ろしくどうでもいいことを言うと data は複数形な。単数は datum。
270デフォルトの名無しさん:2007/11/07(水) 20:20:10
1オリジン、たまに使いたくなるね。
俺は前に、テキストファイルを読み込んで
行番号でアクセスしたいことがあって。

lines=ファイル.readlines
lines.unshift nil

して、後は特異メソッドで
each上書きして使ったかな。

本来はshift/unshiftとか色々と他にも修正が要るけどな。
個人的なスクリプトだから使わないことで対応。
本格的にやるなら継承せずにラッパクラスかな?
271デフォルトの名無しさん:2007/11/07(水) 20:33:17
>>269
>>266 じゃないがそういう指摘は有益だと思う

漏れも小ネタ貼っとく。主要言語別配列の添え字はいくつから始まるかリスト
ttp://en.wikipedia.org/wiki/Array#Array_system_cross-reference_list
272248:2007/11/07(水) 20:44:20
>>260
え、そうなんだ。ありがとう、リファレンスとかよく読んでみるよ。

で、その事とは別に考えたんだけど 1 から始まる俺Array と普通の Array が混在すると
地味なバグの温床になりそうな気がしてきた。
ラッパクラスにするにしても、見た目(メソッド的な)は Array と別物に見えるようにしたほうが
いいのかな?
273デフォルトの名無しさん:2007/11/07(水) 22:26:29
>1 から始まる俺Array と普通の Array が混在すると
>地味なバグの温床になりそうな気がしてきた。
えー、そんなことないと思うけど。
自分だけが使うならどんな見た目でもいいけど、他人に使わせるなら、『添字が1から始まる以外はぜんぶ一緒』のほうがいいと思う。
つうか、そんなことを気にするなら標準のArrayで統一しろといいたい。
274デフォルトの名無しさん:2007/11/07(水) 22:44:29
ファイルの上書きって,データを読み込んだ後編集してその場で保存する場合,モードって何?
open(file_path,'??')
rだと読み込みしか出来ないし,wだとオープンした瞬間ファイルの情報が無くなる.
aだとFile.rewindしてもなぜか先頭から書き込めないので,wしかないのかとか,混乱気味.
275266:2007/11/07(水) 22:49:11
>>269
ふつーに知らんかった。d。
英語の勉強で、英文にdataとか使わないからなぁ…。
276デフォルトの名無しさん:2007/11/07(水) 22:52:53
英語でも普通使い分けないよ。data/datum。
ラテン語中性名詞の変形だね。
277デフォルトの名無しさん:2007/11/07(水) 22:55:31
>>274
w+
278デフォルトの名無しさん:2007/11/07(水) 22:59:09
>>274
r+
279デフォルトの名無しさん:2007/11/07(水) 23:04:04
>>274
r → w
280デフォルトの名無しさん:2007/11/08(木) 01:22:30
今日Rubyを始めた物ですが
いきなり詰まってしまいました

i = 1
puts 'お前好きな数字とかある?'
su = gets.chomp
puts 'え〜お前' + su + 'が好きなの〜?'
ma = su.to_i + i.to_i
puts 'お前 ' + ma.to_i +
'っぽい顔なのになぁ'

どうもエラー(ren1.rb:7:in `+': can't convert Fixnum into String (TypeError))を吐いてしまいます
どうすればいいのでしょう?
281デフォルトの名無しさん:2007/11/08(木) 01:29:28
>>280
maはputsするとき.to_iじゃなく
.to_sで数値を文字に直してやらないと表示できない
282デフォルトの名無しさん:2007/11/08(木) 01:43:50
>>281
ありがとうございます
無事出来ました
283デフォルトの名無しさん:2007/11/08(木) 01:49:27
>>280
>>281 の通りだけど、ダブルクォーテーションと式展開 #{foo} も覚えると
楽かもしれない。
あと、↓読んで型とは何かくらいを知っておくといいと思う。

プログラミング入門 - Rubyを使って -
ttp://www1.tf.chiba-u.jp/~shin/tutorial/index.rb
284デフォルトの名無しさん:2007/11/08(木) 09:42:58
data/datum は、知識として知ってはいたけど、
実際に使い分けたことはなかったな。

% irb
irb(main):001:0> require "active_support"
true
irb(main):002:0> "data".pluralize
"datas"
irb(main):003:0> "datas".singularize
"data"
irb(main):004:0> "data".singularize
"datum"
irb(main):005:0> "datum".pluralize
"data"

ふむー。
285デフォルトの名無しさん:2007/11/08(木) 12:10:26
286デフォルトの名無しさん:2007/11/08(木) 12:39:25
>>285
日本語のサイト落ちてることが多いような気がする。
それが面倒なんで英語のサイトを見るようにしてる。
287デフォルトの名無しさん:2007/11/08(木) 21:13:51
>>284
ActiveSupportのinflectionも結構アドホックというかバータリーだからな。
辞書を持ってるわけじゃないし。
288デフォルトの名無しさん:2007/11/09(金) 04:46:59
Linux上でRubyを使っているのですが
require "tcltklib"

l = TkLabel.new
l.text("Hello World")
l.pack
Tk.mainloop
とかプログラムすると
test.rb:1:in `require': no such file to load -- tcltklib (LoadError)
from test.rb:1
といエラーが出ます
なにやらrequireが無いらしいのですが・・・
289デフォルトの名無しさん:2007/11/09(金) 07:39:50
そのエラーは「requireが無い」ではなく
「ロードしようとしたファイルが存在しないためrequireできない」の意
つまりtcltklibが無い
290デフォルトの名無しさん:2007/11/09(金) 11:08:37
日本語のメールを扱えるMUAを作ろうと思ってます。
とりあえずTMailを承継したクラスを作って,
そのクラスにSubjectや本文をISO-2022-JPに決めうちしてメールを作成するように,
したいのですが,Subjectがうまく変換されません。
JISコードのBase64でエンコードして渡しているのですが,JISにしかならないのです。
どのへんがおかしいのか教えてください。
(まだ,発展途上なのですが,シンプルなプレインテキストメールもマルチパートメールもこのクラス一つでできるようにと考えてます。)
require 'nkf'
require 'tmail'
require 'mime/types'
class JapaneseMail < TMail::Mail
        include TMail
        def initialize
                super
                @plain_text = String.new
                @multipart = Array.new
        end
        def subject=(str)
                super NKF.nkf('-jM', str)
        end
        def text=(str)
                @plain_text = NKF.nkf('-j', str)
        end
        def prepare
                self.mime_version = '1.0'
                self.set_content_type 'text', 'plain', 'charset' => 'ISO-2022-JP'
                self.transfer_encoding = '7bit'
                self.body = @plain_text
                write_back
        end
end
291デフォルトの名無しさん:2007/11/09(金) 11:13:04
上のクラスを下記のように利用してます。
require 'japanesemail'

mymail = JapaneseMail.new
mymail.to = '[email protected]'
mymail.from = '[email protected]'
mymail.subject = '日本語メールです'
mymail.text = "こんにちは。日本語メールの本文です。"
mymail.prepare
puts mymail

subjectの部分はただのISO-2022-JPになるだけで
「Subject: F|K\8l%a!<%k$G$9」
期待しているのは
「Subject: =?ISO-2022-JP?B?GyRCRnxLXDhsJWEhPCVrJEckORsoQg==?=」
です
292デフォルトの名無しさん:2007/11/09(金) 12:16:37
これは、世の中のカジュアルRubyユーザー全員が引っかかったと思う。

ttp://i.loveruby.net/ja/projects/tmail/doc/details.html
> デコード出力
> TMail の大部分のメソッドは特に断りがない限りデコードした文字列を返します。
> 文字列の中に日本語文字列が存在する場合は、 $KCODE に従いエンコードを変換して返します。
> ただしサポートするのは $KCODE=EUC/SJIS の場合のみで、それ以外 (つまり NONE か UTF8) のときはエンコーディングは一切変換されません。
> Ruby 1.6 以降では $KCODE=NONE がデフォルトなので注意してください。


ということで、subjectを入力する前に $KCODE='e' とか書いておけば変換してくれる。
…UTF8でスクリプトを書いてる場合は…
293デフォルトの名無しさん:2007/11/09(金) 12:50:32
RAA が見れないみたいなんだけど、リファレンスマニュアルが見れなくなるのと同じような原因?
294290:2007/11/09(金) 13:44:30
>>292
ありがとうございます。まさに日曜プログラマ的レベルですので,
至らぬこともあるかもしれませんが,どうぞよろしくです。

UTF8でスクリプトを書いてます。>>291では#!/usr/local/bin/ruby -Kuとしてます。もちろんRuby 1.8

とりあえず,puts mymailをputs.mymail.encodedとすることで
目的のメールを吐き出せました。
295290:2007/11/09(金) 15:20:45
ヘッダ部分のMIMEエンコードについて追加の質問です
メールのFromやToに日本語を使うたために,Perlではライブラリがあるようです。
http://iandeth.dyndns.org/mt/ian/archives/000628.html
(MIME::Lite::TT::Japanese, MIME::Lite::TT::HTML::Japanese)
Rubyにも類似のライブラリはありますか?
やりたいことも上記URLと同じことです。
296デフォルトの名無しさん:2007/11/09(金) 15:50:35
こんにちは、ちょっと質問があるのですが、

正規表現がずらーーーと長くなるときがあるのですが、
例えば、こんなの

/^(\d+)\/(\d+)\/(\d+)\s+.+\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/ =~ s

エディタで折り返しになっちゃたりしてみにくくなります。
そこで、適時改行、連結したいのですがいい方法ないですか?

文字列だと、

s = "hogegegegeghoeghoeghoeh" +
"hogehgoehgoeghoeghoehge"

でいいですよね?
正規表現だと、どうすればいいんだろう
297290:2007/11/09(金) 16:05:27
>>295
汎用性はないかもしれないけど,とりあえず,自己解決

def header_encode(str)
    /(.*?)<(.*?)>/ =~ str
    return "#{NKF.nkf('-jM', $1)}<#{$2}>"
end

です
298デフォルトの名無しさん:2007/11/09(金) 16:12:12
340 :デフォルトの名無しさん:2007/11/09(金) 13:22:03

俺小学生だけど年下に聞いて恥ずかしくない?


すみません
私の先生が
python-PHP.
小学生が教えられる言語だけど
Ruby.
は小学生が教えられるのか聞く様にと言っています
299デフォルトの名無しさん:2007/11/09(金) 16:29:07
変なテンプレートが特定個人内で流行ってるなあ
300デフォルトの名無しさん:2007/11/09(金) 16:30:14
>>298
「プログラム言語の前に国語からやり直せ」としか思えない
301デフォルトの名無しさん:2007/11/09(金) 16:37:20
>>296

~$ cat test.rb
re = /abcdefghijklmn\
opqrstuvwxyz/
re2 = Regexp.new('abcde'+'fghijk'+
'lmnopq'+'rstuvwxyz')

p 'abcdefghijklmnopqrstuvwxyz'.scan(re)
p 'abcdefghijklmnopqrstuvwxyz'.scan(re2)

~$ ruby ./test.rb
["abcdefghijklmnopqrstuvwxyz"]
["abcdefghijklmnopqrstuvwxyz"]
302デフォルトの名無しさん:2007/11/09(金) 16:55:39
>>296
x オプションとか。

re = %r{
^(\d+)\/(\d+)\/(\d+)\s+
.+\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$
}x
303290:2007/11/09(金) 17:01:54
とりあえずの形になりました。日本語メールを作成するクラスです。
使い方は>>291を参考に
添付ファイルは mymail.attach(ファイルパス) です
プレインテキストメールとマルチパートメールと区別せずに使えます。
最後に
mymail.prepare
puts mymail.encoded
で,メールを吐き出すので,それをMTAに渡せば終わりです。

http://www-2ch.net:8080/up/download/1194594887004996.qmjWF2
↑にアプロードしてあります。

テストはほとんどしてないので,バギーかも。権利は放棄。テキトーにどーぞ
304デフォルトの名無しさん:2007/11/09(金) 17:03:42
否…(+ФyФ)!流行では無く実験です…

>>299 名前:デフォルトの名無しさん :2007/11/09(金) 16:29:07
変なテンプレートが特定個人内で流行ってるなあ
305290:2007/11/09(金) 17:24:16
バグです
def header_encode(str)
    /(.*?)<(.*?)>/ =~ str
    return "#{NKF.nkf('-jM', $1)}<#{$2}>"
end
の該当箇所を
return $& ? "#{NKF.nkf('-jM', $1)}<#{$2}>" : str
に変更
306デフォルトの名無しさん:2007/11/09(金) 17:28:51
>>299
Linux板でさんざんうざがられた変な人だから
今後一切反応しないように
307デフォルトの名無しさん:2007/11/09(金) 17:41:54
>306
あれ人なの? スクリプトの類だろ?
308デフォルトの名無しさん:2007/11/09(金) 21:57:31
すみませんが、質問です。

Procオブジェクトの途中で抜けて元の行に戻りたいのですが、関数ではないの
でreturnでは戻れないようです。
どうしたらよいでしょうか?
309デフォルトの名無しさん:2007/11/09(金) 22:06:19
>>308
break
310デフォルトの名無しさん:2007/11/09(金) 22:54:39
RDocの生成なんですけど
#コメント1行目
#
#コメント2行目
とすると,連結しないで改行してくれるのはいいのだが,
1行置きに表示されちゃいます。

コメント1行目
コメント2行目

のように表示させるにはどうしたらいい?

<p>
コメント1行目</br>
コメント2行目</br>
</p>

ソースとしてはこうなってほしいのだけど,
いちいちコメント行に</br>を自分で書いておかないとダメ?
311デフォルトの名無しさん:2007/11/09(金) 22:58:55
>>310
というか改行を使う必要があるのか?
たいていの場合は段落切り替えでOKだと思うが
312デフォルトの名無しさん:2007/11/09(金) 23:01:01
AA的な図を書きたいとか?
313308:2007/11/09(金) 23:10:44
>>309
> break

ありがとうございます。試してみましたが、エラーになってしまいます。
私は正常に終了させたいのです。

proc1 = Proc.new do
puts "ほげ"
break
puts "うぐ"
end

proc1.call

irb(main):010:0> load "proc.rb"
ほげ
LocalJumpError: break from proc-closure
from ./proc.rb:5:in `call'
from ./proc.rb:9
from (irb):10:in `load'
from (irb):10
from :0
314デフォルトの名無しさん:2007/11/09(金) 23:20:30
RubyでGUIを使いたいのですが
どうすればいいのか分かりません
なにかダウンロードしてこなきゃいけないのでしょうか?
ちなみにLinux環境です
315デフォルトの名無しさん:2007/11/09(金) 23:23:33
>>314
標準でtkが使える。
あとruby-gnome2あたりじゃね?

どっちも使ったことないけど。
316デフォルトの名無しさん:2007/11/09(金) 23:27:01
リファレンスには lambda と proc は Proc.new と等価とあるけど……
ここでは lambda を使って。
1.8.6ではprocをlambdaの代わりに使ってもいいけど。

このへんについては
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/43807
とか。


317308:2007/11/09(金) 23:37:00
>>316
おお!ありがとうございます。
確かに lambda に変えただけで動きました。
318デフォルトの名無しさん:2007/11/09(金) 23:49:57
>>315
取りあえずruby-gnome2を使ってみたいと思います
ありがとうございました
319デフォルトの名無しさん:2007/11/09(金) 23:51:56
>>308
next
320288:2007/11/10(土) 00:07:23
機能質問したものです
無事tcltklibをインストールして、もう一回実行してみたのですが
今度は
test.rb:3: uninitialized constant TkLabel (NameError)
といエラーが出ます
ちなみにソースは前と同じです
どうすればいいのでしょうか
321デフォルトの名無しさん:2007/11/10(土) 01:50:01
>>320
ttp://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
ここの 8.4 読め。理解したら「ruby tk」でググれ
322デフォルトの名無しさん:2007/11/10(土) 06:32:51
>>301-302
d
いろいろ書き方あるんですね。
323デフォルトの名無しさん:2007/11/10(土) 11:42:29
「2007年 11月 10日 土曜日 7:00:00 PM」
はTime::parse(parsedate)できません。

正規表現使って一つ一つ分解するしかない?
それとも,既にライブラリか方法ある?
324デフォルトの名無しさん:2007/11/10(土) 12:00:46
あんま無茶言うな

漢字を含む文字列をparseできるメソッドは知らない
正規表現で切り出すか、PaesrDateが解釈できる文字列に変換するしかないんでないかな
325デフォルトの名無しさん:2007/11/10(土) 12:08:45
>>323

require 'date'

str = '2007年 11月 10日 土曜日 7:00:00 PM'
format = '%Y年 %m月 %d日 %H:%M:%S %p'

dt = DateTime.strptime(str, format) #.new_offset(9.0/24)

# timeだけ取得
t = dt.time

# 日付を含め時刻に変換
# require 'rubygems'
# require 'active_support'
# t = d.to_time
326デフォルトの名無しさん:2007/11/10(土) 12:10:41
ごめん、土曜日は_
327デフォルトの名無しさん:2007/11/10(土) 13:26:32
関係ないが、今思うと、remember the milk は、英語圏のサービスなのに、
よく、土曜日とか、漢字に対応しているなーと思う。

バックエンドが、rubyでもないと思うので、スレ違いスマソ
328323:2007/11/10(土) 13:57:22
>>324,>>325,>>326,>>327
サンクス
なければ作るしかないと思ってますが,
一応車輪の再発明を避けるために,
聞いてみました。
ども
329デフォルトの名無しさん:2007/11/10(土) 18:06:50
RubyからDirectXを扱いたいのですが、どこかサンプルになるホームページなどあったら
紹介してもらってもいいでしょうか?
330デフォルトの名無しさん:2007/11/10(土) 18:24:33
使えるエディタは何があるでしょうか?
331デフォルトの名無しさん:2007/11/11(日) 01:25:06
REXML::Elementクラスの、[]でXPathの指定をして要素を取得したいんだけど、
属性値の指定ができない。

RootElem.element["//A@id='100'"]

とやっても、「属性idの値が100の要素A」ではなくて、
「一番最初に発見した要素A」が返ってきてしまう。

XPathをあれこれ変えてみたけど、だめだった。
何で??誰かたすけて。
332デフォルトの名無しさん:2007/11/11(日) 01:27:02
RDE
333デフォルトの名無しさん:2007/11/11(日) 01:28:08
訂正。

誤)
REXML::Elementクラスの、[]で

正)
REXML::Elementクラスのelementメソッドで
334デフォルトの名無しさん:2007/11/11(日) 01:50:17
>>331

"//A[@id='100']"

ではなく?
335デフォルトの名無しさん:2007/11/11(日) 02:58:31
336デフォルトの名無しさん:2007/11/11(日) 08:22:43
foo.each do |hoge| 処理 end
で処理の結果によっては
hogeを一つ前の要素に戻すことみたいなことできますか
337330:2007/11/11(日) 08:31:26
おいおい
初心者スレッドじゃないのかよ
使っているエディタ聞いてもよかように
338デフォルトの名無しさん:2007/11/11(日) 08:33:06
>>337
秀丸
339デフォルトの名無しさん:2007/11/11(日) 08:38:03
>>337
おいおい>>332は無視かよ
340331:2007/11/11(日) 09:13:36
>334,335
そこのサイトも見てるんですが・・

RootElem.elements("//A[@id='100']")

とやると
ArgumentErrror: wrong number of arguments (1 for 0)
となります。

RootElem.each_element("//A[@id='100']")

とやると
[ ]
となり、要素なしのArrayが返ってきます。
341330:2007/11/11(日) 09:21:13
>>339
すんません 何故か見えてなかったです
RDEはスクリプト言語RubyのGUI開発環境です。だそうですね ありがとうございます。
342デフォルトの名無しさん:2007/11/11(日) 09:32:36
たのしいRUBYって、全部見なくてもいいよね
343デフォルトの名無しさん:2007/11/11(日) 09:34:14
最初から最後まで読まないといけないようなコンピュータ言語書籍は糞
344デフォルトの名無しさん:2007/11/11(日) 09:41:26
マニュアルの「はじめに」より

> Rubyの特長は次の通りです。
> インタプリタ
> Rubyはインタプリタ言語ですのでプログラムを実行するためにコンパイルする必要はありません。
> 変数に型が無い (動的型付け)
> Rubyの変数はどのような型のデータも格納する事ができますので、変数の型について心配する必要はありません
。半面、コンパイル時のチェックは弱くなります。

この後者の場合のコンパイルってどういう意味ですか?
345デフォルトの名無しさん:2007/11/11(日) 09:55:53
スクリプトファイルを最初から最後まで読み込んで
OSが理解できる実行形式バイナリに変換してメモリ内に保持すること

とでも思っとけ
普通の言語のコンパイルはファイルがディスクに別途作成されるけど、
Rubyはスクリプト言語だからメモリ内に保持
346デフォルトの名無しさん:2007/11/11(日) 10:41:43
>>343
そんな一般化してもしょうがないと思う。本には本のスタイルがあるからね。
その理屈だと例えば Little Lisper が「糞」ということになる。
俺もイマイチ好きじゃないが、良い本だとは思うよ。
347デフォルトの名無しさん:2007/11/11(日) 11:19:14
Little Schemer でお星様と遭遇した漏れ様が来ましたよ

>>340
irb(main):003:0> doc = REXML::Document.new('<root><a id="1" /><a id="10" /><a id
="100" /></root>')
=> <UNDEFINED> ... </>
irb(main):005:0> doc.elements[".//a[@id=1]"]
=> <a id='1'/>
irb(main):006:0> doc.elements[".//a[@id=10]"]
=> <a id='10'/>
irb(main):007:0> doc.elements[".//a[@id=100]"]
=> <a id='100'/>

REXMLは三日もたてば使い方忘れちゃうんだよなあ・・・
348デフォルトの名無しさん:2007/11/11(日) 12:36:10
>>331
ちゃんと見よう。
elementsの後ろの[]はelementsに定義されたメソッドで、
中の[]はXPathのってこと。
349デフォルトの名無しさん:2007/11/11(日) 14:04:46
ところで XML は case sensitive だから "//A[@id='100']"  と "//a[@id='100']" は意味が違うなどという言葉が頭に浮かんだりしたんだが。
350デフォルトの名無しさん:2007/11/11(日) 14:20:45
idが違うAが引っかかってるからそこは大丈夫なんじゃね?
351331:2007/11/11(日) 15:14:08
やっぱりだめだ・・・・

>>347のXMLドキュメントだと取得できるんだけど、
実際に使ってるやつだとやっぱりいかない。

<root>
 <a id="AAAAAe77057dcc82dbf40b81595e09291a" name="A1">
  <b id="BBBBBe77057dcc82dbf40b81595e09291a" name="B1"/>
 </a>
 <a id="CCCCCe77057dcc82dbf40b81595e09291a" name="A2">
  <b id="DDDDDe77057dcc82dbf40b81595e09291a" name="B2"/>
  <b id="EEEEEe77057dcc82dbf40b81595e09291a" name="B3"/>
 </a>
</root>

で、
<b id="EEEEEe77057dcc82dbf40b81595e09291a" name="B3"/>
の要素を取得したいんだけど・・

irb(main):029:0> doc = REXML::Document.new('<root>・・・・</root>')
=> <UNDEFINED> ... </>
irb(main):030:0> doc.elements[".//b"]
=> <b name='B1' id='BBBBBe77057dcc82dbf40b81595e09291a'/>
irb(main):031:0> doc.elements[".//b@name='B3'"]
=> <b name='B1' id='BBBBBe77057dcc82dbf40b81595e09291a'/>
irb(main):032:0>


てなってしまう。なんで???
352デフォルトの名無しさん:2007/11/11(日) 15:16:24
ごめん、できた。

irb(main):033:0> doc.elements[".//b[@name='B3']"]
=> <b name='B3' id='EEEEEe77057dcc82dbf40b81595e09291a'/>

で上手くいった。
実際のXMLでやってみる。
353デフォルトの名無しさん:2007/11/11(日) 15:18:45
書き方の相談です。
例えばXML文書から特定の要素を全て取り出すとき、

doc = REXML::Document.new(test.txt)
array=[]
doc.root.each_element("/words/word"){ |elem|
  array << elem.text
}

として動くことは動くのですが、一度空の配列を用意するのが冗長でRubyらしくない気がします。
もっときれいな書き方があるはず、と思ってしまうのですが、皆さんならどう書きますか?
354デフォルトの名無しさん:2007/11/11(日) 15:42:40
doc.get_elements(XPATH)
でいけると思うんだけどどうだろう
355デフォルトの名無しさん:2007/11/11(日) 16:11:08
むおー!
356デフォルトの名無しさん:2007/11/11(日) 16:27:31
require 'enumerator'
doc.root.enum_for(:each_element, '/words/word').map {|elem| elem.text }
でどうだろうか。
357デフォルトの名無しさん:2007/11/11(日) 16:28:20
get_elementsなんてあったのか。

358331:2007/11/11(日) 17:28:29
テスト用じゃない実際に使うXMLファイルだとだめだった・・・
何が違うんだorz
359331:2007/11/11(日) 18:03:38
ルート要素に「xmlns」ていう名前のアトリビュート(接頭辞は省略)があると
だめだった。

doc.elements[".//b[@name='B3']"]

てやってもnilが返ってきちゃう。

XMLドキュメント内の要素には接頭辞は一切使用していないので
全てルート要素で定義したデフォルトの名前空間になってるし、
アトリビュートの指定で名前空間て関係してくるの?

なんでルート要素でデフォルト名前空間を宣言すると
doc.elements[".//b[@name='B3']"]
の返り値がnilになっちゃうの?
誰か教えて。
360デフォルトの名無しさん:2007/11/11(日) 18:29:15
>>359
名前空間指定してないからに決まっているだろ
361デフォルトの名無しさん:2007/11/11(日) 20:35:13
えー。
だったら同じように名前空間を指定していない
doc.elements[".//b"]
でも返り値はnilになるんじゃないの?
362デフォルトの名無しさん:2007/11/12(月) 00:22:22
>>359
ルート要素でデフォルト名前空間を設定しているからというより
bが名前空間URIを持っているからマッチしないんだという気がする。
XPathの中では実際の文書の接頭辞は意味ないからな。

doc.elements['//b']の返り値はバグのような気がする。
libxml-rubyで同様の処理をするとdoc.find("//b")は空のノードセットを返す。

#!/usr/bin/ruby -Ku
require 'xml/libxml'
require 'pp'

parser = XML::Parser.new
parser.string = <<EOS
<root xmlns='http://example.com/'>
<a id="AAAAAe77057dcc82dbf40b81595e09291a" name="A1">
<b id="BBBBBe77057dcc82dbf40b81595e09291a" name="B1"/>
</a>
<a id="CCCCCe77057dcc82dbf40b81595e09291a" name="A2">
<b id="DDDDDe77057dcc82dbf40b81595e09291a" name="B2"/>
<b id="EEEEEe77057dcc82dbf40b81595e09291a" name="B3"/>
</a>
</root>
EOS
doc = parser.parse

p doc.find("//b").class
p doc.find("//x:b",'x:http://example.com/')
p doc.find("//x:b[@name='B3']",'x:http://example.com/')
363デフォルトの名無しさん:2007/11/12(月) 08:21:53
>>361
REXML公式のチュートリアルに名前空間とXPathについて書いてあったと思う
一読してみては
364デフォルトの名無しさん:2007/11/12(月) 09:09:09
だれも答えてない?
>>336
>foo.each do |hoge| 処理 end
>で処理の結果によっては
>hogeを一つ前の要素に戻すことみたいなことできますか

prev = nil  # ひとつ前の要素をとっておく変数
foo.each do |item|
 item = prev if 条件 # 条件によってひとつ前の要素に戻す
 処理
 prev = item
end

ということではないかと思ったのだがどうだろう
365デフォルトの名無しさん:2007/11/12(月) 14:47:08
PStoreって「追加」の書き込み時にもpstoreファイル全体を読んで新たに全要素を書き込んでるって本当ですか?

def save(k,v)
PStore.new("1MB.pstore").transaction do |db|
db[k] = v
end
end

という1MBなpstoreに保存するメソッド作ってsave(key,value)をたとえば100回起動したら
ディスクから100MBぶんくらい読んで100MBぶんくらい書き込んでるってことですか?
366デフォルトの名無しさん:2007/11/12(月) 14:55:47
>>365
そう
これを継承するYAML::Storeでも原理は同じ。全部パースして読み込んでる
367デフォルトの名無しさん:2007/11/12(月) 15:16:03
あ、PStoreはサイズと使用頻度間違うと物凄い負荷になるよ
メモリとディスクアクセスの無駄遣いというレベルじゃない
テキストでa+で追加書きするほうがいいことも…
368デフォルトの名無しさん:2007/11/12(月) 17:58:13
スクリプトの編集にviをつかってます。
カッコを閉じるとき{}とかは適切にインデントをもどしてくれるのですが、
endのときは対応してくれません。

たしか、ruby向けの設定とかviとかがあったような気がするのですが,
参考になるあるいはおすすめのサイトなど教えてください。
369デフォルトの名無しさん:2007/11/12(月) 18:11:33
>>368
vi はちょっとの編集にしか使わないからよく分からないけど
ここら辺はどうですか?

ttp://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=Tools+for+Ruby
370デフォルトの名無しさん:2007/11/12(月) 20:55:06
>>368
今時 vi といったら vim を指すのだろうか?
vim の7.? なら
:h :filetype-indent
あたりを見てみるといいんじゃないでしょうか。
vim の help は迷宮だけどな。
371デフォルトの名無しさん:2007/11/12(月) 22:50:20
>>368
vimなら確かRuby用の環境一式がZipで落とせたと思う。
自動補完とかが不要なら、よくわからんインストールは必要なしに
Zipを展開するだけでよかったと思う。
ていうか俺が使ってるvimがそう。

サイトはどこだか忘れちゃった。すまん。
372デフォルトの名無しさん:2007/11/13(火) 10:11:56
>>369,>>370,>>371
どうもどうも、参考になりました。
おっしゃる通り,viはvimへのリンクになってました。
ちなみに、versionは6.2...ちょっと古かった。
373デフォルトの名無しさん:2007/11/14(水) 17:23:53
Banmen = [0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,
        0,0,0,1,2,0,0,0,
        0,0,0,2,1,0,0,0,
        0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0]

def hyouji
for i in Banmen

a = i
case a.to_i        
when 0
print "□"
when 1
print "●"
when 2
print "○"
else
print "?"
end
end
end

hyouji


どうしてエラーが出るんでしょうか?
374デフォルトの名無しさん:2007/11/14(水) 17:26:28
やっぱり
Banmen = [0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,
        0,0,0,1,2,0,0,0,
        0,0,0,2,1,0,0,0,
        0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0]

def hyouji

for i in Banmen
 case a
  when 0
   print "□"
  when 1
   print "●"
  when 2
   print "○"
  else
   print "?"
 end
end

end

hyouji
375デフォルトの名無しさん:2007/11/14(水) 17:48:59
case a は case i の間違い?
それだったらエラー出ないし何が言いたいか分からんので、もうちょっとまとめてきなさいな
Banmenは配列の配列にした方がいいかもね
376デフォルトの名無しさん:2007/11/14(水) 18:20:00
>>373
エラーがわからんが、とりあえず、Banmen に全角スペース入ってる
みたいだけど、それって code では入ってないよね?(他のところもしかり)
377デフォルトの名無しさん:2007/11/14(水) 18:34:33
require 'matrix'
class Matrix
def []=(i,j,x); @rows[i][j]=x; end # matrix[i, j] = x
end

class GameField
SYMBOLS=['□','●','○']
def initialize ; @field = Matrix.zero(8); end
def set(x,y,n) ; @field[x,y] = n; end
def symbolise(i)
if SYMBOLS[i].nil? then; '?'; else SYMBOLS[i]; end
end
def to_s
@field.to_a.map{|a| a.map{|e| symbolise(e)}.join(' ')}.join("\n")
end
end

field = GameField.new

field.set(3,3,1)
field.set(3,4,2)
field.set(4,3,2)
field.set(4,4,1)
puts field
378デフォルトの名無しさん:2007/11/14(水) 18:51:15
>>377
あ、いきなり自分の答書くなんてずるい
もうちょい教育的に振舞えよ(w

>>374
「よくわからない」エラーが出るなら全角空白だろうな
> Invalid char `\241' in expression
こんなの

Banmen = [0,0,0,0,0,0,0,0,
        0,0,0,0,0,0,0,0,
  ↑このへんの0の前の空間に全角空白がたくさん混じってる
一旦空白を全部消して半角空白にしとけ
379デフォルトの名無しさん:2007/11/14(水) 19:04:24
全角インデントはレスする時の常識だろ・・・
380デフォルトの名無しさん:2007/11/14(水) 19:42:23
どんなエラーなのかさっぱりわからんのだから仕方あんめえ
それに>>373のメソッド定義では &nbsp; を使ってるから表示のためにあえて混ぜたとは考えにくい

と思ったら>>374では悪化してるな
わけわかめ
381デフォルトの名無しさん:2007/11/14(水) 21:16:13
>>377
うっかりCOMと人間兼用のPlayerクラスとか作ってしまって動作にハマりそうだな

あとゲームの盤面はFieldではなくBoardが好ましいと思う
382デフォルトの名無しさん:2007/11/14(水) 22:33:30
>>373
"case a.to_i        " ←全角スペース
のせいでは?
>>382

Banmen = [0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,1,2,0,0,0,
0,0,0,2,1,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0]

def hyouji
for i in Banmen
a = i
case a.to_i
when 0
print "□"
when 1
print "●"
when 2
print "○"
else
print "?"
end
end
end

hyouji
383デフォルトの名無しさん:2007/11/14(水) 22:49:11
dieってどんなメソッド?
http://www.ruby-lang.org/ja/man/?cmd=view;name=%B1%E9%BB%BB%BB%D2%BC%B0
↑に例として載ってるのだけど,
「die」自身のリファレンスが見つからなくて。

制御文のような気がするけど,はっきりとしたことが知りたい。
返り値は何?
384デフォルトの名無しさん:2007/11/14(水) 23:03:19 BE:236736533-2BP(250)
>>383
そんなメソッド標準にはないでしょ。
Perlみたいなノリでorのところに例として書いてあるだけで。
385デフォルトの名無しさん:2007/11/14(水) 23:03:59
>>383
それは例だから。dieなんてない。
PerlとPHPにはある。エラーメッセージを表示してプログラムを終了する関数。
open('file.txt') or die('canot open file.');
のようによく使うから、それを例として使っただけだとおもう。

リファレンスが不親切と言われればそれまでだけどな。
386デフォルトの名無しさん:2007/11/14(水) 23:04:24
>>383
die は Perl における、Ruby でいうところの raise

die 'エラーです!'

と書くと「エラーです!」とエラー出力に表示して終了する(終了の代わりに捕捉もできる)
異常処理をします、ということを端的に表すのに使ってるだけかと思われ
Ruby に die という名前の何かがあるわけじゃない

だから、これはホントは例としてはあまりよくないね

demo || raise 'cannot run demo !!'

とでも書けばよかったのかもしれない
387デフォルトの名無しさん:2007/11/14(水) 23:09:11
Rubyは相変わらずわかりやすくしようという気概がゼロだ

not
 例:

 ! me
 not me
 i != you

例という貴重な欄を潰してまで書くようなことではないな
388デフォルトの名無しさん:2007/11/14(水) 23:13:30
Perlの or die というのは「さもなくば氏ね」と読めるのがポイントだったな。
389デフォルトの名無しさん:2007/11/14(水) 23:45:38
>388
らくだ本にも確かそういうニュアンスの文あったぐらいだもんな
390デフォルトの名無しさん:2007/11/14(水) 23:47:46
例をまねして学ぶってことができないじゃん?
初心者のうちは,何がどうおかしいのさえわからんのに...

http://japan.zdnet.com/sp/feature/07leopard/story/0,3800081890,20360956-3,00.htm
ここにも
die "Failed to start the FSEventStream" unless ok
というのが書かれてるのだけど,
まねしてもダメってこと?

391デフォルトの名無しさん:2007/11/14(水) 23:54:38
使用してるモジュールか何かにそういうメソッドが定義されてれば問題ない
まさか実行もせずに例示スクリプト書いてるとは思えんし、この環境では動くんだろう
392デフォルトの名無しさん:2007/11/14(水) 23:56:07
>>386
そんなこといったら demo はいいのかよ。
393デフォルトの名無しさん:2007/11/15(木) 00:27:55
>>390

そこに紹介されているのは MacOS X 10.5 Leopard の
/Developer/Examples/Ruby/RubyCocoa/Scripts/watcher.rb
というスクリプトの一部で、しっかりと

def die(s)
$stderr.puts s
exit 1
end

と定義されているわけだが。
394デフォルトの名無しさん:2007/11/15(木) 00:44:28
395デフォルトの名無しさん:2007/11/15(木) 01:25:43
他の言語からの移行用だと思うんだけど、存在が微妙なメソッドだな
Ruby なんだし素直に raise(msg) でいいじゃん、と思わなくもない

bash$ cat ./err.rb
raise 'エラーです!'
bash$ ruby ./err.rb
./err.rb:1: エラーです! (RuntimeError)
bash$ echo $?
1
bash$ ruby ./err.rb 2> /dev/null
bash$
396デフォルトの名無しさん:2007/11/15(木) 03:24:28
すみませんが、質問です。

一つのRubyのスクリプトファイルが、異なる複数の文字エンコーディング環境
(Win, UNIX, Macなど)で、文字化けしたりせずに正常に動作するようにするに
は、どういうやり方が標準的なのでしょうか?

$KCODEを修正して、スクリプトファイル全体を別エンコーディングで保存しな
おせば問題なく動くわけですが、そうではなくて、手を入れたり保存しなおし
たりしない、そのままのスクリプトファイルが複数の環境で動くようにしたい
のです。

Pythonだと、
・ソースファイルごとのエンコーディングの指定ができる。だから一つのアプ
 リケーションが、スクリプトファイルごとにエンコーディングが異なったり
 しても、問題なく動く。
 http://www.python.jp/Zope/articles/japanese/Python4Japanese-2
・ユニコード文字列を使うようにすれば、環境に合わせて自動的にエンコーディ
 ングを変えてくれる。

ので、一つのスクリプトファイルが、どんな環境でも文字化けしたりせずに動
くのですが。

http://www.rubyist.net/~matz/20070926.html#p01
ここを読むと、良く分からないのですが、どうもそういう方向には向かってい
ないように見えます。

しかしどう書いたらいいのか、良く分かりません。
397396:2007/11/15(木) 03:33:07
訂正、というか補足です。

> ・ユニコード文字列を使うようにすれば、環境に合わせて自動的にエンコーディ
>  ングを変えてくれる。

これは出力エンコーディングのことです。

Pythonで
print u"ほげ" # uが頭に付くのはユニコード文字列

と書けば、ソースや環境のエンコーディングによらず、正しく「ほげ」が表示
されます。
398デフォルトの名無しさん:2007/11/15(木) 04:33:01
>>396
残念ながら、Rubyではご期待に応えることができません。
ファイルごとに文字コードを指定できるPythonの機能は、Rubyに限らず他の言語でもあっていいかもね。
399デフォルトの名無しさん:2007/11/15(木) 07:03:50
>>387
その気概をまず自分がここに書き込む時に発揮してくれ。
400デフォルトの名無しさん:2007/11/15(木) 07:05:17
>>396-397
ファイルごとの文字コード指定は出来るようになるらしい
出力文字コードの自動変換については情報なし

http:/pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=m17nQuestions
401デフォルトの名無しさん:2007/11/15(木) 07:31:22
>>399
2chの書き込みとガチで対比させるレベルの言語か・・・
402デフォルトの名無しさん:2007/11/15(木) 08:45:09
なんつーか、勘違いしてるんだよな。
言語環境は至れり尽くせりが当たり前とか。
そりゃマイクロソフトなどの企業が作ってんならまだしも、これはOSSだよ?
文句があるなら協力するのが筋だっつーのを理解してない。ゆとり。
403デフォルトの名無しさん:2007/11/15(木) 08:52:53
ttp://dev.ariel-networks.com/articles/workshop/ruby/
RoRを使えるようになることが目的のRuby解説(既存言語学習者用)

> ハッシュテーブル(3)ハッシュテーブルのキーには何でも使えますが、シンボル(後述)を使うことが多いです
> 使い勝手と可読性は文字列と同程度で、実行が速いので、使えるならシンボルを使うこと。
RoRではそうなん?

> メソッドの最後の引数がハッシュテーブルの時、{} を省略できます。
> # 一番省略したパターン (こっちがRubyでは一般的)
> method :key1 => "val1", :key2 => "val2"
一般的なん?

> Rubyの慣習
> symbolを多用
> 複数行のブロックは do end。単一行は { }
> コマンドや宣言っぽいメソッド呼び出しでは () を省略
> メソッド呼び出しの最後の引数のハッシュは {} を省略
404デフォルトの名無しさん:2007/11/15(木) 09:14:52
> シンボル(後述)を使うことが多いです
シンボルのほうが「速い」のは事実でよく指摘されてるよね(いちいちStringオブジェクトを作らないから)
Ruby界隈で使用が絶対的に一般的かどうかはちと微妙(少なくとも、初心者に勧める例はあまり見ない)
まあ、自分の中で使うと一旦決めりゃそれ以降はずっとシンボルを使うけどな
RoRで時々見るハッシュのキーを1まんこくらい作ったり消したりするスクリプトなら違いが効いてくるんじゃないかしら

> 一番省略したパターン (こっちがRubyでは一般的)
printとかputsとか特定の関数的メソッド以外で引数のカッコを省略するのは現状ではそれほど一般的ではないと思われ
メソッドなんだかただの変数なんだか何かの引数なんだか一発でわかりにくいじゃん
書くときのわずかなタイプ量削減のせいで後々ずっと読みにくくなるのは愚行と思えるがどうだろ

もうちょっと本気で広く使われるようになれば強いコンセンサスもできて来るんだろうけど、ある意味過渡期だね
405デフォルトの名無しさん:2007/11/15(木) 09:49:18
>>403-404
こんなところで書かなくていいよ。はてブにでも書けばいいから。

あと、書き方にはちゃんとRubyコーディング規約ってのがあるから。
だいたい、PerlからTIMTOWTDIを継承してるのに強いコンセンサスなんて不要。
406デフォルトの名無しさん:2007/11/15(木) 10:04:00
最後の行とそのひとつ上の行でかなり真逆なことを言ってると思うんだが>>405の中ではこれで平気なんだろうか

>>404
HashにSymbol云々はattr*を使うようになるあたりでだいたいスタンスが固まる
「なんだ全部Symbolでいいじゃん」と感じる人は少なくない模様
407デフォルトの名無しさん:2007/11/15(木) 10:10:38
>>405
公式なコーディング規約なんてあったか?
shugo.netの規約と、LoveRubyNet WikiのRubyCodingStyleしか見たこと無いが
408デフォルトの名無しさん:2007/11/15(木) 10:13:23
>>407
オフィシャルなものは無い

特定の企業の内部規約を公開している、といった風情
公開時の主流だった書き方を知るためには役立つけど、その程度
409デフォルトの名無しさん:2007/11/15(木) 10:17:55
>>408
いや、それほど主流でもなかったぞ
Rubyの言語性能と文法と直感性に則ったコーディングスタイルだとはあんまし言えない

現時点で大人数でがーっとまとめれば少数のパターンに収束すると思うんだけどねえ
そこから好みに合うパターンを取捨選択するということで、誰かやってみない?
410デフォルトの名無しさん:2007/11/15(木) 10:26:43
・インデントはスペース2個。タブは氏ね

はい次
411デフォルトの名無しさん:2007/11/15(木) 10:37:22
Rubyってタブ文字人気ないよね
412デフォルトの名無しさん:2007/11/15(木) 10:40:59
rubyにはpython -iのようなものはないのでしょうか?
指定したファイルを実行した後、対話モードになるやつです。
413デフォルトの名無しさん:2007/11/15(木) 10:50:22
>>410
おれ4個派だから2個はだめ
414デフォルトの名無しさん:2007/11/15(木) 10:55:31
>>412
残念ながら無いはず
irb から require './hoge.rb' しても期待通りには動かない
415412:2007/11/15(木) 11:22:33
>>414 そうですか。ありがとうございます。
416デフォルトの名無しさん:2007/11/15(木) 11:23:27
>>414
最後の行について詳しく教えてください。
「期待通りに動かない」とは、本来はどのように動くべきなのに、
実際にはどのように動くのでしょうか?
417デフォルトの名無しさん:2007/11/15(木) 11:52:40
$ cat ./test.rb
puts 'loading...'
toplevel = 'toplevel!'
@toplevel = '@toplevel!'
TOPLEVEL = 'TOPLEVEL!'
def method ; 'toplevel'; end
class Hoge
CONST='HOGE!'
def method
'hoge!'
end
end
puts 'done!'

$ irb -r ./test.rb
loading...
done!
irb> toplevel
NameError: undefined local variable or method `toplevel' for #<Object:0x402ea9c0 @toplevel="@toplevel!">
from (irb):1
irb> p @toplevel,TOPLEVEL,method
"@toplevel!"
"TOPLEVEL!"
"toplevel"
nil
irb> Hoge::CONST
"HOGE!"
irb> Hoge.new.method
"hoge!"

うーん、トップレベルのローカル変数にだけアクセスできないな
他のは平気なのかな?
418デフォルトの名無しさん:2007/11/15(木) 12:10:31
>>414
irbから eval File.read('hoge.rb') とするのはどうでしょう
419デフォルトの名無しさん:2007/11/15(木) 12:32:34
>>418
それなら普通に動くはず
irb 自体の影響を最小限にするために irb -f で起動したほうがいいかも
420396:2007/11/15(木) 13:03:34
>>398 >>400
現状ではできないのですね。残念です。

> 出力文字コードの自動変換については情報なし

これはやる予定は無いのだと思います。

[Ruby] M17N開発会議
http://www.rubyist.net/~matz/20070926.html

> 最近主流っぽいUCS(Universal Character Set)モデルを 採用するか、日本の
> 伝統的文字列処理の延長線上で(ある意味、茨の道)なんとかするか という話。
> 結局、後者で頑張ることに。
> (略)
> エンコーディングを明示的に指定しない出力は文字列のバイト表現を直接出
> 力する

こういう方針に決まったようです。

ということで、自分がどうするかはちょっと考えることにします。ありがとう
ございました。
421デフォルトの名無しさん:2007/11/15(木) 16:48:20
>>406
俺は「なんだ全部ClassやStructでいいじゃん」と感じたな
422デフォルトの名無しさん:2007/11/15(木) 17:40:58
require "sdl"

SCREEN_W = 640
SCREEN_H = 480

SDL.init(SDL::INIT_EVERYTHING)
SDL::TTF.init
screen = SDL.set_video_mode(SCREEN_W, SCREEN_H, 16, SDL::SWSURFACE)
font = SDL::Kanji.open("Game/jiskan16-2004-1.bdf", 15)
font.set_coding_system(SDL::Kanji::SJIS)

haikei = SDL::Surface.load("Game/BG10a.jpg")
font.put(screen, "テスト", 30, 350, 0, 0, 0)
screen.flip
screen.put(haikei, 0, 0) #画像提示
screen.update_rect(0, 0, 0, 0)
loop do
while event = SDL::Event2.poll
case event
when SDL::Event2::Quit, SDL::Event2::KeyDown
exit
end
end
end
というプログラムがあるのですが
なぜか
game.rb:20: [BUG] Segmentation fault
ruby 1.8.6 (2007-06-07) [i486-linux]

Aborted (core dumped)
というエラーが出ます
どうすればいいのでしょう?
423デフォルトの名無しさん:2007/11/15(木) 21:12:31
BUGと出た場合はMLで報告。
424デフォルトの名無しさん:2007/11/15(木) 23:23:50
例によってSDLのせいだと思うけどな。
425デフォルトの名無しさん:2007/11/15(木) 23:55:51
あっ、SDL入れてました
どっちに報告するといいのでしょうか
426デフォルトの名無しさん:2007/11/16(金) 01:09:07
427デフォルトの名無しさん:2007/11/17(土) 16:28:11
for i in 1..10; p i; end
で1から10まで表示されますが、10から1へ表示するベストプラクティスを教えてください。
n = 10
for i in (1..n).to_a.reverse; p i; end
は n が大きいときに巨大な配列を作成するので、あまり効率がよくありません。
428デフォルトの名無しさん:2007/11/17(土) 16:41:19
10.downto(1) do |i| p i end
pとputsは意味が違うので注意。Fixnumだと見た目かわらんが。
429デフォルトの名無しさん:2007/11/17(土) 18:26:37
Rubyでfor文って使うことある?
言語の乗り換えとか最初のうちは仕方ないけど
430デフォルトの名無しさん:2007/11/17(土) 19:09:17
C言語で同じ型の変数を1行でまとめて宣言するみたいに
// int hoge, fuga, piyo;

Rubyでインスタンスをまとめて生成する方法はありませんか?
hoge = MyClass.new
fuga = MyClass.new
piyo = MyClass.new
・・・
という書き方を避けたいんですが・・・
431デフォルトの名無しさん:2007/11/17(土) 19:19:45
staticなら別だが、
int hoge, fuga, piyo;
も変数宣言してるだけで初期化はしてないぞ。
432デフォルトの名無しさん:2007/11/17(土) 19:21:56
>>430
つ多重代入
433デフォルトの名無しさん:2007/11/17(土) 19:36:03
irb> a,b,c = ['A','B','C'].map{|e| Regexp.new(e) }
[/A/, /B/, /C/]
irb(main):004:0> p a,b,c
/A/
/B/
/C/
nil
irb> a,b,c = Array.new(3).map{ Hash.new }
[{}, {}, {}]
irb> a['key']='val'
"val"
irb> p a,b,c
{"key"=>"val"}
{}
{}
nil
irb>
434デフォルトの名無しさん:2007/11/17(土) 19:42:47
map しなくても Array.new(3) にブロック渡せばいい
435デフォルトの名無しさん:2007/11/17(土) 20:17:58
>429
Railsでは多用してると聞いたことがある
436デフォルトの名無しさん:2007/11/17(土) 20:20:05
Rubyのfor文の書き方はよく忘れる。
そして(実害はないんだが)inが予約語だということもよく忘れる。
437デフォルトの名無しさん:2007/11/17(土) 20:27:27
>>403を見る限り、Railsの中身はなかなかカオスだな
「動いて便利ならいいじゃん!」ってのはその通りではあるんだが

もしかして、Railsの中身をRubyっぽく書き直したらもうちょっと速くなったりするか?
438デフォルトの名無しさん:2007/11/17(土) 20:30:03
Railsは「Rubyっぽく」リフレクション使いまくりなせいで遅いのだ。

439デフォルトの名無しさん:2007/11/17(土) 21:26:29
>>428
なるほど、Integer#downto()というのがあるんですね。ありがとうございます。
しかしこれだと for 文では使えないですね。
for i in 10.downto(1) do puts i end #=> LocalJumpError: no block given
残念。

>>430
hoge, fuga, piyo = [MyClass.new, MyClass.new, MyClass.new]
とか
hoge, fuga, piyo = (1..3).collect{MyClass.new}
とかどうでしょう?
440デフォルトの名無しさん:2007/11/17(土) 22:02:38
> しかしこれだと for 文では使えないですね。

はぁ?w
441デフォルトの名無しさん:2007/11/17(土) 22:09:03
あのな、downtoでループするの。

442デフォルトの名無しさん:2007/11/17(土) 22:12:00
>>439
ちょ、使い方間違ってるw

10.downto(1) do |i|
 puts i
end
443デフォルトの名無しさん:2007/11/18(日) 00:08:17
>>442
ブロックつきで呼び出すのは分かってます。>>428でそう書いてありますから。
ただ
for i in 1..10 do puts i end
はできるのに、その逆(10から1)だとfor文が使えないのが残念だというだけです。
444デフォルトの名無しさん:2007/11/18(日) 00:19:20
for文は最初から順番に辿るという機能しかない。
ふつーは使わないから存在自体忘れていいよ。
445デフォルトの名無しさん:2007/11/18(日) 00:23:56
それって for の問題より 10..1 がないってこと?

>>444
多分 >>443 さんがいいたいのは他言語だと

for(int j=10; j>0 ; --j)

みたいなことなんじゃないかね。

確かに ruby だと for 使わないなぁ。ruby での使いかた忘れてる。
446デフォルトの名無しさん:2007/11/18(日) 00:41:10
どうしてrb厨はrubyのforは欠陥品だから使えないと素直に認めれないのはなぜ?
447デフォルトの名無しさん:2007/11/18(日) 00:50:30
例えば今あるのが欠陥品で、もっと便利に使えるようになっても
Rubyでは絶対使わんだろうな
448デフォルトの名無しさん:2007/11/18(日) 01:00:45
低機能なforなんか使わんでEnumerableしろよ、というのをどうよめば
「for文が低機能だなんて認められない」という主張だと誤読するんだろう。
449デフォルトの名無しさん:2007/11/18(日) 01:11:09
俺も他の言語では for 使うけど ruby では、たとえ

for i in 10.downto(1) do puts i end

たできたとしても

10.downto(1) do |i| puts i end

で十分なのに for 使うのにどういうメリットがあんの?
なんかもっと説得力のある例無いんかね。
450デフォルトの名無しさん:2007/11/18(日) 01:37:07
単に慣れだろ
俺もRuby触り出したころはfor使いたくて仕方なかったの思い出したわ
451デフォルトの名無しさん:2007/11/18(日) 06:55:06
>>429
Rubyの for って確かスコープ作らないんだっけ?
イテレータとの差別化するとしたらそこじゃね
452デフォルトの名無しさん:2007/11/18(日) 08:16:51
Ruby の制御構造 for はいわゆる for 文ではない
既存の言語の for 文にいちばん近いのは Integer#step だろう

10.step(1,-1){|i| puts i }

引数がいきなり2つあって一見動作不明なのも C 言語系 for 文と同じ
あと、for が Range を受け取るのはオプショナルな動作なので配列渡すようにしとけ

>>451
ループの中で新規に変数を作成する場合は for 文のほうがわかりやすいかもしれない
もうちょっと慣れると「このデータ作成に for ループ使うのは変だ」と思うようになるんだけどさ
Ruby の配列指向は一旦これに染まるととても安楽に物事を処理できる
453デフォルトの名無しさん:2007/11/18(日) 09:23:20
puts と print って普段どっち使うの
454デフォルトの名無しさん:2007/11/18(日) 09:45:00
>>453
俺は puts, print, p, 制御が必要なら printf のうち
都合の良いのを使ってる。puts/print どっちでも良い時も多いけど。
455デフォルトの名無しさん:2007/11/18(日) 10:02:36
>>453
俺の場合はputs一択

式展開が強力なRubyでは、たいていの場合 puts で事足りるし
そうでない場合は $stdout.write や $stdout << を使ってる
456デフォルトの名無しさん:2007/11/18(日) 10:11:45
オブジェクト至高なんだから#display使えよ
457デフォルトの名無しさん:2007/11/18(日) 10:17:33
>>455
そんなに桁数がいらない、とか言う場合どうするの? eg.
puts Math::PI
458デフォルトの名無しさん:2007/11/18(日) 11:06:03
>>457
なんつーか、Rubyでは使用用途的にもそういう状況にぶち当たること自体がそう多くないと思うんだがどうか

もし文字列をいじる必要があるのなら「Stringのメソッドを使った結果の文字列全体」をputsかprintで表示するよ
表示自体をprintfでいじるようなことはまずしないと思う

puts "#{"fmt1"%str1} #{"fmt2"%str2}"
puts "#{sprintf("fmt1",str1)} #{sprintf("fmt2",str2)}"
459デフォルトの名無しさん:2007/11/18(日) 11:08:45
printfは使わないなぁ。

個人的には
puts format % args
が多い。
460デフォルトの名無しさん:2007/11/18(日) 11:26:04
printf使用者層は文字列の#{}埋め込みを使わない層と被ってる印象がある
いや、自分でわかりやすいように便利に使ってくれて構わないんだが、なんとなく
461デフォルトの名無しさん:2007/11/18(日) 14:07:31
>460
俺がまさにそれだ。
書式と内容は分離したい派。
#{}内に式が入るとごちゃごちゃし易いし。
改行入れる場合は printf でなく >459 使うけど。
462デフォルトの名無しさん:2007/11/18(日) 14:09:56
個人的な事情だが、gettext使うので文字列展開で埋め込むのは難しいことが多い。
463デフォルトの名無しさん:2007/11/18(日) 14:23:00
>>458
そういう書き方かぁ。俺はテキスト処理もするけど、簡単な計算
もさせてファイルに書き出したりとかもするから数値書き出によくあたる。
両方一緒に処理する必要がある時に ruby とか便利でよく使う。

人それぞれ使いやすい方法という感じだな。
puts と sprintf を両方使うなら俺はやっぱり printf 一発で行っちゃうな。
他言語も使ってて、それとも近いし。
464デフォルトの名無しさん:2007/11/18(日) 14:37:34
RubyでCGIを簡単に作る方法を教えてください。
但しcgi.rbとerubyとRuby on Railsはダメです。
465デフォルトの名無しさん:2007/11/18(日) 14:58:49
GETなら環境変数QUERY_STRING、PUTなら標準入力を拾って、
&(or ;)で分割したりしてパラメータを拾い出し、
目的の結果を組み立てて、
print "Content-Type: text/html¥r¥n¥r¥n"
の後に結果を書く。
466デフォルトの名無しさん:2007/11/18(日) 15:02:46
webrick/cgi
467デフォルトの名無しさん:2007/11/18(日) 16:49:39
>>465
PUTじゃなくてPOSTだろうし
"\r\n\r\n"だとWindowsに置いたらアウトだと思うんだが
468デフォルトの名無しさん:2007/11/18(日) 16:58:55
ヘッダの改行は¥r¥nでってのはメール(RFC2822)だけ?
469デフォルトの名無しさん:2007/11/18(日) 16:59:59
いや、Windowsだと¥r¥nは CR CR LF の並びになるのか。
470デフォルトの名無しさん:2007/11/18(日) 18:33:12
>>467,469

はいはい、なりません、なりません。
471デフォルトの名無しさん:2007/11/18(日) 20:32:00
おまいらワロタ
472デフォルトの名無しさん:2007/11/18(日) 22:42:16
binmodeうめえ
473デフォルトの名無しさん:2007/11/18(日) 23:16:51
たとえばhttp://news22.2ch.net/test/read.cgi/newsplus/1194998661/ 内の
リンクを抽出してHTMLなどで表示させるプログラムってどうやるの?
474デフォルトの名無しさん:2007/11/18(日) 23:47:45
さぁ方法としてはこんな感じじゃね?しらねーけど
require "uri"
require "net/http"
Net::HTTP.version_1_2
REGEXP_URL = // #URLの正規表現(自分で調べる、h削った奴とかも考えないと駄目だよね)

dat = Net::HTTP.get(URI::parse("http://news22.2ch.net/newsplus/dat/1194998661.dat"))
urllist = dat.scan(REGEXP_URL)
File::open("hoge.html", "w") do |io|
 urllist.each do |url|
  io.puts "<a href=\"#{url}\">#{url}</a>"
 end
end
475デフォルトの名無しさん:2007/11/19(月) 02:59:43
>>449
> for i in 10.downto(1) do puts i end
1.9だとdowntoがEnumeratorを返すから、これも動くな。

>>474
つ URI.extract
476デフォルトの名無しさん:2007/11/19(月) 04:25:30
p 日本語 だと文字化けするんだけど
RDEではどこに-Ksを入れればいいの?
引数設定して引数を与えて実行しても文字化けしたままでした
477デフォルトの名無しさん:2007/11/19(月) 04:38:39
先頭行に
#! ruby -Ks
478デフォルトの名無しさん:2007/11/19(月) 04:41:27
>>477
ありがとう
できました!
479デフォルトの名無しさん:2007/11/19(月) 06:14:18
>>475
>つ URI.extract

ほぉこんなのもあったのねん
480464:2007/11/19(月) 08:41:50
誰も答えられないのかよ
やっぱrubyはライブラリ周りがクソだな
周りにこんなやつしか集まらないmatzに同情しちゃうよ
481デフォルトの名無しさん:2007/11/19(月) 12:56:46
"あ".length => 2

これを1にするには?
482デフォルトの名無しさん:2007/11/19(月) 13:01:17
$KCODE = 's'
require 'jcode'
p "あ".jlength #=> 1
483デフォルトの名無しさん:2007/11/19(月) 13:45:44
484デフォルトの名無しさん:2007/11/19(月) 14:31:11
>>464
webrick
485デフォルトの名無しさん:2007/11/19(月) 17:11:34
486466:2007/11/19(月) 20:47:50
ナチュラルにスルーされた俺涙目
487デフォルトの名無しさん:2007/11/19(月) 21:13:50
つうかさ、
>>464
>RubyでCGIを簡単に作る方法を教えてください。
>但しcgi.rbとerubyとRuby on Railsはダメです。
なんでいちばんよく使われるこの3つを外すのか理由が書いてないのはなぜ?
理由が分からんから、どれを紹介しても「ダメです」といいそう。
こんなのどうみてもアンチの質問だろ
488デフォルトの名無しさん:2007/11/19(月) 21:17:19
そこまでわかってんならスルーできるだろ常考
489デフォルトの名無しさん:2007/11/19(月) 22:08:55
いや、なんかかまってほしそうだったからさ。
490デフォルトの名無しさん:2007/11/19(月) 22:35:47
言い訳は無用
491デフォルトの名無しさん:2007/11/19(月) 23:04:36
>>488
だからみんなスルーしてたんじゃないか

                             ... 464以外は。
492デフォルトの名無しさん:2007/11/20(火) 08:09:34
webrick/cgi <-------------> Rails
           ↑ココ

この辺に位置するWebフレームワークが欲しい。SQLを要求するような
Railsはちょっと牛刀すぎる。かといって生CGIは触れたくない。
いい落としどころは無いものか・・・
493デフォルトの名無しさん:2007/11/20(火) 08:15:25
RailsってSQLを要求したっけ?
494デフォルトの名無しさん:2007/11/20(火) 08:15:33
> SQLを要求するようなRails

お前Rails使ったこと無いだろ。
DB無しのアプリだって普通に作れるぞ
495デフォルトの名無しさん:2007/11/20(火) 08:24:43
そりゃ作れるけど普通というのは無理があるだろ。
とにかく依存性が大きくて大規模すぎということが言いたかったわけだ。
496デフォルトの名無しさん:2007/11/20(火) 08:42:16
もしかしてscaffoldしか使ったこと無いとか?
ファイルベースの掲示板とかバリバリ作ってるよ
497デフォルトの名無しさん:2007/11/20(火) 09:22:58
railsをCGIとして動かしたらトップページ表示するだけで
1秒近く掛かったのでクソと判断したが間違ってたのか?
498デフォルトの名無しさん:2007/11/20(火) 09:24:37
>>496
一般的ではないだろ。おまえが乾電池をケツに入れてオナニーしてるのは知ってるよ。
でもそれは一般的じゃないんだ。
499デフォルトの名無しさん:2007/11/20(火) 09:36:20
>>492
Nora
ただし分かりやすいマニュアルはないので、根性で理解すべし

あるいは自分でフレームワークを作る

>>497
Railsを通常の(1回ごとにプロセスを起動しなおす)CGIスクリプトとして
動かそうというのが、まず間違った発想だと思う
500デフォルトの名無しさん:2007/11/20(火) 09:50:19
>>498
使ったこと無いなら無いって素直に言えば許してあげるのにw
501デフォルトの名無しさん:2007/11/20(火) 15:23:03
RailsってDBとの連携が簡単ってのがウリじゃないのか
502デフォルトの名無しさん:2007/11/20(火) 16:06:57
CGIな機能は二の次だよな
フォームのGUIも二の次

「ふつう」のネットお楽しみ機能ならnet/httpとCGI.rbとPStoreとrexmlで作ったほうがうまく動くことのほうが多い
それこそアプリケーションを考えて作らないとRoRは鯖リソースと時間の無駄撃ちだよ
503デフォルトの名無しさん:2007/11/20(火) 17:52:19
>>487
無理矢理弁護してみると、理由は既に書いてあって
「簡単」じゃなかったんだよ、その3つは。464 にとっては。
504デフォルトの名無しさん:2007/11/20(火) 18:31:51
>>502
らめぇ! PStoreはらめぇ!
505デフォルトの名無しさん:2007/11/20(火) 18:33:43
彼女の実家からなると金時が山ほど送られてきたんだが
彼女が炊飯器で芋を炊き出したw
炊飯器で芋炊けるのかよwww
506デフォルトの名無しさん:2007/11/20(火) 18:34:32
すいません誤爆しました
507デフォルトの名無しさん:2007/11/20(火) 18:37:17
なzうぇらめなんですか?
508デフォルトの名無しさん:2007/11/20(火) 18:47:38
>>505
ArgumentError
509デフォルトの名無しさん:2007/11/20(火) 18:50:23
自前で排他制御とパースを考えてテキストファイルに保存するよりは
PStoreのほうが確実性とか耐障害性とかがマシかと思われ

これより上のシステムは……なんだろう
数MB程度のデータなら下手にDB試行錯誤して使うより速いと思うぞ
510デフォルトの名無しさん:2007/11/20(火) 18:55:15
>>507
rubyのバージョンが古くなると駄目になるから
511デフォルトの名無しさん:2007/11/20(火) 19:33:16
どう駄目になるのか言ってみ? ん?
512デフォルトの名無しさん:2007/11/20(火) 19:34:47
そんなに感情的になるなよドカスが
513デフォルトの名無しさん:2007/11/20(火) 19:39:14
>>510に答えられないような奴は
「Rubyのバージョンが上がると動作しなくなる可能性があるからPStoreは駄目」
なんて口走って欲しくはないな
したり顔で害悪を撒き散らすだけのオタクと重なる
514デフォルトの名無しさん:2007/11/20(火) 19:42:50
標準添付のオブジェクトの形式でしかPStoreで保存しない主義の俺は勝ち組
515デフォルトの名無しさん:2007/11/20(火) 19:48:05
いまいちPStoreの意味がわかんない俺
具体的に何につかうんだべ?
ハローワールド的に教えてくんろ
516デフォルトの名無しさん:2007/11/20(火) 20:34:08
>>511
incompatible marshal file format (TypeError)

>>514
ArrayやHash、StringしかPStoreに保存しないってことか?
それでもバージョン変わると読めなくなるよ

>>515
データを任意のファイルに保存する、としか言い様がないと思う
まずリファレンス見れ
517デフォルトの名無しさん:2007/11/20(火) 21:22:22
古いバージョンのRubyくらい手元にあるだろ
この世にある古いRubyが勝手に消えたり急に動作しなくなったりするわけじゃない

pstoreファイルだけ持ってきて
古いバージョンのPStoreで読んで
テキストとかの中間形式に変換して一時保存して
新しいバージョンのPStoreで書き込めばいい
(バージョンアップでスクリプト自体が動作しないような場合はそもそもPStore以前の問題なので除外)

その間システムが止まるだあ?
あんたの使ってるサーバはある日不意にプログラムがバージョンアップするのか? 違うだろ?
予め予告があったり手動でバージョンアップしたりするだろ? その間に変換しろよ
518デフォルトの名無しさん:2007/11/20(火) 21:30:31
>>517のコストを支払いたくない場合はPStore系列ではなくて他の保存形式を選択することになるな
それこそ「PStoreを常用するかどうかはプログラムがどれだけミッションクリティカルかに依存する」というつまんない結論に
519デフォルトの名無しさん:2007/11/20(火) 21:50:09
SQLiteじゃだめなのか?DBサーバ必要ないし、SQL使えるし。
520デフォルトの名無しさん:2007/11/20(火) 22:04:01
突然消え去るのがPStore
521デフォルトの名無しさん:2007/11/20(火) 23:15:13
Rubyってなんでスクリプト言語という選択をしたのだろうか
何度Rubyがコンパイラ言語ならなぁ・・・と思ったことか。
522デフォルトの名無しさん:2007/11/20(火) 23:38:34
>>492
CGIKitはどうでしょうか
ドキュメントが日本語でしっかり書かれてあるという奇跡のようなフレームワークです
るびまにも解説あります
ttp://jp.rubyist.net/magazine/?0005-CGIKit
ほかはrubyforgeで CGI とか Web とか Framework をキーにして検索すれば見つかると思います
海外では Nitro と merb がそこそこ知名度があるようです
英語が読めないならあきらめて cgi.rb 使ってください
523デフォルトの名無しさん:2007/11/21(水) 00:10:57
>>517
CGIスクリプトだってことを忘れてないか?
バージョンダウンする場合どうするんだよ
524デフォルトの名無しさん:2007/11/21(水) 00:17:19
>>521
俺は script 言語だからこそ ruby を使ってるけどね。用途次第だね。

compiler もあったら選択肢が増えていいだろうね。
あっちゃいけないとは決まってはないのでは。
525デフォルトの名無しさん:2007/11/21(水) 00:29:20
てか、コンパイル方式だったら何がよくなるか分かってんの?

速度は変わんないよ。コンパイル方式にしても。
526デフォルトの名無しさん:2007/11/21(水) 00:36:05
>>525
evalも__send__も使ったことのない人にはいくら説いても無駄かと。
527デフォルトの名無しさん:2007/11/21(水) 00:44:07
>>519
SQLiteのインストールを前提にするならいい選択肢
528デフォルトの名無しさん:2007/11/21(水) 00:57:06
バッチファイルのpauseみたいな動作をさせたいのですが何か良い方法がありましたら教えてください
これまで
$<.gets
で代用していたのですが引数を取って起動した場合期待した動作をしてくれないので代わりとなる方法を探しています
529デフォルトの名無しさん:2007/11/21(水) 01:10:15
/dev/ttyとかCONをopenすればいいんじゃない?
530デフォルトの名無しさん:2007/11/21(水) 06:13:01
`pause`
531デフォルトの名無しさん:2007/11/21(水) 06:34:23
$stdin.gets

というか、困ったなら自分の使ってるメソッドやオブジェクトのマニュアルはきちんと読め
ARGFとARGVとSTDINの違いを説明してない解説は窓から投げ捨てろ

> ARGF
> 引数(なければ標準入力)で構成される仮想ファイル (詳細は ARGF を参照)
532デフォルトの名無しさん:2007/11/21(水) 09:50:06
>>527
SQLite を標準添付にすればいいのにね。ライセンスも (たぶん) 問題ないと思うし。
533デフォルトの名無しさん:2007/11/21(水) 10:17:08
SQLiteはパブリックドメインだよ
Python2.5にも入ってるしsqlite3と込みで標準添付にしてほしいなあ
軽量で設定不要、型が無いからRubyには持って来いだと思うんだが
534デフォルトの名無しさん:2007/11/21(水) 20:01:35
たしかAIRもSQLite3だったよな。
535デフォルトの名無しさん:2007/11/21(水) 20:23:50
>>532-533
仮にSQLite/Rubyが標準添付されたとしても
SQLite本体のインストールは必要だから、あんまり変わらない気がする
536デフォルトの名無しさん:2007/11/21(水) 21:05:50
>>535
そのSQLite本体を添付しろという話なわけだが
537デフォルトの名無しさん:2007/11/21(水) 21:28:33
気持ちは分からなくないが同封する必要がない
538デフォルトの名無しさん:2007/11/21(水) 22:58:25
ここまでの流れをまったく読んでないのか?
539デフォルトの名無しさん:2007/11/22(木) 01:48:04
sqliteエンジンをRubyの拡張モジュールに静的リンクすればおk
もともとそういうアプリ内組み込みDBなんだから
540デフォルトの名無しさん:2007/11/22(木) 05:36:49
Ruby内でsqlite使おうとすると、sqliteコマンドの「.」で始まる構文が使えないからなぁ…
テキストのインポートもできないしsqliteは便利なのに機能を全て活かせるようにしてほしいわ。
541デフォルトの名無しさん:2007/11/22(木) 06:32:36
>>540
なんか勘違いしてる気もするが
system('sqlite3 foo.db < bar.sql')でいいじゃまいか
542デフォルトの名無しさん:2007/11/22(木) 06:33:01
tk みたいな添付方法ならわからなくもないけど sqlite 本体を添付するのは反対だなぁ
mysql とか posrgres とか他のデータベース使う人にとっては無用の長物でしかないし
ちゃちな cgi なら pstore でいいじゃん
個人の環境でわざわざ ruby のバージョンダウンさせる奴もいないだろ
543デフォルトの名無しさん:2007/11/22(木) 10:30:55
標準出力のリダイレクトについて質問させてください。
例えば次のようなコードf.rbで、
while
sleep 1
puts "ふぁっく"
end
次のように実行しても
ruby f.rb>>fuck.log
fuck.logには何も書き込まれません。
しかし、上のコードのwhileを除くとちゃんと書き込まれます。
上のコードでfuck.logに書き込むには、open等を使ってコードの中で処理するしかないのでしょうか?
544デフォルトの名無しさん:2007/11/22(木) 10:39:37 BE:368256072-2BP(250)
>>543
while
 sleep 1
 puts "ふぁっく"
 STDOUT.flush
end
545デフォルトの名無しさん:2007/11/22(木) 10:50:38
>>543-544
whileの条件式が抜けてる
546デフォルトの名無しさん:2007/11/22(木) 10:52:01
ですよね
547デフォルトの名無しさん:2007/11/22(木) 11:03:06 BE:210432724-2BP(250)
しかし、無限ループするという・・
なんでだろう
548デフォルトの名無しさん:2007/11/22(木) 11:06:04 BE:394560353-2BP(250)
ああ、なるほどsleep 1が条件式として扱われてるのか
549デフォルトの名無しさん:2007/11/22(木) 11:09:05
>>544
おお、ありがとうございます!
550デフォルトの名無しさん:2007/11/22(木) 11:10:44
>>548
なんでそうなるの?
551デフォルトの名無しさん:2007/11/22(木) 11:12:33
open等を使ってコードの中で処理したとしても、
flushしなければ同じことが起こり得るので注意した方が良いと思われ。
552デフォルトの名無しさん:2007/11/22(木) 11:27:04 BE:368257027-2BP(250)
>>550
同じ行に条件式がないときは
文法エラーを出さずに次の行を探すとかそういう処理なんだろうね。

本当に正しい動作なのかはわからない。
553デフォルトの名無しさん:2007/11/22(木) 11:32:31 BE:841728184-2BP(250)
Rubyリファレンスマニュアルの字句解析より

===
識別子と一部のリテラルの途中を除いては任意の場所に空白文字やコメントを
置くことができます。空白文字とはスペース、タブ、垂直タブ、バックスペース、
キャリッジリターン、ラインフィード、改ページです。改行は行が明らかに次の行
に継続する時だけ、空白文字として、それ以外では文の区切りとして解釈されます。

改行と認識されるのは、キャリッジリターン+ラインフィードかラインフィードです。
===

これかな?ここでは改行もスペースと同じ扱いなんだろう。
554デフォルトの名無しさん:2007/11/22(木) 12:05:01
>>553
ふむ。
「改行は行が明らかに次の行に継続する時だけ」
というのが微妙な表現な気がするけど、これが今回の挙動に合致するのかな?
555デフォルトの名無しさん:2007/11/22(木) 12:10:48
する。

"while" だけで文が完結することはないから。
556デフォルトの名無しさん:2007/11/22(木) 20:22:49
htmlの&#数字とか&ltとかを
その文字に変換するライブラリってありますか?
557デフォルトの名無しさん:2007/11/22(木) 20:33:12
require "cgi"

CGI.unescapeHTML foo
558デフォルトの名無しさん:2007/11/22(木) 20:35:24
関数みたいに使えるからソースそのままパクッといけちゃったり
559デフォルトの名無しさん:2007/11/22(木) 20:38:26
決定版はまだ無いらしい

irb> p CGI.unescapeHTML('<')
"<"
数値参照は苦手の模様
irb> p CGI.unescapeHTML('…')
"…" # "…" が出て欲しい

REXML::Text.unnormalizeでもできるが挙動不審という話が
560デフォルトの名無しさん:2007/11/22(木) 20:40:29
ああしまったうっかりしてた

irb> p CGI.unescapeHTML('&lt;')
"<"
irb> p CGI.unescapeHTML('&#8230;')
"&#8230;" # "…"が出て欲しい
561デフォルトの名無しさん:2007/11/22(木) 22:12:18
557〜560
サンクス
562デフォルトの名無しさん:2007/11/23(金) 23:07:03
EclipseとRDTでやってる人いる?
563デフォルトの名無しさん:2007/11/23(金) 23:09:46
>>541
こちら側の環境がwindowsだからかかもしれないが、sqlite独自のドットコマンドがあってRuby側から
system("sqlite3 test.db '.help'")
と第2引数にドットコマンドを渡すことができないんだよ。
今試してみたら
system('sqlite3 foo.db < create-tbl.sql') もできないわ…
tableの作成や、select、insertはexecuteでできるが、.importや.outputなどが、Ruby側で制御できない
のは不便じゃない?
564デフォルトの名無しさん:2007/11/23(金) 23:20:26
IO.popen('sqlite3 foo.db') {|sqlite3| sqlite3.print File.read('create-tbl.sql') }
はできる?
565デフォルトの名無しさん:2007/11/23(金) 23:34:00
つか、わざわざsystem経由でsqliteコマンドなんて使うのは何でなんだぜ?
566デフォルトの名無しさん:2007/11/23(金) 23:57:51
まったくだ。
567541:2007/11/24(土) 00:03:39
>>563
D:\temp>irb
irb(main):001:0> system('sqlite3 foods.db .help')
.bail ON|OFF Stop after hitting an error. Default OFF
[...]
.width NUM NUM ... Set column widths for "column" mode
=> true
irb(main):003:0> system('sqlite3 foods.db < foods.sql')
=> true
irb(main):004:0> system('sqlite3 foods.db < foods.sql')
SQL error near line 1: table foods already exists
=> false

問題ないように見えるんだぜ
568デフォルトの名無しさん:2007/11/24(土) 00:04:37
>565
>540 のよーな事情があるそうだ
569540:2007/11/24(土) 00:22:19
>>564 sqliteは起動するが、printされない

vurbyで使い捨て処理のコードをexerbでexe化して他人に渡したりしてるのよ。
logの集計などで
・使う人はスクリプトどころか。sqlコマンド自体も知らない
・サーバー上のDB(オラクルとかMysql)を使えない

という場面あって、現状fasterCSVなどで仕方なくやってる感じ。
別に自分でやるなら別にdos窓でそのまま処理するだろうし>>565の言うのも分かる。

570デフォルトの名無しさん:2007/11/24(土) 04:26:41
. で始まるようなのは sqlite3 コマンドのビルトインコマンドだろ
使いたいんなら上でいわれてるように system とか使うしかない
つーか >>563 みたいな作業ならバッチファイルの方が良くないか?
571デフォルトの名無しさん:2007/11/24(土) 13:07:02
Rubyで集合を表すSetクラスつこおうと思ったんだが
べき集合や籍集合のメソッドすらないのか・・・
自分で書かないとダメ?
572デフォルトの名無しさん:2007/11/24(土) 13:10:12
誰か作ってそうだな?
raa 見た?
573デフォルトの名無しさん:2007/11/24(土) 13:10:15
>>571 誤:籍集合 -> 正:積集合
574デフォルトの名無しさん:2007/11/24(土) 13:14:40
積集合はもともとある
575デフォルトの名無しさん:2007/11/24(土) 13:18:17
raaみたらいくつか候補があったのでfinite-setライブラリとやらを使わせてもらう事にしました
576デフォルトの名無しさん:2007/11/24(土) 15:48:13
>>569
open("test.csv", "w"){|f|
f.write("1,Perl,Larry\n2,Python,Guido\n3,Ruby,Matz\n")
}
IO.popen("sqlite3 test.db", 'r+'){|f|
f.write <<EOT
create table test (id, name, author);
.separator ,
.import test.csv test
.mode tcl
select name, author from test;
EOT
f.close_write
print f.read
f.close_read
}
----
"Perl","Larry",
"Python","Guido",
"Ruby","Matz",

本当はpopenしなくても sqlite3 test.db < test.sql とかすれば十分
test.sql にはSQL文だけでなくドットコマンドも含められる
577デフォルトの名無しさん:2007/11/24(土) 16:59:15
正規表現の n オプションて何?
/foo/n
というのを見たんだが。
578デフォルトの名無しさん:2007/11/24(土) 17:02:42
none
579デフォルトの名無しさん:2007/11/24(土) 17:05:45
$KCODEの値を無視して「日本語無視したバイト列」の正規表現
$KCODEはどっかで指定されてる可能性があるんだけどこの正規表現では無視したい、というときに使う
580デフォルトの名無しさん:2007/11/24(土) 17:06:00
>>577
文字コード
581デフォルトの名無しさん:2007/11/24(土) 21:48:35
Rubyのlambda,proc関数の使い方が良く分かりません。 「こういうときに使うと便利」という例があれば教えてください。 - 人力検索はてな
ttp://q.hatena.ne.jp/1195493333
582デフォルトの名無しさん:2007/11/24(土) 22:00:59
Rubyって結局何ができるんですか?Web用途のみですか?
583デフォルトの名無しさん:2007/11/24(土) 22:06:18
地方都市 松江を復興できる
584デフォルトの名無しさん:2007/11/24(土) 22:10:23
Perlのできることの7割とPHPのできることの8割を
若干のリソースの増加と引き換えに楽しく製作できる

Rubyだからこそできるというようなものは特にないし、Rubyだから上手くできるというような分野も特にない

あなたがRubyを見て何もひらめかなければ、今のあなたにRubyは必要のない代物
585デフォルトの名無しさん:2007/11/24(土) 22:14:04
gemすると (OpenURI::HTTPError)
鯖が落ちているだけでしょうか?
586デフォルトの名無しさん:2007/11/24(土) 22:36:07
Banmen = [
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,-1,1,0,0,0],
[0,0,0,1,-1,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0]]

とした時に、Banmen[-1][0]は0となって、Banmen[-1][8]はnilになります。
二つとも定義してないのにどうしてこういう違いが出るのでしょうか?

あと、if文の条件式でnilになるオブジェクトを参照するとエラーになる様なのですが、
そういう仕様なんでしょうか?何か解決案はないものでしょうか?
587デフォルトの名無しさん:2007/11/24(土) 22:40:23
>>584
説明の天才。wikipediaに追加しといてくれ。
588デフォルトの名無しさん:2007/11/24(土) 22:41:30
>>584
PHPにできてRubyではできない2割はなに?
589デフォルトの名無しさん:2007/11/24(土) 22:54:26
うぜぇ
590デフォルトの名無しさん:2007/11/24(土) 23:06:45
>>586
http://www.ruby-lang.org/ja/man/?cmd=view;name=Array
> self[nth]
> nth 番目の要素を返します。先頭の要素が 0 番目になります。 nth の値が負の時には末尾からのインデックスと見倣します(末尾の要素が -1 番目)。nth 番目の要素が存在しない時には nil を返します。
591デフォルトの名無しさん:2007/11/24(土) 23:31:42
>>586
多くの人がなぜか間違えるんだが、素の Ruby には多次元配列というものはない
array[-1][0] は array[-1] の指す要素の持つ [] メソッドに引数 0 を渡したものに過ぎない

あと、後半のはエスパーするに

puts 'target exists!' if h.has_key?('target')

という if 文を書いたとき、何らかの理由で h が nil だった場合

NoMethodError: undefined method `has_key?' for nil:NilClass

とかいう例外が出ることを言ってるんだと思うが、仕様というか記述されてるそのまんまだ
h が nil にならないことをあらかじめ保証するか、条件で弾くか、例外を捕捉しとけ

puts 'target exists!' if !h.nil? && h.has_key?('target')
592デフォルトの名無しさん:2007/11/24(土) 23:38:20
むしろ、Rubyに出来てPHPに出来ないことはありそう。
593デフォルトの名無しさん:2007/11/24(土) 23:42:50
>>591
これって、Ruby使い始めの頃の人だとNilにhas_key?を定義するよね

>>592
そりゃ探せば細かい何かはあるだろ
594デフォルトの名無しさん:2007/11/24(土) 23:55:56
rubyにできないこと?
デバドラ作りかな。
595デフォルトの名無しさん:2007/11/25(日) 00:16:32
>>594
PHPってデバドラ作れるのかよ
596デフォルトの名無しさん:2007/11/25(日) 00:40:50
RubyにはメールをPOPで受信できるクラスとかありますか?
この部分は自作するか他のフリーソフト使うしかないでしょうか?
597デフォルトの名無しさん:2007/11/25(日) 00:42:55
net/pop
598デフォルトの名無しさん:2007/11/25(日) 00:58:56
Rubyに出来ないことってそんなに無いよね
599デフォルトの名無しさん:2007/11/25(日) 01:18:18
クッキーとか保持してくれるHTTPクライアントクラスってあったっけ?
600デフォルトの名無しさん:2007/11/25(日) 01:23:51
>>598
チューリング完全ならどんな「計算」でもできる。
プログラミング言語はチューリング完全だから、どの言語でもできないことはない。
601デフォルトの名無しさん:2007/11/25(日) 01:33:12
いやこの文脈では例えばソケットを扱えないだとかそういう所の
話であるような気がする
602デフォルトの名無しさん:2007/11/25(日) 01:34:27
(Rubyは当然ソケットを扱えるけど)
603デフォルトの名無しさん:2007/11/25(日) 01:36:56
PHPでYコンビネータは書けますか
604デフォルトの名無しさん:2007/11/25(日) 01:46:02
>>599
Perlにあるような超便利な自動処理クライアントは今のところ無い
ヘッダから抜き出して明示的に保管するしかないかと
605デフォルトの名無しさん:2007/11/25(日) 01:52:46
>>599
探してみた

> httpclient
> http://raa.ruby-lang.org/project/httpclient/

これがいけるかもしれない
ただ、ドキュメントを探しているんだが見つからない
英語でいいからどこにあるか知らない?
606デフォルトの名無しさん:2007/11/25(日) 02:40:31
>>599
Mechanizeじゃ駄目なのか?
607デフォルトの名無しさん:2007/11/25(日) 11:13:48
RubyでCurlとか使えないんだっけ
608デフォルトの名無しさん:2007/11/25(日) 15:23:28
Time.now.to_i
とすると、TimeをFixnumに変換できますが、逆はどうすればいいでしょうか。
609デフォルトの名無しさん:2007/11/25(日) 15:27:01
Time.at(#Fixnum)
610デフォルトの名無しさん:2007/11/25(日) 15:28:17
>>609
thank you
611デフォルトの名無しさん:2007/11/25(日) 16:16:09
webrickに関する質問です。
プロキシサーバースクリプトを組んでいるのですが
串の種類の「Anonymous」のようなタイプの串サーバーにするためにはどのようにすればよいのでしょうか?
参考ページなどがあればぜひお願いします。
612デフォルトの名無しさん:2007/11/25(日) 18:35:18
>>611
それがどうなってるのか理解していないのなら作ることはできない
613デフォルトの名無しさん:2007/11/25(日) 23:21:03
"ff"という文字列に、あとから”\x”を指定して
16進数として扱いたいのですが、どのように書けばいいのでしょうか?
614デフォルトの名無しさん:2007/11/25(日) 23:31:47
x = '¥¥x' + 'ff'
eval x.sub(/¥¥/, '0')
615デフォルトの名無しさん:2007/11/25(日) 23:33:15
"ff".to_i(16)
616デフォルトの名無しさん:2007/11/26(月) 00:01:57
>>614-615
ありがとうございます
617デフォルトの名無しさん:2007/11/26(月) 02:12:18
来年4月に新入社員研修で使うRubyの教材を作らないといけないんだけど、
これだけは最低限盛り込んでおけという内容・ポイントはある?
ちなみに本職SEでJavaならなんとか書けるレベル。

この本をポーンと渡されて、参考にしてね。だって。

ttp://www.amazon.co.jp/Programming-Ruby-Pragmatic-Programmers-Guide/dp/0201710897

今のところの構想は、
Rubyのインスコ(今のところの予定はWinXP)を図解で解説
簡単なプログラムの例文を書いて、そこからクラス、オブジェクト、変数を解説
そのプログラムの応用で、条件文、ループ、配列を解説
オブジェクト指向が全員分かるようになるまで詳しく解説、クラスも詳しく解説
他、入出力、例外処理、スレッド・プロセスなどなど。

2週間に1回、課題を用意して自宅でやってくるを3ヶ月しようと思うんだけど。
618デフォルトの名無しさん:2007/11/26(月) 02:15:27
ちなみに、↑の本の第二版(洋書、Ver 1.8)を渡されました。
適当にオンラインで見つけた物を注文した物がそのまま手元に来たと思われます。
619デフォルトの名無しさん:2007/11/26(月) 02:36:31
Win32API/Win32OLEの使い方も教えとけば?
620デフォルトの名無しさん:2007/11/26(月) 02:56:44
新入りが受け身にならなくて済むように
* irbの使い方
* 添付ライブラリや組み込みクラスの使い方の説明
* マニュアルはどうやって読むか/使うか
なんかも教えとくといいんじゃないかと思った。
入門する前の段階も大事っていうか。
621デフォルトの名無しさん:2007/11/26(月) 03:05:44
Webアプリケーションのプロファイルって簡単にとれましたっけ。
もしできるならやり方のヒントだけでもお願いします。
622デフォルトの名無しさん:2007/11/26(月) 13:28:15
>>617
実用性考えて gems 使い方もやったら。簡単だし。
623デフォルトの名無しさん:2007/11/26(月) 13:31:52
期待してよかですか?

RubyForge: CGI Extension: Project Info
http://rubyforge.org/projects/cgiext
624デフォルトの名無しさん:2007/11/26(月) 13:47:26
>>617
>本職SEでJavaならなんとか書けるレベル
なのは、617自身なのか、新入社員(中途?)なのか。
とりあえず、Java書ける人相手なら、module とブロックが
Ruby の最初の感動ポイントな気がする。

というか、自分の感動ポイントだった。
625デフォルトの名無しさん:2007/11/26(月) 13:52:03
中途入社は新入社員とは言わないだろゆ。
よって本職SEは質問者の方。

ところで社員研修でRuby教えるってどういう会社?
業務でもRuby使ってるの?
626デフォルトの名無しさん:2007/11/26(月) 14:09:56
>>623
本人乙
期待しないで待ってる
627デフォルトの名無しさん:2007/11/26(月) 14:39:02
>>624
namespaceがかぶってることに感動?
628デフォルトの名無しさん:2007/11/26(月) 15:53:27
Mechanizeのアプロードがうまくいきません。
アップロードのファイルを指定するときは
フルパスで指定すればいいんですよね?

form = page.forms[0]
form.file_uploads.name('Z_FL')[0].file_name = upload_file
agent.submit(form)
(upload_fileは"/Users/local/Desktop/123.jpg")

p formでは
[#<WWW::Mechanize::FileUpload:0x14533f4 @name="Z_FL", @value=nil, @file_data=nil, @file_name="/Users/local/Desktop/123.jpg">]

それと、submitするとき(postするとき)に、エンコードされるはずですが,
そのエンコードの状態(postdata)をみるメソッドはありますか?
629デフォルトの名無しさん:2007/11/26(月) 16:02:33
>>624
block は初め馴染めなくて苦労したが、慣れたら使いやすい。
C++ → Java とか入りやすかったけど、なぜか ruby は初め違和感があった…
630デフォルトの名無しさん:2007/11/26(月) 16:21:54
lambda がないからでしょ。
blockイテレータってのは引数に手続きがとれるということだから。
それがわからないと詰まる。インラインで書ける関数ポインタみたいなもんって
教えればいいんじゃないかなあ。
631デフォルトの名無しさん:2007/11/26(月) 16:41:34
CからRubyだった俺はいろんな意味で戸惑った
632デフォルトの名無しさん:2007/11/26(月) 16:44:41
Perl → Smalltalk → (vbやらjavaやら) →Ruby だったのでとまどいはなかった。
633628:2007/11/26(月) 16:54:16
一応テスト用のスクリプト(アップロードできませんでした)
$ cat test.rb
#!/usr/bin/ruby -Ku
require 'rubygems'
require 'mechanize'
require 'nkf'
agent = WWW::Mechanize.new
file = '/Users/local/Desktop/123.jpg'
page = agent.get('http://www-2ch.net:8080/up/')
form = page.forms[0]
form.file_uploads.name('file').first.file_name = file
page = agent.submit(form)
puts NKF.nkf('-w', page.body)
634やばす:2007/11/26(月) 16:59:06
今宿題でrubyで最大値を出すプログラムを作れって。。。
かなりぐぐったがむりぽ。。
だれか教えてくだされ。
635やばす:2007/11/26(月) 17:13:10
誰か。。神きてくれー

636デフォルトの名無しさん:2007/11/26(月) 17:14:02
>628
form.file_uploads.first.mime_type = 'image/pjpeg'とか入れたり。
あと、Content-Transfer-Encoding: binary があるとダメな場合があるから、
form.rb の def file_to_multipart(file) にある、+ "Content-Transfer-Encoding: binary\r\n" の部分を
コメントアウトしてみたり。
637:2007/11/26(月) 17:22:53
puts "最大値"
638☆☆☆:2007/11/26(月) 17:23:01
私も最大値の出しかた知りたいデス☆
誰かお願いしマス><
639やばす:2007/11/26(月) 17:24:24
神きたあああああああああああ
詳しくお願いできますか?
640デフォルトの名無しさん:2007/11/26(月) 17:25:28
新手の荒らしですか?
641やばす:2007/11/26(月) 17:26:12
640
俺っすか?
642デフォルトの名無しさん:2007/11/26(月) 17:26:52
RUBYの宿題教えてください。
http://pc11.2ch.net/test/read.cgi/tech/1106572657/
643デフォルトの名無しさん:2007/11/26(月) 17:26:54
>639
Array#max 使えよ
何、まだ分からない?
そりゃあんた講義をちゃんと聞いてないからだ。
644やばす:2007/11/26(月) 17:29:19
643
使ったんですけど。。。
できないっス><
よかったらコマンド全部書いてくれないですか?
645デフォルトの名無しさん:2007/11/26(月) 17:30:21
あとはこっちでやってくれ
RUBYの宿題教えてください。
http://pc11.2ch.net/test/read.cgi/tech/1106572657/
646やばす:2007/11/26(月) 17:30:24
642
ここ探したんですが、、、のってなかったです><
647デフォルトの名無しさん:2007/11/26(月) 17:30:31
>>644
いいかげん>>642
648やばす:2007/11/26(月) 17:31:24
645
そのスレだれもいないです><
649やばす:2007/11/26(月) 17:35:15
マジでお願いします。。
650デフォルトの名無しさん:2007/11/26(月) 17:36:37
><←これって挑発ですよね?
651デフォルトの名無しさん:2007/11/26(月) 17:37:37
>よかったらコマンド全部書いてくれないですか?

なんだ。
ひょっとしてRubyは俺の知らない間にシェルにでもなったのか。
652やばす:2007/11/26(月) 17:38:09
650
そうだよー
653628:2007/11/26(月) 17:51:45
>>636
どうも
gemでインストールしたライブラリをいじるのは勇気いるなぁ。
mime_typeも指定したけどだめだった。

だれか、2ちゃんねるアップローダーにMechanizeでアップロードできた人いますか?

ポストするデータがエンコードされた状態はみられないみたいです...
654デフォルトの名無しさん:2007/11/26(月) 18:03:50
rubyなんか自宅で1日で覚えられるよ
655デフォルトの名無しさん:2007/11/26(月) 18:07:55
>>653
Content-Transfer-Encoding: binaryを削らないとダメ。
656デフォルトの名無しさん:2007/11/26(月) 18:15:44
>>654
君レベルはそれで十分だろうね
657デフォルトの名無しさん:2007/11/26(月) 18:19:54
rubyの糞ライブラリどもは、どんどん書き換えていかないと使い物にならんぞよ
658デフォルトの名無しさん:2007/11/26(月) 18:21:50
ライブラリなんかマニュアル見ればいいじゃん。
rubyを覚えるっていうのは構文を覚えること。
ライブラリの細かい挙動なんていちいち覚えるかボケ。
659デフォルトの名無しさん:2007/11/26(月) 18:26:43
なんかずれてるぞ
660デフォルトの名無しさん:2007/11/26(月) 19:06:40
やばすさん
できたよ

a = Array.new
10.times do
 a.push(rand(10))
end

a.each_with_index {|x, idx|
 print "[#{idx}]:#{x}\n"
}

print "最大値は#{a.max}です♪\n"
661デフォルトの名無しさん:2007/11/26(月) 19:13:49
今日からRubyを勉強しはじめた者です。
Windowsの、mswin32環境のRubyなのですが、

社用のコマンドラインプログラムを実行すると
system ("ほにゃらら.exe #{myfile}")

一瞬DOS窓が出てすぐ消えます。(コマンドは成功している)
目がチカチカするので、DOS窓出さない様にしたいのですが
解決策をご教授頂けないでしょうか。宜しくお願い致します。
662デフォルトの名無しさん:2007/11/26(月) 19:46:26
>>661
どうやってそのrubyを入れたのかしらんが、実行するときに目をつぶるというのはどうだ。

あとは、拡張子をrbwにしたらうまくいったりするかもしれん。
663デフォルトの名無しさん:2007/11/26(月) 19:59:26
拡張子 rbw は wrb のタイプミスかと思うので両方で試してみましたが
やはり一瞬、DOS窓でちゃいますね。
社用のコマンドラインプログラムをいくつか連続で実行したいので
DOS窓がちかちかちかちかするのを抑止したいんですよね;;
664デフォルトの名無しさん:2007/11/26(月) 20:07:51
ほにゃらら.exeもRubyで書いてしまえ
665デフォルトの名無しさん:2007/11/26(月) 20:10:42
パイプ使え
666デフォルトの名無しさん:2007/11/26(月) 20:11:17
>>664
3rd-Party製のコマンドツールなのでそういう訳にもいかず...orz
667デフォルトの名無しさん:2007/11/26(月) 20:13:50
system("start /b .jpg .exe #{arg}")
668デフォルトの名無しさん:2007/11/26(月) 20:21:52
>>667
DOSプロンプトは&が使えないのが芋だなとかずっと思ってたんだが
これで代替できそうだ。横からだがThx
669デフォルトの名無しさん:2007/11/26(月) 20:30:24
CMD /? と START /? と SET /? は読んでおいたほうがいい
670デフォルトの名無しさん:2007/11/26(月) 20:41:51
>>623
あると地味に便利そうだが、期待するほどのものではないという印象
さすがに本人乙としか言い様が無い

ところでこのスレから新たなCGIフレームワークが生まれるのはまだですか
671デフォルトの名無しさん:2007/11/26(月) 21:26:29
>>667
Winnyに流れてるウィルス入りのファイル名みたいだな >             .exe
672デフォルトの名無しさん:2007/11/26(月) 21:58:58
rubyで使える素敵なリストライブラリとかってありませんか?
673デフォルトの名無しさん:2007/11/26(月) 22:18:50
>>672
ruby-lisp
674デフォルトの名無しさん:2007/11/26(月) 23:26:37
>>673
検索しても出てこないのですが。
675デフォルトの名無しさん:2007/11/26(月) 23:52:19
>>674
RAAに行って「lisp」で検索
676デフォルトの名無しさん:2007/11/27(火) 06:30:08
>>674
こういう表現、英語でもあるのかなぁとか考えちゃって
なかなかスラスラと言葉が出ないんだわ
頭の悪い人は細かい事考えずに適当に知ってる単語並べて
困るのは相手だけだから苦労しないよね
677デフォルトの名無しさん:2007/11/27(火) 07:43:13
I can't find it on Google.
678デフォルトの名無しさん:2007/11/27(火) 07:44:17
The Google has not that word ruby-lisp.
679デフォルトの名無しさん:2007/11/27(火) 07:57:07
Not Found!!
680デフォルトの名無しさん:2007/11/27(火) 08:14:11
>>676
英語以前に日本語もおかしくね?
681デフォルトの名無しさん:2007/11/27(火) 08:56:12
生き方がおかしい人に、日本語のおかしい人が話しかけたという感じ。
682デフォルトの名無しさん:2007/11/27(火) 11:41:08
質問させてください。

h = { "b" => ["b1", "b2" ],  
       "a" => ["a1", "a2"],  
       "c" => ["c1", "c2", "c3"] }

上のようなハッシュを配列に直してソートをかけたいと思っています。
ソートの基準は、第1が値の個数(降順)、第2がキーの
アルファベット順(昇順)です。

h.sort_by{ |key, value| value.length }

で第1の基準でソートした配列を作ることはできるのですが、
その次で詰まってしまいました。何かいい方法はないでしょうか?

最終的に次のようになって欲しいのです。

[
  "c", ["c1", "c2", "c3"],
  "a", ["a1", "a2"],  
  "b", ["b1", "b2"]
]  
683デフォルトの名無しさん:2007/11/27(火) 12:01:32
まず、第1は降順だから -value.length だよね。
それで本題だけど、複数の基準で sort_by したい場合は、
ソートのキーを配列にすると良いよ。

h.sort_by{ |key, value| [-value.length, key] }
684デフォルトの名無しさん:2007/11/27(火) 12:05:21
>>682
h.sort_by{ |key, value| [-value.length, key] }

Array の <=> は第1要素が等しい場合は第2、第3と評価されるから
で、まず多い順に並べたいみたいだからマイナスがつけてある
685デフォルトの名無しさん:2007/11/27(火) 12:13:49
>>682
h.sort_by{ |key, value| [-value.length, key] }
686682:2007/11/27(火) 12:47:04
>>683, 684, 685

ご教示ありがとうございました!
ソートのキーを配列にすれば、第3、第4の基準を作ることも
可能なのですね。すばらしい。
687デフォルトの名無しさん:2007/11/27(火) 14:49:59
irb(main):001:0> def aho; "AHO"; end
nil
irb(main):002:0> aho
"AHO"
irb(main):003:0> aho = aho
nil
irb(main):004:0> aho
nil
irb(main):005:0>

これなんで nil になっちゃうの?
688デフォルトの名無しさん:2007/11/27(火) 14:54:24
irb(main):003:0> aho = aho

でローカル変数ahoが作られ(メソッドのahoが隠蔽され)nilで初期化されるから
689デフォルトの名無しさん:2007/11/27(火) 14:57:50
> aho = aho
は両方とも変数として扱われている
変数 aho は未定義だから
> undefined local variable or method `a' for main:Object
で落とすべきところを
> aho = aho
が成功するのが原因

$ ruby -e 'a = a;p a'
nil
$ ruby -e 'p a'
-e:1: undefined local variable or method `a' for main:Object (NameError)
690687:2007/11/27(火) 15:17:27
えーと、
> aho = aho
右辺を先に (「aho」をメソッド呼び出しとして) 評価してから、
左辺を「aho」を変数として代入を実行、
と想像してたんですが、そうではないんですね。

「aho = aho」という文を解釈する時点で、両辺の「aho」が変数と看做されている、
ということですかね。
ふむ。
691デフォルトの名無しさん:2007/11/27(火) 16:32:47
>>686
> 第3、第4の基準を作る
ぶっちゃけ、単に結果の配列をソートしてるだけだったりする
何かテクニックを駆使してるわけではない
irb> [[-2,'b'], [-2,'a'], [-3,'c']].sort
[[-3, "c"], [-2, "a"], [-2, "b"]]
配列が入った配列をソートすると内部の配列の具合で並ぶということに気づかない人はけっこう多い
692デフォルトの名無しさん:2007/11/27(火) 16:34:36
ちなみに>>678の後で
irb(main):005:0> self.aho
"AHO"
693デフォルトの名無しさん:2007/11/27(火) 16:39:56
>>691
結果がすべて
694デフォルトの名無しさん:2007/11/27(火) 16:48:31
>>687
aho()
=> "AHO"

RubyはLisp2といって変数と関数の名前空間が分離してる。
関数のほうを呼びたきゃ()をつけなさい。
695デフォルトの名無しさん:2007/11/27(火) 20:15:25
"\\r\\n"
という文字列のバックスラッシュを外して
"\r\n"
としたいのですがどうしたらいいでしょうか・・・?
696687:2007/11/27(火) 20:30:38
こんなのとか?
str.gsub(/\\\w/) { eval '"%s"' % $& }
697デフォルトの名無しさん:2007/11/27(火) 20:31:55
evalってどういう意味ですか?
698デフォルトの名無しさん:2007/11/27(火) 20:35:04
699デフォルトの名無しさん:2007/11/27(火) 21:15:01
gemsを導入して、環境変数で -rubygems を設定した状態で、デバッガ(-rdebug)を起動すると、
起動状態でgemsの中からトレースが始まってしまう。たとえば、
ruby -rdebug foo.rb
としたら、foo.rbの1行目たどり着くためににえらく苦労するのだが、何かいい手はない?
700デフォルトの名無しさん:2007/11/27(火) 21:18:31
>>697
日本語で言うと「評価」とか「計算」とか。
701デフォルトの名無しさん:2007/11/27(火) 21:35:06
>>696
これは御見それしました・・・
702デフォルトの名無しさん:2007/11/27(火) 21:49:44
open-uriで日本語が含まれるURLを指定すると
止まってしまいます
どうしたらいいでしょう
703デフォルトの名無しさん:2007/11/27(火) 21:53:13
ありがとうございます
704デフォルトの名無しさん:2007/11/28(水) 00:39:20
>>699
環境変数の -rubygems をやめて

require 'rubygems'
require 'debug'

以下自分のプログラム

とすれば、require 'rubygems' が完了した状態からデバッグモードに移るので大丈夫じゃね?
705デフォルトの名無しさん:2007/11/28(水) 08:25:29
>>699

ファイル指定してブレイクポイントを設定する。例えば
b my.rb:1
してから
c
706デフォルトの名無しさん:2007/11/28(水) 10:49:44
リモートのファイル,ヂレクトリをローカルの状態とそっくりにしたいのですが,
rsync -a --delete local remote
が使えません。

簡単にいうと,ホームページをローカルで作っておいて,
そのままサーバーに送りたいのですが,プロバイダ(niftyとかdionとか)のホームページだから,FTPしかつかえないのです。

そこで FTP(net/ftp)をつかってrsyncと似た動作をするものがないかと探してます。

自分で作るしかないですか?それとも既にライブラリみたいなのはありますか?
707699:2007/11/28(水) 12:18:55
>>705
うぁ、ムッチャ簡単なことやった、満足。ありがとう。
>>704
も回答ありがとう。
708デフォルトの名無しさん:2007/11/28(水) 14:24:45
>>706
scp (ssh)
ssync
709デフォルトの名無しさん:2007/11/28(水) 15:01:31
>>706
Ruby にこだわらなければ lftp とかどうでしょう。

>>708
なんじゃそりゃ?
710デフォルトの名無しさん:2007/11/28(水) 15:05:20
>>704
環境変数よりコマンドラインのほうが優先されるんだから、
ruby -rubygems -rdebug ...
とすればdebugより前にrubygemsがロードされる。
プログラムを書き換える必要はない。
711706:2007/11/28(水) 15:32:23
>>709
ギザサンクス
さっそくいんすこします
712デフォルトの名無しさん:2007/11/28(水) 18:49:50
訳)
本当にどうもありがとう。
私は早速インストールします。
713デフォルトの名無しさん:2007/11/28(水) 19:11:33
ギザなんて使う奴ほんとにいんのな・・・あのバカだけかと思ってた
714デフォルトの名無しさん:2007/11/28(水) 19:49:34
実は彼がその本人なんだよ。
715デフォルトの名無しさん:2007/11/28(水) 20:04:36
!!
>>711結婚してください
716デフォルトの名無しさん:2007/11/28(水) 20:07:03
しょこたんもRuby使いなのか
717デフォルトの名無しさん:2007/11/28(水) 20:27:55
WWW::MechanizeでWikipediaのページを入手しようとするとgetのところで延々とリダイレクトしつづけて処理が終わりません。
googleのトップページとかは普通にgetできました。
何が悪いのでしょうか?(ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-freebsd6.1])

require 'rubygems'
require 'mechanize'
require 'logger'
class Web
attr_reader :page
def initialize(uri)
@page = get_page(uri)
end
private
def get_page(uri)
agent = WWW::Mechanize.new {|a| a.log = Logger.new('access.log')}
# agent.redirect_ok = false
agent.user_agent_alias = 'Windows IE 6'
page=""
begin
page = agent.get(uri)
pp agent
rescue
puts "Error: cant't get"
return false
end
return page
end
end
uri = "http://ja.wikipedia.org/wiki/%E6%BA%90%E7%BE%A9%E7%B5%8C"
web = Web.new(uri)
pp web.page
718デフォルトの名無しさん:2007/11/28(水) 20:56:41
Ruby用のテストドライバとスタブの自動生成ツールとかあるかいな?
719デフォルトの名無しさん:2007/11/28(水) 21:42:17
>>717
agent.get(URI.parse(uri))
720717:2007/11/28(水) 23:00:22
>>719
サンクスです。できました。

getの中でto_absolute_uriメソッドを呼んでて、
to_absolute_uriメソッドの中でuriがURIオブジェクトであればごにょごにょやってるんですね。
uriはStringオブジェクトオンリーかと思い込んでました。

自分ひとりだと解決できなかった気がします。本当にどうもです。
721デフォルトの名無しさん:2007/11/30(金) 15:00:22
>>717
どうでもいいがほとんど意味のないクラスだな > Web
722デフォルトの名無しさん:2007/11/30(金) 20:27:40
【2画面ファイラ】 mfiler2 【Rubyインタプリタ】
http://pc11.2ch.net/test/read.cgi/linux/1183712038/
http://www.geocities.jp/daisuke530221jp/
723717:2007/11/30(金) 22:26:43
>>721
レスどうもです。
確かにあんまり意味ないですね。
webページのデータを保持するクラスがあるといいなーと思ってこんなつくりにしてみました。
Webクラスのデータは別の解析クラスで解析します。
あんまり良い構造じゃないですか?
正直オブジェクト指向に慣れてなくてどういう構造が良いのかわかりませんのです。
724デフォルトの名無しさん:2007/11/30(金) 22:52:16
irbでベクトルの計算をやってるんですが、

z=[1,2]
x=z
ってやった後に、
x[0]=3
と打ち込むと、
なぜにx=[3,2]だけでなく、zについてもz=[3,2]になってしまうんですか?
これを改善する方法ってありますか?
725デフォルトの名無しさん:2007/11/30(金) 23:08:07
変数 = 変数
は右辺の変数が指しているオブジェクトを左辺の変数も同じく指すようになるという意味。
x = z.dup (またはz.clone)
で明示的に複製する。

dupはshallow copy(ぐぐれ)で、deep copyはない(ループとかめんどいから?)
deep copyをしたいときはチマチマ自分でやること。
726デフォルトの名無しさん:2007/11/30(金) 23:09:27
>>724
> x = z
x = z.clone

x = z という命令だと x と z は同じ実体を指している
だから x には z のコピーを代入させないといけない

実体とポインタという関係は知っている?
727デフォルトの名無しさん:2007/11/30(金) 23:10:03
irb> require 'matrix'
irb> v = Vector[1,2]
irb> x = v.dup
irb> class Vector; def []=(i,x); @elements[i]=x; end; end
irb> v[0] = 0
irb> p x
Vector[0, 2]

…アレ?
728デフォルトの名無しさん:2007/11/30(金) 23:10:08
>>724
それはオブジェクトをコピーしてるわけではない
z=[1,2]は,[1,2]という配列とオブジェクトにzという名前をつける意味
x=zは,zが指している[1,2]という配列オブジェクトにzという名前もつける意味

複製が欲しいのならcloneメソッドやdupメソッドを使う
729724:2007/11/30(金) 23:21:44
とりあえずのところ、わかりました。コピーしているわけじゃなかったんですね。
スカラーでは出来るのに、なんでベクトルになると、出来なくなるのが
、よくわからんかったです。
本当にありがとうございました。
730724:2007/12/01(土) 00:09:59
すいません。もういちど質問させていただきます。cloneやdupのコマンドで
ベクトル計算については出来たのですが、行列計算になるとやはり元に戻ってしまいます。
これはどうしてでしょう?
731デフォルトの名無しさん:2007/12/01(土) 00:30:16
何をやったらどうなったのか、その質問からはさっぱりわからん。
変数とオブジェクトの区別が分かってから手を出した方がいいと思う。
732デフォルトの名無しさん:2007/12/01(土) 01:00:58
a = [[1,2],[3,4]]
b = a.dup
b[0][0] = 0

p a #=> [[0,2],[3,4]]


a = [[1,2],[3,4]]
b = a.map{|e| e.dup }
b[0][0] = 0

p a #=> [[1,2],[3,4]]
73336:2007/12/01(土) 01:04:44
誰か俺に名前をつけてくれ
734デフォルトの名無しさん:2007/12/01(土) 01:05:39
>>733
山田
735デフォルトの名無しさん:2007/12/01(土) 01:07:59
配列内の整数の要素の0〜a番目までたす命令って何もモジュール入れないであります?
736デフォルトの名無しさん:2007/12/01(土) 01:12:16
さあゴルファーのみなさん出番ですよ
737山田 ◆K0BqlCB3.k :2007/12/01(土) 01:13:39
>>734
採用
738デフォルトの名無しさん:2007/12/01(土) 01:24:17
>>735
array[0..a].sum
739デフォルトの名無しさん:2007/12/01(土) 01:40:37
>>738
ありがとうございます。

$a=[1,2,3,4,5]
print $a[0..2].sum


これでエラーが出てしまうんですがどう間違っているんでしょうか?
740デフォルトの名無しさん:2007/12/01(土) 01:44:06
間違ってない。
741デフォルトの名無しさん:2007/12/01(土) 02:03:10
>>735
array[0..a].inject { |result , item| result + item}
とか
742デフォルトの名無しさん:2007/12/01(土) 02:24:25
ああっごめん sum は ActiveSupport の拡張だ。
中身は>>741みたいなもん。
743デフォルトの名無しさん:2007/12/01(土) 05:50:12
間違ってないと言い切る740の自信はどこから出たのだろうか
744デフォルトの名無しさん:2007/12/01(土) 05:54:48
変数に$付けるのは目障りだからやめてくれ
745デフォルトの名無しさん:2007/12/01(土) 06:15:17
うむ

「整数以外も入ってる配列で整数だけa個選んで足す」なら、ごく普通にeachでぶん回して

def countup(array,max)
sum = 0
count = 0
array.each do |e|
break if count == max
if e.is_a? Integer then
sum = sum + e
count = count + 1
end
end
return sum
end

みたいなので動作するはずだけど
p countup([1,2,3,6.5,'ねこ'],3)
6
p countup(['ねこだいすき',1,2,3,6.5,Time.now],2)
3
746デフォルトの名無しさん:2007/12/01(土) 06:23:58
p countup([1,2,3,6.5,'ねこ'],6)

p countup(['ねこだいすき',1,2,3,6.5,Time.now],9)
747デフォルトの名無しさん:2007/12/01(土) 06:41:04
「配列に含まれる整数が足りません」という例外を出すべきだな
maxに負の数を指定したときに例外を出さないのもおかしい
748デフォルトの名無しさん:2007/12/01(土) 07:19:11
ここで俺がエレガントな回答をですね

def countup(values, range)
 re = 0

 values[range].each do |v|
  re += v if v.kind_of?(Integer)
 end

 re
end

values = [1, 2, 3, 6.5, 'ねこ']
p countup(values, 0...2) #=> 2
p countup(values, 0...5) #=> 3
749デフォルトの名無しさん:2007/12/01(土) 08:05:40
わざわざrange分けんでも
750デフォルトの名無しさん:2007/12/01(土) 12:56:45
def sum(array)
t = 0
array.each {|elem| t += elem }
return t
end

values = [1,2,3,4,5,6,7,8,9,10]
p sum(values) => 55
p sum(values[1..3]) => 10
751デフォルトの名無しさん:2007/12/01(土) 13:55:06
それならinjectでいいんだってば
まあ>>745-の例と条件も適当すぎるけど
752デフォルトの名無しさん:2007/12/01(土) 14:23:22
「それなら」って言うけど
実際 inject はかなり多様に使えるメソッドだよ
合計なんて正に inject 向きの問題だし
753デフォルトの名無しさん:2007/12/01(土) 14:29:23
それを>>750に対して書いてるんだろうに
754デフォルトの名無しさん:2007/12/01(土) 14:51:38
ちょっとみただけじゃ「なんだこりゃ」なメソッドだがピッタリはまると気持ちいいメソッドだな。>inject
755デフォルトの名無しさん:2007/12/01(土) 15:00:47
横レスだけどinjectは理解性が下がるからあんまり使いたくないなぁ・・・
そりゃあんたがアホって言われりゃまぁアホですけど
プログラミングってそういうもんじゃないでしょ?
756デフォルトの名無しさん:2007/12/01(土) 15:05:16
まぁコメントつけとけばいいですけどね
ごめんなさいね
757デフォルトの名無しさん:2007/12/01(土) 16:02:16
p sum(values[1..3]) => 10
???
758デフォルトの名無しさん:2007/12/01(土) 16:06:45
class B < A
def hoge(path)
name = File.basename(path, '.jpg')
end
end

上の場合3行目で undefined method `basename'というエラーが出ます。
IO::Fileはクラスなので,モジュールのようにインクルードできません。

正規表現を使えば,2,3行で目的を達成できますが,
(/.*\/(.*).jpg/)とか
せっかくFileクラスがあるので,もっとスマートな方法はないかと,,,

うまい方法はありますか?
759デフォルトの名無しさん:2007/12/01(土) 16:17:20
>>758
class A
end
class B < A
def hoge(path)
name = File.basename(path, '.jpg')
puts name
end
end

b = B.new
b.hoge('/hoge/fuga.jpg')

# fuga

こんなん書いてみたがちゃんと動くぞ
もうちょっと状況を詳しく書かないと何が問題でどう動かないか分からん
760デフォルトの名無しさん:2007/12/01(土) 16:50:26
どこかでFileという名前の定数を定義しているのだと予想
761758:2007/12/01(土) 16:51:45
>>759早速のレスありがとうございます。

下のやつは手元ではエラーになります。
test.rb:9:in `hoge': undefined method `basename' for WWW::Mechanize::File:Class (NoMethodError)

mechanizeの問題でしょうか?

#!/usr/bin/ruby -Ku
#

require 'rubygems'
require 'mechanize'

class A < WWW::Mechanize
        def hoge(path)
                name = File.basename(path, '.jpg')
                puts name
        end
end
a = A.new
p File.basename('/hoge/fuga.jpg', '.jpg')
a.hoge('/hoge/fuga.jpg')
762758:2007/12/01(土) 16:52:34
変なインデントが入りました。スマソ
763デフォルトの名無しさん:2007/12/01(土) 17:02:20
ヒント:undefined method `basename' for WWW::Mechanize::File:Class (NoMethodError)
764デフォルトの名無しさん:2007/12/01(土) 17:09:59
なぜ初めからエラーをちゃんと書かないのか。
765デフォルトの名無しさん:2007/12/01(土) 17:16:12
WWW::Mechanize::Fileが定義されているという不幸

name = ::File.basename(path, '.jpg')

だな
766617:2007/12/01(土) 17:47:12
>>619
開発する人はVB.netに移行するから別に良いかな、と思うけど一応書いておく。協力サンクス。

>>620
採用。教材の最初のページに書いた。協力サンクス。

>>622
うーん、gemはどうだろう。補足程度に書く位でいいかな? 協力サンクス。

>>624
俺がJavaレベル7の社員です。新入社員達はJava=携帯の何か、パソコンでたまに表示されるコーヒーアイコン程度の認識しかないです。
人事部に聞いたら、カレーですかとリアルにいった子がいたらしいので、そいつは俺の嫁にしようと思ってる。

>>625
普通の会社なんだけど、社内でIT関連の部署に配属予定の人は営業だろうがなんだろうがプログラミング言語を学ぶのが必須。
その中で開発部に進む人だけ、Rubyの他にVB.netを学ぶ。社員研修でRuby教えるのは幹部が東大卒で東大がRubyを採用したかららしい。
比較的簡単な言語でプログラミングのやり方を覚えて貰おうという狙いがあるらしいが、Rubyの前はJavaを教えてた。
767デフォルトの名無しさん:2007/12/01(土) 17:53:29
>>766
考え方はいろいろあるだろうが、プログラミングの経験として
Ruby を教えるというのは良いと思う。即プログラム書いて動かせるし、
通常ユースだと便利な小物を書きやすい。大抵の人は数値計算とかより
たくさんのファイル名を変えたり、とかテキスト処理とかプログラム
電卓的なことをするとかが多いからね。
768デフォルトの名無しさん:2007/12/01(土) 18:31:03
■■□■■
■□□□■
□□□□□
■□□□■
■■□■■
↑を大きくしたような場で陣地(□)を取り合うゲームを作ってます。
獲得している陣地のつながりを絶たない□でのみ発生するイベントを作りたいです。

□□□←なら両端で発生します。

□□←だと全てで発生します。
□□

数学的な考えができないもので、正しい条件式にたどり着けそうもありません。
Rubyと直接関係ない質問ですが、よろしくお願いします。
769デフォルトの名無しさん:2007/12/01(土) 18:36:12
>>768
日本語でおk
770デフォルトの名無しさん:2007/12/01(土) 18:39:48
>>768
言いたいことがよくわからないけど、隣り全部見て自分と同じじゃ
ないものがあった場合にイベント発生ってこと?
端から見ていけば、2辺ずつチェックが必要なのかな。
陣地をどう取るかとかの情報が無いとそれ以上チェックさぼれなさそう。
771デフォルトの名無しさん:2007/12/01(土) 19:15:25
>>768
>Rubyと直接関係ない質問ですが、よろしくお願いします。
全く関係ねぇよ
772768:2007/12/01(土) 19:33:40
>>769-770
申し訳ない。確かに全く前提の条件を示せてないです。
□は上下左右に、端だけが例外的に斜めにつながっています。■はただの空洞です。
言葉では説明しづらいですが、敵陣地(自分以外)につながっていて、かつ自陣地のつながりが絶たれない場合、発生します。
■□■
□□□
↑で下に敵陣地が続いてるとすると、下段中央は発生しませんが、
□□□
□□□
↑だと下段中央で発生します。
なので自分の考えでは、ひとつの□を対象にまず敵陣地とつながっているかをチェック。
次に自陣地との条件をチェックすると思ってますが、上下左右だけで済まないため混乱してしまいます。
それとも広く盤面をとらえたり(具体的な方法がわからず)した方が良いのか検討がつかないです。
方法としてはややこしい場の概念の方を合わせる手もあると思うのですが、考えが進まず。

>>771
一人で考えるのに限界を感じたのですが、違反でしたら消えます。
できれば適正な場所を教えてもらえるとありがたいです。
773デフォルトの名無しさん:2007/12/01(土) 20:15:31
open-uriを使って、ファイルを読み込みたいのですが
リダイレクトされた先が日本語の文字列を含むURLとなっていると
C:/Ruby/lib/ruby/1.8/open-uri.rb:285:in `open_http': bad URI(is not URI?): とエラーになってしまいます
windowsのruby 1.8.6です
なにか解決策はあるのでしょうか?
よろしくお願いします
774デフォルトの名無しさん:2007/12/01(土) 20:29:41
775デフォルトの名無しさん:2007/12/01(土) 20:32:23
open-uriだと内部での処理になっちまうな。
276行目のURI.parseを修正すればよい気がする。
776デフォルトの名無しさん:2007/12/01(土) 20:34:29
「日本語を含むURL」などというものは無いと何度言ったらわかるんだ(日本語ドメインを除く)
777デフォルトの名無しさん:2007/12/01(土) 20:40:33
どうでもいいけど「日本語」だけだと、スクリプト(用字)が
漢字やかなであるとは限らないんだよな。
778デフォルトの名無しさん:2007/12/01(土) 21:09:38
>>774
リダイレクトなければこれでいいんですよね?
>>775
ライブラリの修正ってことですか…
ちょっと私には無理そうです
>>776-777
すいません、うまい書き方が分からなくて
そのサイトが良くないと言われたらそれまでなんですが
779デフォルトの名無しさん:2007/12/02(日) 21:50:31
Rubyの勉強をはじめようと思うのですけども、
一からRubyをはじめる初心者向けのRuby入門書は何がお薦めでしょうか?
780デフォルトの名無しさん:2007/12/02(日) 21:58:30
781デフォルトの名無しさん:2007/12/02(日) 22:03:59
プログラ自体の初心者だったら「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
他の言語経験があるんだったら「プログラミングRuby 第2版 言語編」
782デフォルトの名無しさん:2007/12/02(日) 22:07:06
次スレから入門向けの書籍をテンプレに入れるべきだな
今までに何度も同じ質問が出てる
783デフォルトの名無しさん:2007/12/02(日) 22:09:19
初心者スレのまとめwikiを作ればおk
784779:2007/12/02(日) 22:10:13
>>780
ありがとうございます。
なかなか奥が深そうな、読み甲斐のありそうなお薦め本ですが、
私の知識ではとてもついて行けそうにありません。

>>781
プログラミング自体の初心者ですので、
「たのしいRuby 第2版」というお薦め本を読んでみる事にします。
教えていただきありがとうございました。
785デフォルトの名無しさん:2007/12/02(日) 22:14:51
そういや本スレの前スレで誰かwiki作ってたけど、結局ぐずぐずになってる
786デフォルトの名無しさん:2007/12/02(日) 22:52:35
>>783
書くことがなくね?

>>785
Ruby Portalのことか
世のWikiの8割は更新されないものだし、あんなものだろう

今見に行ったらスパムも来てた
787デフォルトの名無しさん:2007/12/02(日) 22:56:51
>>786
質問と回答のレスをカテゴリ別にでもぺたぺた貼り付っけていくだけでよくね?
788デフォルトの名無しさん:2007/12/02(日) 23:52:09
いいだしっぺのほ
789デフォルトの名無しさん:2007/12/03(月) 00:37:21
いつも思うんだけど、それ法則じゃないよな。
790デフォルトの名無しさん:2007/12/03(月) 02:52:53
>>789
> いつも思うんだけど、それ法則じゃないよな。

言い出しっぺがやらない限り誰もやらない――言い出しっぺの法則

これから派生したルール/教訓が「言い出し法則」それ自体として
伝えられている……
791デフォルトの名無しさん:2007/12/03(月) 09:53:13
なるほど
792デフォルトの名無しさん:2007/12/03(月) 12:53:12
CGIに関しての質問ですが勘弁してください。

tinyURLにあるような、
http://exa.com/*******/
米部分の値はどのようにして受け取るのでしょうか?

よろしくお願いします。
793デフォルトの名無しさん:2007/12/03(月) 13:51:47
環境変数のREQUEST_URIかSCRIPT_NAME
794デフォルトの名無しさん:2007/12/03(月) 14:33:35
もうちょっと付け加えると ENV['REQUEST_URI'] か ENV['SCRIPT_NAME']
#いや、初心者は環境変数といわれても分かんないかなと思って。
795792:2007/12/03(月) 14:53:50
ありがとうございます!
仕組みが理解できました。

エラーを起こす → htaccessでcgiに送る → リクエストされたURLを処理する


796デフォルトの名無しさん:2007/12/03(月) 15:00:55
よっしゃ、おっちゃんが空いてるxrea鯖持ってるからHikiでまとめwiki作ったるさかいにな
797デフォルトの名無しさん:2007/12/03(月) 18:48:44
だから場所は売るほどあるんだよ
継続的に的確にまとめられる奴が必要
798デフォルトの名無しさん:2007/12/03(月) 21:08:30
継続かあ、、おっちゃん持久力あらへねん、きのうも奥さんに怒られてもうた、、
799デフォルトの名無しさん:2007/12/03(月) 21:10:18
継続(continuation)ってどういうときに使用するんでしょうか?
800デフォルトの名無しさん:2007/12/03(月) 21:11:13
自分のIPアドレスを取得するにはどうすればいいですか?
801デフォルトの名無しさん:2007/12/03(月) 21:15:20
wiki早く
802デフォルトの名無しさん:2007/12/03(月) 21:19:50
勝手にページ作っちゃったw
ttp://wiki.moonwolf.com/
803デフォルトの名無しさん:2007/12/03(月) 21:24:55
だめだ。日本語のエンコードがおかしいし
Hiki Errorが出る
804デフォルトの名無しさん:2007/12/03(月) 21:47:37
逆引きRuby があるジャマイカ
805デフォルトの名無しさん:2007/12/03(月) 22:13:49
そもそもスレのまとめが目的なのに
名前がMoonwolf Wikiとはこれいかに
806デフォルトの名無しさん:2007/12/04(火) 02:15:54
相変わらずxreaの広告はじゃまじゃのうwwwくやしいのうwww
http://starlet.s145.xrea.com/ruby/hiki/
807デフォルトの名無しさん:2007/12/04(火) 10:04:46
なあおまいら。この卒論のあらすじ読んでどう思う?

ttp://www.crest.sist.chukyo-u.ac.jp/semi/cgi-bin/paper_s.cgi?06-okazaki.txt
808デフォルトの名無しさん:2007/12/04(火) 10:37:45
>>807
歴史学の講義を取った事無いんじゃないか?
歴史学に限らず
なにかの題材を扱おうとするなら前史を理解するのは基本だろうに…。
809デフォルトの名無しさん:2007/12/04(火) 10:47:41
これが卒業研究か・・・
810デフォルトの名無しさん:2007/12/04(火) 10:51:10
ツッコミどころ満載だけど、それは本人たちが一番良くわかってるだろうからそっとしといてやりたい。
811デフォルトの名無しさん:2007/12/04(火) 11:36:47
どんな研究成果でも誰かの約に立つときが・・・きっとくるさ・・・
812デフォルトの名無しさん:2007/12/04(火) 11:41:10
情報分野で、教育ネタとかはこの程度のところもあるよね
情報的にも人文的にも中途半端な
813デフォルトの名無しさん:2007/12/04(火) 11:52:03
卒論ってこんな感じのを3人がかりで書いても通るんだな。
某ログまとめサイトで恋空読者の年齢層と文章レベルをmixiで調べてた猛者がいたけど、
あっちの方が凄いんじゃまいかと思った俺ガイル。
ちなみにRubyを題材に卒論書くなら、どれくらいのレベルのが良いんだろうか?
大学別に難易度は変わってくるんだろうけど、旧帝最下位の大学レベルだとどんなもんなのかな。
814デフォルトの名無しさん:2007/12/04(火) 12:06:02
>>813
・RubyでGoogleもどきを作ったらと仮定
・Rubyによるデータ解析フレームワークの構築

とか?偏差値50以下の大学ならRubyで適当なプログラム組んだら
それで通りそうだけどな。この中京大の場合は技術的な事より
教育・マーケティング化が強いな。最初の言語にRubyをやって、
その後にC++やJavaをやるといった大学・専門学校・会社などで
カリキュラムを作る時に役に立つんじゃないか。役に立つはずだ。
815デフォルトの名無しさん:2007/12/04(火) 14:05:38
>>814
真面目にこの研究をやるなら役に立つと思うんだが、3人がかりでこんなアブストラクトを書くような連中の研究では役立たずだろう。
816デフォルトの名無しさん:2007/12/04(火) 14:18:19
Rubyだけじゃなくて他の言語の場合はどうなのかを調査すべきだろ・・・
LispやFORTANなどの場合はどうなのかとかさぁ
まぁRubyやっててCやってない奴が身近に居る(学科の後輩)から調査しやすいし楽じゃね?ってのが本音なんだろうけどな
#この学科はRuby必修みたいだし
817デフォルトの名無しさん:2007/12/04(火) 14:41:44
そもそもRubyからCってのがわけわかんね。
818デフォルトの名無しさん:2007/12/04(火) 14:43:02
明らかに「とにかく卒論とゆーモノをでっちあげる」ことしか考えてない代物だから、
質的な突っ込みを入れても虚しいだけだな。
そんなことわかっててやってるんだよーんプププ、ってなもんだろう、当人達としては。
819デフォルトの名無しさん:2007/12/04(火) 14:48:10
このままだと教養単位のレポートでも不可じゃないの?ほんとに卒論がこんなんでいいの?
820デフォルトの名無しさん:2007/12/04(火) 14:49:04
>>817
これがゼミのボスだから仕方ない気がした。
ttp://www.crest.sist.chukyo-u.ac.jp/naomi/index.html
821デフォルトの名無しさん:2007/12/04(火) 14:58:50
>>819
江戸川大学って所で小室哲哉について卒論書いてた人もいたから大丈夫だろ。
822デフォルトの名無しさん:2007/12/04(火) 15:01:06
823デフォルトの名無しさん:2007/12/04(火) 16:41:00
CRLFが含まれる生のメールを
タブとスペースが続かないCRLFで
分割したいのですが

message = gets(nil)
if message.nil? then break end
field = message.split(/\r\n(?=[^\t ])/, 2).shift

のようにするとマッチしてくれません。

p message

してみるとgetsがCRLFをLFに
変換してしまっているようなのです。
変換しないようにできるでしょうか?
rubyのコマンドラインオプション、
コンパイル時のオプション、
環境などが関係するのでしょうか

環境は配布されているバイナリをダウンロードしてきたもので

ruby 1.8.5 (2006-12-04 patchlevel 5000) [i386-mswin32]
XP Home Edition SP2(5.1,ビルド2600)

です。
宜しくお願いします。
824デフォルトの名無しさん:2007/12/04(火) 16:52:35
$stdin.binmode
825823:2007/12/04(火) 17:50:19
>>824
目から鱗です!

$stdin.binmode
message = gets(nil)

だと駄目なんですね。

$stdin.binmode
message = $stdin.gets(nil)

でできました。
本当にありがとうございます。
826デフォルトの名無しさん:2007/12/04(火) 19:26:38
すいません、誰か教えてください。
ずいぶん調べたつもりなんですが、わかりません。
下記な感じで、平行サーバを作ったときに、同時に接続できるクライアントの数を制限することはできないのでしょうか?
現在動いてるスレッドが一定数以上ならacceptしないとか。。。

gs = TCPServer.open(8888)
$i=0
loop do
ns = gs.accept
testSocket=Thread.new do
while(line=ns.gets)
p line
end
end
end

よろしくお願いします。
827デフォルトの名無しさん:2007/12/04(火) 20:11:27
>>826
現在のスレッド数を数えるだけでいいんじゃないか。
828デフォルトの名無しさん:2007/12/04(火) 20:13:16
>>826
queue を使うとできるかな。

require "socket"
require "thread"
queue = SizedQueue::new(2)
gs = TCPServer.open(8888)
$i=0
loop do
queue.push true
ns = gs.accept
testSocket=Thread.new do
while(line=ns.gets)
p line
break if /^quit/i =~ line
end
ns.close
queue.pop
end
end
829デフォルトの名無しさん:2007/12/04(火) 21:16:24
>>807
中京大だから放っとけばいいんじゃない?
830デフォルトの名無しさん:2007/12/04(火) 21:18:09
正直言って皆学部生の卒論に期待しすぎ。無い大学だってあるんだよ。
831デフォルトの名無しさん:2007/12/04(火) 21:20:20
学部生の論文はたとえ東大生の論文でもクズしかありません。
832デフォルトの名無しさん:2007/12/04(火) 21:25:11
File.read(filename)は、バイナリモードで読み込みますか。それともテキストモードですか。
#Windowsがないので調べられません。
833デフォルトの名無しさん:2007/12/04(火) 21:27:00
バイナリモードではなく
テキストモードでもなく
ASCIIモードです
834デフォルトの名無しさん:2007/12/04(火) 21:41:33
>>833
ASCIIモードでは、改行コードの変換が行なわれますか。
画像ファイルの読み込みに使えるかどうかが知りたいです。
835デフォルトの名無しさん:2007/12/04(火) 21:54:52
>>826
これ使ってみたら?自分は使ったことないけど
ttp://www.ruby-lang.org/ja/man/?cmd=view;name=gserver
836デフォルトの名無しさん:2007/12/04(火) 21:59:08
自分のIPアドレスを取得するにはどうすればいいですか?
837デフォルトの名無しさん:2007/12/04(火) 22:01:00
卒論てのは内容に意味があるんじゃなくて、作り上げて発表することに意味があるものだからな。
838デフォルトの名無しさん:2007/12/04(火) 22:03:10
学部の卒論なんて、卒業するための口実だろ。
中身を期待する方が無理。
839デフォルトの名無しさん:2007/12/04(火) 22:36:17
院に入って真っ先に書き直したくなるのが学部の卒論だろ

学部の卒論は小学校低学年のアサガオ観察日記程度の理論的価値しかない
わかってないのは書いてる最中の当人だけだ
840デフォルトの名無しさん:2007/12/04(火) 23:13:04
卒論のテーマ=Rubyの分散形ヘルプをやったら神
841デフォルトの名無しさん:2007/12/04(火) 23:29:51
卒業論文の派生で賞を取った俺は神
842デフォルトの名無しさん:2007/12/04(火) 23:37:28
技術者の要望を卒論で書いていけばみんな幸せになれるんじゃね?
843デフォルトの名無しさん:2007/12/05(水) 00:14:13
技術者の要望を調査する論文をまず書かなくてはいけない
844デフォルトの名無しさん:2007/12/05(水) 00:19:39
>>835
503 Service Unavailable
845デフォルトの名無しさん:2007/12/05(水) 00:22:45
>844
悲しいがそこはしょっちゅう503起こす
使う側としては数回リロードしてみるしか対策なし
846デフォルトの名無しさん:2007/12/05(水) 01:17:04
>>844
「ruby gserver」でググると >>835 のページがトップに来るから
それのキャッシュを参照してくれ
847デフォルトの名無しさん:2007/12/05(水) 09:59:02
RubyでMySQLを使用したWebで使えるグラフィカルなデータベースCGIを作りたいのですが、
どこか参考になるページはないでしょうか?Perlなら沢山あるのですが、Rubyでは見つける事ができませんでした。
848デフォルトの名無しさん:2007/12/05(水) 10:19:46
Perlのprint << "END_OF_HTML"; Content-type: text/html といったような
HTMLを出力する時に使用するテクニックはRubyにも存在するのでしょうか?
849デフォルトの名無しさん:2007/12/05(水) 10:27:23
>>847
・RubyでMySQLを使うのに参考になるページ
・RubyでグラフィカルなWebページを作るのに参考になるページ
・RubyでデータベースCGIを作るのに参考になるページ
のどれが欲しいの?
つかデータベースCGIって何?

>>848
print <<END_OF_HTML
<html>
<body>
<h1>#{title}</h1>
</body>
</html>
END_OF_HTML
のことかな。
でもview層にこれを使いたいと考える時点で、完全に初心者だよなあ。
セキュリティのこともあるので、ERBやテンプレートエンジンを使うことをお勧めする。
850デフォルトの名無しさん:2007/12/05(水) 10:27:58
>>848
print <<EOS
一緒じゃねえの?
EOS
851デフォルトの名無しさん:2007/12/05(水) 10:31:19
>>849-850
848です。ありがとうございます。
ERBやテンプレートエンジンとは何でしょうか?
852デフォルトの名無しさん:2007/12/05(水) 10:34:38
>>849
RubyでデータベースCGIを作るのに参考になるページです。

こんな感じのCGIの事です。
ttp://www.cgi-amigo.com/database.html

↓このCGIを使用しているWebサイトです。

ttp://www.drivers-job.com/
853デフォルトの名無しさん:2007/12/05(水) 10:36:11
後、MySQLは使わないなら使わないでlog.datのようなファイルに
情報を登録していきたいです。
854デフォルトの名無しさん:2007/12/05(水) 11:27:21
>>851
そのくらいぐぐれよなー

----- template.rhtml -----
<ul>
<% i = 0 %>
<% for item in list %>
<li>item[<%=i%>] = <%=h item %></li>
<% i += 1 %>
<% end %>
</ul>

----- main.rb -----
require 'erb'
filename = 'template.rhtml'
erb = ERB.new(File.read(filename))
list = ['AAA', 'BBB', 'CCC']
print erb.result(binding())

----- 実行結果 -----
<ul>
<li>item[0] = AAA</li>
<li>item[1] = BBB</li>
<li>item[2] = CCC</li>
</ul>
855デフォルトの名無しさん:2007/12/05(水) 12:30:59
>>854
なんというツンデレw
856デフォルトの名無しさん:2007/12/05(水) 13:30:43
854の優しさに感動
857デフォルトの名無しさん:2007/12/05(水) 15:37:48
えー、昔から、魚を与えるより魚の釣り方を教えよ、などと言いまして、(ry
858デフォルトの名無しさん:2007/12/05(水) 16:24:18
>>847
本屋に行ってRailsの本を買ってきなよ
859デフォルトの名無しさん:2007/12/05(水) 16:40:28
xreaっていうレンタルサーバでruby-sqlite3動かしてる人いますか?
ここってサーバごとにruby-sqlite3のインストールをお願いせにゃんらんのかいな?
require 'sqlite3'がLoadErrorになるし・・・
カレントディレクトリにライブラリ放り込んでやると
今度はSQLite3::Database.new("hoge.db")でエラー吐くし・・・(でもhoge.dbのファイルは出来てる)

#!/usr/local/bin/ruby
require "sqlite3"
print "Content-Type:text/html\n\n"
puts "test"
SQLite3::Database.new("hoge.db")
860デフォルトの名無しさん:2007/12/05(水) 16:52:04
>>859
まぁ、無茶はよせ

ttp://sb.xrea.com/showthread.php?t=12180&highlight=sqlite3
お願いしないといけないんじゃない?
861デフォルトの名無しさん:2007/12/05(水) 16:59:27
うーむ・・・きぼんぬしてくるかなぁ
ありがとう
862826:2007/12/05(水) 16:59:37
>827
>828
>835
ありがとうございます。
課題が少し前進しました。
863デフォルトの名無しさん:2007/12/05(水) 19:43:36
Rubyで自分のIPアドレスを取得するにはどうすればいいですか?
864デフォルトの名無しさん:2007/12/05(水) 20:13:42
>>863
require "socket"
Socket::gethostbyname(Socket::gethostname)[3].unpack("C4").join('.')

これで取れる場合もある。
865デフォルトの名無しさん:2007/12/05(水) 20:13:46
>>863
"127.0.0.1"
866864:2007/12/05(水) 20:20:29
2行目はこれでいいのか。
IPSocket::getaddress(Socket::gethostname)

他に ifconfig (Windows なら ipconfig ?) コマンドの結果を正規表現でいじるとか、
NAT してたりしててインターネット側のアドレスが欲しいなんて場合はまた面倒、
ってな話が前スレにあったようななかったようなというかあった。
867デフォルトの名無しさん:2007/12/05(水) 20:24:00
>>864
出来ました!!
ありがとうございました。
868デフォルトの名無しさん:2007/12/05(水) 20:36:05
>>866
ありがとうぞざいます。
こっちのほうが簡単でいいです。
869デフォルトの名無しさん:2007/12/05(水) 20:49:02
NAT を使っている場合で
192.168.0.2 とかが帰ってくる場合は
グローバル IP じゃないから気をつけてな
870デフォルトの名無しさん:2007/12/05(水) 22:14:59
>>853
SQLite
871デフォルトの名無しさん:2007/12/06(木) 15:30:50
include 'foo/bar' と include "foo/bar"
の2種類の書き方を見るんだけど、これはどっちが正しいの?
文字列インスタンスの生成でも s='' や s="" のどっちも散見するし
[ダブル|シングル]クォートの使い分けが良くわからん
872デフォルトの名無しさん:2007/12/06(木) 15:40:15 BE:420865128-2BP(1500)
Rubyリファレンスマニュアルより

>ダブルクォートで囲まれた文字列ではバックスラッシュ記法 と式展開(後述)が有効に
>なります。シングルクォートで囲まれた文字列では、\\(バックスラッシュそのもの)と
>\'(シングルクォート)、行末の\(改行を無視します) を除いて文字列の中身の解釈は
>行われません。
873デフォルトの名無しさん:2007/12/06(木) 15:47:20
という事は include "foo/bar" や s="" は間違いだときっぱりと否定しても良いですかね?
ダブルクォートにしてるのは何か特別な意味でも有るのかと思ってたんですが・・・
874デフォルトの名無しさん:2007/12/06(木) 15:54:48
ほとんど趣味の問題。

ダブルクォートとかバックスラッシュとかを含んでいて、
ダブルクォートで書くとエスケープで頭がウニになりそうな
場合以外は、ダブルクォートで書く、ってスタイルの人も
結構いる。あとで式展開とかを埋め込みたくなった時とか
修正が少なくて済むし。

確かに require とか 空文字列は俺もシングルクォートだけど。
875デフォルトの名無しさん:2007/12/06(木) 16:08:59
>>872を読むと""はパフォーマンスが悪くなりそうに思えるかもしれないけど
あおきさんの実験ではほとんど違いはなかったそうだ。
"someone's teacher"とか'を含む文字列は英語では普通にあるから""でいいんじゃない。

Rubyは文字列表現にいろんな書き方があるから面白い。
require %|socket|
とかもできるよ。普通やらないけど。
876デフォルトの名無しさん:2007/12/06(木) 16:40:38
一つのプログラムやプロジェクトの中では、
どちらかに統一もしくは使い分けのルールがきちんと決めてあれば良いと思う。

どちらかが間違いだときっぱりと否定するのだけは間違いだときっぱりと否定しておく。
877デフォルトの名無しさん:2007/12/06(木) 21:14:25
''と""も使い分けって、Rubyに限った話でもないよな。
shやらPerlもある程度は似たようなもの。
878デフォルトの名無しさん:2007/12/06(木) 22:59:57
片手で打てる " のほうが好きだお
879デフォルトの名無しさん:2007/12/06(木) 23:17:05
>>875

もれは
%(おまえ)
が好きだ
880デフォルトの名無しさん:2007/12/06(木) 23:39:12
a=[0,1]
b=a
b[1]=0
print a[0]
print a[1]

これを実行したら、01ではなくて00になりました。
配列の代入は変数の代入とは違うんでしょうか。
だとしたら、bをいじってもaに影響を与えない簡単な解決策はあるのでしょうか?
881デフォルトの名無しさん:2007/12/06(木) 23:40:31
bにaを代入しない
882デフォルトの名無しさん:2007/12/06(木) 23:44:09
>>880
b=a.dup
883デフォルトの名無しさん:2007/12/06(木) 23:46:46

s=STDIN.read
ってやるとCtrl-Dするまで止まっちゃうんだけど
標準入力から入力があったら読み込んで、無かったら何もせず次に進むってのはどうやるの?
884デフォルトの名無しさん:2007/12/06(木) 23:47:25
>>724あたりのデジャヴだ
885デフォルトの名無しさん:2007/12/06(木) 23:51:26
まあ、初心者がよくはまるところだから・・・
886883:2007/12/07(金) 00:10:34
>>883はインタラクティブな標準入力じゃなくてコマンド実行時にパイプで受け取るようなやつね
887デフォルトの名無しさん:2007/12/07(金) 00:28:51
>>883
select([STDIN], nil, nil, 0) が nil 以外を返したら STDIN.sysread(1024) してみるとか。
888デフォルトの名無しさん:2007/12/07(金) 00:35:39
純粋にプログラミング言語としてRubyがC#より優れている所って何があるの?
889デフォルトの名無しさん:2007/12/07(金) 00:50:54
プログラミング言語について「純粋」とはどういうことですか。
1レス以内で説明をお願いします。
890デフォルトの名無しさん:2007/12/07(金) 00:55:26
次の質問をどうぞ
891デフォルトの名無しさん:2007/12/07(金) 01:06:23
RailesってCGIですか?
892デフォルトの名無しさん:2007/12/07(金) 01:14:49
純粋にとは、開発環境の優劣等を考慮せずに言語の記述能力のみで、という意味です。
開発環境ではC#が圧勝で比較にならないからです。さて、再度質問です。

純粋にプログラミング言語としてRubyがC#より優れている所って何があるの?
893デフォルトの名無しさん:2007/12/07(金) 01:15:21
そういう人ね
894デフォルトの名無しさん:2007/12/07(金) 01:17:52
俺は刺身の上にタンポポを乗せるのに忙しいから、
あんたがC#とRubyをハックして論文にでもまとめてくれ。
895デフォルトの名無しさん:2007/12/07(金) 01:22:14
>>891
Railesってなんですか?
896デフォルトの名無しさん:2007/12/07(金) 01:23:27
>>892
そういうのはC#スレでやれば食いつきいいよ
897デフォルトの名無しさん:2007/12/07(金) 01:25:12
Ruby on RailsっていうのはRubyで書かれたWebフレームワークのことです。
898892:2007/12/07(金) 01:26:11
食いつきの問題ではなく、客観的なコメントをお願いします。
RubyがC#より優れている点があれば列挙してください。
899デフォルトの名無しさん:2007/12/07(金) 01:26:44
コンパイルが不要
900892:2007/12/07(金) 01:30:42
純粋にプログラミング言語としてRubyがC#より優れている点でお願い。
901デフォルトの名無しさん:2007/12/07(金) 01:31:09
無い
902デフォルトの名無しさん:2007/12/07(金) 01:33:07
ああ、ない。
903デフォルトの名無しさん:2007/12/07(金) 01:33:27
括弧がいらない
904デフォルトの名無しさん:2007/12/07(金) 01:40:45
エントリポイントがいらない
905デフォルトの名無しさん:2007/12/07(金) 01:42:18
変数の型宣言がいらない
906デフォルトの名無しさん:2007/12/07(金) 01:42:49
国産
Matz萌え
907デフォルトの名無しさん:2007/12/07(金) 01:44:19
名前が4文字

次スレってどのぐらいでだっけ?
908デフォルトの名無しさん:2007/12/07(金) 01:45:43
どちらもチューリング完全

以上。次の方ー
909デフォルトの名無しさん:2007/12/07(金) 01:46:38
RailsってCGIですか?
910デフォルトの名無しさん:2007/12/07(金) 01:48:11
違います。
911デフォルトの名無しさん:2007/12/07(金) 01:51:02
>>910
ありがとうございます。
ではなんという技術を使っているのでしょうか?
912デフォルトの名無しさん:2007/12/07(金) 01:54:42
CGIはWebサーバ上のプログラムと、標準入出力と環境変数を介して
やりとりする仕組みの名称です。

Ruby on RailsはRubyによるWebアプリケーション開発を支援する
フレームワークです。

「CGI≒CGIによって動くプログラム」という用法も一般化してきているので
Railsの成果物≒CGIと言えるかもしれません。
913デフォルトの名無しさん:2007/12/07(金) 02:00:44
クリスマスにみんなが家族や恋人と過ごしてる中,
自分は独りRubyしてようと思うんですけどいいでしょうか
914デフォルトの名無しさん:2007/12/07(金) 02:02:40
RUBY最強wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
915デフォルトの名無しさん:2007/12/07(金) 02:02:40
>>912
詳しい説明ありがとうございます。
なんとなく分かりました。
916デフォルトの名無しさん:2007/12/07(金) 02:05:45
だってrubyで何か作ろうと思っても
既に誰かが作ってるんだもん・・・クスン・・・
917デフォルトの名無しさん:2007/12/07(金) 02:07:43
>>913
今のうちにRubyと結婚すればいいんじゃね?
918デフォルトの名無しさん:2007/12/07(金) 02:09:11
>>916
>だってrubyで何か作ろうと思っても
>既に誰かが作ってるんだもん・・・クスン・・・
作ってないものは無限にある。
919デフォルトの名無しさん:2007/12/07(金) 02:25:14
「俺に作れる範囲で」が付く
920デフォルトの名無しさん:2007/12/07(金) 03:13:27
python/perlの人気ライブラリをぱくってくれば英雄になれるぞ
まあ、Ruby自身better python/perlなわけだが。

じゃーん!
ttp://www.flickr.com/photos/john_lam/1910968816/
921デフォルトの名無しさん:2007/12/07(金) 06:18:59
萌え萌えだな
922デフォルトの名無しさん:2007/12/07(金) 07:05:44
obj.extend Foo
したときに、objがどのモジュールをextendしたか調べる方法はありますか。
obj.class.ancestors
には見つかりませんでした。
923デフォルトの名無しさん:2007/12/07(金) 08:55:06
判定だけなら is_a? で出来るけど、この質問だと一覧が欲しいんだよね。
なんかメソッドありそうだけど思い出せなかったので

# require 'enumerator'
obj.extend Foo
ObjectSpace.enum_for(:each_object, Module).select {|m| obj.is_a? m}

とかやってみた。
924デフォルトの名無しさん:2007/12/07(金) 12:38:24
エラーを吐き出したとき
... 13 levels...
みたいに省略されることがあるのですが,
これを省略させない方法はありますか?
あったらそれを教えてください。

925デフォルトの名無しさん:2007/12/07(金) 12:41:42
>>922
特異クラス定義中ではancestorsでわかる。
class << obj
 puts ancestors
end
みたいに。
926デフォルトの名無しさん:2007/12/07(金) 14:24:50
>>925
included_modulesならModuleだけ出てくる。
927デフォルトの名無しさん:2007/12/07(金) 14:26:03
>>924
rescue => e
  puts e.backtrace
end
928デフォルトの名無しさん:2007/12/07(金) 14:40:36
>>932,925,926
ありがとうございます。
class <<obj; p ancestors; end
class <<obj; p included_modules; end
のどちらでもいけました。
929デフォルトの名無しさん:2007/12/07(金) 15:33:15
MySQL/Rubyライブラリが必要なのはどうにかならないもんかな。
MySQL/Rubyが使える無料サーバーってあるのかな?
930デフォルトの名無しさん:2007/12/07(金) 15:40:34
>>929
無料は知らないが、有料ならヘムテルとか?
931デフォルトの名無しさん:2007/12/07(金) 16:16:49
open(dir + fn, "wb") {|io|
ファイルを決められたディレクトリに書き出したいのですが
こういう指定はできないんですか?
ここで毎回エラーが出る
932デフォルトの名無しさん:2007/12/07(金) 16:19:20
>>931
もちろんできるが、エラーの内容がわからんとなんとも言えん。
エスパーすると、
open(File.join(dir, fn), "wb"){|io|
あたりか?
933デフォルトの名無しさん:2007/12/07(金) 16:21:39
>>932
レスありがとうございます
駄目なようです
上のままの時と同じエラーが出ます

C:/temp/bin/ruby/lib/ruby/1.8/open-uri.rb:32:in `initialize': No such file or di
rectory - test/hoge.dat (Errno::ENOENT)
934デフォルトの名無しさん:2007/12/07(金) 16:30:50
>>933
open には存在しないディレクトリを作る機能は無いです
手動で 'test;' を作るか

もしくは
Dir::mkdir('test')
を実行してディレクトリを作ってください
935デフォルトの名無しさん:2007/12/07(金) 16:30:51
test というディレクトリを勝手に作ってくれたりはしないぞ

とエスパー。どうかな?
936デフォルトの名無しさん:2007/12/07(金) 16:31:31
>>934
それは作ってあるんです

unless File.directory?(dir)
Dir::mkdir(dir)
end

って事前に入れてあるんで
937デフォルトの名無しさん:2007/12/07(金) 16:35:01
>>929
s145.xrea.com でmysqlは使えるみたいだ
require "mysql" #=>OK
require "sqlite"  #=>LoadError
require "sqlite3" #=>LoadError
938デフォルトの名無しさん:2007/12/07(金) 16:39:03
えぇいっ、
情報が小出しに出てくると答えるほうも大変だ

一度プログラムを整理して
エラーを出力する最小構成単位に切り出して

関係ない関数を削ったり、関係ない表示を削ったり

プログラム全文と実行する環境等を書け

こっちもレスしたらそれはやってあるだと面倒なんだよ
939デフォルトの名無しさん:2007/12/07(金) 16:41:27
>>938
Win32環境でソース全文です
http://www.uploda.org/uporg1146602.txt.html
940デフォルトの名無しさん:2007/12/07(金) 16:47:10
きたないソースだなぁ・・・
941デフォルトの名無しさん:2007/12/07(金) 16:48:24
じゃあそれも直して
942デフォルトの名無しさん:2007/12/07(金) 16:51:05
末尾スペースのディレクトリはWindows のファイルシステムとして作成できないため
作成しようとした段階で末尾のスペースは削られます

それにも関わらず open で末尾スペースのついたディレクトリとファイル名で
アクセスしようとしたために存在しないディレクトリとみなされているようです

末尾のスペースを削る等の処理を入れるとちゃんと実行できると思いますよ

# その、URLは、まぁなんだ
943デフォルトの名無しさん:2007/12/07(金) 16:54:40
ありがと
stripつけて解決した

全文出したくなかったから情報小出しだったのに
944デフォルトの名無しさん:2007/12/07(金) 16:57:43
いやいやなかなか良いサイトをご存知で
945デフォルトの名無しさん:2007/12/07(金) 16:59:15
綺麗なソースを書けばデバッグもやりやすいってもんだ
全部一度にやるんじゃなくて分けて書くのが良いよ
946デフォルトの名無しさん:2007/12/07(金) 17:01:37
欲を言えばスレッドを使って並列ダウンロードしたい所だけどな
一個ずつ画像をダウンロードするとすんげぇ遅いよ
947デフォルトの名無しさん:2007/12/07(金) 17:02:57
mswin32版ってスレッド使えないって聞いたのだけれどひょっとして嘘?
948デフォルトの名無しさん:2007/12/07(金) 17:06:39
使えるけど、コンソール入出力が入ると他のスレッドも止まる。
1.8では。
949デフォルトの名無しさん:2007/12/07(金) 20:43:17
スレッド使うと「ほぼ間断なく画像をディスクに書き出し続けるプログラム」のような動作になるな
全体的視野における効率はどっちもどっちだと思われ
950デフォルトの名無しさん:2007/12/07(金) 20:45:29
Windowsの場合スレッド使わないときで
ファイルコピー1個でNetwork負荷50%くらいしかいかない
2個にしても2倍時間かかるだけ
同時に2個コピーして初めて負荷100%になる
951デフォルトの名無しさん:2007/12/07(金) 20:49:41
>>949
やってみればわかるよ

◆スレッドなし
リクエスト─→レスポンス─→ダウソ完了→リクエスト─→レスポンス─→ダウソ完了→リクエスト───→レスポンス─→ダウソ完了→・・・

◆スレッド
リクエスト─→レスポンス─→ダウソ完了
 リクエスト─→レスポンス─→ダウソ完了
  リクエスト─→レスポンス─→ダウソ完了・・・

ぜんぜん違う
#全体的視野の意味が解んないけど
952デフォルトの名無しさん:2007/12/07(金) 20:51:39
>>950
ネットワークの負荷云々じゃなくてこの場合はレスポンスの待ち時間がボトルネックなのよ
953デフォルトの名無しさん:2007/12/07(金) 20:54:19
>>951
矢印の長さが微妙に違うのが気になってしまった。
下は一緒なのに・・・なんで?w
954デフォルトの名無しさん:2007/12/07(金) 21:06:51
>>951はなんか違うかと

|URLを解釈し鯖にリクエスト△△△|鯖から画像データ▽▽▽▽▽▽▽▽▽|メモリからディスクに書き出し◇|

こうだろ
スレッドを大量に使うと◇の合計が律速になる
955デフォルトの名無しさん:2007/12/07(金) 21:18:19
自作ダウンローダーでスレッドを実際にお得に使おうとするのは意外と難しい(脳内予定ではきれいに行くんだがね)
外部プログラムのwgetにURLのリストを丸投げしたほうが合計ダウンロード時間は短かったりする
956デフォルトの名無しさん:2007/12/07(金) 21:28:06
ディスクへの書き出しがボトルネックになるなら言うことないんじゃない・・・
と思うのは間違いなのかな?
957デフォルトの名無しさん:2007/12/07(金) 22:45:01
a = [ [0,1], [0,1] ] ってしたときに
bをaの単なるコピー(bをいじってもaに影響しない)にするために、
b = [ a[0].clone, a[1].clone ] とする以外に簡単な方法はないでしょうか?
958デフォルトの名無しさん:2007/12/07(金) 22:49:45
b = a.clone
959デフォルトの名無しさん:2007/12/07(金) 22:50:22
Marshal.load(Marshal.dump(a))
960デフォルトの名無しさん:2007/12/07(金) 22:51:05
b = a.dup
961デフォルトの名無しさん:2007/12/07(金) 22:53:25
>>958 >>960
それ浅いコピー
962デフォルトの名無しさん:2007/12/07(金) 23:01:49
書き込んだあとで「単なるコピー」という言い回しに違和感を覚えたんだがやっぱりそういう話か
deep copy が必要な場合はマニュアルにもある通り>>959が正解

irb> a1 = ['a', 1]
irb> a2 = ['a', 2]
irb> a = [a1, a2]
irb> b = a.clone
irb> a1[0] = 'changed'
irb> p b
[["changed", 1], ["a", 2]]
963デフォルトの名無しさん:2007/12/07(金) 23:43:59
Rubyでスタートアップ常駐アプリってつらいの?
964デフォルトの名無しさん:2007/12/07(金) 23:48:24
つらいって言うか、無理
965デフォルトの名無しさん:2007/12/08(土) 02:21:39
class Student < ActiveRecord::Base
 set_primary_key :student_no
end

student=Student.new
student.stdudent_no="a123"
student.name="Matz"
student.save

ってやるとエラーになって
INSERT INTO students(name) VALUES("Matz")
ってSQL発行してるっぽいんだけど主キーってAuto Incrementな整数じゃないとダメなん?
966デフォルトの名無しさん:2007/12/08(土) 04:32:26
エラーねぇ・・・

> stdudent

まさかこれが原因ではないよね?
967デフォルトの名無しさん:2007/12/08(土) 05:28:45
"
968デフォルトの名無しさん:2007/12/08(土) 07:00:58
students
     ~
student

とか。
969デフォルトの名無しさん:2007/12/08(土) 08:42:01
サイズがちょっとずつ違う200個くらいのpng画像の大きさを揃えたいと思っています。
画像のサイズはそれぞれ 800x1200 pixel くらいの大きさです。

そこでRMagickを使って

#!ruby
require 'Rmagick'
include Magick

filenames = ARGV
w = []
h = []

filenames.each do |each|
  img = ImageList.new(each)
  w.push(img.columns)
  h.push(img.rows)
end

puts "min width: #{w.min}"
puts "min height: #{h.max}"

というスクリプトを書いて動かしたところ、最初は順調に動いているのですが、
だんだん仮想メモリを食いつぶしてスラッシングで動作も遅くなっていき、
最後はSEGVで落ちてしまいます。

最終的には、サイズを揃えたり色調を整えたりといった処理もしたいのですが、
今ではとてもそこまで行き着けません。

多分読み込んだImageオブジェクトがGCされずにどんどんたまっていってるんだと思いますが、
いらなくなったオブジェクトを強制的にdeleteする方法はないのでしょうか?
970969:2007/12/08(土) 08:45:54
自己レスです

×誤 puts "min height: #{h.max}"
○正 puts "min height: #{h.min}"

でした。
971デフォルトの名無しさん:2007/12/08(土) 08:48:15
>>966-968
ってことは主キーが文字列であることは問題ないってこと?
972デフォルトの名無しさん:2007/12/08(土) 08:56:10
> いらなくなったオブジェクト
って具体的にどこにあるんだ?

w や h が“生きてる”限りは参照先の ImageList オブジェクトは全部必要とみなされて保持されてんじゃね
filenames の個数の ImageList オブジェクトをメモリ内にキープしているのと同じことだ
each 内で画像処理を終わらせるようにすれば問題は起きないはず
ログとして ImageList オブジェクトのデータが欲しい場合はそれこそ話題の clone や dup で
973デフォルトの名無しさん:2007/12/08(土) 09:01:59
filenamesに入ってるのはファイルだろうから

filenames.each do |file|

とか

filenames.each do |path|

とか書いて欲しい
名前考えるのにめんどくさい場合によく使われるのは要素(Elements)の頭文字e
974デフォルトの名無しさん:2007/12/08(土) 09:09:05
俺は hoge.each{|matz| matz.fuga} にしてるよ☆
975デフォルトの名無しさん:2007/12/08(土) 09:11:57
質問があります。
ttp://www.atmarkit.co.jp/flinux/rensai/mysql07/mysql07b.html
このソースコードのf_and_or = form['and_or1'][0]を使用して、
and と orの検索ができるようにしたいのですが、どうすれば良いのでしょうか?
976デフォルトの名無しさん:2007/12/08(土) 09:31:12
matz.strip とかちょっと楽しそうだな
977969:2007/12/08(土) 09:36:01

> いらなくなったオブジェクト
って具体的にどこにあるんだ?

Image.columnsやImage.rowsは整数を返すので、
wやhからImageインスタンスへの参照は持っていないと思っていました。
違うのでしょうか?
978デフォルトの名無しさん:2007/12/08(土) 10:00:28
matz.slice
matz.dump
matz.freeze
979965:2007/12/08(土) 10:29:53
↓っていまだにこのままなん?
http://d.hatena.ne.jp/akm/20061025

■[rails] 犯人はMysqlAdapter

というわけで何でそんな理不尽なことが起きるのかを突き止めました。ActiveRecord::ConnectionAdapters::MysqlAdapterのnative_database_typesメソッドの中身。

def native_database_types #:nodoc
{
:primary_key => "int(11) DEFAULT NULL auto_increment PRIMARY KEY",
:string => { :name => "varchar", :limit => 255 },
:text => { :name => "text" },
:integer => { :name => "int", :limit => 11 },
:float => { :name => "float" },
:datetime => { :name => "datetime" },
:timestamp => { :name => "datetime" },
:time => { :name => "time" },
:date => { :name => "date" },
:binary => { :name => "blob" },
:boolean => { :name => "tinyint", :limit => 1 }
}
end


という風になっているので、primary_keyに指定されたカラムは嫌でもint(11)になってしまいます。

ただし、これは、set_primary_key/set_primary_keysを使って複合キーでないキーを指定した場合の話です。varcharのカラムひとつをPKに使用とした場合とか。
980デフォルトの名無しさん:2007/12/08(土) 11:22:12
>>975
CGIはWebプログラミング板で聞くと幸せになれる。
981デフォルトの名無しさん:2007/12/08(土) 11:26:02
>>977
GC.start で明示的にごみ集めさせれば回避できるらしいよ。
ttp://www.goodpic.com/mt/archives2/2007/05/imagemagick_rma_1.html

どこかで参照が保持されてるからメモリが解放されないのか、
それともGCの仕様でわざと解放しないのかはわかんない。
982デフォルトの名無しさん:2007/12/08(土) 11:28:56
>>980
Webプログラミング板に行ってみたのですが、
Rubyのスレッドが存在しませんでした…
983デフォルトの名無しさん:2007/12/08(土) 11:50:30
>>982
ガンガレ。
984デフォルトの名無しさん:2007/12/08(土) 15:56:27
>>975
もうちょっと具体的に、「どこが分からないのか」を言わないと
どう解説していいのやら分からん
985デフォルトの名無しさん:2007/12/08(土) 16:38:32
>>984
説明不足で申し訳ありませんでした。

ttp://www.atmarkit.co.jp/flinux/rensai/mysql07/mysql07b.html
このソースコードを少し改造して、新たにお店(store)というデータを追加し、
果物の名前、それを売っているお店の名前、値段といったデータを追加したテーブルを作りました。
htmlの方もお店検索ができるようし、一応動くようにはなっているのですが、
これを書いた作者さんがf_and_or = form['and_or1'][0]を設定し忘れているみたいで、
andとorの検索ができません。

例えば以下のデータがある場合で、

りんご、鳥羽伊三、300
みかん、鳥羽伊三、80
メロン、山田商店、300

りんご、300 と検索した場合、以下の要に、りんご と 300が当てはまるすべてのデータが表示されます。

りんご、鳥羽伊三、300
メロン、山田商店、300

なので、コードにあるf_and_or = form['and_or1'][0]を使用して、and と orの検索ができるようにしたいのですが、どうすれば良いのでしょうか?
986デフォルトの名無しさん:2007/12/08(土) 17:28:39
ローカル変数を一時的にグローバル変数にできる方法ってありますか?
987デフォルトの名無しさん:2007/12/08(土) 18:02:46
そうしたくなる時点で設計レベルで何かがまずい
内容を確かめるだけならファイルに書き出したりするといいぞ
988デフォルトの名無しさん:2007/12/08(土) 18:36:37
もしかしてインスタンス変数がわからないのなら
オブジェクト指向について勉強する良い機会かも
989デフォルトの名無しさん:2007/12/08(土) 20:15:39
>>985
1. HTML側のフォームに、name属性がand_or1のラジオボタンを追加する
2. search.cgiの24〜25行目、二つのSQL文を一つにまとめて
 名前・値段の両方の条件で一度に検索できるようにする
3. SQL文以降のソースコードを、2の変更に合わせて書き換える

ちなみに、CGI#[]はバージョン間の違いが大きいため
できるだけ利用するべきではない
CGI#paramsを使って、form.params['and_or1'][0]とすべき
990デフォルトの名無しさん:2007/12/08(土) 20:25:04
Rubyのグローバル変数って有用な使い道あんの?
991デフォルトの名無しさん:2007/12/08(土) 20:37:14
$stdin のように本質的にグローバルな物に結び付いているものとか
992デフォルトの名無しさん:2007/12/08(土) 21:07:42
>>990
SDLのScreenは、プロセスにつき一つしか作らない(作れない?)ので
たいていグローバル変数に入れて使ってたな

しかし最近では、モジュールやクラスのインスタンス変数に
入れればいいということに気付いたので
やっぱり$stdinぐらいしか使う機会はないのかもしれない
993デフォルトの名無しさん:2007/12/08(土) 21:17:18
グローバルというよりシングルトン
994デフォルトの名無しさん:2007/12/08(土) 21:56:57
シングルトンって要はグローバルじゃないの?
995デフォルトの名無しさん:2007/12/08(土) 21:59:00
全然
996デフォルトの名無しさん:2007/12/08(土) 22:00:04
Cで言うstaticだな。とさらに混乱を誘ってみる。
997デフォルトの名無しさん:2007/12/08(土) 22:02:18
初心者で恐縮なのですが、Railsのscaffoldで作ったlist.rhtmlを編集しても、アプリケーションに
反映されないのですが、何故なのかわかりません。どなたかお教えください。お願いします。
998デフォルトの名無しさん:2007/12/08(土) 22:18:43
>>997
再起動
それでだめなら編集するファイルそのものを間違ってる
999デフォルトの名無しさん:2007/12/08(土) 22:20:30
まずないとは思うがproductionモードで動かしたままでキャッシュONだったりな。
1000デフォルトの名無しさん:2007/12/08(土) 22:21:38
ポインタ本にそう書いてあったのに・・・
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。