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


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

Ruby 初心者スレッド Part 28



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


99 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 18:00:35 ]
ruby 1.8.6 で日本語を slice しようと思ってます。

ttp://taiyaki.org/ruby/jstring/

が定番でしょうか?
最終版が 2003-5-7 ですが、枯れているのか
放置されているのか分からなくて。

100 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 18:14:13 ]
>>99
UTF-8で、
puts "日本語".scan(/./u)[1]

とかではいかんのでしょうか?

101 名前:99 mailto:sage [2009/05/20(水) 18:32:30 ]
>>100
できました。ステキ。

/./u の u がないともっとステキなのですが、
これはどうしようもないのでしょうか。

102 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 18:41:55 ]
じゃあメソッド作って隠せ
それで>>99と同じになる

103 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 18:47:03 ]
>>101
$KCODE設定だけでいけるんじゃないかと。
詳しくは知らない

ttp://www.ruby-lang.org/ja/man/html/FAQ_C6FCCBDCB8ECA4CEBCE8A4EAB0B7A4A4.html

104 名前:デフォルトの名無しさん [2009/05/21(木) 00:14:09 ]
ファイルからUTF8のテキストデータを読んだのですが、

p line[0,2]

としても期待どおりに文字を切り出せません。
どう書けばよいのでしょうか?

105 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 01:01:58 ]
>>104
期待とは line = 'こんにちは' のとき line[0,2] #=> 'こん' ということ?

1.8系 $KCODE = 'u' 前提
1.8.6 までなら line.split(//)[0,2].join
1.8.7 なら line.chars.to_a[0,2].join でも。
おまけ line[0, 6] # 漢字(1文字3バイト)のみからなるのが確実な場合

1.9系
エンコーディングが正しければ、それで期待どおりになる。

106 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 01:25:29 ]
>>105
ありがとうございます。うまくいきました。

107 名前:デフォルトの名無しさん [2009/05/21(木) 02:02:56 ]
1〜10の数字のうち、ランダムに5個を選ぶ記述で悩んでいます。

単純に r=rand(10) r=r+1 を5回やるとしても、5,4,8,8,7と同じ数が並ぶ
可能性があり、条件式で判別するのは元の数が増えた場合を考えると
スマートではないような気がします。
(数が増えて100万個の中から1000個を選ぶとか)

何か良い方法はありますか?




108 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 02:37:07 ]
>100万個の中から1000個を選ぶ
大きな量でも扱える方法が少量の際でもスマートとは限らないから
別個に考えた方がいいと思う

とりあえず一例
ary = []
(1..10).each{|i| ary << i }
5.times{ puts ary.delete_at(rand(ary.length)) }
もちろん数が大きい時には向かない

109 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 02:38:04 ]
なんで書き込んだ直後に(1..10).to_aを思い出すかなorz

110 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 02:48:19 ]
numbers=[]
while numbers.size<5
  numbers|=[rand(10)]
end
こんな感じかな
乱数の出てきた順番がどうでもいいならSet使ったほうが良いと思うが

111 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 02:49:31 ]
>>107
step.0 選ばれた数の総数 n = 0
step.1 1を選ぶ確率 5/10
step.2 2を選ぶ確率 (5-n)/9
step.3 3を選ぶ確率 (5-n)/8
...
nが5になるまでstepごとに0から1の一様乱数を発生させて確率以下ならその数を選択することを続ける

112 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 03:54:58 ]
それと選ぶ総数が全体数の半分以上なら選ばない数の方を選択して
それを全体から除外するようにしたほうが特に全体数が多い場合は現実的な効率はいいと思う
起こりうる最悪ケースではどちらでも変わらないし全体数の半分程度を選ぶとかではあまり関係ないけど
それから全体数が多いときは一様乱数の有効数字の桁数が問題になるかもしれないので
0から1の浮動小数でなく選択確率の分母以下の整数値をランダムに生成して分子と比較するとかの方がいいかも
でもそれでよくなるかどうかは乱数の生成方法次第だしそもそも100万個くらいならこれは問題ないのかな?

113 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 04:19:05 ]
100まんこのランダム抽出程度なら手抜きで作っても普通に終わるだろ

result = Array.new
max = 1_000_000 ; period = max / 100
$stdout.sync = true
print 'prepareing...' ; base = (1..max).to_a ; puts "done"
while e = base.delete_at(rand(base.size)) do
result << e
print '.' if (result.size % period).zero?
end
puts
p result.size
p result[0],result[max]

ごめん嘘ついた
インジケータ1個も出ない(w

114 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 05:50:28 ]
spec_helper.rb って spec コマンドが勝手に探して自動で読んでくれる便利なファイル名とかそういうのじゃないのね

require '../../../spec_helper'

とか spec ファイルの最初に書くのカッコ悪いんだけどもこれは構造上仕方ないのかな

115 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 06:01:28 ]
それだとカレントディレクトリ以外で spec コマンド使ったときに動作しないぞ

require "#{File.expand_path(File.join(File.dirname(File.expand_path(__FILE__)), '..', '..', '..', 'spec_helper'))}"

こうだな
長大なファイルパスを記述するのが面倒だから spec_helper を使おうと思ってる人には逆に憂鬱かもしれん
しかしこれ1行で済むとも言えるが

116 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 08:04:42 ]
>>107
[*1..10].sample(5)
[*1..1_000_000].sample(1000)

117 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 08:09:23 ]
>>115
なんでわざわざ同じことを何回も繰り返す?

require File.expand_path('../../../../spec_helper', __FILE__)




118 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 09:32:24 ]
File.expand_path の第2引数の扱いは undocumented だからな
現在は File.exppand_path して File.dirname されているということを知ってる人がどれだけいるのやら
つまり、以下の4つは同じように /full/path/basedir/dir/file を返す

File.expand_path('dir/file', '/full/path/basedir')) # マニュアルを素直に読む場合、第2引数はフルパス
File.expand_path('dir/file', 'basedir'))
File.expand_path('dir/file', File.dirname(File.expand_path('file_in_basedir'))))
File.expand_path('dir/file', 'file_in_basedir'))

というか、このへんは実験終了と称して次のバージョンくらいでぽっと無くなりそうで嫌だ

119 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 11:40:41 ]
第二引数なし・pathnameなしで一番短いのはこれかな

require File.join(File.dirname(__FILE__), '../../../spec_helper')

でも確かに、spec_helper.rbを自動or独自メソッドで読んでくれれば一番早いとは思う

120 名前:デフォルトの名無しさん [2009/05/21(木) 12:08:01 ]
メモリ上で文字列の圧縮・展開を行いたいです。
そういったライブラリはありますか?

121 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 12:20:56 ]
よーわからんが

irb> require 'zlib'
irb> str = "プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

   【Ruby1.9.1 は従来版とは異なる部分も多く、書籍や解説やライブラリのサポートがまだありません】
   【自力で解決できない壁で悩むことのない最新安定版の Ruby1.8.7 での学習をお勧めします】
    ※1.8.7 は 1.8 系と 1.9 系の橋渡しをするためのリリースで、1.9 系 の便利新機能の一部が利用可能です"
irb> p str.size
560
irb> z = Zlib::Deflate.deflate(str)
irb> p z.size
375

こういう話ではなく?

122 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 12:53:49 ]
>>121
ありがとうございます。zlibを調べてみますね。

123 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 13:31:52 ]
すいません。
>>87をお願いします。


124 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 13:48:27 ]
>>123
socket_server.rb はライブラリではなく単なるアプリケーションで、同じページの
server_client.rb の次に説明されてる


125 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 16:16:25 ]
rspecにて、spec/hello_spec.rbから hello.rbを起動テストしようとしています。

しかし、NetBeansの "rspecテスト"からrspecを起動した場合だけテストに失敗してしまいます。
コマンドプロンプトから spec spec/hello_spec.rb では問題ないのですし、直接 ruby hello.rbでも問題ないです。

warningの文字列で、テストしているので起動時の "-w" をとれば成功するようになるのですが、
コマンドプロンプトからは -w をつけても問題ないのが気になります。

'my script should have no errors or warnings' FAILED
expected not: =~ /warning/n,
         got:    "(Rubyインストールディレクトリ)/lib/ruby/site_ruby/1.8/rubygems/source_index.rb:138: warning: d:/my_home/.gem/ruby/1.8:(Rubyインストールディレクトリ)/lib/ruby/gems/1.8/specifications: Invalid argument\nHelloWorld\n"
./spec/hello_spec.rb:15:
./spec/hello_spec.rb:13:in `chdir'
./spec/hello_spec.rb:13:

hello_spec.rbのソース
require File.join(File.dirname(__FILE__), '/spec_helper.rb')
describe "my script" do
  before do
    @bin_path = File.join(File.dirname(__FILE__), "/../hello.rb")
  end
  
  it "should have no errors or warnings" do
    pending "Hangs on JRuby" if PLATFORM =~ /java/
        
    Dir.chdir(File.join(File.dirname(__FILE__), "/../")) do
      output = `ruby -w #{@bin_path} --help 2>&1`
      output.should_not =~ /warning/n
      output.should_not =~ /Error/n
    end
  end
end

126 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 16:23:38 ]
=~ というマッチャは見たことないな

127 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 16:35:42 ]
>>124
さんきゅう。
同時に、「SocketServerというクラスがリファレンスにないぞ・・・」と思って
いましたが、これも下の socket_server.rb で定義していたんですね。

納得。




128 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 17:06:27 ]
>>125
推測だが、コマンドプロンプトとNetBeansが
それぞれ違う場所にインストールされたrubyを使っていて、それで何かの問題が起こっているのでは?
実際にsource_index.rbの138行目見れば何か分かるかもよ

>>126
あるよ

129 名前:125 mailto:sage [2009/05/21(木) 18:40:11 ]
>>126
正規表現のマッチャみたいです。

>>128
ありがとうさんです。

source_index.rb見てても何故かよーわからんくて、
使われているのがNetBeans標準のjrubyでなくちゃんとMatzRubyにしたよなー、
と思って設定を見直していたころ、gemパスがバグっていたことになっていたことに気づきました。

1行1パスなのに、何故か、
/my_home/.gem/ruby/1.8:(Rubyインストールディレクトリ)/lib/ruby/gems/1.8
と : で区切って2つパスが記述してありました…(´・ω・`)

削除して、/my_home/.gem/ruby/1.8 だけにしたところ、
問題なく動きました!
今思うと、source_index.rbはの該当行はgemパスの処理のところでした。

おかげさまで、無事に解決いたしました。
ありがとうございました。

130 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 19:38:56 ]
>>116
[*1..10]も1_000_000も知らなかった
前者のはRange#to_aと優劣あるんだろうか

131 名前:デフォルトの名無しさん mailto:sage [2009/05/21(木) 19:44:56 ]
>>109-112, 116
Thx

ごめんなさい。未だ試してないです。


132 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 00:16:37 ]
>>118
> File.expand_path の第2引数の扱いは undocumented だからな

Converts a pathname to an absolute pathname. Relative paths are
referenced from the current working directory of the process unless
<i>dir_string</i> is given, in which case it will be used as the
starting point.

「dir_stringを始点として絶対パスに展開する」とちゃんと書いてあるだろ。

> 現在は File.exppand_path して File.dirname されているということを知ってる人がどれだけいるのやら

勝手にdirnameしてるわけではなくて、>>117>>114より'..'が一つ多い。


133 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 00:18:05 ]
>>130
[*1..10]のほうが(1..10).to_aより短い。
遅いけどな。


134 名前:デフォルトの名無しさん [2009/05/22(金) 05:39:26 ]
スレ違いな質問で申し訳ないが、GnomeVFSのSSH接続で、鍵を指定することはできないの?
普通に ssh://user@host と指定しただけでは ~/.ssh 下しか探さないみたい。

Net::SSH は鍵を指定できたんだけど。。

135 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 15:46:03 ]
eRubyについて教えてほしい

eRubyで書かれたファイルの中に
eRubyで書かれたファイルを埋め込みたい

なんか出来そうな気がするのだけど
イメージがまとまらないので、できるのなら教えてほしい。

具体的な運用としては
Apacheで*.rhtmlのファイルをeRubyを通すように設定したサーバで
運用したいと思っている。
で、ページを構成する細かい部品をeRubyで書いて
そのレイアウトをeRubyで定義できないかな〜って感じです。

136 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 16:03:52 ]
<% require 'erb' %>
<%= ERB.new(File.open(filename).read).result %>
じゃダメなんだっけ?

137 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 16:09:11 ]
>>132
日本語マニュアル不備だよね
基本の添付ライブラリのマニュアルが英語とかなにそれ



138 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 16:35:47 ]
>>136
それでいけました
ただ、単にERBオブジェクト作ってあげるだけでよかたんか。
これで、ヒャッホ〜イ!できそうです。ありがとう。

139 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 16:50:58 ]
>>133
サンクス
数文字程度長いぐらいならわかりやすいほうが好みだから
[*1..10]を選ぶ理由はなさそうだ

140 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 17:42:51 ]
>>137
ri File.expand_path


141 名前:140 mailto:sage [2009/05/22(金) 17:44:48 ]
いや、これも英語か。

ソースから抜き出してるから、日本語版を作るとなると
ソースに日本語でドキュメントを書くか、
自動生成を諦めるかになるのかな。




142 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 17:46:35 ]
ja.po 形式はどうだろう

143 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 17:49:56 ]
そういえば、rubyをgettext対応させた人っていないのかな。


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







[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<107KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef