Ruby 初心者スレッド Part 22at TECH
Ruby 初心者スレッド Part 22 - 暇つぶし2ch300:デフォルトの名無しさん
08/09/30 23:36:49
>>292
特に気にする必要はないっていうことですか?
今のところ特に問題はないですが、聞いたことない文字コードだったので
そのうち何か問題がでないかと心配です。

>>293
vimに読み込ませた時の文字コードがiso-2022-jp-3で表示されてます。
linux上で作成したutf8のファイルは、問題なくutf8で表示されていますし
他の文字コードに関しても作成時と同じように表示されてるので
ファイルの認識自体は特に問題ないと思いますが。。。
catで作成したファイルもiso-2022-jp-31で作成されているようですし
FInder上で作成したファイルもiso-2022-jp-3なので、たぶんMacOSXでは
指定がない限り、その文字コードで作成してしまうのではないでしょうか。
なにぶん昨日Macにはじめて触りまして。。。詳しいことが。。。

とりあえずOS側の問題のような気もするので、そっちで聞いてみます。

301:デフォルトの名無しさん
08/10/01 08:21:11
>>300
とりあえずodなどで問題のテキストをバイナリダンプしてみては?



302:デフォルトの名無しさん
08/10/01 11:09:10
>>300
文字エンコード自動評価の順が iso-2022-jp-3 が最初なんだろう
vimrcの文字エンコード推測設定がMacOSX向きじゃないんだと思う
きっとどっかのサイトのを意味もわからず丸コピペしたのだと推測

303:デフォルトの名無しさん
08/10/01 12:05:42
>>298
書名をさらして著者に改善を要求しよう

304:デフォルトの名無しさん
08/10/01 12:13:37
バージョンアップ後のフォローを求めるアホもいるので注意
ちゃんと冒頭に「バージョン○○を対象にします」って書いてあんじゃんよ

305:デフォルトの名無しさん
08/10/01 15:00:25
>>304
今回の select option に限って言えば、どのバージョンでもあるわな

306:デフォルトの名無しさん
08/10/01 19:14:46
ruby gemsでdescriptionで検索することってできないのでしょうか?

 gem search --details --both --all hoge

とやっても、名前でしか検索ができません。
説明欄も検索したいのですが・・・

307:デフォルトの名無しさん
08/10/01 21:24:06
searchは最終的にSourceIndex#searchに処理を委譲してて、
そこでは名前がマッチするモノを探しているだけのようだ。
rubygems/source_index.rbの

spec.name =~ gem_pattern and

というところ(手元だと272行め)を

(spec.name =~ gem_pattern or spec.description =~ gem_pattern) and

のように変更すればdescriptionも検索対象にできる。
他にsummaryなども、orで連結して探すようにできるはず。

残念ながら、--detailは出力をkwskするためのオプションだな。


308:デフォルトの名無しさん
08/10/02 11:44:41
OSはXP Home SP3、Rubyは1.8.6(最終版)です。
以下のプログラムを実行してもうまく動かず、何がいけないのか分からず困っています。

sum =0
puts "点数を入力してください。"
a=0                     ←なんとなく初期化してみた。あってもなくてもダメ
for i in 1..5
  print i, "番:"
  a = gets.chomp
  sum += a                ←ここが鬼門。ためしにforのiにするとちゃんと動く
 # print a,"\n"
 # sleep 1
end
print "sum=#{sum}"

おそらく7行目のsum += aが問題なのですが何がいけないんでしょうか・・・?
助言頂けるとありがたいです。

309:デフォルトの名無しさん
08/10/02 11:49:49
"うまく動かず"を出し惜しめせずに書けw

310:デフォルトの名無しさん
08/10/02 11:51:06
sum += a.to_i
かな

311:デフォルトの名無しさん
08/10/02 12:07:40
>>309
コマンドプロンプトだと1つ目の数値を入れたとたん終了・・・
>>310
できた!thx!
getsで入力した数値を文字列だと思ってたのか・・・orz
ほんとありがとう、数値ひとつ入力するのに1時間奮闘してた・・・

312:311
08/10/02 12:26:45
またすぐに聞きに来てごめんなさい・・・orz
aを配列にしたとたん動かなくなりました・・・
実行しても「点数を入力してください」すら表示されず終わります。

sum =0
puts "点数を入力してください。"
a[]              ←いらなそうだけど一応宣言
for i in 1..5
  print i, "番:"
  a[i] = gets.chomp   
  sum += a[i].to_i      
end

.to_iの使い方がおかしいのかもと思い、その行をコメント化してみたりしましたがうまくいかず・・・
gets辺りで躓いてると思います。
お手数ですがどなたかアドバイスください。
入力で躓きまくってる私はRuby向いてないのかなぁ・・・orz


313:デフォルトの名無しさん
08/10/02 12:34:11
sum = 0
ary = []
puts "点数を入力してください"
for i in 1..5
    print i, "番: "
    ary[i-1] = gets.chomp.to_i
end
sum = ary.inject(0) {|a, x| a + x }
print "合計: ", sum, "\n"

314:デフォルトの名無しさん
08/10/02 12:37:37
どういう勉強の仕方をしてるのか気になる。

315:デフォルトの名無しさん
08/10/02 12:39:51
>>312
「実行」って、コマンドプロンプトから ruby hoge.rb とかしてる?
普通はこうなる

> ruby hoge.rb
点数を入力してください。
hoge.rb:3: undefined local variable or method `a' for main:Object (NameError)

あと入門書嫁

316:デフォルトの名無しさん
08/10/02 12:49:11
本題に関係ないとはいえ一応書いておくが、Rubyでforはめったに使わない
普通はブロックを使う

317:312
08/10/02 12:50:02
>>313
おお・・・ちゃんと動く・・・ありがとです。
for文の中でsumに足していかないとは・・・!
sum周りが初見なんで調べないとですね。
ともあれthxです。

>>314
Cは多少やってたのでCの頃に書いた簡単なプログラムをRubyに書き直してみてるところです。
文法がずいぶん違って躓きまくりです・・・

>>315
いや、「.rb」をそのままダブルクリックで実行してます。
だからsleep入れたりしてすぐに消えないようにしてたり・・・
基本はRDEで実行してます。
「たのしいRuby 第2版」を参考にしてますが、必要な所だけ探して読んでるのがいけないかもですね・・・

318:デフォルトの名無しさん
08/10/02 13:19:11
コマンドライン実行のスクリプトをダブルクリックしてどうする
正常終了でウィンドウ閉じるだろ

319:デフォルトの名無しさん
08/10/02 13:36:57
最後にsystem('pause')入れたりする

320:デフォルトの名無しさん
08/10/02 14:02:52
>>317
RDE使ってるなら、プログラムを実行した後
下の出力ウインドウにエラーメッセージとか出てるんじゃないか?
それを貼り付けるべし

出ないようならコンソールから実行

321:デフォルトの名無しさん
08/10/02 14:22:57
>>318
いやだからsleep入れたりしてるんですが、エラーの時は関係なく終わるんです。

>>319
Rubyの場合はスタンダードライブラリを読み込まなくても使えるんですね。(Rubyには存在しない?
活用させていただきます。

>>320
一応出ますね。以後貼り付けます。

みなさんありがとうございます。またすぐに来そうで心配ですが、その時はよろしくお願いします。

322:デフォルトの名無しさん
08/10/02 18:02:43
バッチファイルにしてやればエラーが出てもポーズさせるようにできるよ。
ruby -x "%~0" || pause
と書けばエラーが出たときに限ってとまる。

test.bat
ruby -x "%~0"
pause
goto :eof

#!ruby
put "hello"


323:デフォルトの名無しさん
08/10/02 19:08:34
>>322
横からだがサンクス
これを.rbに関連付けしておけばよいのか・・・
|| でエラー時だけ止まるのかいいな、これ

324:デフォルトの名無しさん
08/10/02 22:15:24
rdocで#:nodoc:と指定されてる要素も無理矢理ドキュメント化するような
オプションとか方法とかってありますか?

325:デフォルトの名無しさん
08/10/02 23:44:42
>>324
そんなのはないから自分で #:nodoc:を消せばいいじゃん
cp -pr src1 src2
find src2 -type f | xargs perl -pi 's/:nodoc://'


326:デフォルトの名無しさん
08/10/03 01:37:13
>>325
なるほど
参考にさせていただきます
ありがとうございました

327:デフォルトの名無しさん
08/10/03 02:38:35
>>325
そこでrubyでもsedでもなくperlかよw


328:デフォルトの名無しさん
08/10/03 11:54:46
>>327
1 linerでの置換ならrubyよりperlのほうが便利
sedは-pオプションがない

329:デフォルトの名無しさん
08/10/03 12:52:51
URLリンク(www.goto.info.waseda.ac.jp)
これ教えてもらってpythonから宗旨替えするのを検討してるんだけど
本当にpythonのモジュールが問題なくつかえるの?
ctypes
boost.python
numpy
matplotlib
PIL
が使えるかが一番問題なんだけど

330:デフォルトの名無しさん
08/10/03 13:02:03
>>329
現在の Ruby は 1.8.7 です

331:デフォルトの名無しさん
08/10/03 13:09:37
(いろいろとpython側もruby側も追随してないだろうから、やめるのが吉、ってことか...)

332:デフォルトの名無しさん
08/10/03 15:59:38
>>329
作者に聞くか、自分で試してみるしかない。
つうか、PerlやPHPならまだしも、Pythonから宗旨替えする理由って何?

333:デフォルトの名無しさん
08/10/03 17:24:32
>>332
借りてるレンタルサーバーでRubyは動くけど
pythonが動かない

railsが便利なら使ってみたい

334:デフォルトの名無しさん
08/10/03 17:30:26
>>333
Railsを実用的な速度で使うなら、
別プロセスのサービス(MongrelやFastCGI)か
Apache組込のPassengerが必要になる。
レンタルサーバではどちらもできないことが多いので、注意。

335:デフォルトの名無しさん
08/10/03 21:35:41
Windowsで、text ディレクトリのテキストファイルに対して start コマンドを使おうと

require 'shell'
sh = Shell.new
Dir.glob("text/*.txt").each do |path|
path.gsub!(/\//,"\\")
sh.system("start", "#{path}")
end

というスクリプトを作りましたが

c:/ruby/lib/ruby/1.8/shell/command-processor.rb:352:in `find_system_command':
Command not found(start). (Shell::Error::CommandNotFound)

というエラーが出ます。どうしたもんでしょうか。

336:デフォルトの名無しさん
08/10/03 21:46:08
普通にsystem使ったら?

337:デフォルトの名無しさん
08/10/03 22:09:57
>>328

sedのデフォルトの動作が -p 指定時のPerlと同じだろ。
おまえさんが言いたいのは -i じゃないのか?
でもこれも GNU sedならあるけどね。


338:デフォルトの名無しさん
08/10/03 22:12:47
>>335
gsub!の置換後の文字列だけどそれでいいのか?

あと startはcmd.exe の内部コマンドだからそれだとまずいだろう


339:デフォルトの名無しさん
08/10/03 23:13:37
>>337
>おまえさんが言いたいのは -i じゃないのか?
その通りだ orz
エスパーさんくす

340:デフォルトの名無しさん
08/10/03 23:40:05
nanoc: a Ruby CMS that generates static HTML ≫ home
URLリンク(nanoc.stoneship.org)

nanocというRuby製のCMSを使ってみています。
nanoc autocompileコマンド時にhttpdサーバーが立ち上がります。
しかし、ブラウザでURLリンク(localhost:3000) というデフォルトのアドレスにアクセスしても
画像が何故か読まれません。

そこで、autocompileコマンドのソースを追って調べていたのですが、

nanoc: lib/nanoc/extra/auto_compiler.rb@55a1480e2719
URLリンク(nanoc.stoneship.org)

(ちょうど上記ソース)、255行目の File.read(path) ってもしかして、
Window環境だとバイナリ読めなくないですか?
irbで試しましたが、pngを読むと、

irb(main):028:0> a = File.read "gradient-nav-white.png"
=> "\211PNG\n"

みたいになってしまいます。

341:デフォルトの名無しさん
08/10/03 23:58:19
>>340
ソース読んでないけど、たぶんその通り
UNIX畑の人間が書いたスクリプトには、バイナリモードを考慮してないものがある
最近だとRackでも見た

342:デフォルトの名無しさん
08/10/04 00:00:57
nanoc は面白そうだと思ってはいるんだが

>>340
読めませんねえ

module Nanoc::Extra
class AutoCompiler
def serve_file(path)
[
200,
'Content-Type' => mime_type_of(path, 'application/octet-stream') },
[ File.open(path,'rw'){|f| f.read} ]
]
end
end
end

をスクリプトの前に書いて再チャレンジだ

>>341
ある意味とてもカッコ悪いよな

343:デフォルトの名無しさん
08/10/04 00:01:14
PNGのマジックナンバーに含まれるEOF文字で止まっているようですね。
バイナリモードのopenを使うように書き換えないといかんのかな。


344:デフォルトの名無しさん
08/10/04 00:03:24
なんか足りなかった

module Nanoc::Extra
class AutoCompiler
def serve_file(path)
[
200,
{'Content-Type' => mime_type_of(path, 'application/octet-stream') },
[ File.open(path,'rw'){|f| f.read} ]
]
end
end
end

Ruby のモジュールの多くは自前のスクリプトの先頭で書き換えることができる
きっとこれから何度もお世話になると思うので覚えておくといい
けっこう明確なバグ(で、自前で何とかなるもの)が残ってたりするもんだ

345:デフォルトの名無しさん
08/10/04 00:07:32
あれ、アクセスフラグrbじゃなくてrwなの?

346:デフォルトの名無しさん
08/10/04 00:10:45
rb だな

347:デフォルトの名無しさん
08/10/04 00:16:27
msっていつになったらテキストモードをなくすの?

348:デフォルトの名無しさん
08/10/04 00:24:32
>>347
Cやれ

349:340
08/10/04 00:48:47
みなさんありがとう。上手くいきました

trap::IO - Rubyリファレンスマニュアル
URLリンク(www.sakalab.org)
> IO.readはファイルを開くときにバイナリモードにしないので、
> バイナリモードの存在する環境でバイナリファイルの読み込みに使うと 内容が壊れることがあります。

これかい!しかし何でこんな罠があるんだ。
罠ってのはバイナリモードじゃなくてIO.readのことだけど。
nanocの作者 mac っぽいし?

-----lib/binary_patch.rb-----
module Nanoc::Extra
  class AutoCompiler
    def serve_file(path)
      # Build response
      [
        200,
        { 'Content-Type' => mime_type_of(path, 'application/octet-stream') },
        [ File.open(path, 'rb'){|f| f.read } ]
      ]
    end
  end
end
-------------------
>>344参考に、これをサイトデータの lib 以下に放り込んでおくとOK的な。
後でさくーしゃにパッチ投げるか……

しかし、grepかけたら、他にも File.read あったり、
File.openでバイナリモードにしてないところがあるから、
直すところがいくつもありそうw

350:デフォルトの名無しさん
08/10/04 01:18:38
これはホントは標準添付の便利メソッドのフリしてバイナリモードガン無視の File.read が悪いんだよね
ライブラリ作者はあんまり悪くない(注意不足なだけ)
2.0 では直ってたりするのかしら

351:デフォルトの名無しさん
08/10/04 01:29:27
1.9にはIO.binreadというのがあるようだ。
あと、1.9以降はstdioと絶縁したんだっけか?


352:デフォルトの名無しさん
08/10/04 01:48:42
ついでに別の質問があります。
nanoc で nanoc autocompile コマンド時にhttpサーバーと一緒にブラウザも起動したいのだけど、
httpサーバー起動前にブラウザが立ち上がりきってしまって上手くいかない・・・。

gemにあった launchyで起動させているんだけども、httpサーバー(デフォではThin)
起動後かもしくは、数秒後に起動することはできないでしょうか?

当初はこんなコードです。

require 'rubygems'
require 'launchy'

module Nanoc::Extra
  class AutoCompiler
    alias original_start start # :nodoc:
    
    # Boot web browser before original start
    def start(port, handler_name)
      port ||= 3000
      Launchy.open("URLリンク(localhost:#{port})") if defined?(Launchy)
      original_start(port, handler_name)
    end
  end
end

353:デフォルトの名無しさん
08/10/04 01:51:50
で、Threadを使ってみようとしたんだけどもネイティブスレッドじゃないせいか
上手くいきませんでした。何かよい方法はないものでしょうか?

    def start(port, handler_name)
      port ||= 3000
      t = Thread.new do
        Sleep(3)
        Launchy.open("URLリンク(localhost:#{port})") if defined?(Launchy)
      end
      original_start(port, handler_name)
      t.join
    end


354:デフォルトの名無しさん
08/10/04 02:37:21
>>352
while (3000ポートに接続できない)
 sleep(1) # 1秒待つ
end

355:デフォルトの名無しさん
08/10/04 02:44:59
>>335
WindowsでRubyならWIN32OLEで一択.

require 'win32ole'

fso = WIN32OLE.new('Scripting.FileSystemObject')
shell = WIN32OLE.new('WScript.Shell')

Dir.glob('text/*.txt').each do |path|
 shell.Run(fso.GetAbsolutePathName(path))
end

下記記事も参照すると吉
URLリンク(jp.rubyist.net)


356:352
08/10/04 02:52:37
>>354
どうも original_start() でキー入力待ちになってしまうのです。
sleepするところだけメインと平行して走らせることができないかな、と思ったしだいです。

gemにあった win32-thread もつかって見ましたが、

> nanoc autocompile
win32 thread mode
(rubyパス)/lib/ruby/gems/1.8/gems/launchy-0.3.2/lib/launchy/b
rowser.rb:25: [BUG] cross-thread violation on rb_thread_schedule()
ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32]

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

とか出るしダメポ……

357:デフォルトの名無しさん
08/10/04 02:53:16
>>355
「全部WSHで書けばいいじゃん」って思うよね?
うん,俺もそう思う.

Jscriptとかも使ってみると意外と便利なんだよなぁ.

358:352
08/10/04 02:57:28
深夜に何度もすいません。
キー入力待ちでもsleep後に平行してブラウザが起動してくれました。大丈夫でした。
httpdの起動が遅いせいか、どうもタイミングが悪かったようです。

>>354を実装してみたいと思います。ありがとうございます。

359:352
08/10/04 03:33:52
    # Boot web browser before original start
    def start(port, handler_name)
      require 'open-uri'
      require 'resolv-replace'
      
      require_gem('launchy', true)
      
      port ||= 3000
      
      t = Thread.new do
        uri = "URLリンク(localhost:#{port})"
        loop do
          begin
            exit_loop = false
            open(uri) do |f|
              puts "Eureka #{uri} !";
              exit_loop = true
            end
            break if exit_loop
          rescue
          end
          sleep(1)
        end
        puts "Launching browser..."
        Launchy.open(uri) if defined?(Launchy)
      end
      original_start(port, handler_name)
      t.join
    end

>>354をこんな感じで行けました。
もっと短くかければよかったのですが。

360:デフォルトの名無しさん
08/10/04 04:06:35
テキストモードとか意味不明。
ただこういうバグを生むために存在するとしか考えられん。

まあでもそういうのを考慮する環境がクライアント機では90%以上を占めてるので仕方ないか。。

361:デフォルトの名無しさん
08/10/04 04:10:20
だからCやれって
テキストモードが生まれたわけがわかるから

362:デフォルトの名無しさん
08/10/04 04:35:54
>>361
Cは平素より使用しているが、どうしてテキストモードなるものが存在する必要があるかは理解できない。
ここで、「ググレ」やリンクを貼る行為ではなく、あなたの言葉での説明希望。

363:デフォルトの名無しさん
08/10/04 07:12:40
ちゃんとした文責のある文章を拒否して、名無しさんの言葉だけ求めるってw

「知りたい」んじゃなくて「追い込みたい」のが丸わかり。
土曜の早朝から何を厨臭いことを。

364:デフォルトの名無しさん
08/10/04 07:17:11
隔離スレにお帰り

365:デフォルトの名無しさん
08/10/04 08:31:49
むしろCのstdioがマシンごとに改行の内部表現が異なることを意識して
テキストモードとバイナリモードを用意して抽象性を確保してるんだから
UNIX使いもちゃんと使い分けろって話になりはしないの?

366:デフォルトの名無しさん
08/10/04 09:50:05
>>363
煽るだけならCスレへお帰りください

367:デフォルトの名無しさん
08/10/04 10:23:42
>>362
>Cは平素より使用しているが、どうしてテキストモードなるものが存在する必要があるかは理解できない。
たんに、プラットフォームによって改行を表す記号が違うので、それを隠蔽して互換性を確保するモードを用意しただけ。

>ここで、「ググレ」やリンクを貼る行為ではなく、あなたの言葉での説明希望。
ほんとにCやってるなら、このくらい分かるだろ。
まずは「教えてください」という言葉を覚えような。

368:デフォルトの名無しさん
08/10/04 11:01:03
>>367
>まずは「教えてください」という言葉を覚えような。
お前は文章に「教えてください」って文字列が入ってないと納得できない正規表現脳なのか

369:デフォルトの名無しさん
08/10/04 11:10:12
デジタルリサーチとAppleのせいってことで終了にしとけ。
URLリンク(ja.wikipedia.org)

370:デフォルトの名無しさん
08/10/04 12:46:31
>>365
普通UNIX使いは改行記号がが\nのとき、\r\nのとき、\rのときそれぞれを考慮したコードを書きます。
なぜならUnix使いはおそらくwindowsをはじめとする他の環境を触ったことがあり、
それらで改行がどう表現されるかを知っていて、
かつbフラグは無視される環境であることがほとんどだから。

>>367
だからね、それは「テキストモードが必要な理由」にはならないんだよw
なぜなら普通は上に書いたようなことをやるから。
あれば便利かと思って作ったんだろうが、現状むしろあることのほうが害。バグの原因になる。
こんぐらい少し考えればわかるだろwww



371:デフォルトの名無しさん
08/10/04 12:56:18
>>368
その文字列を探す様子をたとえるのに、正規表現はないだろう。

372:デフォルトの名無しさん
08/10/04 13:09:55
スレリンク(tech板:87番)
こいつ何言ってるの?

373:デフォルトの名無しさん
08/10/04 13:21:33
>>370
>普通UNIX使いは改行記号がが¥nのとき、¥r¥nのとき、¥rのときそれぞれを考慮したコードを書きます。
書かない。ふつうは printf("foo¥n"); としか書かない。printf("foo¥r¥n") なんて書くわけない。
本気でそんな主張をするなら、世の中のUNIX用ツールで改行コードを使い分けているソースの例を挙げて、
それが一般的であることを示してくれ。

>なぜならUnix使いはおそらくwindowsをはじめとする他の環境を触ったことがあり、
触っただけで、自分のコードにそこまでの移植性を考えるわけない。
たとえばUNIXとWindowsではパス区切り文字が違うが、それを考慮しているコードは多くない。
改行コードの違いなんか考えるわけがない。

>それらで改行がどう表現されるかを知っていて、
>かつbフラグは無視される環境であることがほとんどだから。
bフラグを無視するのはUNIX系だけでは? Windowsでは無視されないんだから、「bフラグは無視される環境であることがほとんど」なわけがない。

374:デフォルトの名無しさん
08/10/04 13:27:07
>>372
お前の存在をズバリ言い当ててるのでは?

375:デフォルトの名無しさん
08/10/04 13:50:17
>>373
>それが一般的であることを示してくれ。
まあ\rは無視することもあるな、Macだけだし、はっきり言っておかしいから。
出力は、自分の環境で動けばいいから(移植するときに考えればいい)printf("foo\n")でもいい。
外部に出力する場合は規格通りにすればよい。

当たり前だが、問題なのは出力よりも入力。なぜならどのようなデータがくるか分からないから。
ここで注意すべきなのは、ただ単に改行までシークする場合は
\nと\r\nは改行位置を捜すのに両方\nを捜せばいいから問題にならない。
よって、考慮はしているがそれが実際にコード上に現れないことも多い。
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
しかし、考えなければならない事もある、たとえばhttpの改行は\r\nである必要があるが、
\nである環境もあるかもしれない。例えば、Httpのヘッダとボディ部を分けるのは
"\n\n"と"\r\n\r\n"の両方の可能性がある。
(規格上は後者のみ正しいが、もしかしたら前者の可能性もあるかもしれない。)

よってその場合には分けた処理が必要になる。実例として、MPlayerの
MPlayer/stream/http.cのhttp_is_header_entire()。
wgetのhttp.cなどを参考にしても、もし改行が\nの場合、\r\nの場合両方とも正しく処理できるように
なっている様がわかる。

でもそれが一般的である証明なんて誰にもできませんよ。もちろん一般的でない証明もできません。

>改行コードの違いなんか考えるわけがない。
考えなければならない時は考えるほうがよいです。考えないとバグの原因になる可能性がありますので。

>「bフラグは無視される環境であることがほとんど」なわけがない。
Unix使いは、って書いあるじゃんwwwww
なんで同じ文の中に書いてあって前提が途中で変わっちゃうのwwwww?

376:デフォルトの名無しさん
08/10/04 14:08:35
この場合、「一般的であることを示す」のは至難の業だわな。
いったい何百例出せばいいのかと(数例で納得するのは逆におかしい)。

それでいて、いかにも「正当な要求をした俺と、応えられないコイツ」的な構図が
出来上がるから、まぁ、ある種の人間はこの質問をすることを凄く好むんだよね。

「知りたい」んじゃなくて「追い込みたい」のが丸わかり。
土曜の昼に何を厨臭いことを。

377:デフォルトの名無しさん
08/10/04 14:46:13
>>376
久々に切れのある内容のスレを見た。
尊敬する。
あなたの言うとおり!!

378:デフォルトの名無しさん
08/10/04 16:17:01
>>376
なに語ってるのか知らんけど、
>普通UNIX使いは改行記号がが¥nのとき、¥r¥nのとき、¥rのときそれぞれを考慮したコードを書きます。
なんておかしなことを書いてあるから、それが「普通」である根拠を示してくれといってるだけ。
答えられないならでしゃばんなよ。


379:デフォルトの名無しさん
08/10/04 16:20:17
IDの出ないスレは自演が楽だな。

380:デフォルトの名無しさん
08/10/04 16:21:10
>>375
>wgetのhttp.cなどを参考にしても、もし改行が¥nの場合、¥r¥nの場合両方とも正しく処理できるように
>なっている様がわかる。

wget はネットで使うんだから、どちらにも対処できるようにするのは普通だろ。
それこそunixもwindowsもmacも関係ない話。
これをbフラグの話で持ち出すほうがおかしい。

381:デフォルトの名無しさん
08/10/04 16:46:28
>>378
> なに語ってるのか知らんけど、
知らんまま反応した当然の結果として、まるで的外れだから、「知る」までは黙ってていいよ。

382:デフォルトの名無しさん
08/10/04 18:34:37
unixはバイナリモードしかなくても、改行コードがファイル毎にバラバラでも
テキストを問題なく扱えるし、windowsでも当然可能
# 可能にしてるのはライブラリやアプリケーション、だけど問題はそこじゃない
不必要なテキストモードを残しているばかりに>>340の様な問題が起こる
appleがOSXでCRを捨てたようにwinもさっさとテキストモードを廃止してほしいもんだ

383:340
08/10/04 19:03:40
なんか、俺のせいで半荒れ?でスマナイ

俺はネイティブ言語はDelphiくらいしかつかわないけど、
テキストモードとかバイナリモードなんて意識したことない。
File.readのテキストモードとかの区別って結局どこから来てるんですかね?

384:デフォルトの名無しさん
08/10/04 19:25:51
>>383
Rubyを作るときのCの…えー、WindowsのCライブラリから来ている
結局としては、テキストであるという判断をどの層で誰がやるかという話に過ぎない

385:352
08/10/04 19:33:12
>>384
そっか、C言語のライブラリのせいなのね・・・

386:340
08/10/04 19:36:58
ん?レス番残ってた 340です。

387:デフォルトの名無しさん
08/10/04 19:42:25
1.9はstdioを捨てたと聞いたが、そうするとテキストモードに関する
状況は変化するの?


388:デフォルトの名無しさん
08/10/05 18:24:44
>>387
ユニバーサルニューラインが入ってる。
URLリンク(www.garbagecollect.jp)

389:デフォルトの名無しさん
08/10/05 19:15:07
>>388
> "r"なら、"rt"と"rb"のどちらの扱いになるかはプラットフォーム依存。
> とりあえず、いわゆるUNIXなら"rb"と同様に、mswinやmingwなら"rt"と同様になる。

ちょw 問題解決されてなくないですか?

390:デフォルトの名無しさん
08/10/05 19:17:52
ああ、違うのかな?
前みたいに適当に"r" だけだとどっちにしろ環境依存になるから、
バイナリかテキストかを意識しなくちゃいけないわけか

391:デフォルトの名無しさん
08/10/05 20:19:17
テキストだとエンコーディングも意識する必要があるしのう。
文字=バイトで凝り固まった外人どもよりはこのへん日本人は意識しやすいだろうけど。



392:デフォルトの名無しさん
08/10/06 00:31:26
>>389
本質的に問題なのはテキストモードを区別するという慣習だから、
Rubyだけで解決できる性質の問題じゃない。
Windows全体で「CRLFを使うのはやめよう」という流れにならない
限り解決しようがない。


393:デフォルトの名無しさん
08/10/06 01:51:56
結局いつものRubyが糞なのが根源的な原因だけど対応するのが面倒だから
個々の環境(というかいつもWindows狙い撃ち)で対応しやがれというお話ですね。

394:デフォルトの名無しさん
08/10/06 02:00:53
俺の場合、Windows(つかSJIS/CP932)一辺倒の頃は
むしろ「LFなんて糞、CR+LFに統一しる」と思ってた
今はそうでもないが、昔の俺以外にもそう思ってる奴は居るかも

395:デフォルトの名無しさん
08/10/06 02:31:20
ラインをフィードしただけで「行の先頭」に行くUNIXは変
キャリッジをリターンしただけで「次の行」に行く旧Macも変
「カーソルを行頭に戻してから行を送る」というCRLFを具現したWindowsが意味的に妥当

とは思う
っていうか電脳化した時点でCRLFという概念作っとけよもう
何が悲しくてコンピュータでタイプライタのエミュレーションなんぞしなければならんのか

396:デフォルトの名無しさん
08/10/06 02:38:48
SJISが普通に使われるWindowsでは2バイトあった方が誤読しにくい

397:デフォルトの名無しさん
08/10/06 08:21:28
>>395
それは端末を中心に考えているから。だから「行頭に戻る」と「次の行に移動する」をわけて考えてしまう。
UNIX作ったひとはテキストを扱うことを考えてて、それでテキストの「行末」が欲しかっただけだから、
それを1文字で表現したことは、そんなにおかしな話ではない。


398:デフォルトの名無しさん
08/10/06 10:46:45
CP/Mの呪縛?
EOFとかCR/LFとか


399:デフォルトの名無しさん
08/10/06 11:10:10
read() より下のレイヤであれこれやる Windows が変、ってことで

400:デフォルトの名無しさん
08/10/06 12:31:57
>>394
統一しる!までは思わんがw
どっちかというと、UNIXとかの人にバイナリで読む時とかちゃんと、"rb" つけてくれ!頼む!って感じ。
いろんなソースいじっていると本当にそう思うw

401:デフォルトの名無しさん
08/10/06 12:33:07
なーーんか、そろそろRuby本スレみたいな雰囲気で
初心者さんが質問しにくくなってきている気がするので移動しませんか?w

402:デフォルトの名無しさん
08/10/06 17:10:17
s = "s = 'abcde'"; p s; eval(s); p s
を実行すると↓のようになります。

"s = 'abcde'"
"abcde"

eval の中の変数をローカルにするには、eval(s) の代わりに
eval("def tmpfunc() #{s} end; tmpfunc")
などとするしかないでしょうか?
関数持ちだすのもなんかアレな気がして…

403:デフォルトの名無しさん
08/10/06 17:20:59
sandbox_binding = (class << Object.new; binding() ; end)
s = "s = 'abcde'"

p s
# => "s = 'abcde'"

eval(s, sandbox_binding)

p s
# => "s = 'abcde'"

なんか汚してもいいBindingでevalするのはどうでしょう

404:デフォルトの名無しさん
08/10/07 09:05:04
>>403
> class << Object.new
こんな書き方できるんだ...
「class <<」の右側って任意の式がかけるの?


405:デフォルトの名無しさん
08/10/07 11:37:07
ただの特異クラス定義だから、任意の式というか、メソッドを追加したいオブジェクトを返すものを1個書く
class Hoge < HogeBase
は「HogeBaseクラスに以下のメソッドを追加したHogeクラスを作る」という感じなのに対して
class Hoge << hoge
は「オブジェクトhogeに以下のメソッド動作を一時的に追加して便利に使うぞ」という感じ

irb> s = 'nyonyonyo'
irb> class << s ; def hello; puts 'hello!'; end; end
irb> s.hello
hello!
irb> s = nil
irb> s.hello
NoMethodError: undefined method `hello' for nil:NilClass
from (irb):5
from :0


406:デフォルトの名無しさん
08/10/07 17:43:46
gemsのライブラリ見ると、シングルトンでこれ使ってるの多いな

module HogeModule
 class << self;
    def application
      @application ||= HogeModule::Application.new
      @application
    end
    def application=(app)
      @applicaiont = app
    end
 end
end

で、
HogeModule.application.run
みたいな感じで使う

407:デフォルトの名無しさん
08/10/07 17:44:23
>  class << self;
 class << self

408:デフォルトの名無しさん
08/10/07 20:29:39
初心者の質問じゃないですけど、いいですか?

class Foo
 class << self
  def hello; puts "hello"; end
 end
end



class Foo
 def self.hello; puts "hello"; end
end

は、Foo.hello の挙動はまったく同じですけど、内部での仕組みもまったく同じですか?
class << self のほうは、Fooの特異クラスにインスタンスメソッドを追加することで、
def self.hello のほうは、Fooの特異メソッドを定義するという説明になるかと思いますが、
両者はまったく同一のことを行っているという解釈でいいでしょうか。


409:デフォルトの名無しさん
08/10/07 20:36:41

  ☆ チン

        ☆ チン  〃  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          ヽ ___\(\・∀・)<  初心者の質問じゃない質問まだー?
             \_/⊂ ⊂_)_ \____________
           / ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
        |  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| :|
        |           .|/


410:デフォルトの名無しさん
08/10/07 20:36:43
いいです

411:デフォルトの名無しさん
08/10/07 21:39:55
厳密に言うと

class Foo
 class Bar
  def hello; puts "hello"; end
 end
end



class Foo; end
class Foo::Bar
 def hello; puts "hello"; end
end

くらいは違う。


412:デフォルトの名無しさん
08/10/07 22:38:52
両者の違いが問題になるようなクラス設計をしてはいけないな

413:デフォルトの名無しさん
08/10/08 02:30:36
>>411の上と下って具体的にどう違うの?

414:デフォルトの名無しさん
08/10/08 11:48:06
最近、Rubyの勉強を始めた者です。
先週、RubyのMLに登録し「Welcome to our ruby mailing list」のメールも届いたのですが、
その後メールが1件も届きません。ひょっとしてRubyのMLって、コマンドをサーバーに送って
取得しないといけないのでしょうか?それとも、さらに何か手順を踏まないとメールが
届かないのでしょうか?メールに記載されている説明には、過去の投稿が欲しいなら
サーバーにコマンドを送れ、とは書かれているのですが・・・

415:デフォルトの名無しさん
08/10/08 11:57:01
RubyのML、じゃどれかわからん。
MLによっては単に流量が少ないだけということもある。

本来流れているはずのメールが届いてないというなら、そのWelcomeメールに書いてある問い合わせ先に質問メールを投げればいい。

416:デフォルトの名無しさん
08/10/08 12:00:10
ruby-ext と ruby-math、非公式の rubyist ML は投稿がないな

正直なとこ、ML は何か発言したい人向けだね
初心者さんはこのスレとかマニュアル独学とかしたほうがいいかも

417:デフォルトの名無しさん
08/10/08 12:09:57
>>415,416
素早いレス、ありがとうございます。
登録したのは「ruby-list」です。単に投稿が少ないだけなのか、
それとも自分が何かミスをしていて、メールが届かないのかが分からなかったもので。
とりあえず、MLの管理者に問い合せてみようと思います。

418:デフォルトの名無しさん
08/10/08 12:27:55
ウインドウズでのrakeの実行が遅すぎる、どうにかならないのか?


419:デフォルトの名無しさん
08/10/08 12:42:41
>>418
まだCPUが1個なんですか?
Rails開発者はデュアルコアとか普通ですよ?

420:デフォルトの名無しさん
08/10/08 13:22:04
gem update のメモリ超絶消費問題が長らく直らなかったくらいだしなあ
メイン開発者たちのマシンでは一瞬あるいは2秒程度で終わってると考えるのが妥当だな
あるいはWindowsのRuby使ってないとか

421:デフォルトの名無しさん
08/10/08 13:26:07
Windows使ってる人なんてハイスペックが当たり前で気にならないかもしれない

422:デフォルトの名無しさん
08/10/08 13:51:19
>>418
一応回答すると、WindowsのRubyスクリプトで処理開始までが馬鹿みたいに遅いのはどうにもならない
これを改善する方法を見つけられたらRubyは広まると思うんだがというかWindowsで常用したい

423:デフォルトの名無しさん
08/10/08 13:55:23
Core2Duo使ってるレベルだったら遅さなんて感じないけどね

424:デフォルトの名無しさん
08/10/08 14:09:02
>>423
俺の環境はCore2Duoだが、体感できるぐらいには遅い

425:デフォルトの名無しさん
08/10/08 14:09:55
同じマシンにLinuxとか入れて同じRubyスクリプトを実行するとほぼ一瞬なんだよねえ
Cライブラリとかの違いの関係だと思うんだが、残念だな

426:デフォルトの名無しさん
08/10/08 14:18:53
WindowsでRubyってそんな遅いの?
ならJRuby使っても気にならないんじゃね

427:デフォルトの名無しさん
08/10/08 14:24:38
>>424
そうなってくると、HDDとかにも問題があるんじゃない?

428:デフォルトの名無しさん
08/10/08 14:27:56
VistaはVistaで遅い

429:デフォルトの名無しさん
08/10/08 14:46:30
スレリンク(tech板:692番)

@echo off
echo %time%
ruby -e "puts 'hello!'"
echo %time%
ruby -v
echo %PROCESSOR_IDENTIFIER%

を実行して

11:35:25.96
hello!
11:35:26.96
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
x86 Family 6 Model 8 Stepping 6, GenuineIntel

だそうな

430:デフォルトの名無しさん
08/10/08 15:04:16
15:03:20.45
hello!
15:03:20.46
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
x86 Family 6 Model 15 Stepping 11, GenuineIntel

XP SP2でこれだったぞい?

431:デフォルトの名無しさん
08/10/08 15:04:51
そりゃキャッシュに乗ってるかどうかで全然違うよ

432:デフォルトの名無しさん
08/10/08 15:10:08
>>429
どうもその人だけみたいな感じだね
いろいろな要素が絡み合って遅くなってるのかな

433:デフォルトの名無しさん
08/10/08 15:19:17
>>430
それはCPUが充分速い
>>429はPentium3だぞ

434:デフォルトの名無しさん
08/10/08 15:22:24
>>432
「Windows Ruby 遅い」でぐぐるといくつか症例がある模様
URLリンク(www.google.com)

まあ、2GHzくらいあれば気にならないのだろう
あるいは、「CPUが遅い=OSがWin2000とか」だとかいうのの何かが関連してるのかも

435:デフォルトの名無しさん
08/10/08 15:26:11
>>433
424みたいのがいるから、CPUの問題じゃなく、遅くなる何かがあるんじゃないか?

436:デフォルトの名無しさん
08/10/08 15:30:25
全員が遅いなら、それこそ「WindowsのRubyは遅くて使えねえ」という大合唱になってるはずだしな
大丈夫な人と大丈夫でない人がいる程度には、ポピュラーな別の原因があるんだろう

437:デフォルトの名無しさん
08/10/08 15:38:24
VistaだったらWindows defenderの影響とか

438:デフォルトの名無しさん
08/10/08 17:53:12
>>433 うちのK6-2 450MHzだと
17:06:29.07
hello!
17:06:29.16
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mingw32]
x86 Family 5 Model 8 Stepping 12, AuthenticAMD

Ruby 1.8.7 0.09秒

17:09:52.56
hello!
17:09:52.86
ruby 1.9.0 (2008-10-04 revision 19669) [i386-mingw32]
x86 Family 5 Model 8 Stepping 12, AuthenticAMD

Ruby 1.9.0-5 0.30秒

MingwでRuby 1.9.0をビルドすると90分くらいかかる


439:424
08/10/08 18:47:36
書き忘れてたけど、遅くなるのは基本的に初回起動(キャッシュされてない状態)のとき
キャッシュ無しの状態でrake打つと、だいたい3~5秒ぐらいかかる
二回目以降は0.1秒くらいしかかからない
(WindowsXP Core2Duo 1.86GHz メモリ1024MB ruby-mswin32)

440:デフォルトの名無しさん
08/10/08 19:24:07
rakeとか言われても何も比較できない

441:デフォルトの名無しさん
08/10/08 21:30:31
K6-2 450Mhz Windows 2000
rakeって使ったこと無いけど
Ruby 1.9.0-5 に標準でついてるので
何も無しにrakeすると
No Rakefile found で即終了
約2.5秒 (何回実行しても)


442:デフォルトの名無しさん
08/10/09 01:22:27
>>419
Core2Duoでも、めちゃくちゃ遅いぞー
今のままではwin上でrailsは開発できない

443:デフォルトの名無しさん
08/10/09 01:36:48
>>427 >>429 >>430
>>432 >>441
windows上での開発環境のことじゃ。
rake db:migrate reset または ruby script/console
でもしてみな。一日が8時間に感じるほど遅いぞ。
最新のスペックのPCでもだ。win上で開発はできん。

win上でまともに開発できない今のままのrailsでは、
railsバブルははじけるだろうな。もうはじけている予感はあるが...
マーケティング戦略に踊らされたやつの負けー


444:デフォルトの名無しさん
08/10/09 01:41:46
根本的にいろいろ勘違いしてるな

445:デフォルトの名無しさん
08/10/09 04:54:55
勘違いしているというより、railsを叩くストーリーを語りたかったんだろう。
「この物語はフィクションです。実在の人物・団体・CPU・プログラミング言語とは
一切関係ありません」

446:デフォルトの名無しさん
08/10/09 08:09:36
Rubyが遅いのはもうすでにだれもが知っている事
耐えられないならJRubyを使えば速くなる




447:デフォルトの名無しさん
08/10/09 08:28:26
JRubyの方が速いのは事実だが、
RailsをJRubyで動かすとCRubyより遅くなる。

448:デフォルトの名無しさん
08/10/09 08:32:02
結局Pyhon+Zopeが最強ってことか

449:デフォルトの名無しさん
08/10/09 09:20:44
>>448
Python + Django
だろー

Railsはscaffoldであっと今に雛形が作れるが、
Djangoはもっと強力で管理ページもあっという間に作れる。



450:デフォルトの名無しさん
08/10/09 10:08:18
>>445
客観的に見れない信者のような連中が出てきたらそろそろかな?
前出のように、ウインドウズ上で仕事として開発するのは無理。
LinuxとWinでrake db:migrateの比較をしてみればすぐわかる。

Railsは、初回は金利0その後徐々に金利が上がるローンと似ている。


451:デフォルトの名無しさん
08/10/09 10:29:10
Railsの「生産性」を叩いてる人はVBAで納品される受注プロダクトもあるということを聞いたら卒倒するんだろうなと思ってる
なんでソフトウェアの全部が全部銀行並みの規模でクオリティでなければならんのん?

452:デフォルトの名無しさん
08/10/09 10:59:38
なんでWindows上でRailsを実行させないといけないのかがそもそも理解できないわけだが。

453:デフォルトの名無しさん
08/10/09 11:14:20
>>452
開発環境の事を言っているんだろ
rakeは本番稼動では使わないからなー
Rails信者はMac信者という事だろう
しかしほとんどは最近Mac信者になったやつらだろうが



454:デフォルトの名無しさん
08/10/09 11:33:24
Windows → クライアントサイドアプリケーション以外ヘボい
PC-UNIX系 → サーバサイドプログラム以外ヘボい
MacOSX → どっちも不可もなく見掛けが気持ちよい

という単なる選択の収斂の結果に過ぎない
WinでPC-UNIX系プログラムがきちんと動けばWindowsを使うって
あるいはクライアント環境がもっさりでなければPC-UNIXを常用する

WindowsをクライアントにしてUNIX系OSにログインするというのが最強ではあるが、それだとメンテ対象が2つになるんだよね

455:デフォルトの名無しさん
08/10/09 11:50:30
WindowsやLinuxとかを我慢して使ってる人のほうがよっぽど信者だと思う…

456:デフォルトの名無しさん
08/10/09 12:14:08
質問だよ

適宜更新される200字くらいの説明文が常に200個くらいあって、
それらに特定の日本語群(更新は稀で候補100個くらい)が含まれてるかどうかチェックしたいんだ
スレ全部読み込んで、注目したい語を含むレスがあるかどうか調べて抜き出す、みたいなノリだと思ってくださいな

どうするのが速くて妥当かなあ?
検索語100個の正規表現100個を200文全部に適用する? 2万回正規表現起動?

457:デフォルトの名無しさん
08/10/09 12:20:30
数KBのテキストに100回適用を200回とかはRuby的には屁でもない日強茶飯事だと思うぞ
ライブラリの中ではもっとえげつない、力技としか思えない正規表現動作がゴロゴロ…

選択100個入りの正規表現と100個の正規表現をif文で回すのと text.include?(s) とどれが速いかとかそういうのは知らない

458:デフォルトの名無しさん
08/10/09 12:45:02
>>455
会社にあるPCを見て見ろ、Macなんてあるか?
ほとんどないだろう、どこの会社だって同じだ。
Railsが新しい物好きな連中以外に普及するためには、
Winでまともに使えないとだめなんだろうね。
個人的にはRailsのIDEがもっとコード補完が上手になってもらいたい。

結局、
小規模サイト:PHP
大規模サイト:Java


459:デフォルトの名無しさん
08/10/09 12:47:53
候補や説明文がよほど膨大なら、
Karp-Rabin法も考えられるかもしれんが・・・・・まあその程度なら

460:デフォルトの名無しさん
08/10/09 12:52:25
yieldはなんだかんだ言って遅いから
語群を|でつなげた正規表現200回起動がよさそうに思う
ブロック使わずにif文ずらずら並べるならわからんけど

461:デフォルトの名無しさん
08/10/09 12:53:39
個人的用途を除くと、イメージ的には
Macはデザイン、クリエイター、
Linuxは学術用
UNIXはサーバー
Windowsはビジネスその他って感じだな

462:デフォルトの名無しさん
08/10/09 13:10:44
Ruby/Tkで
EntryウィジェットやTextウィジェット上でドラッグすると
フリーズします。原因として考えられることは何でしょうか?

463:デフォルトの名無しさん
08/10/09 13:18:57
ドラッグしたときの動作をプログラムしてないからじゃね

464:デフォルトの名無しさん
08/10/09 13:20:10
語群があまり変わらないという話だから、俺も>>460に賛成

465:デフォルトの名無しさん
08/10/09 13:22:01
>>456
正規表現でやるならRegexp.unionっていうのがあるよー

466:デフォルトの名無しさん
08/10/09 13:22:15
学術的なウンタラカンタラならともかく、業務サポートかカジュアルな用途だろうしな(いやわからんが)

467:デフォルトの名無しさん
08/10/09 13:28:13
Regexp#union は p で表示したときの正規表現が自動生成ですって感じでとても不安でイマイチ使う気になれない

irb> arr = ['a', 'bb', 'ccc', 'dddd', 'eeeee']
irb> p Regexp.new(arr.join('|'))
/a|bb|ccc|dddd|eeeee/
irb> p Regexp.union(*arr.map{|e| Regexp.new(e)})
/(?-mix:a)|(?-mix:bb)|(?-mix:ccc)|(?-mix:dddd)|(?-mix:eeeee)/

きちんと動くのかね、これ

468:デフォルトの名無しさん
08/10/09 13:29:26
Ruby用の高速HTTPライブラリ/サーバMongrelの作者もあきれているようだ。

URLリンク(slashdot.jp)
より抜粋
。 Ruby on Railsに関わる人々の技術力の低さや閉鎖性、また「どいつもこいつもRoRでアホなソーシャルネットワークを作って商売にしたがる」風潮に愛想が尽きたとのことで、今後はRubyから手を引き、PythonやFactor、Luaに軸足を移すそうだ。


469:デフォルトの名無しさん
08/10/09 13:31:22
はいはい初心者スレだよここは

470:デフォルトの名無しさん
08/10/09 13:35:36
>>468
Javaを知らないからそんなことになる
Javaを知ってればRoRはJavaで負けたスーツ連中が持ち上げてるだけだと早々に気づけたろうに
いい社会勉強になったことだろう

471:デフォルトの名無しさん
08/10/09 13:36:44
>>467
動くよそりゃw
inspectがごちゃごちゃするのには確かに同意するが

472:デフォルトの名無しさん
08/10/09 13:41:02
>>468
みんな、そこはもう大分前にとおりすぎたのだがwww

473:デフォルトの名無しさん
08/10/09 13:41:51
そもそも ?-mix: って何よマニュアルに書いとけよって感じではある > Regexp.union

474:デフォルトの名無しさん
08/10/09 13:42:54
>>468
あとZed Shawの記事はネタなので釣られないようにな。
単体の記事で見ると本当にそう思っているのかと思うもんだよ。

よくはてなブックマークとかでたくさんブックマークされている、煽り気味のエントリーとか
他の記事よむとネタじゃんってすぐにわかる、みたいなの

475:デフォルトの名無しさん
08/10/09 13:43:20
Rubyしか知らないと悲惨なのにはこっそり同意しておく

476:デフォルトの名無しさん
08/10/09 13:46:23
CとJavaとPerlとPHPとPythonとSchemeはオレオレライブラリを作れる程度には齧っておいたほうがいい

…多いな

477:デフォルトの名無しさん
08/10/09 13:48:55
PerlとPHPは真っ先に除外できるな

478:デフォルトの名無しさん
08/10/09 13:53:31
>>477は何もわかってない
キャッチセールに真っ先に引っかかるタイプ

479:デフォルトの名無しさん
08/10/09 13:59:54
アレな方々が流入してくるとすぐスレがおかしくなるな

480:デフォルトの名無しさん
08/10/09 14:02:47
PerlやPHPを知らないっていうのは一番悲惨なパターンのRubyユーザーなのでは…

481:デフォルトの名無しさん
08/10/09 16:01:00
PerlやPHPを生半可に知ってる方が、変にRubyに入れ込んじゃって不幸になる気もする。

482:デフォルトの名無しさん
08/10/09 16:29:26
Rubyって何に適してる言語なの?

483:デフォルトの名無しさん
08/10/09 16:53:30
>>482
オブジェクト指向テキスト操作ネット通信言語です

484:デフォルトの名無しさん
08/10/09 17:09:03
>>470
もっともなご意見です。
周りがみんな騒ぐので、こっそりRailsを触って見たが、
scaffoldまでは良かったがIDEが無いのでこつこつとコーディング
をしなければ行けず、こんなんで生産性がいいか?
と思っちゃいましたね。あと遅いし。

会社ではJavaで開発しているが、Eclipseを使った開発は超快適、
Ctl+スペースを打てば自動的にコードを挿入してくれるし、自動的に関数のヘルプも出るしね。
したい事を実現するためのライブラリはほぼ間違いなくのあるし、その数も桁違いに多いし。

Rubyに比べれば見た目のコーディング量は多いが、ほとんどはIDEが自動的に挿入したものだから、
実質は同じ量か下手すれば少ないだろう。

Railsは、一時の流行じゃないかなと思うね。
結局、ビジネスを企んでいるいるやつらに、うまく乗せられたんだよ。
「うそも100回言えば真実となる。」と誰かが言ったが、これが当てはまる気がする。生産性に関して言えば。


>>458
に一部賛同
PHP or Python:小規模
Java:大規模
でしょう。

どうもRails + Macで、私は先端を行くというような事を見せ付けているような感じが嫌いだ。
所詮、他の方の意見どおりwinでまともに使えなければこれ以上流行はしないだろう。


485:デフォルトの名無しさん
08/10/09 17:14:11
RailsはRubyのヘビーユーザーが適当に活用して小ぶりなアプリケーションを連続生産するのに向いている
RailsのためにRubyを学ぶような人や、Railsのソースを読んでも何してるかさっぱりわからんような人が使ってもどうにもならんな

という魔術師(志向)の人向けのフレームワークだったはずなんだが、当初からそのはずだったんだが、誰が捻じ曲げたのやら…

486:デフォルトの名無しさん
08/10/09 17:14:19
すごい初歩的な質問していい?
ゲーム作ってみたいと思って、つい最近Ruby始めたんだけど。
講座HPみたいなところで、Ruby/SDLでつくったスクリプトをexeファイルにしても、
Ruby/SDLのdllファイルが全部同じディレクトリにはいってないと動作しないって書いてあったんだけど、
てことは作ったゲーム配布するときはdllファイルも全部つけて配布しなきゃいけないってこと?

487:デフォルトの名無しさん
08/10/09 17:19:27
>>484
MacOSXでRubyを使うことに決めた人は、もともとPC-UNIX上でRuby使い倒してたような人が多い
そういう人の使うRoRは、その人のプロダクト作成に非常に役立つものになると思うよ

>>486
Exerbでひとつにまとめることが…DLLはできないのかな
というか、DLLは普通実行ファイルと一緒に配布するもんなんじゃね

あとRubyでゲーム作るのはマゾさんのすることなんだけど、あなたはマゾですか?

488:デフォルトの名無しさん
08/10/09 17:22:03
>>484
Railsを擁護する気は全くないけれど
一応、IDEを使ってRailsの開発することはできるよ(EclipseとAptana)

>>486
その通り

>>487
俺は自分のことをSだと思ってたが、本当はMだったのか

489:デフォルトの名無しさん
08/10/09 17:41:03
URLリンク(www.domo2.net)

490:デフォルトの名無しさん
08/10/09 17:45:19
>>487
>>488
回答ありがとうございますm(__)m
一緒に配布するんですか~。16個くらいあったんでまとめられれば見栄えがいいんだけど。

Rubyはゲームに向いてないですか;
大学の講義でRubyを軽く使うらしいから、ついでにと思って始めたんだけど・・
Rubyはわかりやすいって評判ですけど、Rubyでプログラミングに慣れてからC言語勉強した場合、
共通点が多くてサクサク覚えられますか?それとも違いが大きくて効率悪いですか?

491:デフォルトの名無しさん
08/10/09 17:49:36
>>490
人によるんじゃないかな
共通してる部分も確かにあるけど
片方をしっかり身に着けない内に他に手を出すと
ごっちゃになって混乱しそう

492:デフォルトの名無しさん
08/10/09 17:49:46
C言語を使って便利な機能を便利な概念でまとめたのがRubyだ

493:デフォルトの名無しさん
08/10/09 17:54:36
>>491
>>492
回答ありがとうございます。
ある程度身につくまでRubyで頑張ってみて、限界感じたらC言語勉強することにします~

494:デフォルトの名無しさん
08/10/09 18:02:07
C→Rubyは曖昧さを感じて戸惑う
Ruby→Cは堅苦しさ、面倒くささを感じる

495:デフォルトの名無しさん
08/10/09 18:07:31
>>490 >>491 >>492 >>493
CとRubyはまったく用途が違うだろう。無理に使う事ができるけどね。
Cを勉強するならC++じゃないか。
Rubyでゲームか? 話にならない。
ゲーム開発している人間に聞いてみな。笑われるだけだ。

後々の資産として、C++を先に勉強したほうが得だと思うよ。


496:デフォルトの名無しさん
08/10/09 18:24:53
またC++厨が…
C++を学ぶのとCを学ぶのでは意義が違うと何度言えば

497:デフォルトの名無しさん
08/10/09 18:26:11
そろそろスレタイ嫁

498:デフォルトの名無しさん
08/10/09 18:30:38
>>496
説明してみぞ




499:デフォルトの名無しさん
08/10/09 18:34:39
うぜぇ

500:デフォルトの名無しさん
08/10/09 18:37:16
こういう香ばしい人って、なんでみんなageるんだろうね

501:デフォルトの名無しさん
08/10/09 18:45:48
>>484,488
業務でAptana使ってるが、コード補完はやはりイマイチ。
候補が無駄に多いうえに欲しいのが出てこなかったりする。
特に、ハッシュで引数与える関数は全滅だ。
この辺はNetBeansも大差ない。
abbrevのあるemacs系の方がまだ使える。

Eclipse + JDT で幸せなJava開発環境を味わってる人には物足りないだろう。

502:デフォルトの名無しさん
08/10/09 19:29:58
Rubyと共に使うなら純Cだろうね。
C++はそれ単体で使うもの。
ゲーム作りならC++オンリーがパフォーマンス的に一番だろうなあ。
ただ、Rubyでも処理速度がさほど求められないならゲームに一応使えると思うが
ゲーム用のライブラリはCかC++だろうしなあ。
一応、RPGツクールはRuby使えるのもある。

503:デフォルトの名無しさん
08/10/09 20:03:58
>>502
Ruby/SDLでだいたい満足してたから、他のゲーム用ライブラリ触ったことないんだが
CやC++にはそんなに良いライブラリがあるのか?

504:デフォルトの名無しさん
08/10/09 21:45:12
とりあえず、SDLはC/C++でも普通に使える。

505:デフォルトの名無しさん
08/10/10 10:57:55
>>503
SDL

506:デフォルトの名無しさん
08/10/10 18:18:11
わざわざCからSDL使わなくても、Ruby/SDLでよくね
性能が要求されるなら直接DirectX使うべきだし

507:デフォルトの名無しさん
08/10/10 18:27:06
ゲームってのはけっこうハイレベルな感じに常時性能が要求されるもんだと思ってたが違うのか?

508:デフォルトの名無しさん
08/10/10 18:29:11
ゲームによるよ
3Dでエフェクトも激しいアクションゲームなんかは大変だけど
そうじゃないゲームもたくさんある

509:デフォルトの名無しさん
08/10/10 18:36:43
専用スレがあるんだからそっちでやればよくね?

510:デフォルトの名無しさん
08/10/10 18:47:04
>>508
マジレスするとそうでもない
画像表示してブラーかけてるだけのADVなのにDirect9c対応グラフィックボード要求するとかもうアホかと

511:デフォルトの名無しさん
08/10/10 18:55:54
「DirectGraphicsの初期化に失敗しました」は昨今けっこう有名なメッセージだと思う

512:デフォルトの名無しさん
08/10/10 19:29:48
誘導:
【Ruby/SDL他】Rubyでゲーム制作・総合スレッド
スレリンク(gamedev板)

513:デフォルトの名無しさん
08/10/10 20:31:46
>>510
それはその例がそういうゲームってだけだろ

514:デフォルトの名無しさん
08/10/11 10:27:03
玉金破裂ゲーム

515:デフォルトの名無しさん
08/10/11 15:25:43
Arrayを継承したクラスのオブジェクト.find_all{|e| e.cond?}

がArrayを継承したクラスのオブジェクトに自動でならないことにほんのりがっかりした

516:デフォルトの名無しさん
08/10/11 15:30:32
>>515
gem のライブラリで時々見るな、そういう中途半端実装
そこはレシーバのコレクションクラスのオブジェクトを作って返せと…なんのための独自配列なのかと…

517:デフォルトの名無しさん
08/10/11 16:00:49
>>515
find_all は Array じゃなくて Enumerable のメソッドだから
実際のところ自分のクラスは関係ない


518:デフォルトの名無しさん
08/10/11 21:09:09
Arrayは継承するな…とcompositionを使えと

519:デフォルトの名無しさん
08/10/11 21:59:40
Arrayを継承するってどういうシチュエーションなんだ??


520:デフォルトの名無しさん
08/10/11 22:08:31
なんで継承を毛嫌いするかね

521:デフォルトの名無しさん
08/10/11 22:09:37
いらんメソッドが付いてくるから

522:デフォルトの名無しさん
08/10/11 22:13:23
アホすぎて笑えない

523:デフォルトの名無しさん
08/10/11 22:13:39
継承は怖い

524:デフォルトの名無しさん
08/10/11 22:18:59
>>520
作るのは簡単だが使うときに面倒
あと作り直すときにも面倒

525:デフォルトの名無しさん
08/10/11 22:20:50
すごいとこまできてるねRubyistはw

526:デフォルトの名無しさん
08/10/11 22:21:13
>>515
ハッシュからハッシュを返すselectやmapはたまに欲しくなる

527:デフォルトの名無しさん
08/10/11 22:22:01
カンペキに活用した継承は非常に強力だが、ほとんどの継承はそうではない
っていうか、組み込みクラスは継承しないで委譲しろ、継承は自作クラス間でどんどんやれ

528:デフォルトの名無しさん
08/10/11 22:23:05
本当にアホばかりで嫌になる

529:デフォルトの名無しさん
08/10/11 22:24:49
ライブラリを書くくらいに使ってる人がいないってだけ

530:デフォルトの名無しさん
08/10/12 10:56:19
Integerのaとbのobject_idを常に同じにする方法ってありますか?
a.object_id = b.object_id
みたいなことがやりたいんですが

531:デフォルトの名無しさん
08/10/12 11:51:41
>>530
object_id を同じにしたい理由が良くわからんが…
普通に代入すれば同じになるでしょ。

今の実装では Fixnum の場合は即値だから必ず同じ値になるんじゃないかな。



532:デフォルトの名無しさん
08/10/12 12:05:34
>>530
できませんという答が妥当な気がする

>>531の言うように、Ruby の整数の数値の値とオブジェクトIDは紐付けられてる
整数の 1 のオブジェクト ID は常に一定だ

533:デフォルトの名無しさん
08/10/12 13:33:03
>530
多分参照を扱いたいんだと思うが
そういう場合は配列やオブジェクトにくるんで受け渡しするのがベスト。

534:デフォルトの名無しさん
08/10/12 13:57:54
>>531,532,533
ありがとうございます
そのままでは無理でしたか

ちなみに、何故やりたかったかというと(railsの話になりますが)
class A; attr_accessor id; end
class B; attr_accessor a_id; end
と二つclassがあり、AのidとBのa_idを同じにしたかったのです。
今までは

A.transaction do
@a.save!(ここで、a.idに代入される)
@b.a_id = @a.id
@b.save!
end

としていましたが、

@b.a_id.object_id = @a.id.object_id(みたいなことができれば。。)
A.transaction do
@a.save!
@b.save!
end

とできると、updateでもcreateでもtransaction内が共通になるため、2つのclassをまとめたclassが定義しやすいなと

535:デフォルトの名無しさん
08/10/12 15:39:09
>>534
なぜそうなってしまうのかわからない。
スキーマはどうなってるの?


536:デフォルトの名無しさん
08/10/12 16:27:25
>>534
ごめん
その話聞いても,idとa_idを同じオブジェクトIDにしたい理由がわかんないわ
それにそもそも代入やFixnumみたいなやつ以外で同じオブジェクトIDになることない気がする

なにか勘違いしてるんじゃ…

537:デフォルトの名無しさん
08/10/12 16:47:40
そんなことできたらそれはIDって言わないんじゃないの

538:デフォルトの名無しさん
08/10/12 16:56:36
要するに,例えばaとbっていう変数があったときに
b.object_id = a.object_id
としておけば
a = 10
としたときに,bも自動的に10になってくれませんか?

っていう話でしょ

object_idはそんな用途に使えません

539:デフォルトの名無しさん
08/10/12 17:01:37
>>538
すげー
よく検討ついたな

540:デフォルトの名無しさん
08/10/12 17:54:01
>> 538
その通りです
分かりにくい説明で申し訳ないです

用は参照を使いたかったんですが。。

541:デフォルトの名無しさん
08/10/12 18:32:47
なんかa_idって名前が気になるな
すっげー憶測だけど、Bはインスタンス変数でAを持つのが素直な設計だったりしない?
それならB#save!で@a.save!するだけで済むから楽なんだけど

542:デフォルトの名無しさん
08/10/12 18:38:16
>>538
おまえ、ほんとエスパーだな。
おれはさっぱり読み解けなかった。

543:デフォルトの名無しさん
08/10/12 19:03:44
>>534
railsというかActiveSupportはそういう関連づけを自動化してくれなかったっけ?

あるいは>>541のようにしてB#a_idは@a.idを返すようにするとか。

544:デフォルトの名無しさん
08/10/12 20:48:21
>540は自分の頭にあるオブジェクトのイメージをER図やクラス図で
さらっと描きだせるくらいのレベルになるまでARを封印すべきだ。
もし仕事でやってるなら合掌。


545:デフォルトの名無しさん
08/10/12 21:00:36
>>541, 543
確かにModelはそんな感じの設計です。
@a.b = @b
で関連付けて、
@a.save!
とすればbも入るってことですよね。

ただ、viewに2つのmodelを分けて書くのが面倒だったので、調べているとActivePresenterなるpluginを発見し
URLリンク(jamesgolick.com)
利用してみたところ、さきほどの参照のようなことをしたいなと思った次第です。

このpluginは2つのModelを結合してくれるもので、
 @ab = AB.new(params[:ab])
 @ab.save
で、AもBもsaveできちゃうよということでした。
ただ、DBの保存時に決定される@ab.a_idと@ab.b_a_idが関連づかずに困っていたというわけです。
あまり、plugin自体には手を入れてくなかったので、
@ab.a_idと@ab.b_a_idが同じだよということができれば良いなということでした。

546:デフォルトの名無しさん
08/10/12 23:11:18
プライマリキーの値を変更するな、テーブルの設計からやり直せ

547:デフォルトの名無しさん
08/10/12 23:24:26
>>545
自己レスです
とりあえず、参照は素直にはできないということは分かりました。
ありがとうございました。
もう少し試行錯誤して、無理なら普通のARにしてみます。

548:デフォルトの名無しさん
08/10/13 01:37:23
>>544
初心者として気になるんだけど
そのレベルになるまではどんな感じやるのが上達する?

549:デフォルトの名無しさん
08/10/13 01:44:19
>>548
1週間に3日書く
今週はRubyスクリプト書いたり改良の試行錯誤が無かったなあという週が無いという状態にする

制御構造覚えたらマニュアル見つつたまに使う程度のカジュアルさでももちろん一向に構わないが、
その場合はRubyが上達することはないだろうし、上達するほど頑張る理由もそもそも無いことだろう

550:デフォルトの名無しさん
08/10/13 01:56:31
Rubyのクラス分けやモジュール分けはてきとーで良いということがわかった頃から
スクリプト作るの早くなったような気がする

今でも特異メソッドとかわからんが
インスタンスメソッドとクラスメソッドしか作ってない
Proc はライブラリで要求されないと作らない
yield は使う機会が無いのでわけがわからない

551:デフォルトの名無しさん
08/10/13 06:21:15
yield は each 作ったりしたらすぐ覚える

552:デフォルトの名無しさん
08/10/13 06:31:29
おれはテストを書く気が全く起こらないんだよなあ…
少しづつでも書けばいいんだろうけど
つまらないから全く続かない…

553:デフォルトの名無しさん
08/10/13 07:56:06
どう考えても

 テストを書くのに悩む時間 >> 変なバグで悩む時間

なのでテストを書く理由がない俺
他人様に提供するライブラリ書くんじゃない限り要らないもんだと割り切ってる
書き方指南がないということは本当はみんな不要だと思ってる証拠

554:デフォルトの名無しさん
08/10/13 08:32:04
>>553
書き方指南いろいろあるじゃん
本にもwebページにも

俺も有用であるという自信はないが

555:デフォルトの名無しさん
08/10/13 08:43:49
テスト書くためのスクリプトでテスト書く説明するだけだしなあ
お前そんなスクリプトなんて普段絶対書かないだろ、というのが多々…(特にテスト駆動)

556:デフォルトの名無しさん
08/10/13 08:54:11
スクリプト序盤から中盤での書き方がよくわからないのがテスト駆動の特徴
というかMockとかあのへんを理解しないと関数的スクリプトのテストしかできん

557:デフォルトの名無しさん
08/10/13 09:23:47
色々書き方の作法もあるけど、むしろ形式に捕らわれず自由にテスト書くようにしたら
それはそれで楽める部分もあると思う。

558:デフォルトの名無しさん
08/10/13 09:42:39
俺はテスト書かなくて困るのってリリース後なんだよなぁ。
デグレ出るたびに書いときゃよかったって思う。

559:デフォルトの名無しさん
08/10/13 10:07:10
ちゃんとテストが書けるようになったら、もう上級者だよ。
つまり上級者になるためには、テストがきちんと書けるようにならないといけない。

おれはまだうまく書けないんだけどな。
UIのテストなんか、どうしたらいいのかさっぱりだ。

560:デフォルトの名無しさん
08/10/13 10:36:29
他人様のライブラリのgitのtestディレクトリとか眺めてるとよくわかる

本文コードの追加変更に対してテストが異常に適当というか不足
時間かけてまでして作りたくないかどうすれば網羅するか考えるの面倒なんだろうな

561:デフォルトの名無しさん
08/10/13 14:01:54
テストなしでロジック修正とかコードの整理(リファクタリング)とか、
怖くてできない体になった。


562:デフォルトの名無しさん
08/10/13 15:01:22
ZenTest試用中。なかなか良さげ。
URLリンク(mono.kmc.gr.jp)
URLリンク(zentest.rubyforge.org)

gem install ZenTest
でインストール。

563:デフォルトの名無しさん
08/10/13 17:14:28
>>561
わかります

564:デフォルトの名無しさん
08/10/13 17:30:17
テスト書くとメソッド単位でしか検証できないからめんどくさい
あと、GUIアプリのTestってどうやるの?

565:デフォルトの名無しさん
08/10/13 17:35:59
できない

566:デフォルトの名無しさん
08/10/13 17:55:46
入力の自動化をすれば出来る。
が、チェック項目をリストにして人力でやったほうがなんぼかマシ。

567:デフォルトの名無しさん
08/10/13 18:30:55
RubyでGUIつーと、テスト以前に環境が貧弱だからのう。
WebならSeleniumとか。


568:デフォルトの名無しさん
08/10/13 18:32:59
>>564
自動でマウス動かしてクリックしたりフォーム埋めたりするよプログラムを併用する
稀にどうしても自動化できないところが出てくることがあり、そういうときは漏れのない操作一覧図を書いて手動

569:デフォルトの名無しさん
08/10/13 18:58:10
>>564
ビューとコントローラを極力分離すれば、ある程度までは機械的にテストできる

570:デフォルトの名無しさん
08/10/13 19:02:19
GUI自体をテストしたい場合は?

571:デフォルトの名無しさん
08/10/13 19:15:36
GUI自体のテストって具体的にどんなの?

572:デフォルトの名無しさん
08/10/13 19:52:47
マウスクリックのタイミングとか

573:デフォルトの名無しさん
08/10/14 02:10:57
サブネットマスクにマッチするような判定って簡単に出来ますか?
例えば、
"192.168.0.45".in_mask?("192.168.0.0/24") # => true
"192.168.0.45".in_mask?("192.168.0.0/29") # => false
となってほしいのです。

574:デフォルトの名無しさん
08/10/14 02:15:25
本質的にサブネットマスクはbitmaskだから
ANDしてやればいい

575:デフォルトの名無しさん
08/10/14 03:03:18
>>573
IPAddr#include?


576:デフォルトの名無しさん
08/10/14 07:48:35
rubyはじめたばかりのものです。

Windowsにて、ワンクリックインストーラでrubyをインストールし、
RMagick(とImageMagick)をインストールしました。
サンプルプログラムを走らせようとすると(ruby sample.rb)、以下のようなエラーメッセージが出ました。

./RMagick.rb:2: uninitialized constant Magick (NameError)
from D:/Programs/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:
27:in `gem_original_require'
from D:/Programs/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:
27:in `require'
from rmagick.rb:1

ファイルの内容は以下です。

require 'RMagick'
include Magick
img1 = ImageList.new("d:/a.bmp")
img2 = img1.blur_image(0,2)
img2.write("sample01.bmp")
exit

色々と試した結果、上記ファイルがあるディレクトリ(D:\rubyとする)をカレントディレクトリとして、
cmd.exeからruby sample.rbとすると上記のエラーが発生しますが、カレントディレクトリがd:\の
場合は正常に実行されました。どうもカレントディレクトリに*.rbなファイルがあると失敗するようです。
irbでも同様の結果でした。

これを回避する方法はないものでしょうか?

577:デフォルトの名無しさん
08/10/14 09:35:18
そろそろ解決してる頃だろうか

>>576
require 'hoge' は カレントディレクトリの hoge.rb ファイルを読み込む
rmagick.rb (大文字小文字問わず)という自作ファイルを改名しろ

「hoge ライブラリを試そうとして hoge.rb を作って実行し、次にまた別のスクリプトを作って変なエラーにはまる」というのは
そろそろ FAQ にしてもいいと思う

578:デフォルトの名無しさん
08/10/14 09:46:44
>>577
ああ、まさにそれでした。
5時間くらい悩んでの書き込みだったので、今はRMagickのマニュアルを読んでました。
有難うございました。

579:デフォルトの名無しさん
08/10/14 20:24:43
文字列中のすべての"\"を"\\"に、"'"を"\'"に置きかえたいときに
gsubってものすごくつかいづらいんですけど、
なんか他にいい方法はありませんか?


580:デフォルトの名無しさん
08/10/14 21:00:31
str.gsub(/['\\]/){|s|"\\#{s}"}
十分簡潔に思うが、どの辺が使いづらく感じた?

581:デフォルトの名無しさん
08/10/14 21:19:06
str.gsub(/['"]/) { %Q|¥¥#{$&}| }
あたりで手を打たないか?


582:デフォルトの名無しさん
08/10/14 21:19:40
遅すぎたリロード


583:デフォルトの名無しさん
08/10/14 21:42:38
ブロック使わずに表現できないの?

584:デフォルトの名無しさん
08/10/14 21:45:41
str.gsub(/([\\'])/, "\\\\\\1")

・・・うん、ブロックのほうがいい。

>>579-580
後方参照使わずにgsub繰り返すっていう力押しをしてた人が
ハマるパターンだろうね。

585:デフォルトの名無しさん
08/10/14 22:04:09
>>580
なるほど、ブロックを使えばいいんですね。

>十分簡潔に思うが、どの辺が使いづらく感じた?
perl なら、 s/([\\'])/\\\1/; と、比較的直感的なところを
>>584 のように"\\\\\\1"と書くとバックスラッシュが多くなりすぎて
後で読みにくいと思ったわけです。


586:デフォルトの名無しさん
08/10/14 22:06:36
おっと、 s/([\\'])/\\\1/g; でした。

587:デフォルトの名無しさん
08/10/14 23:56:30
str.gsub(/[\\']/, /\\\&/.source)


588:デフォルトの名無しさん
08/10/15 00:44:09
Windows限定でいいんですけど、OSが32ビット版か64ビット版か調べる方法はあるでしょうか。
ENV["OS"]だと32bit版XPでも64bit版XPでも"Windows_NT"と表示されて区別が付きません。



589:デフォルトの名無しさん
08/10/15 00:51:21
Ruby関係ねえええ

ENV['PROCESSOR_ARCHITECTURE'].include?('64') が true なら 64BitなCPUなのできっと 64Bit版Windows
URLリンク(support.microsoft.com)

590:デフォルトの名無しさん
08/10/15 01:06:42
じゃあruby関係で
ruby -e 'p RUBY_PLATFORM'

64bit環境を持ってないのでどんな出力がされるのかは知らんけど

591:デフォルトの名無しさん
08/10/15 01:10:11
RUBY_PLATFORMはコンパイル時に決まりそう

592:デフォルトの名無しさん
08/10/15 01:15:50
Fixnumを地道にカウントアップしていってBignumになる境界を見つける -> そこから推定
とかそういうアホを思いついた

593:デフォルトの名無しさん
08/10/15 01:21:56
64bitのOSで32bitのバイナリ使ってたら無理じゃないか

594:デフォルトの名無しさん
08/10/15 02:22:11
WIN32 API の GetSystemInfo() とか呼んだら良さそうな気がする。
呼び方はあれ、dl 使うなり何なり工夫してくれと。

595:デフォルトの名無しさん
08/10/15 03:01:15
Ruby の Web アプリケーションによくでてくる、

class CGI
def valid?( param, idx = 0 )
self.params[param] and self.params[param][idx] and self.params[param][idx].length > 0
end
end

というコードの著作権者、またはライセンスってわかりますか?
GPL だとしてもソースを配布する際には著作権表示が必要ですよね。

tDiary や hiki にも登場していますが、特別そういう表示がないので
勝手に使っても差し支えないんでしょうか?

596:デフォルトの名無しさん
08/10/15 03:12:41
その程度の誰が書いても同じになるコードには
著作権が発生するほどの創作性はないよ。

597:デフォルトの名無しさん
08/10/15 06:11:16
適当に書き換えればおk

if self.params[param]
if self.params[param][idx]
if not self.params[param][idx].size.zero?
return true
end
end
end
return false


598:デフォルトの名無しさん
08/10/15 06:42:47
>>588
64bit の Windows で試していないから動いたらラッキーぐらいで

require 'Win32API'

GetCurrentProcess = Win32API.new('kernel32', 'GetCurrentProcess', 'v', 'i')
hProcess = GetCurrentProcess.call()
isWow64Process = "\0" * 4
is64BitWindows = false
begin
 IsWow64Process = Win32API.new('Kernel32', 'IsWow64Process', ['p', 'p'], 'i')
 IsWow64Process.call(hProcess, isWow64Process)
 is64bitOS = true unless isWow64Process == "\0" * 4
rescue RuntimeError
end
p is64BitWindows

599:デフォルトの名無しさん
08/10/15 07:08:01
CamelCaseキモすぎる

600:デフォルトの名無しさん
08/10/15 08:10:27
PascalCaseだね

601:デフォルトの名無しさん
08/10/15 08:20:52
LCCだろ

さりとて、Windows の API にはハイフン区切りは似合わないのも事実

602:デフォルトの名無しさん
08/10/15 08:25:44
CamelCaseは力強さを感じる

603:デフォルトの名無しさん
08/10/15 12:36:20
MSは先頭大文字のCamelCase好きだよね
クラス名でもないのに何故?と違和感を感じる

604:デフォルトの名無しさん
08/10/15 14:33:09
クラス名は許せるが、rubyでは_区切りとisPredicateではなくpredicate?を使ってほしい

605:デフォルトの名無しさん
08/10/15 15:06:15
>>604
>isPredicateではなくpredicate?
変数に?使えたっけ

606:デフォルトの名無しさん
08/10/15 15:17:48
使えないよ。
けどpredicateってことは多分604はメソッド名のつもりで言ったんだと思う

607:デフォルトの名無しさん
08/10/15 17:14:47
何気に
attr_reader :hoge?
って書けないんだよな

608:デフォルトの名無しさん
08/10/15 20:37:53
@hoge? がだめだからなぁ。
Module#attr_readerが再定義されていればその限りじゃないぜ
意義はないけど。

609:デフォルトの名無しさん
08/10/15 20:39:11
?付きメソッドを定義したくなるのはよくあることなのに、attrで定義できないのがな・・・
自分でattr_readerを拡張するか、rubyplusのboolattr使うと便利
つーかActiveSupport辺りにも入ってそうな気がする

610:デフォルトの名無しさん
08/10/15 21:32:47
?付きメソッドを自分で定義すれば済むだけなので、漏れは必要ないかなあ。

611:デフォルトの名無しさん
08/10/15 21:48:34
>>610
メソッドごとに一つ一つ?付きを定義していくのって凄く面倒じゃね? 変更に弱くなるし

612:デフォルトの名無しさん
08/10/15 21:59:26
?末尾のシンボルを渡されたら、メソッド名はそのままに
末尾削った変数にアクセスするっていうのも便利かもしらんね

でも真偽値のアクセサが面倒になるほど多いっていうのも
設計見直せる可能性はない?

613:デフォルトの名無しさん
08/10/15 22:29:30
class Hoge
 def self.def_predicate(name)
  attr_accessor name
  private name
  private "#{name}="
  define_method("#{name}?"){ __send__(name) }
  public "#{name}?"
 end

 def_predicate :hoge
end

こんなんとか。リフレクションを用いるほど多く使うんじゃなければ
ちゃんと書いたほうがいいと思うけど

614:デフォルトの名無しさん
08/10/15 22:40:14
>>611
>>612の言うように?付きメソッドをそんなに定義することあるかな?

615:611
08/10/15 22:43:31
>>612 >>614
4~5つ程度の?付きメソッドでも、似たような定義を続けて書くことになるからかなり面倒だと俺は思う
この辺は個人の意見もあるとは思うが

616:デフォルトの名無しさん
08/10/15 22:51:08
attr はあまり使わない
メソッドはきちんと定義する

617:デフォルトの名無しさん
08/10/15 23:34:27
そもそも @hoge? ができないことに疑問を感じるんだが

618:デフォルトの名無しさん
08/10/15 23:45:48
だから ? つきはメソッドだっつーの述語だっつーの

data= っていう変数が作れないのは不自然か?
change! っていう変数が作れないのは不自然か?

619:デフォルトの名無しさん
08/10/15 23:56:18
@is_foo みたいな変数名をどれだけ見かけることか
変数名が述語になれないのはおかしい

620:デフォルトの名無しさん
08/10/16 00:08:25
@hoge? = 123
まず見た目がきもい
そして三項演算子の文法と衝突しそう

621:デフォルトの名無しさん
08/10/16 00:08:33
変数名が述語になるほうがおかしい飢餓す

622:デフォルトの名無しさん
08/10/16 00:12:41
@foop か @foo_p でいい

623:デフォルトの名無しさん
08/10/16 00:14:27
「○○が二者択一のどちらかか、を格納する変数」というのはあまり Ruby っぽくない
二者択一の判断自体をメソッドで参照するのがフツーな気がする

624:デフォルトの名無しさん
08/10/16 00:32:23
>>620
そんなこと言ったらメソッド foo? がどんなオブジェクトも返すことのできる点もおかしくないかい?

625:デフォルトの名無しさん
08/10/16 00:36:58
見た目がきもい、ってのはほんとに見たまんま、?で終わる識別子が左辺値にくるのが
きもいってことだよ。
別に @hoge? = true ならいいってことじゃない

626:デフォルトの名無しさん
08/10/16 00:41:29
>>621
変数名とメソッド名の間で、言葉づかいの上でのセマンティックスが違っている「べき」なら、attr 系は廃止すべきってことになるな

>>625
@hoge? = true なら悪くないと思うけど

627:デフォルトの名無しさん
08/10/16 00:46:06
やだよ。
メソッド名の慣習のせいで、「hogeっすか?」って訊いてるようなイメージがあるじゃん。>@hoge?
で、「そうっすよ」とか「違いますよ」とか返事しようとしてるところに値突っ込むってのは変な感じだ。観念的な言い方でアレだが

628:デフォルトの名無しさん
08/10/16 00:50:34
何も @hoge? があってもそう書かなきゃいけないわけじゃないから、? を使わない自由を奪っているわけではないでしょ。
それよりも、attr 系によって変数名とメソッド名を関連付ける機能が提供されているにもかかわらず、? 付のメソッドだけ特例でそれができないほうが一貫性に欠けて嫌だ。

629:デフォルトの名無しさん
08/10/16 00:54:28
>変数名とメソッド名を関連付ける機能
単なるメソッド。とあるリフレクションのラップなだけ。

>? 付のメソッドだけ特例でそれができない
できないのはそこじゃなくて変数名に?を付けること。
でもってこっちは処理系本体の機能の話。

パーサとかに手を入れて?付き変数を許してまで@hoge?とか書きたいか?

630:デフォルトの名無しさん
08/10/16 00:58:26
そりゃ現状じゃ @hoge? が書けないようにパースしてるんだから、パーサを変えるしかないわな。
別に難しいことじゃない。
あと、attr_reader が処理系そのものが提供しているかどうかなんて関係ないじゃん。飽くまで意味論の話だし、built-inで入ってるんだから。

631:デフォルトの名無しさん
08/10/16 01:02:56
だって…再定義できるもの

632:デフォルトの名無しさん
08/10/16 01:06:57
>>627
メソッドvalueと変数@valueがあったとして、メソッドのほうは「valueは何か?」と問う意味なのに対して@valueはそのままの意味だよね?
同じようにhoge?がメッセージだと解釈されても、@hoge?までメッセージと解釈する必要はないのでは?

633:デフォルトの名無しさん
08/10/16 01:20:26
変数名だからその通りなんだけど、あくまでイメージというか馴れや先入観の問題だよ。>@hoge?がメッセージっぽい

また別の問題として、
変数名に?が付けられて、attr系もそんな名前を受け取るとすると
hoge.foo? = true とか
hoge.bar! = false とかが出て来る。後者なんて比較の否定と見間違う。

さらにいうと、?や!を許すとして、[]とか[]=とか@-は変数名に許す? 全部メソッド名としては有効なはずだよ。
attr_accessor :foo=
-> foo.foo= = 123
こんなことになる

634:デフォルトの名無しさん
08/10/16 01:44:47
hoge.foo? = true はできてもいいと思う。
hoge.foo! = ってのはまあちょっとヘンだけど、attr系で ! つけたかったことないから、あってもなくてもいいや。
[] や = が「メソッドの一部である」というのは別の側面で筋を通すための論法であって必ずしも名前の一部ではないので
(その証拠にメソッド「foo=」は、「foo.foo = 」のようにスペースを入れることができる)、
attr_accessor :foo= 等はなくてもよいかと。

635:デフォルトの名無しさん
08/10/16 01:55:24
>その証拠にメソッド「foo=」は、「foo.foo = 」のようにスペースを入れることができる
いやいや、メソッド名はあくまで「foo=」だよ。__send__(:foo=, 123)とか出来る。
パーサが頑張って「foo.foo = value」を「foo.foo=(value)」と同じような扱いにしてくれているだけで。

636:デフォルトの名無しさん
08/10/16 06:05:11
隔離スレでやれ

637:デフォルトの名無しさん
08/10/16 09:41:53
本スレが隔離スレってのも難儀な話だよなあ

638:デフォルトの名無しさん
08/10/21 07:15:54
RDEのツールバーとコンソール窓の設定などが上手く動作してくれません
ツールバーを移動して1段にまとめたりしても、RDEを最起動すると別の位置へ
勝手に移動した状態になってしまいます
コンソール窓は、フォントの設定が初期値に戻ってしまうのと、
ctrl+alt+cで開閉したりができません

コンソール窓のフォント設定だけは致命的なんで、そこだけでもなんとかできればと

639:638
08/10/21 07:27:47
一応環境も
ActiveScriptRuby 1.8.7(p72)
Windows XP SP3
です

640:デフォルトの名無しさん
08/10/21 14:20:14
ツールバーの問題は俺の環境(XP)では何年も前からあるよ。

641:デフォルトの名無しさん
08/10/21 15:51:59
てかRDE薦めてるサイトでもあるのか?
俺なら間違ってもRDEなんて使わせないんだが

642:デフォルトの名無しさん
08/10/21 15:56:44
統合環境使わせるなら EclipseかNetBeansあたりじゃね?

643:デフォルトの名無しさん
08/10/21 15:58:04
本筋以外での障壁が大きいからねえ…
「我慢して使う」時点で何か間違っとる
素直にエディタとプロンプトをAlt+Tabで切り替えて使うほうがマシ

644:638
08/10/21 17:13:53
コンソール窓のフォント設定は自分のミスでした
コンソール窓で右クリして「設定」からフォントを設定していたのですが、
直ぐ上に「フォント」というのがありました… 見逃してました

>>640
どもです
ツールバーはしょうがないみたいですね

>>641-643
どもです
winの人がrubyを始めようと思うと、RDEがまず最初に目に入るような気がします
NetBeansはDLしてあったのですが、JAVAが云々…とまたやることが増えそうなので
後回しになってました
とりあえず簡単なプログラムを書いて試したかったので、RDEをという感じで
日常はEmEditorのフリー版(かなり古い)を使っていたので、それでやればよかったのですが
コマンド操作には不慣れなwin人なんで、お手軽(そう)なRDEから初めてみようと思い

初心者~中級者?への道筋がすっぽり抜けてる感じがしていて先行き不安ですが
書いて直ぐ実行できるのはやっぱり楽しいし勉強になります

645:デフォルトの名無しさん
08/10/21 18:04:59
RDEはirbと似たような感じでSandBoxとしてしか使わないなぁ。
ファイルに保存はしなきゃならんけど、EmEditorも言語モード別のキー設定と、
外部プログラムのを実行して標準出力を下窓に出す機能が(少なくともVer6からには)
備わってるから、キー1発で実行はできるよ。

646:デフォルトの名無しさん
08/10/21 18:48:59
RDEはいろいろなところで紹介されてるから、知名度はかなり高いし
動作はけっこう軽くて多機能、日本語対応と利点は多い
が、不安定さ(特に文字コード関連)とレジストリ使用がそれらの魅力を帳消しにしている

647:デフォルトの名無しさん
08/10/21 19:42:48
RDEを普段使ってない人がファーストインプレッションあるいは又聞きで薦めてんじゃないかと思ってる
普段から使っていれば、少なくとも初心者には勧めようとは思えないはずだ

単一言語用だからといってIDE作成が簡単になるわけではない
1種類の言語にしか対応しなくても、10種類の言語に対応してても、IDEとしての作り方は同じだと思う
Rubyに特化すればIDEが俺でも作れそうとか最初に思った人は罪深いなと思ってみる

648:デフォルトの名無しさん
08/10/21 19:58:42
FreeRIDEが日本語や他の文字コードに対応してくれれば無敵なんだが

649:デフォルトの名無しさん
08/10/21 22:52:51
rubyの表記法の質問なのですが、
Test::Sample
のように書かれていたら、TestとSampleはともにクラスでTestがSampleの親クラス
という認識で合ってますか?
::という記号は定数やクラス変数なども表すとネットで見たのですが
区別は付くのでしょうか?

650:デフォルトの名無しさん
08/10/21 23:13:36
:: は 「の」 だ
Test::Sample は Test 「の」 Sample だ
それ以上の意味はないよ
クラスかどうかは普通に識別子で判断する
先頭が大文字なら定数かクラス
先頭が小文字かアンダースコアならメソッド
ただ、あからさまに面倒なのでメソッドを :: で繋ぐことはRubyでは意図的にしない
(他の言語での書き方をしないと死ぬ人が稀に使う)

651:649
08/10/22 00:09:42
>>650
ありがとうございます。
そんな曖昧なものだったんですね。メソッドは#でしたっけ?
この業界っていやに自己主張強い人が多いから統一できないのかな

652:デフォルトの名無しさん
08/10/22 07:50:20
RDEってRubyのサンプルプログラムとして付いているもんだと思ってた・・・

653:デフォルトの名無しさん
08/10/22 09:30:08
>>651
スクリプト上での表記とマニュアルでの表記は違う

…違ってちゃいけないと思うんだが、まあ、
「○○クラスのインスタンスメソッド××を…」と書く代わりに「○○#××を…」と
「○○クラスのクラスメソッド××を…」と書く代わりに「○○.××を…」と
「○○クラスの定数××を…」と書く代わりに「○○::××を…」と書けたほうが
一度理解してしまえば便利ではある

654:デフォルトの名無しさん
08/10/22 18:04:18
>>653
> スクリプト上での表記とマニュアルでの表記は違う
>
> …違ってちゃいけないと思うんだが、まあ、

とはいえ、あるクラスのインスタンスメソッドというのは、直接コード上には
現れないから、そもそも同じ表記にはしようがない。
いちいち X.new.m とか書くのもめんどくさいだろ。


655:デフォルトの名無しさん
08/10/22 20:22:05
>>650
Test::Sample だったら普通はmoduleかclassがネストされてるやつじゃね?

656:デフォルトの名無しさん
08/10/23 09:59:06
>649
::で示されるのは主に
・モジュール内クラス
・クラス内クラス
・モジュール内モジュール
・クラス内モジュール
・モジュールの持つ定数
・クラスの持つ定数
などであって、クラス間の親子関係ではない。
どちらかと言えば所有、もしくは所属の関係。

657:デフォルトの名無しさん
08/10/23 17:43:37
Windowsなら、既に更新停止状態だがJmEditorでぜんぜんいける。
コマンドライン登録しとけば、キー一発で実行できるし、プロンプト
勝手に閉じてほしくないなら、ruby.exe実行してからpauseするバッチ
ファイル登録すればいい。

658:デフォルトの名無しさん
08/10/23 18:56:51
まさかJmEditor使いが俺の他にもいたとは
動作軽いしUSBで運べるし、便利だよね

659:デフォルトの名無しさん
08/10/23 22:50:55
irb とかでいっつも忘れるんだけど、NKF.guess の返り値の数字と文字エンコード名の関係ってどっかに書いてないかな?

660:デフォルトの名無しさん
08/10/23 22:57:18
NKF.constants.map{|s|[NKF.const_get(s),s]}
こんな感じで出せばいいんじゃないか?

661:デフォルトの名無しさん
08/10/23 23:42:46
refeで引いてみたら出てるかと思ったが

$ refe NKF.guess
require 'nkf'
NKF.guess
--- guess(str)

文字列 str の漢字コードを判別して返します。
返される値は、NKF モジュールのモジュール定数です(下記参照)。
ruby 1.8.2 より前は現在の NKF.guess1 と同じものです。
ruby 1.8.2 以降では NKF.guess2 と同じものです。


下記参照て言われても、下記がない・・・

662:デフォルトの名無しさん
08/10/24 08:30:26
.chmもちあるけば解決するお

663:デフォルトの名無しさん
08/10/24 09:07:06
>>659
あれは inspect で文字列が出るべきだと思う

664:デフォルトの名無しさん
08/10/24 09:07:51
>>662
書いてねえって

665:デフォルトの名無しさん
08/10/24 10:01:53
>>664
キーワード:NKF.guess(str) (nkf)
でとんだページの下に定数が書いてあるけど・・・

666:デフォルトの名無しさん
08/10/24 11:02:43
> NKF.guess の返り値の数字と文字エンコード名の関係

667:デフォルトの名無しさん
08/10/24 23:52:29
ああ、そりゃソース嫁としかw

668:デフォルトの名無しさん
08/10/25 13:34:31
>>656
じゃあクラスの継承はどうやって表すの?

669:デフォルトの名無しさん
08/10/25 13:55:39
「表しようがない」が正解かと
「XXXを継承したYYY」のように文章で書くしかないな

670:デフォルトの名無しさん
08/10/25 23:39:57
Win32OLEを使ってエクセルの自動処理をしようと思っているんですがうまくいきません。

require 'rubygems'
require "win32/clipboard"
require 'win32ole'

excel = WIN32OLE.new('Excel.Application')
excel.visible = false
excel.displayAlerts = false

excel.workbooks.open 'filename' => 'foo'
workbook = excel.workbooks(1)
sheet = workbook.sheets(1)
sheet.select
excel.Columns("B:B").select
excel.selection.copy
excel.quit
↓に続く

671:デフォルトの名無しさん
08/10/25 23:40:47

class Excel
end
excel = WIN32OLE.new('Excel.Application')
WIN32OLE.const_load(excel, Excel)
excel.visible = true
excel.displayAlerts = true

book = excel.workbooks.add('bar')
sheet = book.worksheets(1)
sheet.Columns("B:B").Insert Shiftt = Excel::XlToRight

excel.Range("B1").ColumnWidth=11  #セル幅設定                       ←幅や領域が違うっていうエラーが出るのでなんとなく

excel.Columns("B:B").select
excel.selection.parent.paste

book.Save
excel.quit

エラーメッセージは以下
 `method_missing': paste (WIN32OLERuntimeError)
    OLE error code:800A03EC in Microsoft Office Excel
      Worksheet クラスの Paste プロパティを取得できません。
    HRESULT error code:0x80020009
      例外が発生しました

pastespecialなんてのも試してみてもダメ、エラーコードでググってもダメ、"ruby excel paste"などもググって見ましたがダメでした。
よろしくお願いします。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch