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


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

Rubyについて Part 36



1 名前:デフォルトの名無しさん [2009/06/28(日) 16:29:28 ]
オブジェクト指向スクリプト言語Rubyについて扱うスレッドです。
前スレに変なのが沸いて流れてしまいましたが、まったりと行きましょう。

Ruby Home Page
www.ruby-lang.org/ja/

= 前スレ
Rubyについて Part 35
pc12.2ch.net/test/read.cgi/tech/1238194350/

過去スレ・関連スレは >>2-

151 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 00:18:58 ]
javaはクラスやメソッドが長いって馬鹿にするやつが多いけど
あれはeclipseで補完するもんなのにわかってないおん

152 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 00:32:54 ]
補完機能つきの重量級IDEを使わないと仕事にならないということですね、分かります

153 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 00:42:23 ]
しかしIDEでの補完を使えば、LL言語よりも生産性は上がる。
なにしろ、変数の型付けが厳格で、定義していない変数は使えないから、
単純なミスタイプなら、遅くともコンパイルする段階で防げる。
これはちょっとしたことのようでかなり大きい。

154 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 00:55:12 ]
>LL言語よりも生産性は上がる
問題の種類による。ウォーターフォールで仕様策をガッチリきめて
作り始めるならともかく、形を考えながらプロトタイプを
チャッチャと作ってすぐ練り直す問題(今はほとんどがこれ)だと
LL言語のほうがメリットが大きい。

鶏を裁くのに牛刀を使う必要はないってこと。


155 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 01:01:34 ]
LL言語て

156 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 01:04:36 ]
牛刀で鶏なんて表現知らなかった・・・
あまりに上手いこと言えてて誰かの名言か何かと思えば故事だったのか

157 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 01:11:20 ]
漏れが知ってるぐらいだから結構知られてる表現じゃないか

>>155
AST木ってのを見たことがある

158 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 01:47:56 ]
RAS症候群はわかりやすい意思疎通を行おうとする正常な人間の証だろ

そういうことを言い出すと、
DVDディスクとか、IT技術とか、LCDディスプレイとかBB弾とか
HIVウィルスとかBS放送とかもダメになる。そんな馬鹿なことはあるまい。


159 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 02:06:11 ]
>>158
ほう、現在のDVDが何の略かご存知とお見受けする
ぜひ御教えを請いたいものだ



160 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 02:27:42 ]
今のDVDはDVDの3文字を擁する規格だからな
まーどうでもいいっちゃどうでもいいが
あと「LL言語」は日本語としては普通
LLとだけ書かれてもよーわからんし、読むときもLの部分だけ訳して考えてなどおるまいて

プログラムとしてではなくプログラミング最中の静的言語のメリットは完全な補完ができることだろ
Rubyの補完なんて文脈なしで文字列としてしかできんからへぼいことこのうえない
まあそれでもけっこうなんとかなるこたなるんだが、Javaのようなものとは比べるべくもない

161 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 03:18:01 ]
「軽量言語」でええじゃろ

162 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 06:52:36 ]
普通にLLつってるな。
文脈でわかるもんだし。

163 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 07:14:23 ]
LLと呼び習わされる言語群、という程度の意味合いしか持たせてないからLL言語と言ってる
そんな引っかかるほど頻繁に使う言葉じゃないし

セミナとかで使いまくってるような人はまた違う感覚があるのだろう

164 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 11:05:35 ]
>>151
名前の長さの話なんか誰もしてないぞ。

165 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 11:14:11 ]
>>151ではないが名前の長さのことなんて言ってないと思うぞ

RubyでもIDEを使えばけっこう構文エラーチェックがされて楽だけどな

166 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 11:26:13 ]
Java の Eclipse に負けている Ruby の emacs/vi の機能ってなに?

167 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 11:39:09 ]
>>166
はやーい

168 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 11:57:41 ]
eclipse のほうが遅い

169 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 12:05:47 ]
Emacs や vim のほうがエディタとしての体をなしている、というあたりだな

べつに、Eclipce で完結してるならそれはそれでいいじゃんね
Emacs や vim を試して「○○機能がないからこれではプログラミングできない」と考えたなら使わなきゃいいんだしさ



170 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 12:37:02 ]
irbでのタブによるオートコンプリートやvimのオムニ補完が存在することから考えれば、
rubyをはじめとしたスクリプト系言語でもabbrev以上のレベルの補完機能は
普通に需要があると思うけどね

動的言語ゆえの実装の難しさから実装例が少ないだけの話を
「LLに補完は不要」といわんばかりの主張にすりかえちゃうのは
いわゆる酸っぱいブドウでしかないよねえ

171 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 12:46:58 ]
irbのは実行中のインスタンスバイナリが手元に存在してるからできる芸当だろ

あるクラスに対して略語展開以上の妥当なメソッド名や変数名候補を提供するには
「クラスの実際のパースとモジュール参照の解決だけを行うがインスタンス生成はしない」
ということをする必要があるが、それはつまり普通にスクリプトの実行だよな

172 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 12:56:21 ]
もっと言っちゃうと、
「区別のために関数名を長くして、
 使用時の利便性は環境による補完などのアシストで補う」
っていうアプローチって、静的言語によく使われている手法ではあるけど、
そもそもの元祖ってLISPのREPLだからむしろ動的言語側から
発生したアイデアなんだよねw

関数名を長くするか小さくするかなんて言語を利用する際の
考え方の違いでしかなくて、
動的か静的かなんて観点とは直交なんだけど、
歴史を知らない人って目先の相違点で近視眼的に敵味方を分けちゃうんだよねー。

173 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 12:58:41 ]
えー、

class C
eval("def hoge; end")
end

C.new.

この時点で hoge が候補に出てきて欲しいということ?

174 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 13:05:06 ]
>>173
それが出ないのはさすがに諦めていいんじゃないかと思う。

175 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 13:10:09 ]
じゃあ何が自動で出て欲しいのよ
require した完成済みのクラスやモジュールのメソッド?
作ってる最中のコンパイルエラーのクラスのメソッド?
今まさに書いてる引数に指定してもエラーを起こさない妥当なクラスが入ってる変数名?

176 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 13:10:54 ]
実際Netbeansは内蔵のjrubyで解析かけてるし、vimもrubyと連携してオムニ補完してるんだけどね。

実用上役に立つレベルにもっていくにあたって
エディタのコードハイライトみたいなお手軽な実装量で済まないのは確かだけど、
やれば出来るし、動く現物が今存在するわけだしねえ。

そもそも補完に完璧を目指す必要なんかなくて、
使用する際の8割でアシストが出来るなら5倍の効率化だし、
9割効くなら10倍の効率化になるわけだし。



177 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 13:17:59 ]
> require した完成済みのクラスやモジュールのメソッド?
これは ri あたりから引いてくるのが既にあるな
fastri が動作しなくなって久しいが

> 作ってる最中のコンパイルエラーのクラスのメソッド?
変な書き方してると補完試すたびにスクリプト片が中途半端に動作して
テストサーバに接続とかそういうことが起きそうで怖い
というか現在のバッファに書いてあるなら動的略語展開でなんとかならんか

> 今まさに書いてる引数に指定してもエラーを起こさない妥当なクラスが入ってる変数名?
これは無理だろ、型の情報がない

178 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 13:25:21 ]
>>177が最近の技術に疎いだけというオチがつく悪寒
vimの奴のソースでも見てみたらいいんじゃね?

179 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 13:29:02 ]
そのへんで楽したいなら無理せずにJavaやれよJava
静的言語は素晴らしいって実感するぞ



180 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 13:31:00 ]
Java をずっとやってきて、動的言語の素晴らしさを実感しているけど?
用途によるね。

181 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 13:35:09 ]
Rubyでメソッド引数の型をアノテーションか何かで註記する標準的な方法って
無いの?
いくら動的型だからって、或る程度想定してるクラスの範囲ってあるでしょ?

182 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 13:37:45 ]
>>181
マジでなんもないよ
必要なメソッドさえ動作すれば何でもいいから

マニュアル的に注釈をする方法は、マニュアルシステムによっては存在するけど、案の定全く流行ってない

183 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 13:41:53 ]
よくわからんけど、
Eclipse(Aptana Rad Rails)より Netbeans Ruby のほうが、
補完の候補が出てくるのが速い気がする。

184 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 13:43:59 ]
まあメソッド定義から与えられた引数がどう使われるか(どんなメッセージがsendされるか)
追跡して、引き数に指定できる変数を絞り込むぐらいなら出来る。

method_missing使ってどうこうしてるようなケースじゃ厳しいが。
まあ完璧である必要もないしな。

185 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 13:53:54 ]
>182
えーと、逆に言えば、メジャーなマニュアルシステムを選べば、
標準的とまでは言わないまでも、まぁまぁ一般的な型の註記法があるって感じ?
例えば?

186 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 13:55:27 ]
>>182
yard流行ってないよね
ttp://yard.soen.ca/getting_started
最初はきちんとクラスを書いていたものの「Rubyだとホントはどんなクラスでもいいんじゃね??」とか
気づいてしまった人が多いのではないかと推測

# 挨拶する
#
# @param [String] name 挨拶する対象
def hello(name)
 puts "hello, #{name}"
end

# 家にいるかどうかをチェック
#
# @return [true, false] 家にいるかどうかの真偽値
def at_home?
 # check
end

187 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 14:04:09 ]
>>186
yardoc の引数のはたくさん書かなきゃいけなくなるからめんどくさくなるんだよ
each で回せればなんでもいい場合は [#each] とも書けるが、必要なメソッドったって結構あるしなー

188 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 14:08:32 ]
マニュアル書くのめんどいメソッドは駄目メソッドという教育効果が

189 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 14:13:24 ]
>186
それはわざわざ書き方がめんどくさいのを選んでるせいかも?

ScalaかHaskell的なシグネチャが有れば十分じゃない?
その例で言えば、こんな感じ
hello : String => nil # Scala的書法
hello : {def to_s: String} => nil  # ScalaのStructual Typing的書法
hello :: String -> nil # Haskell的書法



190 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 16:01:31 ]
is_a? ではなく respond_to? で制限をかけることを思いついた
が、使うメソッド全列挙がめんどいのでやっぱり駄目だな

191 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 16:20:01 ]
respondで縛ると結局JavaのXXXableインターフェースみたいになっちゃうからね

指定が煩雑な割に完全に型が決定できるわけでもないから
JavaのうれしくないところとRubyのうれしくないところが悪魔合体したような有様に

192 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 16:30:29 ]
phpunit なら PHPDoc をある程度自動生成するのにね
yardoc を生成するのを作ったら

193 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 16:51:54 ]
いや、その、なんていうかだな、yard の @params のクラス名称の8割くらいの用途は、
実は引数の名称で用が済むんだよ

引数の名称に data とか e とか使いまくってるならまだしも、
普通は相当の意味のある引数名になってるだろ

 def hoge(str, params)

って書いてあったら、str はよっぽどでなけりゃ String だし、
params は意表をつく攻撃をする意図がなければたいてい Hash だろ
それ以上の情報は @params のクラス名称でもわからんわけだしな

194 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 17:02:31 ]
それゆえに真面目にyardを書いても大してうれしくないという話になり、
今のまんまでいいじゃん、でここまで来たのが現状だからなあ

195 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 17:12:54 ]
変数名に「str」ってハンガリアン記法の問題そのままだなw

196 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 17:18:59 ]
yardoc の一番よくないところは、必死でクラスを書いても現時点で特にメリットがないということ
このクラスを利用して補完がうまく動くぜーということも特になく、マニュアルの行が1個増えるだけ

マニュアルを読むときの話なのなら説明文やそれこそ引数名を直接読んでもらえれば
クラス名なんて不完全な情報だけどころか意図まで全部わかるわけだ

197 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 17:23:55 ]
>>195
title_string_or_empry_when_tag_contains_nothing_or_nil_when_tag_itself_doesnt_exist_called_by_HTMLParser_ParsedData_title とか
そういう一発で内容がわかるほうがいっすか

198 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 17:30:40 ]
>>196
まあrdocの代表的な実装が、メソッド名クリックとかで
該当部分のソースを見れるようになってるのが
その辺の現実を如実に示してるよね。

>>197
責務を分割しろとかパッケージ化して共通の修飾部を外せとか言われるんじゃね
つうかstrが文字列だとわかると嬉しいのかどうかってのがよしあしの分岐点だよな

199 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 17:39:45 ]
// i に 100 を代入する
i = 100;

のような「見ればわかることまでいちいち書かんでええ」系のツッコミの適用範囲が
Ruby ではえらい広いから
どこまでコメント書くべきなのか書かなくてもいいもんかちょっと迷う



200 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 18:02:25 ]
>>197
意味分からない。

ハンガリアン記法と同じ問題を抱えてると具体的に書いたのだが、
なんでそんなに見当違いのレスがくるんだ?

201 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 18:13:01 ]
CやJavaのような強く型付けされた言語と違って、引数の型情報のないLLでは
引数の名前に型名情報を加えたほうが使いやすい場合も多いだろう。
Smalltalkだと、aString, anEvent, aRectangle, xNumber, yNumberみたいに書いたもんだ。
この場合は、変数の役割よりも型名のほうが偉い。

202 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 18:58:07 ]
引数にstrをとるメソッドが文字列処理のヘルパークラスみたいに
strの内容が文字列でさえあれば問題なくなにがしか処理できるのなら
引数名はstrで必要にして充分だよな。

逆に引数の内容が何らかの意味のある文字列であって、
想定外の内容だったときにはエラーを返さなきゃいけないような処理なんであれば、
その「想定している何か」の情報を引数名に込めてやりたいところ。

203 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 18:59:23 ]
まああと Smalltalk の場合はクラス名の部分を選択してクラスの説明読んだり
クラスブラウザ立ち上げてブラウズしたりって意味もあるけどねって話はいいとして、
名前をつけるので迷いがちなら、ケント・ベック読んでおけばとりあえず指針は得られる。

www.amazon.co.jp/dp/4894717549

204 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 19:10:01 ]
ケントベック本というと、読んだ後に引数名を
aTarget
とかにしまくってしまうような偏見がある


205 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 21:12:14 ]
Smalltalk の場合は、引数の名前の他にキーワードセレクタも引数の使い方を表す情報として使用できる。
この使い方は、Rubyのメソッドが引数をハッシュでとる場合に近い。
ハッシュのキーに意味を持たせれば、値の名前は要らない。

206 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 01:10:26 ]
「その、まあ」なやつは前RAIDスレにいなかったか?今もいるかもしれんが

207 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 08:48:47 ]
ttp://github.com/tenderlove/mechanize/commit/fa8d725fabcabd2c1dbaf9e9c9700890fafba81f
うへえ、90KBのソースファイル全部から一番外側のモジュール定義を物理的に引っこ抜いて、
一番最後に空のモジュール作って再代入しよった
っていうかこんなんgithubでやるな、追随や衝突解決がめんどくさいから
どうせ「スペースがもったいない」「インデントが深いから」とかいうアホな理由だろこれ

module WWW
 class Mechanize
  def …
  class Page
   def …
  end
 end
end

       ↓

class Mechanize
 def …
 class Page
  def …
 end
end
module WWW; end
WWW::Mechanize = ::Mechanize

208 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 09:00:33 ]
「いっちゃん外側の纏め用モジュールの扱い」ってのは難儀なとこではある
ここにはメソッドも定数も定義されず、クラスをまとめるモジュール空間の提供としてのみ存在するもの

インデント深くなるから外に出しちゃえってのはそれはそれでいいんじゃないの
WWW::Mechanize と Mechanize の2つが存在することになるから WWW モジュール作った意味なさそうだけどさ

てんだらーが nokogiri 疲れでトチ狂ったのかと思ったら別の人の直接コミットなのね

209 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 09:11:47 ]
この場合は ::Mechanize でアクセスできなくすればいいんだろ
…方法思いつかんが
なんかある?



210 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 10:19:37 ]
これずううううううっと思ってたんだけどさ、オフィシャルページの HTML のタイトルさ、
「ダウンロード」とか「ニュース」とか単語になってるのなんとかなんね?
「Ruby ダウンロード」とか「ニュース - オブジェクト指向スクリプト言語Ruby」とか
他のサイトと区別できるタイトルつけようぜ

211 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 10:22:55 ]
Object.send(:remove_const, 'Mechanize') とか


212 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 10:51:30 ]
それは WWW::Mechanize ごとアクセスできなくなるんでは…

class Mechanize; end
module WWW; end
WWW::Mechanize = ::Mechanize
Object.__send__(:remove_const, 'Mechanize')
p Mechanize.new rescue "Mechanize.new.failed"
p WWW::Mechanize.new rescue "WWW::Mechanize.new.failed"

"Mechanize.new.failed"
#<Mechanize:0xb7cfaec4>

んぬう

213 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 11:08:50 ]
クラス名は単なる定数で、参照先がたまたまクラスオブジェクトだってことさ。


214 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 11:14:11 ]
>>210
チラシの裏に提案を書いてもどうにもならないことは自覚してる?

215 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 11:14:32 ]
class Hoge
end

と書いたとして、これがいつ class クラスのオブジェクトとして存在し始めるかというのは意識しにくいかもね

216 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 11:25:48 ]
__send__でprivate呼べなくなったんじゃなかったっけ

>>215
class 〜 endがself返せばirbとかでわかりやすいんだろうけど

ってこれも他のブロックのように最後の返値を返すのか
class Foo; end #=> nil
class Bar; self; end #=> Bar


217 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 11:59:30 ]
WWW::Mechanize = ::Mechanize

これさ、あたりまえだけど
WWW::Mechanize.name
の返値は
"Mechanize" のままなんだな。

素直に
module WWW; class Mechanize; end; end
した場合は
"WWW::Mechanize"


218 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 12:23:37 ]
Structといい、一応ファーストクラスオブジェクトなのに
そのへんの仕様で足引っ張ってる感じだw

219 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 12:45:52 ]
とりあえず、この変更にはユーザーデメリットしかないと思う
俺としてはMechanizeが下手打ってくれて有難いが



220 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 12:50:29 ]
うっさいよhttpclient

221 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 12:55:00 ]
今は Anemone かも
あれはASCII 文字使い以外には機能が不足しまくりで、基本機能揃えて実際の現実フォローを行うと
単に Mechanize になるだけなんじゃねともっぱらの評判

222 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 16:23:46 ]
>>214
それを「気にして」いるのは君だけだよ

223 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 16:36:05 ]
エスパー参上

224 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 18:22:16 ]
>>209
module WWW; end
class WWW::Mechanize
end


225 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 19:40:18 ]
>>220
HTTPのクライアントなんだけどさ、
@HTTP/HTTPSが使えて
AGET/POSTその他メソッドのレスポンスを
 サーバからクライアントへの全文の受信を待たずに
 ある程度の大きさの塊で順次受け取れて
BWindows(mswin32)で動く
ライブラリってなんかあるかな?

@、AまでならlibcurlのRubyバインディングのcurbがあるんだけど、
curbはドキュメントでLinux以外想定してないと明記されてるわ
mingwでgem installしてみたら案の定拡張ライブラリのコンパイルで
引っかかるわで、
今泣きながらDL経由でlibcurl叩こうとしてるんだけど。

226 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 19:50:15 ]
>>225
つまり net/http を使わないってことね

227 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 20:04:26 ]
>>226
うん。net/httpだとAが出来ないと思う。

意図としては、サーバ側から取得してくるリソースが
典型的なHTMLみたいに数KB〜数100KB程度のサイズの場合は
内容を全部取得してからまとめて処理してもいいんだけど、
動画みたいな数MB〜数100MB程度のサイズの場合は
頭から数10KBとか数100KB程度の大きさでいいから順次取得して
逐次処理したいんだ。


228 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 22:04:04 ]
>>227
>動画みたいな数MB〜数100MB程度のサイズの場合は
>頭から数10KBとか数100KB程度の大きさでいいから順次取得して
>逐次処理したいんだ。

動画じゃないけど、おなじようなことをしたいです。
これってRubyでやるときは、どんな設計にするのがいいの?

229 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 22:06:37 ]
不用意にnet/httpを使わない
サーバが対応してるなら、こっから100キロバイトぶんだけくれというHTTPヘッダを送りつけ続ける




230 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 22:13:31 ]
net/http は逐次処理させるの自体はできた気がする
ただ、どう小細工しても「取得完了時にメモリを数百MB占有」というのは回避できない

231 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 22:18:25 ]
そういえばopen-uriなんかでもコールバック設定できたよね
ダウンロード状況の進捗とか示すのに使うやつ
逐次処理だけできればいいのならそれで足りそうな気が

232 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 22:21:33 ]
>>227
230も言ってるけど、逐次処理できるよ
HTTP#getにブロックを渡せばいい
(HTTP.getではできないので注意)

233 名前:225,227 mailto:sage [2009/07/10(金) 22:24:01 ]
>>229
ご存じの通り、Rangeヘッダでの取得だとサーバ側がパーシャルで返してくれなかったときに寒いことに。
で、net/httpを一部いじったりしてレスポンスのボディをある程度逐次に取れるようにしても、
単純な実装だとkeepaliveとかpipelineとかが絡んできたときにcontent-lengthやらchunkやらの取り扱いで面倒なことに。

>>228
Linuxで動けばいいのならcurbのon_bodyがそのまんま。
あらかじめコールバックハンドラ用のprocを登録しておくと、
目的のURLにアクセスしてレスポンスのbodyをある程度受け取ったタイミングで
受け取ったデータを引数にしてprocを呼んでくれる。

eventmachine使うとクライアント的な動作についてもイベントドリブンな感じで
実装できるっぽいけど、一から作るのもな、という。
実際目的が同じかはともかくほぼ一から作ろうとしてる人もいるみたいだけど。
ttp://blog.masuidrive.jp/index.php/2008/08/07/how-to-write-spider-using-eventmachine/


234 名前:225,227 mailto:sage [2009/07/10(金) 22:30:51 ]
>>232
おお。もっかい確認してみます。

結局作りたいモノって大した物じゃなくて、
手元にあるmouseHoleもどきのHTTPプロキシに
ttp://www.artonx.org/diary/20090301.html
みたいな仕掛けを仕込みたいってだけなんですが。

235 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 21:11:56 ]
いよいよAndroidの国内端末(HT-03A)出たね
これでRuby動かしてみた人居る?

236 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 10:45:37 ]
ruby/tkのビルドで自動でライブラリさがしてくれるようになったね>nagaiさん乙でした
でも、makeにすっごく時間がかかるようにもなってしまった。

237 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 04:57:23 ]
p Time.at(100).strftime("%H:%M:%S") => "01:01:40"

これで "00:01:40"を返して欲しいんですが
時間は常に +1 されて帰ってくるんでしょうか?

238 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 05:33:56 ]
TZ=UTC0 ruby -e'p Time.at(100).strftime("%H:%M:%S")'
"00:01:40"

時差+1ってことはフランスかどっかにお住まいですか。Merci

239 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 05:43:31 ]
>>238
ああっ 標準時刻とのずれか!
9時間なら気づけたのに!

場所はドイツからです。 Danke schön!!



240 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 20:43:15 ]
Ruby 会議、初日行ってきたお
通訳しているレオさん(?) かっこよすぎる

声もイカす

・自分はずーっと大講堂だったが、高井さんのエンタープライズRailsがおもしろかった
 ヨドバシに並ぶようになったらポイントで買おう
・外人さんがけっこう見かけた

241 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 22:04:15 ]
>>240
オレはずっと1Fだったが、ささだ研がブラック研究室ということが分かったよかったw


242 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 23:09:01 ]
懇親会でアーロンがおよげたいやきくん歌ってた。

243 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 23:38:33 ]
わざわざ日本に着てまで喋るだけあるな……

244 名前:240 mailto:sage [2009/07/18(土) 01:32:36 ]
終わったあと、新宿でエヴァ破をひとりで見てから帰ってきた。

>>241
笹田さんって Ruby 1.9 の YARV を作っている方だよね?
そのセッションも聞きたかったのだが、Rails 3 のほうを聞いていたので聞けなかった。
ブラックだったのか.....

明日も早起きしないと。

245 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 09:24:17 ]
>>242
ひげの山男さんマジぱねえっす(日本に馴染んでる的な意味で)

246 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 14:04:03 ]
>>244
昨日午前中見てきた

247 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 14:04:50 ]
> ブラックだったのか.....
あれはまぁ自虐ネタだから

248 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 00:36:45 ]
レオさんは俺の嫁

今日の1Fの最後のコマ(GC)にいたんだけど、
Ruby 本体のメンテナ(コミッタ)は、ほぼ日本人ばかりなの?
外人さんもいるの?

あるいは Linux Kernel みたいにパッチは世界中から受け付けるけど、
コミッタは日本人だけなのかな?

249 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 01:38:29 ]
>>248
ttp://yugui.jp/articles/833

日本人が多いけど、外人さんもいる様子
有名な人だと、Dave ThomasとかDavid Flanaganとか



250 名前:デフォルトの名無しさん [2009/07/19(日) 16:35:21 ]
実際に誰が動いているかとかはコミットログやChangeLogみるとか、
「Ruby のコミット数ランキング」を見るとか。
dame.dyndns.org/misc/ruby-commit-ranking/

まぁ、Rubyってあんまりパッチ来ないかなぁ、受け付けてはいるんだけどね。
Ruby内部のコードを読んで、いろいろつっこみをしてくる外人さんって、
Ruby本を書いているから細かいところまで見ているってイメージがある。
あと、パッチが外から来づらい理由として、継続して送ってくる人には
コミット権をあげちゃうからってのもあるかな。

251 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 23:01:55 ]
ブラック研究室に入ったんだがどうやら俺は限界らしい
www.ci.i.u-tokyo.ac.jp/~sasada/



映画化決定






[ 続きを読む ] / [ 携帯版 ]

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

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