1 名前:デフォルトの名無しさん [2008/02/22(金) 14:31:31 ] プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 【Ruby1.9 は不安定な開発版であり初心者には全く向きません】 【最新安定版の Ruby1.8.6 の使用を強くお勧めします】 関連スレや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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
2 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 14:36:38 ] 【よくあるしつもん】 Q: いちからRubyを始める初心者向けのRuby入門書は何がおすすめでしょうか? A: プログラム作成の初心者だったら 「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」 www.amazon.co.jp/dp/4797336617/ 他の言語経験があるんだったら 「プログラミングRuby 第2版 言語編」 www.amazon.co.jp/dp/4274066428/
3 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 14:39:10 ] ■前スレ Ruby 初心者スレッド Part 17 pc11.2ch.net/test/read.cgi/tech/1200472887/ ■関連スレ Rubyについて Part 30 pc11.2ch.net/test/read.cgi/tech/1200106073/ Rubyの宿題教えてください。 pc11.2ch.net/test/read.cgi/tech/1106572657/ pc11.2ch.net/test/read.cgi/tech/1200175247/ 【ActiveScript】RubyをWindowsで使うスレ【GUI】 pc11.2ch.net/test/read.cgi/tech/1155031689/ Ruby on Rails pc11.2ch.net/test/read.cgi/tech/1191381506/ Rubyについて(アンチ専用) Part002 pc11.2ch.net/test/read.cgi/tech/1200210768/
4 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 14:40:19 ] ■公式/非公式関連リンク Ruby Home Page www.ruby-lang.org/ja/ Rubyリファレンス(よくサーバーエラーになります) www.ruby-lang.org/ja/man/ www.ruby-doc.org/ (英語) リファレンスのHTMLヘルプ版配布 elbereth-hp.hp.infoseek.co.jp/ruby.html # Windowsで便利 Ruby FAQ ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ Programming Ruby - The Pragmatic Programmer's Guide www.ruby-doc.org/docs/ProgrammingRuby/ # 好評書籍をWebで公開中、ただし英語 逆引きRuby www.namaraii.com/rubytips/
5 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 14:41:17 ] RAA - Ruby Application Archive raa.ruby-lang.org/ RubyForge www.rubyforge.org/ # Rubyのアプリやライブラリが検索できる 日本Rubyの会 公式Wiki jp.rubyist.net/ # メニューに表示されていない埋もれた情報ページ多数 Rubyist Magazine - るびま jp.rubyist.net/magazine/ # コードレビューが好評 Ruby hotlinks 五月雨版(日記やblogのアンテナ) www.rubyist.net/~kazu/samidare/ Rubyの本一覧 www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Ruby%A4%CB%B4%D8%A4%B9%A4%EB%BD%F1%C0%D2 <rubyXML/> www.rubyxml.com/ Matzにっき(Ruby作者の日記) www.rubyist.net/~matz/
6 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 14:42:08 ] ■最近できたWiki Ruby 初心者スレッド Hiki starlet.s145.xrea.com/ruby/hiki/ Ruby Portal ruby.morphball.net/portal/
7 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 14:51:23 ] テンプレ終わり
8 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 15:04:01 ] _,,....,,_ _人人人人人人人人人人人人人人人_ -''":::::::::::::`''> ゆっくりした結果がこれかよ!! < ヽ::::::::::::::::::::: ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄ |::::::;ノ´ ̄\:::::::::::\_,. -‐ァ |::::ノ ヽ、ヽr-r'"´ (.__ _,.!イ_ _,.ヘーァ'二ハ二ヽ、へ,_7、 ::::::rー''7コ-‐'"´ ; ', `ヽ/`7 r-'ァ'"´/ /! ハ ハ ! iヾ_ノ !イ´ ,' | /__,.!/ V 、!__ハ ,' ,ゝ `! !/レi' (ヒ_] ヒ_ン レ'i ノ ,' ノ !'" ___ "' i .レ' ( ,ハ /_ / 人! ,.ヘ,)、 )>,、 _____, ,.イ ハ
9 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 15:23:45 ] r'ニニニ二二二ニニニ、ヽ | | .@ | | ト、____, へ rー┤| |├、 ヽ } | | | Π | | | ≡三ーーーーァ / l l l lニ コ .| | | ≡ / / | l l |_| | | | ≡三 ./ / l__l_l______|_|__| っ .≡ / / | / ,イ,へ 丶、 ヘ ≡三./ / ノ| | ,' / // \| \ ト、 ヽ ', つ ≡{ 丶ーーーー' } !j./l / ` ヽト、ヽ } ゝ、_______丿 . | | .!/.! ○ ○ l l |ヽ,' ⊃ l | | .l/////////////! | !.| .| ! | ト、 ,-ー¬ .ィ| .| l こ、これは>>1 乙じゃなくてバギクロスなんだから | l ! l l` r --.' <j ,' | | 変な勘違いしないでよね! | .l ', l |ャ-ミ≡彳ァトイ ,'! ! .| | ヽ| | l r´ )/ハy / | ',
10 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 15:29:55 ] < ̄ ̄ ̄>  ̄>/ / / / <___/| |______/ | /  ̄  ̄ \ / ノ \ \ / <●>::::::<●> \ こ、これは乙じゃなくてエナジーボンボンなんだから | /// (__人__) /// | 変な勘違いしないでよね! \ ` ⌒´ / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
11 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 15:40:31 ] AA厨うぜえ
12 名前:デフォルトの名無しさん [2008/02/22(金) 17:48:57 ] ifの条件をorで繋げて書いているのですが凄く長くなってしまいます、 途中で改行したいのですがどうしたらいいでしょうか?
13 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 18:10:07 ] orが行末にくるように改行を入れる。 見やすさのためにthenを省略しないようにするといいかも。
14 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 18:43:09 ] Rubyスクリプティングテクニック ― テスト駆動による日常業務処理術 www.oreilly.co.jp/books/9784873113562/ これいい本ですか?
15 名前:デフォルトの名無しさん [2008/02/22(金) 22:53:02 ] >>13 ありがとうございます _ _綺麗になりました。 立て続けに質問すみません。 Ruby/Tkで部品(ラベル)を作成しその中のテキストを処理中に複数回変更したのですが、 即時に変更されず、一番最後の変更のみが反映されます。 バッファリングがなされているのかと思い、STDOUT.flashを間に挟んでみたのですが、うまくいきませんでした。 ご助言頂けると嬉しいです _ _
16 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 23:12:59 ] >>15 Thread.start{処理} ってして見るのはどうか。
17 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 10:48:38 ] matlabから乗り換える言語の候補でrubyを考えてるのですが 行列計算やグラフのplotはRと連携するのでしょうか? Rとの連携ってどこまでできるのでしょうか?
18 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 12:28:44 ] >>17 うむ、Rでできることのほとんどについて、ロクにサポートできないといっていい というか、matlabから移行する先としては不適当だろ Rubyは単なる汎用なオブジェクト指向スクリプト言語に過ぎない
19 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 13:04:05 ] matlabとは性質が全然違うと思う octaveなら分かるがw
20 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 14:03:52 ] 組込クラスや標準ライブラリに木構造を扱うクラスが無いのはなぜでしょうか
21 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 15:00:05 ] ネタにマジレス(ry
22 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 15:02:57 ] >>17 Python で numpy 使うといいよ
23 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 16:12:50 ] >>17 RSRuby ttp://web.kuicr.kyoto-u.ac.jp/~alexg/rsruby/
24 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 16:40:25 ] rushってどうよ?あなたのはづかしい体験談プリーズ journal.mycom.co.jp/news/2008/02/22/042/index.html
25 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 20:00:55 ] Rushはプログレハード
26 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 21:37:26 ] RubyでJAVACCみたいなパーサ生成 モジュールってありますか? AST扱える奴がいいのでつが
27 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 23:21:42 ] 今だと treetop とか。
28 名前:デフォルトの名無しさん [2008/02/24(日) 12:01:00 ] >>26 Racc Lex なら StringScanner または Ragel
29 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 12:31:43 ] >>28 フォロー。 Raccはyaccみたいなパーサジェネレータだから、ASTは自分で組む必要がある。
30 名前:デフォルトの名無しさん [2008/02/24(日) 12:47:04 ] メール送信をしようと思って、 gemsを見たらメール関連のパッケージがたくさんあります 現在一番使われてるパッケージってどれですか?
31 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 13:19:48 ] …TMailかな Rubyだけでもなんとかなると思うけれど require 'nkf' mail=<<EOM From: #{@sender} <#{@from}> To: <#{@to}> MIME-Version: 1.0 Subject: #{NKF.nkf('-jM',@subject.tojis)} Date: #{@now.rfc2822} Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit #{NKF.nkf('-Ej',@body)} EOM Net::SMTP.start(@smtp_server,25,@helo_domain){|smtp| smtp.send_mail(mail, @from, @to) }
32 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 13:53:43 ] テストツールの利用の仕方がよくわかりません
33 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 14:08:46 ] >>32 テストの知識がないとだめだよ ソフトウェアテストをRubyでも行うというツールであって、ソフトウェアテストをRubyでも学べるというツールじゃない タイミング的に Rubyスクリプティングテクニック ― テスト駆動による日常業務処理術 ttp://www.oreilly.co.jp/books/9784873113562/ これを持ち出して「ただの初心者本であってテスト駆動云々については書いてないじゃん!」とかDisるのがよいぞ 「Rubyで学ぶテスト入門」とかいうのは需要はあると思うんだけどねえ
34 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 14:17:54 ] メソッド間の値の受け渡しのとこにてきとーな値と正しい答えのペアを持ってきて メソッドが正しく動作するか検証するツールだろ
35 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 14:20:44 ] >>33 Rubyを256倍使うための本 極道編 というのがあるこたあるが、2001年というのはこの世界だと古文書だな。
36 名前:デフォルトの名無しさん [2008/02/24(日) 16:39:43 ] >>32 「Ruby Test::Unit」または「RSpec」でぐぐれ
37 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 16:40:08 ] >>29 >Raccはyaccみたいなパーサジェネレータだから、ASTは自分で組む必要がある。 kwsk
38 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 16:50:50 ] >>36 そういう話ではないと思われ
39 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:19:48 ] >>33 「disる」とかいうのやめ
40 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 21:48:25 ] >>37 BNFとか書けばASTを完璧に組み上げる パーサを生成してくれるわけじゃないという意味。 (というかそこまで出来たらコンパイラコンパイラ名乗って いい気がする) 構文解析である文法規則に還元されたときの 処理は自分で書かないといけない。
41 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:11:50 ] >>40 それは Racc の説明であって JavaCC ではないという理解で OK? もしそうなら、JavaCC はASTを自動で作ってくれるの?
42 名前:40 mailto:sage [2008/02/25(月) 00:53:05 ] ぉk。 JavaCCのことはさっぱり。 ただ>>26 の要求にRaccは微妙かなと思って。
43 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 06:21:28 ] class Foo class <<self end end これの2行目の意味が良く分からないんですが・・・
44 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 06:32:09 ] >>43 特異クラスの定義 Railsで時々見るな ttp://www.ruby-lang.org/ja/man/html/FAQ_A5AFA5E9A5B9A1A2A5E2A5B8A5E5A1BCA5EB.html#a6.2e6.20.c6.c3.b0.db.a5.af.a5.e9.a5.b9.a4.c8.a4.cf.b2.bf.a4.c7.a4.b9.a4.ab
45 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 10:51:44 ] すいません、クイッククエスチョン。 特異メソッドは特異クラスのサブクラスに継承されるけど クラスインスタンス変数は継承されないよね?あってる?
46 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 11:27:47 ] rhtmlファイルでシンタックスエラーがあるみたいなんですが、どこがエラーか分かりません。 調べる方法があればおしえてください。
47 名前:デフォルトの名無しさん [2008/02/25(月) 11:52:29 ] ppよりもっとディープなインスペクション(そのインスタンスの メソッドやプロパティーのリストまで表示したり)をするには どうしたらいいですか?
48 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 11:52:45 ] >>45 そんな感じだったような気がする >>46 静的なファイルなのなら、コマンドラインからerbやerubyコマンドに渡せばいい スクリプトで動的に生成されたものにエラーがあるという話なのならちょっと違う ~$ cat test.rhtml <title>てすと</title> <h1>Hello, <%= World %>.</h1> ~$ erb test.rhtml (erb):2: uninitialized constant World (NameError) ~$ cat test.rhtml <title>てすと</title> <h1>Hello, <%= "World" %>.</h1> ~$ erb test.rhtml <title>てすと</title> <h1>Hello, World.</h1>
49 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 12:06:33 ] >>47 よーわからんがここ読め ttp://www.ruby-lang.org/ja/man/html/Module.html irb> 'str'.class.instance_methods ["send", "between?", "%", "rindex", "reject", "[]=", "split", "<<", "object_id", "strip", "size", "singleton_methods", "downcase", "gsub!", "count", "succ!", "__send__", "downcase!", "intern", "member?", "squeeze!", ... irb> require 'net/http' irb> Net::HTTP.instance_variables ["@proxy_port", "@proxy_addr", "@proxy_pass", "@is_proxy_class", "@proxy_user"]
50 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 18:59:27 ] #:nodoc: とか #.nodoc: ってなに?
51 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 19:31:31 ] ドキュメントなんか書くものか!というRubyistの強い意志
52 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 22:34:11 ] >>46 erb -x test.rhtml | ruby -wc または erubis -z test.rhtml つーかここよめ ttp://d.hatena.ne.jp/kwatch/20080222/1203680051 >>48 それはtest.rhtmlを実行しているだけなので、シンタックスエラーのチェックには向かない。
53 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 01:42:14 ] ハッシュを使い回すのではなく、俺用データのクラスを作ろうと思いました def initialize の中で、インスタンス変数を @hoge=nil @hage=nil @fuga=nil ... と15個くらい書いてるんだけど、initializeの時点でnil入れておくって無意味だよね?
54 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:22:09 ] @hogeの使途が分からない俺たちにとってnilを入れておく事に意味が有るか無いかは判断できない @ary = [] @ary.each{|e| p e} ってやれば何も出力されないけど @ary = nil @ary.each{|e| p e} ってやるとnilでっせって怒られる いきなり @ary.each{|e| p e} ってやると@aryなんて知りまへんでって怒られる 俺は1番目を良く使うけどね
55 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:39:29 ] >>54 自分でそのコード実行してみた?
56 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:42:47 ] irb(main):001:0> nil.each{|e| p e} NoMethodError: undefined method `each' for nil:NilClass from (irb):1 from :0 irb(main):002:0> @hoge.each{|e| p e} NoMethodError: undefined method `each' for nil:NilClass from (irb):2 from :0 irb(main):003:0> @hoge = [] => [] irb(main):004:0> @hoge.each{|e| p e} => []
57 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:51:17 ] >>54 >いきなり >@ary.each{|e| p e} >ってやると@aryなんて知りまへんでって怒られる インスタンス変数でなくローカル変数の場合はその通りなのだが 未初期化のインスタンス変数を参照した場合は nil となるはず >>53 上記のことを踏まえての質問ということでおk? やってもやらなくてもnilが入っているという意味ではその通りかも知れないが クラスで用いるインスタンス変数を明示的に示しておくという意味では無意味ではないと思う
58 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:53:56 ] >>55 インスタンス変数は「定義」しなくてもnilだってのは忘れられがちだよな インスタンス変数の「定義」をinitializeでする意味はRuby的にはあまりないと思う
59 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:59:02 ] 厳密にはメソッドが追加されるからただの定義ではないけど attr_reader とか
60 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:59:28 ] 外部からアクセスされるなら直後のattrに名前が出るし 外部からアクセスされないインスタンス変数って一体 あ、サブクラスからアクセスしたいか
61 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 03:23:53 ] >>60 外部からアクセスされないインスタンス変数はあっても全然おかしくないと思う むしろすべての実装を外部からアクセスできるように公開する方がまずいのでは
62 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 03:28:17 ] インスタンス変数は外部からアクセスしたいときにのみおもむろに使え、ということなのでは それ以外ではメソッド引数とかで細々とやれと
63 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 03:42:22 ] Rubyのスコープはちょっといろんな言語と違うからね a = 100 def foo() return 1 + a end foo() とすると何がかえってくると思う?aが定義してないってエラーになるんだぜ
64 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 03:43:47 ] こういうときはaを@aに変えるのが定石
65 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 04:08:26 ] >>63 そもそもの問題として、メソッド定義の中以外にローカル変数なんて置くなよ…
66 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 04:16:55 ] トップレベルに定義したメソッドなんだろ トップレベルのローカル変数は特別扱いしてくれてもいいような気もするけどな
67 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 06:06:31 ] でもnilの特別扱いは要らない…
68 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 06:25:56 ] irb(main):001:0> a=[0,1,2] => [0, 1, 2] irb(main):002:0> [a] => [[0, 1, 2]] irb(main):003:0> [*a] => [0, 1, 2] irb(main):004:0> [3,4,5,*a] => [3, 4, 5, 0, 1, 2] irb(main):005:0> [*a,3,4,5] SyntaxError: compile error (irb):5: syntax error, unexpected ',', expecting ']' [*a,3,4,5] ^ from (irb):5 4行目は良いのに5行目はダメっていう挙動が理解できないんだが・・・
69 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 06:59:48 ] >>68 *arrの「うしろ」に置けないだけ 先頭に書けないんじゃなくて、展開後にも何かがあると文法エラー irb> a = [1, 2, 3] [1, 2, 3] irb> [9, 8, *a, 7] SyntaxError: compile error
70 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 07:01:21 ] ていうか、もしかして *array を「arrayの要素をバラす表現」とかいう理解をしてる?
71 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 07:06:23 ] 1.9なら通るよ
72 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 13:04:14 ] 自作プログラムをクラスごとにファイルに分けると20ファイルくらいになる 「ああ、実行するたびに20回もHDDにアクセスしてるんだ」と考えると憂鬱になる ということで開発用ディレクトリと実行用ディレクトリを分けた 実行用ディレクトリには開発用ディレクトリにあるスクリプトを連結したものを入れてる これならファイルアクセスの回数は数回で済む いや標準添付のクラスとかrequireしてる時点で何個もファイル読み込みまくってるのはわかってんだけど
73 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 21:55:41 ] >>72 その最適化で何秒早くなったの?
74 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 21:57:22 ] 時間が問題だと思ってる?
75 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:17:03 ] >>74 >>72 はそういうことを言いたいわけではないと思われ
76 名前:75 mailto:sage [2008/02/26(火) 22:17:55 ] >>72 じゃなくて>>73 だorz
77 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:30:19 ] >>72 は一言も最適化とは言ってないな。
78 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:34:14 ] ディスクアクセスが無意味に多いのが心情的に嫌なのだろう そう感じるセンスそのものは悪くはない
79 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:28:06 ] 無意味に多いのかそれは、とか 全部動かさずにユニットテストしろよ、とか
80 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:49:05 ] 要するにプリコンパイルヘッダーが必要ということか?
81 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 04:45:24 ] C++ とかやると、コンパイル時にいくつヘッダ読んでるかなんて 全く気にならなくなるZE
82 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:05:29 ] コンパイル時(>>72 の例だと開発中)はどうでもいいんだが、実行時に、というのが心情的に気持ち悪いという話だろう。
83 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:26:02 ] なら、コンパイル系の言語を使えばいいんじゃまいか?
84 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:54:36 ] そんな読み込み程度を気にするのがいかにも初心者だな
85 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:55:55 ] Ruby使いはお茶でも飲んでまたーりするがよい わっはっはっは
86 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:06:07 ] >>84 そうか? 「それ自身は事実だから好きにせえ」以外の必死な否定論が出ることのほうがよっぽど初心者だと思うが…
87 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:07:32 ] ところでCが書けないRuby書きはニワカだと思いますがどうですか。
88 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:13:07 ] I/O を工夫することはパフォーマンスチューニングでは基本事項。 もとの環境や条件が不明だけど、CGIのようにリクエストのたびにプロセスを 実行しなきゃいけない場合は、読み込み速度を工夫するのは別におかしな話ではない。 ファイルサイズが小さくても、ファイルの数が多ければハードディスクのシークタイムは バカにならない。 ただ、ファイルを連結しても断片化してたら効果は少ないから、デフラグを ちゃんとやってやる必要があるけど。
89 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:17:28 ] もうそんな時代でもないんだけどな
90 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:24:31 ] >>89 ストレージへのアクセスが問題にならないコンピュータができたならぜひ教えてくれ というか最近の子は「HDDがガリガリ言う」とか気にしないもんかね 静音化されて意識しなくなったんだろうか
91 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:29:29 ] HDDはアクセスすると壊れるからなあ いや、こんなんで壊れる確率がはっきり増えるHDDってのもかなりアレだが… とりあえず 「クラス単位の細切れファイルをインストール時に数個にまとめとく」 というのは別に非難されるようなことじゃないと思うぞ というかそんなにまでして行為そのものを否定する理由を知りたい
92 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:30:48 ] ガリガリ言うほどのアクセスを問題にしてるのか? そもそもそんなこと言ってたらRubyなんて選択肢にならんだろ
93 名前:デフォルトの名無しさん [2008/02/27(水) 12:32:34 ] 鈍足のRubyを使う人は達観した境地にあるので小さいことは気にしない
94 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:57:19 ] 正直、完全に論点がずれてるような気がしてならない。 元発言は、無駄を嫌うというプログラマの美徳を発揮してるだけじゃないの?
95 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 13:04:35 ] チューンナップを突き詰めるとRuby使うなになるからおすすめしない
96 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 13:08:02 ] Railsみたいな糞のかたまりで遊ぶのがRubyistだからな
97 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 13:16:36 ] Railsのナカミを喜んでる人は少数だと思う Railsは開けないほうがよい箱だ あくまで外部から自分のために便利に使うシステム
98 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 14:42:30 ] これが SyntaxError になるんだけど何故でしょうか? def foo?; end def bar?; end case when not foo? when not bar? end
99 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 14:52:00 ] >>94 まぁ、美意識の問題だわな。 そしてそれは、そんな変なエネルギーってわけではない。
100 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:15:48 ] >>98 notだから。 case when (not foo?) when (not bar?) end か case when ! foo? when ! bar? end なら期待通りに動く
101 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:16:13 ] >>98 この辺の話かな ttp://www.ruby-lang.org/ja/man/html/trap_A4C7B2F2B7E8A4B9A4EBA4E2A4CE.html when (not foo?) ならおkのはず
102 名前:デフォルトの名無しさん [2008/02/27(水) 18:42:53 ] [標準出力へのフックを仕込む] 標準出力に出力 標準出力に出力 標準出力に出力 [標準出力に書き出した内容をメールで送信] ってやりたいんですが、 どうやったら出来ますか?
103 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 18:55:07 ] 出力時にスコープの広い変数に文字列を追加保存しとけばいいじゃん?
104 名前:98 mailto:sage [2008/02/27(水) 19:02:54 ] >>100 , >>101 なるほど。 てっきり「not foo?」は「式」かと思っていたんですが、「文」なんですね。 了解しました。深いっす。
105 名前:デフォルトの名無しさん [2008/02/27(水) 19:12:13 ] phpでいうis_array()はどうやればいいですか? rubyは配列もあるしハッシュもあるし、自分でコレクションも作れるしで どう判定していいのか分かりません(?o?)
106 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:17:02 ] [0,1,2].is_a?(Array) #=> true [0,1,2].kind_of?(Array) #=> true ArrayクラスはObjectクラスを継承している。 だからArrayクラスはObjectクラスのクラスメソッドやインスタンスメソッドも使える。 Objectクラスのリファレンスをみるべし。 www.ruby-lang.org/ja/man/html/Object.html
107 名前:デフォルトの名無しさん [2008/02/27(水) 19:30:43 ] >>106 ありがとうございます 試してみたところ、PHPとは異なり、 ハッシュと配列は明確に区別されているようですね ハッシュ.is_a Array → false 配列.is_a Hash → false
108 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:34:50 ] オブジェクト、実際的には変数、が配列かどうかを調べなければならないコードというのはRubyではかなり異常 極力他のアプローチを取るようにしたほうがいい
109 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:40:03 ] case arg when Array when Hash とかよくやるじゃん
110 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:42:06 ] そうですか(><) YAMLで書いた設定ファイルを読んで 該当キーをeachで回すようにしてるんですが、 キーを省略した時にはnilになりますよね。 nilをeachしたらエラーになるので、eachできるかどうかを調べてから eachしたいのですが、 こういう場合はruby的にはどう書くものですか?
111 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:45:14 ] >>110 ・ 変数がnilかどうかを事前にif文で比較して弾く ・ eachでnilが例外エラーを起こしたらその例外をキャッチする どっちか好きなほう使え
112 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:45:32 ] def hoge(foo, bar) raise ArgumentError unless foo.is_a?(String) raise ArgumentError unless foo.is_a?(Array) ・ ・ ・ end とかメソッドの最初でモリモリやっちゃうのはだめ?
113 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:58:48 ] >>112 わりと下品。 まあ、それ以上でもそれ以下でもない程度かと。 コレを無くすために悩む時間がえらい長引くってんならあっても仕方ないんじゃね。おいおい考え変えていけばいいかと。 そのクラスやメソッドに本当にそんなクラスのインスタンスが指定されることがあるのか? をよく考えるといい。 標準添付で「結果の数によってStringあるいはArrayが返ります」とかいうメソッドがあるかい? …そういえばなんか添付モジュールで複数のクラスが返ってくる可能性のあるやつあった気がするがまあいいや。 「Stringが来たときはHashに変換しよう」とかいうのも同様。Stringなんか渡してくる奴が悪い、で桶。 raaやgemで公開して育てる気マンマンでちまちまフールプルーフさいこー、という場合はあったほうがいいのかも。
114 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 20:07:48 ] 日本語がよくわからない
115 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:35:03 ] >>102 require 'stringio' # 標準出力へのフックを仕込む $stdout = StringIO.new # 標準出力に出力 puts '未承諾広告' puts 'こんにちは^^)' # # 標準出力に書き出した内容を $stdout.rewind text = $stdout.read メールで送信(text)
116 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:42:15 ] >>115 ぬう、適切だが邪悪だ…
117 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:45:13 ] >>110 eachに反応するときだけeachしたいなら、 respond_to? :each する。 と思ったことが私にもありました。 なんでStringがeach持ってるんだよ……(1.8での話)
118 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:48:51 ] >>116 標準出力をフックしたいとか言う元の要件自体が邪悪なだけだ(w 使い方自体は巻き戻せるIOの正しい使い方 $stderrに仕込んでおくとwarnの出力をロギングできるぞ warn使ってる人ってあんまり見ないけどな >>117 eachの中でArrayやHashという構造べったりの処理をするからあまり意味がなかったり…
119 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:52:27 ] STDOUTに元の残ってるし、 writeメソッドがないとTypeErrorだし、 邪悪っていうにはおとなしい希ガス。 バッドノウハウなのは確かだけど。
120 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:24:04 ] >>118 >標準出力をフックしたいとか言う元の要件自体が邪悪なだけだ(w そんなことないだろ なんで邪悪なのか説明してみな
121 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 09:08:29 ] Herokuってどうよ
122 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 12:40:13 ] >>120 出力先が固定になってるあたりかな。
123 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:02:13 ] なんでパイプしてその先でメールするんだと 駄目なんだろ。
124 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:06:51 ] >>122 それだけじゃわかんね。固定してたらなぜだめなの?
125 名前:デフォルトの名無しさん [2008/02/28(木) 13:16:13 ] 標準出力をフックしたい⇒出力先が固定 意味不明だな。
126 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:20:35 ] なんかのはずみで標準出力に出るようなものも全部キャプチャしたいなら すなおに別プロセスで読み出せ
127 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:07:34 ] こんなもんでいいんじゃね class Dummy @@origout = $stdout def initialize @buf = '' end def write(str) @@origout.write(str) @buf << str end def flush tmp = @buf @buf = '' tmp end end $stdout = Dummy.new puts "hello" puts "world" $stderr.puts $stdout.flush.inspect 思い切り誤爆してきた。。。
128 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:43:56 ] >>126 なんで別プロセスにするのがいいの? $stdout = StringIO .new だとなんか問題あるの?
129 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:47:47 ] >>118 バカ >>122 バカ >>126 バカ
130 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:53:15 ] バカとしか言えない>>129 はバカでよい 是正させる気も無いようだしただの害悪だな
131 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 16:52:29 ] >>128 ttp://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFCAD1BFF4.html#a.24stdout 大抵はそれで問題ないけど 拡張ライブラリとか子プロセスなんかの出力は $stdoutを書き換えるだけだとリダイレクトできないはず
132 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 18:41:22 ] Rubyに限ることではありませんが、 httpでpostするデータが大きくてメモリ不足になるとき どうやって回避するのがよいのでしょうか? Net::HTTP.start(host) {|http| r = http.post(path, data, header) } という感じでpostするときdataが大きすぎる場合に備えて 小出しに分けて送ることってできませんか?
133 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 19:08:26 ] >>131 だったら最初からそう書けよ おまえの書き方だと $stdout を変更するのがすべて悪いみたいじゃないか >>130 バカはおまえだろ
134 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 19:13:28 ] >>132 サーバ側の話? それともクライアント側の話? サーバ側の話なら、cgi.rbを使わず自前でHTTPを解析する必要がある。 クライアントの話なら、dataをファイルに保存しておいて、例えば10MBずつ読み込んで送信を繰り返せばいいんじゃね?
135 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 20:13:54 ] 空気悪いな >>131 はこの話題に関しては初めて書きこんだのだが >>132 クライアント側だとすると、body_streamを使うのはどう? ttp://d.hatena.ne.jp/unageanu/20071009 この辺か
136 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 20:34:05 ] >>133 =129 あきらめろ、幾ら頑張ってもお前の>>129 は「馬鹿じゃない」と解釈する余地が無い。
137 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 01:19:04 ] www.ruby-lang.org/ja/man/html/Net_HTTPRequest.html 1.9 featureって書いてあるから1.8じゃ使えないのかと思ったら1.8.6でも使えるのね。よかった。
138 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 11:22:09 ] >>134 クライアントです。 分けるといっても複数のpostを一連の1つのpostと 認識させるにはどうしたらいいんでしょうか… >>135 >>137 チャンク形式っていうんでしょうか? で、body_streamを使えばヘッダとか気にしなくていい ってことでよいでしょうか? >>132 のdataの内容を一旦 data.txt に書き出しておいて、 あとは >>135 の例のchunkedを使うようにするとできたっぽいですが、 一時ファイルを使わないようにできないでしょうか?
139 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 12:48:00 ] RubyにあるモジュールはCGIやHTTPの知識の必要性を良くも悪くも隠蔽しない その知識のまま進むのは危険だ HTTPやCGIの勉強をすることを勧めるよ
140 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 13:29:26 ] >>138 >>137 が書いてるページの body_stream 使うんだろうけど、おれもやったことないからわからん。 ぐぐったらこんなのあった d.hatena.ne.jp/unageanu/20071009
141 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 14:11:22 ] curlコマンド使うのが一番楽やねん
142 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 18:17:48 ] 「年・月・日」ではなく「年・月」の2つしかないデータがあるんだけど、 これを格納するデータオブジェクトって何がいいかな? いや、年月日が揃ってるデータと「年・月」が同じかどうかという比較をするんよ 年月日ならDateオブジェクトなんだけど、日をどうしようかなあと
143 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 18:30:19 ] >>142 ・ 「どうせ参照されないからいいじゃん?」とか年金式にdayを1に固定してDateを使う ・ [year, month] という配列に入れておく ・ Dateを継承した「dayが無指定でも動く」という新しいDateを作る
144 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 21:05:14 ] ・Date に適当にメソッドを足して適当に YYYY/MM/01 でも代表元に使う
145 名前:デフォルトの名無しさん [2008/02/29(金) 21:09:37 ] require 'yaml' yaml_str = <<YAML_STR hoge: - moge: [poge, page] YAML_STR data = YAML.load(yaml_str) data['hoge'].each {|key,value| p key,value} こうすると、 keyが{"moge"=>["poge", "page"]} valueがnilになってしまいます。 key=moge,value=[poge, page] になって欲しいのですが…。 どこが間違っているのでしょうか?
146 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 21:47:44 ] data["hoge"] #=> [ {"moge"=>["poge", "page"]} ] つまり "moge"=>["poge", "page"] という(キーが一つの)ハッシュを一つ持つ配列 mogeをリストにせずにインデントで階層にすれば data["hoge"] #=> {"moge"=>["poge", "page"]} になる
147 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 22:09:30 ] >>145 data['hoge'].each {|hash| hash.each {|key,val| p key, val}}
148 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 22:17:20 ] >>146-147 ありがとうございました YAMLのマッピングの記述を勘違いしていたようです
149 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:09:51 ] なんか最近思うんだけどさ ここ「初心者」スレだよな・・・ 素直に本家行けば?って人ばっかりじゃね?
150 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 04:39:41 ] 本スレはMatzと愉快な仲間たちについて あれこれ語るスレであって、プログラムを語るスレではないのです …あれ? じゃあ板違いじゃない?
151 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 11:36:51 ] 「Rubyの初心者」のスレでしょ? プログラミング自体の初心者じゃないといけないの?
152 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 11:44:14 ] >>149 が考えるところの「本スレ」のレベルに依存するな
153 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 18:15:48 ] >>149 同意。
154 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 18:39:06 ] あんなS/Nの小さいスレ 使ってられねーよ
155 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 20:00:41 ] irb> s = '2'; case s; when /(1)/,/(2)/,/(3)/ then p $1 end "2" irb> s = '2'; case s; when Regexp.union(/(1)/,/(2)/,/(3)/) then p $1 end nil なんで?
156 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 20:07:39 ] unionすると /(1|2|3)/ になるのではなく /(1)|(2)|(3)/ になって、 今回マッチしたのは(2)のとこだからグループとしては$2。 $1ではない。
157 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 20:16:53 ] >>156 をを …正規表現をコンマで並べても用が済むcaseでunionを使うのはめんどくさいっすな
158 名前:デフォルトの名無しさん [2008/03/01(土) 21:37:16 ] nkf.guessやKconv.guessなんかを文字列にしたいんだけど、 この文字列の配列ってあらかじめ定義されてないんでしょうか? 文字コードの推測 www2u.biglobe.ne.jp/~MAS/ruby/CAB8BBFAA5B3A1BCA5C9A4CEBFE4C2AC.html
159 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 21:54:35 ] ないっす いわゆるエンコーディングの名称・略称を表示するようにはできてない puts "#{str}は日本語EUCだよ!" if NKF.guess(str) == NKF::EUC というような使い方しか想定してない模様 一応 irb> NKF.constants ["UTF8", "VERSION", "JIS", "UNKNOWN", "NKF_VERSION", "ASCII", "UTF32", "SJIS", "NOCONV", "AUTO", "REVISION", "UTF16", "EUC", "BINARY", "NKF_RELEASE_DATE"] の結果をどうにかすればできなくはないけど、 自前で文字列対応テーブルを書いたほうがたぶん早い
160 名前:デフォルトの名無しさん [2008/03/01(土) 22:05:26 ] >>159 サンクス >>158 のページのようなのを使いまわすことにする
161 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:52:59 ] net/httpで相手サーバがタイムアウトした場合の例外をキャッチしたいんだけど、 具体的に何の例外が発生するんですか? というか、そのへんの情報ってどっかにまとまってませんか?
162 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:58:15 ] 手元の俺スクリプトの例 rescue Net::ProtoRetriableError,Net::ProtoFatalError,Net::ProtoServerError,Errno::ETIMEDOUT,TimeoutError =>ex puts 'サーバーから応答がないので空データを使います' return '' 正直、ドレが効いてるんだかよくわからん
163 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:04:24 ] net/protocol.rbを見ると、ソケット生成(接続)や読み書きは timeoutメソッドの中でやってるのでTimeout::Errorかな。 TimeoutErrorはこれの後方互換用。
164 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:10:11 ] http.getに該当する部分から飛び出す例外を全部捕捉して 「よくわからんけど鯖がエラー返しましたエラー」にすれば桶 begin res = open(uri).read rescue puts "#{uri.host}のサーバかそこへのアクセスで何かエラーです" res = '' end 実際問題としてサーバー側の原因以外の例外はここでは起こらんわけだし Timeoutだけ補足してもProtoServerErrorの500系エラーはスルーされるぞ 500系エラーって新幹線みたいだな
165 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:15:10 ] Timeout::ErrorはStandardErrorのサブクラスではないので、 引数なしのrescueでは捕まらんのだわ。
166 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:27:51 ] >>165 既にFAQレベルだな… ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/40726 直感的という言葉は使いたくないがやっぱ説明なしじゃわかりにくいよね シグナルとかあのへんの勉強をするといいんだが、ちと重いな
167 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:33:49 ] Errno::ETIMEDOUT って何?
168 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:39:30 ] タイムアウトした(Timed Out)というエラー。
169 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:46:43 ] ネット系はErrno::ECONNABORTEDとかErrno::ECONNRESETみたいなのも飛んでくるし、 例外をキャッチしても、それ以降の接続はなにやっても失敗したりするので悩ましい
170 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:51:49 ] >>167 システムコールが返すタイムアウト Timeout::Error → 「相手のWebサーバからHTTPの返事が返ってこない」 Errno::ETIMEOUT → 「Webサーバ以外の色々から返事が来ないタイムアウト」 と思って桶 そもそもサーバが見つからないとかそういうの。たぶん >>169 retryはたいてい成功しないよね
171 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 16:23:37 ] return @hoge = kekka と @hoge = kekka return kekka と @hoge = kekka return @hoge ってどれが一般的かな
172 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 19:11:27 ] @hoge = kekka
173 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 20:47:42 ] @hoge = kekka return
174 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 21:09:01 ] >>171 returnを使いたくて仕方ないのなら2番目でよろしく 1番目はなんか見てて不安だ
175 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 21:33:05 ] win環境で、一番簡単に ファイルのオープンダイアログを表示するには どうすればいいでしょうか もろもろインストールの必要を最小限にしたかったりもします。
176 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 22:03:12 ] require 'win32ole' d = WIN32OLE.new("MSComDlg.CommonDialog") d.maxFileSize = 256 d.showOpen p d.fileName
177 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 22:05:12 ] 楽なのはVisualuRubyかなぁ。通常のrubyには入ってないけど、 Windows用のActiveScriptRubyならデフォで入ってます require 'vr/vrcontrol' fn=SWin::CommonDialog::openFilename(nil,[ ["All file","*.*"],["bmp file","*.bmp"] ]) p fn 細かいことはVisualuRubyサイトのドキュメントやサンプル見てください ActiveScriptRuby arton.hp.infoseek.co.jp/indexj.html VisualuRuby計画(仮称) www.osk.3web.ne.jp/~nyasu/software/vrproject.html
178 名前:デフォルトの名無しさん [2008/03/02(日) 22:13:20 ] ファイルロックに関する事なんですが、みなさんはどの様なロジックで組んでますか? 自分は普通に以下みたいな感じなんですが、ごくたまにファイルが壊れる事があるんですよね… なにか良い方法があればご教示お願いします。 File.open('data.dat', 'r'){|file| file.flock(File::LOCK_SH) file.read } File.open('data.dat', 'w'){|file| file.flock(File::LOCK_EX) file.write(data) }
179 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 22:17:53 ] >>178 スレッド使ってる?
180 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 22:22:39 ] >>179 いえ使ってません。
181 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 22:45:34 ] 書き込みの場合は、アンロックする前に flushしないと、アンロックした後に書き込みが行われる場合がある みたいな事を言っている方がいたので、その辺の問題のせいでしょうか… File.open('data.dat', 'w'){|file| file.flock(File::LOCK_EX) file.write(data) file.flush file.flock(File::LOCK_UN) } とかなのかな??
182 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 23:51:49 ] 175です。早速にレス感謝です。 >>176 を試みてみまして WIN32OLERuntimeError に悩まされております・・・ もうちょっとWIN32OLE研究してみます。
183 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 00:17:15 ] >>176 はOS側の環境依存の度合いが大きいよ インストールしたRubyの種類に依存する>>177 と好きなほう選べ
184 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 00:52:19 ] # RDEで以下のようなスクリプトを実行します puts '文字を打ってくれ' s = gets puts s + 'と打ったのだね' #すると画面左下の実行画面が表示される部分に'文字を打ってくれ'と表示される前に #文字を入力するように求められます(文字を打たないと'文字を打ってくれ'と出ない) ヒントだけでいいのでご享受ください。RDEとかいう開発環境なんか捨てた方がいいのでしょうか?
185 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 00:54:36 ] getsの前に$stdout.flushしたらうまくいったりする?
186 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 00:56:47 ] STDOUT.sync = trueな予感
187 名前:184 mailto:sage [2008/03/03(月) 01:03:01 ] STDOUT.sync = true を使うことで RDEでgetsが実行される前の文字が表示されるようになりました($stdout.flushではだめでした) ありがとうございました! >>185 >>186
188 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 06:15:51 ] >>182 これはどうかな? tk環境が要るけど。 require "tk" #rootを非表示にする root=TkRoot.new.withdraw types = [ ["Ruby" , ".rb"], ["All Files", "*" ] ] path = Tk::getOpenFile(:filetypes=>types, :defaultextension=>".rb") p path
189 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 13:37:22 ] 「あまり別途インストールしたくない」という要求に対してWin32OLEやVisualuRubyが既に出てるのに わざわざRuby/Tkで同じ標準ファイルオープンダイアログを出す根性に感服した
190 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 13:43:03 ] 宿題スレとか一部で流行ってるからな >Ruby/tk
191 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 14:39:30 ] >>178 flock関数を使わずに、自前でロック処理を作るとか
192 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 15:07:19 ] 「自前」は迷宮への入り口の罠 何か有るはず。 俺はしらないけど^^;
193 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 15:44:29 ] わざわざ関数って言い換えてる奴は同一人物か? File.flockより堅固なファイルロックを自前で作れる奴なら悩んだりしないだろ ファイルロックの失敗によってファイルが破損しているのだということを確かめる必要があると思われ
194 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 17:39:45 ] >>187 実際の実行では不要なんだけどね RDEの時だけ必要
195 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 18:48:29 ] 日本語にマッチする正規表現はどのように書きますか。 文字コードはUTF8またはEUC-JPです。
196 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 19:56:30 ] それはあれだ、スクリプトがUTF-8だけどEUC-JPの日本語文字にマッチする正規表現を書きたいとかそういう引っかけ問題か(w
197 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 20:23:04 ] Shift_JIS = /\A(?: [\x00-\x7f\xa1-\xdf] | [\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc] )*\z/nx EUC_JP = /\A(?: [\x00-\x7f] | \x8e [\xa1-\xdf] | \x8f [\xa1-\xdf] [\xa1-\xdf] | [\xa1-\xdf] [\xa1-\xdf] )*\z/nx UTF8 = /\A(?: [\x00-\x7f] | [\xc2-\xdf] [\x80-\xbf] | \xe0 [\xa0-\xbf] [\x80-\xbf] | [\xe1-\xef] [\x80-\xbf] [\x80-\xbf] | \xf0 [\x90-\xbf] [\x80-\xbf] [\x80-\xbf] | [\xf1-\xf3] [\x80-\xbf] [\x80-\xbf] [\x80-\xbf] | \xf4 [\x80-\x8f] [\x80-\xbf] [\x80-\xbf] )*\z/nx
198 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 21:16:12 ] ジス イズ ア ペン。
199 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 01:38:47 ] >>178 file.flock(File::LOCK_EX) よりも前に、File.open('data.dat','w') の時点でファイルの内容がクリアされてしまっている。 File.open('data.dat', File::WRONLY|File::CREAT) {|file| file.flock(File::LOCK_EX) file.truncate(0) file.write(data) } …のようにすればいいんじゃないかな。
200 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 03:28:37 ] >>197 Kconv::RegexpEucjp と Kconv::RegexpUtf8 だな いわゆる全角文字と半角カタカナだけ欲しい場合は [\x00-\x7f] だけの行を消すといい irb> puts 'aa康1アアア1煕表示字典ねdこd'.scan(/(?:\x8e[\xa1-\xdf]|\x8f[\xa1-\xdf][\xa1-\xfe]|[\xa1-\xdf][\xa1-\xfe])+/n) 康 アアア 煕表示字典ね こ
201 名前:178 mailto:sage [2008/03/04(火) 07:36:00 ] >>191 File.rename使って色々やってみたんですが やはり上手く行かなくて… >>199 > File.open('data.dat','w') の時点でファイルの内容がクリアされてしまっている。 それはそうですね、確かに。 ちなみに、以下のコードみたいにする事で、だいぶ頑丈になりました! #Read File.open(path, 'r'){|f| f.flock(File::LOCK_SH) data = f.read } #Write File.open(path, File::WRONLY | File::CREAT){|f| f.flock(File::LOCK_EX) f.rewind f.write(data) f.truncate(f.tell) } #Append File.open(path, 'a'){|f| f.flock(File::LOCK_EX) f.seek(0, File::SEEK_END) f.write(data) }
202 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 11:22:04 ] どうして atomic な方のディレクトリロックを使わないん?
203 名前:ルファー ◆XSlQ/Lfer. [2008/03/04(火) 12:48:34 ] Win32APIライブラリを使い、DLL関数から文字列を取得するにはどうすれば良いんですか? ツクール(tkool.jp/products/rpgxp/ )のRGSS1を使っているので、バージョンアップできないし、 ライブラリはRubyで作らないとrequireできないし・・・。
204 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 13:07:45 ] >>203 www.google.com/search?num=50&hl=ja&q=RGSS+Win32API&lr=lang_ja
205 名前:ルファー ◆XSlQ/Lfer. [2008/03/04(火) 13:11:44 ] >>204 あぁ、解決しました。ありがとうございます。
206 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 13:14:27 ] うわあ…
207 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 13:40:32 ] 1レスで解決したならそれはそれでいいじゃん
208 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 16:42:14 ] 標準添付のWeb::Agentって使ってる人いる?
209 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 20:58:32 ] ruby -v; egrep '¥<Web¥>' **/*(.) ruby 1.8.6 (2007-09-24 patchlevel 111) [universal-darwin9.0] webrick/httprequest.rb: # (Web.Golux.Com/coar/cgi/ ) webrick/httpservlet/filehandler.rb: # (Web Distributed Authoring and Versioning) どこにあるクラス?
210 名前:デフォルトの名無しさん mailto:sage [2008/03/04(火) 22:17:54 ] Noraは標準添付ではない。
211 名前:デフォルトの名無しさん [2008/03/06(木) 06:35:30 ] 例えばCで定義された以下の様な構造体があって その構造体のデータが格納されたデータファイルを 1レコードずつRubyスクリプトで読み込む時に struct Record{ char n, int a, int b; }; 以下の様な、なんだか非効率な方法しか分かりません… とりあえず、一括してreadして、あとで上手くunpackで切り分けとか出来ないでしょうか? File.open('data.dat', 'rb'){|f| while !f.eof? n = f.read(1) a = f.read(4) b = f.read(4) data.push(n.unpack('L')[0].to_s + ',' + a.unpack('S')[0].to_s + ',' + b.unpack('L')[0].to_s) end }
212 名前:211 mailto:sage [2008/03/06(木) 06:38:11 ] × data.push(n.unpack('L')[0].to_s + ',' + a.unpack('S')[0].to_s + ',' + b.unpack('L')[0].to_s) ○ data.push(n.unpack('c')[0].to_s + ',' + a.unpack('i')[0].to_s + ',' + b.unpack('i')[0].to_s)
213 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 08:08:47 ] >>211 # char n の後ろに3バイトのパディングがあると仮定して data << f.read(12).unpack('cxxxii').join(',')
214 名前:211 mailto:sage [2008/03/06(木) 11:22:00 ] >>213 あ、レスどうも。 一応以下みたいなコードでだいぶマシになりました。 あとはループ展開するとかで、どうにか納得いく速度が出せそうです。 tmp = '' data = [] File.open('data.dat', 'rb'){|f| data = f.read } (tmp.size / 9).times{ (n, a, b) = tmp[p, 9].unpack('LSL') p += 9 data.push(n + ',' + v + ',' + b) }
215 名前:211 mailto:sage [2008/03/06(木) 11:23:35 ] × (n, a, b) = tmp[p, 9].unpack('LSL') ○ (n, a, b) = tmp[p, 9].unpack('cii')
216 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 12:37:48 ] 見てるこっちが切なくなるやりとりだな・・・
217 名前:デフォルトの名無しさん [2008/03/06(木) 12:51:12 ] pで表示すると、 "hoge" とカッコ付きで表示されます。 hoge とカッコなしで表示するにはどうしたらいいですか?
218 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 12:54:06 ] print
219 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 12:57:41 ] え?pってprintの略じゃなかったんですか…
220 名前:211 mailto:sage [2008/03/06(木) 13:15:50 ] >>216 何かもっと良い方法があればご教示下さい><
221 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 14:08:49 ] >>219 そういう解説をしてるサイトか書籍があったら即晒せ
222 名前:211 mailto:sage [2008/03/07(金) 02:24:18 ] これ以上良い方法が思いつかない… data = [] File.open('data.dat', 'rb'){|f| tmp = f.read cnt = tmp.size / 9 a = tmp.unpack('cii' * cnt) cnt.times{|i| data.push([a[3 * i], a[3 * i + 1], a[3 * i + 2]].join(',')) } }
223 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 03:07:28 ] 効率といっても速度なのかメモリフットプリントなのかコードサイズなのか data = f.read.enum_for(:scan, /.{9}/m).map {|x| x.unpack('cii').join(',') } あと、>>213 が書いてるけど、パディングは考慮してある? 処理系によっては#pragma packeとか
224 名前:211 mailto:sage [2008/03/07(金) 03:39:45 ] >>223 効率は速度です>< >パディングは考慮してある? ちょっと説明の仕方が悪かったです… 要するに、[1][4][4] の各バイトのデータの並びという事です(バディングは考慮する必要はないです) 変な説明をしてすみませんでした!><
225 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 09:55:09 ] >>217 ダブルクォートをカッコと呼ぶやつは初めて見た。
226 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 11:30:10 ] カッコ悪い呼び方だよな
227 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 15:05:55 ] 審議中AAry
228 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 15:13:38 ] Float のメソッドで、 「0 から遠い方に丸める(切上げ)メソッドはありません。」 のはなんでだろう? truncate (to_i) との対称性から、あってもバチは当たらないと思うんだけど。 やっぱ名前?
229 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 18:16:19 ] 【審議チュウ】 (⌒ー⌒) (⌒ー⌒) (⌒-⌒)´・ω)(・ω・`(⌒ー⌒) ( ´・ω ー⌒)(⌒ー⌒)ω・` ) | U( ´・) (・` ) と ノ 〜-u (l ) ( ノu-u'〜 〜'u-u' `u-u`〜 _ /´ `フ / ,! レ _, r ミ (⌒ー⌒) / `ミ __,xノ゙、 r( ´n . / i > ,/ (⌒ー⌒) ,' . ,' 〜'oー、_) r( n) ; ', l l `/ <_ i | | | 〜'し -一┘ ,.-‐! ミ i i (⌒ー⌒) //´``、 ミ 、 ー、 ( ´・ω) . | l `──-ハ、,,),)'''´ 〜、/ っっ ヽ.ー─'´) (⌒ー⌒) └ー-、ぅ  ̄ ̄ r、´・ω・)) (⌒ー⌒) > _/´ n__n (´・ω・`) 〜'し-一┘ (⌒ー⌒)ノ c' っ c('・ω・`)っ 〜(_,'ーo'
230 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 18:55:39 ] なんだかわからんがなごんだ
231 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 21:00:49 ] ショッピングカートを作っています。 session["cart"]=Hash.new session["cart"][@itemid]=@amount のような形でsession["cart"]にハッシュを詰め込みたいのですが、 sessionにハッシュを詰め込むことは無理なのでしょうか? また、無理であればto_aで配列に変換して詰め込もうと思うのですが、 元に戻すとき、 @tempSession=Hash[*session["cart"].flatten] と、WEBの公式マニュアル(ハッシュの項)にあるようにやっても うまくいきません…。 どなたかご教授いただければ幸いです。
232 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 21:03:38 ] なお、使っている鯖はlolipopで、Rubyバージョンは1.8.2です。 よろしくお願いいたします。
233 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 11:53:03 ] >>231 デフォルトだと文字列しか格納できない。 任意のオブジェクトを格納するには CGI::Session::PStore を使う。 require 'cgi/sesion/pstore' session = CGI::Session.new(cgi, 'database_manager'=>CGI::Session::PStore) session[key] = Hash.new
234 名前:231-232 mailto:sage [2008/03/08(土) 12:52:26 ] >>233 さん 書き込み後、文字列→配列へ変換→処理→文字列へ返還でできましたが、 やはりコードが汚くなったので悩んでいました。 PStoreについて勉強してみようと思います。 これで悩みが解決しそうです。ありがとうございました!
235 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 14:00:53 ] >>234 JSON や YAML の文字列に変換するという手もある。
236 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 14:16:02 ] 「文字列→配列へ変換→処理→文字列」と似たようなシロモノ紹介してどうする
237 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 15:27:12 ] はあ?YAMLやJSON使うなら手軽だしコードが汚くなることもないじゃん。 ちゃんとメリットあるものを紹介してなにが悪いの?
238 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 15:36:34 ] net/httpについての質問です。 対象ページの[keywords][description]を取得したいのですが http.getで返ったボディを正規表現で抜き出す以外によい方法はないでしょうか? 宜しくお願いします。
239 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 15:43:58 ] >>237 236じゃないが、 突っ込む前と取り出した後に処理がいらうってとこの 面倒くささは大して変わらないじゃん。 CGI::Session::YAMLStoreとかをこさえて使うなら アリだろうけど。
240 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 16:06:45 ] >>238 [keywords][description] というのが何を指してるのかイマイチよーわからんが <meta name="keywords" content="Ruby,初心者,プログラミング" /> <meta name="description" content="プログラミング言語Rubyの初心者が集うスレです。" /> というようなののことを指してるのだと勝手に解釈 特定のページのkeywordsとdescriptionの2つにしか興味がないというのなら、 特定のページ専用の正規表現で最初にマッチする文字列を抜き出すのが素直だし時間もかからない どんなページのどんな変態HTMLが来るのかわからないというのなら、HpricotとかのHTMLパーサを使うといい
241 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 16:39:04 ] >>240 レスありがとうございます。 おとなしく正規表現で取得しようと思います。
242 名前:デフォルトの名無しさん [2008/03/08(土) 19:52:15 ] 変数名を代入した変数を使って新しい変数を作るにはどうしたらいいですか? PHPで言う$$var = 'value' みたいなことをしたいのです
243 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 20:33:46 ] そんな曲芸みたいな処理は本当に必要なのか?
244 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 21:04:35 ] インスタンス変数ならinstance_variable_get/setで出来ることはできる。
245 名前:デフォルトの名無しさん [2008/03/08(土) 22:05:57 ] Threadで引数に渡した値はthread内のローカル変数として使われて、他のスレッドの影響を受けないというような事が書いてありますが、つまりこういう事なんですか? foo = 1 a=1 Thread.new( foo ){ | bar | bar += 10 a += bar hoge = a } この場合、barの値は他のスレッドの影響は受けないが、aは他のスレッドの影響を受けて値が変わってしまう。 bar は常に11が入っている状態になるが、aは他スレッドの影響を受けた場合、11とは限らない。 影響を受ける変数とそうでない変数との違いがいまいち分からん・・・。
246 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 22:45:41 ] え、単なる変数のスコープの問題なんじゃないん?
247 名前:デフォルトの名無しさん [2008/03/08(土) 23:19:54 ] え、そうなん? ちょっと考えてみる。。。
248 名前:デフォルトの名無しさん [2008/03/09(日) 00:09:29 ] あ、ブロックの問題か。 他のスレッドの影響を受けるような物って、どうやって作るんだ。 あれあれ。
249 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 00:21:16 ] リファレンスの例がそのまま分かりやすいと思うけど for i in 1..5 # スレッド内のiが書き換わる可能性がある # Thread.start { p i } # スレッド固有のローカル変数になる Thread.start(i) {|t| p t } end
250 名前:デフォルトの名無しさん [2008/03/09(日) 01:04:04 ] それはブロックの問題にならないのか。。 #1 foo = 1 Thread.new{ foo +=10 } ってのと #2 for i in 1..5 Thread.new{ p i } end って両方ともスコープの問題なように思えてしまいます。 #2は他スレッドの影響で i の値が変わるのではなく、外側のスコープの i が変わっているから変わってくるのでは? #それともそういうつもりで書かれたんですかね。
251 名前:デフォルトの名無しさん [2008/03/09(日) 01:25:56 ] ThreadのMutexの使いどころって言うのは、 1同じスコープを共有している 2同時に実行されている処理がある 1、2が当てはまる場合で、かつ2の両者が同じ変数をアクセスする際に Mutexは使うべきなんだと思うんですが、スレッドの処理がまるまるメソッド化 されている場合はそもそも1が当てはまらないから、Mutexは必要ない って認識でOKですか? #ex. i=0 th = [] def thread_run puts i end 1000.times{ th.push Tread.new{ thread_run } } while true i += 1 puts i end
252 名前:250 [2008/03/09(日) 01:30:13 ] いや、やっぱ for i in 1..5 Thread.new{ p i } end は他スレッドの影響を受けているのか。 そう公式リファに書いてあるもんなw 他スレッドの影響で i が書き変わって、 かつ、i はブロックの外側のスコープだから 影響を受けてしまうっちゅーことか。
253 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 08:35:45 ] スレッド生成した直後にスレッドの処理が終了するようなテストじゃ よそのスレッドの影響受けてるかどうかもわからんだろ for i in 1..5 Thread.start(i) {|n| sleep(n) ; puts 'i = %d : n = %d'%[i,n] } end
254 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 16:05:40 ] 「特定のWebサイトにある特定の動的HTMLを取得して解析してデータを蓄積・別途表示するよスクリプト」 というありがちなものを頑張って作ってます で、最近微妙にスレでも話題なRSpecとか使ってテストとかしようと思ったんですが、 「Webサイトに接続してHTMLを取得するかわりにローカルのHTMLファイルを読み込ませたい」です 定番の書き方とか方法とか考え方とかありますか
255 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 16:21:39 ] >>253 でたなsprintf厨
256 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 16:27:34 ] >>255 でも文字列への埋め込みよりは論理的にも見える ていうか指示子覚えちゃったら結構どっちもどっちだよね
257 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 16:47:32 ] >>254 とりあえず 「アクセス用URIを作るクラス」 「URIを引数で受け取ってHTMLを取得しそのまま返すクラス」 「HTMLを引数で受け取って解析しデータ構造にして返すクラス」 「データを引数で受け取ってDBとかに保存するクラス」 とか細かく分けるんだ
258 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 16:56:12 ] >>253 がそうかは知らないけど Python 使ってると Ruby でもそう書きたくなる 5.times じゃなくて for i in 1..5 してるのもそれっぽいと感じた 関数のカッコも省略してないし
259 名前:デフォルトの名無しさん [2008/03/09(日) 18:57:30 ] Rubyのライブラリリファレンス本て結構いい値段するけど ネットで見れるマニュアルに比べてのアドバンテージって何ですか? 検索も出来ないし、買う意味あるのかなーと思うんですが。
260 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 18:59:25 ] 結局はwindowsのHTMLヘルプが一番いいね
261 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:01:28 ] >>259 金光編のなら、持ってますが、買う価値ないです。
262 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:10:21 ] >>259 ・ まじめな意味でお布施 ・ オンラインヘルプの利用ができない環境向け ・ 安くない本を買ったんだからと自分を追い込む用
263 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:17:12 ] return self (returnなしでも桶)の効用がわかった気がする
264 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:24:33 ] 半年前の自分のスクリプトはいい意味でも悪い意味でも読めないよね Perlでの妙な凝りっぷりほどじゃないけどさ
265 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:41:28 ] ちょっと聞きたいんだけど、 irb(main):001:0> require "kconv" => true irb(main):002:0> puts "シーソーゲーム".kconv(Kconv::UTF8, Kconv::SJIS).kconv(Kconv::SJIS, Kconv::UTF8) シーメ[ゲーム => nil ってやると元通りのものが帰ってきてくれないのはなんでなんだぜ?
266 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 20:02:55 ] rubyのバージョンとかは?
267 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 20:05:05 ] バージョンあんま関係ないと思うぞ irb> p "シーソーゲーム".kconv(Kconv::UTF8,Kconv::SJIS) "\343\202\267\343\203\274\343\203\241[\343\202\262\343\203\274\343\203\240"
268 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 20:09:06 ] それ単純に$KCODEが適切じゃないだけだと思う puts "シーソーゲーム"でもシーメ[ゲームって出力されるだろ多分
269 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 20:23:12 ] $KCODEのデフォルトは日本語環境のWndowsであろうが、NONE
270 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 20:24:20 ] >>266 ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32] >>268 ぬぉほんとだ 勉強不足だったみたいだ 調べてくるありがとー
271 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 21:02:16 ] すまんもーいっこ聞きたいんだけど、ある変数ではSJISで、ある変数ではUTF8で持つとかってできないの? test = "シーソー" puts test.kconv(Kconv::UTF8, Kconv::SJIS) で、ruby -Ks hoge.rb とかすると意図した通りUTF8で"シーソー"って出てくるけど、$KCODE = "SJIS"とかだとうまく動いてくれんのだが… 2種混在とか無理なのか?
272 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 21:10:17 ] >>271 できるよ というかStringオブジェクト自体には文字コードの情報は付記されてない 内容を表示したり正規表現にマッチさせたりするときに利用メソッド側で改めて調べてる
273 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 21:24:28 ] >>272 そうなのかー リファレンス見ると、KCODEが影響するのは * インタプリタの字句解析器 etc って書いてあるけど、これって例えば test = "シーソー" の "シーソー" を評価するときにKCODEを元に評価してtestに代入するってこと? つか $KCODE = "SJIS" test = "シーソー" puts test ってやっても文字化けるのが納得いかん irbとかでやると化けずにでるのも意味がわからん…
274 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 21:35:55 ] #!ruby -Ks test = "シーソー" puts test
275 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 21:38:31 ] >>274 それでちゃんとできるのは知ってる $KCODEだとできたりできなかったりするのが不思議な昨今です
276 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 21:41:34 ] >>273 あ、悪い、$KCODEについては誤解がけっこう蔓延してる $KCODE='s'はRubyスクリプトだから、これが解釈されるということは既に実行済みってことでそのファイルについては手遅れなんだ (それ以降にrequireとかで読み込んだファイルは$KCODEにしたがって解釈してくれる) スクリプトの先頭からShift_JISだと認識した上で読み込んで実行してくれないと困るので、普通は-Ksを使う Windows版Rubyでも、 1行目に #!ruby -Ks とか適当に書いておくだけで、スクリプト解釈前(構文木生成前)に適当に解釈してくれる スクリプトを読み込む ↓ -Ks の出番 スクリプトを解釈する ↓ プログラムを実行する ↓ $KCODE='s' の出番
277 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 21:48:52 ] スクリプト中に書き込まれた日本語文字列に駄目文字がなければ $KCODE='NONE'(つまり #!ruby -Ks 無し)でも動くんだよ 駄目文字があった場合はうまく動作しない Ruby作者さんも言っとる ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/41939 > まつもと ゆきひろです > |あまりよい解決方法ではないかもしれませんが,二行目に > |$KCODE='SJIS' > |とするとruby -Ksと同じ挙動になると思います. > | > |#!/usr/bin/env ruby > |$KCODE='SJIS' > | > |のような感じでどうでしょう. > > 残念ながら「$KCODE='SJIS'」の解釈は実行時に行われるので、プ > ログラムの読み込みを行う時点での処理が行われません。たとえば > ソースコードがSJISであった場合に文字列中の「表」などの処理が > 適切に行われないことになります。
278 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 22:21:01 ] require したファイルの名前って一覧できますか。
279 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 22:23:14 ] >>278 irb> p $" ["irb.rb", "e2mmap.rb", "irb/init.rb", "irb/context.rb", "irb/workspace.rb", "irb/extend-command.rb", "irb/ruby-lex.rb", "irb/slex.rb", "irb/ruby-token.rb", "irb/input-method.rb", "readline.so", "irb/locale.rb", "kconv.rb", "nkf.so"]
280 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 22:25:29 ] >>278 $" ($LOADED_FEATURES)
281 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 22:27:09 ] >>279 ,280 さんくすです もいっこ質問。 PHPとRubyとで、Webアプリのセッション情報を共有することはできますか。
282 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 22:28:59 ] >>281 テキストでファイルに保存あるいはテキストベースで遣り取り可能ならできんじゃね
283 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 22:36:49 ] memcachedとかでもイケそう。
284 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 22:51:30 ] セッション情報って別に形式決まってないよな
285 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 23:44:58 ] >>276 そうなのかー $KCODE = "SJIS"を読んだ時点で設定が変更されんのかと思った つーことはファイル毎に文字コードの設定が可能ちぅことか >>277 ソースまで発掘してもらって申し訳ねぇ でも2行目でやればいいってのはなんでなんだろう? Rubyってインタプリタなんじゃないの? 読み込んだ片端から逐次実行なんじゃないの? わかんねー
286 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 00:09:27 ] 1.8は構文木、1.9は中間コードに一旦変換してるが、インタプリタには違いない ttp://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%97%E3%83%AA%E3%82%BF
287 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 00:14:18 ] 1. -Kオプションを解釈 2. パース 3. 実行 ソース中の「表」とかが問題になるのは2の時点、 $KCODEへの代入が実行される3の時点では手遅れ
288 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 00:32:56 ] >>286-287 全部一旦構文木にしてから実行すんのか? Rubyって前方宣言じゃなかったっけ? 前方宣言だよなぁ→読み込み即実行だよなぁ→$KCODEに値代入した時点で即有効になる気がするよなぁ っていう発想なんだが…
289 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 00:42:34 ] 宣言してるというより実行時に作り上げてるだけ
290 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 02:01:50 ] なんか勝手な前提で色々考えてる感があるが… $KCODE = "SJIS" ↑これだって単なる代入式なんだから実行されるまで作用しないだろ。 前方宣言どころかクラス定義やメソッド定義まで実行文だぞ。
291 名前:デフォルトの名無しさん [2008/03/10(月) 06:51:16 ] 配列自体をeachで変更したいのですが、どうしたらいいですか? 破壊的メソッドは!を付けるので each!とかやってみたのですが駄目でした
292 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 07:00:14 ] >>291 要素数が同じでいいなら普通はmap!やcollect!を使う irb> arr = [1,2,3] irb> arr.map!{|e| e*2} irb> p arr [2, 4, 6]
293 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 07:04:59 ] >>292 おお!ありがとうございました
294 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 07:19:01 ] mapでの写像を覚えるとRubyコードのステキ度が100単位でアップするので超お勧め 「配列の要素をひとつずつ取り出して計算してひとつずつ格納する」から 「ある配列にブロックを作用させてもうひとつの配列を作る」という思考と記述が自然に行えるだけで超絶パラダイム 昨日までの小学生レベルのプログラムの勉強とはオサラバよオ・サ・ラ・バ
295 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 16:36:07 ] WinXPで音声編集をできるライブラリがあったら教えてください。 RAAを見た限りではなさそうですが。 1. 1秒以上の無音部分で音声ファイル分割 2. file1とfile2を、間に1秒無音部を入れて結合 というような事をやりたいです。