1read 100read
2012年3月プログラム23: Ruby 初心者スレッド Part 48 (708)
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▼
iPhone iPad iOSプログラミング Part1 (243)
【最速】google guice DI Framework【シンプル】 (407)
C++11/C++0x 15 (971)
VB6でLinuxを作る方法を教えてください!! (203)
日下部陽一著 作ってわかるCプログラミング(第6版) (524)
OpenWatcom C++ (709)
Ruby 初心者スレッド Part 48
1 :12/02/08 プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお 前スレ Ruby 初心者スレッド Part 47 http://toro.2ch.net/test/read.cgi/tech/1322819329/ るりまサーチ (リファレンス検索) http://rurema.clear-code.com/ Rubyist Magazine - るびま http://jp.rubyist.net/magazine/ 逆引きRuby http://www.namaraii.com/rubytips/
2 :12/02/08 【RoR】Ruby on Rails Part13 http://kohada.2ch.net/test/read.cgi/php/1320393984/ 【ActiveScript】RubyをWindowsで使うスレ【GUI】 http://hibari.2ch.net/test/read.cgi/tech/1155031689/ 書籍:ほぼ公式 「たのしいRuby 第3版 Rubyではじめる気軽なプログラミング」 (プログラミング自体が初めてでない人向け) http://www.amazon.co.jp/dp/4797357401/ 「初めてのRuby」 (同上) http://www.amazon.co.jp/dp/4873113679/ 書籍:紙のマニュアルに相当 「Rubyレシピブック 第3版 303の技」((脱)初心者向け基礎テクニック集、1.9対応) http://www.amazon.co.jp/dp/4797359986/ 「プログラミングRuby 第2版 言語編」(初心者向け参考書) http://www.amazon.co.jp/dp/4274066428/ 現在、1.8 系列の最新である Ruby 1.8.7 と 1.9 系列の最新である Ruby 1.9.2 の2系統が存在 肝心な部分がわりと違い、プログラムはそのままでは動作せず、予備知識も別個。両対応させるには相応の追加記述が必要 1.9.2 用の教科書があるなら 1.9.2 から始めても構わないが、1.8 用のスクリプトやライブラリは 1.9.2 では動作しないので注意 Windows用Rubyは、Ruby以外のものもあらかた入っているActiveScriptRubyと http://www.artonx.org/data/asr/ RubyだけインストールされるRubyInstallerの2種類存在 http://rubyinstaller.org/downloads/ 何が必要なのかわからない人はとりあえずActiveScriptRuby使っと毛 chm(HTMLヘルプ)式のダウンロードできるマニュアルが便利 http://www.ruby-lang.org/ja/documentation/
3 :12/02/08 最新の安定版であるruby 1.9.3-p0が各ミラーサイトから入手できます。 [ tar.bz2 | tar.gz | zip ] ダウンロード http://www.ruby-lang.org/ja/downloads/
4 :12/02/08 ・ いつものエディタとターミナルという普段着でお越し下さい ・ エディタ初めてならRubyスクリプトをを着色してくれる(できればオートインデントの)エディタ好きなの選べ ・ いわゆるIDEはRubyの学習に際しては恐ろしくコスパが悪いのでRubyのためだけに新規導入するのはお勧めしない Q. XXX を使ってるんですが Ruby も覚えたほうがいいんでしょうか? A. 好きにしろ
5 :12/02/08 ,―ヽ_(((((_、― ,/ ノ ヽ ~\ / ノ IPA ヽ ~\ / ノ ヽ、 `ヽ | ノ / ̄\ / ̄~ヽ ヽ i | ノ | ノ \ | <●> <●> ( ) \ | | | i / | / ヽ レ i (●_●) / i、 ,-――-、 ・ / i、 <(EEEEE)> ∵/ IPA Rubyスレにようこそ i、 \ ./ / \ ーー ,ノ ,,.....イ.ヽヽ、ー-―一ノ゙-、. : | '; \_____ ノ.| ヽ i | \/゙(__)\,| i |
6 :12/02/08 >>1 乙 ようやく立ったなw
7 :12/02/08 ファイルのエンコードがUTF-8のとき前提で Shift_JISとEUC-JPをUTF-8に変換する定式コードを教えてください ググってもいろいろあるみたいでどれが定番なのか分かりません
8 :12/02/08 Ruby1.9.3です
9 :12/02/08 変換できない文字があったときにどうなって欲しいのかで書き方が違うのだな あと1.8.7でも動作する書き方とか
10 :12/02/08 1.8.7は切り捨てますのでruby1.9.3で動けば問題ないです 変換できない文字が出てもエラーにならなければ問題ありません
11 :12/02/08 require 'kconv' 'にほんご'.toutf8
12 :12/02/08 >>11 この方法で今後は統一します
13 :12/02/08 勉強用に貯めてきたサンプルを読み返したら ファイルの先頭にこう書いてありました #!ruby -Ks これはなんですか?
14 :12/02/09 http://www.rubylife.jp/ini/japan/
15 :12/02/09 理解しました
16 :12/02/09 # -*- encoding: utf-8 -*- と # coding: utf-8 の書き方の違いは何ですか?どっちも同じですか?
17 :12/02/09 Rubyからは「最初のほうに"coding: なんとか"という文字列が書いてあるコメント行がある」という点でどっちも同じ 上で書くとEmacsがUTF-8で書かれたファイルだと解釈する
18 :12/02/10 意地でも>>16 のどちらも書きたくない場合 コマンドラインオプションとかで同等の効果をもたせる方法ないんですか
19 :12/02/10 コマンドラインからコードを書きたいのですがどうやるのでしょうか? 例えば p 1+1をコマンドラインに書いて実行したいのです わざわざファイルに書いてから実行するほどでもないような計算するのが目的です 環境はWindows Ruby1.9.3です
20 :12/02/10 irb使え
21 :12/02/10 irbで出来ました! rubyって打ってもそういうモードにならなくて「ruby コマンドライン」でググってもでてこなかったのであきらめるところでした
22 :12/02/10 ちなみにruby -e 'p 1+1'でもいける
23 :12/02/10 >>22 のやり方は、ワンライナー(one liner)と呼ばれているね
24 :12/02/11 str.gsub!(/aa(\d+?)aa/, "bb#{$1}bb") こういうことをやりたいんですけど、どうやったらうまくいきますか?
25 :12/02/11 すみませんこうですね。。 str.gsub!(/aa(\d+?)aa/, 'bb\1bb')
26 :12/02/12 s='foo.bar' t='foo.baz' で先頭から共通する文字列'foo.ba'を取得するうまい方法って無いですか。 ループで一文字ずつスキャンするしかないですかね。
27 :12/02/12 windowsでsystem('dir')の返り値を変数に入れる方法を伝授してください
28 :12/02/12 >>26 結局はループしてるんだけど、文字列2個程度なら >> t.chars.with_index.take_while{|c,i| c == s[i]}.map(&:first).join => "foo.ba" とか >> t.chars.zip(s.chars).take_while {|e| e[0] == e[1]}.map(&:first).join => "foo.ba" とか 本格的にやるならtrie木について調べるといいと思う。
29 :12/02/12 メインphp使いですけどrubyってコード記述量少なくていいですね
30 :12/02/12 まつもとゆきひろ「public static void mainなど、コンピュータに伝える約束事が多くて、 やりたいことが頭の中から逃げてしまう。簡潔さは力なのです(中略) “実行可能疑似言語”と呼ばれる何言語でもないコードが示されることが多い。 それはPascalもどきとか、Algolもどきで書いてある。 もどきといっても、アルゴリズムをちゃんと記述できている。 だったら、それを理解できる言語を作ればいいじゃん、ということで、ある意味、それがRubyの目標です」 「ソフトウェアは工業製品ではない」、Rubyのまつもと氏が講演 − @IT http://www.atmarkit.co.jp/news/200904/10/matz.html 2009/04/10 メタ言語のことで、一般にBNFやBN記法と略される バッカス・ナウア記法 − Wikipedia
31 :12/02/12 CGIの動作をWindowsのコマンドラインからテストするために簡単なスクリプトを書いています。 ・呼び出し ruby -w foo.cgi param1=hoge method=GET ・パラメータ受け取り(GETリクエストをシュミレーション)※一部略 ENV['QUERY_STRING'] = ARGV.join('&') あとはcgi.rb任せです。 ですがcgi.rbがSTDINからパラメータを受け取る場合(POST) どうやってセットしたらいいのでしょうか。
32 :12/02/12 cmd.exeってheredocはないんだっけか。 標準入力に食わせたいだけなら type post_data.txt | ruby -w foo.cgi ... でいいんじゃないの? ※そういえば、CGI.rb を使っているスクリプトを直接端末から起動すると パラメータを受け取るモードになる機能があったような。
33 :12/02/12 そうなんだけど標準入力とクエリ文字列両方同時に扱うにはひと手間かかったような % ruby -rcgi -e'cgi=CGI.new;p cgi.params' (offline mode: enter name=value pairs on standard input) a=1&b=2 {"a"=>["1"], "b"=>["2"]} % echo x=3 | ruby -rcgi -e'cgi=CGI.new;p cgi.params' {"x"=>["3"]}
34 :12/02/12 utf-8で保存したrbファイルの先頭に #!ruby -Ks って書くのと $stdout.set_encoding(Encoding::Windows_31J, Encoding::UTF_8) って書くのどちらがよいですか? Windows ruby1.9.3です
35 :12/02/12 >>32-33 大変参考になりました。cgi.rbにあらかじめそのような機能がついていたとはorz CGIスクリプトは今どきのRESTfulな感じで、リクエストメソッドを意識した作りでしたため cgi.rbのオフラインモードではENV['REQUEST_METHOD']に値が入らず、うまくいきませんでした。 作成中のコマンドライン用追加スクリプトの段階で(cgiインスタンス作成前に) ENV['REQUEST_METHOD']に値を入れると、パラメータが無効になってしまうようでした。 そこで以下のように起動し(-dオプションを追加) ruby -w -d -rcgi foo.cgi (offline mode: enter name=value pairs on standard input) param1=hoge&method=post cgiインスタンス作成後に以下のコードを入れておくことにしました ENV['REQUEST_METHOD'] ||= (@cgi['method'] ? @cgi['method'].upcase : 'GET') if $DEBUG ぎこちない感じではありますが、ともあれこれでテストを進められそうです。 ありがとうございましたm(_ _)m
36 :12/02/13 Class.new で作ったクラスオブジェクトに名前を付ける方法ってどうするの? c = Class.new p c.name #=> nil c.name = 'Foo' はだめだった
37 :12/02/13 >>36 http://doc.ruby-lang.org/ja/1.9.3/class/Module.html のModule.newを見れば分かると思うよ
38 :12/02/13 >>37 ありがとうございます。 ということは、動的に名前をつけたい場合はevalするしかない? c = Class.new name = "Foo" eval "#{name}" = c"
39 :12/02/13 Module#const_set辺りでどうにかなんないかなー検証してないけど
40 :12/02/13 const_setでおk
41 :12/02/14 @で始まる変数が何か分かんないので質問します class Cls def self.foo @var = 'varrrrr' ### この@varは何変数なんでしょう?### end def bar @var # nil @@var # NameError self.class.var # NoMethod Cls.var # NoMethod Cls.instance_variable_get(:@var) # == OK! == Cls.class_variable_get(:@@var) # NameError end def self.baz @var # OK end end @varはClsクラスオブジェクトのインスタンス変数か、あるいはClsの特異クラスの インスタンス変数なのでしょうか?だとして、それはClsのインスタンスから見ると 一体何なんでしょう
42 :12/02/14 たとえばこんなSingletonモジュールがあったとして module Singleton def self.included(cls) cls.instance_eval do def get_instance @instance ||= new end private_class_method :new end end end これはオブジェクトの関連からはどう説明すればいいんでしょうか インスタンスをクラスオブジェクトに突っ込んでいるように見えるのですが… evernoteに生のタコを突っ込んで保存するようなものではないのでしょうか
43 :12/02/14 @が1個ついてるんだから、インスタンス変数 で、 def self.メソッド名 の中で定義されてるから、 そのクラスを表す、Ruby 組み込みクラスである Class クラスのオブジェクトに属する(=Classクラスのインスタンスに属する)インスタンス変数 class C; end p C.class #=> Class ← これ 最近はこのインスタンス変数がしょっちゅう使われてて、呼び名がないと説明に困るというので、 「クラスCのクラスインスタンス変数」という呼び方が他の言語から借りて使われてる ただのインスタンス変数なので、クラスのオブジェクト部分でいわゆるアクセサメソッドを自作するか、 class C << self attr_reader :var end クラスのオブジェクトに対して instance_variable_get/set しないと利用できない で2、クラスメソッド(=クラスオブジェクトに属するインスタンスメソッド)の定義を def self.hoge のようにドットつきでしてる人であっても、 クラスインスタンス変数のアクセサを作るときは class クラス名 << self インスタンスメソッドな書き方 end という再オープン記述を使うことが多い
44 :12/02/14 >>41-42 >@varはClsクラスオブジェクトのインスタンス変数 です >インスタンスをクラスオブジェクトに突っ込んで ます その理解であってる 呼び方は「クラスインスタンス変数」(smalltalk起源?) 普通にインスタンス変数だからインスタンス(Cls自身)以外からは見えないので Clsのインスタンスがどうとか気にする必要は無い class Cls @var = 'クラスインスタンス変数' def initialize ; @var = 'インスタンス変数' ; end def var ; @var ; end def self.var ; @var ; end end puts "Cls.new.var は #{Cls.new.var} です" puts "Cls.var は #{Cls.var} です"
45 :12/02/14 Emacsなんかでは「UTF-8として有効な文字」はそのまま、 「UTF-8に含まれてなさそうなコントロールコードや不完全なバイナリの連なり」は^@みたいな表示で着色されて表示されます これと似たような処理(をするための振り分け)はどうしたらいいもんでしょう コントロールコードっぽい配列と、UTF-8っぽい配列の2つに分けたいです
46 :12/02/14 そういうのは簡単にしようと思ってコントロールコードでsplitとかするとたいてい失敗するよ UTF-8にマッチする正規表現でscanとかsplitして、マッチしないものを「コントロールコードその他」にするとうまくいく
47 :12/02/14 HTTPのライブラリの定番てなんですか? いろいろ試してみたいのですがnet/httpとnokogiri以外にありますか?
48 :12/02/14 require 'open-uri'
49 :12/02/14 HTTP のライブラリだってのに Nokogiri 入ってるのってなんでじゃらほ Web から HTML やファイルとかを取得したいのなら、標準の Net::HTTP HTML から正規表現じゃなく HTML 構造を頼りにテキストデータを取り出したいのなら、gem の Nokogiri 上記2つが融合したもので、リンクをクリックしたりしてページアクセスもできるのが、gem の Mechanize libcurl と呼ばれる巷では定番の外部ライブラリを利用することでネットアクセスを実現してるのが、gem の curb 好きなの使え
50 :12/02/14 >>48-49 ありがとうございます シンプルにやりたいときはopen-uriかNet::HTTP + Nokogiri 便利屋になるならMechanize 並列でアクセスさせたいときはcurb を使います とりあえずopen-uriが一番シンプルだったのでここからcurbまでサンプル作って覚えてみます
51 :12/02/14 読み込んだライブラリのクラス名を取得方法を伝授してください 例えばrequire "date"だったらDateとDateTimeの2つのクラス名が知りたいです
52 :12/02/14 それは無理 $LOAD_PATHからdate.soかdate.rbを探してクラス定義を正規表現で探せばできるけど、それほど完全でもない というか、それが必要になることはないはず 衝突の回避はユーザーに任せろ 完全初心者が使ってることを前提にするのはやめよう
53 :12/02/14 まじすか諦めます
54 :12/02/14 たびたびすいません今質問したものです 質問1 マニュアルの見方を教えてください http://doc.ruby-lang.org/ja/1.9.3/library/index.html このページのライブラリ名は全てrequire "〜"にそのまま書いていいようになってますか? 質問2 クラス名からメソッド一覧を取得したいので p Dir.methodsって書いて表示できたんですが 例えばhttp://doc.ruby-lang.org/ja/1.9.3/class/Date.html の 特異メソッドとインスタンスメソッドを別々に取得して表示させる方法はありませんか?
55 :12/02/14 マニュアル読め とループ回答 >>54 ひとつめYES スラッシュ「/」や大文字もそのまま書く irb> require 'english' LoadError: no such file to load -- english irb> require 'English' irb> ふたつめ ttp://doc.ruby-lang.org/ja/1.9.3/method/Object/i/singleton_methods.html ttp://doc.ruby-lang.org/ja/1.9.3/method/Module/i/instance_methods.html このマニュアル、一覧ページにアンカーがないから使いにくいなあ irb> require 'date' irb> p Date.singleton_methods(false) [:_strptime, :_parse, :_iso8601, :_rfc3339, :_xmlschema, :_rfc2822, :_rfc822, :_httpdate, :_jisx0301, :julian_leap?, :gregorian_leap?, :leap?, :new!, :valid_jd?, :valid_ordinal?, :valid_civil?, ... irb> p Date.instance_methods(false) [:strftime, :asctime, :ctime, :iso8601, :rfc3339, :xmlschema, :rfc2822, :rfc822, :httpdate, :jisx0301, :ajd, :amjd, :jd, :day_fraction, :mjd, :ld, :year, :yday, :mon, :mday, :month, :day, ...
56 :12/02/14 >>43 ,44 ありがとうございます ぐぐりやすくなって捗りました
57 :12/02/14 >>51 require前後でObject.constants比べてみたりClass#inherited書き換えてみるとか? 全然完全じゃないけど class Class def inherited(sub) puts "#{sub} < #{self}" end end before = Object.constants require 'date' p Object.constants - before Dateの方は元々定義されてるしどちらの方法でも検出できないなぁ Module#method_addedとかも見ておけば一応いけそう?
58 :12/02/14 やっぱ時代は1.9.3だよな 1.8.7厨は労外w
59 :12/02/14 大江戸RubyKaigiでhttpライブラリを比較する発表があったっけ。
60 :12/02/14 end書きたくないからほとんど{}で囲ってるんだけどそうするとifのendが目立ってしょうがないお
61 :12/02/14 デフォルトを end にして、 File.open とか重要なブロックだけ {}にして目立たせる流派はあったと思うが、逆はちょっと無理があるんじゃないの
62 :12/02/14 >>61 やっぱそうか・・・クラス定義とか関数定義とかみんなendだもんな rubyやる人はブロックの変数を|で囲うのも抵抗なかったの?めっちゃ違和感あるんだけど
63 :12/02/14 a = [1,2, 3, 4, 5] a.each do |b| puts b*b end
64 :12/02/14 smalltalkerだったので||自体には違和感なかったな。
65 :12/02/14 >>63 チョコのお返しにいくらかかるか計算してるんですね。わかります
66 :12/02/14 >>62 Ruby文法をしっかり読んだわけじゃないが、 | が無いとブロックの外側を参照している変数と区別がつかなくなるんだと思う かといって、他の言語で何か素晴らしい表記法があるかというと 微妙な所で。引数に\付けたり()でくくったり、いろいろ書き方はあるけど | より明らかに良いと言えるほどでも……
67 :12/02/14 バイナリファイルのデータを読みだして、 イテレータで値を出力しようと思ったのですが、 データが化けてしまいます。 以下の@なら問題なし、Aだと化けます。 どうしてでしょう? f = File.Open("hoge.dat", "rb") data_array = f.Read(16) # @ 問題なし for i in 0..15 print data_array[i] end # A文字が化ける data_array.each{ |num| print num }
68 :12/02/14 >>67 X data_array.each{ |num| O data_array.each_char{ |num|
69 :12/02/15 >>68 できましたー。ありがとーです。
70 :12/02/15 >>55 >>57 理解しました
71 :12/02/16 >>67 Ruby1.8だと思いますが data_array[i] は、文字列のバイト位置の1バイトの数値表現 と each メソッドの ブロック引数は、文字列を改行直後で分割した一行分の文字列 と、得られるものが違います each_charは、文字列を文字単位で分割した一文字 と、これまた違うのですが 理解の方は大丈夫でしょうか? さらに、each_charは$KCODEの影響を受けてそのサイズが変わりますよ お望みの機能はeach_byteだと思われますが
72 :12/02/16 Ruby 1.9以降では data_array[i] のように文字列を添え字アクセスしたものは バイト位置の数値ではなく、文字単位の位置での一文字が得られます また、文字列のeachメソッドはなくなりました 1.8と1.9の非互換な部分です 文字列のeachの代わりには each_char、each_line、each_byte、each_codepointなどを使います
73 :12/02/16 r_‐、_ _, -ー::L._.」‐-、` 、 /‐ '´ ̄ ̄ ̄`¨ヽ:::丶ヽ / , , \:::ヽヽ ヘ r./ /|/', /l/ | i::::|| へ L| / ',/ l/| !:厶l | /∨ ○ ○ / l下、_〕_. | | / / i !__ト、 | ! ┌┐ 'イ / l 丶、._  ̄ ___/ / l l/!  ̄r::t水ァ::j/ ', /r――――i::::K ト、 ヽ ムf」 「ヽ::i、 |\! \ | __j」 2 ヘェ ヽ、|」_ヽ_ ヽ r┐≧:|_____!::::::::::::::::/ l___!L.-i_i⌒!-」、|\::::::::ヽ _ └‐ '´  ̄ ̄
74 :12/02/16 RubyのスレッドモデルはGILとのことですが、 http://ja.wikipedia.org/wiki/%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%97%E3%83%AA%E3%82%BF%E3%83%AD%E3%83%83%E3%82%AF このwikiの説明を見ると、 同時に実行できるスレッドは常に一つだけ、と読み取れます。 つまり一つのプロセスの中ではスレッドが平行して実行されないと。。これって何のためのスレッドなんですか?
75 :12/02/16 ネットからデータを読みこんだりしているときに 他の作業ができるでしょ
76 :12/02/16 マルチスレッドの目的は2つあってひとつはマルチCPU、マルチコアを活用してパフォーマンスを上げること。 もう一つは2つ以上の処理をそれぞれ(見た目上)独立して動かすことで 一方が他方をブロックするのを避けること。 例えばGUIを動かしつつ裏でネットワークで通信処理するとかね。 Rubyのマルチスレッドは後者を狙ったもの。
77 :12/02/17 処理で起こることが全部「自前のCPUをごりごりして作成するもの」な場合、Rubyのスレッドのメリットはほぼ無い スレッドのメリットが生きるのは「外部に問い合わせると1秒かかる」「その間に返答以外のデータを処理したい」みたいなとき 問い合わせを別スレッドにして、返答が来るまで別なことをしていればいい ただし、その返答データが必要な処理いっこしか持ってないような場合は、 返答待ちしかやることがない状態になってしまうのでこれまたスレッドのメリットが無い >>76 の前者のマルチプロセッシングなスレッドには未対応
78 :12/02/17 ふーむ、なるほど。。 単にマルチスレッドと言っても、 物理的に並列で実行できるスレッドモデルもあるし Rubyのように実際は並列じゃないけど、待ち時間などを有効利用するだけのスレッドモデルもあると。 後者はOSのプロセス切り替えと同じように考えればいいのかな? そうするとIO待ちのように明らかに無駄が出来る処理のみをスレッド化して、 単純に速度を上げるために並列化しまくる、みたいなことは意味をなさないということですかね。 難しいけど何となく分かりました。ありがとうございます。
79 :12/02/17 並列(pararell)処理と並行(concurrent)処理の違いだね 前者は物理的な(=ハードウェアとしての)マルチプロセッサ(or コア)が並ぶ処理を指す 後者は前者を含む概念であり、論理的な(=ソフトウェアとしての)並んで行う処理を指す シングルプロセッサでも並行処理は可能だけど、それを並列処理とは呼ばない 多くの資料ではこれらの単語を正確に使い分けているけど、 中にはごっちゃにしているものもあるので、注意が必要
80 :12/02/17 あと並列処理/並行処理と非同期処理(asyncronous)もごっちゃにしやすい概念 前者は物理的/論理的な処理の並びを意味するけど、 後者は並行処理を実現する手段(実装)の一つにすぎない たとえばGUIは非同期処理の典型的な例だけど、一般にこれを並行処理とは呼ばない ただし、BeOSのようにスレッドを前提にしたGUI実装もあるけど、これは例外 もう一つの例として、Ruby標準ライブラリのXMLRPC4Rには、 スレッドを使って複数のリクエストを並行に実行する call_async というメソッドがある これは厳密には誤った命名であり、正しくは call_concorrent あるいは (ネットワーク上での分散型並列処理という意味で)call_pararell と命名すべきだった もう今はAJAX(Ayncronous JavaScript and XML)という技法が普及したから、 同じ間違いが繰り返される可能性は低いだろう まあ、細かい事はどーでもいーんだよ、という話でもある
81 :12/02/17 詳しい方がいるので便乗してお聞きしたいのですが、 Railsなどで使われるWebrickでは、一つのリクエストを逐次実行することしか出来ないですよね。 例えばあるアクション内でsleepを実行すると、その後のリクエストは全て待たされる。 Railsで各々のリクエストはスレッドとなって処理されるからsleepでブロックされるはずは無いと思うのですが、何故こんな挙動になるんでしょうか。
82 :12/02/17 【激白】西田昌司「民主党は振り込め詐欺と同じだ!」 http://www.nicovideo.jp/watch/sm16994357 西田昌司「お人好しを食い物にする民主党」 http://www.nicovideo.jp/watch/sm16994346 上野周辺 民主党本部前座り込み117日目 2/16 http://www.nicovideo.jp/watch/sm16993687 【桜ものがたり】#18 長谷川三千子、明治憲法と日本の国柄[桜H24/2/16] http://www.nicovideo.jp/watch/so16987847 【お知らせ】ことばで聞く古事記、週末の講演会など[桜H24/2/16] http://www.nicovideo.jp/watch/so16987840 【今週の御皇室】皇室の在り方、陛下の御言葉を振り返って 弐[桜H24/2/16] http://www.nicovideo.jp/watch/so16987838 【西村眞悟】今の国政を撃つ![桜H24/2/16] http://www.nicovideo.jp/watch/so16987834 【水島総】山梨での講演、神道と頑張れ日本[桜H24/2/16] http://www.nicovideo.jp/watch/so16987805 【エネルギー安保】東電の国有化プロセスと人材流出の危機[桜H24/2/16] http://www.nicovideo.jp/watch/so16987804 【三宅教雄】我が国領海警備の実情と課題[桜H24/2/15] http://www.nicovideo.jp/watch/so16987357
83 :12/02/17 >>81 Rubyの組み込みメソッドsleepは発行元のプロセスを指定秒数ブロックさせる仕様だから、 そのプロセスに所属するすべてのスレッドも一緒にブロックされてしまう だから、>>81 のWebrickでsleepを用いた時の挙動は正しいと言える もしもある特定のスレッドだけを指定秒数だけブロックさせたいのなら、 タイマーとスレッド間同期機構を使ったコードを自力で実装しなければならない あとRailsの場合には、Rails自身がリエントラントで設計されていないから、 コントローラの入り口で(=リクエストを受け付けた直後に)排他制御しているらしい したがって、Railsアプリ内で不用意にスレッドを待たせるとRailsプロセス全体が ブロックしてしまう可能性があり、上記のWebrick以上に慎重なスレッド設計が求められる ただし、自分はRailsに詳しくないので、最新版での仕様等はRailsスレで確認して欲しい
84 :12/02/17 wow...すばらしい。ありがとうございます。 とても勉強になりました。 これはJavaから来た人には色々引っかかりそうですね
85 :12/02/17 require 'webrick' s = WEBrick::HTTPServer.new(:BindAddress =>'localhost',:Port => 48080) s.mount_proc("/") do |req,res| body = "before sleep(5) : #{Time.now}\n" sleep(5) body << "after sleep(5) : #{Time.now}\n" res.status,res.content_type,res.body = 200,"text/plain",body end trap('INT'){s.shutdown} s.start # 端末Aからアクセス(13-18秒) before sleep(5) : Fri Feb 17 13:07:13 +0900 2012 after sleep(5) : Fri Feb 17 13:07:18 +0900 2012 # 端末Bからアクセス(15-20秒) before sleep(5) : Fri Feb 17 13:07:15 +0900 2012 after sleep(5) : Fri Feb 17 13:07:20 +0900 2012 webrickではブロックされてないと思うなあ >>83 の言うrailsの排他制御じゃないの?
86 :12/02/17 Windowsでruby1.8、とかじゃね?
87 :12/02/17 >>84 ゴメン、>>83 は「大ウソ」だった マニュアルには明記されていないけど、sleepがブロックさせるのは(プロセスではなく) スレッドらしく、実際に以下のコードも生成された各スレッドは並行に実行される for i in 1..5 Thread.new(i) { |j| while true printf "=== WAIT: %d ===¥n", j sleep 5 printf "=== ACT: %d ===¥n", j end } sleep 1 end 実行環境は、MacおよびWindow上のRuby 1.8.7 じゃあ、ナゼ>>81 の例が並行に実行されなかったのかは分からん(重ね重ね、ゴメン)
88 :12/02/17 (>>87 に追記) >>87 のコードの最後に、メインスレッドを待たせ続ける sleep の1行が必要
89 :12/02/17 require "sqlite3" database = SQLite3::Database.new("db"); sql = "select * from table" database.execute(sql) do |row| puts row end って書いてるんですが、sqlの最後にセミコロンを書いても書かなくても動くんですが ググっても書かないで教えてるサイトとかかなりあるのですが セミコロンは書かなくてもいいのでしょうか?
90 :12/02/17 >>81 あるリクエストがこけたら他のリクエストが全部こけるってこと? 恐ろしいフレームワークだな。 >>89 さすがにそれぐらいはrailsが面倒見てくれるはず。
91 :12/02/17 Railsは関係ないだろ sqlite3がきちんと処理してくれる
92 :12/02/17 >>89 B shellとかAWKとかRubyと同じようにSQLも、行の最後とかのセミコロンが無ければ 勝手に補完する、って仕様なんじゃない?
93 :12/02/17 残念ハズレ
94 :12/02/17 >>89 マニュアルこれでいいのかな http://rdoc.info/github/luislavena/sqlite3-ruby/master/SQLite3/Database#execute-instance_method execute()は単一のステートメントを実行するものなので ステートメントの区切り記号である ; を書く必要がない ページの頭にあるサンプルでも ; はついてない
95 :12/02/17 トランザクションの中で複数のsqlを実行するときにセミコロンがないと困るだろ
96 :12/02/17 railsでプログラミングしているけど 改行コードをLFにしてテキストを返す方法がわからない…(汗 自分が思った以上に初心者で焦っています…
97 :12/02/17 Railsはここでは使ってる人も少ないし板違い 【RoR】Ruby on Rails Part13 http://kohada.2ch.net/test/read.cgi/php/1320393984/
98 :12/02/17 事故解決した lf = "\015" でいけましたわ
99 :12/02/19 「はじめてのRuby」が全然わからないんだが俺は手に取る本を間違えたのか?
100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▲
Rubyについて(アンチ専用) Part004 (701)
「コンパイラ・スクリプトエンジン」相談室15 (356)
【統計分析】機械学習・データマイニング【集合知】 (844)
VB.NET質問スレ(Part38) (607)
VBScriptについて必死に話し合うスレ (177)
FORTRAN W (954)
--log9.info------------------
【まだ連載】柴田亜美作品アンチスレ21【してたんですね】 (940)
藤島康介 ◆ ああっ女神さまっ ◆ Part30 (149)
【旦那さんは】web漫画・ヨメさんは萌え漫画家【自衛官】 (298)
【G戦場】日本橋ヨヲコFight▼25【少女ファイト】 (843)
カラスヤサトシ (672)
【無料WEBコミックサイト】ファミ通コミッククリア総合スレ 2 (314)
【カレー沢薫】 クレムリン 3 (341)
〜みなもと太郎「風雲児たち」茶屋 其の参拾六〜 (596)
【新ゲノム】古賀亮一39【ゲノム金銀】 (189)
河合克敏【とめはねっ!-鈴里高校書道部-】三十八画 (229)
【ULTRAMAN】月刊ヒーローズHEROS 2人目【AKB】 (153)
【オールラウンダー廻】遠藤浩輝 スレ34 (655)
伊藤明弘総合20ジオブリーダーズ&ワイルダネス (309)
星野之宣を語れ Part12 (751)
【小林立】咲-Saki-160巡目【ヤングガンガン】 (975)
小学館の月刊IKKI Part.22 (209)
--log55.com------------------
彡(゚)(゚)なんJ園芸部 35草目
彡(゚)(゚)なんJ園芸部 36草目
(´・ω・`) 37豚小屋
(´・ω・`)J専 ぶたごや 36
【祝】奄美大島の希少動物を襲う害獣の捕獲開始。1週間ほどで殺処分。
福島みずほ「犬猫の殺処分をめざす条文化作業をやっていま〜す」
老犬な日々32
ペッツファーストってどうよ 3