1 名前:one [2009/05/16(土) 10:06:50 ] プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 【Ruby1.9.1 は従来版とは異なる部分も多く、書籍や解説やライブラリのサポートがまだありません】 【自力で解決できない壁で悩むことのない最新安定版の Ruby1.8.7 での学習をお勧めします】 ※1.8.7 は 1.8 系と 1.9 系の橋渡しをするためのリリースで、1.9 系 の便利新機能の一部が利用可能です 関連スレやURLは>>2-5 あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。 ■質問する人へ 質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。 ・モジュール名やエラーメッセージでググる ・マニュアルで引っかかったクラスの記述を探す www.ruby-lang.org/ja/man/ ・FAQを一応読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ 質問には以下を書くこと。へたくそな質問は再提出を要求される。 ・詳しい内容(「動きません」「うまくできません」では回答しようがない) ・エラーメッセージ(自力で訳さずなるべくそのままで) ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる)) ・最終的にやりたいこと(もっとよい方法がある場合が多いので) 回答してくれた人には「ありがとう」のひとことをいってあげて。 ■回答する人へ 相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。 それができないならこないこと(だって初心者スレだもん)。 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
144 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 17:55:05 ] >>143 スクリプトの話?本体の話? 前者はライブラリがある
145 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 17:56:24 ] >>132 第2引数は /path/to/file を渡しても /path/to/ とみなして処理される 相対パスを渡しても、絶対パスに変換したあとで基点とみなされる startint point という語にそれだけの処理の意味を任せるのは初耳だ
146 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 18:16:07 ] >>141 日本語版のリファレンスにはReFeというツールが付属していてだな
147 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 18:30:33 ] >>145 > 第2引数は /path/to/file を渡しても /path/to/ とみなして処理される 違う。あやふやな知識で書くより、ちゃんと試してみることをすすめる。 File.expand_path("foo", "/path/to/file") #=> "/path/to/file/foo" File.expand_path("foo", "/path/to/") #=> "/path/to/foo" File.expand_path("../foo", "/path/to/file") #=> "/path/to/foo" File.expand_path("../foo", "/path/to/") #=> "/path/foo" > 相対パスを渡しても、絶対パスに変換したあとで基点とみなされる > startint point という語にそれだけの処理の意味を任せるのは初耳だ これも違う。重要なのは戻り値は絶対パスだということ。 File.expand_path("foo", "path") が "path/foo" だったら絶対パ スじゃないだろ? 絶対パスを返すという仕様が前提なんだから、相 対パスは他にどう扱いようがあるというんだ。
148 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 18:50:06 ] >>144 ruby-gettext-packageは知ってる。 本体の出力メッセージとかの話。
149 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 18:55:53 ] GNU gettextはLの付かないGPLだから、使うとRubyを Ruby's ライセンスではなくGPLで配布する必要が生じるかも。
150 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 18:56:19 ] www.nicovideo.jp/watch/sm5071807
151 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 19:01:06 ] 「読まない人は日本語でも読まない」wwww
152 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 19:16:33 ] インタプリタの出すメッセージは用語みたいなもんだから 翻訳するとかえってめんどくさいことになりそうな
153 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 19:23:19 ] 入ります
154 名前:デフォルトの名無しさん [2009/05/22(金) 19:28:51 ] みんな なでしこ やったことある?
155 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 19:40:55 ] このスレでその質問をするココロは?
156 名前:デフォルトの名無しさん [2009/05/23(土) 02:19:17 ] @port = port if( !port.nil? ) の解釈で質問です。 最初の@はインスタンス変数で、右辺のifは修飾子だと思うのですが、 ()内の「?」の意味が分かりません。 これがは文字コードリテラルとは思えませんし・・・ どういう意味(役割り)なのでしょうか?
157 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 02:24:44 ] nil? というメソッドです
158 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 02:48:30 ] いちおう補足、リファレンスでObjectクラスのインスタンスメソッドを眺めてみて しかしなんというか、不慣れな時期にそのコードというのは運が悪いな せめて @port = port unless port.nil? と書いてほしい
159 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 02:53:02 ] うーん。識別子に使える文字等の解説が見つからない。 ttp://www.ruby-lang.org/ja/man/html/_BBFAB6E7B9BDC2A4.html#a.bc.b1.ca.cc.bb.d2 ↑これ、ぶっちゃけ不正確じゃね?
160 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 02:59:45 ] >>157-159 さんきゅうです。 つまり if( !port.nil? ) というのは、「portが無効でないなら(不活性でないなら)〜」 ということでOKですか?
161 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 03:05:25 ] うんにゃ。 if( !port.ni? ) → if()
162 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 03:07:57 ] あら。途中で書き込んだ。 if( !port.ni? ) → if( !port.nil? == true ) → if( port.nil? == false ) で理解してくらはい。 port.nil? は boolean を返すことが期待されてるメソッドです(たぶん)。
163 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 05:05:12 ] Ruby に Boolean などというものはありませんが何か あーでも結構使ってるなー >>156 A if COND という構造だということはわかってるんだよね if はメソッドではなく制御構造だから、このカッコは引数のカッコではなく式を作る「まとめカッコ」だ 中身1つだけだから、本当はこのカッコは必要ない で、最初の ! は否定の NOT だ ttp://www.ruby-lang.org/ja/man/html/_B1E9BBBBBBD2BCB0.html#not 直後にあるものの真偽の概念を逆転する つぎの port はなんらかのローカル変数またはメソッド呼び出しで、 ドットで繋がってる nil? は port の返り値のクラスの nil? というメソッド port のクラスで再定義されていないのなら、それは Object#nil? で、オブジェクトが nil である場合に true を返す まとめると、 「port の返り値が nli でない場合に、@port に port の返り値を代入する」 となる
164 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 05:14:20 ] Rubyではよっぽどでない限り @port = port unless port と書くけどな ・ port に false が入る可能性があって、それは nil とは違う処理が必要 ・ port が nil であるというのが何か重要なサインであってソース読み下し上目立たせたい というのでない限り、今回でいうところの 「port に何か入ってたら @port に入れとく」 というフツーの意図である限り、 Ruby では unless を使う
165 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 05:35:31 ] >>164 .gsub("unless", "if")
166 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 05:58:35 ] 「nil でない」なら if だと思う
167 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 10:07:30 ] # データからHTMLを作って返す def html html = String.new … return html end というように、メソッド内のローカル変数名とそのメソッドの名称が全く同じなのって、ある程度は紛らわしいですよね できれば避けるべきなんでしょうか?
168 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 10:58:18 ] 再帰のような処理と混同する可能性があるってこと? メソッド内1行目でローカル変数として定義されてれば読んでて混乱はしないと思う if (html = init_data) then みたいにどっかの文の途中でこっそり変数定義を使ってることがあるとか、 変数とメソッドを混ぜて使い倒してる処理があるとか、そういうのが1ヶ所でもあれば注意深く読む
169 名前:デフォルトの名無しさん [2009/05/23(土) 11:28:11 ] IOのexpertな方、教えてください >< # afio - manipulate archives and files COMMAND = "afio -oZ -" IO.popen(COMMAND, "r+") do |src| Find.find("/etc") do |f| src.puts(f.chomp) end src.close_write File.open("myArchive.afz", "w") {|dst| dst.write(src.read)} end afioコマンドが pipe_wait になって終了しません。 何が悪いのでしょうか?
170 名前:169 [2009/05/23(土) 11:49:24 ] ちなみに、コマンドライン上から $ find /etc | afio -oZ - 1>./myArchive.afz とやれば、何も問題なく動作するんです。 ワケワカメで頭が破裂しそうです ><
171 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 11:52:44 ] afioコマンドが、入力を読み切らずに何か書き出そうとして固まってるとか?
172 名前:169 [2009/05/23(土) 13:22:11 ] afioで作成されたアーカイブをバイナリエディタで読んでいてふと思ったのですが、 なにやらヘッダらしきものが書かれていて、その後ろにgzipで圧縮されたバイナリがずらーと並んでいる感じです。 このバイナリファイルをハッキングして、自分でライブラリを書いてしまえばいいと思いました。 外部のコマンドに投げるよりはよりキレイに書けるとおもいまつ。 ありがとうございました。
173 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 13:25:37 ] >>169 原因は>>171 の通りだろう。 アーカイブデータをなんか加工したいというんでなければ、直接書き出させた方がよい。 あとFind.findからyieldされるパス名はchompする必要はない、というかしてはいけない。 COMMAND = "afio -oZ myArchive.afz" IO.popen(COMMAND, "w") do |src| Find.find("/etc") {|f| src.puts(f)} end
174 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 13:39:58 ] >>172 manpageによるとcpioフォーマットだな Except in special cases discussed below, afio will create archives with the same format as ASCII cpio(1) archives. 以下に述べる特殊なケースをのぞいて、afioはASCII cpio(1)アーカイブと同じ フォーマットでアーカイブを作成する。 When creating an archive, the `large ASCII' header is used by afio to cover the following situations: アーカイブを作成する際、以下の場合は「large ASCII」ヘッダが使用される。 o A file has a size larger than 2 GB ・ 2GBよりも大きいファイル o The archive contains more than 64K files which have hard links ・アーカイブ中のハードリンクが64Kを越えるファイル o A file, directory, or special file has a UID or GID value larger than 65535. ・65535より大きいUIDやGIDを持つファイル、ディレクトリ、特殊ファイル
175 名前:169 [2009/05/23(土) 21:41:37 ] すみません、最後に勉強のためにも教えてください。 納得したらもう寝ます。 >>171 にある、STDINからの入力を読み終わる前に、STDOUTに出力してしまうということがあり得るのでしょうか。 全て入力した後に IO#close_write も呼びましたし、他に意識することって何でしょうか。 Pythonの os.popen2 で同様の事をやってみたのですが、あっさりうまくいって クソワロタ状態です (;_;) >>173 ファイルシステムに頼らずにゴニョゴニョしたいので、開いたままで 何とか出来ないかと考えておりました。... 無理そうなら他の方法も探しますが。 > あとFind.findからyieldされるパス名はchompする必要はない、 > というかしてはいけない。 すみません、確かにchompする必要はありませんでしたね。 でも「してはいけない」というのは何か致命的にまずい問題があるのでしょうか。 以上、よろしくお願いします。
176 名前:デフォルトの名無しさん [2009/05/23(土) 23:24:38 ] whileの条件による終了(ループ脱出?)が分かりません。 下記は受信サーバー側のSocket通信の記述で、クライアントからの 信号s(オブジェクト)を受信したらRubyを終了したいのですが・・・ while true Thread.start(gs.accept) do |s| print(s, " is accepted\n") puts(s.gets) s.close break # ここでは無効 end end どう変更すべきでしょうか?
177 名前:169 [2009/05/24(日) 00:19:36 ] あああ、pythonでうまくいったというのは勘違いでした。(test caseのミス) でも IO.popen("cat | afio -oZ -") のように、catコマンドをクッションにしてみたらうまくいきました。 なんでだろうね。 バッファの関係?? 朝起きたらlinux板でも行って聞いてみます。。もう疲れた。
178 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 01:15:44 ] >>175 > >>171 にある、STDINからの入力を読み終わる前に、STDOUTに出力してしまうということがあり得るのでしょうか。 もちろんあり得る。それはプログラムの構造次第。afioの場合ファイル名を受 け取れば処理できるんだから、一つ分出力してもなにも不思議じゃない。 >>177 は、catでバッファリングされてclose_writeされるまでafioに何も渡されて ないんだろ。 > >>173 > ファイルシステムに頼らずにゴニョゴニョしたいので、開いたままで > 何とか出来ないかと考えておりました。... 無理そうなら他の方法も探しますが。 書き込みと読み込みでThreadをわける。 IO.popen(COMMAND, "r+") do |src| Thread.start do Find.find("/etc") do |f| src.puts(f.chomp) end src.close_write end File.open("myArchive.afz", "w") {|dst| dst.write(src.read)} end > でも「してはいけない」というのは何か致命的にまずい問題があるのでしょうか。 "\n"で終わるファイル名を正しく扱えない。
179 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 01:19:36 ] >>176 mth = Thread.current while true Thread.start(gs.accept) do |s| print(s, " is accepted\n") puts(s.gets) s.close mth.raise(SystemExit) end end
180 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 01:32:45 ] >>176 gsってTCPServer? サンプルをコピーしたとするとwhileで囲う必要もスレッドを生成する必要も無いと思う s = gs.accept print(s, " is accepted\n") puts(s.gets) exit
181 名前:176 mailto:sage [2009/05/24(日) 02:49:36 ] >>179-180 Thx 確かにwhile文無しでもOKでした。 今回は ttp://www.ftnk.jp/~fumi/cl/2007-11-24-1.html を参考にしました。 すいません。もう一つ質問です。 上記HPのクライアント側を改変して2行のテキスト「memo.txt」を読み込み サーバーに渡すように data = File.read("memo.txt") puts data # チェック用 s.puts(data) を書きました。 クライアント側では2行で表示されるのですが、サーバーの表示 puts(s.gets) では最初の1行目のみが表示されます。 これは何故でしょうか?
182 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 03:57:22 ] 文字列がcopy on writeじゃないのが他の言語と違って結構ハマることが多いのですが、 何か気をつける方法ってないのでしょうか? Rubyでは全部オブジェクトってのはわかっているつもりなのですが…。 #!ruby -Ku a = "hage" b = a b << "UNKO==!!" def change_string(s) s << "(((^^)))))" end change_string(b) puts a, b 結果: hageUNKO==!!(((^^))))) hageUNKO==!!(((^^)))))
183 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 04:50:17 ] >>181 IO#gets が何をするメソッドなのかマニュアルで調べてみ >>182 それって別に文字列に限った話じゃないよね 配列、ハッシュ、その他のオブジェクト、なんでも当てはまる オリジナルでは無くてコピーが必要なら必ずdup,clone、を徹底するしかないかな
184 名前:176 mailto:sage [2009/05/24(日) 05:02:30 ] >>183 どうも。 readに変えたらOKでした。
185 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 05:45:31 ] >>182 Rubyのあらゆる変数(や定数)はただの参照タグだ a = HogeObject.new は HogeObject.new の処理の最後を辿って(return してた)そのオブジェクトに存在を許して それに a という参照タグを1個つけるという行為 b = a は a の処理の最後を辿って、つまりは a の返り値のオブジェクト、に b という参照タグを追加する行為 Ruby スクリプトは変数の名前を後生大事に覚えてるわけじゃない Rubyはスクリプトのそれが変数名だとわかったら、その変数が参照している先にあるオブジェクト (の保管場所を表す数値「オブジェクトID」)だけを記憶する だから、 a = なにか b = a と書いた時点で、変数 a も変数 b も全く同一のオブジェクトを指す(つまり、一般的にはあまり意味がない) a = "なにか" p a.object_id b = a p b.object_id p a.object_id == b.object_id
186 名前:182 mailto:sage [2009/05/24(日) 05:51:03 ] >>183 >>185 せっかく説明してくださって申し訳ないのですが 原理をわかってて言ってるのです…(´・ω・`) 他の言語のつもりで書いちゃうと、ついバグを埋め込んでしまう まあ、ユニットテストしっかりしろってことになるのだと思いますが…。
187 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 05:52:21 ] で、既存のオブジェクトを破壊せずに、その内容を利用した新たなオブジェクトを作りたい場合は、 その既存のオブジェクトを破壊しないような方法を意図的に使う a = "hage" b = a + "ADD" def change_string(s) s + "CHINGE!" end c = change_string(a) p a, b, c 結果: "hage" "hageADD" "hageCHINGE!" オブジェクトを「足して」新たなオブジェクトを作るようなメソッドが提供されていなかったらどうするか、というのなら そりゃ>>183 の言うようにオブジェクト内容自体を複製して新たなオブジェクトを作る dup や clone を使うしかあんめえ
188 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 05:54:44 ] >>186 「わかってない」と思う わかってるのなら“絶対に間違えない”から 逆にいうと、オブジェクトと変数の関係を理解するまではよーわからんバグで悩まされて 変数は安全のためにと称して全部 initialize やメソッド定義の 1行目で dup することになるんだけどな
189 名前:182 mailto:sage [2009/05/24(日) 05:57:44 ] >>188 「わかってる」のと「間違えない」というのは等しくないですよ。 わかってて、正しいことができるなら、俺は今頃、億万長者になってる
190 名前:182 mailto:sage [2009/05/24(日) 06:00:14 ] 変なところだけレスして煽りっぽくなってしもうた orz 流してくださいwww >>187 ああ、なるほど、確かに既存のオブジェクトを破壊しないでコピーされる場合は、OKですね。 >>188 メソッドなどで渡された引数とかなるべくdupするわけですか。なるほど。
191 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 06:01:54 ] >>189 いいえ、理解してないんです 「他言語を使いこなす俺がこれごときを理解できていないはずがない」というようにプライドが邪魔をしてるだけです 本当は理解してないのを見なかったことにして「他の言語と違って結構ハマる」と問題を差し替えているのです これは特に目新しい概念というわけでもありません きちんと理解しましょう
192 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 06:27:16 ] むしろ Ruby に慣れると、ほかのスクリプト言語で「同じデータ」を使う必要性が出てきたときに メモリでどういう状態になってるのかがとっても気になる Ruby なら同じものを使い倒してるということが感覚的にわかって安心できるんだけれど
193 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 06:41:45 ] >>190 よく読め dup なんてまずしない しなければならないときはもちろんするが、普通はしないで済む方法を考える 「とりあえず dup」をしないとわけがわからなくなる初心者は dup する、と言ってるだけ いい解説に出会えない独学系初心者の多くが通る無駄道ではあるが、 こんな期間は短いほどいいし、これに嵌る前に回避できれば最高だ
194 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 06:44:59 ] >>182 「copy on write」とかいってる時点でまるでわかってない
195 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 07:51:49 ] >>167 >というように、メソッド内のローカル変数名とそのメソッドの名称が全く同じなのって、ある程度は紛らわしいですよね >できれば避けるべきなんでしょうか? 心配なら変数名を _html とかに変えればオK >>194 ワハハ、その通りだ
196 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 08:09:06 ] 俺は「わかってれば絶対に間違えない」とは思わないな 他言語の経験が短い俺でも、たまにdupし忘れることがある 結局は慣れだろう ただ、時々ではなくて頻繁に間違えるというのであれば、ちゃんと理解できていないのかもしれない 実際に間違えたコード例を晒してもらえれば、もう少し具体的なアドバイスができるかも
197 名前:182 mailto:sage [2009/05/24(日) 08:35:40 ] >>194 うーん?頼む! 2chでよくあるのだけど、「コイツはアホ」とか「わかってない」とか言う時は「何故か」を明らかにしてほしいです。 言っている本人は本当にそうなのか判断できず、煽りかと思ってしまうので。 "copy on write"は書き換えたら、コピーされるという意味の用語です。 この言い方は一般的じゃないのかな? Delphiの組み込みのstringの機能がそう呼ばれているわけなんですが。 (ただ、この辺はけっこうマジック的な扱いで、 Delphiでも文字列と似たような振る舞いをする動的配列では、 copy on writeはしなかったりとDelphiの中でもけっこう戸惑う扱いです) >193 慣れたら、dupしないように書く、ということでしょうか?
198 名前:182 mailto:sage [2009/05/24(日) 08:40:25 ] ああ、でも書いていて思ったけど、 オブジェクトのメソッド呼び出しで copy on write がどうのって確かに変だよなー。 そもそも、組み込み型じゃないん(というよりコンパイラが特別扱いしてない)だし とはいえ、それよりも、 俺が聞きたいのは、どうすれば気をつけられるんでしょうか?ってことなんですが、 その答えは「理解しろ」ってことなんでしょうから、「お前はわかってない」なんていわれるんですよね…。
199 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 08:54:52 ] > どうすれば気をつけられるんでしょうか? 無駄に破壊的メソッドを使わないってだけでいいんではないかと思った。
200 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 09:02:24 ] >>185 が普段使いで必要十分な一般的な理解 これができない場合は無理
201 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 09:10:34 ] オブジェクトと参照の問題ってだけだからな
202 名前:196 mailto:sage [2009/05/24(日) 09:14:13 ] >>197-198 >どうすれば気をつけられるんでしょうか? 実際に間違えてるコードを見ないと、何とも言えないが とりあえず破壊的メソッドと非破壊的メソッドの違いを意識することは大事 あと copy on write に関しては、「Rubyにその概念はない」としか言えない なぜなら 破壊的メソッド → オブジェクトの内容を直接書き換える(オブジェクトのコピーはしない) 非破壊的メソッド → 元のオブジェクトのデータを読んで、それを元に新しいオブジェクトを生成して返す であって、どちらの場合も「書き換えたときにコピーする」という動作はしてないから "abc\n".chomp! # 文字列 "abc\n" の内容を変更する(新しい文字列は生成しない) "abc\n".chomp # 文字列 "abc\n" を元に、新しい文字列 "abc" を生成して返す
203 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 09:15:54 ] ・代入したり引数で渡すだけじゃコピーされないよ ・破壊的なメソッドには大概 ! とか = とか付いてるから目安にして気をつけてね としか
204 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 10:06:47 ] mutableと言いたいんだろcowじゃなくて てかcowは実装の詳細であってプログラマからは掩蔽されるものだ
205 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 10:09:22 ] >>197 きみはもしかしたらcopy on writeについては理解しているのかもしれないけど それがRubyとはまったく関係ないことが理解できてない
206 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 10:13:21 ] インスタンス変数の配列の要素への代入とか、ちゃんと最初にdupなりしておかないと わけわからんようにはなりそうだけどね。
207 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 10:28:53 ] >>206 どっかでの変更がリアルタイムに反映されるなにやら便利な配列として扱うような気もする ともあれ、目的を確定させた上で処理すべきだな とりあえず○○するとかそういうのはありえん
208 名前:169 [2009/05/24(日) 13:03:40 ] >>178 | \ __ / _ (m) _ピコーン |ミ| / `´ \ ('A`) ノヽノヽ くく そうか、子プロセスが終了するまで親プロセスはwait状態になるのか! IO.popen("ruby -e 'sleep(30)'", "w") do |io| p io.puts("my message") #=> nil puts "ok, all finished !" # After a few seconds... p io.close_write #=> nil puts "closed?" end うわー、完全に失念していましたよ。 wait状態だから、実際には IO#.close_write がコールされずに止まっていたわけか。 Threadを生成してやってみたらうまくいきました! 本当にありがとうございましたです。
209 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 14:56:40 ] ちゃうねん。 system(3) とかだと子が終わるのを待つけど、popenは同時に実行するためのAPI。 その例だと、何も読み込まない ruby -e 'sleep(30)' に io.puts("my message") で 書き込もうとして固まってるわけ。
210 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 15:58:43 ] 169の環境はMS-DOSなのかも知れない
211 名前:169 [2009/05/24(日) 16:23:30 ] ピコーン!今度こそわかりました。 IO.popenでafioコマンドにパイプを確立し、IO#.writeで標準入力に読み込ませる。 afio君は標準入力から来たファイル名を開いて、適切なフォーマットで標準出力に吐き出そうとする。 afio「さあバイナリができましたわよ。もらってちょうだい!随時出力するから。」 しかしreadされないため、 afio「なにやってんの!早くreadしてよ。わたしのバッファサイズはそんなに大きくないのよ。 メモリだって有限なんだから。あなたがreadしない限りいつまでもwaitするわ!」 ということなんですね。
212 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 18:00:14 ] 少しお聞きしたいのですが、 railsでrake db:migrateを行うと mysqlが以下のエラーを吐くのですが、 >rake db:migrate (in d:/web/redmine/redmine) == 1 Setup: migrating ========================================================= -- create_table("attachments", {:force=>true}) rake aborted! undefined method `each' for #<Mysql:0x803e550> (See full trace by running task with --trace) これって、MySQL 5.1はWindowsだとダメヨという既知な問題なのでしょうか? xamppごとMySQL 5.1を入れてしまっているもので、MySQL 5.0で上書きしてよいものかどうか・・・ Nabble - RubyOnRails Users - rake aborted! undefined method `each' for #<Mysql: www.nabble.com/rake-aborted!-undefined-method-%60each%27-for--%3CMysql:-td20760472.html
213 名前:212 mailto:sage [2009/05/24(日) 19:08:38 ] >>212 のサイトにあったInstantRailsのlibmySQL.dllを (rubyインスコディレクトリ)/bin に配置したところ、 無事にdb:migrateできました。 5.0のDLLだろうと思うので不安ではあるのですが、様子を見ながら使ってみようと思います。 >The problem is that libmysql.dll shipped with Mysql doesn't play well > with ruby 2.2.. > The solution is to download the libmysql.dll from: > instantrails.rubyforge.org/svn/trunk/InstantRails-win/InstantRails/mysql/bin/libmySQL.dll > and save this in your ruby bin directory ありがとうございました。
214 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 23:12:09 ] pc11.2ch.net/test/read.cgi/php/1241100447/ 【Ruby】Ruby on Rails Part7
215 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 23:24:50 ] 文字列を spl iして、文字種類の境界で分ける方法はありますか。 たとえば x=("abc123+456def").split(/??書き方不明/) とすると x[0]="abc" x[1]="123" x[2]="+" x[3]="456" x[4]="def" みたいにしたいのですが。
216 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 23:44:58 ] >>215 「文字種」の定義次第では可能。
217 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 00:02:58 ] >>215 たとえば、シンプルでいいなら下記のようなことはできる(splitじゃないけど) "abc123+456def".scan(/[a-zA-Z]+|\d+|\W+/) #=> ["abc", "123", "+", "456", "def"] んだから、>>216 の言うとおり「文字種」を定義すれば可能。 で、それを定義してるUnicodeブロックなるものもあるらしい ttp://module.jp/blog/regex_unicode_prop.html Rubyでは鬼車採用の1.9以降、になるのかな? 詳しくないけど、参考になれば
218 名前:デフォルトの名無しさん [2009/05/25(月) 03:58:48 ] Rubyの使用メモリ量を調べるにはどう書けば良いのですか?
219 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 04:05:30 ] >>218 できません
220 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 05:24:54 ] Ruby自体から知る方法は確かにないが、環境依存で外部ツールを読んで取得するライブラリがrubygemにあったと思う
221 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 08:25:31 ] undefined method `inner_text' for nil:NilClass (NoMethodError) …う、うぜえ
222 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 12:13:12 ] どうでもいいけど、委譲関係ってマニュアルもるびまも要領得ないよね
223 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 12:16:27 ] メモリ使用量、ヒープの個数くらい Cのメモリマネージャから取れるようにしておけばいいのに 無理な環境は0にしておいて
224 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 12:29:00 ] >>222 あんま多用して欲しくないんだよ たぶん
225 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 15:11:55 ] GnomeVFS for Python の gnomevfs.get_file_info() ※ に相当する GnomeVFS for Ruby のメソッドをご存じの方いましたら教えてください。 ※ www.pygtk.org/pygnomevfs/gnomevfs-functions.html#function-gnomevfs--get_file_info
226 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 15:31:28 ] これ廃止予定じゃない?
227 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 15:34:51 ] >>225 File.statじゃあかんの? gtkとかgnomeとかってAPIコロコロ変えるから嫌い
228 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 15:38:36 ] >>227 VFSごしにウンタラカンタラしたいのだろう
229 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 15:41:44 ] Gnomeの開発者も、VFSはもうやる気がないみたいだがw
230 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 15:48:04 ] >>221 asin = doc.at('ASIN').inner_text こんなのだろ doc.at('ASIN') が nil になる可能性があるから tag_asin = doc.at('ASIN') asin = if tag_asin then tag_asin.inner_text else nil end みたいに場合分けで書かなければいけない こういうのってなんかイイ書き方ないもんかね
231 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 15:53:09 ] >>230 >>73-86
232 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 18:23:28 ] >>219-220 てんきゅう
233 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 19:07:46 ] >>217 >scan(/[a-zA-Z]+|\d+|\W+/) ありがとうございます。 scan にこんな使い方があったんですね。 こんな正規表現の記法は知りませんでした。 あまり難しいことはまだ無理なので、これでいきます。
234 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 19:45:24 ] >>222 疲れてるときは全然読めないな 何言ってるかさっぱりわからん 用途別にまとめてくれてると頭に入ると思う
235 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 19:54:10 ] >>233 一応補足しておくと、 \W とかの文字クラス表現は中身を確認しておいた方がいいよ 例示だから適当でいいんだけど、>>217 のは "_" とかスルーするね。 また、改行やスペースの扱いとか、意図通りに動かすためにはちょっと気をつけて。
236 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 23:24:11 ] 本格的なものが必要なら、 StringScannerとかを使って自力で解析器を書くべきかもしれない
237 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 14:06:21 ] 質問 トップレベルにて定義されたメソッドの一覧を取得する方法はありますか? toplevel_methods = Object.private_instance_methods toplevel_methods -= Kernel.private_instance_methods で、大体は絞り込めるのですが、トップレベルに未知のモジュールが include される 場合などを考えるとこのやり方では心もとないです。 トップレベルで定義されたメソッドだけをきれいに抽出する方法はないものでしょうか。
238 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 15:00:51 ] Object.private_instance_methods(false) * 1.8 系だと initialize も含まれる * ふつうに、 class Object def bar end private :bar end とした場合との区別がつかない
239 名前:237 mailto:sage [2009/05/27(水) 15:25:23 ] 自己レス あれこれ考えた結果、無理にトップレベルでやろうとするのが間違いと気付きました。 モジュールでラップして MyModule.instance_methods(false) で済みますね お騒がせしました。
240 名前:デフォルトの名無しさん [2009/05/27(水) 20:50:38 ] 初心者です。Webrickでキャッシュプロキシを作ろうと思ったのですが、 実装例を見つけられませんでした。とりあえず書いてみたのですが問題があります。 1.ヒットした場合にWebサーバにアクセスしないでブラウザに戻す方法がわからない。 2.WEBrick::HTTPResponseのインスタンスを単純に復元しただけでは上手く表示できない。 #/usr/bin/ruby 1.8.7p72 webrick 1.3.1 winXP require 'webrick' require 'webrick/httpproxy' db = Hash.new() rcHandler = Proc.new() do |req, res| if db.key?(req.unparsed_uri) res = db[req.unparsed_uri] end end handler = Proc.new() do |req, res| db[req.unparsed_uri] = res end config = { :BindAddress => '127.0.0.1', :Port => 8080, :ProxyContentHandler => handler, :RequestCallback => rcHandler } s = WEBrick::HTTPProxyServer.new(config) [:INT, :TERM].each{|sig| Signal.trap(sig){s.shutdown}} s.start 実装例とかヒントをいただけたらありがたく思います。
241 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 21:09:52 ] NicoProxy2とか
242 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 21:56:44 ] かなり前の知識しかないけど、webrickってresponseしかいじれないんじゃなかったっけ。 requestは無理だったきがす
243 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 22:14:41 ] >>240 俺がやってるのはこんな感じ class MyProxyServer < WEBrick::HTTPProxyServer def proxy_service(req,res) if req.request_uri がキャッシュされてるなら # キャッシュを読み込んでresにセット else super # resをキャッシュファイルに保存 end end end
244 名前:240 [2009/05/27(水) 22:51:04 ] >>243 なるほど、マイリマシタ。 RequestCallbackハンドラなんて要らなかったよう。 方向を間違えると収拾つかなくなるいい例ですね。 ありがとうございました。
245 名前:240 [2009/05/27(水) 22:56:46 ] >>242 リクエストはRequestCallbackハンドラで変更可能だと思います。 一応、240のプログラムは完動品ですので、よかったら試してみてください。 どうもありがとう
246 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 14:16:14 ] RubyGemsのアップデートに失敗してしまいます。 ねーよって言われるんですが、どうしたものでしょうか? Windowsでのアップデートは失敗した覚えがないのですが… > sudo gem update --system Updating RubyGems... Bulk updating Gem source index for: gems.rubyforge.org Attempting remote update of rubygems-update ERROR: While executing gem ... (Gem::GemNotFoundException) Could not find rubygems-update (> 0) in any repository 環境: ・Ubuntu 8.04 LTS ・Ruby -v ruby 1.8.6 (2007-09-24 patchlevel 111) [i486-linux] (aptitudeで入れた) ・RubyGems 0.9.4 (aptitudeで入れた)
247 名前:246 mailto:sage [2009/05/28(木) 14:24:30 ] すいません。5回くらい試していたら、無事に入りました 恐れ入ります。
248 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 14:35:40 ] バージョン1.1以前のrubygemsは粗大ゴミなのでとっとと入れ替えましょう Debianパッケージでrubygemをインストールするとrubygemのアップデートが実質不可能になるのでアンインストールすることをお勧め まあ、そうするとDebianパッケージシステムで管理できない野良パッケージシステムができてしまうんだけど、 まあ、背に腹は変えられん
249 名前:デフォルトの名無しさん [2009/05/28(木) 16:52:12 ] array[0][:value] == 'dog' || array[0][:value] == 'cat' みたいなのをもっと短くできんもんでしょうか? array[0][:value].equal?('dog', 'cat') みたいな感じに。rubyならできるような気がするのですが・・どなたか教えていただけるとうれしいです。
250 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 16:57:42 ] ['dog', 'cat'].include?(array[0][:value])
251 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 16:58:23 ] ['dog', 'cat'].include? array[0][:value]
252 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 19:51:25 ] %w[dog cat].include?(array[0][:value])
253 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 19:59:58 ] case array[0][:value] when 'dog', 'cat' end じゃだめなの?
254 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 20:11:25 ] 用途による >>249 みたいなのは後置の if みたいなので1行で条件が書けることが望まれてるんだろう
255 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 20:15:34 ] >>253 短くなってないじゃん。 >>254 case str when "dog","cat"; true; else; false; end
256 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 20:25:04 ] Windowsで、RubyとC言語で書かれた2つのプログラムでテキストファイルを使って情報をやりとりしたいんだけど Rubyからテキストファイル開くときにC言語のプログラムから読み書き禁止させたいんだけど、そういうことできるの? C言語だと_fsopenてのがあるけど、RubyのFile.open にはそういう機能ないっぽいんだけど・・・
257 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 20:31:59 ] >>255 1行にまとめることができるというのと、1行で書けるというのには天と地ほどの差があるのだよ
258 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 20:41:16 ] >>257 そうか? 少なくともこの場合、戻り値のある式であればいいんじゃね?
259 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 21:07:32 ] ちょうどいま Object#in? (定義はinclude?の主客転倒)という メソッドの導入の是非についてのスレッドがML(えーごの)で出てますな。 # 何度めやら。
260 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 21:23:49 ] >>256 _fsopen は C言語の機能ではない。 _fsopen はなんか「読み書き禁止」なんてしなくてむしろ共有読み書きをするっぽい。 Rubyでファイルの共有とか排他とかはFile#flock
261 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 21:25:11 ] include? を持つ引数を取って、みたいな感じかな あってもいいんじゃないとか思うが、あんまり賛同されてなさそうな雰囲気
262 名前:デフォルトの名無しさん [2009/05/28(木) 22:20:05 ] (∀`*) (●´Д`) { {
263 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 23:29:10 ] >>259 なんかそれ実際に使えるようにしたライブラリなかったっけ どこかで見た記憶はあるんだけど、思い出せない
264 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 00:15:36 ] facetあたりじゃね?
265 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 00:28:23 ] ほんとだ ttp://facets.rubyforge.org/doc/api/core/classes/Kernel.html#M000425
266 名前:249 [2009/05/29(金) 00:47:11 ] おー色々ありがとうございます。 結局 ['dog', 'cat'].include?(array[0][:value]) これがいいかな、と・・後置のif文なので。 in?みたいなメソッド、今のところは無いんですねぇ。 今MLで話になってるみたいですが、in?みたいなの導入のネガティブな点って何があるんでしょう?
267 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 01:10:58 ] >>266 > これがいいかな、と ぶっちゃけ、それしか出てないという気もw (caseはネタだろ) でも、 > 後置のif文なので ってのは、caseでもいけるっていう話で > 今MLで話になってるみたいですが、in?みたいなの導入のネガティブな点って これのことだろうな↓ ttp://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-core/23543?23446-23591 斜め読みでは、 「あったら便利だぜ」 vs 「んなもんKernelに入れるってのはどうなの」 って感じに見える。 過去にもあったんなら、もうちょっと丁寧な話もしてたのかな。 詳しい人の解説を期待してみたりして。
268 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 01:16:02 ] Kernel#in? (Objectじゃなかた)への反対意見は * どこかの集合に含ま「れる」というのはメンバーの特性と言えるのか * 実装は簡単だから自分の環境でやっとけばいいじゃん * すべてのオブジェクトの名前空間を汚染してまで導入すべきもの? などがあるようだ。
269 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 08:58:43 ] >>264-265 SUGEEEEE! こんなライブラリがあったのか 今まで全然知らなかったんだけど、実はけっこう有名なライブラリ?
270 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 09:06:31 ] アプリケーションサーバに興味のある人にとってはそこそこ有名 わざわざそんなことやろうという人そのものが稀なので、それ以外の人にとってはさっぱり
271 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 12:54:49 ] -talkだと結構名前を見かけるが、実は日本じゃあまり知られてない?
272 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 13:12:30 ] 日本のRubyユーザーってRubyを何に使ってるのか正直よくわからん
273 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 13:22:19 ] >>272 同感。 最近別言語から Ruby をはじめたんだけど、 有名アプリも少ないし、日本語の扱いや Rails 以外だと Web が面倒だったり。開発環境も貧弱。 1.9 の非互換で騒がれていないものな。 PHP なら 4 → 5 で騒がれたけど。 1 日でできる blog くらいしか作ってないのか?という感じ。
274 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 13:28:11 ] 1日で作れるような100行単位の日常スクリプトを作り倒しまくってるというのは確かだと思う かつてのUnixユーザーがシェルスクリプト作りまくるのが日常だったように、 Rubyユーザーは自分用スクリプトを作りまくって日常を便利に過ごす んが、まあ、これはこれで一部の人だろうな 最近作った・手直ししたもの挙げていけばアクティブユーザーの傾向が少しでも掴める?
275 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 13:34:17 ] Rubyについて Part 35 pc12.2ch.net/test/read.cgi/tech/1238194350/
276 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 13:41:13 ] >>275 Rubyに関係ないスレのURL張られても困る > 島根 > 島根 > 鳥取 > 島根 > 鳥取 > 島根
277 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 16:34:09 ] ゲーム と言いたいところだが、今のところRubyベースで有名なゲームは皆無に等しいな RPGツクールのスクリプトで使われてはいるが 274の言うように日常のツールとして使うと超便利で、あと他には * 大小問わずWebアプリケーション(CGIアプリケーション)を作りたいとき * RADを使わずにGUIアプリを作りたいとき(WxRubyなどを使う) * 簡単な数値・確率計算がしたいとき なんかに使う 特にRakeの便利さは異常 俺はもうRakeなしでは快適なPCライフを送れない >>273 Webアプリならそこそこ有名なのはあるよ。tDiaryとか あとWeb周りが面倒だったのは昔の話で、今はWEBrickやRackがあるからむしろ楽なはず
278 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 16:50:24 ] 処理が少しくらい遅くても重くても作りやすくてメンテしやすいほうがいいこともある、という裏方用途にガッチリはまったので、 Rubyが表舞台に出てくるのは、Rubyが普及すれば普及するほど減るような気がしてならない 「シェルスクリプトって使ってる人いるんですか? シェルスクリプトのメジャーなアプリケーションってなんですか?」 という問いに答えにくいのとおそらく一緒になる という空想 ある程度使えるようになれば普段で使えるじゃん、と気づく日が来る(ただしコンピュータ利用環境依存)んで、 初心者の人は肩肘張らずにダラダラやるといいと思う 質問ある方どうぞん
279 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 16:58:23 ] 時間があったら絶対に Java | C | PHP で書き換えるから、と言われつつ ずっと Ruby スクリプトのまま時々呼ばれて便利に動いてる、みたいなのが個人的理想 UNIX文化に傾倒して夢見すぎかもしれないが、理想くらい楽しく行きたいと思う
280 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 18:25:30 ] 便利スクリプトに使ってますよ。ベターPerlみたいな感じ。 ゲームのスクリプトを生成したりとか、 他の言語のサポート用スクリプトにベターmakeなrakeもつかってる
281 名前:デフォルトの名無しさん [2009/05/29(金) 21:20:18 ] 日本人作った言語なら日本語のドキュメント豊富なはず。 PerlやPHPの方が日本語の資料多いじゃん。 他に移行。
282 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 21:23:48 ] >>281 ばいばーい。
283 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 23:26:24 ] ドキュメントが豊富でも言語自体に魅力が無ければ意味が無い perlやphpが魅力的だと思うなら、お前にrubyは向いてないよ
284 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 23:38:15 ] 幼女から熟女まで余裕でいける俺にはなんの苦も無いぜ。
285 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 00:33:30 ] >>281 には KENT の Perl入門がお似合い
286 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 01:01:24 ] るりまってあんま読まれてないのかな?
287 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 03:14:26 ] 大小問わずウェブは辞めといたほうが吉。 基本は使い捨てだよ。メンテ必要なのは向いてない。
288 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 05:45:29 ] 君の見てるウェブはメンテナンスフリーなんだな うらやましいよ
289 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 05:58:42 ] いやいや、PerlやPHPの方がよいと思ったら、すでにそっちへ行ってるw PHPはドキュメントは豊富。これはPHP案件の時マジ助かった。 しかし、ちょっと踏み込むと全然ドキュメントなかったりする… DateTimeクラス?とかドキュメントなくて、なきそうになった 2chでDateTimeについて質問したら、PHPがオブジェクト指向言語だと思うなよ、とか あげくに、オブジェクト指向言語氏ねとか煽られるし。所詮その程度。 Perlは10年前にやったがモダンPerl覚える気ねえや… モダンPerl憶えるくらいならRubyの方がラクチン 幸い、Perlの資産は書き捨てばっかで少なかったし
290 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 09:49:53 ] お尋ねします。 あるファイル内の文字列を一文字単位で並び替えることは可能でしょうか? それを各行単位とファイル単位の二種類のやり方で並び替えたいのです。 1.元ファイルの例 あいうえお かきくけこ さしすせそ 2.各行単位の並び替えで希望する結果 おえういあ こけくきか そせすしさ 3.ファイル単位の並び替えで希望する結果 そせすしさこけくきかおえういあ 実際の文字列は例と違ってバラバラなので、 A-Z や Z-A のようなソート機能は使えません。 このようなプログラムをRubyで組みたいのです。
291 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 09:59:22 ] reverse でいいんじゃね?
292 名前:デフォルトの名無しさん [2009/05/30(土) 10:04:07 ] 俺ならスタックに入れてreverse
293 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 10:08:04 ] irb(main):006:0> puts "あいうえお".reverse ィえういあ なんか化けるな。KCODE='s'のせいか? WindowsだとUTF-8でirb使う手段がないんだが、みんなどうしてるんだろ
294 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 10:10:26 ] str.split(//).reverse.join
295 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 10:14:41 ] str.split(//E).reverse.join # E は str の文字エンコーディング1文字 どう小細工しても文字ごとの配列を作らざるを得ないので素直に巨大な配列を作るべし
296 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 13:02:26 ] gsub!(/\n/,"") で改行が削除(置換)できません。何故?
297 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 13:08:08 ] できてるけどなあ。 ¥nのバックスラッシュが 0x5Cではなく 0xA5 になってるとか。 実は改行が ¥r¥n だったとか。
298 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 13:19:47 ] \n は「改行」という集合じゃないんだよね あくまで LF という文字そのもの 1個 LF 以外の改行があるならそれも併記しないと駄目
299 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 13:22:56 ] >>297 \n , \r\n , \r の全部でやってみましたが変わりません。 Windows環境だから \r\n ですが、 今まで \n で問題なくマッチてしていました。試しに、 line.gsub!(/\n/,"問題") でやってみたら行末に「問題」が追加されて改行はそのままですし。 置換のはずが追加の動作になっています。 理由がサッパリ判りません。
300 名前:デフォルトの名無しさん [2009/05/30(土) 13:27:44 ] >>299 そもそも line には \n が含まれているのか? p line でデバッグしてみ。
301 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 13:28:12 ] 対象文字列を inspect とか dump とかしてみるといいよー。
302 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 13:39:47 ] >>300 置換前を p line してみると各行に \n がありました。 置換後には \n が無くなっていました。 これを見ると置換は成功しているようです。 エディターの問題なんでしょうか。 でもエディタ側で CR+LF , CR .LF を区別して表示してみると CR+LFが残っているんですよね。 もうちょっと頑張って原因を探ってみます。
303 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 13:45:12 ] File.openするときに binary モードになってないとか、 あと、DOS窓からコピーすれば CRLF になるとか。
304 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 13:55:40 ] >>302 原因を探るも何も、それが全てじゃ>改行コードの(意図しない)混在 自分でも > Windows環境だから \r\n ですが、 と書いているように、環境(というかむしろそのデータを吐き出すアプリ)に依って、 その3パターンが入り乱れるなんて、不注意でよくあるケース。 # CR単独、ってのはほぼないけど。 FTPのアスキーモードでファイルの上げ下げをしたり、また適当な設定のエディタで 読み書きすることによっても、テキストデータの改行コードはさくさく変換されつづける。 たまに CRCRLFとかになってて悲しくなることがある。 個人的には、アスキーモードとかテキストモードとか言う改行コードの自動変換処理を 絡ませてろくな事になった記憶がない。 Windowsだけど、自分のスクリプトやそこで使うデータは全部LFで保存してる。 # メモ帳で読めないとか知ったこっちゃない。
305 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 19:59:29 ] Ruby初心者ですが、他言語の経験はそれなりにあります。 やりたいこと。 Rubyで外部コマンドを起動して、それを任意のタイミングで終了させたいです。 より詳細に。 自分のプログラムの通信をTCPdumpを使って調べたい。 ただし、何回も実験を繰り返すので、手で起動、終了を繰り返すのは避けたい。 今考えている手法 マルチスレッドでプロセスをつくり、その上でTCPdumpを走らせる。 メインのスレッド上では、自分のプログラムを起動し、しばらくするとそれが終了する。 すると、マルチスレッド上のTCPdumpにシグナルを送って停止させる。 これを数十回繰り返す。 どのように解決すればよいでしょうか。 もしよろしければアドバイスいただけると助かります。
306 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 20:13:13 ] これまた Ruby 関係ないな 動いてる tcpdump に SIGINT か SIGTERM を適当に送れ
307 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 20:13:17 ] 書き忘れましたが、起動の仕方は分かります。 ただ、Ctrl-cで終了させるプログラムをどのように停止させるかが分かりません。
308 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 20:18:22 ] なるほど。こっちもOSのコマンドを利用するわけですか。 ジョブ番号を出す、tcpdumpのジョブ番号を取得、kill ってわけですね。 めんどうですが、その方法でやることにします。 ありがとうございました。
309 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 20:25:09 ] どう見ても他言語の経験もそれなりにしかありません、の間違いだな。 質問も回答も全くRuby関係ないw
310 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 20:39:04 ] >>308 Rubyから子プロセスにシグナルを送れるよ。
311 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 20:52:34 ] >>310 おお、本当ですか。 今調べてみたんですが、それは www.ruby-lang.org/ja/man/html/Process.html であっておりますでしょうか? これを使ったら、 process.pidの値を取得して、 kill(pid) のように出来るので 上のコードよりかは幾分綺麗になりそうですね。 ありがとうございます。
312 名前:デフォルトの名無しさん [2009/05/31(日) 02:29:50 ] 文字列を与えられた時、アルファベットを大文字小文字区別せずに出現頻度順に小文字で並べた文字列を返すプログラムを作る問題がわかりません。
313 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 02:38:47 ] 何がわからないの?宿題は自分でやるもんですよ?
314 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 06:34:44 ] >>312 誘導 pc12.2ch.net/test/read.cgi/tech/1200175247/
315 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 16:06:17 ] hoge::huga と hoge#huga はどういう意味ですか?
316 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 16:12:59 ] クラス名やメソッド名を連結するときの表記に使う :: と # の違いだと解釈 :: はクラスやメソッドや定数を連結する表記に使い、実際のスクリプト上でもそのように動作する # はインスタンスメソッドを表す表記に用いられ、実際のスクリプト上では動作しない、マニュアル専用の表記 A::B::C は Aクラス(かモジュール)の中にあるBクラス(かモジュール)の中にあるCクラス(かモジュール)、 または、 Aクラス(かモジュール)の中にあるBクラス(かモジュール)の中にある定数C 原理上、スクリプトを参照しない限り、見かけではこの2つを区別できない A#hoge は、Aクラスのインスタンスメソッドhoge a#hoge は、オブジェクト a のクラスで定義されているインスタンスメソッド hoge マニュアルのどっかに書いてあった気がする
317 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 16:40:18 ] >>316 ありがとうございます。
318 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 16:43:22 ] >>316 クラス名#メソッド名 という表記、例えば String#upcase というのを見るのですが、 これはStringクラスのインスタンスの持つupcaseというメソッド、という意味でいいですか? 見ようによってはクラスメソッドに見えます。
319 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 16:49:56 ] インスタンスメソッドを URI#path のように # つきで書くような人間は、 クラスメソッドは絶対に URI.parse のように . で繋げて書くから混同されてる可能性は(誤記以外には)ない 安心しれ
320 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 17:34:25 ] >>316 これ、テンプレでFAQに入れといていい気がする。 俺も毎回なんだっけ?と迷うからなんだけど
321 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 18:03:24 ] なんでそんなに迷うんだよ… 特殊なのはインスタンスメソッドのマニュアル記載法の # だけで、あとは通常のスクリプト内記法と一緒じゃんよ ドットは 「マニュアルでのクラスメソッド」 「スクリプト内のインスタンスメソッド」 「スクリプト内のクラスメソッド」 の3つがあってややアレだが、 たいていの場合、 . の左は「明らかにクラス名」か「明らかに変数名」のどっちかだろ? 左が@始まりや全部小文字の変数名だったらとりあえずインスタンスメソッドの起動記法だと思え だから、マニュアルに “小文字.メソッド” があったら変数に対するコピペ実行可能なインスタンスメソッドチェーンだ 例: arr.join の場合、「arrはローカル変数っぽい」から、「arrが指すオブジェクトのクラスのインスタンスメソッドjoin」だとみなす 「変数arrにクラスオブジェクト本体が入ってたらクラスメソッドが起動する可能性が」とか余計なことは考えない 左が大文字で始まってる「明らかにクラス名」の場合はクラスメソッドのマニュアル記載法&スクリプト内のクラスメソッドだ 例: uri.path と URI.parse は連結法はドットで同一だが、 前者は変数っぽいので「変数uriの指すオブジェクトのクラスのインスタンスメソッドpathを起動するようにする」という指示記述 後者はクラスっぽいので「クラス(またはモジュール)URIのクラスメソッドparse」を指すマニュアル記述または起動指示 文字化して書いててどうでもよくなってきた もしかして、この辺の区別って実は本当の初心者にはつけづらかったりする?
322 名前:デフォルトの名無しさん [2009/05/31(日) 18:11:06 ] 本当の初心者って?
323 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 18:16:53 ] オブジェクトに属するメソッドとクラスに属するメソッドの違いをてきとーにより分けられない人
324 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 19:41:33 ] >>321 なげーよ もっと簡潔にかけるだろ、あんたなら
325 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 19:55:06 ] テンプレ用に短いのキボン
326 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 20:39:30 ] つカルシウム
327 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:05:45 ] やっとプログラミングに慣れきた者ですが、 ネットや本のコードを読むときで、 一つ一つのステ−トメントや式を追う時に、 これが、 インスタンス変数、ローカル変数、定数(クラスもその一種?)、メソッド と判別できるようになって、 少し自信がつきました。 デ−タ?の動き?だけでにとどまらずに、、変数のパタ−ン、メソッドと変数の見分けなどを意識できるようになるのが、 本当の初心者には一つの壁だと思います。 テンプレを書くまで、実力が上がってないけれど、、
328 名前:デフォルトの名無しさん [2009/05/31(日) 22:38:19 ] >>326 カルシウムって・・・ やめろよ頭悪いと思われるぞ。
329 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 22:39:45 ] >>328 乳酸菌取れよ
330 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 13:36:21 ] カルシウムと言われて真っ先に金属カルシウムを思いつく>>328 さんは秀才 「ナトリウムの過剰摂取は身体によくない」と言われて「水と反応して火花散らすから当然だな」 「カルシウムを摂ると身体にいい」と言われて「あんなにイオン化傾向が高いものを摂取するなんて信じられん」 このスレ何のスレだっけ
331 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 13:58:23 ] >>321 みたいなのは『初めてのRuby』あたりに書いてないかい
332 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 14:03:31 ] 3ヶ月前に作りかけだったスクリプトの製作を再開しようとしたのだが コメントつきなのになにやってるかさっぱりわからん
333 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 14:07:53 ] スクリプトでそんなに長いの書くなよ。 一画面に収まらなくなってきたらもっとまともな言語使うべき。
334 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 14:15:39 ] >>333 まともってなに? 委員会が設計したこと?
335 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 14:20:53 ] >>334 事前コンパイル&リンクが必要な言語はコンパイル時間の間に精神を落ち着けることができるので コンパイル不要な言語より質の高いプログラムを記述することができます
336 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 14:48:38 ] スクリプト言語でさくっと作って浮いた時間でお茶でも飲む方がいいよ
337 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 16:02:12 ] >>335 >事前コンパイル&リンクが必要な言語はコンパイル時間の間に精神を落ち着けることができるので でもコードを書いているときに多大なストレスを感じてしまうんだよな、 事前コンパイル&リンクが必要な言語は。むずかしいのう。
338 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 16:49:06 ] そんなにあの間が好きならsleepでも噛ませとけw
339 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 02:09:00 ] in?の話がちょっと出てる。 qwik.jp/lang-Pattern/DSL.html
340 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 08:54:16 ] リンクの貼り方がわかりにくすぎるよ…パパン
341 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 08:58:17 ] リンクだったのか。気づかんかった
342 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 09:08:26 ] というか「対応するサイトがありません」と言われる
343 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 10:36:18 ] 339 じゃないけど ttp://qwik.jp/lang-pattern/DSL.html
344 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 13:02:24 ] Apache 2.2 + Passenger 環境で、 現在 Rails アプリを DocumentRoot 直下に a/ や b/ に置き、 RailsBaseURI /a RailsBaseURI /b にして example.com/a/ example.com/b/ のように複数動かしています。 Sinatra も example.com/c/ example.com/d/ のように複数動かしたいのですが、どうすればいいでしょうか。 サブドメインを取らないで実現したいのです。 RailsBaseURI のような SinatraBaseURI があれば簡単なのですがw