Ruby 初心者スレッド Part 14at TECH
Ruby 初心者スレッド Part 14 - 暇つぶし2ch237:デフォルトの名無しさん
07/09/11 16:07:03
requre "open-uri"
xml = REXML::Document.new(open("URLリンク(api.search.yahoo.co.jp)))
#↑うまくいかない

xml = REXML::Document.new(open("URLリンク(api.search.yahoo.co.jp)))
#↑うまくいく

xml = REXML::Document.new(File.open("hoge.xml"))
#↑うまくいく

RubyでYahooの検索APIを使うスクリプトを組んでいるのですが、
返されるxmlのサイズ?によって出来る時と出来ない時があります。
検索結果を5件など少なめにすれば open-uri で表示できるのですが、
10件などになると表示できません。
まったく同じ xml を hoge.xml として読み込ませると上手くいきます。

いったい何が原因なんでしょうか?

238:デフォルトの名無しさん
07/09/11 16:39:26
RUBYにはCPU使用率を調べるようなクラスはあるのでしょうか?
よろしくお願いします。

239:237
07/09/11 16:49:42
>>237
とか思って、別のサーバにて実行したらできました。
どうやらレンタルサーバ側の設定のせいだと思われます…。

いったいどこらへんに制限をかけているんだろう。

240:デフォルトの名無しさん
07/09/11 16:55:44
>>239
「できない」「できました」だけじゃなくて「どうできなかった」のか、
エラーになったのならエラーメッセージくらいコピペしろ。


241:デフォルトの名無しさん
07/09/11 16:58:37
>>238
名前だけで適当にあげるが
URLリンク(raa.ruby-lang.org) は?


242:デフォルトの名無しさん
07/09/11 16:59:46
一度静的に設定したら2度と変更しない変数を

def initialize
@workdir='/home/ore/hoge/'
@savedir="#{workdir}/save"
@today=Time.now
end

のように設定してます。
変更しないなら定数にしたほうが好ましいですか?

243:238
07/09/11 18:12:04
>>241
激サンクスです!!!

とりあえず、読んでおいしいとこ取りしてみました。
----------------------------------------------------
require 'win32ole'
require 'socket'

def load_avg(cpu_num = 0, host = Socket.gethostname)
 cs = "winmgmts://#{host}/root/cimv2:Win32_Processor='cpu#{cpu_num}'"
 wmi = WIN32OLE.connect(cs)
 wmi.LoadPercentage
end

cs = "winmgmts://#{Socket.gethostname}/root/cimv2:Win32_ComputerSystem='#{Socket.gethostname}'"
wmi = WIN32OLE.connect(cs)
for num in 0..wmi.NumberOfProcessors-1
 puts "cpu#{num}: #{load_avg(num)}"
end
----------------------------------------------------
CPU数が2になるのは謎ですが、色々と楽しめそうです!

244:デフォルトの名無しさん
07/09/11 18:13:42
>>242
その例がインスタンスの初期化ならインスタンス変数で良いと思う。
コード全体としての初期化なら定数だけど、メソッド定義内には書けない。

245:デフォルトの名無しさん
07/09/11 18:22:34
>>230
GDChartはCのライブラリであってコマンドラインから起動するツールじゃないよね。
ライブラリのラッパーがなんでsystemで起動するのと同じなの?

246:デフォルトの名無しさん
07/09/11 20:08:17
>>242
インスタンス生成のときにまで値がわからない可能性があるんだべ?
もしそうならそれでいいと思う。いちおうattr_readerしとけば。

247:デフォルトの名無しさん
07/09/11 20:46:52
保存用ディレクトリ(の共通部)とかは定数でいいと思う
正規表現とかも定数に吐き出したことがあったけど大文字が気持ち悪くてインスタンス変数に戻した

248:デフォルトの名無しさん
07/09/12 20:31:26
可変な配列からはじめの二つを取り除いたものを返すにはどうすればいいでしょう?

array.slice!(2..last) のようなことがしたいです。
array.slice!(0..1) だとはじめの2つだけ返してきます


249:デフォルトの名無しさん
07/09/12 21:25:10
>248
slice! の代わりに slice を使う。

250:デフォルトの名無しさん
07/09/13 00:58:40
>>248
array[2..-1]

251:デフォルトの名無しさん
07/09/13 17:09:48
なんという単語で検索していいかわからなかったので

perl での $a -> ${a} の {}で変数を区別するrubyでの方法を教えて下さい。

system("program", "-f arg1.txt")

のarg1を変数として認識させたいのです。




252:デフォルトの名無しさん
07/09/13 17:24:45
>>251
"-f #{arg1}.txt"

253:デフォルトの名無しさん
07/09/13 20:43:22
>>252
ありがとうございます。

こういうの名前ってあるんでしょうか?


254:デフォルトの名無しさん
07/09/13 20:55:13
Rubyでperldoc -m 相当のことを行うのはどうしたら良いでしょうか?

255:デフォルトの名無しさん
07/09/13 21:11:17
>>253
式展開 でしょうか。

256:デフォルトの名無しさん
07/09/13 21:13:14
>253
式展開

Rubyリファレンスマニュアル → Rubyの文法 → リテラル → 文字列リテラル → 式展開

257:デフォルトの名無しさん
07/09/14 04:51:23
RubyでPostgreSQLに接続するにはどうしたらいいのでしょうか?
OSはWindowsXPを使っています。

URLリンク(ruby.scripting.ca)
↑のページのWin32gem用というのを使えばいいのだとは思うのですが、
gemファイルの使い方が分かりません。
(拡張ライブラリを使ったことがありません)

ネット上でも本でも○○.tar.gzのUNIX系のコマンドのものしか見つかりません。
どなたか教えてください。よろしくお願いします。

258:デフォルトの名無しさん
07/09/14 06:06:49
スレちがい

259:デフォルトの名無しさん
07/09/14 10:25:29
呼び出し元のメソッド名を得る方法ってある?


260:デフォルトの名無しさん
07/09/14 13:27:40
caller[0][/in `(.*)'\z/, 1]

261:デフォルトの名無しさん
07/09/14 15:13:10
rubyインストールできません。

intel MacでMac OS X 10.4.10、Xcode2.5でX11環境も入ってます。
MacPortsでport install ruby +universal すると以下のエラーで失敗します。

lipo: can't open input file: /var/tmp//ccXJ6CfM.out (No such file or directory)
make[1]: *** [ruby] Error 1
make: *** [all] Error 2

どうすればいいんでしょうか?

262:デフォルトの名無しさん
07/09/14 15:28:15
>>261
> lipo: can't open input file: /var/tmp//ccXJ6CfM.out (No such file or directory)
/var/tmpはある?

263:デフォルトの名無しさん
07/09/14 16:06:26
>>262
手作業で /opt/local/var以下にtmpディレクトリ作っても失敗しました。長いですけどエラーメッセージつけます。

Error: Target org.macports.build returned: shell command " cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_lang_ruby/work/ruby-1.8.6" && make all " returned error 2
Command output: gcc -I. -I../.. -I../../. -I../.././ext/thread -I/opt/local/include -DUSE_MEM_POOLS -fno-common -O2 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc -fno-common -pipe -fno-common -c thread.c
cc -dynamic -bundle -undefined suppress -flat_namespace -L/opt/local/lib -arch i386 -arch ppc -L"../.." -o ../../.ext/i686-darwin8.10.1/thread.bundle thread.o -lruby -lpthread -ldl -lobjc
/usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: for architecture ppc
/usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: warning -prebind has no effect with -bundle
/usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: warning ../../libruby.dylib cputype (7, architecture i386) does not match cputype (18) for specified -arch flag: ppc (file not loaded)
/usr/libexec/gcc/i686-apple-darwin8/4.0.1/ld: for architecture i386
/usr/libexec/gcc/i686-apple-darwin8/4.0.1/ld: warning multiple definitions of symbol _setregid
../../libruby.dylib(process.o) definition of _setregid
/usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libpthread.dylib(setregid.So) definition of _setregid
/usr/libexec/gcc/i686-apple-darwin8/4.0.1/ld: warning multiple definitions of symbol _setreuid
../../libruby.dylib(process.o) definition of _setreuid
/usr/lib/gcc/i686-apple-darwin8/4.0.1/../../../libpthread.dylib(setreuid.So) definition of _setreuid
cp ../.././ext/thread/lib/thread.rb ../../.ext/common



264:デフォルトの名無しさん
07/09/14 16:07:11
>>263続き
compiling tk/tkutil
compiling win32ole
compiling zlib
making ruby
gcc -L. -O2 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc -fno-common -pipe -fno-common -DRUBY_EXPORT -L/opt/local/lib -arch i386 -arch ppc main.o -lruby -lpthread -ldl -lobjc -o ruby
/usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: for architecture ppc
/usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: warning ./libruby.dylib cputype (7, architecture i386) does not match cputype (18) for specified -arch flag: ppc (file not loaded)
/usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: warning prebinding disabled because of undefined symbols
/usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: Undefined symbols:
_ruby_init
_ruby_init_stack
_ruby_options
_ruby_run
collect2: ld returned 1 exit status
lipo: can't open input file: /var/tmp//ccxn84U5.out (No such file or directory)
make[1]: *** [ruby] Error 1
make: *** [all] Error 2



265:デフォルトの名無しさん
07/09/14 16:14:32
>>263
/var/tmpがあるかって聞いてるのに、なんで/opt/local/var/tmp作るんだよw



266:デフォルトの名無しさん
07/09/14 16:24:25
>>265
当然あります、最初から。

267:デフォルトの名無しさん
07/09/14 22:09:54
よく分からんが、-archって複数つけていいもんなの?

> /usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: for architecture ppc
> /usr/libexec/gcc/powerpc-apple-darwin8/4.0.1/ld: warning ./libruby.dylib cputype (7, architecture i386) does not match cputype (18) for specified -arch flag: ppc (file not loaded)

ライブラリはi386様なのにppc用のロードモジュールを作ろうとしてる、という風に読めるんだけど。

268:デフォルトの名無しさん
07/09/16 03:13:24
>>261
こっちは問題なくインストールできる。
+universalつけるのやめて、port install ruby でやってみたらどうなる?

269:デフォルトの名無しさん
07/09/16 03:16:53
>>261
>lipo: can't open input file: /var/tmp/

「lipo: can't open input file: /var/tmp/」でぐぐってみると
URLリンク(peace-pipe.blogspot.com)
というページがみつかった。
export CFLAGS="-I/usr/local/include -isysroot /Developer/SDKs/MacOSX10.4u.sdk"
とするといいみたい。

270:デフォルトの名無しさん
07/09/16 16:17:55
>>268
+universal つけないとふつうにインストールできます。
けど出来たバイナリーが Intel用か PowerPC用かわからないんで・・(どっかで見分け方を見た記憶があるんですけど忘れた)
+universalつけてもruby本体以外はちゃんとインストール出来てるんですけどね。

>>261
時間が出来たらやってみます。情報ありがとうございます。

271:デフォルトの名無しさん
07/09/16 16:20:33
ちがった >>261じゃなくて>>269でした。

272:デフォルトの名無しさん
07/09/16 18:22:55
>>270
fileコマンドでわからんか?

273:デフォルトの名無しさん
07/09/16 18:42:43
>>270
>けど出来たバイナリーが Intel用か PowerPC用かわからないんで・・(どっかで見分け方を見た記憶があるんですけど忘れた)
$ file /opt/local/bin/ruby
/opt/local/bin/ruby: Mach-O executable i386

そもそも、Rubyのバイナリやライブラリで、intel用かPPC用か見分ける必要があるのかと。
Foobar.appとは違うんだから。


274:デフォルトの名無しさん
07/09/17 20:47:29
プログラミングまったくわかりません。フローチャートの作法もわかりません。
bshellで目的のコマンドを一定回数繰り返したり、ftpで目的のファイルをgetしてくるオートパイロット
を作ったりして遊んだことはあります。
そんなことをやっているうちにコーディングに興味を持ち始めたんですが、Rubyに手を出してみようと思ってます。

問題はありますか?
やっぱりURLリンク(www.uni-tech.co.jp)
こういうところでC言語から勉強したほうが、Rubyの理解も近道でしょうか?

多くのプログラマが言う「オブジェクト指向」というやつが理解できるのかどうかも不安です。


275:デフォルトの名無しさん
07/09/17 20:53:03
困ってない人を助けられるほどプログラミング言語は優しくない

276:デフォルトの名無しさん
07/09/17 20:55:02
>>274
別に問題ないと思うよ。Cは独学で一番初めにやる言語としては
ちときつい気がするし。

ここなんかが結構参考になると思う。Ruby公式でもチュートリアルとして
リンクが貼られてるし。

URLリンク(www1.tf.chiba-u.jp)


もしかして、仕事にしたいの?

277:デフォルトの名無しさん
07/09/17 21:08:00
>>275
困ってなくても好きなら割となんとかなる

278:デフォルトの名無しさん
07/09/17 21:13:15
>>276
ありがとうございます。
PGを目指すわけではありませんが、まったく知識が無いとちと辛い局面がたまにあるのです。
あと、何かとテキストを加工したり、コマンドオペレーションを自動化したいときに、何かひとつ言語を身につけておくと便利かなぁと。



279:デフォルトの名無しさん
07/09/17 21:14:29
つーか、いきなりRubyから入ったらCが余計にわかりにくくならないか


280:デフォルトの名無しさん
07/09/17 21:38:19
>>278
わからないことはグーグル先生なり質問スレなりに聞けばいいんでない?

>>279
漏れはCやってからRubyやったから、その感覚が残念ながらわからないんだよなあ。
でも、変数だの関数だの条件分岐だのの概念は変わらないから
大丈夫じゃないかな。。

281:デフォルトの名無しさん
07/09/17 22:14:35
資格取りたいかLinuxカーネルハクしたいか業務でC使うプロジェクトに放り込まれたんでもない限り
Cなんて一生使う必要ないよ。やるだけ時間の無駄。

まあ後はRubyで拡張ライブラリ書くときくらいか。

282:デフォルトの名無しさん
07/09/17 22:47:17
Cを使う機会というより、Cをやっていないと他の言語の習得をするにあたって
「本物のプログラマ」にはかなわないと思ってるんじゃないかな
よくオッサンプログラマのボヤキみたいなBLOGで
「最近の若者はCも知らずJAVA JAVAだ」みたいなのは多いから
そういうのを心配してるんでは

283:デフォルトの名無しさん
07/09/17 23:35:12
>>282
それはオッサンのボヤキというより、ブロガーの職場の無能が愛想尽かされてるだけ。

284:デフォルトの名無しさん
07/09/18 00:16:53
>>274はたぶんこういう記事をいくつか読んだんじゃないのか?
これからプログラミングに真摯に取り組もうと考えている奴ほど
こういう声は気になるんだろう

URLリンク(local.joelonsoftware.com)


285:デフォルトの名無しさん
07/09/18 00:44:20
__FILE__はどのような方法で行われているのでしょうか?

286:デフォルトの名無しさん
07/09/18 00:53:15
内部的な実装を知りたいということ?

287:デフォルトの名無しさん
07/09/18 00:59:14
>>285
はい、おおざっぱな仕組みでもいいので、この機能とこの機能を組み合わせて
実現しているというのを教えてもらいたいです。

288:デフォルトの名無しさん
07/09/18 02:08:13
パース時にリテラルとして埋め込んでる。

289:デフォルトの名無しさん
07/09/18 04:52:37
rubyインタプリタにcppかますオプションが欲しい今日この頃

290:デフォルトの名無しさん
07/09/18 09:53:08
>>285
そこに興味を持つならソースを読めばいいのに、という気はする。
ソース全体に対して__FILE__でgrepかければすぐわかるよ。

もう286が答えちゃってるけどな。

291:デフォルトの名無しさん
07/09/18 11:52:42
初心者以前の問題だと思うのですが失礼します
公式サイトのチュートリアルの
URLリンク(www1.tf.chiba-u.jp)
でputs 1+2で3になるそうなんですがなりませんでした
コマンドプロンプトについて調べはしましたが、知識足らずということはあったかも知れません
しかし、コマンドプロンプトはコマンド上で実行するためのもので
実際にファイルをクリックして実行しても結果は変わらないはずだと思うんです
普通に .rb ファイルをクリックしても3という数字は出てきませんでした(プロンプト画面が一瞬でて消えるだけ)
幼稚園児が大人に聞くレベルの質問で申し訳ありませんがよろしくお願いします

292:デフォルトの名無しさん
07/09/18 11:54:55
>>291
本当に初心者以前なので釣りだと思います!

293:デフォルトの名無しさん
07/09/18 11:57:11
一瞬表示されてすぐ終了してるんだよ
ソースの最後に
puts 1+2
gets
とgetsを付け加えてENTERを押したら終了するようにすればいい

あと練習にはirbを使うといいかもね

irb(main):001:0> 1+2
=> 3
irb(main):002:0> puts 1+2
3
=> nil
irb(main):003:0>

こんな感じでいちいちコード書いて保存して実行する手間が省ける

294:デフォルトの名無しさん
07/09/18 11:59:53
.rbファイルを(ダブル)クリックしても実行結果は見えない
…いや、見えてるんだが実際には「起動して表示して終了」が一瞬で行われてて認識できん

コマンドプロンプト上からスクリプトを実行する方法を学ぶべし

295:デフォルトの名無しさん
07/09/18 12:05:19
>>292 残念ながら、釣りじゃないんですorz

>>293 おお、gets入れたら3でました ありがとうございます!
irbってのがよく分かりませんが勉強して参ります

>>294 cd フォルダ名 でファイルがあるディレクトリに移動する必要があるんですよね
こちらももっと勉強してきます

296:デフォルトの名無しさん
07/09/18 12:18:46
すみませんが、質問です。
Rubyには、引数を二つ取る算術関数はデフォルトで存在していますか?
例えばa + b の場合、aがレシーバで、引数はbだけです。
aとbの両方が引数になるような算術関数はあるのでしょうか?

具体的には、1から1000までの和を求めるとして、
(1..000).inject {|x, y| x + y}
この後半のブロックに当たるような関数がデフォルトで存在していたら、いち
いち無名関数を書くことなく、関数名を使ってProcオブジェクトを作れば済む
と思ったのですが。

Haskellだとこんな感じです。
foldl (*) 1 [2 .. 1000]


297:296
07/09/18 12:21:52
すみません、Haskellの例は、正しくはこうです。
foldl (+) 1 [2 .. 1000]
間違えて階乗のサンプルを写してしまいました。


298:デフォルトの名無しさん
07/09/18 12:45:25
>>296
たぶんない
module Enumerable
 def sum

299:298
07/09/18 12:47:40
スマソ、途中で書き込んでしまった

module Enumerable
 def sum
  inject {|a, b| a + b}
 end
end

みたいに一回書いとけば、それ以降は(1..1000).sumだけで和が出せるけどな

300:デフォルトの名無しさん
07/09/18 12:59:30
1.9か、ActiveSupportを使って
(1..1000).inject(&:+)


301:デフォルトの名無しさん
07/09/18 13:07:34
なんかエラーでてる
URLリンク(wiki.fdiary.net)

302:296
07/09/18 14:24:20
皆さん、ありがとうございます。

>>298-299 標準だとやはりこんな感じですか。

>>300 おお、Symbol#to_proc !
しかも1.9から標準になるのですか!
URLリンク(www.ruby-lang.org)
これはすごく便利ですね。ActiveSupportは使っているので、これで行きたいと
思います。
それにしても、Rubyはすべてがメソッドで、関数的に書くのはやりづらいと思っ
ていましたが、工夫すればそれっぽい「見掛け」になるもんですねえ。


303:デフォルトの名無しさん
07/09/18 14:41:30
URLリンク(www.ruby-lang.org)

-----
eval "foo = 0"
foo
--
-:2: undefined local variable or method `foo' for #<Object:0x40283118> (NameError)
---
NameError
-----
がエラーになると書いてあるのだけど、
-----
eval "foo = 0"
eval "foo"
-----
だとエラーにならない。

普通のスコープとevalのスコープで振るまいが違うのは不思議に思える。
これについて何か統一的な理解の仕方はある?

304:デフォルトの名無しさん
07/09/18 16:02:36
>>303
暗黙の第二引数となるオブジェクトが存在して、第二引数が指定されない限りそのオブジェクトが毎回引き渡される、と理解すればよい。

305:デフォルトの名無しさん
07/09/18 18:41:08
>>282
「最近の若者は、マシン語も知らず、phpだphpだ」みたいなのが多いのも懸念している人もいます。

shi3zの日記 - マシン語ってどんな感じか知りたくなった方へ
URLリンク(d.hatena.ne.jp)

306:デフォルトの名無しさん
07/09/18 18:43:23
>>300
横やりなのですが、Railsの本とかサイトみてて、ActiveSupportはこれができてすごいぜ!
みたいなのを、見かけるのですが、いまいち利点がわからんです。

>>296さんの言うみたいに、ブロックなしに関数渡せるよ、ってぐらいなんでしょうか


307:デフォルトの名無しさん
07/09/18 22:19:41
>>303
URLリンク(www.ruby-lang.org) から

> スクリプト全体をコンパイルしてローカル変数を決定するからです.

とあるので、未定義の変数(メソッド)を使おうとしているのをコンパイラが発見して

> undefined local variable or method `foo'

が出力されている。つまりこれはスコープの問題ではない。

308:デフォルトの名無しさん
07/09/19 15:20:11
[1,2,3] [100,101,102] => [101,103,105]
のように二つの配列を受け取ってその各要素の合計を要素とする配列を
得たい場合、Rubyらしく書くにはどうしたらいいのでしょうか?

309:デフォルトの名無しさん
07/09/19 15:40:28
>308
・[1,2,3].zip([100,101,102]).map{|a,b|a+b}
・[[1,2,3],[100,101,102]].transpose.map{|a,b|a+b}


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