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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
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)