[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 05/09 23:23 / Filesize : 180 KB / Number-of Response : 646
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Ruby 初心者スレッド Part 30



1 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 08:21:23 ]
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

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

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

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

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

158 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 14:44:57 ]
大変だ、>>157だけが明後日の方向に


159 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 15:05:41 ]
アクセサってのはインスタンス変数へのアクセスを提供する何かであって
それが言語によってメソッドだったり属性参照式だったりするということじゃないの?

160 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 15:35:17 ]
>>158
おまえが理解できてないだけだ

161 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 16:08:04 ]
だからさ、>>148が悪いんだよ

162 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 16:11:43 ]
「Rubyにはアクセサという機構は存在せず、メソッド定義で代用する」
「定義の簡便のためにattr*系のメソッドがあるが、メソッド定義以上のことを期待するのは勘弁してください」

こう書けばよかったんだな

163 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 16:44:41 ]
>>162が想定する他の言語のアクセサってどんなの?

164 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 16:46:42 ]
アクセサが言語レベルで実装されてる言語なんてあるのか?

165 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 16:48:22 ]
def attribute=(value)

これって明らかにアクセサ用の機能だろ

166 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 16:58:35 ]
初心者ですがまったく話がわかりません



167 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 17:01:10 ]
確かに、メソッド名の最後に(だけ)は = が使えるとか、
obj.foo = bar が obj.foo=(bar) の意味である、だとか、
言語レベルの機能だよな。

168 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 17:34:33 ]
テストファイルで Enumerable を拡張してるんですが、これってテストにならないですよね?

169 名前:106.79-160-162.customer.lyse.net mailto:age [2009/08/17(月) 17:53:40 ]
自動焼人 ★ = 自動保守 ◆KAWORUKOFI = 自動保守#K9K?_D[L

名言集 その3
『いつもサボってばかりのキャップがウゼえ』

yutori7.2ch.net/test/read.cgi/news4vip/1249830540/ ID:PVAf+dux0 = 自動焼人 ★
> 71 :以下、名無しにかわりましてVIPがお送りします [sage] :2009/08/10(月) 00:58:57.28 ID:PVAf+dux0
> >>69
> 大変って言うか
> 毎日、報告されたのを見て、判断して、処理して、完了報告して、以下ループ。
> ちょっとでもミスすると、普段は作業もしてないキャップさんたちがさんざん文句言ってきて
> その言いわけを考えないと、キャップはく奪されたりアカウント凍結されたりするから
>
> 登録されてから一年以上経って、やっといいたいこと言えるようになってきたよ。



----------------------------------------------
この自動焼人 ★メールマガジンの配信停止をご希望される方は
qb5.2ch.net/test/read.cgi/sec2chd/1250169591/
にて自動焼人 ★までご連絡ください

170 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 20:35:18 ]
Array#include?だと指定した値と等しい要素がある場合trueを返しますけど、
等しい要素数を返すにはselectで条件を満たす要素だけとりだしてそれのsizeを調べるしかないでしょうか?

171 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 20:52:31 ]
>>170
その通りです。

便乗して質問させて下さい。
include? ってなんで Array で再定義してるんでしょうか?
Enumerable#include? とは違う実装になってるんでしょうか?

172 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 20:53:08 ]
まあ基本的にはそう
grepしてもいいが、「一致する要素の数」というのを直接返すメソッドはない
というかもしあったとしても内部でfind_allしてsize求めるはず

173 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 20:58:51 ]
例として非nilを数える場合
[true,false,1, "a",nil,nil].inject(0){|r, i| r += (!i.nil?) ? 1 : 0}

書いてみたはいいけど汚いなぁ

174 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 21:11:12 ]
>>171
rb_ary_includesが遅いと困るからきちんと作ったのだと推測

175 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 21:16:15 ]
NTFSの副ストリームって対応してる?

176 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 21:19:19 ]
>>174
なるほど。Array#include? をネイティブに書いて少しでも性能をだそうとした
ということですね。

でも。。今 ruby-1.9.1-p129 の array.c 見てみたんだけど、すごく当たり前な
実装なんですね。
この程度でもネイティブ化すると結構速くなるものなんですかね?



177 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 21:22:49 ]
わざわざEnumerableで定義したのを探してアクセスする時間が惜しいからそばに入れたんじゃね

>>175
Windows版Rubyとして何かをしたという話は聞かない
コンパイルしたときに自動で何かがどうかできるのなら対応してるかも

178 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 21:25:45 ]
>>175
これで足りる?
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]

open('foo.txt', 'w'){|f| f.write('in foo.txt') }
open('foo.txt:sub', 'w'){|f| f.write('in foo.txt:sub') }

puts File.read('foo.txt')
puts File.read('foo.txt:sub')

179 名前:デフォルトの名無しさん [2009/08/17(月) 21:44:20 ]
>>173
低脳死ねカス
[true,false,1, "a",nil,nil].cmplact.length

180 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 21:49:39 ]
>>179
低能氏ねカス
s/cmplact/compact/

181 名前:デフォルトの名無しさん [2009/08/17(月) 21:54:05 ]
cmplact?

182 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 21:54:11 ]
length厨はマジでどうにかならんものか

183 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 21:58:14 ]
size の方が好きなのけ?

184 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 21:58:26 ]
>>170
sizeを調べる「しかない」わけではない。
cnt = 0
array.each {|x| cnt += 1 if some_condition(x) }
puts cnt
あまり美しくないけど、どうぞ。

185 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 22:12:45 ]
質問です。
SGEをダウンロードしたいのだけれども、
www.etek.chalmers.se/~e8cal1/sge/index.html
がNOT FOUNDになります。
いま、SGEはどこでダウンロードできますか?

186 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 22:27:53 ]
用途によって変えるっていう当たり前の答えが返ってくるとは思うけど・・・・


ary=["hage","hige","huge","hege","hoge"]
の要素数を出力したいときに
p ary.size
これはaryを後で別の処理が行われると思われる場合でしょ

んで、
p ["hage","hige","huge","hege","hoge"].size
これは確認したい時だけでしょ

んで、
ary_num=ary.size
p ary_num
ってやってる人がいるんだけど,これは変数が説明になってるってこと?

どの段階で処理したものを変数に入れるかってのがわかんない。好き好きかな?



187 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 22:44:15 ]
>aryを後で別の処理が行われると思われる場合
これは

["hage","hige","huge","hege","hoge"]
の要素数を出力したいときに
ary = ["hage","hige","huge","hege","hoge"]
p ary.size

という感じ
aryに代入するのが前提なら、一番目は最も素直

二番目は主に説明・動作確認・デバッグで使われる
代入するのもめんどくさいとかスペース減らしたいとかそういうのが主な理由

三番目は正直くどい
でも説明以外にも値をキャッシュしておきたいケースはあるし、そういう時には避けられない

188 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 22:45:40 ]
二番目は説明というかスレや記事とかでの解説だった

189 名前:186 mailto:sage [2009/08/17(月) 23:03:10 ]
>>187-188
2番めと3番めの説明がわかりやすかったです。ありがとうございます。

190 名前:デフォルトの名無しさん [2009/08/18(火) 00:40:37 ]
>>180
低脳死ね。タイプ量が多い
s/l//

191 名前:デフォルトの名無しさん [2009/08/18(火) 00:54:11 ]
>>190
低脳死ね。置換できてない。
cmplact => cmpact

正しくは
compact
 ^

192 名前:チンパンジー愛ちゃん [2009/08/18(火) 02:24:08 ]
>>191
うきっきーきーきぃっ

193 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 05:15:32 ]
>>185
質問するスレ間違ってね?
まあいいや、ここ行ってみ
ttp://www.archive.org/

194 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 09:49:05 ]
>>175
C:\> dir a.txt
(略)
2009/08/18 09:46 0 a.txt
(略)

C:\> ruby -e "open('a.txt:foo', 'w'){|f| f.write 'abc'}"

C:\> dir a.txt
(略)
2009/08/18 09:46 0 a.txt
(略)

C:\> ruby -e "p IO.read('a.txt:foo')"
"abc"


195 名前:デフォルトの名無しさん [2009/08/18(火) 14:13:54 ]
くだらない質問だと思いますが、文字列
a = "001011"
b = "000111"
から
c = "000011"
を求める(論理積?)にはどうしたら良いのでしょうか?

196 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 14:25:39 ]
irb> a = "001011"
irb> b = "000111"
irb> ax = a.split(//n)
irb> bx = b.split(//n)
irb> p (0..5).to_a.map{|i| ax[i].to_i & bx[i].to_i}.join
"000011"




197 名前:チンパンジー愛ちゃん [2009/08/18(火) 14:30:51 ]
def and_str(a, b)
return (Integer(a) & Integer(b)).to_s(2)
end

198 名前:チンパンジー愛ちゃん [2009/08/18(火) 14:33:05 ]
def and_str(a, b)
return (Integer("0b" + a) & Integer("0b" + b)).to_s(2)
end

199 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 14:38:04 ]
>>196
1.9 だけでいいなら a[i] で分割いらないんだけどな
どっちでも動作させるならまだ split がスレ的に無難か
めんどい負の遺産じゃのう

200 名前:195 mailto:sage [2009/08/18(火) 14:45:00 ]
>>196-199
ありがとうございました! 196が自分には理解しやすい一方、
198の方が速そうに見えるのですが(こちらはpaddingが必要ですね)
大量のデータを処理する際には、違いが出るでしょうか。

201 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 14:56:25 ]
100万桁を0.5秒で処理しないと銃殺されるとかそういう時にはチェックが必要

202 名前:195 mailto:sage [2009/08/18(火) 15:03:24 ]
そこまで深刻じゃないので、また両方試してみます!

203 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 15:21:38 ]
ハッシュがよくわからなくなったので質問させていただきます

h={"ja"=>{"a"=>1,"b"=>1,"c"=>0},
"usa"=>{"a"=>0,"b"=>0,"c"=>0}
}
となって次に
"usa"=>{"a"=>1,"b"=>1,"c"=>0}が出たら

h={"ja"=>{"a"=>1,"b"=>1,"c"=>0},
"usa"=>{"a"=>1,"b"=>1,"c"=>0}
}

となってほしいのですが,どうすればいいでしょうか?

説明が分かり辛いですが・・・
ループ内にハッシュのキーが一致したら加算していってほしいのです

204 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 15:25:02 ]
>>170
1.8.7以降なら Enumerable#count(obj)


205 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 15:29:26 ]
>>203
とりあえず usa = {"a"=>1,"b"=>1,"c"=>0} を h["usa"] に加算する場合
h["usa"].merge!(usa) { |k, s, d| s += d }

{ "usa" => {"a"=>1,"b"=>1,"c"=>0} } でやりたいなら適当にネストさせて

206 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 15:30:16 ]
代入いらねーよorz
h["usa"].merge!(usa) { |k, s, d| s + d }



207 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 15:37:29 ]
>>198
def and_str(a, b)
sprintf("%.*b", [a.length, b.length].max, (a.to_i(2) & b.to_i(2)))
end


208 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 15:43:26 ]
>>203
最初はとにかくやりたいことをそのまま書くといい
多くの場合、そのまま実行しても充分に速い

def add(base, key, val)
if tgt = base[key]
val.each_pair do |k,v|
if tgt[k] then
tgt[k] = tgt[k] + v
else
tgt[k] = v
end
end
else
base[key] = val
end
end

h={"ja"=>{"a"=>1,"b"=>1,"c"=>0},
"usa"=>{"a"=>0,"b"=>0,"c"=>0}
}
add(h, 'usa', {"a"=>1,"b"=>1,"c"=>0})
p h


{"ja"=>{"a"=>1, "b"=>1, "c"=>0}, "usa"=>{"a"=>1, "b"=>1, "c"=>0}}


209 名前:203 mailto:sage [2009/08/18(火) 16:27:26 ]
>>205-206,>>208
ありがとうございます。mergeを使ったりやaddを定義するのですね。

本当は
require 'pp'
ary=%w(w1 w2 w3 w4 w2 w3 w1 w1 w5 w2 w3 w4)
window =6
hout=Hash.new
ary.size.times{ |i|
hin=Hash.new(0)
hc =Hash.new(0)

b= ary[i+1,window].select { |word| word =~ /[^#{ary[i]}]/ }
pp b
b.each {|count| hin[count] +=1}
hout[ary[i]] = hin
puts "@@@"
pp hout
puts "@@@"

}
pp hout

こんなことをやってます。
最後の pp houtが自分の思ったものと違っていて悩んでいます.
完全質問だと悪いと思って203で質問しました。

210 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 19:12:53 ]
ghoti.rb:30:in `initialize': Wrong arguments for overloaded method 'Tagger.new'. (ArgumentError)

どうしたらいいんでしょう><

211 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 20:02:54 ]
>>210
正しいMeCabバインディングを使う
Taggerは今SourceForgeにあるMeCabバインディングをそもそも知らない

212 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 20:48:35 ]
>>211
hm..
ってことはMeCabがバージョン9.07ではダメってことで、
古いバージョンのMeCabでおk って解釈でいいんですかね?

213 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 21:08:14 ]
6年前のな

214 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 21:17:36 ]
MeCab本体とMeCabライブラリは違う

215 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 21:25:58 ]
ghoti.rb:30:in `initialize': Wrong arguments for overloaded method 'Tagger.new'. (ArgumentError)
Possible C/C++ prototypes are:
Tagger.new(char const *argc)
Tagger.new()

少しいじった結果エラーログがこうなりました・・。
これはスクリプト書き換えとかで回避できないんでしょうか?

216 名前:203 mailto:sage [2009/08/18(火) 21:30:24 ]
>>205->>206,>>208さんのもの自体は理解できたのですが,
やはり>>209での問題が解決しませんでした.
ハッシュのハッシュのvalueを加算していきたいのですが助言お願いします.



217 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 21:57:11 ]
どんな値が返ってくれば正解なのかすら知らせずに丸投げとな

require 'pp'
ary = %w(w1 w2 w3 w4 w2 w3 w1 w1 w5 w2 w3 w4)
window = 6
hout = Hash.new
ary.size.times do |i|
b = ary[i + 1, window].delete_if{|w| /#{ary[i]}/ =~ w}
b.each do |w|
hout[w] = 0 unless hout[w]
hout[w] += 1
end
end
pp hout


{"w1"=> 10, "w2"=> 9, "w3"=> 11, "w4"=> 9, "w5"=> 6}

218 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 22:02:04 ]
require 'pp'
ary = %w(w1 w2 w3 w4 w2 w3 w1 w1 w5 w2 w3 w4)
window = 6
hout = Hash.new
ary.size.times do |i|
ary[i+1, window].each do |w|
next if /#{ary[i]}/ =~ w
hout[w] = 0 unless hout[w]
hout[w] += 1
end
end
pp hout

219 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 22:28:25 ]
require 'pp'
ary = %w(w1 w2 w3 w4 w2 w3 w1 w1 w5 w2 w3 w4)
window = 6
hout = Hash.new(0)
ary.size.times do |i|
ary[i+1, window].reject{|w| w == ary[i]}.each{|w| hout[w] += 1}
end
pp hout


220 名前:203 mailto:sage [2009/08/18(火) 22:30:53 ]
>>217->>218
すいません。欲しい出力を書いていませんでした。申し訳ありません。


{"w1"=>{"w2"=>4, "w3"=>4, "w4"=>3, "w5"=>2},
"w2"=>{"w1"=>4, "w3"=>5, "w4"=>2, "w5"=>1},
"w3"=>{"w1"=>4, "w2"=>2, "w4"=>3, "w5"=>2},
"w4"=>{"w1"=>2, "w2"=>2, "w3"=>1, "w5"=>1},
"w5"=>{"w1"=>0, "w2"=>1, "w3"=>1, "w4"=>1}}
と出力して欲しいのです。

221 名前:チンパンジー愛ちゃん [2009/08/18(火) 23:01:40 ]
require 'pp'

def hash_add(base, add)
ret = add.each do |nest_key, nest_value|
if base[nest_key]
nest_value.each do |add_key, add_value|
base[nest_key][add_key] += add_value
end
else
base[nest_key] = nest_value
end
end
return base
end

h1 = {
"ja"=>{"a"=>5,"b"=>7,"c"=>9},
"usa"=>{"a"=>4,"b"=>2,"c"=>1}
}
# $(B$H$J$C$F<!$K(B
h2 = {
"ja"=>{"a"=>3,"b"=>8,"c"=>4},
"usa"=>{"a"=>14,"b"=>8,"c"=>5}
}
# $(B$,=P$?$i(B
pp hash_add(h1, h2)

# h1.inspect
h = {
"ja"=>{"a"=>1,"b"=>1,"c"=>0},
"usa"=>{"a"=>1,"b"=>1,"c"=>0}
}

222 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 23:07:58 ]
require 'pp'
ary = %w(w1 w2 w3 w4 w2 w3 w1 w1 w5 w2 w3 w4)
zero = ary.uniq.inject(Hash.new){|h,w| h[w] = 0 ; h }
window = 6
hout = Hash.new
ary.each_with_index do |key,i|
 (hout[key] = zero.dup).delete(key) unless hout.key?(key)
 ary[i+1,window].select{|e| e != key }.each {|word| hout[key][word] += 1 }
end

223 名前:チンパンジー愛ちゃん [2009/08/18(火) 23:25:03 ]
核と思われる部分だけを抜き出すとこんなことになるんだけど、
問題をうまくまとめれてないんじゃない?
もうちょっと整理してから再度質問して。

require 'pp'
ary = %w(w1 w2 w3 w4 w2 w3 w1 w1 w5 w2 w3 w4)
window =6

ary.size.times { |i|
j = i + 1
p [":ary[#{j},#{window}]", ary[j, window]]
}
t217.3.rb [utf-8][unix]
:!ruby t217.3.rb
[":ary[1,6]", ["w2", "w3", "w4", "w2", "w3", "w1"]]
[":ary[2,6]", ["w3", "w4", "w2", "w3", "w1", "w1"]]
[":ary[3,6]", ["w4", "w2", "w3", "w1", "w1", "w5"]]
[":ary[4,6]", ["w2", "w3", "w1", "w1", "w5", "w2"]]
[":ary[5,6]", ["w3", "w1", "w1", "w5", "w2", "w3"]]
[":ary[6,6]", ["w1", "w1", "w5", "w2", "w3", "w4"]]
[":ary[7,6]", ["w1", "w5", "w2", "w3", "w4"]]
[":ary[8,6]", ["w5", "w2", "w3", "w4"]]
[":ary[9,6]", ["w2", "w3", "w4"]]
[":ary[10,6]", ["w3", "w4"]]
[":ary[11,6]", ["w4"]]
[":ary[12,6]", []]

224 名前:チンパンジー愛ちゃん [2009/08/18(火) 23:25:52 ]
ary[12, 6]がおかしいと思わない?

225 名前:203 mailto:sage [2009/08/18(火) 23:44:32 ]
>>221->>224
ありがとうございます。

hout=Hash.new
ary.size.times{ |i|
hin=Hash.new(0)
でhinを初期化しているから同じkeyが来たときに上書きされてしまっているのが一つ問題と
同じkeyが来たときにそのvalueの中にあるハッシュで同じモノがあれば加算して、なければmergeする方法がわからないのがもう一つの問題です。

mergeの方法は>>205-206,>>208さんのやり方になるのかなと思ってます。

>>224
ary[12,6]はそれでもOKだと思ってます。
そこは加算しなくていいよーということで。だめなんでしょうか?

226 名前:チンパンジー愛ちゃん [2009/08/18(火) 23:45:41 ]
>>215
@mecab = MeCab::Tagger.new([$0])
ってかいてあるところに
@mecab = MeCab::Tagger.new("arg1 arg2 arg3 arg4 ...")
みたいな感じで直接Mecab用のオプション書けばうまくいくよ



227 名前:チンパンジー愛ちゃん [2009/08/18(火) 23:53:51 ]
>>225
ary[12, 6]をきちんと認識しているのなら何も問題はないでふ
ただ、ここがバグの原因じゃないかな?と思っただけで。

Hash.new(0)
してあるんだから、
「同じkeyが来たときにそのvalueの中にあるハッシュで同じモノがあれば加算して、なければmergeする」
は、
h["unknown_value"] += unknown_value_key
と直接書けばよいでしょ。
以下のコードの実行結果の予想つく?

h0 = Hash.new(0)
hash = {}
p h0[:unknown_keh0 = Hash.new(0)
hash = {}
p h0[:unknown_key]
p h0[:unknown_key] += 5
p hash[:unknown_key]
p hash[:unknown_key] += 5
y]
p h0[:unknown_key] += 5
p hash[:unknown_key]
p hash[:unknown_key] += 5

228 名前:チンパンジー愛ちゃん [2009/08/18(火) 23:55:27 ]
上のはゴミコードが入っちゃった。ごめん。
こっちのコードの実行結果の予想つく?

h0 = Hash.new(0)
hash = {}
p h0[:unknown_key]
p h0[:unknown_key] += 5
p hash[:unknown_key]
p hash[:unknown_key] += 5

229 名前:チンパンジー愛ちゃん [2009/08/18(火) 23:57:18 ]
rails仙人やーい

230 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 00:04:07 ]
>>228
0
5
0
5
では・・・・ないんですか?すいません。
あと:unknownという表記になれていませんのでそこがわかりません。

231 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 00:10:07 ]
windows用に作られたRubyファイルを動かしたいのですが、ディレクトリがDOSの¥が使われていてファイルを指定できません・・。
No such file or directory - .\/log.txt (Errno::ENOENT)
このようになります。

ディレクトリ指定をLinux用の表現にしたいんですけど、ソースを見てもまったくわかりません。
その部分を書き換えられれば動くと思うんですが、何をどう書き換えればいいかご教授いただけないでしょうか

232 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 00:14:36 ]
>>226

@mecab = MeCab::Tagger.new("arg1 arg2 arg3 arg4 ...")
と書いてみましたが・・。

何を見て何のオプションを書き加えていけばいいんでしょうか・・?

233 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 00:16:04 ]
>>231
原因がわかってるように見えるので、むしろ何がわからないのかわかりません
適当な、それっぽいコード塊でも提示すれば何か答えようがあるかもだけど

234 名前:チンパンジー愛ちゃん [2009/08/19(水) 00:16:39 ]
>>230

:aaaとかはシンボルっていうんだけど、
シンボルが難しいんならいいや以下のコードで考えて。

h0 = Hash.new(0)
hash = {} # Hash.new と等価
p h0["unknown_key"]
p h0["unknown_key"] += 5
p hash["unknown_key"]
p hash["unknown_key"] += 5

実行結果の予想は間違ってるよ。
0
5
nil
h.rb:6: undefined method `+' for nil:NilClass (NoMethodError)

自分で確認してね。

あとさ、Hash.newの挙動が分かってないので、Hashの初期化について学んで来てください。

235 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 00:16:56 ]
>>231
それで躓くとなるとRubyどころかプログラム自体初心者じゃないかと思う
でなければよほど面倒なことをしてるソースか

どちらにせよソース提示が必要かと

236 名前:チンパンジー愛ちゃん [2009/08/19(水) 00:27:23 ]
>>232
ええーっ!
@mecab = MeCab::Tagger.new("arg1 arg2 arg3 arg4 ...")
ってほんとうに実行したの?
argの意味が分からない系のヒトなのか
チンパンジー愛ちゃんでもできたのにねー

まあ、いいや。
OSとOSのバージョン・種類、rubyのバージョン、
mecabのバージョン、mecab-rubyのバージョン、mecab用辞書のバージョン
@mecab = MeCab::Tagger.newとして実行ときのエラーメッセージ
これらすべてを答えてね。

# 個人的な興味として何でghotiなんて使おうと思ったの?



237 名前:チンパンジー愛ちゃん [2009/08/19(水) 00:28:38 ]
追加で、ruby, mecab, mecab-ruby, mecab用辞書
これらすべてのインストール方法も書いてね。

238 名前:203 mailto:sage [2009/08/19(水) 00:30:44 ]
>>234
ありがとうございます。シンボルですか。了解です。

h0 = Hash.new(0) #ハッシュh0を作り初期値は0
hash = {} # Hash.new と等価 #ハッシュhashを作成(ハッシュの箱を作っただけ)
p h0["unknown_key"] #h0のkeyをunknown_keyとしてそのvalueを出力->初期値0
p h0["unknown_key"] += 5#↑のkeyのvalueに5加算
p hash["unknown_key"] #hashのkeyをunknown_keyとしてそのvalueを出力->でも中身が入ってないからnil
p hash["unknown_key"] += 5 #↑中身がわかってないのに5たしてんじゃねーよ

ということですね。少しわかりました。

239 名前:231 mailto:sage [2009/08/19(水) 00:30:53 ]
エラーの行は
from ******.rb:444:in `open'
from ******.rb:444:in `store_text'

def store_text(lines)
ary = []
lines.each do |line|
ary << line.gsub(/\s+/, ' ').strip  ←ココ 444行目
end

ary.each do |line|
@text << line
end

File.open(@text_filename, 'a') do |fp|
ary.each do |line|
line.chomp!

fp.puts line
end




240 名前:231 mailto:sage [2009/08/19(水) 00:31:59 ]

from ******.rb:239:in `memorize'

def memorize(lines)
@dic.store_text(lines)  ←ココ239行目
if @dic.learn_from_text
@dic.save_dictionary
end
end


from ******.rb:779 

require 'readline'   ←779行目
****** = ******.new(".\\")
puts "Welcome to The ******"

while (str = Readline.readline("> ", true))
break if /^(exit|quit)?$/.match(str)

******.memorize(str)
res = ******.talk

puts res
end

******はファイル名です。

241 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 00:37:06 ]
>>236

OS Ubuntu9.04
ruby 1.84
mecab 0.97

インスコ方法とかは
ttp://d.hatena.ne.jp/shohu33/20090216/1234781661このページを参考に。というより、コピペでコンソールに張り付けて実行してインスコしていきました・・。
rubyなどは全部apt-getです。

ghotiでtwitter用のBOT作るんだ><

242 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 00:38:20 ]
>>231=>>239-240
@text_filename
この中身をセットしている所をチェックしてみれば?

もしくは単純に、
File.open(@text_filename, 'a') do |fp|
の直前で、
p @text_filename
してみるとか。
まあごっつい原始的なデバグ法で気が引けるが。

243 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 00:41:00 ]
人工無脳流行ってんの?

>>240
その*****とやらのクラスのinitializeの第一引数どうなってる?
>****** = ******.new(".\\")
の .\ に log.txt を結合してるんだと思う

244 名前:242 mailto:sage [2009/08/19(水) 00:42:50 ]
>>243
をお。
ちゃんと読めばそこまで読み取れるのか。斜め読みいくないね。人口無能レベルのレススマソ

245 名前:195 mailto:sage [2009/08/19(水) 00:49:25 ]
流れをぶったぎってすみません。ちょっと質問。

配列のデフォルト値の指定ってできますか?
ハッシュ(デフォルト値==0)だったら hoge = Hash.new(0)だけど
配列は同じ構文で要素数指定になりますよね。

ary = []
ary.default(0)
ary[3] #=> 0

みたいなことがやりたいのです。

246 名前:231 mailto:sage [2009/08/19(水) 00:51:06 ]
def initialize(dirname)
def initialize(dirname=nil)
def initialize(buf)
def initialize(ary=nil)

第一引数がわかりません><

ruby難しいですorz



247 名前:チンパンジー愛ちゃん [2009/08/19(水) 00:51:50 ]
>>239
なんだー?それは。
ghoti.rbが実行できないわけではないのか。
ココ444行目とかかかれても何のエラーか分かんねーよ。
どーせnilがsub呼んだってエラーだろーけどなー
239行目は分からない、でも@dicをみるにmecabの辞書をインストールしてないんでしょ。
779行目はreadlineっていうライブラリがないってだけでしょ。

で、そういうライブラリなし・辞書なしとかのエラーだと予想したからこそ、
>>236-237
OSとOSのバージョン・種類、rubyのバージョン、
mecabのバージョン、mecab-rubyのバージョン、mecab用辞書のバージョン
@mecab = MeCab::Tagger.newとして実行ときのエラーメッセージ
これらすべてを答えてね。

追加で、ruby, mecab, mecab-ruby, mecab用辞書
これらすべてのインストール方法も書いてね。

って質問を書いておいたんだけどな。
どうやってインストールされていたか分からないなら分からないと正直に書いて。
とりあえず答えてくれれば解決方法を伝えるようにがんばるけど答えないなら知らない。諦めてね。

>>203(208)
>>227で愛ちゃんが書いた以下のコードを理解してもらいたくって
>>228, >>234を書いたってことを理解してね。
-------------------------------------
Hash.new(0)
してあるんだから、
「同じkeyが来たときにそのvalueの中にあるハッシュで同じモノがあれば加算して、なければmergeする」
は、h["unknown_value"] += unknown_value_key
と直接書けばよいでしょ。

248 名前:チンパンジー愛ちゃん [2009/08/19(水) 00:53:11 ]
およよ、書かれてた。ごめんね。
リロードせずに書いちゃった。
>>247はとりあえずキャンセル

249 名前:チンパンジー愛ちゃん [2009/08/19(水) 00:59:00 ]
質問者が入り乱れてて分け分からなくなってきた。
チンパンジーの限界か!
>>232の質問の続きだと思って>>239のレスに答えてた。
>>232には>>247で悪いことをした。ごめんね

250 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 01:00:32 ]
愛ちゃんかわいいよ愛ちゃん
てかコテハンうぜぇw

251 名前:231 mailto:sage [2009/08/19(水) 01:09:23 ]
****** = ******.new (".\\")→(ARGV[0] || "data")でいいんですかね・・

252 名前:231 mailto:sage [2009/08/19(水) 01:10:30 ]
むりですね。。

253 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 01:14:25 ]
>>251-252
なんか吹いた

******.new (".\\")
のコード(initialize)を出せって言われとろーがwww

大体その******は、全部同じものか?違うなら、HogeとかPageとか適当に分けやがれw

254 名前:チンパンジー愛ちゃん [2009/08/19(水) 01:15:11 ]
>>247
何でUbuntu9.04にruby1.84が入っているんだ。
私も9.04使ってるけどruby1.87が入ってたけどな。
それとリンク先はpythonの説明だったぞ。
なぜruby使いにpythonの記事を読ませた!死罪也!

まさかとは思うけど、pythonとrubyの区別がついてなくて
リンク先の記事はrubyの解説だと思っているってことはないよね?

@mecab = MeCab::Tagger.new
って実行してエラーメッセージを貼ってね。
個人的にはmecab用の辞書入れていないことが問題だと思っているけどね。
あと、mecab-ruby, mecab用辞書のバージョンもちゃんと書いてね。

255 名前:231 mailto:sage [2009/08/19(水) 01:25:16 ]
>>253
******は同じ文字列です。。
コードのだしかたが・・。

module ******
def ******.new(*args)
******::Core.new(*args)
end
def ******.init_dictionary(dirname)
dic = Dictionary.new(dirname)
dic.load_text
dic.learn_from_text(true)
dic
end

class Dictionary
TEXT_FILENAME = '******.txt'
DIC_FILENAME = '******.dic'
def Dictionary.load(dirname)
dic = Dictionary.new(dirname)
dic.load_text
dic.load_dictionary
dic
end
こうですか?わかりません><

256 名前:203 mailto:sage [2009/08/19(水) 01:25:22 ]
>>247
>Hash.new(0)
>してあるんだから、
>「同じkeyが来たときにそのvalueの中にあるハッシュで同じモノがあれば加算して、なければmergeする」
>は、h["unknown_value"] += unknown_value_key
>と直接書けばよいでしょ。

すいません。ここが理解できてないです。
hout=Hash.new
ary.size.times{ |i|
hin=Hash.new(0)
b= ary[i+1,window].select { |word| word =~ /[^#{ary[i]}]/ }
b.each {|count| hin[count] +=1}
pp hin
puts "@@@"
pp hout
puts "@@@"
}
pp hout
-------
hout[ary[i]] += hin.valuesだとhoutは初期値がないから
undefined method `+' for nil:NilClass (NoMethodError) ですもんね・・・・。



257 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 01:27:53 ]
>>255
おk。わかった。
とりあえず、>>231に戻って
******.new (".\\")

******.new (".")
にしてみろ。
それでダメなら、ちゃんとソース嫁。

258 名前:231 mailto:sage [2009/08/19(水) 01:29:39 ]
>>257

ネ申


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

259 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 01:34:02 ]
>>258
怖い、怖いよw

本当にそれでいいか、一度ソースを読むことを激しくお勧めする。
てかRubyほとんど関係ねえ!

260 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 01:37:44 ]
>>259
文字化けしますが、文字コードの謎の不具合のせいなので調整すれば大丈夫そうです。
あとはPerlでの作業なのでなんとかなるでしょう。。
Ruby難しいです・・。ソース読めません・・。

261 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 01:42:18 ]
>>203
>>222だけどあれじゃだめなの?それとも途中経過の出力が必要?

ary.each_with_index do |key,i|
 (hout[key] = zero.dup).delete(key) unless hout.key?(key)
 ary[i+1,window].select{|e| e != key }.each {|word| hout[key][word] += 1 }
pp hout[key],'@@@',hout,'@@@',
end
pp hout

262 名前:203 mailto:sage [2009/08/19(水) 01:47:10 ]
>>222
ありがとうございます。出力結果はOKですし、ソースも読解します。
でも、まず、自分が書いた奴がなぜ結果まで持って行けないかわかってないので
チンパンさんに教えてもらっている感じです。


263 名前:チンパンジー愛ちゃん [2009/08/19(水) 01:57:45 ]
>>256
「同じkeyが来たときにそのvalueの中にあるハッシュで同じモノがあれば加算して、なければmergeする」

以下の時にA.B.と分けて考えよう。
h1 = hash.new(0)
h1 = h1.merge({"a" => 2, "b" => 3})# h1.merge!({"a" => 2, "b" => 3})でも可
h2 = {"a" => 3, "c" => 8}

A.同じkeyが来たときにそのvalueの中にあるハッシュで同じモノがあれば加算
B.なければmergeする

A.これは、以下のままでよいから特に難しくないね。
h1["a"] += h2["a"]

B.は
h1["c"] += h2["c"]
と等価なんだよね。

p h1["unknown_key"] += 5
を思い出してね。

すると、A.Bの時に場合分けは特に必要なく、
h["unknown_value"] += unknown_value_key
のコードで事足りるよね。

264 名前:203 mailto:sage [2009/08/19(水) 02:16:49 ]
>>263
A,Bの場合分けが入らないのは理解しました。
h["unknown_value"] += unknown_value_key
これは ハッシュhにunknownのvalueをkeyとしたものに unknownのvalueのkeyのvalueを足しているということでいいんですか?
アンダースコアをどのように使っているかわかりません。

hout[ary[i]] とやらないと
w1"=>{"w2"=>4, "w3"=>4, "w4"=>3, "w5"=>2}
のw1=>が得られないと思っているのですが、それもちがいますか?



265 名前:231 mailto:sage [2009/08/19(水) 02:19:29 ]
else

chr = /./m.match(str)[0]
result << chr if num
str = Regexp.last_match.post_match
end

この部分で ぬるぽ って言われるんですが。
NilClass (NoMethodError)

単なる文法間違いですか・・?

266 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 02:19:39 ]
>>262
「自分で書いた」ってのは>>209の事かな
あれがうまく行かないのはこの行で前のループのデータを上書きしてる為。
hout[ary[i]] = hin
ここに>>208氏のメソッドを使えば>>220に近い結果が出せた。
add(hout,ary[i],hin)

マージに拘りすぎ、普通に枚挙すれ



267 名前:チンパンジー愛ちゃん [2009/08/19(水) 02:30:13 ]
>>264
アンダースコアは気にしないで。単語の区切りに使っただけ。
こっちの方が迷わなくていいかな。
×h["unknown_value"] += unknown_value_key
○h["unknownkey"] += unknownvalue
これはhのハッシュに存在していないキーのことをいいたかったんだけど、
愛ちゃんの変数名の付け方がおかしかったね。ごめんね。
> これは ハッシュhにunknownのvalueをkeyとしたものに
> unknownのvalueのkeyのvalueを足しているということでいいんですか?
話がややこしくなってるね。変な変数名でごめんね。

> hout[ary[i]] とやらないと...
これは正しいよ。そうしないと得られないよ。

268 名前:203 mailto:sage [2009/08/19(水) 03:10:28 ]
>>266
ありがとうございます。上書きしていたのは気がついたのですがそのように書くしか思いつかなかったので手がでませんでした。
addでやったところvalueが0の所は出力されていませんが、欲しいモノで出力されました。

>>267
変数名に関して理解しました。
しかし、hout[ary[i]] = hinの所をどのようにh["unknownkey"] += unknownvalue と結びつけるかわかりません。
h["unknownkey"] += unknownvalue はhinの方ですよね。

269 名前:チンパンジー愛ちゃん [2009/08/19(水) 03:51:55 ]
> しかし、hout[ary[i]] = hinの所をどのようにh["unknownkey"] += unknownvalue と
> 結びつけるかわかりません。h["unknownkey"] += unknownvalue はhinの方ですよね

うんにゃ、違うよ。hinじゃないよ。
h["unknownkey"] += unknownvalue
と結びつけて考えないといけないのは以下の箇所

hout[ary[i]] = hin# ここを以下のように変更すれば期待通りに動くはず

hin.each do |key, value|
hout[ary[i]][key] += value
end

270 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 04:43:35 ]
的確なレスもできないくせにコテうぜえ

271 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 05:30:04 ]
ナツノオモイデ君はどこでも厄介だ

>>265
本当に何も考えていないWindows用スクリプトなのなら日本語はShiftJIS決め打ちだろ
入力する日本語を全部ShiftJISにして$KCODE相当もShiftJISにしてみ

272 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 06:01:39 ]
>>245
arr = Array.new
p arr[3] #=> nil

これを「nil ではなく 0」にしたいのだと推測
できません
「arr[3] が nil なら 0 を代入」という手順を経るのが通例です
この明示的な動作で要素3までの配列が確定され、「空」だった要素にはnilが代入されます
配列の自動初期値設定というのはあったらあったで便利っぽい機能なんですが、おそらくは
「nil以外のオブジェクトが勝手に若い要素全てに代入される」
という動作が Ruby 添付クラス的にキモいということで嫌われたのでしょう

もし必要なサイズがあらかじめわかっているのなら、その大きさの配列を作って Array#fill で埋めるか

arr = Array.new(5)
arr.fill{ 0 }
p arr[3] #=> 0
p arr #=> [0, 0, 0, 0, 0]

あるいは new のときにやっちゃってください

arr = Array.new(5){ 0 }
p arr[3] #=> 0
p arr #=> [0, 0, 0, 0, 0]

[] メソッドで参照しただけで若い要素が 0 で埋まる配列クラスと言うのを自作しても構いませんが、多分動作遅いと思われます

273 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 11:00:07 ]
>>245
Rubyの配列にはそういう機能がないです。残念でした。
代替案としては arr[x] で参照するかわりに (arr[x] ||= 0) とするとか。
たとえば
arr = [1, 2, 3]
puts (arr[5] ||= 0) + 1
みたいな。

あとは Array#[] を上書きすればいいのかなー
class Array
 def [](x)
  val = super(x)
  val = self[x] = 0 if val.nil?
  return val
 end
end
とか。

274 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 11:12:08 ]
>>231
めんどくせぇソース全文うpってくれ

275 名前:203 mailto:sage [2009/08/19(水) 11:43:54 ]
>>263
遅くなってすいません。こうですか?
require 'pp'
ary=%w(w1 w2 w3 w4 w2 w3 w1 w1 w5 w2 w3 w4)
window =6
hout=Hash.new
ary.size.times{ |i|
hin=Hash.new(0)
b= ary[i+1,window].select { |word| word =~ /[^#{ary[i]}]/ }
b.each {|count| hin[count] +=1}
#hout[ary[i]] = hin
hin.each do |key, value|
hout[ary[i]][key] += value
end
}
pp hout

実行すると
at.rb:12: undefined method `[]' for nil:NilClass (NoMethodError)
from mat.rb:11:in `each'
from mat.rb:11
from mat.rb:5:in `times'
from mat.rb:5
となってしまいます。

276 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 12:01:02 ]
>>275
自分で考えてほしいからエラーのヒントだけ
>hout=Hash.new
>#hout[ary[i]] = hin
>hout[ary[i]][key] += value
>at.rb:12: undefined method `[]' for nil:NilClass (NoMethodError)



277 名前:203 mailto:sage [2009/08/19(水) 12:32:53 ]
>>276
hout[ary[i]][key]
Hashが二つ[][]を取っているのが気持ち悪いですし、それがundefined method `[]' for nil:NilClass (NoMethodError)
を起こしているのだと思いますが・・・・。そうだとしても解決がわからないです。

278 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 12:44:23 ]
>>277
>hout[ary[i]][key]
k = ary[i]
x = hout[k]
y = x[key]
と同じ

で、このときのxはなんだとおもう?

279 名前:203 mailto:sage [2009/08/19(水) 12:50:17 ]
>>278
xはhout[ary[i]]ですか?
ということはhout[ary[i]]が一つのハッシュでhout[ary[i]][key]だとそれのキーということですか?

280 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 12:58:15 ]
なんどめだナウシカ

ハッシュの h[key] は、「ハッシュ機構」という特殊なものがあるわけじゃなくて
「オブジェクト h の [] メソッドに引数 key を渡している」
という処理を簡単に表記できるように特別扱いされたものに過ぎない

h = {'one' => 1'}
p h['one'] #=> 1
p h.[]('one') #=> 1

つまり、h['one']['two'] という表記があったなら、それは

 h.[]('one').[]('two')

というメソッドチェーンを表しているに過ぎない
メソッドチェーンだから、[]('two') のレシーバ、つまりドットの前の、h.[]('one') の返り値、
が nil だと普通に NoMethodError になる
そんだけ

281 名前:203 mailto:sage [2009/08/19(水) 12:58:33 ]
あぁ、hout[ary[i]][key]はhout[ary[i]]のkeyがkeyの時のvalueですね

282 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 13:14:39 ]
これを一括ダウンロードするのってどうやるの?
www.boostermp3.com/audio/index.php?search=perfume

283 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 13:27:56 ]
うぜえからダウンローダー使うなってページ構造に書いてあるな
まあ知識がないなら手作業でやりゃいいんじゃねえの

284 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 13:34:11 ]
JavaScriptのリンククリックするだけのように見えるから
JavaScriptのリンクをクリックできるライブラリ使えばできそうな気はする
内容が内容だけにこれ以上は自力でやれとしか

285 名前:203 mailto:sage [2009/08/19(水) 14:03:15 ]
>>280
すいません。ハッシュ機構というものがあるような感じで書いていました。
メソッドチェーンということはと思って
hin.eachの前で
p hout[ary[i]]をしたところ返り値がnilでした.
ということは hout=Hash.newのところが問題になってくるのでしょうか?

286 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 14:09:22 ]
>>285
そりゃ唯一の代入をコメントアウトしちゃったらnilしか返ってこないわな




287 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 14:22:23 ]
よし、ではハッシュの初期値を使うのは禁止だ
理由は、全く理解していないから

望ましい処理を自力で一度書け
どういう時にどうなっていて欲しいかを if で条件分岐しろ

288 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 14:25:13 ]
なんかみんなを混乱させているようだね。
>>275
>at.rb:12: undefined method `[]' for nil:NilClass (NoMethodError)
これを説明すると、まずat.rbの12行目でエラーが起きている。
エラーの内容は、nilに対して '[]' というメソッドを実行しようとしているため。
つまり nil[i] のようなことをしている。
at.rbの12行目がなにかわからないけど、hout[ary[i]][key] だとしたら、
・aryがnilのせいで ary[i] がエラー
・houtがnilのせいで hout[ary[i]] がエラー
・hout[ary[i]]がnilのせいで hout[ary[i][key] がエラー
のどれかが原因。
あとは自分で調べて。

289 名前:231 mailto:sage [2009/08/19(水) 14:52:04 ]
>>274
遅くなりましたが>>231.255.258.259.265のソースの全文です。。

ttp://2sen.dip.jp/cgi-bin/upgun/up1/source/up31158.zip

290 名前:チンパンジー愛ちゃん [2009/08/19(水) 15:17:23 ]
初心者が混乱しているときは大抵教え方が悪いと思っていたけどやっぱりそうだった。
ごめん、答えだけ書くね。大体>>220と同じ出力になるよ。"w5" => {...}だけ違うけど。

require 'pp'
ary=%w(w1 w2 w3 w4 w2 w3 w1 w1 w5 w2 w3 w4)
window =6
hout=Hash.new
ary.size.times{ |i|
hin=Hash.new(0)
b= ary[i+1,window].select { |word| word =~ /[^#{ary[i]}]/ }
b.each {|count| hin[count] +=1}
#hout[ary[i]] = hin
if hout[ary[i]].nil?
hout[ary[i]] = hin
else
hin.each do |key, value|
hout[ary[i]][key] += value
end
end
}
pp hout

291 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 15:24:45 ]
的確なレスもできないくせにコテうぜえ


292 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 15:25:05 ]
>>289
やっぱsixamoかよ、なんでわざわざ名前伏せるんだw
でもこれ微妙に改変されててバージョン情報に偽りが・・・まあこの際どうでもいいか

とりあえずホンモノ使っときゃいいんじゃね
yowaken.dip.jp/sixamo/

293 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 15:32:10 ]
>>292
本物はRubyのバージョン的に動かないって書いてあったので・・。
動かしてみた感じでは本物は受け答えできず。
改変版は数行実行したのちエラー。
ログのTXTファイル空にしたらまた動くので、文字コードとか?文章作成あたりでエラーになってると予測。

本物より動きそうなんですがね。。

294 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 15:42:14 ]
厳しい言い方だが、

あなたがただのユーザーなら、Rubyで動作するプログラムは現存しないので諦めれ
あなたがプログラミングを行う者なのなら、あなたが自力で全体修繕して作れ

どっちか

295 名前:203 mailto:sage [2009/08/19(水) 15:58:50 ]
>>286->>288,>>290

ご指摘ありがとうございます。
各クラスのメソッドの知識がないみたいなのでそこを勉強して出直してきます。
また、初期値なども勉強してきます。
昨日からいろいろな人に教えていただきましてまことにありがとうございます。

296 名前:チンパンジー愛ちゃん [2009/08/19(水) 16:15:54 ]
mecab坊やはどうなったの?解決したの?



297 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 16:28:45 ]
的確なレスもできないくせにコテうぜえ

298 名前:デフォルトの名無しさん [2009/08/19(水) 16:48:22 ]
ここまで全部読み飛ばした。
寝る。

299 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 17:02:48 ]
とりあえず
みんな
おつかれ

300 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 18:36:53 ]
>>293
Ruby1.9なら1.8を
もし引数無しで起動したならリンク先ちゃんと読め

301 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 19:09:17 ]
1.8w

302 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 19:48:41 ]
>>290
>初心者が混乱しているときは大抵教え方が悪い
名言だな。こんどから>>1に追加してほしいくらいだ。

303 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 20:06:36 ]
本人が言うから名言なんであって
もし質問者側からそんなこと言われたらたまったもんじゃないな

304 名前:チンパンジー愛ちゃん [2009/08/19(水) 21:29:48 ]
教える側は常に心の奥底で思っていないといけないことですよ。
独りよがりの教えほど迷惑なものはありませんから。

305 名前:191 [2009/08/19(水) 22:21:17 ]
すまん、俺が変な野郎(>>192)を呼び込んでしまったようだ orz...
あとは俺に任せてくれ。

306 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 22:30:23 ]
どっちもサルに見えるのだが



307 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 03:35:31 ]
逆引きRuby誰か書き足してくれ

308 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 07:19:18 ]
>>307
どっちの逆引き?

309 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 08:08:59 ]
とりあえず、逆引きRubyという話題を振る時は、
どちらの逆引きか、逆引きの方か、逆引きの方かはっきり囲うな?

310 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 08:12:14 ]
日本語でおk

311 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 08:58:41 ]
レシピブック初版にはお世話になったけど
最近いろいろあるから次買うとき迷うな

>>309
書き足すっていうぐらいだからWikiのほうだろう

312 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 13:38:05 ]
Emacs の ruby-mode で =begin と =end がインデントされてたいそう困ってるんだけど
これって困ってる人いないのかな

313 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 14:06:37 ]
>>304
そこまで自覚があるなら、さっさと消えろよ

314 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 17:19:03 ]
>>312
あー,それ確か俺も愕然とした記憶が。
「=begin, =end は使わないことにする」で解決!

315 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 10:58:26 ]
シリアルポートからデータをgetsで読んでます。
データは一行ずつ出力されるので問題は生じません。
しかし、特殊な設定情報だけは複数行出力で、行数が不定です。
このような何行か分からない出力を受け取るにはどのような手法が適しているでしょうか?

316 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 11:09:32 ]
行とい考え方を無くせばいい
ただの改行文字だろ



317 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 11:10:20 ]
設定情報用の一時変数を確保しておいて、
設定情報1行目だったら通常の処理飛ばしてそこに溜めるようにすれば?

318 名前:315 mailto:sage [2009/08/21(金) 11:26:15 ]
ありがとうございます。
とりあえず、一行ずつ << 演算子で設定情報用の配列の末尾に追加していくことにしました。
EOFがないので終了条件をどうするか悩んでみます。

319 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 11:40:13 ]
>>318
EOFって全体の?
終了データが流れてこないとかpingみたいな定期送信がないなら
手動停止させるのが普通だと思う

可変長データなのにサイズ情報も終端情報もないのだとしたら
次の通常のデータが送られてきた時にバッファ吐き出して設定処理するとか

320 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 11:43:57 ]
そりゃデータフォーマットがわからにゃなんとも

321 名前:315 mailto:sage [2009/08/21(金) 11:58:57 ]
>>319
全てのデータを受信できるまで、timeoutモジュールを使って少し待ってからgetsの待ちを解除してみます。

322 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 13:43:36 ]
自作のスクリプトがあります
libディレクトリを作ってファイル分けしてみたら10ファイルくらいになりました

んで、これを日常で使いたいと思います
「開発ディレクトリ」と「実行ディレクトリ」を分けなければなりません
(動作しない状態であることが多い開発中のスクリプトをcronなどで触らせたくない)
どこか適当なディレクトリに「インストール」してバージョンを維持するのがいいと思ってます

最初は rubygem パッケージにすることを考えましたが、
require 'rubygems' で1秒近くかかる環境なので正直あまりやりたくありません
(たぶん、スクリプト本体の実行時間のほうが短い)
これ以外になにかてきとーな方法はありませんか?

323 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 13:52:21 ]
>>322
subversionあたり使うとか

324 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 13:59:42 ]
>>322
rake install で超適当なディレクトリに超適当に上書きするような rake スクリプトを書く
要は実行可能なときにファイルをコピーしておきたいってことだろ
ファイルをコピーするという行為だけ rake で書け

バージョン戻すという行為が簡単にできないのだけが難点だが、
まあ実行用ディレクトリを適当に圧縮でもしてバックアップしとけ

325 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 15:25:22 ]
質問です。

ary = [5, 2, 3, 3, 3, 4, 2, 2]
のような配列を
[5, 2, 3, 4, 2]
のようにする、つまり、「隣り合った」同値の要素を
uniqにまとめた配列を得る方法を求めています。

ary = [5, 2, 3, 3, 3, 4, 2, 2]
prev = nil
result = []
ary.each do |n|
result << n if prev != n
prev = n
end
result #=> [5, 2, 3, 4, 2]

とするより、良い方法はないものでしょうか?

これに限らず、配列処理で直前(または 直後)の要素を参照しながら
進めていくスマートな方法があれば教えていただきたいのですが・・・。

326 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 15:32:32 ]
prev = nil
result = ary.select{|v| v == prev ? false : (prev = v) }



327 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 15:33:18 ]
前後を参照するほうが注目だったか、スマン出直してくる

328 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 15:33:53 ]
Enumerable#each_cons

329 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 15:51:43 ]
>>326
selectをこういうふうに使えるのは知りませんでした。
関数型言語みたいで格好いいなあ。

>>328
こういうのを探していました。ありがとうございます。

330 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 20:16:48 ]
デバッガ使ってる?

使いこなせてないからかもしれないけども,まだ自分にはpとかppで十分かな.
どんなレベルからデバッガつかってんの?

331 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 21:20:08 ]
みんななにで開発してるんだろう?
IDE?エディタ+コンソール?

332 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 22:31:20 ]
>>331
エディタ+コンソール派
軽くて良いIDEがあったら、そっちに乗り換えるつもり

333 名前:デフォルトの名無しさん [2009/08/21(金) 23:22:01 ]
デバッガ使ってもバグ直ってないニダ。
謝罪と賠償ニダ。

334 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 23:24:21 ]
RDEがもっと使いやすかったらいいのにな・・・

335 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 00:53:03 ]
netbeansで書いて、家ではemacs+putty

336 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 02:00:36 ]
EclispeからNetbeansに行ってemacsかな。日曜PGなんで結局自分が良く使うエディタがいいや。



337 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 02:03:57 ]
Aptana+Eclispe
はじめたばっかりですけど

338 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 08:22:51 ]
ソースコード上でデバッグできるのは?
NetBeansがいいんかな?

339 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 08:29:08 ]
正直どれもイマイチ
言語仕様的問題だとは思うんだが

340 名前:デフォルトの名無しさん [2009/08/22(土) 09:44:00 ]
>325

result = ary.zip([nil]+ary).select{|x,y| x!=y}.map(&:first)

341 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 09:53:39 ]
>>340
each_consが提示された時点で問題外
オナニー以下

342 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 13:45:35 ]
色んなやり方が紹介されるのは,初心者スレでは意味があるんじゃないかな。
悪例だったらダメだけど,>>340 は「へーこういうのもあるんだ」的な
例にもなってると思うし。

343 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 15:15:49 ]
data = ハッシュまたは適当な格納系クラス
Target.new(param).hoge(data)
data #<= Target に関する情報が追加されている

という処理をします
hoge というメソッドにわかりやすい名前を付けたいのですが、なんかいい案ありませんか
凝ってもアレだし update とか register でいいですかね

344 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 15:17:19 ]
>>342
普通に悪例だと思うが

345 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 15:23:30 ]
ようそが nil いっこだけのはいれつがかいてあるじてんでかっこわるくてあたまぐるんぐるんぐるんします

346 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 16:12:11 ]
>>343
Hoge#dup_to(data) とか
updateならHashにならってHoge#update(Target)にすべき
後は
hoge = Target.new(param).to_hoge
とか
hoge = Hoge.new(Target.new(param))



347 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 16:27:30 ]
>>343
「自分の内容で引数のデータオブジェクト(自分とは別構成)を更新する」というメソッドに
update は似合わない
Ruby の update は自分と引数が同類であるべき
引数に現在のインスタンス変数の内容を適宜コピー、というメソッドは…なんだろうね

動作としてはこんなんだろ

h = Hash.new
Foo.hoge(h)
Bar.hoge(h)
Baz.hoge(h)
p h

で、h が {'foo' => …, 'bar' => …, 'baz' => …} になったり
{111 => {:foo => …, :bar=> …, :baz => …}, 222 => {:foo => …, :bar=> …, :baz => …}, ...} になるって奴

348 名前:346 mailto:sage [2009/08/22(土) 17:09:40 ]
間違えた
×Hoge#dup_to(data)
○Target#dup_to_(data)

dup_to(data)じゃなくてdup(type=nil)にして
typeがクラスならデータ格納したインスタンスを生成、
インスタンスならそれに情報をコピー、nilならsuperとかどうだろう

349 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 18:04:05 ]
きめえ
ObjectやModuleの基本メソッドは上書きすんな

350 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 18:08:08 ]
dupの存在を知らないだけかもしれないじゃないか
irb> a = []
irb> b = a.dup
irb> a << 1
irb> p b
[]


351 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 18:35:05 ]
>>349
> ObjectやModuleの基本メソッドは上書きすんな
なんで?
inspectとか==とかto_*とか普通上書きするだろ、最たるものはinitialize
それにdupに引数与えなければ以前と同じ動作をするんだから互換性も問題無い

352 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 18:51:28 ]
>>343
自分なら Target.new(param).hoge は Hash あたりを吐き出すようにして
data側が自分で取り込むようにする
たとえばdata = {} なら data.update( Target.new(param).hoge )

だから名前は、ある種のアクセサとして吐き出すデータに見合った名前か
主要なデータをまるっと吐くなら to_h とか

>>351
機能はそのままに、そのオブジェクトに見合うよう上書きするのと
機能自体を拡張するという違いがあるからなぁ
ダメだと思わないけど積極的にやるのも微妙な感じ

353 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 19:14:29 ]
Ruby Best Practicesは良い本ですか?

354 名前:デフォルトの名無しさん [2009/08/22(土) 20:24:17 ]
Ruby Best Practicesは(どうでも)良い本です。

355 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 20:35:37 ]
初歩的な質問ですいません。
Linuxで、シェル(bash cshなど)よりrubyの方が優れているところは何でしょうか?

356 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 20:42:46 ]
>>355
シェルスクリプトでめんどくさい処理も簡潔に書ける

めんどくさいと思った経験が無いならシェルスクリプト使っとけ



357 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 20:48:58 ]
>>356
すいません、シェルは結構使うんですが、Rubyは勉強しだしたばっかりであまりよくわかってないんです。
なので自分で比較ができないんですが、具体的にはどんなところがRuby優位なのでしょうか?

358 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 21:01:29 ]
例えば指定したディレクトリとそのサブディレクトリを巡回して
ファイルのサイズを集計してどのフォルダが何%消費しているかを
大きい順にソートして上位50個表示。
なんてユーティリティを書くと差が出てくるかな。

359 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 21:01:56 ]
>>357
アプリ一つ書いてみればわかるんじゃないだろうか。
WEBアプリなら敷居が低いから、とりあえず掲示板でも。

また例えば、CSVのパースとかしたくなったときに、シェルスクリプトで
どうやったらいいのかちょっとすぐには思いつかない。

360 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 21:06:49 ]
シェルスクリプトってものがどういうものかっていう知識不足

だからどんなレスしても、理解できない

361 名前:355 mailto:sage [2009/08/22(土) 21:14:54 ]
シェルでもcpとかrmしかつかってないんで、
難しいことわかりません。

理解できませんので失礼します。

362 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 21:37:01 ]
>>358
du -h | sort で用が足りそうな気もするな

363 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 22:54:42 ]
CSV処理やらディレクトリ走査はシェルスクリプトの得意分野じゃねえの。
シェルスクリプトを覚える必要がないならrubyで良いと思うけども。

364 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 01:53:06 ]
多次元配列の重複要素削除の仕方がわかりません

Cでいうところの、
a[3][5] = {[1,2,3,4,a], [2,3,4,5,b], [2,3,4,5,a]}

って、あったら、aが重複してるので、
[1,2,3,4,a], [2,3,4,5,b]
だけにしたい

a.uniq{|x| x[4]}

ってのは間違い??




365 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 03:01:15 ]
>>364
Array#uniqはブロックを取らないはず

a[x][4]の値が既出の配列は捨てるってことだよね?
a = [[1,2,3,4,"a"], [2,3,4,5,"b"], [2,3,4,5,"a"]]
tmp = {}
a.select{|v| tmp[v[4]] ? false : (tmp[v[4]] = true) }

どこかで見たと思ったら>>326と似てた

366 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 04:55:14 ]
>>364
多次元配列など存在しません
ネストした配列とお呼び下さい

で、まあ、ネストしただけの配列なので普通にイテレーションして
exists = Array.new
a.delete_if{|arr| if exists.include?(arr[4]) then false else exists << arr[4]; true end}
とかすればいいんじゃね
Rubyでコレクションをぐるぐるすること厭っちゃダメ



367 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 05:22:40 ]
【レス抽出】
対象スレ:Ruby 初心者スレッド Part 30
キーワード:select

抽出レス数:11

これ全部同じ奴なんだろうな、とか思う

368 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 05:47:02 ]
select が条件全体抽出なのは混乱する、という人は少なくなさそうだな

collect
select
reject
detect
inject



map
find_all
reject
find
inject

なら後者のほうがまだマシにも思えるが、あ〜、でもどうだろう
このへんは出身言語にもよるんだろうけどさ
find/map 派と detect/collect 派は結構昔から揉めてる気がする
find と find_all が紛らわしいとか、そんなんセレクトとデテクトのほうが紛らわしいわボケとか

あと、古い ActiveRecord は find_all が上書きされるから新しいの入れて ActiveRecord#all で書け

369 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 12:23:18 ]
>>364
> a.uniq{|x| x[4]}
> ってのは間違い??

1.9 ならそれで動くよ。

370 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 13:04:54 ]
1.8はそろそろ分離してスレ立ててほしいな

【まだまだ】Ruby1.8.x 初心者スレ【現役】

とか

371 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 13:12:45 ]
>>370
1年半で200レスしか行かないトピックスを1ヶ月で1000レス消費するスレから分離要求とか片腹痛いわー
そういうのは1.9スレ繁盛させてから言え

372 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 13:20:00 ]
時代についていけない老害め

373 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 13:23:01 ]
え、板を利用させてもらってる分際で何言ってんの
既存スレの利用もできないのに新スレとか何様

374 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 13:34:00 ]
いまだに1.8.xにしがみつくのはRuby界の足をひっぱってるってことに気がつけ

375 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 13:34:04 ]
夏の思い出作りなんだろ
自分の提案であの2ちゃんねるにスレが立つんだぜ
俺なら射精するね

376 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 13:35:53 ]
2chが世界の全てな人には何を言っても無駄
2chのスレ立てとRuby界の関係とかもうわけわからんし



377 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 13:38:49 ]
>>374
One-Click Installerの1.9版すら出てないのに何を言ってるの

378 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 14:05:31 ]
夏の思い出うんぬんって流行ってるのか?
前にも薬が切れたみたいなやつが言ってた気がするが

379 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 14:22:02 ]
お前ら隔離スレに帰ってくれ

380 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 20:25:41 ]
>>378
というか夏の思い出作りが流行ってる。

381 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 20:27:52 ]
バージョンの指定をするスレの方がレスが少ないのは当然だろ

382 名前:デフォルトの名無しさん [2009/08/23(日) 22:29:36 ]
Rubyでopensslを利用して共通鍵暗号を使う場合、以下のような
コードを書きますが、pkcs5_keyivgenを使うのはセキュリティ上
良くないのですか?

require 'openssl'

a123 = "0123456789"
pass = "hogehoge"
enc = OpenSSL::Cipher::DES.new
enc.encrypt
enc.pkcs5_keyivgen(pass) # <= この記述がよろしくない?
a = enc.update(a123)
b = enc.final
s = a + b


こんなページ↓を見つけたので、気になりました。
ttp://wp.serpere.info/archives/422

Rubyのソースコード(ossl_cipher.c)には、以下の記載がありますが、
詳しい意味が分かりません。

* WARNING: This method is only PKCS5 v1.5 compliant when using RC2, RC4-40, or DES
* with MD5 or SHA1. Using anything else (like AES) will generate the key/iv using an
* OpenSSL specific method. Use a PKCS5 v2 key generation method instead.


ソースコードの注釈の意味と、pkcs5_keyivgenを使わずに適切に
記述する方法を教えてください。

383 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 15:48:42 ]
>>382
初心者スレの内容を超えているようにおもうけど、頑張ってみよう。

コメントを翻訳すると、こんな感じでしょうか。暗号についての知識がないのでよくわからないけど。

警告: このメソッドは、RC2やRC4-40を使う場合、あるいはDESをMD5やSHA1とともに使う場合には、PKCS5 v1.5 のみに準拠しています。
他のもの(AESとか)を使うと、OpenSSL固有のメソッドを使ってkey/ivを生成します。
かわりにPKCS5 v2 キー生成メソッドを使ってください。


・・・うん、やっぱわからん。メーリングリストで聞いてみることをお勧めします。


384 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 16:39:50 ]
すいません。unicodeの文字列を数値に変換してコードに
埋め込んだり複合したりする方法を探しています。Ruby以外での方法は

ttp://0xcc.net/blog/archives/000183.html

にまとめられているので、Rubyでも可能と思うのですが。

385 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 16:56:36 ]
irb> puts "あいう".unpack("U*").map{|e| sprintf("\\u%x", e)}.join
\u3042\u3044\u3046

正直、ユニバーサルキャラクタ名に一発で変換できないのは怒っていいと思う

386 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 16:57:34 ]
1.8にはない。
[ 0x3042 ].pack('U')
#=> "あ"

1.9では
"¥u3042"
#=> "あ"



387 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 17:07:23 ]
inspect の返り値をそのまま "" で貼ると、
ファイル自体の文字コードによらずにUTF-8文字列になる
ただし 1.8 系列限定

irb> puts "あいう".toutf8.inspect
"\343\201\202\343\201\204\343\201\206"

ruby -Ke
require 'nkf'
p NKF.guess("あいう") == NKF::EUC #=> true
p NKF.guess("\343\201\202\343\201\204\343\201\206") == NKF::UTF8 #=> true


388 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 17:25:53 ]
url 文字列を new に渡すとなんか便利な追加データを搭載した MyURL オブジェクトが返るクラスがあります

MyURL.new(url)

この url が MyURL クラスのオブジェクトだった場合、何もせずにその url 自体を返して欲しいです

389 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 17:30:12 ]
>>388
Ruby ではそーゆー芸はできません
initialize 内で self を置き換えることができません

class MyURL
 def initialize(url)
  …
 end
 def self.build(url)
  if url.kind_of?(MyURL) then
   return url
  else
   self.class.new(url)
  end
 end
end

my = MyURL.build(url)

とか運用で回避します

390 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 17:32:46 ]
newを再定義すればいいんじゃないの?


391 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 19:08:18 ]
def self.new(url)
return url if url.is_a?(MyURL)
myurl = allocate
myurl.instance_eval { initialize(url) }
myurl
end

is_a? の部分は respond_to? MyURL固有のメソッド とかの方がいいかも

392 名前:203 mailto:sage [2009/08/24(月) 20:16:26 ]
また,質問です.行列のようになった方がみやすいと思って
>>222さんのものをつかって
require 'pp'
ary = %w(w1 w2 w3 w4 w2 w3 w1 w1 w5 w2 w3 w4)
col = %w (w1 w2 w3)
zero = ary.uniq.inject(Hash.new){|h,w| h[w] = 0 ; h }
window = 6
hout = Hash.new
ary.each_with_index do |key,i|
(hout[key] = zero.dup) unless hout.key?(key)
ary[i+1,window].select{|e| e != key }.each {|word| hout[key][word] += 1 }
end
pp hout

このようにしました.
そして,colを行列の項目のようにして

{"w1"=>{"w1"=>0, "w2"=>4, "w3"=>4},
"w2"=>{"w1"=>4, "w2"=>0, "w3"=>5},
"w3"=>{"w1"=>4, "w2"=>2, "w3"=>0}}

という出力が欲しいのですが,どのように書き換えればいいか分かりません.
前回の1つ1つは理解できたと思っていましたができませんでした・・・・.すいません.

393 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 21:11:33 ]
だから処理を逐次書けとあれほど
わからないうちからまとめたって変更できないんだから

394 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 21:46:03 ]
>>392
メソッドチェーンとか駆使しないでもっと愚直にやれば?
それこそ1行1行 p で結果を確認しながら積み上げていく感じでさ

395 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 21:47:26 ]
>>389
真顔で嘘を言うなよなw

396 名前:デフォルトの名無しさん [2009/08/24(月) 22:25:35 ]
>>392を実行すると
{"w1"=>{"w1"=>0, "w2"=>4, "w3"=>4, "w4"=>3, "w5"=>2},
"w2"=>{"w1"=>4, "w2"=>0, "w3"=>5, "w4"=>2, "w5"=>1},
"w3"=>{"w1"=>4, "w2"=>2, "w3"=>0, "w4"=>3, "w5"=>2},
"w4"=>{"w1"=>2, "w2"=>2, "w3"=>1, "w4"=>0, "w5"=>1},
"w5"=>{"w1"=>0, "w2"=>1, "w3"=>1, "w4"=>1, "w5"=>0}}
ってなるんだけど、これが欲しい出力なんじゃないの?
違うんなら、質問をもっとわかりやすく書いて。



397 名前:デフォルトの名無しさん [2009/08/24(月) 22:26:50 ]
ruby -vとやったときの出力を以下のように貼ってね。
ruby -v ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]

398 名前:デフォルトの名無しさん [2009/08/24(月) 22:31:47 ]
ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]

399 名前:デフォルトの名無しさん [2009/08/24(月) 22:34:08 ]
1.8

wwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwww

400 名前:203 mailto:sage [2009/08/24(月) 23:08:44 ]
>>396
>>392の実行結果ではなくて
{"w1"=>{"w1"=>0, "w2"=>4, "w3"=>4},
"w2"=>{"w1"=>4, "w2"=>0, "w3"=>5},
"w3"=>{"w1"=>4, "w2"=>2, "w3"=>0}}
となってほしいです。
col = %w(w1 w2 w3) がcol = %w(w7 w8 w9)だったら
{"w7"=>{"w7"=>0, "w8"=>0, "w9"=>0},
"w8"=>{"w7"=>0, "w8"=>0, "w9"=>0},
"w9"=>{"w7"=>0, "w8"=>0, "w9"=>0}} となって欲しいです。
colの中身の配列がaryの中にあるかをwindowでずらしながら確認するのです。

とりあえずバージョンは
ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-linux]です。


401 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 00:07:44 ]
>>400
"w?"=>0 以外の結果は>>222のhoutに入ってるんだから
そこからcolに一致するデータだけ抜き出せばいいじゃん

402 名前:203 mailto:sage [2009/08/25(火) 01:46:21 ]
>>401
思いつく限りしてみたのですが・・・
require 'pp'
ary = %w(w1 w2 w3 w4 w2 w3 w1 w1 w5 w2 w3 w4)
col = %w(w1 w2 w3 w9)
zero = ary.uniq.inject(Hash.new){|h,w| h[w] = 0 ; h }
window = 6
hout = Hash.new
ary.each_with_index do |key,i|
(hout[key] = zero.dup) unless hout.key?(key)
ary[i+1,window].select{ |e| e != key }.each { |word| hout[key][word] += 1 }
end
pp hout
ar=Hash.new;ar.default=0;ar= hout.values[0].values_at(*col)
p ar
hout.each_pair do |k,v|
if col.include?(k)
puts "#{k}\t#{v.values_at(*col)}"
end
end

# >> {"w1"=>{"w1"=>0, "w2"=>4, "w3"=>4, "w4"=>3, "w5"=>2},
# >> "w2"=>{"w1"=>4, "w2"=>0, "w3"=>5, "w4"=>2, "w5"=>1},
# >> "w3"=>{"w1"=>4, "w2"=>2, "w3"=>0, "w4"=>3, "w5"=>2},
# >> "w4"=>{"w1"=>2, "w2"=>2, "w3"=>1, "w4"=>0, "w5"=>1},
# >> "w5"=>{"w1"=>0, "w2"=>1, "w3"=>1, "w4"=>1, "w5"=>0}}
# >> ["w1", "w2"]
# >> [0, 4, 4, nil]
# >> w1 044
# >> w2 405
# >> w3 420
arにkeyが存在しなければnilではなくて0にしたいのですが何かどうすればいいでしょうか?

403 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 02:45:24 ]
>>402のコードの方向性は間違ってない
特殊な用件にスマートな解答なんてそうそう無いよ
ないなら自分で作るしか無いんだよ
この行が何やってるか理解すればnilを0にする(?)方法もわかるかも
zero = ary.uniq.inject(Hash.new){|h,w| h[w] = 0 ; h }

404 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 02:52:01 ]
>>391
> myurl = allocate
> myurl.instance_eval { initialize(url) }
> myurl
の部分はsuperだけでいい

405 名前:203 mailto:sage [2009/08/25(火) 04:17:16 ]
>>403
injectが自分にはまだ早いのでeachでやってみました。
ary = %w(w1 w2 w3 w4 w2 w3 w1 w1 w5 w2 w3 w4)
col = %w(w1 w2 w3 w9)
non = col - ary
〜〜
zero =Hash.new;ary.uniq.each { |v| zero[v]=0}
czero =Hash.new ;col.uniq.each { |v| czero[v]=0}
p zero;p czero
p zero.merge!(czero)
〜〜
ary.each_with_index do |key,i|
(hout[key] = zero.dup) unless hout.key?(key)
ary[i+1,window].select{ |e| e != key }.each { |word| hout[key][word] += 1 }
end
non.each_with_index do |key,i|
(hout[key] = zero.dup) unless hout.key?(key)
ary[i+1,window].select{ |e| e != key }.each { |word| hout[key][word] =0 }
end
pp hout

かなりお行儀が悪いですが、自分の欲しいものができそうなのでこれから加工してみます。
ありがとうございました。
・・・・また、来るかもしれませんが。そのときは、よろしくお願いしますm(_ _)m

406 名前:デフォルトの名無しさん [2009/08/25(火) 08:33:15 ]
メソッドに与えられたブロックは、仮引数の最後に & を付けると
手続きオブジェクトとして得られるらしいけど、

def foo(&block)
 ...
end

このとき「if block_given?」と「if block」は等価なの?
前者の式の方をよく目にするけど、どう違うの??




407 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 09:32:42 ]
def で定義してるぶんにはなんも変わらんので素直に block_given? 使っとけ

408 名前:名無し学生 [2009/08/25(火) 10:35:40 ]
Visual Basic の課題で困っております。
誰かお答えください。本当に助けてください。

1.Visual Basicの関数で数値を文字に直すCStr()とStr()の違いについて

2.戻り値の違いが確認できる方法を考え、戻り値の違いについて実際に確認し、
  その確認方法と違いを具体的に述べよ。
注意:実際にやったことと、確認した違いを簡潔かつ具体的に書くこと。

3.下記の計算結果などから、Visual Basicで計算できる数値の桁数について考察をまとめ、
  何故そのような制限があるかについて理由を答えよ
  1) 48 x 100 - 81
  2) 12 ÷ 9.3 x 247
  3) 0.2 - 12 ÷ 69
  4) -12 ÷ 100 + 100

409 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 10:38:32 ]
VBなら「自分が興味のあるソフトを作りなさい」くらいの課題を出せよ
どこの学校だ?

410 名前:デフォルトの名無しさん [2009/08/25(火) 10:44:04 ]
そのような曖昧なテーマの課題を出す学校もどうかと思うが。

411 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 10:48:19 ]
>>409-410
他のスレでもマルチポストしてる奴をいちいち相手にするな。

412 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 11:22:05 ]
これってRuby勉強の手助けになりますか?
それはさておき、読んで損のない本でしょうか?

「まつもとゆきひろ コードの世界」は全プログラマ必読の名著
v.japan.cnet.com/blog/shimizu/2009/07/03/entry_27023475/

413 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 11:26:27 ]
> これってRuby勉強の手助けになりますか?
いや特には
> それはさておき、読んで損のない本でしょうか?
お金の余ってる人向け
お金が余ってるなら読んでもよい
お金が余ってないならもっと他に読む本があるはず

414 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 11:37:32 ]
>>413
そうですか。
今回はパスしておきます。

415 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 13:49:37 ]
どんだけ金ないんだよ

416 名前:デフォルトの名無しさん [2009/08/25(火) 14:09:29 ]
ここは学生スレ



417 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 15:47:13 ]
s = Path::changeext($0, ".cfg")
t = Path.new(s)
t.changeext(".xml") #==> Path::changeext(s, ".xml")

みたいな使い方をしたいんですけど
クラスメソッドとインスタンスメソッドのoverloadなんて無理?

# Pathはただの例です

418 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 15:57:06 ]
インスタンスメソッドの中でクラスメソッドを呼ぶとかそういう話ではなく?

class Path
 def change_ext(sfx)
  return self.class.change_ext(@str, sfx)
 end
 def self.change_ext(str, sfx)
  …
 end
end


419 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 19:00:25 ]
>>417
Path::changeext() と t.changeext() はそれぞれ別のメソッドが呼ばれます。

なおその例で「overload」というのは誤解を招くので使わない方がいいです。
質問するなら、
「クラスメソッドとインスタンスメソッドで同じメソッド名を使うことってできる?」
ぐらいにしておけば、overloadという単語を使わなくても済んだでしょう。


420 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 19:30:18 ]
てか、クラスメソッドの起動で :: を使う人は Ruby ではまずいない
Ruby では :: の右に来るのは定数で、 . の右に来るのはメソッドだから

Ruby ではクラスも定数として格納されてるから、

irb> CONST = 1
irb> CONST = 2
 (irb)2: warning: already initialized constant CONST
irb> class Foo; end
irb> Foo = 2
 (irb):4: warning: already initialized constant Foo

ネストしたクラスは Foo::Bar::Baz と :: で連結するし、
あるクラス Hoge の定数 CONST は :: で連結して Hoge::CONST と綴る

Ruby ではインスタンスメソッドは一般クラスから作られたオブジェクトに属するメソッドだから、
特定のクラスのオブジェクトというかインスタンス s に属するインスタンスメソッド mes は
特定のクラスのインスタンス s に . でメソッドを繋げて s.mes と書くし、
Ruby では スクリプト中に存在するアクセス可能なクラスは Class(または Module)クラスのインスタンスだから、

irb> p "str".class
String
irb> p String.class
Class

クラス S に属するメソッドつまりクラスメソッド moge は
Class クラスのインスタンス S に . でメソッドを繋げて S.moge と表現する

421 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 21:18:28 ]
ちょっとはじめたばっかりでしつもんなんですけど
Array.newと[]やHash.newと{}のどっちがいいとかありますか?
始めたばっかりでくせをつけておくなら今のうちかなとおもいましたので
こうやるやるべきとかのってるページとかありますか?

422 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 21:28:09 ]
機能的には同じなので好きなほう使え

[] や {} のリテラル形式は短い
短いということはそれだけで大きな価値がある
ただし hoge#[] メソッド や ブロック {} と一瞬区別がつけにくいことがありうる
一瞬でも読み下しに詰まる可能性があるということはそれだけでマイナスだ

好きなほう使え

423 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 21:51:25 ]
おいおい同じじゃないだろ
Hash.new、Array.newはデフォルト値やサイズを設定することができる

オレ的には[]{}を基本に使って、
デフォルト値やサイズを指定したい場合はnewを使うのがおすすめかな

424 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 21:54:24 ]
そんなこと言ったらリテラルな時点で別物だ
そういう区別をして欲しいわけではないだろう

425 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:01:13 ]
機能的な違いのあるなしと一緒にするな

426 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:01:17 ]
別に {} でもデフォルト値は設定できるよ

h = {}
h.default = 0
p h[:a] #=> 0

マニュアルに書いてあるようなことを知りたいんじゃないと思われ



427 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 22:14:48 ]
h.default←別のメソッド引っ張り出してきてどうする

質問者の潜在的なニーズがなんであれ間違いを教えるのはよくない
両者は「同じ」と書いてあったから「違いがある」と訂正しただけ
それ以上の意味はない

428 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 08:28:49 ]
RubyではHTMLのエスケープってどこでやるべき?

429 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 08:38:43 ]
データ出力時

ただしこれには条件がある
「データ出力者全員が自力でエスケープをしなければならないと認識していること」
これが未来に守られる見込みが全くないのなら、
現在のデータ保管者が親代わりにエスケープするのも致し方ない

430 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 09:08:39 ]
>>428
template

431 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 10:09:57 ]
入力時でないことは確か

432 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 11:42:17 ]
>>420
おまえの文章長いよ
もっと要点を絞って簡潔に書こうぜ

433 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 12:43:55 ]
>>420を蒸し返すと、

a.some_method(1, "str")
a::some_method(1, "str")

上の2つのスタイルのうち、いずれを使うかは趣味の問題です。
ただしクラスメソッドを呼ぶ場合を除いては第1のスタイルが主流です。
筆者はクラスメソッドに対しても一貫して第1のスタイルを用います。

- 初めてのRubyより -

わざわざリリースマネージャが「〜を除いては」と書くくらいだから、
「まずいない」ということはないだろう。

434 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 12:56:37 ]
実際の観測として「まずいない」と思うが…
そんな大量にコード見てるわけじゃないが、:: でメソッド呼んだ人は今年一度も見てないぞ
>>417が初めてな気がする

435 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 13:10:14 ]
大文字で始まるメソッドは、括弧を省略すると::で呼び出せない。
そういう細かい条件を考えると、メソッド呼び出しは.で統一するのが無難。

436 名前:デフォルトの名無しさん [2009/08/26(水) 18:45:58 ]
すいませんが、質問させて頂きます。
xmpfilterを使いたいのですが、どうも上手く行きません。
OSはWindowsVista , ruby1.8.6です。

gem install rcodetools  でインストールした後

-------------test.rb--
#! ruby -Ks
p 2+3 # =>
--------------------

上記のファイルに対して

xmpfilter test.rb

を実行すると

-e:1: unterminated string meets end of file
-e:1: warning: useless use of a literal in void context

というエラーが出て、実行してくれません。
空のファイルに対しても、どれも同じエラーが出ます。
どうすれば良いかを教えて下さい。




437 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 19:18:45 ]
2+3 の後ろに全角空白が入ってるんだけどこれは意図したものかな

438 名前:436 [2009/08/26(水) 19:24:51 ]
>>437
すいません。全角空白は私の不注意でした。
しかし、これを削っても同じエラーが出てしまいます。

ちなみに、xmpfilterを通さなければtest.rbはきちんと実行することが出来ます。


439 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 19:34:46 ]
自動生成された \bin\xmpfilter がまずいような気もする
もしかして cygwin か?

440 名前:436 [2009/08/26(水) 19:51:21 ]
>>439
いえ、cygwinではなくコマンドプロンプトです。
rcodetoolsが自動生成するファイルがどこにあるのか分からないのですが、
どこに作成するのか教えて頂けないでしょうか?


441 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 20:29:59 ]
>>440
gem contents GEM名
あとバージョンはruby -v結果のコピペで
それとたぶんOneClickInstallerだと思うんだけどそれも明記するとありがたい

442 名前:デフォルトの名無しさん [2009/08/26(水) 21:03:14 ]
>>441
申し訳ありません。gem contents rcodetoolsとするとファイル構成は出てくるのですが
そこからどこに一時ファイルが作られるのか私には分かりませんでした。

rubyのバージョンは
ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-mswin32] です。
www.garbagecollect.jp/ruby/mswin32/ja/download/release.html
↑からダウンロードしてきました。



443 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 23:59:43 ]
ルビーでGUIは作れるのでしょうか?

444 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 00:02:08 ]
www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=%E3%83%AB%E3%83%93%E3%83%BC%E3%81%A7GUI%E3%81%AF%E4%BD%9C%E3%82%8C%E3%82%8B%E3%81%AE%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B%EF%BC%9F%0D%0A&num=50

445 名前:436 [2009/08/27(木) 00:08:38 ]
すいません、多分解決したみたいです。
ruby 1.8.7 , ruby1.9.1 とverを上げてxmpfilterを実行してみたところ無事に実行出来ました。

お騒がせして申し訳ありませんでした。
返信をして下さった方、どうもありがとうございました。


446 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 21:17:22 ]
データを突っ込んで行ってそれがあるかないかを高速に判断する場合
ハッシュがベストですか?

list["a"] = true

if list["a"] then ...

で動くんですけどtrueってデータもペアで格納されるのがなんとなく無駄な飢餓



447 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 21:50:35 ]
とりあえず Hash 使えということになってる
Hash で問題がある場合にのみ他のめんどくさい手段を検討する

あと true はいつどこで呼んでもオブジェクト ID が 2 で固定なので無駄も何もねえよ

448 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 09:53:51 ]
Hashでいいと思う
標準添付のSet(集合)なんてHashで実装されてるし。

449 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 11:52:17 ]
こっち↓と

if point > 0
 result['WIN'] += 1
elsif point < 0
 result['LOSE]' += 1
else
 result['DRAW'] += 1
end

こっち↓

win_or_lose = point > 0 ? 'WIN'  \
       : point < 0 ? 'LOSE' \
       :        'DRAW'

result[win_or_lose] += 1

どちらがいいと思いますか?

450 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 11:54:52 ]
>>449
前者。

451 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 12:10:04 ]
>>450
d

452 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 12:17:21 ]
三項演算子は好きこのんで使うものじゃないね

result = if flag then true else false end
どうしても一行で書きたい時にこれよりはマシって程度


453 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 12:35:54 ]
>>449
case
when point > 0 then result['WIN'] += 1
when point == 0 then result['DRAW'] += 1
when point < 0 then result['LOSE'] += 1
end


454 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 12:42:10 ]
前どっかで書いたが、条件演算子は便利なんだからどんどん使ってよい
そして、どんどん書き換えろ

条件演算子の中で整頓改行したり ( ) でネストしたり ; つけたりするのは禁止
条件演算子の状態に固執するのはただのアホ
条件演算子の 9 割は最終的には長い条件分岐に書き換えられてしまう
だったらプロトタイプは早くてうまくてやっすいのにしたほうがいいってもんだ

455 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 12:48:24 ]
Rubyの三項演算子の平均寿命は1日だそうな

456 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 12:49:23 ]
Rubyの場合ifが式だからifで書けばいいと思うんだけど。
可読性もそのほうが高いと思わない?



457 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 12:52:28 ]
if のほうがわかりやすそうな気がするときと、
条件演算子のほうがわかりやすそうな気がするときの
2つがあるような気がする

極めて単純な見栄えの問題
他の言語では三項演算子だけが値を返すから入れ替えが効かないけど
Rubyは動作自体は結局一緒だから
(パースの受け方は違うかもしれない)

458 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 12:55:17 ]
>>453
case文も使えるんだ。
なるほど。

459 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 13:03:54 ]
case文の意味なくないか?w

460 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 13:08:40 ]
空 case の例としてはわりと妥当だと思う
else raise の余地がないのがやや弱いがわかりやすかろう

461 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 13:13:41 ]
このへんは cond をかっちょええと思うかわかりにくくなったと思うかという話になるような気がしないでもない

462 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 13:16:27 ]
result[ case
        when point > 0 then 'WIN'
        when point == 0 then 'DRAW'
        when point < 0 then 'LOSE'
    end ] += 1

だろJK

463 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 13:17:36 ]
>>460
その空case自体に疑問
条件に重複する部分がないのを暗示してる、みたいなニュアンス?

464 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 15:30:39 ]
コードゴルファー登場↓

465 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 16:12:32 ]
わいは猿や!

466 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 16:24:10 ]
result[point / 0.0] += 1



467 名前:466 mailto:sage [2009/08/28(金) 16:25:20 ]
point = 0 のときダメだった。スマン

468 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 16:25:42 ]
result[{1=>'WIN',0=>'DRAW',-1=>'LOSE'}[point<=>0]]+=1

469 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 16:30:16 ]
result[%w[DRAW WIN LOSE][point<=>0]]+=1

470 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 18:07:31 ]
配列で要素が重複していたときに重複している要素の値が知りたいのですが
簡単な方法はないでしょうか?
[1,2,3,4,5,6,3]であれば3が知りたいです
重複は1種類が1回だけしていると仮定してかまいません


471 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 18:30:43 ]
ありそうでないんだよね、そういう機能
重複は全部消去するのが基本
「配列の構成要素を uniq で決定し、それと同じ値を持つ最初の場所を探してその要素を配列から消す」
という手順でやるとこうなる

arr = [1, 2, 3, 4, 5, 6, 3]
arr.uniq.each{|e| arr.delete_at(arr.index(e))}
p arr

[3]

これだと arr が失われてしまうので他の人の案待つか事前に複製でもしとけ

472 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 19:17:38 ]
a1 = ary.sort
a2 = a1.uniq
i = 0
a1.find_all {|v|
 if v.eql? a2[i]
  i += 1
  false
 else
  true
 end
}

またselectかと言われそうだけどこのスレでは三回目


473 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 19:28:17 ]
h = {}
p aryfind {|a| h[a] || !(h[a] = true)}


474 名前:デフォルトの名無しさん [2009/08/28(金) 19:30:14 ]
ary.find

475 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 21:12:35 ]
>>470

arr = [1,2,3,4,5,6,3]
hash = {}
hash.default = 0
arr.each {|x| hash[x] += 1 }
p hash.keys.select {|k| hash[k] > 1 }

476 名前:470 mailto:sage [2009/08/28(金) 21:24:24 ]
みなさん色々な案ありがとうございます
参考にさせてもらいます!



477 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 07:31:27 ]
One Click InstallerだかをWindowsで入れると、

 RUBYOPT=-rubygems

だかを環境変数に設定するというような余計な(親切な)ことをしてくれるわけですが、
これって、

 require "rubygems"

する必要がなくなるわけですよね?

他の環境などで同じようなこと(RUBYOPT=-rubygems) している人っていますか?
やっぱり、require "rubygems"をソース内に書いた方がいいものですかね?

478 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 09:13:38 ]
require "rubygems" は必ず書かなければならない
俺が RUBYOPT を嫌いな理由の一つ
わざわざ可搬性下げて何をしたいのか

479 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 09:45:31 ]
あとから広まって事実上の標準になる予定だったんだよ

480 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 09:51:04 ]
別に RUBYOPT は rubygems 用の機能じゃねえが、1.9 で組み込みになったから
RUBYOPT=-rubygems に関してはもう無用の長物だな

481 名前:デフォルトの名無しさん [2009/08/29(土) 10:20:24 ]
>>470
ary.group_by{|e|e}.to_a.select{|e|e[1].size>1}.map(&:first)
とか
ary.sort.each_cons(2).select{|x,y|x==y}.map(&:first).uniq
とか

482 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 10:55:34 ]
>>481
selectするならto_aはいらん
と思ったが、multiple values for a block parameter (2 for 1)とい
う警告が何度も出るのか

ary.group_by{|e|e}.select{|e,l|l.size>1}.map(&:first)


483 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 10:56:49 ]
>>478
> 俺が RUBYOPT を嫌いな理由の一つ
「江戸の仇を長崎で討つ」ってやつか

484 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 11:15:11 ]
そもそもrubygemsが嫌い

485 名前:sage [2009/08/30(日) 00:10:43 ]
同一のテーブル構造をもつデータベースAとBがあって、
データベースの内容を比較したいです。

どちらのデータベースもSQLiteのファイルです。

ActiveRecordというのを使うのが簡単そうなのですが、
可能なのでしょうか?

というのは調べてみるとActiveRecordでは、
データベースへの接続(ActiveRecord::Base.establish_connection)とか、
レコードの検索を、クラスメソッドで操作しています。

となると、上記のように同一クラスから
別々のデータベースへ接続するインスタンスを作成して、
インスタンス経由で操作するという使い方はできないように見えます。


486 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 01:08:00 ]
>>485
SQLite3::Database.new(file)で両方のデータベース開いて
テーブル毎にレコードの比較した方が楽な気がする



487 名前:sage [2009/08/30(日) 01:38:36 ]
>>486
回答ありがとうございます。

SQL書かずにActiveRecordでできたら楽勝!
と思っていたのでなんとかならないかなーと。

488 名前:名無しさん@そうだ選挙に行こう [2009/08/30(日) 07:42:50 ]
初めまして。

質問です。

今やってるプロジェクトが、以前、rubyのMVCフレームワークによって書かれました。
その開発した方が、/public_html/.htaccessで何らかの設定をしました。
今回、/public_html/manage/配下にphpのMVCフレームワークを使用して開発することに
なったのですが、/manage/.htaccessで設定しても親ディレクトリの.htaccessの影響を受けて
/manage/配下のファイルにアクセスしても、404になってしまいます。
/public_html/.htaccessの内容も分からず、なるだけ触りたくないのですが、
サブディレクトリの.htaccessで、親ディレクトリの.htaccessの影響を全く受けないようにすることは可能でしょうか。

お忙しいところ、すみません。
よろしくお願いします。

489 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 08:28:56 ]
Ruby 関係ねえ
.htaccess の書式勉強しろ

490 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 08:36:08 ]
Ruby関係ないからスレチ

> .htaccessの内容も分からず、なるだけ触りたくないのですが、

それを晒さないと。というより、せめて自分で読んでみないと。

491 名前:488 [2009/08/30(日) 10:00:38 ]
ご返信ありがとうございます。
サーバーを見てみたのですが、
/public_html/には、.htaccessがありませんでした。
ただ、404の設定がしてあるので、どこかでそのような設定がなされているものと思います。
/public_html/配下には、rubyのRailsで開発してあるようです。

/public_html/manage/には、今回のPHP開発に必要なcakephpのMVCフレームワークが設定してあります。
その.htaccessは、
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>
となっています。
例えば、domain.com/manage/css/layout.cssにアクセスした場合は、
/public_html/manage/app/webroot/css/layout.cssのファイルが読み込まれる設定にしてあります。
外のサーバー(public_htmlにrubyで設計したファイルが置いてないもの)で試したらちゃんと読み込まれていたので、/public_html/manage/配下は正しく設定してあるはずです。
しかし、domain.com/manage/css/layout.cssにアクセスすると、404が返ってきます。

/public_html/には、rubyのMVCフレームワークで設計されたファイルがたくさんあり、
私はrubyを知らないので、何かしらの設定がなっているはずなのですが、どこでどうなっているのか分かりません。

たぶん、domain.com/manage/css/layout.cssにアクセスしても、
cakephpのシステムは読み込まれず、元々のRuby Railsのシステムで処理されていると思います。
本来、domain.com/manage/ooo/xxx/ にアクセスすると処理されるのですが、
これも404に行きます。
でも、domain.com/manage/index.php/ooo/xxx/ とアクセスすると処理されます。

もし何かご存知でしたら、教えて頂けないでしょうか。
よろしくお願い致します。

492 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 11:01:02 ]
可能

493 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 11:05:08 ]
/public_html/.htaccess

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule manage\/$ manage/app/webroot/ [L]
RewriteRule manage\/(.*) manage/app/webroot/$1 [L]
</IfModule>


494 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 11:12:58 ]
てか Ruby 全く関係ねーということがわかってなお居座るのってなんなの頭悪いの

495 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 12:43:36 ]
>>494
自分で正しいことをしていると思っているイタイタイプ
周りでは陰で嫌われているのに気づかないタイプ

496 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 12:45:40 ]
自分の目的が果たされれば何をしても構わないと思ってるタイプ



497 名前:sage [2009/08/30(日) 12:54:11 ]
>>485です。

ActiveRecordで、ひとつのモデルで
複数のデータベースに接続するという
使い方ができるか、あきらめきれずにさらにググったところ、
magic_multi_connectionsというgemが見つかりました。

Magic-MultiConnections:
magicmodels.rubyforge.org/magic_multi_connections/

とはいえ、ActiveRecordが当初想定している使い方
ではないということがはっきりしました。

他にちょうどいいO/Rマッパってないですか?


498 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 12:59:58 ]
ソウダネ、IDナイカラ、ダレガダレダカサッパリワカラナイネ。

499 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 13:02:53 ]
>>497
自作のORe真っ裸ならあるけど

500 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 15:59:01 ]
>>491
すげーなー。
そのhtaccessファイルの中身の何がおかしいのかもわからない・調べられないのに、
Webアプリケーションを開発しようなんて。

恐ろしくて使いたくないぜ。

501 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 16:29:07 ]
>>497
テーブルの差異を調べるプログラム位、数十分で書けるだろ
二度と使わないかもしれないORMの調査に無駄な時間を費すの?

dbs = [file1,file2].map {|fn| SQLite3::Database.new(fn) }
dbs[0].tables.each do |table| # tablesなんてメソッドがあるとして
 results = dbs.map {|db| db.execute("select * from #{table}") }
 # results を比較
 :
end

502 名前:名無しさん@そうだ選挙に行こう [2009/08/30(日) 16:37:20 ]
SQLを書きたくないんじゃなくて
書けないの間違いだろうな。。

503 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 16:42:22 ]
クエリに文字列埋め込みステキです

504 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 16:43:44 ]
何を言ってるの
ユーザーがSQLを直接発行するだなんて悪手中の悪手じゃないか

適当にうまくやるよボタンを押すだけで内部でSQLが組み立てられて
結果のデータのみがユーザーに返ってくるというのが正しいありかただろう

505 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 16:48:36 ]
>>504
そうなんだよねえ
結局SQLを書かせなければならないことになって深く絶望したわ
なんとかならんもんかね

506 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 16:52:28 ]
> SQLite3::Database.new(file)で両方のデータベース開いて
> テーブル毎にレコードの比較した方が楽な気がする

答えでてるじゃん。
終了



507 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 17:05:53 ]
Ruby使うまでもなくdumpしてdiffとればいいんじゃない。

508 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 21:07:16 ]
なんだろう。
>>501を信じてそのままドンってやって、ガツンと応答不能になり得たりしそうなこの不安感。

初心者スレでこれはありなんだろうか。
>>501の論旨からいうならもうちょっと、丁寧に逐次的に例を出す文脈ではなかろうか。

509 名前:501 mailto:sage [2009/08/30(日) 21:41:49 ]
>>508
俺に遠慮する必要は無い、君が教えてあげてくれ

510 名前:sage [2009/08/30(日) 22:44:10 ]
>>485です。

ActiveRecordではなくてSequelというのが
良さそうというのがわかりました。

Sequel:
sequel.rubyforge.org/

こんな感じで書けます。

DBLeft = Sequel.sqlite("./left.sqlite")
left_table_foo = DBLeft[:table_foo]

DBRight = Sequel.sqlite("./right.sqlite")
right_table_foo = DBRight[:table_foo]

left_table_foo.each do |left_rec|
# right_tableのレコードと比較する
end

なんかしつこく質問してしまったみたいですみません。
でも回答してくれて助かりました。では。


511 名前:デフォルトの名無しさん [2009/08/31(月) 01:39:52 ]
WinXPで1.8.6です。
文字列を16進ダンプしたものの中に、2バイト文字が含まれているか
どうかを判定するにはどうしたら良いでしょうか?

変換コードは下記の通りです。
arr0 = dataStr.unpack("H*")[0].scan(/[0-9a-f]{2}/)
arr1= arr0.to_s + "\n"

対象のdataStrが Rec の場合 arr1 が 52,65,63 になりますが、
Rク では 52,83,4e です。この場合、真ん中の16進数の83を元に
判定するのでしょうか?


512 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 01:47:10 ]
>>511
文字コード決めないと「2バイト文字」を定義できなくないか?

513 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 02:29:10 ]
>>512
ク で 83,4e です

514 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 02:36:12 ]
zenkaku=false
arr0.each do |c|
 if c>128 do
  zenkaku=true
 end
end


515 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 03:04:38 ]
>>511
NKF.guess

516 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 03:32:36 ]
globってなんであんな低機能なまま放置されてんの?



517 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 05:32:46 ]
cgiてなんであんな低能なまま放置されてんの?

518 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 06:20:02 ]
cgiは酷いね。参考にも成らない。
いい加減、政権交代の様に入れ替えるべき。

519 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 06:29:17 ]
cgiに関しては、政権交代!ばかりいってるだけだし民主党よりヒドイw

520 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 08:48:25 ]
>>518
ヒント:安定した候補者がいない

521 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 09:06:31 ]
候補者はいるだろ。その候補者を使えるレベルまでもっていくやつがだれもいないだけで。
WEBrickのcgiライブラリのことなんだけど。

522 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 09:14:12 ]
WEBrick::Sessionがないのはある意味象徴的

523 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 09:19:35 ]
これは何度でも言うが、作るだけなら立候補は何人もいるしいくつも作品があるんだよ
作るということとメンテナンスを引き受けるということとは全く違う

スレ違いだが

524 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 09:22:23 ]
>>523
>作るだけなら立候補は何人もいるしいくつも作品があるんだよ

いくつもあるとは知らなかった。
ぜひ紹介してくれ。

525 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 09:24:01 ]
ネット関連のライブラリは魔界だ
バージョン0.3まで行かずに放置されるのばっかじゃん

526 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 09:43:34 ]
Rackがバージョン1.0になって有力候補か? と思いきや
CGIで動かすと落ちるバグがあり、しかもなかなか修正リリースが出ないというオチ



527 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 09:48:25 ]
そんなに悪いところがわかってるなら自分で作ればいいじゃん

528 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 10:01:21 ]
みんな忙しい。

529 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 10:11:30 ]
出したコードにはコミュニティ上の責任もたんといかんのでな
書きっぱで後は知らん、というような人はどの世界でもノーサンキューだ

530 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 12:13:02 ]
口だけじゃないかw

531 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 12:16:14 ]
みんな忙しい。
みんな忙しい。




みんな忙しい。

532 名前:511 mailto:sage [2009/08/31(月) 13:04:08 ]
>>512-515
有難うございます。
514さんの方法を採用しました。


533 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 13:20:40 ]
Perl や Python の CGI ライブラリを移植するのはどうだろうね

534 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 13:52:18 ]
それは新しい実に新しい

535 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 14:36:41 ]
じゃあわかりやすいところで Perl の CGI.pm から始めようぜ

536 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 14:46:39 ]
(ぐるぐるぐる)
CGI.rb ができましたー

新しいスクリプトが欲しいんじゃなくて、スクリプトを継続的にメンテナンスできる人材が欲しいのよ
新機能をガンガン盛り込む人材ってのはとりあえずはコア近辺には要らないんだ



537 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 15:00:06 ]
だれだよお前

538 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 15:13:23 ]
>>536
>新しいスクリプトが欲しいんじゃなくて、スクリプトを継続的にメンテナンスできる人材が欲しいのよ

それどうやって判断するの?人材がいたとして、そいつがおまえのいう条件を満たしているかどうかって、だれがどうやって判断するのさ?
だいたい、CGI.rbなんてtDiaryでもHikiでもつかってるんだろうが。それだけユーザ数が多いのに担当できるだけの人材がいない/いなかったのかよ?
ほんとうに人材が欲しいなら、公式にアナウンスしろよ。このライブラリのメンテな求めてます、条件はこうこうです、と公式サイトに載せればいいだろ。
ろくに求人活動もせずに人がいないだの条件はどうのこうの、言い訳がましいわ。

539 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 15:16:54 ]
スレ違いの内容で長文とか勘弁
他でやってね

540 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 15:28:35 ]
>>538
じゃあお前やれよ。

541 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 17:45:00 ]
>>511

>>514 c>128 -> c>=128

542 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 17:47:00 ]
CGI.rbの上位互換wrapperがあればいいんだよね
oreoreCGIなら作ったけど

543 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 17:58:11 ]
>>542
あんまりよくないと思う
Rackの修正リリースが出て、標準添付になれば一番いい

544 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 17:55:47 ]
配列A1, A2, A3, ... Anから要素を1個ずつ取り出した結果を網羅した配列Xを作る。
・・・やってくれるメソッドなかったっけ?

545 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 18:06:46 ]
>>544
Array#transposeのこと?

546 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 18:16:27 ]
ありがとう、調べてみました。近いけど、違う。

p [[1,2],
[3,4],
[5,6]].transpose
# => [[1, 3, 5], [2, 4, 6]]

これが下のようになってくれたら期待通りなのです。
# => [[1, 3, 5], [1, 3, 6], [1, 4, 5], [1, 4, 6], [2, 3, 5], [2, 3, 6], [2, 4, 5], [2, 4, 6]]



547 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 18:27:24 ]
data = [[1,2],[3,4],[5,6]]
p data[0].product(*data[1..-1])

548 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 18:38:41 ]
てゆーか初心者はきちんとeach使え
小手先だけだと詰まるぞ

549 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 18:58:34 ]
>>548
そうかproductか!1.8.7から入ったんですね。それっぽいキーワードで
ググってもなかなか見つからなかった。どうもです。

550 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 19:11:53 ]
>>548
行列的操作関連はeach使ったほうがややこしくなりそうな気がする
転置行列は転置行列でしかないわけだし

551 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 19:40:28 ]
すまん網羅って見落としてた
それにしてもdata.productって書けそうで書けないのかw

>>548
eachで実装した方法を提示するならともかく
初心者に書かせるレベルにならないと思うぞ

552 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 01:25:47 ]
>>551
>eachで実装した方法を提示するならともかく
>初心者に書かせるレベルにならないと思うぞ
+1

553 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 02:34:28 ]
def cartesian_product(*data)
    raise if data.size < 2
    data.inject([[]]) do |product, items|
        product.inject([]) do |r, elem|
            r += items.map {|i| elem + [i] }
        end
    end
end

554 名前:488 [2009/09/03(木) 05:40:09 ]
無知ですみません。

自分なりに色々調べた結果、Passenger/mod_railsを使っているため、
/manage/の.htaccessが、それによって上書きされているようです。
/public_html/フォルダはRuby railsで開発されており、
今回、/public_html/manage/にPHPで開発することになりました。
私は、Rubyを全く知らない&.htaccess初心者なので、このような事態に陥っています。

RailsAllowModRewrite On
を使えば、なおるようなのですが、
/manage/.htaccessでそのように設定しても、/manage/.htaccessに設定してあることが
有効になりません。

どなたか知っていたら教えて頂けないでしょうか。
よろしくお願いします。

555 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 06:29:57 ]
>>554
板違い
pc11.2ch.net/test/read.cgi/php/1241100447/

556 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 06:37:34 ]
日本語もまともに掛けないのばかか



557 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 07:42:35 ]
弁護するわけじゃないが普通に分かる
おまえがRailsを分かってないだけだろ

558 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 11:00:02 ]
>>556
自己紹介乙

559 名前:newbie mailto:sage [2009/09/03(木) 12:46:12 ]
たのしいRubyを読み終わったんだが、謎が一つあります。

count = Hash.new(0)
...カウントにkeyとvalueを設定する処理(省略

count.sort{|a,b|
a[1] <=> b[2]
}.each{|key,value|
print "#{key}: #{value}¥n"
}

とあったとして、「<=>」という演算子が左右のオブジェクトを比較して、
<は-1
=は0
>は1
と返してくるのはわかったのだが、どうやってソート処理されているの謎。

内部のsortメソッドでイテレータが並び替えのアルゴリズムで処理してるのでしょうか。
詳しい解説求む。

ちなみに今まで並び替えのアルゴリズムには目をつぶって生きてきたので、
何種類かあってそれぞれに特徴と効率があるというぐらいしか、あまりよくわかってない。

560 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 12:56:51 ]
-1と0と+1というそれそのものには深い意味はないよ

「今持ってるものが挿入先と比べて大きいか小さいか同じか」を調べてるだけ
手に持ってるものが大きかったら“上”に置いて、小さかったら“下”に置いて、同じだったら“横”に置く

普通にリアルに手元で何かを大きさ順に手動で並べ替えるのと同じ処理をしている
実際はもちろん事前グループ分けとか処理順とかにテクニックがあって単純ではないが、
並べ替えの行為そのものに着目した場合、理屈自体は「大きいか小さいか同じか」と一緒

561 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 13:07:55 ]
sortメソッドに与えるブロックは「大小の判断基準」
人間に天秤を与えれば重さの大小になるし、ものさしを与えれば長さの大小になるようなもの

その判断基準を元に実際に並べ替えるのはsortメソッドの内部で行われる

sortメソッドは少量のデータを手軽にソートしたいような
ソート手段にこだわる必要のない場合に向いている(大抵は事足りる)

もし速度的に不足するような場合はアルゴリズムを選ぶ必要があるし
それを自分で実装するかライブラリを使う必要がある

562 名前:newbie mailto:sage [2009/09/03(木) 13:08:25 ]
>>560
並べ替えのアルゴリズムに処理をわたす黒魔術ってことでいいですか?

563 名前:newbie mailto:sage [2009/09/03(木) 13:12:40 ]
>>561
なるほど、判断基準を渡しているってことか。

イテレータの章で判断基準を渡すってのが書いてあった。
「メソッドがどういう比較処理をおこなうかを渡して欲しい場合がある」と。

その処理がブロックで囲まれた a <=> b ってことか。
謎とけたー。気がする。

564 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 13:13:43 ]
なるほど
sort{|a, b| a <=> b }


 {|a, b| a <=> b } ってなんだよ! いきなり b とか出てくんじゃねえよ!

というとこですな

565 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 13:17:54 ]
irb> p [5, 4, 3, 2, 1].sort{|a, b| p "a:#{a}, b:#{b}"; a<=>b}
"a:5, b:3"
"a:3, b:1"
"a:4, b:3"
"a:2, b:3"
"a:4, b:5"
"a:1, b:2"
[1, 2, 3, 4, 5]


566 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 13:45:19 ]
0が偽じゃない言語だから、perlみたいに、比較 or 比較 or 比較 みたいに書けなくて嫌だね
なんでもいいなら、-1,nil,1 でよかったんじゃないのか



567 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 13:46:07 ]
Cの標準ライブラリにあるqsortも、「比較方法」だけを別関数で
作っておいて、その関数(のポインタ)を引数として渡すような造りになっている。

Strategyパターンですかな。


568 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 13:50:31 ]
判断基準を別に設けると、ひとつの枠組みを用意するだけで好きに扱えるからいいよね。
人間配列.sort{|a,b| a.身長 <=> b.身長}だとか、体重に変えてみるとか、逆順にソートしてみるとか。


569 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 14:18:53 ]
>>566
(a.身長 <=> b.身長).nonzero? or (a.体重 <=> b.体重)


570 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 14:43:53 ]
変数に型がない言語の場合、""や0が偽じゃないことで得られる恩恵の方が多い気がするな

無効値は偽であってほしいけど、正常値を数値や文字列で返す関数などは
0や""も正常値として扱うケースが多い。なので、これらが偽だと、戻り値をそのままブール式につかえない

Perlなんかだと、0も""も偽だから、これらも正常値として返す関数の戻り値をチェックするときは、
die "エラ〜" unless defined get_string()
とかやって、""のケースを除外しなくちゃならない。|| とか && も有効活用できないし

571 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 14:51:51 ]
>>570
//演算子じゃダメなの?

572 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 14:57:24 ]
>>569
それって身長が不一致のときにtrueが返らない?

・・・返値はselfかnilなのか、よくできてるなぁ

573 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 15:00:24 ]
0を偽にしろと言ってるのではなくて、0が返ってきてもうれしくないよねってことでしょ

574 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 15:07:10 ]
>>573
あぁ、そっか。骨髄反射してた。さーせん

575 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 15:18:53 ]
["foo", "Bar", "baZ"].uppereach{|i| puts i}

FOO
BAR
BAZ

みたいなマイ繰返子って作れんの?

576 名前:newbie mailto:sage [2009/09/03(木) 15:46:30 ]
>>565
黒魔術解明!!ありがと。スッキリしたぁ。



577 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 15:46:43 ]
def uppereach
hoge.each do |x|
yield x.upcase
end
end
みたいな?(Arrayに組み込むのってどうやるんだっけ)

578 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 15:49:30 ]
class Array
def uppereach
self.each do |s|
yield s.upcase
end
end
end

579 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 15:50:03 ]
newbie氏はブロックがわかってないとみた。
別に黒魔術でもなんでもない。

580 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 15:59:53 ]
黒魔術というとevil-rubyみたいな。(よいこは検索しないように)



581 名前:newbie mailto:sage [2009/09/03(木) 17:23:30 ]
>>579
今回の場合、yieldに与える処理ってことですよね?

yield自体、今日、たのしいRubyを読んで知ったばかりなので…。
わかってないといわれれば、わかってないはず。

間違ってますか?

582 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 17:44:22 ]
yieldって文脈次第でいろんな日本語になるんだな。
イテレータの場合は何だろ。「任せる」?


583 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 18:10:50 ]
つまり
yield (newbieさん.理解度)
てことか

584 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 18:15:22 ]
産むかと。

585 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 18:29:16 ]
14歳から始めるruby買ったが外した
標準命令の説明あんま書いてないし
内容が詳しくない

586 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 19:38:52 ]
「14歳からはじめるC」なら買ったんだけど



587 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 19:50:10 ]
標準命令って何?

588 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 19:55:19 ]
え、なにこいつ標準命令も知らんののかwwwwバカスwwwwww
mesとかfontとかboxfとかくらい使えるようにしとけwwwwwwww

HSPの

589 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 20:01:00 ]
まあ言いたいことはそれなりに伝わっては来る

お勧め本以外をいきなり買っても自己責任でよろしこ

590 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 20:11:40 ]
高っかい金出して最初のデカいRuby本を買った初心者の人に比べればどうということはない

591 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 20:17:12 ]
オライリーファン登場

592 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 20:18:32 ]
Rubyを始めようと思っただけのプログラミング初心者の人には荷が勝ちすぎた薀蓄本だったな

知識さえあれば面白い本なんだけどね

593 名前:newbie mailto:sage [2009/09/03(木) 23:11:34 ]
>>583
どう処理されるのか自分が知りたい(w

594 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 23:28:59 ]
>>593
自分の努力しだいだよ。
基本的なアルゴリズムをすっぽかしてきたみたいだけど
一度自分で手を動かして実装しておくと後の理解が断然楽になる。
バブルソートとか簡単なものだけでもやっとくのがオススメ。

595 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 03:44:50 ]
いまどき、ソートのアルゴリズムを自分で書いてるような
コーディングなんてしてたら、全面的に見直して作り直したほうがいい。

596 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 04:28:47 ]
なんだ、まだそんなこと言ってる人がいるのか
自力でのソートの実装は並び替えをさせるために書くんじゃねえよ
書けるだけの抽象化知識と基礎的な実装力があることが重要

自作のソートのコードを利用する奴は95%までバカだが、
ソートのコードを書けないのは100%ただのバカ



597 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 05:22:19 ]
>>569
nonezero?ってながいなあ。nz? くらいでよくない?

598 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 06:04:23 ]
よくない

599 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 09:11:11 ]
ブロック付きのsortってほとんど使わんよな
大抵sort_byで済む

600 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 09:51:09 ]
>>597
本気でそう思うならredmineにfeature request

601 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 11:13:11 ]
ソートの基準が2段階のとき
sort{|o1,o2|
if o1.a != o2.a
o1.a <=> o2.a
else
o1.b <=> o2.b
end
}
みたいに使ってるな

602 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 11:35:19 ]
rubyの場合は、配列にして比較するんでしょ。効率の善し悪しは知らないが

603 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 11:38:50 ]
Enumerable#sort の場合は Ruby スクリプトに降りてこないから遅いわけではないよ

604 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 11:42:04 ]
俺もほとんど.sort_byだなあ

605 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 11:42:06 ]
>>596
> 自作のソートのコードを利用する奴は95%までバカだが、
> ソートのコードを書けないのは100%ただのバカ
うむ

説明からソートをコードに起こせない人は時々いて、そういう人は例外なくアレ
ソートをコードにする練習はソートくらいでしかうまく鍛えられないから、
初心者のままでいいと思ってないのなら文句言わず今自分の手を動かしてやるべき

606 名前:newbie mailto:sage [2009/09/04(金) 16:39:29 ]
>>601
なるほど。配列引数便利だ!



607 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 18:37:40 ]
>>601
> ソートの基準が2段階のとき
でも条件が単純ならば大抵sort_byですむ
ブロック付sortなんてsort_byが出来てから使ったこと無いなぁ
A=Struct.new(:a,:b)
a = [A.new(2,4),A.new(2,1),A.new(1,5),A.new(1,1)]
p a.sort_by{|o| [o.a,o.b] }


文字列中の数字を数としてソートするなんかだとどう書くんだろう?
a = %w(3a 20a 100a b9 b80 b700 a9b100 a10b100)
p a.sort_by{|e| e.scan(/\d+|\D+/).map{|e| e[/\d/] ? ['0',e.to_i] : [e]}}
こんなんでいいのかな?


608 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 18:39:12 ]
アルゴリズムの勉強していたら夏休み終わってたんだが。

609 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 19:07:19 ]
>>608
ユークリッドの互除法を理解しただけで夏が終わった俺よりマシだ
気にすること無いぞ

610 名前:デフォルトの名無しさん [2009/09/04(金) 20:14:34 ]
Ruby 1 初めてのプログラミング(arton/宇野るいも 著)を買ったらRuby1.9.1が付いて来たんだが。
具体的に不便なところ(使えないもの)を教えてもらえないだろうか?
あと、このサイト(www.rubylife.jp/ini/)にある、
『オプション指定をプログラム内に記述』というソース内で文字コードを指定する方法が実行できないのだが、
1.9.1では使えないということなのだろう?
誰か頼む。

611 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 20:21:33 ]
英文テキストを送って翻訳サイトで日本語化してstdoutに文字列表示するサンプルどっかにない

612 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 21:36:47 ]
ttp://www.atdot.net/sp/readonly/oo5gpk


613 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 21:38:56 ]
>>610
> あと、このサイト(www.rubylife.jp/ini/)にある、
> 『オプション指定をプログラム内に記述』というソース内で文字コードを指定する方法が実行できないのだが、
> 1.9.1では使えないということなのだろう?
使えるよ。具体的にどう書いてどうなった?

614 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 22:07:07 ]
使えないだろ。嘘言うな

615 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 22:12:13 ]
>>612
すげ〜。ありがとう。

いい加減CGIも勉強した方がいいのかな。
あとまだ10年くらいは通用する技術なんだろうか。

616 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 22:16:09 ]
誰かruby-1.8.6-p383をgcc4.4.0のmingwでビルドしてない?
make testしたらエラー出るんだけど。

not ok float 1 -- ./sample/test.rb:1172
not ok float 2 -- ./sample/test.rb:1173
not ok float 3 -- ./sample/test.rb:1174

って感じでエラー。



617 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 22:21:21 ]
>>615
CGIもできないヤツがHTTPでなにかできるとは思えないから
通用云々よりまずできるようにしとけ

618 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 23:37:02 ]
PerlのURI::Fetchに相当するような、CacheつきWebクライアントはないでしょうか?

619 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 23:58:40 ]
vim-rubyをインストールしたのですが、vim-ruby-install.rbのセットアップが上手くいきません。

$ gem install vim-ruby
>WARNING: Installing to ~/.gem since /usr/lib/ruby/gems/1.8 and /usr/bin aren't both writable.
>WARNIG: You don't have /home/****/.gem/ruby/1.8/bin in your PATH,
> gem executables will not run.
>Successfully installed vim-ruby-2007.05.07
>1 gem installed

$ sudo vim-ruby-install.rb
>Can't find source directory.

上のように出力されてvim-rubyのセットアップができません。
気になるのが、/usr/bin/vim-ruby-install.rbファイルは存在するのに/usr/lib/ruby/gems/1.8/gemsディレクトリにvim-rubyが無いのです。(gemからインストールした他のgemパッケージは全てここにある)
しかしgem listコマンドを叩くと他のgemパッケージとともにvim-rubyが出力される。
何か分かる方がいましたら教えてください。よろしくお願いします。

620 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 00:11:12 ]
>>615 >>617
ajax で javascript が開発の中心になっても CGI は細々と生き残るだろう
ただし HTML は javascript の単なる loader になり
CGI はバックエンドとしての RDB - XML translator になり下がる

621 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 00:14:18 ]
>>615
CGIっつーよりwebAPIだよ

622 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 00:14:33 ]
ぽかーん。

623 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 00:27:34 ]
>>620-621
わかってないならレスしなくていいよ・・・

624 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 01:09:33 ]
pythonのようにコンソール上でコマンド1つ1つ実行させて
動作を確認させることはできないのですか?

625 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 01:12:26 ]
つirb

626 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 04:24:09 ]
RubyでCGI(笑)



627 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 05:26:51 ]
>>619
眠いから論理的に読んでないが、
gem は sudo したとき(/usr に書き込み権限があるとき)と
一般ユーザーで使用したとき(/usr に書き込み権限がないとき)とで使用するディレクトリが違う
完全自動で /usr/bin にインストールして欲しいなら最初から sudo gem install しろ
gem install すると gem は $HOME/.gem/ruby/1.8 とかに入る

昔は全員が sudo しまくってたんだが、最近は sudo しないインストール方法が市民権を得ている
いまだに Rakefile で sudo ベタ書きしてるライブラリがあるがとっとと死んでくれてよい

628 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 06:16:17 ]
>>619
何が起きたのか書いてあるじゃん

629 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 06:17:49 ]
へ?なんで?意味がわからない。

630 名前:610 [2009/09/05(土) 06:37:13 ]
>>613
そのサイトの該当部分は、正確には『Ruby入門 >日本語と文字コード >オプション指定をプログラム内に記述』だった。
すまん、言葉が足りんかった。
プログラムだが、これ↓を実行すると、
#! ruby -Ku
print("KCODE=", $KCODE);
こう↓なる。
test.rb:2: warning: variable $KCODE is no longer effective
KCODE=

631 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 06:55:01 ]
いやそれはメッセージがそのまんまだが

っていうかこれの経緯の解説が無いならその本投げ捨てろ
$KCODE が動作するのは 1.8 までで、1.9 からは別な方法で指定する

632 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 07:06:23 ]
>>630
Ruby M17Nの設計と実装
jp.rubyist.net/magazine/?0025-Ruby19_m17n

633 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 07:18:33 ]
こういう場合大抵その本に罪はないw

634 名前:610 [2009/09/05(土) 08:48:43 ]
>>631-632
答えてくれてありがとう。
632のリンク先は自分が勉強不足なせいで何言ってるか半分も理解できなかったがw
本にはマジックコメントを使うと書いてあったんだが、ネットで調べてみたら別の事が書いてあったんで混乱したんだ。

やっぱり別の本買えばよかった(´;ω;`)

635 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 09:29:21 ]
>>632はまだ理解できなくても問題ない
これは Ruby1.8 をある程度修めてて
なおかつエンコーディングの日常的知識があることを前提としている一次文書だ

Ruby 1.9.1 で初めてプログラミング言語に触れる人だとか
文字エンコーディングってナンデスカという人だとか
そういう人向けの文書ではない

そういう人向けの解説はこれをもとに出てくる…はずなんだが、ばあさんやまだかいのう

636 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 09:29:45 ]
>>634
Yes you do.

ttp://www.amazon.co.jp/dp/4798111570
ttp://www.amazon.co.jp/dp/4798114723



637 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 11:19:17 ]
>>615
CGIというか、HTMLを使った基本的なWebアプリが作れるようになれば便利
あと10年ぐらいは、HTMLやHTTPが無くなることはないだろう

638 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 11:29:25 ]
今さすがにCGIはなあ、とか思うんだけど、
で、まあwebアプリを初心者に勧めるとして何するのが(どんなライブラリ使うのが)いいんだろ。

Railsはでかいは、デプロイ面倒だわ、慣れるとすごくいいいんだけど、初心者がいきなりやるには…。

Sinatra辺りだろうか?

639 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 11:46:14 ]
CGIが書けずにフレームワーク扱いだす新人PGって、
交通ルール知らずに車運転するようなもんじゃないだろうか

640 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 11:50:33 ]
どこぞのフレームワークと違って
やって無駄になるような技術ではまったくないね

641 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 11:50:51 ]
比喩は嫌いだ

642 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 11:56:56 ]
webアプリ初心者が序盤に作ったモノはひどいデキになって当たり前なんだから
まずはライブラリなしの生CGIでいいんだよ
薄っぺらい仕様だからとっかかりにはちょうどいい

セキュリティはこの際忘れろ、ローカルでやるかbasic認証でもかけて隠しとけ
セキュリティやらフレームワークやらはCGIの基礎がわかってから考えろ

643 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 12:11:04 ]
KENTととほほを知ったことには感謝しなければならない
>>642で納得していただろうから

644 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 12:26:40 ]
「考えない」んだよな
そりゃそうだ、今の時点で「動作してる」のに、何を付け加える理由があろう

むしろ、安全じゃない文字の基本的テストが標準付属していて、
それを通さないとそもそも動作しないとかそういうフレームワークがあれば

645 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 17:31:11 ]
Railsの話題なのですが、rubyに共通する話なのでこちらで聞いてみます。
スクリプトのデバッグにruby-debugを使ってみているのですが、
b(break)コマンドでブレイクポイントを表示してくれず、現在行がブレイクポイントに追加されてしまいます。

ブレイクポイントを表示するにはどうしたらよいのでしょうか?

下記を見ると、breakでブレイクポイントの表示のはずなのですが・・・???
debug - Rubyリファレンスマニュアル
www.ruby-lang.org/ja/man/html/debug.html


ruby-debug 0.10.3
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
Ubuntu 9.04 (coLinux)






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<180KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef