1 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 04:30:21 ] プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 【Ruby1.9 は不安定な開発版であり初心者には全く向きません】 【最新安定版の Ruby1.8.7 の使用をお勧めします】 ※1.8.7 は1.8 と 1.9 の橋渡しをするためのリリースです。 1.9 の新機能の一部が利用可能なので初学者にお勧めです。 ※ただし十分安定しているとは言えないので プロダクション環境での利用にはお勧めしません。 関連スレやURLは>>2-8 あたりを見てください。Ruby on Railsの質問は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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
354 名前:350 mailto:sage [2008/12/10(水) 07:36:46 ] >>351 やっぱりプロジェクトが活発でなくなるとHpricotみたいにバイナリを用意してもらえず 難しくなるかなぁ… 自分は今のところgemで一発でした。
355 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 17:15:59 ] バイナリを用意してもらえなくなったら、自分が用意する番だよ。
356 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 18:29:46 ] irb に --noinspect をつけると、式の結果を inspect するのを やめさせることができますが、同じことを irb のプロンプトから 行うことはできますか。 irb を使ってて、inspect による評価を一時的にやめさせようと しています。 irb> IRB.conf[:INSPECT_MODE] = false とかしてみましたけど、かわりませんでした。
357 名前:328 mailto:sage [2008/12/10(水) 18:43:11 ] >>329 ありがとうございます。安心しました。 あと、数百のファイルをコピーする時、 ファイル名を一つ一つ変更したいのですが、 それも可能でしょうか? 名前を一つ一つ打ち込めばできますが、 ファイルの数が数百もあるので、 正規表現で置換するような形でリネームしたいのです。 「コードが一行で済まないかな」と思っています。
358 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 19:02:26 ] >>356 IRB.conf[:MAIN_CONTEXT].inspect_mode = false >>357 どういうファイル名をどのように変えるのかがわからないとなんとも。 あと一行でっていうのは、やればできるんだろうけど いわゆる玄人御用達だからオススメしない。
359 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 19:15:12 ] >>358 やってみましたが、かわんないです。 あいかわらず inspect の結果が表示されます。
360 名前:デフォルトの名無しさん [2008/12/10(水) 19:21:59 ] ruby -i ky_*.txt -pe '$_.sub!(/麻生太郎/, "阿呆太郎")' *.txt で動くかもしれない。
361 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 19:30:59 ] >>359 やりたいのは--noechoじゃない? IRB.conf[:MAIN_CONTEXT].echo = false
362 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 21:21:39 ] >>357 御返事ありがとうございます。 元ファイル名は大体このような感じです。 hoge_428_20-01.txt hoge と数字の部分が違っているものが数百ほどあります。 それを別のディレクトリにコピーする時に、 index_428_20-01.tex というような形に変えたいのです。 先頭と拡張子の部分を置換する格好になります。 置換を正規表現で表現すると次のようになります。 検索 [a-z]+([\d_\-])+\.txt 置換 index\1.tex このようなリネーム処理を、 ファイル(ディレクトリ)コピー時に同時に行いたいのです。
363 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 21:24:33 ] >>361 びんごです! さすが特務エスパー、多謝です
364 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 21:27:48 ] >>362 だからできるっつの めんどくさいので、対象ファイルの指定も実際のコピーもRubyでやれ これらを外部から読み込むように作ろうとすると敷居が微妙に高い より正確に言うと変なものが混じったときのエラー処理がめんどい
365 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 09:33:52 ] >>362 これを参考にしてみて。 require 'fileutils' from = /[a-z]+(¥d_¥-])+¥.txt$/ to = 'index¥1.tex' filenames.each do |filename| new_filename = filename.sub from, to FileUtils.mv filename, new_filename if filename != new_filename end >>364 役立たずなレス 初心者の相手ができないならくんなよ
366 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 15:31:12 ] def func a = ["hage","hoge","hage"] a.each{|elem| return true if elem="hoge" } return false end 上記のようなコードを書くと、funcの返り値が[false,true,false]になってしまうのですが、 trueひとつにしたい場合はどのようにしたらよいでしょうか
367 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 15:36:25 ] >>366 ごめんなさい、これ勘違いだったので見なかったことに
368 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 15:37:11 ] >>365 のスクリプトがキモい件について
369 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 15:50:06 ] Ruby式ではないな 他の言語の人間だ
370 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 16:19:31 ] 初心者にあんま見せたくない書き方であることは間違いないね…
371 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 16:23:39 ] htmlデータからタグの間に挟まれた文字のみ取り出すにはどうすればいいですしようか。 タグ名もバラバラです。 例 <b1>殿様カエル</b1><b2>しり上がり</b2><goow>自転車</goow> タグごと取り出す方法は分かったのですが。
372 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 16:28:04 ] >>365 をrubyらしくってどう書けばいいの? rename_rule=[..., ...] def mkdistnme file x.sub *rename_rule end def movefile from, to ... end filenames.map{|x| [x, mkdistnme x]}.each{|ft| movefile *ft}
373 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 16:41:37 ] >>371 hpricotとかでパースするのをオススメしたいけど 慣れるまでが難しいかも知れない。 ネスト構造無視でいいなら str = "<b1>殿様カエル</b1><b2>しり上がり</b2><goow>自転車</goow>" ary = [] str.gsub(/<.+?>(.+?)<\/.+?>/){ary << $1} gsub使うのに違和感あるから、もっといい方法があるかも?
374 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 17:02:02 ] >>371 deleteの動作(主に返り値)に注意 str = "<b1>殿様カエル</b1><b2>しり上がり</b2><goow>自転車</goow>" arr = str.split(/<.+?>/) arr.delete('') puts arr 殿様カエル しり上がり 自転車 HTMLとしてパースするのが真っ当
375 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 17:09:31 ] >deleteの動作 そういえばなんでArrayの一部メソッドは破壊的な操作をするのに !がついてないんだろう。perl由来の名残のような気もするけど ary = [].push data [].push! data と書きそうになることがよくある。
376 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 17:34:18 ] a = [1,2,3] b = [4,5,6] a.each{|i| puts i} b.each{|i| puts i} とやると 123456 の順に表示されますが a.calleach b.calleach puts "A" a.calleach puts "B" b.calleach a.calleach puts "C" b.calleach のようにeachの各ループが実行されるタイミングを自分で制御してこの例では 14A2B53C6 という順で出力されるようなイテレータの書き方というか呼び方あったら教えてください。 自分でインデックス変数も合わせて用意すればいいんでしょうが もう少し簡潔なのがあれば嬉しいです。
377 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 17:44:16 ] >>376 それはプログラム構造そのものが間違っている 絶対にあとで破綻するから、いまのうちに書き直せ で、その時間がないという場合は、配列をキューとみなして使う a.shift b.shift puts "A" a.shift puts "B" b.shift a.shift puts "C" b.shift
378 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 17:47:21 ] >>376 1.8ならGenerator、1.9ならEnumeratorがそんな感じだけど 推測するにEnumerable#zipで十分なんじゃないかな [1,2,3].zip([4,5,6], ["A","B","C"]) {|ary| puts ary }
379 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 17:47:42 ] >>376 継続とかcall/ccとかコルーチンとかだっけ。 require 'generator' g = Generator.new([1,2,3]) g.next
380 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 17:50:28 ] 外部イテレータ ね
381 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 18:02:39 ] >>375 !は「破壊的」という意味ではない。 !の意味は、それが付かない同名メソッドと比較して、注意すべき挙動の違いがある、という意味。
382 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 18:17:24 ] >>381 二種類提供する場合のみってことか。サンクス。 ttp://shugo.net/ruby-codeconv/codeconv.html >破壊的なメソッドと非破壊的なメソッドの両方を提供する場合、 >破壊的なメソッドには`!'を付ける。 ttp://www.ruby-lang.org/ja/man/html/FAQ_A5E1A5BDA5C3A5C9.html#a5.2e12.20.c7.cb.b2.f5.c5.aa.a5.e1.a5.bd.a5.c3.a5.c9.a4.c8.a4.cf.b2.bf.a4.c7.a4.b9.a4.ab >同名のメソッドがあって、一方はオブジェクトのコピーを作って返し、 >もう一方は変更されたオブジェクトを返すようになっている場合、 >!のついた方が破壊的メソッドです。ただし、!がつかないメソッドの中にも >String#concatのように破壊的なものはあります。
383 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 18:52:51 ] >>365 ありがとうございます。 Rubyは初心者ですが、頑張って使いこなせるようになりたいです。
384 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 19:45:42 ] >>365 正規表現まちがってる。 >from = /[a-z]+(¥d_¥-])+¥.txt$/ from = /[a-z]+([¥d_¥-]+)¥.txt$/ あるいは from = /¥w+([-_¥d]+)¥.txt$/ とか。[a-z]+ はたぶん ¥w+ で済むんじゃないか。 >>372 十分 Ruby らしいと思うけどね。負け惜しみだと思うよ、>>368-370 は。
385 名前:デフォルトの名無しさん [2008/12/11(木) 19:59:40 ] 質問です。 Rateというクラスをインスタンスにして配列にしたいのですが、 @rates = Array.new(Rate.new) と書くと、 can't convert Rate into Integer というエラーメッセージが帰ってきて配列に出来ません。 どのようにすれば、インスタンス化したクラスを配列に出来るのでしょうか?
386 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 20:04:42 ] >>385 www.ruby-lang.org/ja/man/html/Array.html#Array.2enew newの第一引数は整数か配列。 というわけで @rates = [ Rate.new ]
387 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 20:06:10 ] >>384 $は文字列末尾じゃないぞ。
388 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 20:15:42 ] Array#zip は、引数のほうが長い場合は残りを無視するようですが、 これを無視しないようなオプションとかありますか。 コード: ['A','B'].zip([1,2,3,4]) {|c, i| puts "#{c}, #{i}" } 結果: A, 1 B, 2 希望: A, 1 B, 2 nil, 3 nil, 4
389 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 20:20:23 ] >>388 [1,2,3,4].zip(["A","B"]).map{|i| i.reverse}
390 名前:385 mailto:sage [2008/12/11(木) 20:25:26 ] >>386 ありがとうございます!
391 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 21:18:17 ] Ruby の作成環境の表示文字エンコードってどれが一番多いかな? やっぱまだ EUC-JP? サンプルの日本語の puts のデフォルトを UTF-8 にしたいんだけど…
392 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 21:36:58 ] Windows環境でShift-JISの俺に隙はなかった 本当、端末の文字コード何とかならないかな 文字化けが不便なためにrspecのit 〜を日本語で書けない
393 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 21:52:54 ] # HTMLのタイトルを表示 puts html.scan(/<title>(.+?)</title>/) では不足なんだよね このあとに .toeuc とか .toutf8 とか書かないと化ける 化けるならまだしも、変なエスケープシーケンスがどうたらで方向キーとかが動作しなくなる 端末リセットしても直りゃしねえ
394 名前:デフォルトの名無しさん [2008/12/11(木) 21:53:59 ] >>374 >>373 ありがとうございます。 split(/<.+?>/) の前にgsub(/<[^\/].[^>]*>/,"")をかませたらいい感じになりました。 splitの指定が正規表現できるとは初めて知りました。
395 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 21:54:45 ] そのへんは端末エミュレータの仕事だとも思う 日本語EUCでもUTF-8でも半角2バイト文字でもてきとーに表示するのが端末の仕事だろ 一緒に化けてどうする
396 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 22:41:16 ] >>395 無茶言うなよ……。一度エンコーディング自動識別のコード書いてみろ、絶望的な気分に浸れるから。
397 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 22:47:01 ] hoge.rb|nkf -Lu -wとか
398 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 22:50:00 ] >>393 inspectでお茶濁していいんじゃない? どのみちその程度の文字コード知識はないとHTMLなんて扱えないから 説明が必要になるでしょ。
399 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 22:56:38 ] 別に普通に書けたけどな。 JIS, SJIS, EUC-JP, UTF16 自動認識。
400 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 23:01:48 ] 端末エミュレータが自動で標準出力に nkf -端末エンコード をかませばいいじゃん nkf 自動認識が失敗したらなにか出力バッファに対して再試行できる仕組みにしてさ Emacs が 文字コード指定して開き直せるのと同じような感じで こういうときは us-ascii で済んでる人間が憎いなあ
401 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 23:21:56 ] >>399 どんなデータでもその自動認識が正しく動作するならおまえは天才だ
402 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 01:25:25 ] >>389 ありがとうございます。 でもこの場合、引数のほうが長ければ>>389 のようにする、ということですよね。 そういうのが面倒だったので、zipにオプションがないかなーと思って質問してみました。 ないようならあきらめて>>389 のようにします。
403 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 02:19:09 ] >>402 先頭の要素が不足する配列って、明示的にnil入れてあることが多いしね。 zipが複数の配列を引数に取ることを思い出して作り替えてみた。 眠いから間違ってるかも。 def Array.zip2(*ary) size = ary.map{|i| i.length}.max top = ary.shift.dup top[size-1] = nil if block_givin? top.zip(*ary){|a| yield a} else top.zip(*ary) end end
404 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 02:31:14 ] >def Array.zip2(*ary) やっぱ間違ってた、self使ってないorz def zip2(*ary)ということでひとつ・・・。
405 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 02:36:23 ] 配列の全内容を変数(String)に入れる簡単な方法はありますか?。 gsubの結果を1つの変数にまとめてgsubにかけようとしたら、 aa = bb.scan(/.+/) *as = aa cc = as.gsub(/m/,"") こんな感じにしても「配列Array」だといわれてエラーで止まってしまいました。
406 名前:デフォルトの名無しさん [2008/12/12(金) 02:37:05 ] 訂正 scanの結果を1つの変数にまとめてgsubにかけようとしたら、
407 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 03:16:27 ] to_s
408 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 07:11:21 ] >>405 joinでいいような。 ['aaa', 'bbb', 'ccc'].join #=> "aaabbbccc"
409 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 07:12:17 ] to_sは1.9系からinspectっぽくなるからおすすめしない。
410 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 07:37:25 ] ブロックの存在忘れ去られている scan (´・ω・) カワイソス aa = bb.scan(/.+/){|match| match.gsub(/m/,"")}
411 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 12:39:25 ] tDiaryとHikiを使ってるんですけど、これはRuby1.9に対応していますか。
412 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 12:59:52 ] Ruby1.9はまだ使わないでください。
413 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 13:04:54 ] エラーが出ても自力で対処できないしな… Ruby側が修正されるかライブラリ側が修正されるかするまで全く動作しないとかいうのは ただ利用したいだけの一般ユーザーの身ではやってられん が、開発とか覗いてみたいなーと考えてる人なら、1.9上で動かしてみてエラーのレポートとかしてみるといいかも 1ヶ月くらいじーっとROMってれば雰囲気はわかるしさ
414 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 13:05:51 ] >>412 いやいや、rc2なんだから使ってもらうべきだろ。
415 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 13:06:24 ] >>405 一つの変数には一つのオブジェクトしか入れられない。 だから複数のオブジェクトを入れられるArrayオブジェクトを器にするか 結合して一つのStringオブジェクトにするしかない(>>408 )。 gsubしたあとにまたバラバラの文字列である必要があるなら 結合すると分割がめんどうだから aa = bb.scan(/.+/) cc = aa.map{|s| s.gsub(/m/,"")} で配列の各要素に対してgsubをする。 やってることは結果的に>>410 と同じだけど、Array#map(Enumerable.map)は 覚えておいて損はない。
416 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 13:19:55 ] >>414 お前のような奴がいるからFirefoxは
417 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 13:22:09 ] Rubyはバグ報告サポートがまだヘナチョコだからなー SEGVが出た時点でエラー情報送信ウィンドウが出るくらいじゃないと開発者以外に勧めたらあかんと思う
418 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 13:35:43 ] 一般ユーザーは偶数安定バージョンの2.0待ちが無難だよ。
419 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 13:59:05 ] >>417 dumb端末で使ってるやつもいるんだぞ!
420 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 14:03:05 ] >>419 本当? ふつう端末エミュレータかコンソールじゃないの? 今どきシリアル端末なんて管理者だって使わないだろ。 つうか vt100 だって、ダム端じゃねーぞ。
421 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 14:10:07 ] cursesが動かない環境はとりあえず切り捨てていい そんなの使ってる人は自力で何とかすると思われ
422 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 15:56:53 ] 「44133」を「12時間15分33秒」(の表示に必要な数値)に直してくれるライブラリとかないですかね
423 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 16:09:20 ] >>422 標準でありそうだが、ないな というか時間オブジェクトってないよね Time::Period クラスとかになるのかな
424 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 16:16:30 ] >>422 難しく考えなくても、Time.at(44133)のTimeオブジェクトからhms拾えばおk。
425 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 16:21:13 ] あ、タイムゾーン影響を受けるからTime#utcを忘れずに。
426 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 16:23:19 ] こんな感じかな? Time.at(44133).getgm.strftime("%H:%M:%S")
427 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 16:40:14 ] 24時間を超えたらどうすんの。
428 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 16:51:05 ] >>427 どうしようもないな 日の部分が1を超すかどうかをチェックするしかあんめえ
429 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 16:54:14 ] そうなると秒数を割り算したほうがわかりやすそうだ
430 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 16:57:59 ] >>407 >>408 >>410 joinで解決しました。ありがとうございます。 aa = bb.scan(/.+/){|match| match.gsub(/m/,"")} もいいですが、今一ブロック処理って理解しきれない部分があって。
431 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 17:02:03 ] >>415 勉強してみます。ありがとうございます。
432 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 19:18:43 ] あるオブジェクトのインスタンス変数に File オブジェクトがセットされてるとして、 そのオブジェクトが GC されるタイミングでその File オブジェクトは close される?
433 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 19:22:38 ] あ、それで、もし close されてくれないとして、その場合に、 GC のタイミングで close する finalizer のようなことをする方法があれば教えてください。
434 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 19:30:47 ] >>432 www.ruby-lang.org/ja/man/html/FAQ_C1C8A4DFB9FEA4DFA5E9A5A4A5D6A5E9A5EA.html#a7.2e11.20.a5.d5.a5.a1.a5.a4.a5.eb.a4.f2close.a4.b7.a4.ca.a4.a4.a4.ce.a4.cf.b5.a4.bb.fd.a4.c1.a4.ac.b0.ad.a4.a4.a4.ce.a4.c7.a4.b9.a4.ac > 参照されなくなったFileオブジェクトは、GCで自動的にクローズされます >>433 blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/3465 require 'finalize' Finalizer.add(obj) でobjがGCされるときにobj.finalizeがコールされる はずだけど使ったこと無いw
435 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 19:37:48 ] 忘れてた。これも参照のこと。 www.ruby-lang.org/ja/man/html/trap_IO.html それと「objがGCされたとき」にobj.finalizeを呼ぶことはできないのか。 Finalizer.add(file, obj)
436 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 19:48:00 ] >>434 >>435 ありがとうございます。 明示的に close しないのはあまり行儀が良くないとは思いますが、 それほど扱うファイルが多くない場合には GC に期待しても良さそうですかね。 Finalizer はリファレンスマニュアルに説明が無いですが、 これは使うなという無言の圧力でしょうか・・・
437 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 19:50:26 ] いや、明示的に閉じろよ なんでこの機能に依存するんだよ
438 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 20:00:19 ] 「ガベコレされる時のフック」はいろいろとヤバい代物だから、 使うのは本当に必要なとき(ってどんなときだろ)のみにすべき。 ファイルのクローズのような処理はガベコレに頼るべきではない。
439 名前:デフォルトの名無しさん [2008/12/12(金) 20:19:45 ] ガベージコレクションはプログラム作成者が意識したらダメよ いい意味でも悪い意味でもな オブジェクトの自動回収だけをさせるべき
440 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 20:28:12 ] >>437 >>438 自分が一から設計するならそうしたいんですけどね。 hash_table.delete obj みたいなコードがあって、今まで obj はメモリ内で完結するオブジェクトでしたが、 あるとき機能追加で File を持つ obj も扱うようになりました。 これを真面目に close するとすると delete する直前の箇所で、 obj.close if obj.respond_to? :close hash_table.delete obj としたり、 hash_table の初期化をする箇所で class << hash_table = Hash.new alias :__delete :delete def delete obj obj.close if obj.respond_to? :close self.__delete obj end end ... hash_table.delete obj と hash_table を拡張するのは思い付いたんですが、 hash_table 側のコードを変更するよりは、 機能追加する側の obj の方でどうにか (あわよくば GC で勝手に) close できれば そっちの方が変更としてはスマートかな、と思いました。 何か良い方法ありますかね?
441 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 20:31:31 ] いや、だから、openが終わったときにcloseするか、ユーザーのcloseを受け付けるように作れよ
442 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 20:42:56 ] Fileオブジェクトを使う人が、そのファイルオブジェクトの責任を持つ ということで、この場合は勝手に消していいと思う obj.open だけして放置する人がいたのなら、それはその人が悪いんじゃないかな
443 名前:デフォルトの名無しさん [2008/12/12(金) 20:48:32 ] ど田舎富山DQN男の家族消えろ ど田舎富山DQN男の親消えろ ど田舎富山DQN男の子供消えろ ど田舎富山DQN男の親戚消えろ ど田舎富山DQN男の家族消えろ ど田舎富山DQN男の親消えろ ど田舎富山DQN男の子供消えろ ど田舎富山DQN男の親戚消えろ ど田舎富山DQN男の家族消えろ ど田舎富山DQN男の親消えろ ど田舎富山DQN男の子供消えろ ど田舎富山DQN男の親戚消えろ ど田舎富山DQN男の家族消えろ ど田舎富山DQN男の親消えろ ど田舎富山DQN男の子供消えろ ど田舎富山DQN男の親戚消えろ ニヤニヤ(・∀・) ニヤニヤ(・∀・) ニヤニヤ(・∀・) ニヤニヤ(・∀・) 死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね 死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね 死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね 死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 苦しんで死ね 死ぬとき このレスの事思い出してから地獄へ行けよ ニヤ(・∀・)ニヤ(・∀・)
444 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 20:59:19 ] Rubyで特定のファイル群を、 OSで関連付けされたアプリケーションで開きたいのですが、 どうすればよいでしょうか。 一種のとして使いたいのです。
445 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 21:06:56 ] >>444 Windowsなら、start が使えるはず system('start hoge.txt') cmd.exe の内部コマンドなので注意
446 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 21:14:40 ] >>440 > 何か良い方法ありますかね? 腐った設計を見直すのが一番いい方法だな >>444 start とか open とか、そのOSで用意されてるコマンドを使う
447 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 21:15:44 ] >>445 できました! なんという素早く的確なレス! 本当にありがとうございます。ありがとうございます!
448 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 23:47:41 ] rubyでcgiの掲示板みたいな物を 作ろうとしているのですが、 テンプレートとなるHTMLを別に用意して その中の項目などを置き換えて 最終的に表示を行いたいと考えています。 Amrita2 というライブラリが良さげなんですが サンプルなどが少ないんですよね。 (メインのページ?が404で見れない) 他に、同様な機能を持ったライブラリで お勧めなどはありますでしょうか。
449 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 23:56:17 ] めんどいからrdでやっとけ
450 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 00:08:10 ] >>448 Tenjin ってのが速いらしいけど、使ったことないから別にお勧めってわけでもない。 www.kuwata-lab.com/tenjin/
451 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 07:29:20 ] >>448 俺のオススメはTenjinだけど この辺のライブラリはかなり数があるので、いくつか試して目的に合った奴を使うと良いんじゃないかな Rubyist Magazine最新号あたりの記事も参考に ちなみに普通のCGIアプリで使うなら、Amrita2はRubyGemsとHpricotを使っているためオススメできない (というか普通のレンタルサーバ環境ではまず動かない) amrita-alteredの方が良いと思う。ただし動作がかなり重いことには注意
452 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 07:53:50 ] RDとかではめんどいからテンプレートエンジンが隆盛なんだと思う 決定版がないんだよねという話は5年くらい前からしてる気がするが
453 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 08:07:15 ] そもそもテンプレートエンジンに「ただ一つの決定版」って要るのか? 今の状況はけっこう理想的だと思うけど
454 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 10:35:39 ] 元のファイルを読み込んで新規にファイルを作成し、 その内容を置換する作業を一括してやりたいと思っています。 色々と実験しているのですが通常の置換はできても正規表現による置換ができません。 試している元のファイル「 in.txt 」の内容は、 |青空文庫《あおぞらぶんこ》 へのへの です。この内容を出力して置換するために書いた「 test.rb 」の内容が次です。 open("in.txt","r"){ |元ファイル| open("out.txt","w"){ |出力と置換後のファイル| while line = 元ファイル.gets line.gsub!("(|)(.+?)(《)(.+?)(》)","\4\3\2\1") #正規表現による置換。変化なし。 line.gsub!("へのへの","もへじ") #通常の置換。OK。 出力と置換後のファイル.puts line end } } これによって出力された「 out.txt 」の内容が次のものです。 |青空文庫《あおぞらぶんこ》 もへじ 通常の置換は成功していますが、正規表現による置換に変化がありません。 どうすれば良いのでしょうか。
455 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 10:41:01 ] あんちゃん、praggerに関するスレってないん?
456 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 10:42:49 ] >>454 line.gsub(/(|)(.+?)(《)(.+?)(》)/,"\4\3\2\1") じゃまいか
457 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 10:47:15 ] '\4\3\2\1' こうだろ
458 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 11:03:27 ] >>448 ふつうにERBでええやん ttp://jp.rubyist.net/magazine/?0017-BundledLibraries Tenjinは日本語の解説がないからこのレベルの初心者にはムリだと思う
459 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 11:08:08 ] >>458 erb より eruby の方が手軽じゃない? 1行目に #!/usr/bin/env eruby って書いておいて、 拡張子を cgi にしておけば普通のCGIと変わらず動くし。
460 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 11:09:49 ] >>456 >>457 ありがとうございます。 line.gsub!(/(|)(.+?)(《)(.+?)(》)/,'\4\3\2\1') で出来ました! 正規表現はスラッシュで、 後方参照はシングルクォートで囲む必要があるんですね。 すごく勉強になりました。 このスレの皆さんのおかげで本当に助かります。 あらためて感謝します。
461 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 11:47:48 ] ラ 出来ました! 懿「ォ めくらっぽう滅茶苦茶やってたらたまたま動作しました
462 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 13:05:38 ] gsubでブロック紹介しない時点でなあ…
463 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 13:37:05 ] strscanらぶ
464 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 13:42:35 ] >>458 今ならERbよりErubisの方が良くないか? >>459 まず、erubyのインストールが厄介なのでは
465 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 14:00:56 ] 各行の先頭に連番を振ることはできませんか。 「行数=挿入する数字」で良いんですが。
466 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 14:01:26 ] あのへんはサーバ上で動かすための設定やインストールが面倒でなあ… ローカルでスクリプトとして使うならそれほどでもないんだが
467 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 14:03:07 ] >>465 各行に対して、正規表現の文頭を数字で置換しれ 改行区切りで配列にしてしまうのが簡単だと思う joinでくっつけるときの改行コードは元の改行にしておくこと
468 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 14:09:35 ] str = "a bb ccc dddd" lines = Array.new str.to_a.each_with_index do |e, n| lines.push(e.sub(/^/){"#{n+1}: "}) end print lines.join 結果 1: a 2: bb 3: ccc 4: dddd このまま使うと2桁3桁のとき数字表示が汚くなるが、そのへんは自分で考えれ
469 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 17:17:48 ] >>467 >>468 親切にありがとうございます。 >各行に対して、正規表現の文頭を数字で置換しれ これはよく分かるのですが、 >改行区切りで配列にしてしまうのが簡単だと思う というのがよくわからないのです。 str="●●●"の●●●の部分に連番を振りたいファイルの内容を 全部コピーして貼り付けて実行すれば良い、ということなのでしょうか? 確かにそれなら実現できました。 ただ、手間がかかるので 連番を振りたいファイルを指定して、 中身を直接書き換えられれば有難いのです。 そのような方法はありませんでしょうか。 ひょっとして初心者丸出しの質問なのかもしれませんが、 御教示頂ければ幸いです。
470 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 17:46:04 ] プログラミングとクラスの考え方がまだ身についてないっぽい 必要なのはString オブジェクトだ つまり文字列 ファイルパスを指定するとファイル内容を文字列で返すメソッドを持つクラスがあるからそれ使え ファイル内容を文字列で取得できたら文字列内を置換しれ んで書き込みたい文字列を作れたら、同じ名前でファイルに書き込め
471 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 18:02:44 ] ・ スクリプト内の変数の文字列を置換する ・ スクリプト内で指定したファイル内容を読み込んで表示してみる ・ 読み込んだファイル内容を置換して表示してみる ・ 置換した内容を別ファイル名で保存してみる ・ あらかじめ元ファイルをバックアップしておき、置換した内容を元と同じ名前で保存してみる ・ あるフォルダ(ディレクトリ)のファイル一覧を取得して表示してみる ・ 自分の欲しいファイル名だけを抽出する方法を考えてみる ・ 一覧のひとつひとつに対してファイル名だけを表示させてみる ・ ファイル名の表示の部分を「ファイル内容を読み込んで表示」に切り替えてみる ・ 「ファイル内容を読み込んで表示」の部分を「読み込んで置換して同名で保存」に置き換える こんな感じ?
472 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 18:03:47 ] > ・ スクリプト内で指定したファイル内容を読み込んで表示してみる スクリプト内で指定したファイル名の内容を読み込んで表示してみる、だった
473 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 18:10:45 ] 問題を「これならできそう」って思える程度に分割する能力って大切だよね オライリーはPragmatic Thinkingなんちゃらって本の日本語版出せばいいのに
474 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 18:28:21 ] >>471 みたいなのは、現状、意識的に経験積むしかないんだよね うまい本とかあればいいんだけど、あんまり聞かないな
475 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 18:33:15 ] >>471 そんな感じです。お手数をかけてすみません。 それを参考にして一つ一つ覚えて行きたいと思います。 何度か他の言語を覚えようとして挫折したのですが、 Rubyは簡単に結果を出力できて感動したので、 この言語を勉強することにしました。 (プログラムは素人ですが、 Rubyのコードがシンプルで美しいと思ったのも動機の一つです) 一応「たのしいRuby」と「Rubyレシピブック」は購入しましたので、 今は「15.2 基本的な入出力操作」を試しています。 プログラムとかはやったことはないのですが、頑張って覚えるつもりです。
476 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 18:37:33 ] すると File.open(path, 'r'){|f| puts f.read} ができた頃かね f.read が文字列を返してることがわかったら、ファイルひとつを置換するのはもうすぐだな
477 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 22:18:03 ] ワンライナーだと ruby -pe "printf '%4d ',$." ファイル名 でファイルに4桁の行番号をつけて標準出力に表示 ファイルを書き換えたければ -i.bak などと-i オプションにバックアップの拡張子をつけて実行 ruby -i.bak -pe "printf '%4d ',$." ファイル名 標準入力から読み込んだ場合の行番号は$.に入ってる、行番号の形式を変えたければprintfを勉強する 複数のファイルを指定しても大丈夫 Windowsだと -i の拡張子無しでの直接書き換えが出来ないのがちょっとやだな UNIXだと ファイル開いておいて、開いたファイルを削除して、書き込み用で同名のファイルを作成するのかな? PerlでもWindowsだと出来ないので、同じような動作してるんでしょうね というか、Perlの動作を再現してるんでしょうけど
478 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 22:25:44 ] path = 'test.txt' #適当に作っといてね outfile = 'testwrite.txt' #問答無用で上書きされるぞ と、すると pathファイルを開いて、全体を一気に読み込んだものを表示する open(path, 'r'){|f| puts f.read} pathファイルを開いて、一行読み込んで表示するのを最後まで繰り返す open(path, 'r'){|f| f.each{|line| puts line}} pathファイルを開いて、一行読み込んで、行番号表示して、行の内容を表示するのを最後まで繰り返す open(path, 'r'){|f| f.each_with_index{|line,ind| printf '%3d ',ind+1;puts line}} pathファイルを開いて、書き込み用のoutfileファイルも開いて、一行読み込んで、ファイルに行番号書き込んでから行の内容も書き込むのを最後まで繰り返す open(path, 'r'){|f| open(outfile,'w'){|out| f.each_with_index{|line,ind| out.printf '%3d ',ind+1;out.puts line}}}
479 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 22:30:00 ] cat -n
480 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 22:32:30 ] >>479 そんなこと言ったら行番号付加ツールインストールすれば一発だぞ
481 名前:デフォルトの名無しさん [2008/12/13(土) 23:42:38 ] $.
482 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 01:44:40 ] >>476 お恥ずかしながら io.readlines のことかと思って悪戦苦闘していました。 例文通りに打ち込んでも上手く行かないので、何かプログラムの根本的な ところが判ってないのだと思って再び悩んでいました。 >>477 >>478 ありがとうございます。おかげさまで希望通りの動作が実現しました。 教えて君のような私にここまでして頂いて何と感謝すれば良いのか判りません。 私に何ができるわけでもありませんが、似たようなことがあったら、 私もこのスレの皆さんのような態度で困った人に接したいと思います。 このスレの皆様に心から感謝します。本当にありがとうございました。
483 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 03:03:55 ] 馬鹿なの? 死ぬの?
484 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 05:12:40 ] >>482 たかが2chでそこまでバカ丁寧になる必要はない 教えてやりたい人間が教えたいように教えただけ >>483 バカ丁寧だから、バカなんじゃない?
485 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 05:13:18 ] ああ忘れてた、>>477-478 , 乙であります
486 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 05:40:39 ] >>484 たかが2chで「必要がない」ことをそんな大きく見てもしょうがない。 他の多くのレスの不必要な表現と同じように、>>482 も書きたいように書いただけ。
487 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 12:37:57 ] >>455 ないみたいね そもそもPlaggerのスレさえも立ってない (理由は不明だけど、俺は人気がないんだと思っている) 話したいなら、ここや本スレでも良いと思うよ
488 名前:デフォルトの名無しさん [2008/12/14(日) 12:47:00 ] ruby-ldapのインストール方法について質問です。 OSはcentos5.2を使用して ruby本体は、 ruby-1.8.6-p287をcheckinstallにてRPM化しインストールしています。 ruby-ldap-0.9.7-1.i386.rpmを入手して、インストールを試みたところ下記のような エラーメッセージが出力されて、二日ほど止まりっぱなしです。 どなたかアドバイスをお願いします。 # rpm -ivh ./ruby-ldap-0.9.7-1.i386.rpm 警告: ./ruby-ldap-0.9.7-1.i386.rpm: ヘッダ V3 DSA signature: NOKEY, key ID bfbaf0e8 エラー: 依存性の欠如: libcrypto.so.5 は ruby-ldap-0.9.7-1.i386 に必要とされています libruby.so.1.8 は ruby-ldap-0.9.7-1.i386 に必要とされています libssl.so.5 は ruby-ldap-0.9.7-1.i386 に必要とされています #
489 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 13:03:15 ] >>488 ruby-dev のようなもの、libopenssl-ruby のようなもの、openssl のようなもの、のインストールが足りない Ruby関係ないな
490 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 13:13:04 ] rpm コマンドの使い方の話だね 必要なファイルを含むパッケージを表示する方法があるはずだから、それでインストールするパッケージを調べるといい
491 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 13:49:11 ] >>489-490 ruby-devとlibopenssl-rubyについては入っていません。。 ruby-dev`については、自ら作成したrubyのRPMファイルを入れるときに アンインストールしちゃいました。 含んでいそうなファイルを探してみます。 ありがとうございました。
492 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 13:53:01 ] devは作るときのだから、バイナリを入れるだけならなくても大丈夫だと思う。
493 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 14:51:23 ] 結局、 # rpm -qa | grep ruby ruby-irb-1.8.6.287-1.el5.kb.1 ruby-libs-1.8.6.287-1.el5.kb.1 ruby-1.8.6.287-1.el5.kb.1 ruby-devel-1.8.6.287-1.el5.kb.1 こんな感じに拾ってきたrpmを入れてから、 #rpmbuild -ta ruby-ldap-0.9.7.tar.gz を実行して、自分でrpmファイルを作ったら、インストールできました。 この状態だとgemが入れられなかったので、rubyのrpmファイルを自前で作成して インストール後、上記の状態にしたのでgemがどっかで不具合を起こさないか不安ですけど。 ちなみに、gemがインストールできないのはrdocがロードできないとか怒られた。 rdocのrpmファイルってどこかに落ちてるんでしょうか?
494 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 14:56:39 ] ディストリビューションオフィシャルリポジトリの存在を無視するな
495 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 20:54:03 ] 関連付けでファイルを開きたいのですが、 どうすればいいでしょうか。 path ="test.txt" system("start path") これだとコマンドプロンプトが立ち上がるだけで 関連付けでファイルを開いてくれません。
496 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 21:01:50 ] コマンドラインから「start path」という9文字を入力してEnterしてみ それと同じことが起きてるだけ
497 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 21:03:03 ] system("start #{path}")
498 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 21:43:35 ] >>497 出来ました! ありがとうございます。 m(_ _)m
499 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 22:13:54 ] あと10日で1.9正式リリースなわけだが大丈夫なの? 1.9向けにライブラリ作っていい?
500 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 22:26:51 ] 対 応 で き る も ん が 作 れ るなら作ってみな という感じだ 特にEncode関連
501 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 22:29:24 ] 文法エラーが出なくなる程度の対応は進めてもらえると いちユーザーとしてもいきなり挫折しなくて済んでいいかも ruby1.9 ./hoge.rb しただけで普段見たことも無いファイルのやたら多い行数のとこでSyntaxErroroとか挫けるし
502 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 22:30:51 ] >>499 1月に延期されたとかなんとか
503 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 22:32:38 ] 1.9に自作ライブラリを対応させるためのHOWTOとかそういう文書ってある? 1.9.0 features を読んで逐一チェックするしかない?
504 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 22:51:10 ] >>499 12月25日に予定されてるのは、1.9.1のRC(リリース候補)で正式版じゃない といっても、現時点でもう1.9.1の仕様は固まってるはずなので、今から作り始めても良いと思うが
505 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 22:51:59 ] >>503 たぶんrubikitichがホッテントリ狙って書くよ。
506 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 22:58:22 ] ぬう
507 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 23:10:00 ] 下の文字列がなぜ文字化けするのですが、何が原因でしょうか。 $KCODE="s" tut = "12月28日 夢見師(プリンセスソフト、7,140円) " p tut
508 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 23:13:46 ] s?
509 名前:デフォルトの名無しさん [2008/12/14(日) 23:14:57 ] すいません、 #!/usr/local/bin/ruby -Ks の1行入れてなかったことによるものでした。お騒がせしてすいません。 >>508 sjisのことです。
510 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 23:49:31 ] やっぱり詰まった...。 以下a1の文字列の内()とその中身を消したいのですが、 なぜか ) だけ残して全て消えてしまいます。 #!/usr/local/bin/ruby -Ks $KCODE="s" a1="最強 東大将棋6(毎日コミュニケーションズ、2,940円) " a1 = a1.gsub(/.*?月.*?日 /,"") a1 = a1.gsub(/(.*?円)/,"") p a1
511 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 23:53:36 ] 正規表現中のカッコは特別な意味を持つメタ文字だよ 正規表現中でカッコそのものを表すなら \( や \) のようにエスケープしなきゃだめ
512 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 01:03:05 ] >>511 え゛っ、そうなんですか!! /に\/しなきゃならないのは知っていたですが、()もでしたか。 他でもポカしてそうだな。 ご解答ありがとうございます。
513 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 01:04:30 ] >512 英数はそのまま書くとその文字、\を付けると特別な意味になることが多い。 逆に記号はそのまま書くと特別な意味があることが多く、\を付けるとその文字ってことが多い。
514 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 01:41:29 ] てかマニュアルに全部書いてあるんだからきちんと読め 記号の意味そのものは必要なときに調べればいいから覚えなくてよし エスケープが必要な文字かどうかだけを記憶すればおk
515 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 09:11:03 ] ピリオドも意味もってるんだけど 間違ってエスケープせずにピリオド使ってても そのまま動いてしまって気付かないことが多い あとで忘れた頃に問題が表面化するから初心者は注意な
516 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 09:54:50 ] image_paths = filepaths.find_all{|e| /.jpg\Z/ =~ e} で99.99%くらいは普通に動作するんだよな
517 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 10:02:26 ] 正規表現の粒度をどれくらいにするかというのは永遠の問題 わかってない人が「メールアドレスにヒットする正規表現を書け」とか課題出したりするんだが
518 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 10:27:14 ] "(a)" から /\s*\(a\)\s*/ を生成するのってどうやるんですか? a = "(a)" /\s*#{a.escape}\s*/ みたいに書ければいいんだけど
519 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 10:41:09 ] >>518 マニュアル読んどけ Rubyの正規表現はただのオブジェクトだからRegexpクラスのメソッドで生成できる /〜/ で書くのはただのわかりやすいエイリアスに過ぎない あと、半角スペースと \s には直接の関係はないから、あらかじめ \s で書いておくしかないよ 個人的には半角スペースを \s で表現するようにするのは後々罠に落ちるから全くお勧めしない 半角スペースがあるのなら、どんなに正規表現の見かけがマヌケになっても半角スペースで書くべき
520 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 11:10:37 ] >>518 /\s*#{Regexp.escape(a)}\s*/ Regexp.quoteという別名も。
521 名前:455 mailto:sage [2008/12/15(月) 21:43:26 ] >>487 あんちゃん、ありがとう。 せつこ、このスレで日本一のpragger目指すんよ。
522 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 21:57:53 ] 技術的には便利だけど、他のことで代替できるよね、という微妙な立ち位置がどうにも… プラガブルであることのメリットがイマイチ生かされてないんだな
523 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 05:42:09 ] www.google.co.jp/trends?q=PHP%2Cruby&ctab=0&geo=US&geor=all&date=all&sort=0 逆転しそう
524 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 05:46:15 ] www.tiobe.com/index.php/content/paperinfo/tpci/index.html 逆転もなにも、世界的には10位以下に後退したダメダメ言語だけどね (ただ、Pythonが下がってたりLogoが爆上げしてるところから見ても かなり変な順位づけであることは間違いない)
525 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 19:07:50 ] D:/desktop にある、 001test.txt 002test.txt 003test.txt という複数のファイルを、 数字の部分に正規表現を使ったパスで一度に開きたいのですが、 どうすれば良いでしょうか? 次のように書いているのですが上手く行きません。 files = /D:/desktop/[0-9]+test.txt/ system("start #{files}")
526 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 19:21:31 ] リファレンスマニュアルの正規表現のとこ読め あと %r の使い方も調べとけ
527 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 19:24:19 ] よく見たら正規表現関係無いじゃないか Dir.glob
528 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 21:05:12 ] >>527 御返事ありがとうございます。 それで調べたら Dir.glob は正規表現ではなくワイルドカード対応と書いてあるのですが、 これは正規表現には対応していないということではないでしょうか。 >>525 の書き込みはあくまで勉強中の実験のものなので、 実際に使う時にはパスを正規表現で指定したいのです。 また、>>525 では省略しましたが、 開きたいファイルは似たような名前が多いので、最終的には、 name = ●● files = %r("D:/desktop/[-9]+●●.txt") system("start #{files}") というような形にして、●●の部分を書き換えるだけで 任意のの複数のファイルを開けるようにしたいのです。
529 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 21:28:50 ] >>528 そういうのだと全ファイル名から正規表現でselectせざるをえないかな。
530 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 21:50:09 ] Rubyではselectはあまり使わない find_all と呼ぶ
531 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 21:59:18 ] >>528 まったく同じことを繰り返すことになるが、Rubyのオブジェクトについての考え方学んでくれ 返り値がただの文字列なら、それはただの文字列(String クラスのオブジェクト)で、何か特別なものがあるわけじゃない Stringクラスのメソッドが完全に全て動作するし、文字列オブジェクトを引数にとるメソッドは全て完全に動作する メソッドの返り値がどのクラスのオブジェクトなのかということは絶対に意識しないと駄目よ 正規表現を使いたいなら、引数…、まあ、引数の見かけしてないことが多いけど、マッチ試行対象は文字列だ いちばん単純な状態で必要なのは、ディレクトリ中のファイルを文字列で返すメソッド その文字列の一群の中から、正規表現にマッチする文字列を探して、その文字列をどうにかすればいい
532 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 21:59:19 ] >>530 ソースは?
533 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 22:43:20 ] target = 'D:/desktop/*' filter = /\d+test.txt/ system(Dir.glob(target).select{|i| i =~ filter}.unshift('start').join(' '))
534 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 00:24:48 ] >>533 なあ、初心者スレなんだから、もっと分かりやすく書こうぜ filenames = Dir.glob('D:/desktop/*') filenames = filenames.grep(/^¥d+test¥.txt$/) system "start #{filenames.join(' ')}"
535 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 00:34:21 ] >>534 改行が存在しない文字列に対して ^ と $ は不適 代わりに \A と \Z を使おう
536 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 00:43:57 ] どなたかアドバイスください。ruby1.8.7です。 require 'tk' がうまく いきません。以下のようなメッセージが表示されます。 in `require' : no such file to load --tk (LoadError) どうすればいいでしょうか?
537 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 00:46:52 ] >>536 Tcl/Tkが入ってないんじゃね?
538 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 00:48:23 ] >>536 tkライブラリを見つけられなかった。 tkがインストールされない環境(ってなんだろ?)か $LOAD_PATHがおかしいんじゃない?
539 名前:536 mailto:sage [2008/12/17(水) 01:02:12 ] sudo find / -name tk で検索したところ /usr/local/lib/ruby/1.8/test/unit/ui/tk /usr/lib/ruby/1.8/test/unit/ui/tk が見つかったんですけどこれとは違うんでしょうか? ちなみに echo $LOAD_PATHでは何も表示されませんでした。
540 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 01:13:10 ] >>534 質問者の求める「正規表現の使えるglob」が提供されて無いから別解を提示しただけ 分かりにくいってのはわざとそうしてるんだから許してよ >>539 それ違う OS何?tcl/tk入ってる?wishコマンド使える?
541 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 08:10:32 ] >>535 >改行が存在しない文字列に対して ^ と $ は不適 逆だろ。改行が存在しない文字列だからこそ ^ や $ を使っても構わない。
542 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 08:13:15 ] >>540 >分かりにくいってのはわざとそうしてるんだから許してよ なんでそんなことをするの 分かりやすく書けないのをごまかしてるだけじゃねーのかよ
543 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 08:22:36 ] >>541 あまりRubyの正規表現に詳しくない人間が見たら 「ああ^と$は文字列先頭と末尾なんだな。Perlと同じなんだな」とか 勘違いしちゃうよ
544 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 08:44:02 ] >>534 >system "start #{filenames.join(' ')}" system 'start', *filenames でよくね?
545 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 10:21:20 ] >>544 そんなこと言ったら2行目はメソッドチェーンで消えるし、 対象ディレクトリが専用ディレクトリならそもそも Dir.glob のワイルドカードつき文字列でも充分だ 君が *引数 をオボエタテだからだからといってわざわざ難しくする必要はない
546 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 10:28:48 ] >>541 目に見えない文字や場所にマッチする正規表現は慎重に使ったほうがええぞ 半角空白にマッチさせるために \s を使ったりしないだろ それと同じこと
547 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 10:30:19 ] >>545 544じゃないけど、一般にsystemの引数は ' ' でjoinするより * で渡すほうが空白を含むファイル名等の問題をより安全に回避できるので、* のほうがお勧めだけどね
548 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 10:37:16 ] *の引数展開はマニュアルでも辺鄙なとこにしか書いてないからな 使うなら堂々と初心者向け解説の3ページ目から使いまくるくらいの感じにして欲しいとは思う
549 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 10:45:05 ] ` mkdir foo mkdir bar ` みたいに途中でシェルスクリプトだらだら書けるようなやり方ってない? 上の書き方だとmkdir fooだけ実行されるっぽい
550 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 10:49:19 ] `` はシェルコマンドを実行したいときに使う記法じゃないぞ 返り値が必要なときに使うもんだ system 使え
551 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 10:57:56 ] >>544 >>547 やってみた?
552 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 11:17:32 ] 534です。 >>547 たいへん参考になりました。 ただ初心者スレで使うには説明が必要ですね。
553 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 11:21:00 ] >>550 system " mkdir foo mkdir bar " でも変わらなかった
554 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 11:31:24 ] >>553 シェルスクリプトとみなせる環境であるなら全部実行できるはず 動作しないとしたらWindowsかCygwinだな
555 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 11:33:20 ] 渡した文字列がshに渡るんだから mkdir foo; mkdir bar だろう。 つーかそんなことしなくても、 mkdir foo bar でいいだろう。
556 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 11:35:50 ] >>555 最新5レスしか読めない携帯からのご参加ですか?
557 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 11:38:56 ] >>555 mkdir したいって話じゃねーだろ >>553 Windowsではでっかいひとつのスクリプトとして実行するしかなさそうだな
558 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 11:39:43 ] つーか、全部シェルスクリプトで書けば? system "foo.sh" したらいいやん
559 名前:540 mailto:sage [2008/12/17(水) 12:15:12 ] >>542 初心者にはメソッドチェーンが読みにくいかもしれない、とは思ったけど 読み解くのも勉強になるだろうと思ってそのまま書いた grep と system(*args) は知らなかったから書き直すよ target = 'D:/desktop/*' filter = /\d+test.txt/ command = 'start' system(*Dir.glob(target).grep(filter).unshift(command))
560 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 14:15:15 ] >>559 >system(*Dir.glob(target).grep(filter).unshift(command)) なぜわざわざunshiftを使うのか分からん。>>544 の通りに system command, *Dir.glob(target).grep(filter) でええやん。
561 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 14:34:26 ] すっごい前に、配列からの抽出にpopとshiftを使う子がスレにいたな キューじゃないものに pop とか使ったらダメよ混乱するから
562 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 15:00:35 ] >>530 RubyのselectはSQLのselectじゃなくて Smallltalkのselectに由来するって知ってるか?
563 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 15:09:54 ] >>561 普通に使ってるし、混乱するって話もあまり聞かないぞ そもそもpopやshiftを使わないとすると、代わりにどんな風に書くんだ?
564 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 15:14:58 ] >>562 「外来語」の detect と select で悩むくらいなら find と find_all を使うなあ、俺は というかなんでそこで SQL が出てくるんだ?
565 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 15:21:17 ] 当時の様子は知らないし、同じくキューでない配列にも普通にpop/shiftは使うけど 配列から取り除くことが作用ではなく副作用になる場合以外、 「配列から取り除く(ついでに値を得る)」ではなく 「値を得る(ついでに取り除く)」だと思ってるとミスするという話かと。 def get_first(ary) ary.shift end ary = [1,2,3] put get_first(ary) # aryが破壊される
566 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 15:35:31 ] >>563 同意 queue じゃなくても、popもshiftも使うよな
567 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 15:38:04 ] キューでもないのにpopが積極的に必要になる場面が思いつかない イテレータ拒絶派か何かか?
568 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 15:42:26 ] >>567 split結果の先端や終端にゴミついてるのが確実なときに切り落とすためとか。
569 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 15:55:45 ] >>568 delete_at(0) 配列先頭のデータが欲しいときに data = arr.delete(0) と書くのが奇妙なのと同程度には # 先頭は不要 arr.shift と書くのは奇妙だと思う shift に関してはコマンドライン引数を順に扱うときに shift コマンドを使った経験が後を引いてるのかもしれないが、 ここは Ruby だし shift は変
570 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 15:57:55 ] そろそろ誰の何の質問の答えているのかはっきりさせようか
571 名前:デフォルトの名無しさん [2008/12/17(水) 15:58:58 ] じゃあどう書けばRuby的なの?
572 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 16:19:46 ] 配列を破壊しなければうまくいかないかどうかによって違うんじゃね
573 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 16:19:54 ] >>570 >質問・要望・雑談などどうぞ。 >>569 奇妙なのはそのコメント文だろうw 代入操作がないことから不要なことは自明。 返値があるものは代入しないといけないなんてルールはないし。 >>565 のように先頭や末尾の要素を配列から取り除くのが主の操作で、 popやshiftにそれ以上の意味(=キュー専用)はないと考えてる。 だからdelete_at使えというのは、firstやlastもat(0)やat(-1)にしろと 言っているように聞こえる。 キューでない配列に対してpopやshiftがよろしくないなら Array#pop #shift #push #unshiftは廃止してQueueクラスを用意するべき。 運用で制限しようとするほうがおかしい。 (threadのものと名前がかぶるけどそれはさておき)
574 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 19:49:45 ] 難しく考えたことねえな ところでその考え方だとpopはキューに使っちゃダメだろ あれはスタックに使うものでは?
575 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 21:13:20 ] >>569 切り捨てるより、shiftで切り出された結果を使う方が多い param = ARGV.shift line = lines.shift とか
576 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 21:39:05 ] each でブン回すのが Ruby 的ではあるんだろうな
577 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 21:54:01 ] >>574 push⇔shift unshift⇔pop これでキューが出来上がる。ただし左がエンキュー、右がデキュー
578 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 21:59:30 ] 素直にQueueクラス作れよ、というのは昔から言われてはいたな というか、説明もないしキューの概念知らない人もそこそこいるのでは
579 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 22:02:02 ] unshiftだけ遅いから注意が必要
580 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 22:26:23 ] unshift遅くなくね?
581 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 22:33:43 ] >>578 自慢だが知らん popやshiftは配列から1個取る便利メソッドだと思ってる
582 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 23:47:16 ] >>531 丁寧な解説をありがとうございます。 Rubyの「オブジェクト指向」という考え方が何となく判って来た気がします。 つまり、文字列などの何らかのデータをオブジェクトとして扱い、 その内容に変更を加えたデータ(や当該コード)もオブジェクトにでき、 更にそのオブジェクトに変更を加えたデータも・・・・・ という事が限りなくできる、ということなんですね。 つまり「全てがオブジェクト」なんですよね? そして、そのあらゆる段階でのオブジェクト(データ)に自分で名前を付けることによって、 任意の段階でのデータ(オブジェクト)をコードのどこでも簡単に使い回しできるようにしたものが、 Rubyのオブジェクト指向、だと理解しました。 そして、初心者が常に気を付けるべき点は、 データを処理するためのメソッドが「どのオブジェクトを対象としているのか」という点にある、 というのが>>531 でのアドバイスの要点だと思いました。 基本的な理解はこれで合っているでしょうか? (^^;)
583 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 23:53:26 ] Rubyは肯定(否定)戻り読みには対応していないんでしょうか? 肯定(否定)先読みには対応しているようですが。 使っているエディターがPerl準拠の正規表現なので 今までは戻り読みが使えて便利だったのです。
584 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 00:02:13 ] lookbehind は鬼車が要るはず
585 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 00:29:31 ] >>580 a = []; 50000.times { a.push(0) } と a = []; 50000.times { a.unshift(0) } を比べてみな
586 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 00:33:16 ] yield
587 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 00:57:28 ] >>584 ほほう。こういうものがあるんですね。 次期Rubyに搭載予定だそうで凄そうです。 それで鬼車のホームページには、 >* 5.xはUnicode Property/Scriptを提供 >* 2.xはRuby1.6/1.8組込みライブラリとして動作する。 (2006年末で保守を終了) と書いてありますが、どちらをインストールしたら良いんでしょうか。 詳しい方がいらっしゃったら御教示願います。
588 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 08:51:32 ] >>580 じゃないが、試してみて >>585 の優しさを知った。 50000 は絶妙なとこだな。(celeron 1.3GHz)
589 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 09:31:25 ] そんな中古でも売ってないような激遅CPUで話にしゃしゃり出られても困る
590 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 09:47:36 ] 今の平均的なCPU速度ってどのくらいなのかね 自分でちょっと重い処理するライブラリとか公開したときちょっと気になる
591 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 09:51:40 ] >>589 Core2Duoでも相当差が付くぞ
592 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 09:59:23 ] >>589 そのご立派なCPUで500000とか試してみなよ。
593 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 10:05:52 ] 噛み付かれた>>588 カワイソス
594 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 10:09:49 ] >>590 2GHzくらいじゃね
595 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 10:17:43 ] てかPentium4からこっちはよくわからん理由で処理速度が違うから周波数アテにならん
596 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 11:26:59 ] 公開するライブラリの重さなんて気にしなくてもいいんでは? 使う人次第で負荷なんて桁で変わるんだし。 軽く使えるノウハウでもついでに書いとけば喜ばれると思うけど。
597 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 12:02:34 ] RubyのArrayはリストとかじゃなくてまんま配列なので、 pushと違ってunshiftは必ずメモリのコピーが発生するから ってことかな>速度差
598 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 12:34:38 ] IronRubyって終わったんでしょうか?
599 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 15:12:50 ] >>587 どちらもインストールしないでrubyの1.9.1をインストールする。 まだリリースされてないけど。
600 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 15:13:58 ] >>598 終わったというか、まだ始まってない。 そもそもIronRubyの動作基盤であるDLRがまだリリースされてないし。
601 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 15:19:49 ] Ruby で「静的 HTML に変換して出力してくれる入力テンプレシステム」って何がありますか? * で始めると見出しとか、 - で始めるとリストとか、そういうので適当な日記的 HTML を楽に書きたいです 日記や Wiki みたいな動的機能はいらないです サーバにアップロードするときに Ruby スクリプトで変換して FTP するとか、そんな感じなんですが
602 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 15:36:51 ] RD は死んでる? gem でイイのないもんかね
603 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 15:41:45 ] Hiki に Wiki 書法用のパーサが付いてたような気が
604 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 15:42:53 ] WikiCreoleパーサをさがしてみるといいんじゃないか? あるかどうか知らんけど。
605 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 15:48:25 ] RedCloth とか BlueCloth とか。 日本語がちゃんと扱えるかどうかは知らないけど。
606 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 16:08:25 ] つWikiforme 使いやすいとは言えないがかなり面白い。 これとTenjin組み合わせれば・・・とか妄想してる。
607 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 16:09:43 ] rake で sh "command" としたときに、command が画面に表示されないんですが、そんなものでしょうか。 どんなコマンドが実行されているか表示されてほしいんですけど。
608 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 17:18:08 ] Installing ri documentation Installing rdoc documentation これでバカみたいに遅いのはなぜ? 中で何やってこんなに遅いの?
609 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 17:21:52 ] ソースコードを解析してドキュメントを作ってるから、だと思う。多分
610 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 17:29:06 ] ファイルが細かくて多いと死ヌほど時間かかる印象
611 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 17:30:06 ] あれってなんで事前作成してないんだろ。 環境によって出力結果変わったりするもの?
612 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 17:31:55 ] >>611 できるものがでかいから。
613 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 17:35:48 ] まあつまりファイルサイズをケチってるわけだな 実際のドキュメントを見るとわかるがまあ結構デカい デフォルトデザインのドキュメントくらい添付してもいいと思うんだが、 まあ、全パッケージの全バージョンを保持してるわけだし、 それぞれに2種類のドキュメントをさらに保持というのは確かに辛いかもしれず
614 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 17:53:36 ] 回答サンクス。でも所詮は圧縮効率よさげなテキストでしょ。 パッケージはgzipとかしてるだろうし、試しにzipアーカイブに・・・ rubygems-1.3.1/rdoc/ 2,425,167byte -> zipped 820,211byte 把握したw
615 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 18:16:02 ] 余裕じゃん
616 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 18:45:30 ] >>603 HikiDocか。 >>601 Hikiのは古いから、HikiDocでぐぐって(単体で保守されてる) あとはRakeと連携して細かいところを自分で書けばおっけーじゃね。
617 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 19:17:03 ] >>601 Marukuもあるよ 高機能な割に、いまいち安定しないが
618 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 19:26:32 ] >>611 >あれってなんで事前作成してないんだろ。 事前に作成できるよう指定できるよ。 ようは各gem作者がそれを指定してないだけ。
619 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 20:10:37 ] >>599 鬼車のを今の1.86で組み込んで使うことはできないんでしょうか? 戻り読みの正規表現が使えないと非常に困るのです。 ネットで調べたら「VC++で鬼車をコンパイル云々」と出て来ましたが、 プログラミングはRubyから始めたばかりなので、 別のプログラムが必要とかになるとお手上げなのです。 何とかならないものでしょうか。鬼車の2.x系で構わないので。
620 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 20:18:19 ] 鬼車を使うか旧来のregexエンジンを使うかはコンパイルオプションで 決まっちゃうので、自分でコンパイルがお手上げなら、鬼車を有効に してあるバイナリを探すしかない。あるかどうか知らないけど。 駄目ならRubyでやるのを諦めるしかないと思うけど。
621 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 21:13:29 ] 鬼車gemもあるな。 リテラルの/.../だと組込の正規表現クラスを使ってしまうので、 全部明示的にメソッド呼んで組み立てる必要があるが。
622 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 21:29:29 ] gem のライブラリのファイルをどこで誰が読んでるかを調べる方法はある? gem 'package_name', '=1.0.0' でバージョンを指定してるはずなんだけど、 /usr/lib/ruby/1.8/rubygems.rb:142:in `activate': can't activate package_name (>= 1.0.1, runtime), already activated package_name-1.0.0 (Gem::Exception) という例外が出て動作しない 1.0.0 を指定してるんだから 1.0.0 だけ読んでくれよ っていうかバージョン指定でインストールさせるライブラリの作者は安易に require だけすんな氏ね
623 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 21:32:02 ] >>620 レスありがとうございます。 戻り読みが使えないのは大変に困るので、 素人でもコンパイルと言うものができるなら挑戦してみようと思います。 ええと、ネットで調べたのですが、 Rubyと鬼車のソースを手に入れて解凍し、 鬼車の解凍フォルダをRubyの解凍フォルダに入れて、 Visual C++ Toolkit 2003 Commandでコマンドを入力してコンパイル で、基本的な流れは良いんでしょうか。 鬼車を組み込むために特別なことは必要ないのでしょうか? >>621 できれば他の正規表現と全く変わらないように使いたいので、 鬼車を組み込んだRubyの方がありがたいのです。
624 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 21:39:26 ] >>623 なんかすごいことしようとしてるなー ちなみに、その戻り読みが必要な正規表現ってどんなの? もしかしたら、戻り読みが必要ないかたちに書き換えられるかもしれないし。
625 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 22:13:45 ] >>624 > なんかすごいことしようとしてるなー そんなに素人には敷居が高いのでしょうか? 確かに戻り読みは全ての正規表現に使うわけではないので、 >>621 さんの鬼車gemというのを使った方が良いのでしょうか。
626 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 22:17:53 ] たぶん、 Object.const_set('Regexp', ORegexp)とかしてしまえば(警告出る)、 Regexp.newで作った後は同じように使える(と思う)から、 /.../と書けない以外はそれなりに使えるんじゃないだろうか。
627 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 22:18:01 ] コンパイルとか一回やっとくと後々役に立つこともあるだろうから やっといてもいいと思うけど。 Cygwinじゃダメなの?
628 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 22:58:02 ] >>607 -v
629 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 23:06:19 ] >>623 「鬼車を組み込むために特別なこと」は鬼車のドキュメントに書いてある。 それに従えば大丈夫だと思うよ。
630 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 23:48:15 ] 「ひらがな ←→ カタカナ」の変換ってどうやるんでしたっけ。
631 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 23:56:38 ] >>630 Ruby単体では難しいな NKFに頼るのが妥当か
632 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 00:01:56 ] プログラムのlogを自分宛にメールで送りたいと思ったんだがpop before smtpってよくわからん ○行処理完了,×行目失敗,△行目失敗...ぐらいのちょっとしたものなのに
633 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 00:05:43 ] >>632 そのまんまだよ smtpの前にpopでただアクセスすればいい 履歴はサーバが短時間記憶してくれているから普通にsmtpでアクセスだ メール関連は詳しく説明するとSPAM送るアホが出るからどこも親切にはしてくれないだろうね
634 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 00:15:20 ] >>631 サンクス
635 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 00:51:58 ] >>630-631 一方向の変換ならString#trじゃダメ?
636 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 09:48:35 ] aという配列の要素に、正規表現でキャプチャした値を入れたいです。 具体的には a[0]=$1 a[1]=$2 以下同様です。 これを 0.upto(4) do i a[i]=$(j+1) end とかやってもコンパイルエラーがでてしまうのですが、組み込み変数$1,$2・・・に イテレータを利用してアクセスできる方法はありますか?
637 名前:636 mailto:sage [2008/12/19(金) 09:49:51 ] >>636 は書き間違いました。 a[i]=$(i+1) です。
638 名前:636 mailto:sage [2008/12/19(金) 09:54:02 ] 自己解決しました。 0.upto(4) do i a[i]=$~[j+1] end でいけました。一人で何やっとるんだ俺は。
639 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 09:56:11 ] 自己解決ハヤスw
640 名前:636 mailto:sage [2008/12/19(金) 09:59:49 ] >>638 は書き間違いました。a[i]=$~[i+1]です。もう俺は死ね。
641 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 10:06:44 ] 萌えた とりあえず a = $~[1..-1]
642 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 10:07:51 ] $~.capturesオススメ
643 名前:641 mailto:sage [2008/12/19(金) 10:10:44 ] 1.8から追加された便利メソッドか。老害の俺も死んでくる
644 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 11:00:36 ] もちつけ >638
645 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 11:53:42 ] >>631 NKFにそんな機能あったっけ? ていうか、ひらがな←→カタカナなら str.tr 'あいう(略)アイウ(略)', 'アイウ(略)あいう(略)' でどうだろう。「ヴ」をどうするかとか問題はあるけど。
646 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 12:45:16 ] >>645 irb> puts NKF.nkf('--hiragana', 'ルビーは超うんこ').toutf8 るびーは超うんこ nil irb> puts NKF.nkf('--katakana', 'ルビーは超うんこ').toutf8 ルビーハ超ウンコ toutf8は表示用
647 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 12:51:20 ] きれいなプログラムを書くには 箸キプログラミング基礎 ttp://d.hatena.ne.jp/kiyo560808/20081215/1229363279 …4点くらい
648 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 12:54:27 ] このスレの住人はRuby嫌いなのか
649 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 20:18:16 ] File.open と、単なるopenの違いは何ですか?
650 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 20:54:14 ] Ruby1.91はいつ出るのでしょうか? 検索したら、 「Rubyf1.91 2007年12月リリース」とかいうページが出て来るし。
651 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 20:59:17 ] >>649 普通にファイル開いて使ってるぶんにはどっちも同じです File オブジェクトを返します 好きなほう使ってください File.open 派が若干多いような雰囲気はするけど
652 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 21:20:28 ] >>651 同じですか サンクス
653 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 21:26:50 ] >>601 です いろいろフォーマット扱える Webgen に手を出したらもうぜんぜん動きません reStructuredText とか文法いいなーと思うけどこれ Python なんだよね 教えてもらったものいろいろ試します せんきゅです
654 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 21:31:59 ] >>651 の >普通にファイル開いて使ってるぶんには 普通でない場合を勝手に補足。 組み込み関数のほうのopenはPerlのopenみたいに"|cat"みたいなパイプの繋ぎ方を 半端にサポートする。 あと、open-uriを使う場合も違いが出る。
655 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 21:39:11 ] RubyでMatlabの行列ファイルを読みたいんだけどいいライブラリないですか?
656 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 21:56:41 ] 全部Matlabで完結したほうがよくね?
657 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 22:06:19 ] >>656 実は、データファイルを持ってきてシミュレートせよという課題なんですが Matlabがなく、OctaveはまともにWindowsでは動かないので…
658 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 22:24:43 ] そういうのはデータファイルだけもってこいよ
659 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 02:39:59 ] Ruby on railsは、まともなスピードで動かす場合、 月5,000円のレンタルサーバーが必要です。 一方、cakephpなら、月500円のレンタルサーバーで 十分なスピードで動きます。
660 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 08:29:05 ] >>658 1.配布されてるデータがMatlab形式 2.解析方法がワカンネ 3.これを使ってk-NN法の実験をしなくちゃならない(レポートの提出はあさってAM10:40) 4.私はMatlabを持ってない \(^o^)/
661 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 08:42:09 ] >>660 エディタで開け バイナリならMatlabスレで聞けば目で読める形式にしてくれるだろ
662 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 08:53:53 ] >>661 バイナリですよ で、どこの板にありますか?
663 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 09:45:04 ] 見つかりましたがなんか雰囲気が違います
664 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 10:05:56 ] Windows版のOctaveを使ってファイルの変換だけやって テキストファイルにしてしまえ いくらWindows版Octaveが不安定といっても ファイル読んで書くくらいならできるだろう もしくは、仮想マシンにLinuxいれてでもOctaveをつかうとか
665 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 10:44:07 ] >>664 とりあえず書き出し中。ただ、ディスクが逼迫しているのできちんと書き出せるか かなり不安だが。
666 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 10:52:43 ] とりあえず書き出せた。テキスト形式の解析も完了。 さあRubyでがしがし処理するか
667 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 19:08:36 ] 「10日でおぼえるRuby on Rails」と「はじめてのRuby」を読んだばかりの Ruby歴2週間のおれに教えてくれ。 Rails2.2を入れたいのだが、Ruby1.9.0Xでいいの?1.9.1の未完成版は止めた方がいい? 仕事じゃないから人柱でもなんでもいいけど、 慣れない環境であまりにも動かないと何が何だか分からなくなってつらい。 最新版命主義だから1.8.6Xはよほどひどくないと考えていないっす。
668 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 19:12:33 ] Rubyの最新版は1.8.7だよ 1.8.6は古いから、しがらみも資産もない新規さんなら1.8.7でウキウキ新機能をエンジョイしろ Railsも完全に動作するし
669 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 19:22:18 ] >>668 レスサンクス 1.8.7ってあいのこみたいなイメージがあるのだが。 1.9系みたいにマルチバイト文字列を簡単に扱いたいんだけどできる?
670 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 19:51:18 ] 結局速いのがいいから1.9.1系にしちゃった。不具合上等。サンキューな。
671 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 19:54:11 ] さて果たして670がどうなるのか ちょっとワクワクしてきた
672 名前:632 mailto:sage [2008/12/20(土) 20:05:21 ] >>633 gmail使うことにしました 我ながらなんという遅レスか
673 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 20:44:50 ] >>660 Matlab持ってる研究室尋ね歩いて使わせてもらえ
674 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 21:33:35 ] 1.91はまだか。
675 名前:670 mailto:sage [2008/12/20(土) 22:26:30 ] Vista64を使ってるから、1.9.1最新(64bit)入れたけどgemが動かず。 1.9.0最新(64bit)入れたけど動かず。1.9.1最新(32bit)入れてようやくRailsのインストールまで終わった。 落としたバイナリのzlibがだめなのかなと思ったが、疲れたから完璧ということにした。
676 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 22:40:31 ] Vista 64ビット版で1.9.1に挑戦するとは……なんという茨の道 でもそんな根性のあるユーザーは嫌いじゃないぜ
677 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 22:48:29 ] >>676 嫌いになる可能性しかないような気がするんだが 問題切り分けできない状態でなにが勉強か
678 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 23:46:21 ] 32bitや64bitという言葉が出てくるんだから、まるっきりコンピュータの素人というわけでもなかろう。 たぶん誰も助けてやることはできないだろうけど、がんばれ。
679 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 09:12:31 ] >>673 とりあえずなんとかOctaveでテキスト形式に変換完了。 今延々回してるがかなり長くなりそうorz
680 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 09:35:39 ] そもそもRubyは学術計算には向かない
681 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 12:18:43 ] >>680 何をするかに依るが、簡単な数値計算には俺は使うよ。 一行で書いて答ポンと出す感じのコード。向いてると思う。 ちょっと入り組んでる計算(シミュレーション、微分方程式、FFT etc) だと C++ で書くけど。
682 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 12:34:26 ] 計算が多少複雑でも、コード書くことだけ考えればRubyで十分扱えると思う むしろ問題なのは処理速度
683 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 12:35:45 ] 行列演算の結果狂ってるとかいうのなかったっけ
684 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 14:07:22 ] 学術計算にいまどきプログラミング言語か 入り組んでいる計算なら mathematicaとかmatlabのほうが向いてると思うね 簡単な計算ならlinuxについているbcが向いてる
685 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 14:09:34 ] mathematicaも立派な関数型言語搭載のプログラミング環境ですから
686 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 14:10:34 ] はいはい、「汎用の」が抜けてた抜けてた
687 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 14:29:33 ] 巨大な計算をする時はやっぱmathematicaやmatlabは遅い。 とは言え、代替物としてRubyを使うのもどうかとは思うが。
688 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 17:00:04 ] nokogiriのgemインストールが失敗します。 riの生成に失敗しているようなのですが、これはどのように対処したもんでしょうか? > gem install nokogiri Successfully installed nokogiri-1.0.7-x86-mswin32-60 1 gem installed Installing ri documentation for nokogiri-1.0.7-x86-mswin32-60... ERROR: While executing gem ... (NoMethodError) undefined method `new' for nil:NilClass > ruby -v uby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32]
689 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 17:31:48 ] >>681 計算時間の見積もりが4日とかorz 256次元のベクトルの距離を頻繁に求めるので手間かかりすぎ。 ある1本と別の4000本との距離を求めるだけで45秒。 使ってるクラスはmatrixに入ってるVectorクラス。
690 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 19:55:22 ] >>688 $ gem install --no-ri nokogiri とりあえず。ちなみに gem help install で調べられる。 ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32] gem 1.3.1 では問題は起きなかったっす。
691 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 21:08:15 ] >>690 rdocもなんか失敗したので、これでいけました。 gem install --no-ri --no-rdoc nokogiri ありがとう。
692 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 21:10:09 ] ちょいと質問なのですが、 HTMLファイルの一部を書き換えたいのですが、 nokogiriとか使うとパースや部分的なノード置換がすごく楽なのですが、 出力すると(to_html)元のHTMLがかなり崩れてしまいます。 元のHTMLをなるべく維持したい場合はどうしたらよいものでしょうか?
693 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 21:13:02 ] 見掛けが崩れるだけで、htmlとしては大部分が同じはずだが HTML上の改行位置や空白数なんかも維持したい場合は正規表現で置換するしかないな
694 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 21:19:33 ] フラットな処理で何とかなるならHTMLSplitとか
695 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 21:35:38 ] rubygemsのsyntaxってあんじゃん なんていうか、マトモなCSSってどこかにない? vimやEmacsのハイライト意識したやつとか RubyとHTMLのだけあればいいんだけど あのRubyのとか酷過ぎるだろ常識的に考えて
696 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 21:42:02 ] >>693-694 レスありがとう。 なるたけ維持したかったので、頑張って正規表現でgsubしてみました。 そんなに複雑じゃなかったのでなんとかなったみたいです。 お騒がせしました
697 名前:デフォルトの名無しさん [2008/12/21(日) 22:03:17 ] for i in 1..50 hoge end の 50 を a を Array として for i in 1..(a.size) としたらだめのようでした。 aのサイズだけ for を走らせたい場合、Ruby はどうするのがよいでしょうか?
698 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 22:07:31 ] 普通はこうする。 a.size.times { |i| p a[i] }
699 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 22:09:38 ] >>697 a.each do |e| p e end Ruby では for はまず使わない
700 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 22:10:35 ] >>697 よのどのことがないかぎり、Rubyでは単純ループにforは使わないと慣習があるぞ >>698 でよいかと思う
701 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 22:10:50 ] インデックスが欲しければこう a.each_with_index { |e, i| }
702 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 22:11:32 ] ごめん、>>699 だ
703 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 22:13:40 ] a のサイズ分ループしたいけど、 a の要素を使わない時は >>698 だっしょ。 a の要素を単に順番に使いたいだけの場合は >>699 で、 a の要素とそのインデックスを両方使いたい場合は >>701 だ。
704 名前:デフォルトの名無しさん [2008/12/21(日) 22:17:21 ] >>698-701 みなさま本当にありがとうです。 for をそもそも使わないのか・・・そもそも入門からおかしかったようです。
705 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 22:19:16 ] もちろん普通はfor使わないのは分かるんだがなんで>>697 が動作しないんだ? 範囲式に制限でもあるのか?
706 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 22:21:00 ] 0 オリジンじゃないから 配列にアクセスする部分で死んでるとか
707 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 22:23:11 ] そうだな 50番目の a[i] で nil の NoMethodError でも出てるのだろう
708 名前:705 mailto:sage [2008/12/21(日) 22:33:17 ] なるほど。自分も初心者だが確かにやりそうだ。 まあこういうのを防ぐ為にもforは使わないってことだな。
709 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 23:14:47 ] Rubyを書き慣れてくると、forの書き方はちょっと考えないと 思い出せないようになってくる。
710 名前:デフォルトの名無しさん [2008/12/21(日) 23:17:48 ] freezeしたHashの要素を変更するシンプルな方法はありますか? freezeの意味ないやんってなるけど仕様変更で一か所だけ要素を変更する必要があります freezeしているクラスと同じクラス内なので影響が他のクラスに及ぶことはありません
711 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 23:52:38 ] >>695 「酷すぎる」って言ってるのが syntax-*/data/ruby.css とかのことだったら、あれ以上のもので公開されてるのは多分ない。
712 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 00:08:51 ] >>680-687 遅レスだが(というかなぜか今日は流れ速い)、俺がよく ruby 使うのは 簡単な計算でパラメータ変えて繰り返して使う式ですぐ答が欲しいときかな。 わざわざ Mathematica とか Maple, Maxima 立ち上げる気がしない程度のもの。 あと、これらでもプログラム書けるけど個人的には ruby の coding の方が好き。 3次方程式の解レベルの複雑さ。Ruby で端末でパラメータ入力して結果 すぐ帰ってくる。bc, とかではできない。多少複雑なら C++ で書いてる。 ruby は遅いし、書き捨て的に使ってるし、mma, maple, maxima とかでも 遅すぎることも多い。
713 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 00:45:33 ] >>710 h = {:ary => [1]}.freeze # => {:ary=>[1]} h[:ary][0] = 2 p h # =>{:ary=>[2]} Hashオブジェクトをfreezeしてもその中にあるオブジェクトまでは freezeされてないから、それを直接書き換えるとか。 これ、本来はfreezeの落とし穴だから気をつけて。
714 名前:デフォルトの名無しさん [2008/12/22(月) 01:38:05 ] 要素を変更したいんですー h = {:ary => 1}.freeze h[:ary] = 2
715 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 01:46:09 ] Are you happy?
716 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 02:00:18 ] じゃあdupしてfreezeされてないコピーに差し替えれば? と言いたいけど別のところに参照されちゃってるんだろうなぁ。 そもそもfreezeしてるコードをいじれるならfreezeやめれば いいじゃんと思うんだけど、freezeしないといけない理由を詳しく。
717 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 03:08:37 ] 文字通り邪悪だけど、 evil-ruby gemをインストールして h.unfreeze
718 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 06:52:25 ] >>710 出来ないことはないけど、不可能と考えて別の方法を探すべきだと思われる そもそも、freezeされてるってことはそれなりの理由があるんじゃないのか?
719 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 10:55:22 ] >>710 びみょーに違うけど、こんなん(不完全だけど)をextendして freezeを遅延させるとか…? やっぱ変だな # 一箇所だけ変えたいところのキーは'hoge'決めうち module HashLasyFreeze def []=(key, val) ret = super freeze if key == 'hoge' ret end end
720 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 15:28:52 ] いくつかのサイトの更新状況を取得するプログラム組んでいるのですが、 File::statしてatimeしたいのですが、サイトで公開されているページの最終更新時間など取得する場合どのようにすればいいのでしょうか。
721 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 15:33:54 ] >>720 require 'net/http' Net::HTTP.version_1_2 Net::HTTP.start('www.example.com', 80) {|http| response = http.get('/index.html') puts response['last-modified'] } こんな感じ。
722 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 20:27:20 ] WindowsXP SP3、OneClickInstaller デスクトップ(や他のアプリケーション上)に文字列を表示させるソフトを作りたいのですが、 それが可能なGUIツールキットってあるのでしょうか? ググってみたところ、ウィンドウの半透明化ができれば可能そうだと思ったのですが、 それが可能なツールキットを探すことができませんでした。 ご存知の方いらっしゃれば教えてください。
723 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 20:37:03 ] いわゆる付箋ソフトだな Rubyでやるこっちゃないねえ 他のC#とかで作れるようになってからその知識を流用してRuby+GUIでやれ 95パーセントくらいRuby無関係だし
724 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 20:40:41 ] Win32OLE.rb
725 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 20:51:05 ] def getWindowLong(hwnd, index) api = Win32API.new('user32', 'GetWindowLong', 'LL', 'L') return api.call(hwnd, index) end def setWindowLong(hwnd, index, gwl) api = Win32API.new('user32', 'SetWindowLong', 'LLL', 'L') return api.call(hwnd, index, gwl) end def setLayeredWindowAttributes(hwnd, crkey, alpha, flags) api = Win32API.new('user32', 'SetLayeredWindowAttributes', 'LLLL', 'L') return api.call(hwnd, crkey, alpha, flags) end gwl = getWindowLong(hwnd, GWL_EXSTYLE) gwl &= ~WS_EX_LAYERED gwl |= ((ratio != 100) ? WS_EX_LAYERED : 0) gwl &= ~WS_EX_TRANSPARENT gwl |= (transparent ? WS_EX_TRANSPARENT : 0) setWindowLong(hwnd, GWL_EXSTYLE, gwl) setLayeredWindowAttributes(hwnd, (ckey ? color : 0), ((255 * ratio) / 100), (LWA_ALPHA | (ckey ? LWA_COLORKEY : 0)) )
726 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 20:55:22 ] GWL_EXSTYLE = 0xFFFFFFEC WS_EX_LAYERED = 0x00080000 WS_EX_TRANSPARENT = 0x00000020 LWA_COLORKEY = 0x00000001 LWA_ALPHA = 0x00000002
727 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 20:56:50 ] >>723 うむ、95パーセントくらいRuby無関係だな
728 名前:722 mailto:sage [2008/12/22(月) 21:11:41 ] >>724-726 レスありがとうございます。試してみます! >>723 ,727 既存のrubyプログラムの処理結果をデスクトップに書きたかったんです。 rubyでどう頑張ってもダメならC#覚えるつもりでした。助言ありがとうございます。
729 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 21:33:18 ] rubyで幾つかのオブジェクトを生成・初期化したかったので、 a=b=c=d=Array.new とかやったら、全部が同じオブジェクトを指してしまうという大惨事に見舞われました。 Cとかなら int a=b=c=d=0; とか書いて複数の変数の生成・初期化が問題なく行われるんですが、rubyでこれをやると 同じオブジェクトが参照されてしまうのってどうなんですか?
730 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 21:37:50 ] >>729 だってそれは初期化でもなんでもなく、単に同じオブジェクトを指すように指示してるだけだもの そのオブジェクト内容が変化すれば全部が変化するというそんだけの話 オブジェクトという考え方をRubyでは無視せんでくれ a = Array.new b = Array.new c = Array.new d = Array.new こうだな Arrayオブジェクトを生成する使い方をしてるならArray.newではなくnilでもいいかも
731 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 21:38:46 ] Cでポインタ使ったことある?
732 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 21:46:33 ] >>729 Array.newが一度しか実行されなければ、Arrayのオブジェクトは一つしか生成されない って見方もできるかと
733 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 21:47:27 ] a,b,c,d=Array.new*4
734 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 21:50:15 ] あーはいはい >>729 Ruby は代入文も値を返す a=b=c=d=Array.new は d=Array.new c=d b=c a=b と全く同じだ a が b=c=d= を「透過して」 Array.new を起動することはない
735 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 21:54:50 ] >>730 たとえば、100個のオブジェクトを生成・初期化したいときには、 a1=Array.new a2=Array.new ・ ・ ・ a99=Array.new a100=Array.new って書かなきゃだめなの? a自体をarrayにしろと言われそうだけど、多数のオブジェクトを生成・初期化したい場合は 一行に一個書くしかないの?
736 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 21:56:01 ] そのためにもArrayを使えよw
737 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 21:56:46 ] a = Array.new(100) a.each { |b| b = Array.new }
738 名前:735 mailto:sage [2008/12/22(月) 22:00:14 ] どうやら俺はデータ構造というものについて真剣に考えるべき時期に来たようだ。 Rubyだけですむ話ではなさそうだ。すまん。このスレからは消えることにする。
739 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 22:09:53 ] a1=Array.new a2=Array.new ・ ・ ・ a99=Array.new a100=Array.new まじでこういうソース見たことあるよ 某上場電気メーカーのソフトウェア部門で
740 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 22:13:20 ] そいつの方が給料いっぱいもらって勝ち組みなんですね わかります
741 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 22:30:43 ] 1.upto(100) {|i| eval "a#{i} = Array.new" } 1.9だと外側のbindingをevalに渡す必要があったりするのかな。
742 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 00:30:25 ] >729 その文って、Cで書くとすれば int array[] = {3,4,7,2,9,1}; int *a,*b,*c,*d; a=b=c=d=array; みたいな感じでは?だからCでも全部同じ配列を指してしまうのは変わりないよ Rubyでも、Fixnum同士ならその代入でも問題は起こらん 違うのは構造体やクラスから生成した、実体同士の代入ってのがRubyに無いことかな
743 名前:デフォルトの名無しさん [2008/12/23(火) 02:50:57 ] Dir.glob("./*") で、ディレクトリを含まないリストを得るにはどうやったら良いのでしょうか?
744 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 02:54:55 ] globは糞なのでls, dirを使いましょう
745 名前:デフォルトの名無しさん [2008/12/23(火) 02:59:04 ] なるべく機種依存のコーディングは避けたいんですが・・・
746 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 03:04:57 ] Dir.glob("*").select {|f| !File.directory?(f) } かな。ちなみに "./" は不要。
747 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 03:18:27 ] 少しスレ違いかもしれませんが、特定のファイルをscanした時だけ 500 Internal Server Errorして落ちてしまうのですが、 タグ内で異様にスペースがやたらあるような文字列にscanすると異様に負荷がかかるとか聞いたことありませんか?
748 名前:デフォルトの名無しさん [2008/12/23(火) 04:40:50 ] >>746 なるほど。ディレクトリ判定を入れればいいのですね。ありがとうございます。
749 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 06:41:46 ] >>747 Ruby自体はHTTPのエラーを出さない それは、サーバが実行したコマンドが正規の出力をしなかったという意味しか持たないよ 原因を知りたかったら勝手な推測は止めて、その正規ではない出力が何かを調べる コマンドラインから実行すれば一発だが、どうせコマンドラインから実行できないんだろうから、スクリプト内の実行部分を begin rescue Exception => e File.open('/自分のディレクトリ/error.txt', 'w'){|f| f.print(e)} end で囲んでRubyの出す例外出力を読め
750 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 07:43:45 ] >>600 wikiみろ
751 名前:750 mailto:sage [2008/12/23(火) 07:44:16 ] 誤爆
752 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 08:30:59 ] Windowsで日本語を扱っています。 require 'jcode' $KCODE='SJIS' str = 'aあいbうえおc' 上記のような時に2文字目までを切り出したいんですが、 「str[0, 2]」では2バイト目までということになってしまいます。 下記のような冗長なやり方しか思いつかないのですが、もっとスマートなやり方はないでしょうか? jcodeのリファレンスマニュアルを見てみたのですが使えそうなものが見つかりませんでした。 i = 0 str_part = "" str.each_char do |x| str_part += x if i < 2 i += 1 end
753 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 08:41:38 ] >>752 str.split('')[0,2]*''
754 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 08:50:16 ] すごくスマートですね! Array経由とは考え付きませんでした。
755 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 09:18:23 ] strがめちゃくちゃ長くて 2文字目だけでいいときは もったいない
756 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 10:06:48 ] 配列内の数値の類似度を求めるのはどうすればいいでしょうか? 偏差なのか、相関係数なのか? スレチですかね・・・・
757 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 10:23:04 ] >>756 配列の要素にアクセスする方法はRubyだな
758 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 10:26:20 ] 「類似度」を定義しないことにはどうにも
759 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 10:33:02 ] >>756 具体例を出してみれば? じゃないと他の人にはわからん
760 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 10:37:29 ] [1, 2, 3, 4] [16, 8, 4, 2] の二つの類似度は 100% です
761 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 10:51:47 ] >>758 さんの言うように定義の問題では。定義をすれば解き方は いろいろある。逆に定義が無ければ何したいのかわからん。 偏差でも相関係数でも変数のタイプでも良いが。
762 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 10:56:24 ] Rubyでスマートな書き方して生産性が上がったためしがないな。 もう何年も使ってるけど相変わらず配列にデータ突っ込んで forかeachでまわしてみたいなBASICと大差ないコードしか書いてないw
763 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 11:02:18 ] >>760 なぜそれが類似度100% ?
764 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 11:03:27 ] Ruby関係ないな
765 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 11:04:53 ] そだな 計算式を持ってきてRubyでの実装方法を聞くとかなら手伝う人が出るかも 計算式の出し方そのものは知らん 教科書なり論文なり読め
766 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 11:19:07 ] Eclipse に RDT を入れて開発しています。 Ruby Explorer で、[Run as]->[Ruby Application] を選択すれば実行できるのですが、 これを、コードを編集するウインドウがアクティブな時に、キーボードショートカットで 実行する方法はないでしょうか? キー割り当てで、[Run Ruby Application] に Binding [F5] When [In Windows] もしくは [Ruby Editor]で割り当てても反応なしでした。 Eclipse のバージョンは 3.4.1 RDT は 1.1.0.200812081651NGT です。
767 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 11:20:22 ] レーベンシュタイン距離でも求めれば?
768 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 13:37:32 ] >>749 自機でやるとエラー吐かないのに、鯖で動かすと特定の文字列を含むファイルだけ 500エラー吐くですよね。テストした結果scanで100パー落ちていましたし。 でも他のファイルなら普通に鯖でも動いている点から見て、作りが悪いのではなくて特定の文字が含まれてるファイルに対してscanの処理がいように重くなったことによる、 負荷の掛かりすぎて500なのではないかと。 >>749 さんの方法も含めつつindexで処理する方法に切り替えや、怪しい文字列の置き換えなど施して処理するなどの方法をやってみたいと思います。 ありがとうございました。
769 名前:768 mailto:sage [2008/12/23(火) 13:47:40 ] 今やってみた所、indexで切り出したら鯖実行で100%コケていた場所を抜けられました。 scanに比べて負荷が緩やかなんでしょうかindex。
770 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 14:00:56 ] 原因を知りたかったら勝手な推測は止めて、その正規ではない出力が何かを調べる
771 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 17:54:55 ] 130MHz駆動の組み込みマシンでrubyプログラムを走らせたら重すぎて笑った。
772 名前:デフォルトの名無しさん [2008/12/23(火) 18:12:34 ] apacheで出してるerror_logみるとか
773 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 18:28:46 ] >>769 できるよ。 以上。 はい次の方。
774 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 19:06:53 ] 自分用ライブラリです。なので、究極的にはどうでもいいんですけれど。 「ローカルファイルを読み込んで、書いてあるデータを変数とかに取り込むクラス」があります。 変数は外部からそれなりの頻度で参照されますが負荷とかは無視して結構です。 class HogeFile def initialize(path) @path = path ... end attr_reader :mtime, data2, ... def parse file = File.read(@path) @mtime = File.stat(@path).mtime @data1 = file.scan(/.../) end end という、HogeFile.new.parse が必要なタイプと class HogeFile def initialize(path) @path = path @data = File.read(@path) end def mtime; @mtime ||= File.stat(@path).mtime; end def data1; @data1 ||= @file.scan(/.../); end end という、なんというか遅延評価?っぽいのって、どっちをメインに使っていくのがいいもんでしょか。 こういうデータクラスってけっこう作るんですよね。
775 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 19:13:25 ] ほぼ全ての変数を必要とする(アクセスしない可能性のある変数というのがまず無い)のなら前者 変数をまとめてPStoreとかに保存する可能性があるとかいう場合も前者 っていうか基本は前者 data4 くらいで超ごっつい正規表現処理があって処理の流れが一瞬止まるとかいうことがあるなら後者がいいかも ネットからファイルを適宜取得するタイプのライブラリでは後者を時々見るな 考え方のベースとなるものは君の言う通り遅延評価だ それが有効かどうかだけで決めちゃっていいと思う あるいはカッコイイかどうかだけでもいい (この場合ほぼ全ての自作スクリプトで後者になって、2年くらいして見返して「あーこの頃は遅延評価時代だー」とか懐かしむことになる)
776 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 19:37:02 ] てかデータクラスにparseさせんな それは別のクラスでやって、結果だけをアクセサ経由でデータクラスに登録しろ
777 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 20:00:17 ] >>776 えー めんどい
778 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 21:05:40 ] >>769 その環境かかないとよくわからんぞ 共有レンタルサーバーなら負荷掛けるとかってに落とすところもある。 見れるならerror_logは最低みとかないとな いや多分、個別の環境かかれても俺はなんともいえんと思うけどw
779 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 21:11:45 ] >>776 主張の理由kwsk
780 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 21:18:50 ] いやそれ自体はそのまんまだろ めんどくさいからやんねーというのも反論そのまんまだ
781 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 21:27:09 ] そういう宗教があるんだろう
782 名前:デフォルトの名無しさん [2008/12/23(火) 21:30:16 ] データとパーサを分けるのは設計の常識みたいなものだけど、個人で作るアプリなら分けなくてもいい。 他人に迷惑をかけないという意味でね。
783 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 23:02:54 ] >>771 むしろ ruby がちゃんと走ること自体結構感心した。130MHz だもの。
784 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 23:08:05 ] 組み込みでも 130MHz とかいくのか・・・。 8〜9年前は普通にノートパソコンで使ってたぜ・・・。
785 名前:デフォルトの名無しさん [2008/12/23(火) 23:25:22 ] Mechanize で質問です。 agent = WWW::Mechanize.new agent.get(url) form0 = agent.page.forms[0] form1 = agent.page.forms.name('form1') form0.name == form1.name #=>true form0 == form1 #=>false となります。 form0とform1とは同じものを参照していると思ってたのですが, どんな違いがあるのですか? form0.action = 'hogehoge'はうまくいくのに form1.action = 'hogehoge'はエラーになるので疑問が生じました。
786 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 23:33:45 ] >>784 うちの自宅サーバ、その頃のノートPCだったりする。(Pentium133MHz、メモリ40MB) RubyのCGIが、起動するだけで4秒かかるよ!! 動き始めるとそんなに遅くないんだけどな……。
787 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 23:40:24 ] >>785 form1は WWW::Mechanize::List だから、= を使った代入は行えない form1.action は form1[0].action の返り値、すなわち action 属性の文字列を返す ttp://d.hatena.ne.jp/kitamomonga/20080402/ruby_www_mechanize_list#www_mechanize_list__method_missing form1.action = 'hogehoge' は文字列に代入するという奇妙なことになっているだけ
788 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 23:48:58 ] このへんの動作と返り値のオブジェクトの種類を全部把握しないと使えなくて紛らわしいので、 WWW::Mechanize::List は最新版 0.9.0 では削除されてる agent.page.forms.name('form1') と書いたら NoMethodError で動作しない Mechanize のバージョンが 0.8.5 かそれ以降なら form_with が使えるよ それより古いなら、name に限っては agent.page.form('form1') がフォームオブジェクトを返すほぼ同じ動作をする form0 == form1 を true にしたいなら、List からフォームオブジェクトを取り出して比較してくれ form1[0] が WWW::Mechanize::Form クラスのオブジェクトを返して form0 と同じもののはず
789 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 00:04:55 ] う、答えになってね > どんな違いがあるのですか? 「agent.page.forms[0] は WWW::Mechanize::Form クラスのオブジェクトを返しているが、 agent.page.forms.name('form1') は WWW::Mechanize::List クラスのオブジェクトを返してる」 が回答でございます だから、 form1 = agent.page.forms.name('form1')[0] と、List 内の要素を明示的に取り出さないと、WWW::Mechanize::Form オブジェクトそのものにはならないよ 「クラスのメソッドは Object#send で動作するし、返り値も普通に返ってくるけど、目的のクラスのオブジェクトではない」という変な状態 抽出作業が完了したら [0] をつけて特定する癖をつけておかないと、今みたいに変なとこで詰まったりするぞ
790 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 00:19:13 ] 120MHzあればRubyは動くよね rubygems は鬼のように重いけど
791 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 00:22:34 ] >>787 …このサイト作った奴バカだろ せいぜい中堅どころのライブラリのメソッド全解説とか何が楽しいんだよ
792 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 00:29:41 ] >>791 現在のRubyはそのような 「こんなことまでわざわざ書く理由って何よ?」 という人の努力によってなんとかうまく支えられております マニュアル書く人しかり、丁寧な導入記事書く人しかり
793 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 00:49:24 ] >>791 真意は知らないけど個人的感想としては、mechanizeのライブラリ構造も 単純ではないしRubyの勉強方法として良い手だと思った。 「理解した(自称)」以上に理解が進んでないと説明することなんて できないんだよなぁ・・・。説明してる内に薄っぺらさが露呈する。 告白デバッグが気付かせてくれるのはまさにそれ。
794 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 00:58:31 ] 以上ちらうら
795 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 03:08:36 ] hpricotでdiv.entryで取得した記事数分ハッシュを作成するにはどうすればよいでしょうか? Keyはentry_1->entry_nまででvalueは単語数とか他で計算した値を入れようと思うのですが.
796 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 03:27:22 ] mechanizeのデフォルトパーサがHpricotからNokogiriになったな。 いつのまに・・・
797 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 05:57:55 ] Railsを使ってプロジェクトを自動生成して ruby script\generate controller main index を実行したのみのプロジェクトでRubyのテストをしています. webrickを起動して localhost:3000/ のhtmlページは,問題なく表示するのですが localhost:3000/main でindexページを見ようとすると 1度目は正常に表示されますが, 更新ボタン(もしくは,アドレスバーの移動ボタン)を押すとWebrickが次のようなエラーを出して終了していしまいます. 127.0.0.1 - - [24/Dec/2008:05:44:28 東京 (標準時)] "GET /main HTTP/1.1" 200 283 - -> /main 127.0.0.1 - - [24/Dec/2008:05:44:33 東京 (標準時)] "GET /main HTTP/1.1" 200 283 - -> /main C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/mysql_adapter.rb:196: [BUG] Segmentation fault ruby 1.8.6 (2007-09-24) [i386-mswin32] This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information. ひとつ目の-->/mainが移動時,ふたつ目が更新時です どのように対応すればいいでしょうか.
798 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 07:21:44 ] >>795 search メソッドの返り値は Hpricot::Elements で、配列のような動作をするっていうか配列でできることは全部できる これに詰まってる要素に当たるものは Hpricot::Elem だ Hpricot::Elem にはタグに囲まれてる文字列を適当に返す inner_text メソッドや HTMLで整形して返す inner_html メソッドがあるし、 Hpricot::Elem オブジェクトから search でさらに探すこともできる それ以上のもんではないので、普通にどうにかして作れ
799 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 08:43:05 ] >>797 [BUG]と出た場合、Rubyのスクリプトレベルの誤りではないので、 開発サイドに再現コードを教えるくらいしかできることはない。
800 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 08:49:16 ] BUGと出ても、自分がわけのわからんオブジェクトを引数でメソッドに渡してるとか 回避できるものもあるけど
801 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 09:45:55 ] 回避できてもバグはバグなんじゃね?
802 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 10:59:53 ] すいません、ググっても解決できなくてハマっているので教えてください。 ruby1.8にて、ptyとexpectモジュールで、自動sshログインをしようとしているのですが。 cygwin上では、問題なく動かせるものの。 solaris(free10)では、spawn('ssh ***.***.**')の所で > open: pty slave: No such file or directory とでてしまいます。 このspawnの内部をsshのフルパス指定にしたり、lsなど他のコマンドに代えても同じでした。 どうもptyモジュールが上手く動かせてないと考えているのですが。。。 特にptyにはパラメータはなさそうです。 ptyがやろうとしてる仮想tty?という処理がなんなのかが理解できてない.... すみません、どなたか動かすヒントだけでも教えてください。
803 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 11:18:49 ] >>802 Solarisスレで聞く
804 名前:797 mailto:sage [2008/12/24(水) 13:03:37 ] >>799-801 こちらの環境が悪いんじゃなくて Ruby(もしくはRails)開発側が悪いってことでしょうか? 手書きでは,まだコードを一行も書いていないので そんなことないと思いたいのですが... Rubyのダウングレードとかで対応できないか今夜にでもやってみます...
805 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 13:22:51 ] >>804 まずは1.8.7-p72のか、せめて1.8.6の一番新しいp287を試してみるべき。 www.garbagecollect.jp/ruby/mswin32/ja/download/release.html one-click installer使ってるんだろうけどこの際我慢。
806 名前:802 mailto:sage [2008/12/24(水) 14:13:10 ] 1.8.7-p27 のソースからのビルドでしたので。 なにかヒントがないかとざっと眺めると、 ./ext/pty を発見。 ダメ元でpty.c をのぞいて、問題点を探してみると、 どうも"TIOCSCTTY "の定義が無い事がまずいんじゃないかと推測。 この情報を元にググってみると 去年の8月、ruby-lang に "Bug in ruby extension" というスレを発見 > I noticed that Solaris 10 does not support TIOCSCTTY so in function > establishShell() the child process closes the slave device and reopens it to ... どうやらSolaris 10 において、ptyの問題が指摘されている模様。 TIOCSCTTY がキーワードみたいだが。 私では何がまずいか理解できない(汗) このスレで問題対応パッチが登場し、最後にmatzさんが"そのパッチをコミットしてくれー"と書いている。 これが今回の私の問題点と同じであるなら、最新版なら動くはずじゃん。と思い・・・. あ、でも、1.8.7-p27 が 1.8系の最新版ですよねぇ。 うぐぐ、この問題と関係がないのかなあ。。。。(´・ω・`)ショボーン >803 レスサンクス。 推測通りsolarisの環境がらみの問題なら、海外で聞いた方がよさそうですね。 英語で聞くのは閾が高いなあ...(´・ω・`)
807 名前:802 mailto:sage [2008/12/24(水) 14:14:57 ] >806 s/1.8.7-p27/1.8.7-p72/
808 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 15:34:50 ] >>786 Passenger入れろw っていうほどのメモリもないみたいだがwww
809 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 16:20:13 ] 以下のようなフォームデータを cgi クラスで受け渡したいと思っています。 <form action="" method="post"> <input type="text" name="server" value="#{server}" /> <input type="text" name="name" value="#{name}" /> <input type="submit" value="更新" /> </form> それも同じ形式のフォームを何個か繰り返しおいて、しかもその個数も可変にしたいと思っています。 さらにそのデータは pstore に保存したいと思っています。 古い CGI での方法ならば変数名 server などに番号をつけて server1, server2 などという変数名として ループで 1..max をまわして処理するというのが思いつくのですが、Ruby 的にエレガントな方法はあるのでしょうか? 配列やハッシュなどを使ってスマートに書く方法があったら教えていただけませんでしょうか。
810 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 17:50:42 ] hiddenを入れれば区別出来るんじゃね
811 名前:797 mailto:sage [2008/12/25(木) 00:36:49 ] >805 どちらをインストールしてみても結果は一緒でした... これってRuby開発者側に伝えた方がいいのでしょうか うちの環境のみの再現だと思うのですが...
812 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 01:18:37 ] rakeで、src/**/*.txt から dst/**/*.html に変換するような file タスクを書きたいんですけど、どうかけばいいですか。
813 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 05:11:00 ] a hrefの値の中にABCっていう文字列があるリンクの中身つまりinner_textを取得するにはどうすればいいでしょうか? hpricotやNokogiriで指定しようにも複数のページでXPATHのaの順番が違っていて取得できません。
814 名前:813 mailto:sage [2008/12/25(木) 05:36:00 ] すいません、事故解決です。 doc/"a[text()*='ABC']"でできますね。 Hpricotとかをtagやセレクタでぐるぐる回すものだと勘違いしてました。 お騒がせしました。
815 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 06:04:46 ] >>811 自分のコードかデータにバグを引き起こす原因があるとは思わないの?
816 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 06:44:34 ] >>815 pc11.2ch.net/test/read.cgi/tech/1227123021/l50
817 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 06:51:44 ] >>797 とりあえず該当の行を見て、まずどこて落ちたのかを調べるべき それでも本体のバグっぽかったら諦めて報告 >>809 本題とは関係ないけど、CGIアプリケーションでPStore使うのはオススメしない rubyのバージョンが古くなるとデータ読めないことがあるから 自分しか使わないスクリプトなら問題はないけど 今ならYAML::Storeオススメ
818 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 13:26:33 ] >>810 hiddenを入れて対処できました。ありがとうございました。 >>817 そうなんですね。YAML::Store に書き換えておきました。ありがとうございました。
819 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 13:59:37 ] >>815 >>797 見てそう思う方がおかしくないか?w でもmysql環境を見直してみる価値はありそう。
820 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 15:36:57 ] 某サイトのurlをopenした所、 uninitialized constant StanderdError (NameError) こんなメッセージが出てプログラムが途中で止まることがあるですけど、これって何が原因なんでしょうか。
821 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 15:38:47 ] >>820 >StanderdError StandardErrorと書いたつもりのどっかでスペルミスしてる。
822 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 15:45:45 ] がっちょわるー class MyHogeError < StanderdError end とか書いてあるんだな がっちょわるー >>820 使ってる外部ライブラリの中から「StanderdError」という文字列を探して「StandardError」に直接書き換えとく
823 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 15:51:11 ] > rubyのバージョンが古くなるとデータ読めないことがあるから これをあまり心配してない俺 その時になってから過去のバージョンの pstore で読んで、新しいバージョンの pstore で書き出せばよくね? PStore を YAML で置き換えて常用するなんてブルジョワジョワジョワに過ぎるだろ
824 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 15:57:22 ] どんなデータをどんだけ保存したいかによるね ファイルが数KB程度で収まるなら読みやすいYAMLのほうがよかろう なんかよくわからん大量のデータの数百KBを読み書きしまーすというのならさすがにちょっと うっかり画像を保存したことがあるが遅くて死んだ
825 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 16:06:11 ] バイナリだとクラッシュしたときの復旧がしんどいから ちょっとしたデータのシリアライズにはyaml/storeがお気に入り。
826 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 16:09:07 ] とりあえず一般ユーザーはこれ使っとけ、と言えるほどのものがRubyにはまだないんだ 用途に応じて使って適宜バックアップだの負荷測定だのしなきゃならん
827 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 16:15:51 ] >>826 ガイドみたいなのがあるといいよね ってるびまにあるのか
828 名前:797 mailto:sage [2008/12/25(木) 16:26:27 ] >819 mysql関係ですか, とりあえず今夜は,sqliteで同じように実装してから 再現確認してみます.
829 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 16:51:39 ] >>821 >>822 begin open("***** ") rescue Timeout::Error rescue StanderdError <<<<<某プログからのコピペまんま rescue EOFErro rescue Exception rescue NameError end こんな感じで例外関係の対処法ググっては追加していた中で某ブログからコピペしたものが、 スペルミスしていたとは..。 即回答ありがとうございました。実は昨日からハマってました。
830 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 17:05:59 ] >>829 コピペうんぬんより、エラーメッセージを*よく*見て原因を考えるクセをつけようぜ!
831 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 22:03:26 ] Ruby学習者の「2冊目の本」、買ったやついる?どう?
832 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 22:24:03 ] エロティックランゲージだかなんだか副題がついてたやつか
833 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 22:26:47 ] 今すぐ買ってくるわ
834 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 22:39:08 ] あれはRuby学習者というか、Rubyを使いたい人向けの本だろ 位置的に初学者本の次くらいなんじゃねーかとは言われてないわけでもないが
835 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 22:46:05 ] 隠しても仕方ないか Rubyで作る奇妙なプログラミング言語 〜Esoteric Language〜 ttp://www.amazon.co.jp/dp/4839927847/ > 1-2 サンプルプログラムに特化した言語、HQ9+ > HQ9+とは > HQ9+インタプリタを作ってみよう > 1-3 8つの命令ですべてを記述する言語、Brainf*ck > 1-4 決して印刷できない言語、Whitespace > 2 Esoteric Languageを作る > Esoteric Languageの設計と実装 > Starry言語の設計 > 付録 Esoteric Language傑作選 > Befunge、 Wierd、Shakespeare、Chef、Unlambda、Grass > False、NULL、AAAAAAAAAAAAAA!!!!、INTERCAL、Malbolge、KEMURI、Taxi
836 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 23:09:53 ] なんかBFスレでは、へんな言語をネタにしたRuby入門本とか言われてたが。 ...GRASS、無いのかw
837 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 23:15:39 ] >>836 GrassとGRASSは違う言語?
838 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 23:27:35 ] あ、Grassです。見えてなかったらしい。すまん。
839 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 23:34:55 ] 新しい「プログラミング言語 Ruby」が来年の1月に出るのか。 1.9.1のリリースが迫って書籍もまた出てきそうだな。
840 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 01:05:48 ] RubyでSQLを用いるときってどういう時ですか? 解析させるデータ数が多いとか相互参照が多いときとかですかね?
841 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 01:11:04 ] リレーショナルデータベースを使うとき...というか、 どういう時にリレーショナルデータベースを使うか、という質問?
842 名前:797 mailto:sage [2008/12/26(金) 05:53:14 ] とりあえず解決したので報告です. 原因はいまだにわかりませんが Railsのヴァージョンを 2.2.2 -> 2.1.2 へとダウングレードすることで正常動作するようになりました. mysql postgres sqlite3 と三つ試しても同じ結果だったので, 諦めかけてましたが, 友人が作ったv2.1.2のプロジェクトを実行したとき 偶然うまくいったのがきっかけでした
843 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 11:31:16 ] >>840 Rubyの「メモリ内でのハッシュ構造+ディスク上でのPStoreのようなもの」ではどうにもならない場合 具体的には>>841
844 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 12:35:59 ] SQLの方が良い場合も歩けど オブジェクトのままシリアライズした方が良い場合も結構ある 後者だと単純にSQLに置き換えるって訳には
845 名前:デフォルトの名無しさん [2008/12/26(金) 23:20:20 ] 鋸のXPathが期待した結果を出さないのだが,なぜ? url = "bit.sikkou.jp/servlet/xxw.XxWServlet?O_sale_unit_id=00000006772&O_court_cd=31131&O_thing_cls=2&O_tender_flg=1&PAGEID=XxW04_jp_0130&ACTION=anchor " doc = Nokogiri::HTML(open(url)) puts doc.xpath('//b[text()="公告日"]') 「<b>公告日</b>」になるはずなのだが, 結果は空白(要するに検索できてない) エンコードの問題でしょうか? ちなみにスクリプト自体はUTF-8です。
846 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 23:25:17 ] >>845 あ〜、これは誰かがどっかで説明しないといけないんだけど、Nokogiri.new は実は引数を3つとるんだよ 第3引数は文字列の文字エンコードを書く doc = Nokogiri::HTML(open(url), nil, 'SHIFT_JIS') って書いてみ