Ruby 初心者スレッド ..
237:デフォルトの名無しさん
08/08/24 12:27:50
>>220の通りで、Net::HTTPを利用している限りはソケットからfragment単位で読むからダウンロード負荷自体は問題にならない
「これまでのresponseをメモリ内で破棄しつつ最新のみIOに出力する」というダウンローダー芸はNet::HTTPではできないと思う
100MBのファイルを取得したら100MBのファイルはresponseの取得履歴としてメモリ内にどーしても一瞬保持されるはず
238:232
08/08/24 13:36:57
>>237 まぢで?
だとすると、ブロック渡しする意味は進捗状況の確認ができるだけってこと?
ちょっと net/http.rb の中見てみた限りでは、BufferedIO にも、ReadAdapter にも
読み込んだデータを保存しているような挙動は確認できなかった。
保存されるとしたら、どこに保存されてるんだろう。
実際、read_body にブロック渡した場合と渡さない場合で
HTTPResponse#body の挙動が変わるようだ
http = Net::HTTP.start("www.example.com", 80)
p http.request_get("/index.html") {|req| req.read_body{} }.body
# >> #<Net::ReadAdapter>
http = Net::HTTP.start("www.example.com", 80)
p http.request_get("/index.html") {|req| req.read_body }.body
# >> "<html><head>...."
239:デフォルトの名無しさん
08/08/24 17:58:12
YAMLの Anchor, Aliase でノードを参照する時に、
別の.ymlファイルのノードを参照するのって
どうすれば良いんでしょうか?
240:デフォルトの名無しさん
08/08/24 21:23:42
>>239
できない。
やるとしたら
s = ''
s << File.read('file1.yml')
s << File.read('file2.yml')
p YAML.load(s)
とするしかない。
241:デフォルトの名無しさん
08/08/24 21:24:42
>>236
>読み込んだ部分ごとに出力に書き出してるように見えるけど
部分的に書き出しても、書き出し先がStringIOオブジェクトだから
結局は全部メモリに入る。
242:デフォルトの名無しさん
08/08/24 21:27:30
>>224
>現存するクラスを完全に上書きしたいです
Rubyは既存クラスを自由に書き換え可能だから、「完全に上書き」する必要はないと思うけどなあ。
もしよければ、既存クラスを書き換えるのではなく完全に上書きしたい理由を語ってみてください。
なにか新しい発見があるかも。
243:デフォルトの名無しさん
08/08/24 22:58:02
module A
def self.hoge
puts 'Hoge'
end
end
class B
include A
end
これで A.hoge が B.hoge という形に mix-in されないのはどうしようもない?
継承だったらクラスメソッドも継承されるみたいなんだけど
244:デフォルトの名無しさん
08/08/24 23:30:15
>>243
こゆことがしたい?
module A
def hoge
puts 'Hoge'
end
end
class B
extend A
end
245:243
08/08/24 23:35:22
>>244
なるほど、そういうのもあるんですね。
ただ、A の中にインスタンスメソッドもたくさんあるんですが、何とかなりませんか?
246:デフォルトの名無しさん
08/08/25 00:30:26
委譲の考え方の基本がなんとなくわかった気がする
247:デフォルトの名無しさん
08/08/25 00:40:24
>>245
ええっと、どういう風に書きたいってこと?
248:243
08/08/25 01:14:50
module A
def self.hoge # クラスメソッド
puts 'Hoge'
end
def fuga # インスタンスメソッド
self.class.hoge # self がどのクラスのインスタンスかによって変えたい
end
end
class B
include A
# B は hoge を再定義するかもしれないけど、しなくてもいいようにしたい
end
b = B.new
b.fuga # B で再定義されていれば B.hoge、そうでなければ A.hoge が使われるようにしたい
# もしくは、
class C
include A
hoge # こういうふうにclassのコンテキストで呼び出したり・・・
end
だいたいこんな感じになってくれるとうれしいです。
249:デフォルトの名無しさん
08/08/25 04:31:05
こんちは
はじめてRubyでスクリプト書いてみました
下記コードでうまいこと画像を保存できたのですが、なぜかアニメーションGIFがぶっ壊れてます
RubyでアニメーションGIFを扱うことは不可能なんでしょうか
もし可能であればライブラリや書き方など教えてほしーです
require 'open-uri'
def main
# ニコニコ動画の画像があるパス
url = 'URLリンク(www.nicovideo.jp)'
# 画像のパスを全部いれておくための配列
image_url_list = []
# ローカルの保存先のパス
savepath = "D:/Data/IMG/"
# URLの生成
0.upto(10) do |i|
image_url_list << url + "%03d" % i + ".gif"
puts image_url_list
end
# 画像を保存
image_url_list.each do |image_url|
filename = File.basename(image_url)
File.open(savepath + filename, "w"){|output|
open(image_url){|data|
output.write(data.read)
}
puts("#{filename} has saved.")
}
end
end
main
250:デフォルトの名無しさん
08/08/25 05:21:27
"wb"
251:デフォルトの名無しさん
08/08/25 05:30:51
うお すげぇ
朝っぱらからありがとうございます
バイナリモードっていうのがあったんですね
あざーっす!
252:デフォルトの名無しさん
08/08/25 07:53:27
>>243
こんな話?
irb(main):001:0> module M
irb(main):002:1> def self.included(m)
irb(main):003:2> m.module_eval do
irb(main):004:3* def self.foo; p :foo; end
irb(main):005:3> end
irb(main):006:2> end
irb(main):007:1>
irb(main):008:1* def bar; p :bar; end
irb(main):009:1> end
=> nil
irb(main):010:0> class C
irb(main):011:1> include M
irb(main):012:1> end
=> C
irb(main):013:0> C.foo
:foo
=> nil
irb(main):014:0> C.bar
NoMethodError: undefined method `bar' for C:Class
from (irb):14
from :0
irb(main):015:0> C.new.bar
:bar
=> nil
irb(main):016:0> class C
irb(main):017:1> foo
irb(main):018:1> end
:foo
=> nil
253:デフォルトの名無しさん
08/08/25 08:16:45
Rubyって日本語のファイル名を開けるの?
254:243
08/08/25 09:11:30
>>252
おー!include されるごとにメソッドを定義するわけですか。
それでいけそうです。ありがとうございます。
255:デフォルトの名無しさん
08/08/25 09:50:20
open-uriでurlを開いたら自動的にbodyも読まれてテンポラリファイルができてしまいます
headを読んで色々処理してからbodyを読むようにしたいんですけど
そういうのってnet/httpとか使って自作しないといけないんでしょうか
256:デフォルトの名無しさん
08/08/25 20:35:17
def config_file=(path)
h = YAML.load_file(path)
@username ||= h[:user]||h[:username]||h[:id]||h['user']||h['username']||h['id']
@password ||= h[:pass]||h[:password]||h['pass']||h['password']
end
使うキーくらいマニュアルに書いておけよ俺
>>255
はい
HEAD対応open-uriの改造をスクリプトの初めで上書きするモンキーパッチを誰かが作ってたと思ったが忘れた
とここまで書いてHTTPヘッダのことかいなと思う
まあどっちもたいして変わらんな
open-uriはFile.openが思想のベースなのでファイル読み込みは避けられないよ
257:デフォルトの名無しさん
08/08/25 20:41:55
「モンキーパッチ」ってそういう意味だったんだね。
258:デフォルトの名無しさん
08/08/25 20:52:07
>>257
Rubyではね
本来はゲリラパッチで、Rubyのようなシステム的に許されたなあなあのクラス上書きとはちょっと違う
代わりにduck punchingという言葉を使おうと言ってる人が一部にいるけど
本気でRailsの一部の人なので全く広まる気配はない
259:デフォルトの名無しさん
08/08/25 20:56:28
変数に結果を代入したいんだけど、三項演算子と1行if文ってどっちがいいかな?
260:デフォルトの名無しさん
08/08/25 21:01:33
s = (cond ? 'yes' : 'no')
s = if cond then 'yes' else 'no' end
s = if cond then
'yes'
else
'no'
end
if cond then
s = 'yes'
else
s = 'no'
end
まあ好きにせえ
3番目は微妙に嫌われてるということは知っておくといい
「Rubyのif構造は値を返す!!」とか興奮した初心者が多用するが冷静に読むと面倒だ
261:デフォルトの名無しさん
08/08/25 21:48:19
>>259
あるJavaの有名人が『三項演算子は難しい機能だからif文を使いなさい』といってた。
だからif文のほうがいいよ。
だって有名人のいうことだからね!
262:デフォルトの名無しさん
08/08/25 21:55:44
よく以下のような文を見るのですが、何のためにしているのでしょうか?
if __FILE__ == $0
263:デフォルトの名無しさん
08/08/25 22:02:40
>>262
そのif文の中はCで言うmainにあたるってとこかな
そこより上で定義したclassのテスト的なコード書いて
おいて、requireされた場合には実行させないための
おまじない
264:デフォルトの名無しさん
08/08/25 22:06:41
>>263
なるほど、そういうことか
d
265:デフォルトの名無しさん
08/08/25 22:07:34
>>264
>>263の補足というか、googleで、そのまんま "__FILE__ == $0" で検索して
トップに出てくるページを見ればいいと思うんだ。
初心者スレでググれ!って言うのは無し?
266:デフォルトの名無しさん
08/08/25 23:28:23
>>262-263
それは知らなかった。
勉強になった。
機会をくれてありがとう。
267:デフォルトの名無しさん
08/08/26 00:29:10
if 文の返り値を変数に代入するのは性に会わない
似たような感覚として、
・do 〜 end ブロック
・map と inject を除く {} ブロック
の返り値を利用するのはなんかピンと来ない
268:デフォルトの名無しさん
08/08/26 00:39:09
rubyで日本語のファイル名使えるかどうか
速く回答しやがれ!
269:デフォルトの名無しさん
08/08/26 00:41:04
>>268
使ってみてから質問しろ。
あほか
270:デフォルトの名無しさん
08/08/26 00:49:51
まあ問題が起きてからその状況を質問してもらったほうがええな
271:デフォルトの名無しさん
08/08/26 00:53:35
実際にやってみて日本語名が使えない、という話なのか?
OS環境とか文字コードとか、状況を具体的に説明してごらん。
272:デフォルトの名無しさん
08/08/26 00:57:32
Perlで日本語のファイル名のファイルをopenできないから
rubyだったら開発者がジャップだからネイティブで対応してるかと
思って質問してるんです!!!
273:デフォルトの名無しさん
08/08/26 00:59:40
dllからデータを読み込むプログラムを書こうとしているのですが、
dl/structモジュールで構造体を入れ子にできないのですかねぇ?
そこの部分だけcharの配列で埋めて後で置き換えるしかないのでしょうか・・・
274:デフォルトの名無しさん
08/08/26 01:17:20
>>272
できる。
でもRubyよりも先に日本語の使い方と質問の仕方を勉強することをおすすめする。
275:デフォルトの名無しさん
08/08/26 07:20:54
「♥.txt」を開こうとしたら無理だったんだけど
276:デフォルトの名無しさん
08/08/26 07:36:19
windowsなら、ユニコードのファイル名は無理
277:デフォルトの名無しさん
08/08/26 08:03:16
Rubyをちょこちょこ最近書き始めた初学者です。
Excelの列番号をA1形式からR1C1形式へ変換するプログラムを書こうとしています。
A→1
AA→27
IV→256
てな感じで。
パッと思いついたコードとしては
require 'jcode'
num = 0
str = "IV"
str.each_char{|char| num = num * 26 + char.to_i(36)-"A".to_i(36) + 1}
p num #=>256
ですが、スマートじゃない気がしてなりません。
もっとスマートな書き方有りますでしょうか?
実行環境はWinXP、Ruby1.8.6です。
278:デフォルトの名無しさん
08/08/26 08:17:18
>>276
ユニコードは日本語じゃなとでも言いたいわけ?
279:デフォルトの名無しさん
08/08/26 08:28:52
inject(0) {|n, char| n * 26 + ... } くらいしか思いつかん。
あとは ('A'..'Z').to_a.index(char) で 0 .. 25 に変換とか。
# ところで require 'jcode' は全角アルファベット対応?
280:デフォルトの名無しさん
08/08/26 08:30:10
>>278
Windowsが異常なだけ。
281:255
08/08/26 08:31:03
>>256
そうっすか残念(・ω・)
net/httpなんて使うなとか言う記事みた後なんでちょっと二の足を踏んでしまいます
282:デフォルトの名無しさん
08/08/26 08:38:59
困ったことあったらpythonを使え
283:デフォルトの名無しさん
08/08/26 09:11:19
>>279
単にString#each_charがjcodeで拡張されてるメソッドなので入れなきゃ使えないだけで・・・。
injectについてちょっと調べてみます。ありがとございます。
284:デフォルトの名無しさん
08/08/26 10:22:25
>>277
('A'..'ZZ').to_a.index('IV') + 1
256
285:デフォルトの名無しさん
08/08/26 10:47:07
>>284
これは目からウロコ。
'A'..'ZZ'がZからAAに繰り上げしてくれるとは知らなかったです。
有難う御座いました。
286:デフォルトの名無しさん
08/08/26 10:55:45
これってやっぱりあの変態さに定評のあるsuccがバックエンドになってるのかな?
287:デフォルトの名無しさん
08/08/26 11:00:17
>>281
初心者は自分の手で作ることを嫌がったら駄目だぞ
だいたい、どんなことがなぜ望ましくないかなんて耳で聞いだだけじゃわからんじゃないか
Net::HTTPでgetとheadとpostをするのは基本
ラッパーメソッドを作るのも基本
ヘッダやクッキーの処理にも手を出して、うわ何これめんどくせー、となった時点で既存の外部ライブラリを探す
こうすれば、その外部ライブラリの中の挙動もある程度推測できるし、不足点やバグがあったときに対処もできる
最初から外部ライブラリだけを使ってしまったのではなかなかこうはいかない
ということで、gemで "httpclient" をインストールすれ
HEADリクエストにも対応している
irb> require 'rubygems'
irb> require 'httpclient'
irb> client = HTTPClient.new
irb> res = client.head('URLリンク(www.google.com)')
irb> p res.header['Location']
["URLリンク(www.google.co.jp)"]
288:デフォルトの名無しさん
08/08/26 11:03:19
>>286
irb> p "Z".succ
"AA"
___l___ /、`二//-‐''"´::l|::l l! ';!u ';/:::l ', ';::::::l ';:::::i:::::
ノ l Jヽ レ/::/ /:イ:\/l:l l::l u !. l / ';:::l ', ';:::::l. ';::::l:::::
ノヌ レ /:l l:::::lヽ|l l:l し !/ ';:l,、-‐、::::l ';::::l::::
/ ヽ、_ /::l l:::::l l\l ヽ-' / ';!-ー 、';::ト、';::::l:::
ム ヒ /::::l/l::::lニ‐-、`` / /;;;;;;;;;;;;;ヽ! i::::l:::
月 ヒ /i::/ l::l;;;;;ヽ \ i;;;;;;;;;;;;;;;;;;;l l::l:::
ノ l ヽヽノ /:::l/:l /;;l:!;;;;;;;;;', ';;;;;;;;;;;;;;;;;ノ l:l::
 ̄ ̄ /::::;ィ::l. l;;;;!;;;;;;;;;;;l `‐--‐'´.....:::::::::!l
__|_ ヽヽ /イ//l::l ヽ、;;;;;;;ノ.... し :::::::::::::::::::::ヽ /!リ l
| ー /::::l';!:::::::::::::::::::: u ', i ノ l
| ヽー /イ';::l ’ し u. i l l
| /';:';:!,.イ し 入 l l U
| /,、-'´/ し / ヽ、 u し ,' ,' l
| /l し _,.ノ `フ" ,' ,' ,ィ::/:
| /::::::ヽ ヽ / し ,' ,' / l::
| /::::::::::::`‐、 し ', / u ,、-'´ l,、-
| ``‐-、._::::::::::` ‐ 、 ',/ , -'´`'´ ,-'´
| _,、-‐'"´';:::::::::イ:l';:::` ‐ 、._____,、-‐'"´ u /
| | | | \ l::/ l::::::/リ ';:::::lリ:::::l';:::l l:l:::::l\ u /
| | | |
289:デフォルトの名無しさん
08/08/26 11:08:10
succ大人気w
290:デフォルトの名無しさん
08/08/26 11:12:54
'z'.succ が "A" ではなく "aa" なのは変態でいいと思う
まあ 9.succ が 0 ではなく 10 なんだから予想の範疇ではあるが
'10'.succ が "11" なのも変態認定してよい
291:デフォルトの名無しさん
08/08/26 11:30:48
それは普通
292:デフォルトの名無しさん
08/08/26 11:43:37
'99'.succ が "100" になるのは変態
というか Ruby の succ への拘りは異常
succ を便利に使うのってどの言語由来?
293:デフォルトの名無しさん
08/08/26 11:50:38
perlの ++ -- 由来
rubyが異常なわけではない
294:デフォルトの名無しさん
08/08/26 14:29:46
特定サイトへの頻繁なWebアクセスのキャッシュ管理をDB的にやってくれるライブラリってないすかね
{URL => HTTPヘッダ} というハッシュを1個のpstoreに保存して、スクリプトの最初に完全に読み込んで使ってるんだけど、
もっといいのあるかな
295:デフォルトの名無しさん
08/08/26 14:41:59
>>294
初心者スレ的にはハッシュとPStoreでサイト用にカスタマイズするのが一番だと思う
マルチスレッドでアクセスされてPStoreが壊れそうならsqlite3とかでデータベース使え
Railsのどこかに何かあるような気もするが、たぶん超ごっついと思われ
296:デフォルトの名無しさん
08/08/26 20:29:54
alias suck succ
297:デフォルトの名無しさん
08/08/26 22:44:20
>>294
揮発してもかまわないなら memcached
298:デフォルトの名無しさん
08/08/27 02:07:50
ruby 1.8.7では
[7,6,5].map.with_index{|x, i| x*i}
ができないので、かわりに
[7,6,5].each_with_index.map{|x, i| x*i}
と、やるのを見かけました。
ならば inject.with_index 的な意味で
[7,6,5].each_with_index.inject(0){|r, x, i| r+x*i}
と、できるのでは!と思ってやったところ、
in `*': no implicit conversion from nil to integer (TypeError)
というエラーがでます。
色々試したところ
[7,6,5].each_with_index.inject(0){|r, x, i| p x}
とやると
[7, 0]
[6, 1]
[5, 2]
と出力されました。
injectの第2ブロック引数 には
[元配列の要素,インデックス] という配列が
渡されているようです。
(第3ブロック引数は何も渡されない)
なーんか、違和感があるんですけど、そんなことないですか?
299:デフォルトの名無しさん
08/08/27 02:34:14
>>298
[7,6,5].each_with_index.inject(0){|r, (x, i)| r+x*i}
300:デフォルトの名無しさん
08/08/27 18:02:07
rails2.1の入門教えてください
301:デフォルトの名無しさん
08/08/27 18:12:11
アバウトだのう
Rails初心者スレってないんだよね、そう言えば
需要が微妙だけど…
302:デフォルトの名無しさん
08/08/27 18:14:29
beginとendが予約語なので、範囲の開始と終了を表す変数名で困ってます
Rubyで一般的な開始と終了の変数名のペアってありますか?
文法ミスにならないようにbeginとendを慎重に使うというのは勘弁してください
303:デフォルトの名無しさん
08/08/27 18:21:47
Rangeクラスではfirst、lastが使われている
304:デフォルトの名無しさん
08/08/27 18:36:52
beginning-ending
opening-close(closing)
beg ed
305:デフォルトの名無しさん
08/08/27 20:21:49
start finish
306:デフォルトの名無しさん
08/08/27 20:27:06
finishはないわー
307:デフォルトの名無しさん
08/08/27 20:27:28
a z
308:デフォルトの名無しさん
08/08/27 20:50:19
仮引数では s と e をよく使う
が、文字列の s と 配列要素の e と被るのが難点
309:デフォルトの名無しさん
08/08/27 21:00:29
start と stop
@begin と @end
310:デフォルトの名無しさん
08/08/27 21:01:43
>>302
>範囲の開始と終了を表す変数名
from と to でいいような気がしてきた
311:デフォルトの名無しさん
08/08/27 21:12:25
from と to は変換が絡む処理に見える
ファイルの移動とか
文字列の変換とか
312:デフォルトの名無しさん
08/08/27 21:19:30
_beginと_endで
313:デフォルトの名無しさん
08/08/27 23:40:10
>>311
そんなことないと思うけどなー
変換が絡む処理なら src と dst (source と destination) だよ
314:デフォルトの名無しさん
08/08/27 23:41:41
ほほう
from,toじゃなくてsrc,dstかメモっとこ
315:デフォルトの名無しさん
08/08/27 23:52:09
srcとdstはC時代の遺物のような気もする
いや、フルスペルで書くと長すぎるが
316:デフォルトの名無しさん
08/08/28 01:18:47
dstは躊躇うけどdestだと受け入れてしまう気がする
317:デフォルトの名無しさん
08/08/28 02:27:59
ええー
318:デフォルトの名無しさん
08/08/28 05:26:58
src に「開始地点」以外の意図が多すぎるから、src - dst はピンと来ないなあ
dst と書かれていても何のことか悩んでググる自信がある
319:デフォルトの名無しさん
08/08/28 07:58:21
s(tart) - g(oal)
in - out
src -dst
from - to
begin - end
ruby - ?
320:デフォルトの名無しさん
08/08/28 08:23:45
b(egin) e(nd)
k(ey) v(alue) - ペア構造のキー値
r(et) e(lement) - reduce の 第一引数、第二引数
読んでもらおうという気が見えないコードが書けます
321:デフォルトの名無しさん
08/08/28 13:13:24
使えるのが Ruby だけというのもよくないと思うので、PHP5 の勉強も始める
うっひょーこの関数全部フラットでこのまま覚えるのクラスによるクラス分けとかないの
配列(ハッシュ)からペア取り除くのに unset($array['key']) って書かないといけないのね
ずっと前にちょっとだけ齧った Perl4 を思い出した
322:デフォルトの名無しさん
08/08/28 17:20:00
関数って普通フラットじゃね?
メソッドならレシーバいるけど
323:デフォルトの名無しさん
08/08/28 17:47:36
パッケージとか、名前空間に入れられることもあると思う
324:デフォルトの名無しさん
08/08/28 17:53:45
標準(添付・内部)ライブラリがRubyのように全部クラス構造になってて
配列は配列クラスのインスタンスで操作はメソッドを経由して行うとか言うことは確かにないな
PHP5はクラスを作れるが、内部は普通にPHP関数での遣り取りだ
インターフェースとしてのオブジェクト指向だね
325:デフォルトの名無しさん
08/08/28 18:18:09
質問です。
#!/usr/local/bin/ruby
print "Content-type: text/html\n\n"
require "csv"
csv = CSV.open('file.csv,'r')
csv.each_with_index do |line,n|
a[n] = line[0]
b[n] = line[1]
puts
end
print"<html><body>#[a]</body></html>"
print"<html><body>#[b]</body></html>"
csv.close
このプログラムをうpしたのですが内部サーバーエラーが出てしまいます。
自分では間違っているところが見つけられませんでした
どうすれば正常に作動するでしょうか。
回答お願いします。
326:デフォルトの名無しさん
08/08/28 18:32:58
~$ ruby -c test.rb
test.rb:5: syntax error, unexpected tIDENTIFIER, expecting ')'
csv = CSV.open('file.csv,'r')
^
test.rb:5: unterminated string meets end of file
327:デフォルトの名無しさん
08/08/28 18:33:35
file.csvのところのクォーテーションが足りない
aもbも初期化されていないので配列かハッシュを代入すると良い
#[a]でなくて#{a}
htmlタグは1度以上出力しないほうが良い
試してないけどぱっと見てこのぐらい
あといきなりCGIよりも一度コマンドラインで試した方がエラーが見えてわかりやすい
328:デフォルトの名無しさん
08/08/28 19:38:00
expectationsっていいんですか?
何か場当り的な網羅性の無いテストを推奨するような作りに見えるんですが
329:デフォルトの名無しさん
08/08/28 20:05:50
>>320
俺は reduce は acc(mulator) e(lement) が好きだな。
あ、もちろんコードにあわせて sumとかにすることもあるけど。
330:デフォルトの名無しさん
08/08/28 20:35:27
>>328
それは「あんな実行速度の遅いRubyのどこがいいのかわからない」という主張と同質だぞ
331:デフォルトの名無しさん
08/08/28 22:36:41
>>326,>>327
回答ありがとうございました。
次からはコマンドラインで一度試してみます。
332:デフォルトの名無しさん
08/08/29 06:33:27
小林と申します。
メーリングリストの利用自体がはじめてで、安易な行動をとり
皆様に不快な思いをさせてしまいましたこと、心からお詫び申し上げます。
大変申し訳ございませんでした。
333:デフォルトの名無しさん
08/08/29 06:34:15
I'm sorry . This is Test Mail
これはテストメールです。
334:デフォルトの名無しさん
08/08/29 08:52:27
信者としては
こんなバカでも使えるわかりやすいRuby♥
と、 宣伝材料にしたいところだ。
335:デフォルトの名無しさん
08/08/29 10:41:33
net/httpとWindowsのバージョンに関する質問です。
Ruby1.8.6+exerb最新版で固めたプログラム内でnet/httpを使用しています。
そのプログラムはVistaSP1とXPSP2では正常に動作しますが、XPSP3だと接続時に
「接続済みの呼び出し先が一定の時間を過、、、」と出て接続すらできない状態です。
なにかそのあたりの情報がありましたら、ぜひ教えてください。
宜しくお願いします。
336:デフォルトの名無しさん
08/08/29 15:27:37
>>335
rubyのせいとかOSのバージョンが違うせいとか考える前に、問題のマシンでちゃんとネットワークに繋がってるのか調べた方がいい。
プロクシなしで普通にブラウザで外が見えるのか、とか。
337:デフォルトの名無しさん
08/08/29 19:48:45
>>295
sqliteより、RubyレベルでまーしゃるしたHashのほうが速くて便利だと思う
338:デフォルトの名無しさん
08/08/29 22:11:31
質問です
Webブラウザのように実際的な短時間でサムネイル画像を取得したいです
1個ずつサムネ画像URLをアクセスしてると10秒くらいずっとだらだらアクセスしててなんか申し訳ないです
(「申し訳ないのでスクリプトで取得すること自体を止める」ということは考えてないですごめんなさい)
スレッドをいくつか生成してアクセスすれば同じように所要時間を短縮できますか?
339:デフォルトの名無しさん
08/08/29 22:20:59
このへんは一意な答がないんだよな
「多くの場合必ずしも好ましくない」というアドバイスが多すぎる
昔からの有名なものに「サーバ負荷考えてファイルアクセスのたびにスリープ入れろ」というのがあるが、
Keep-Alive全盛の今となってはクライアント側でスリープされて数十KBの接続を引き伸ばされるくらいなら
複数接続してもらってとっとと完了してもらって手放してもらえたほうがまだ有難かったりする
340:デフォルトの名無しさん
08/08/29 22:53:53
>>338
Rubyのスレッドってそういう動作時間縮める用途に使えたっけ?
341:デフォルトの名無しさん
08/08/29 23:00:46
IO待ちの間は他のスレッドに切り替わる…かもしれない
342:デフォルトの名無しさん
08/08/29 23:34:35
URLリンク(slashdot.jp) を思い出した
>>338
Net::HTTP.start(host, 80){|http|
# 各画像ファイルをこのブロックの中でGET
}
こんな感じで多分望みの挙動になると思う
343:デフォルトの名無しさん
08/08/29 23:42:39
require 'open-uri'
require 'benchmark'
uris = %w(URLリンク(www.yahoo.co.jp) URLリンク(pc11.2ch.net) URLリンク(www.yahoo.com)).map{|e| URI(e)}
Benchmark.bm(2) do |x|
x.report{
uris.each do |uri|
uri.read
end
}
end
sleep 2
Benchmark.bm(2) do |x|
x.report{
threads = Array.new
uris.each do |uri|
threads.push(Thread.new { uri.read })
end
threads.each{|thread| thread.join}
}
end
# 結果
user system total real
1.150000 0.080000 1.230000 ( 2.655373)
user system total real
1.210000 0.060000 1.270000 ( 1.583636)
344:デフォルトの名無しさん
08/08/29 23:52:01
外部待ちがないぶん、スレッド使ったほうが全体としては速いな
345:デフォルトの名無しさん
08/08/30 00:21:01
そろそろNet::HTTP.startの中でThread#joinして意味不明の挙動に悩んでる頃なんじゃないかと思う
346:デフォルトの名無しさん
08/08/30 01:55:11
変数名::メソッド
という書き方に違和感を感じるとともに、Rubyらしさも感じます。
347:デフォルトの名無しさん
08/08/30 02:36:56
?
348:デフォルトの名無しさん
08/08/30 07:31:27
こういうのじゃね
html = uri.read
case uri.host
when /www.example.com/ then
parser = TableParser_www_example_com
when /www.example.jp/ then
parser = TableParser_www_example_jp
end
datatable = parser::parse(html)
最初は文字列として連結して eval("#{classname}.#{method}") するしかないよなと思ってたんだが
普通にメソッド呼び出しのドットがくっついたときはさすがに参った
349:デフォルトの名無しさん
08/08/30 10:14:30
てゆーか実はダラダラしてるほうが行儀正しいって突っ込みは無いのかよ
350:デフォルトの名無しさん
08/08/30 12:13:35
>>349
あなたの使ってるWebサーバの設定を見直してみることをお勧めする
351:デフォルトの名無しさん
08/08/30 17:51:26
java使いなんですがrubyに興味あって調べてます。
それで、rubyのホームにあるAPIは読みにくいので、どこかお勧めないでしょうか。
英語のサイトを探してもないみたいなんで・・
rubyはリテラルが多いので、少し使わないとすぐ忘れちゃうんですよね。
352:デフォルトの名無しさん
08/08/30 18:06:25
刷新中の新リファレンスマニュアルはどう?
URLリンク(doc.loveruby.net)
353:デフォルトの名無しさん
08/08/30 18:08:17
と思ったけどリテラル一覧はないか。
これが見づらいということなんだよねぇ?
URLリンク(www.ruby-lang.org)
354:デフォルトの名無しさん
08/08/30 18:21:25
APIはいつもみるんで、MSDNみたいにリンクが多いよりは、Java docみたいな単純なテキスト(とページ内参照 a.htm#ref)のほうがいいと使いやすいと思います。
1.9のそれも使いやすそうですね。
文章多めで説明長・解説つきなら英語でやった方がいいんじゃないですか。
で、日本語のは短い説明だけで、よくアクセスされる必要な記事・解説は、英語の翻訳で済ますと効率的な設計かなと思います。
もしjavascriptでfile i/oができるなら、rubyじゃなくて、jsつかうんで。なぜなら、言語の機能よりも、文章がまとまってるって事が大事じゃないでしょうか。
ルビリストとかモルモンぽいんじゃなく、まともな人なら、コレが妥当なところでしょうか。
URLリンク(www.ruby-doc.org)
355:デフォルトの名無しさん
08/08/30 18:29:33
と、ここで提案してもしょうがないですし
JavaScript使いたいならJavaScript使ってくださいとしか
356:デフォルトの名無しさん
08/08/30 18:30:55
C#とかDとかrubyはリテラル多すぎw
単純な制御とか処理はいちいちAPI探すの面倒だし、イテレーターつかわないんでwhile/forでいいよ。
OOも魅力的だけど、制御とか処理とかと関係ないし、肝心なOOのライブラリがないじゃんw
357:デフォルトの名無しさん
08/08/30 20:53:45
昔VB5を少しだけやったときウィンドウに表示されてたんですけど
rubyは違うんですか?
プログラムは全くの初心者です・・・
358:デフォルトの名無しさん
08/08/30 20:57:09
ウィンドウはプログラム言語がわざわざ出力先として敢えて作っているだけです
プログラムの基本は入力(と処理と以下略)と出力であって、
Rubyは入力だけを受け取って出力だけを行います
てか何か解説とか入門とか読んで試してるんではないん?
359:デフォルトの名無しさん
08/08/30 21:04:41
>>358
Rubyの場合は出力先を指定しなければいけないのですか?
メモ帳とか・・・?
>>1のたのしいRubyをこの前買って 疑問に思ったから書き込みました
360:デフォルトの名無しさん
08/08/30 21:49:51
増えていく可能性のある配列を再帰的に処理する場合ってどうすればいいですか?
以下のような感じのやつで2を表示させたいですが1で繰り返しが終わります。
#!/usr/bin/ruby -Ku
@i=[1]
@i.each{|a|
p a
b=2
@i << b
@i.delete(a) if b != nil
}
361:デフォルトの名無しさん
08/08/30 22:41:54
>>360
挿入して削除したら、増えてないじゃん
362:デフォルトの名無しさん
08/08/30 22:46:38
イテレータの中で要素数を増減させるのはあんまりよろしくないよなあ
javaだと例外飛んで怒られるくらいだし
363:デフォルトの名無しさん
08/08/30 23:15:09
再帰的に、というのがわからんが、
単純に、
a = 0
while a < @i.size do
...
a += 1
end
と書けば?
364:デフォルトの名無しさん
08/08/30 23:31:23
>299
遠くからすみません。
そんな書き方できるんですね。
ありがとうございました。
でも、何で括弧がいるんだという辺りは
よく理解できませんでした。
勉強します。
365:デフォルトの名無しさん
08/08/30 23:42:04
>>361
書き方へんなのでごめんなさい
回している配列が途中で条件によって増えていって
そうじゃない場合は増えなくなるので最後には
配列がなくなってほしかったんです。
って書いてて意味が分からなく。。
>>362
何となく駄目ってのは分かるのですが
今作ってるやつだと
それ以外思いつかなったので。
>>363
ありがとう
最後にretryつけたらそれでもいけたので
駄目だったらその方法試してみます。
366:デフォルトの名無しさん
08/08/31 00:26:55
ああ、配列の要素の値を元にした処理の結果で、配列の要素が増えたり減ったりするんだな
で、新たに増えた配列の要素も、要素増減の処理に使うんだ
…なんかどっか設計が間違ってるような気もするが…
367:デフォルトの名無しさん
08/08/31 00:43:19
スタックとかキューとか知ったら幸せになれそうなんだが違うのかな
368:デフォルトの名無しさん
08/08/31 01:25:17
よくよく考えると反復処理とは言えないようなことを、イテレータでやっちゃうもんだから
ややこしいんじゃないか
369:360
08/08/31 01:39:14
>>366,367,368
精進します。
とりあえず動くっぽいので動いてから
設計見直してみます。
370:デフォルトの名無しさん
08/08/31 02:18:00
>>368
なんかそんなかんじするね
arr = [1]
while !arr.empty?
elem = arr.shift
value = somefunc(elem)
unless value.nil?
arr << value
end
end
わかんねーや
371:デフォルトの名無しさん
08/08/31 03:32:49
設計とか言う言葉を使うレベルじゃないと思うんだけど?
372:デフォルトの名無しさん
08/08/31 07:06:42
#! ruby -Ks
s1="あいう"
p s1.length
ar=s1.split (//)
p ar.length
日本語文字数を計算するのはコレしかないんですか?
それと、size/lengthは何か違いがあるんですか。
内部の実装で、sizeの方がsizeof (byte) * count
lengthの方が自動で str.split(//).size みたいな遅延評価
とかになってないんでしょうか?
373:デフォルトの名無しさん
08/08/31 07:57:05
>>372
jcodeをrequireしてjsize/jlength
内部の実装は知らんがsize/lengthは同じだろ
374:デフォルトの名無しさん
08/08/31 14:23:42
ruby-1.8.7-p72/string.c
rb_define_method(rb_cString, "length", rb_str_length, 0);
rb_define_method(rb_cString, "size", rb_str_length, 0);
再定義しない限り、Cのレベルで実体は同じ処理って事だ。
375:デフォルトの名無しさん
08/08/31 15:16:59
includeのたびに新しく定義しなおすのはイケてない。
module A
module ClassMethods
def hoge
puts 'Hoge'
end
end
extend ClassMethods
def self.included(m)
super
m.extend(ClassMethods)
end
end
というのが定番。
376:デフォルトの名無しさん
08/08/31 15:26:16
%w[A Z AA IV].map {|s| s.downcase.succ.tr("a-z", "1-9a-z").to_i(26)} # => [1, 26, 27, 256]
377:デフォルトの名無しさん
08/08/31 15:31:10
すまん、アンカーつけ忘れた。
>>375は>>252
>>376は>>277
378:デフォルトの名無しさん
08/08/31 21:31:49
初心者なんですが質問です
処理を書くとき、classにした方が素敵ですか?
イテレータはeachの繰り返しにしか使ってないのですが
他に便利な使い方はありますか?
379:デフォルトの名無しさん
08/08/31 21:46:40
> classにした方が素敵ですか?
メソッドにしないと非常にかっこ悪い
オブジェクト指向におけるクラスの概念はわりと高潔なものだが、
Rubyでは「処理をまとめてnewメソッドでスタートさせるもの」でもいいと思う
特に初心者のうちはクラスの使用条件というものについてうだうだ悩むのは無駄
てきとーにまとめて便利に使いながら自分で考え方見つければいい
あと、eachは基本だが、mapとfind_allの使用頻度と便利度は異常なので、
EnumerableやArrayクラスのメソッドはなるべく早く把握して適宜調べて使えるようになるといい
380:デフォルトの名無しさん
08/08/31 22:08:58
>>378
>処理を書くとき、classにした方が素敵ですか?
基本的にはclassにした方が素敵
どこからどこまでをclassにするかは、プログラムの目的や個人の趣向などによる
慣れないうちは設計が難しいので
分かりやすいデータのまとまりを、class化することから始めるのがオススメ
掲示板の1記事をArticleクラスにするとか
381:デフォルトの名無しさん
08/08/31 22:15:48
irb> def h(*p) ; p p.class; end
irb> h(1)
Array
irb> h(1=>2,3=>4)
Array
うわー困るうううっていうかめんどくさいいいい
382:デフォルトの名無しさん
08/08/31 22:20:13
>>378
繰り返しじゃないから厳密にはイテレータの話じゃなくなるけど
IO#openみたいに後始末を自動でしたいときにも便利
383:デフォルトの名無しさん
08/08/31 22:22:21
>>382
それ関係ないだろ
単にensure節の効果だ
384:デフォルトの名無しさん
08/08/31 22:22:48
メソッドもクラスもしくはクラスもメソッドだったらいいのに
385:デフォルトの名無しさん
08/08/31 22:32:32
たかがメソッド実行するたびに new する言語なんて遅くてやってられねえぞ
386:デフォルトの名無しさん
08/08/31 22:40:10
>>381
def method(*para) は引数がまず配列になるからな
キーワード引数風ハッシュの処理するのもけっこうめんどくさい
なんかうまいライブラリとかないもんかね
387:デフォルトの名無しさん
08/08/31 22:55:49
>>381
def h(a, *b) でいいんじゃないの?
388:デフォルトの名無しさん
08/08/31 23:52:11
>>386
ActiveSupportを使うと、*argsで受けて、options = args.extract_options!
389:デフォルトの名無しさん
08/09/01 01:48:09
feed-normalizerってどうですか?
検索してもほとんど情報が出てこないんですが
390:デフォルトの名無しさん
08/09/01 02:41:35
perlおぼえたあと、
PHPとRubyでは、
どっちを学んだら相性いいですか?
391:デフォルトの名無しさん
08/09/01 03:52:48
>>390
そりゃここじゃなくてperlのスレで聞きなよ
その時は「相性」という言葉を、どういう意味で使ってるのかも添えといた方がいい
392:デフォルトの名無しさん
08/09/01 06:55:48
perlおぼえたら、perlを使うんじゃないの?まずはプログラムやりたいみたいだし、簡単だからVB.NETやるといいよ。
393:デフォルトの名無しさん
08/09/01 08:21:08
んなもんなんのためにPerl覚えたかによると思うが。
趣味だってんなら好きにしろ
394:デフォルトの名無しさん
08/09/01 08:47:10
>>390
WebやりたいならPHP、小物アプリならRuby
本格的アプリならJavaやC#
395:デフォルトの名無しさん
08/09/01 10:32:08
それ、全部VBでいいんでない?
396:デフォルトの名無しさん
08/09/01 10:46:23
全部common lispでできるよ
397:デフォルトの名無しさん
08/09/01 10:58:01
>>390
順番に意味はない。
398:デフォルトの名無しさん
08/09/01 11:11:56
>>394
ぜんぼ覚えるの大変だなw
C++は習得できなかったからないの?
JRubyがあるから、今のうちにJavaかな。
399:デフォルトの名無しさん
08/09/01 19:05:30
サーバーサイドC++ってごっつすぎだろ
400:デフォルトの名無しさん
08/09/01 20:47:46
>>390
結論からいうとPythonを覚ればそれでなんでも出来る。
軽くて速くてソースが美しいPython。文書も豊富でライブラリも充実してるPython。
仕様はかっちり、世界規模で開発されているPython(Google, MS, Yahoo!, etc.)
オープンソース系ならほぼもうPythonが事実上の標準言語になってる。
日本だけで閉じこもってて、遅くてソースが汚くて開発もいい加減なRubyとかやっても
無駄に終わる可能性があるよ
401:デフォルトの名無しさん
08/09/01 21:36:57
ソースが美しい・汚いとは、例えばどういうソースのことだ
402:デフォルトの名無しさん
08/09/01 21:39:56
読み難い、読み辛いって読み替えればいいんじゃね?
403:デフォルトの名無しさん
08/09/01 21:54:31
どうしても分からないことがあります。
hash = Hash.new([])
array_a = [1, 2, 3]
array_b = [:a, :b, :c]
array_one.each do |a|
array_two.each do |b|
hash[b] << a
end
end
hash # => {}
でhashに値が入らないのは何故でしょうか?
{:a=>[1,2,3], :b=>[1,2,3], :c=>[1,2,3]}
となってほしいのですが。一方、下はOKです。
hash = Hash.new(0)
array_a = [1, 2, 3]
array_b = [:a, :b, :c]
array_one.each do |a|
array_two.each do |b|
hash[b] += 1
end
end
hash # => {:a=>3, :b=>3, :c=>3}
404:デフォルトの名無しさん
08/09/01 21:57:34
あーしまった。変数書き間違った。訂正します。
hash = Hash.new([])
array_a = [1, 2, 3]
array_b = [:a, :b, :c]
array_a.each do |a|
array_b.each do |b|
hash[b] << a
end
end
hash # => {}
hash = Hash.new(0)
array_a = [1, 2, 3]
array_b = [:a, :b, :c]
array_a.each do |a|
array_b.each do |b|
hash[b] += 1
end
end
hash # => {:a=>3, :b=>3, :c=>3}
???
405:デフォルトの名無しさん
08/09/01 21:59:23
読みやすいかどうかなら、記号が多いよりもJavaやC#のように長いメソッド名のほうが読みやすいんじゃないの?
もう、パイソンと関係ないけおd
406:デフォルトの名無しさん
08/09/01 22:08:05
[:a, :b, :c]
は何か意味あるの?
407:デフォルトの名無しさん
08/09/01 22:10:44
>>406
ないです。単にシンボルの方がタイプ数が少ないという理由です。
408:デフォルトの名無しさん
08/09/01 22:13:16
>>404
カッコ付きのHash.newは、該当キーがなかったときにその引数オブジェクト
自体を返す。つまり、
x = []
hash = Hash.new(x)
each/each
if hash.has_key?(b)
hash[b] << a # ここには絶対来ない
else
x << a
end
end/end
みたいな感じ。
たぶんやりたいことは、ブロック付きのnewで
hash = Hash.new {|h, k| h[k] = [] }
じゃないかな。該当キーがなかったときに、
新しく空の配列を作って hash に代入する。
409:403
08/09/01 22:29:06
> たぶんやりたいことは、ブロック付きのnewで
> hash = Hash.new {|h, k| h[k] = [] }
> じゃないかな。該当キーがなかったときに、
> 新しく空の配列を作って hash に代入する。
その通りなんですが、
x = Hash.new([])
x[:a] << 1
x[:b] << 2
x # => [1, 2]
これは大丈夫なのに、何でだろうと思って。
410:404
08/09/01 22:32:02
あーすみません。また書き間違った上に、なんか根本的に誤解してる>自分
出直してきます。
411:デフォルトの名無しさん
08/09/01 22:41:51
>>407
タイプ数が少ないって何のこと?
412:デフォルトの名無しさん
08/09/01 22:42:16
x = Hash.new([]) # だいたい x = Hash.new; x.default = [] に同義
>> x[:a] << 1
=> [1]
>> x
=> {}
>> x[:b] << 2
=> [1, 2]
>> x
=> {}
>> x.default
=> [1, 2]
413:403
08/09/01 22:50:04
ほんといろいろすみません。
>411
文字列じゃなくシンボルを使った理由を聞かれているものと勘違いしました。
>412
なるほどやっと分かりました。
というか、探したらちゃんと書いてあった・・・orz
URLリンク(www.ruby-lang.org)
414:デフォルトの名無しさん
08/09/01 23:22:22
>>413
rubyのhtml help入れれ
415:デフォルトの名無しさん
08/09/02 03:07:58
パイトンはやったことないからわからんなぁ。
416:デフォルトの名無しさん
08/09/02 17:09:52
Loggerでログファイルを毎日Rotateさせようと思ったんだけど
>> require "logger"
=> true
>> log = Logger.new("foo.log", 'dairy')
=> #<Logger:0x33fe50 ...以下略>
>> log.info "foo"
=> true
>> log.info "foo"
Logger::ShiftingError: Shifting failed. 'foo.log.20080902' already exists.
>> log.info "foo"
Logger::ShiftingError: Shifting failed. 'foo.log.20080902' already exists.
ログを出力しようとするたびに ShiftingError が出るんだけどこれって何の冗談?
うちの環境は↓
$ ruby -v
ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0]
417:デフォルトの名無しさん
08/09/02 17:11:21
infoってメソッド名がおかしいんだよ
writeに改名しろ
418:416
08/09/02 17:17:46
logger.rbを見たら 'dairy' じゃなくて 'daily' だった.あー恥ずかしい.
しかし引数間違っててもスルーって不親切だよなあ
419:デフォルトの名無しさん
08/09/02 17:21:31
ruby厨きめえwwwwww
これからはpythonの時代だろks
うぇwっうぇwwwww
420:デフォルトの名無しさん
08/09/02 17:33:45
Rubyだけ使ってるとでも思ってるのかね
421:デフォルトの名無しさん
08/09/02 17:34:42
煽っているようでちゃんとsageているところに
育ちの良さがにじみ出てしまっているな
422:デフォルトの名無しさん
08/09/02 17:37:31
>>420
そうじゃないと都合悪すぎるだろ
やろうと思えば複数言語の比較検討ができるとか断じてあってはならない
423:デフォルトの名無しさん
08/09/02 17:41:19
釣れますか?
424:デフォルトの名無しさん
08/09/02 17:47:22
結局rubyなんてwebProgでしかないし、pythonのほうが将来がある
425:デフォルトの名無しさん
08/09/02 18:27:19
ルビみたいにメインストリームの横に張り付いているちっぽけな貧乳は今後成長する可能性も2.3%くらいあるが、
醜く大きくなったおっぱいそんは後は垂れるだけ。
426:デフォルトの名無しさん
08/09/02 18:43:07
だっておwwwwww
427:デフォルトの名無しさん
08/09/02 18:57:20
どうでもいいけど最近貧乳の良さが分かってきた
428:デフォルトの名無しさん
08/09/02 20:16:15
俺は最初から貧乳が好き
429:デフォルトの名無しさん
08/09/02 20:36:26
もともと巨乳好きだが最近貧乳にも興味あり
430:デフォルトの名無しさん
08/09/02 21:07:59
何つうか、適材適所を知らない奴はPythonあたりでもダメなんだろうな。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5494日前に更新/211 KB
担当:undef