2012年3月プログラム23: Ruby 初心者スレッド Part 48 (708) TOP カテ一覧 スレ一覧 2ch元 削除依頼
J#って何のためにあるの? (149)
【モダン推奨】Perlについての質問箱 50箱目 (162)
2 part forth (635)
こんなコンパイラは嫌だ!7行目 (905)
◆◇◆dbMAGICってどうよ?◆◇◆ (793)
Git 4 (242)

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」が全然わからないんだが俺は手に取る本を間違えたのか?

100 :12/02/19
>>99
全然といっても全部わからないわけじゃないだろうから
とりあえずわからないところ挙げてみれ

101 :12/02/19
>>99
Yugui氏の「初めてのRuby」のことであれば、
いくつも言語が使えてプログラミングの諸概念自体は十分分かっているが
それをRubyで表現するやり方が分からないユーザー向け
本自体は素晴らしい出来だと思うが、あなたがプログラミング初心者ならば
対象読者から外れているのかもしれない
それに、いくつも言語を知ってる熟練者でも、合わない本ってのはあると思う

102 :12/02/19
>>100
最初から読み進めてるはずなんだが一度も解説される事もなく色んな命令がでてくる
配列の説明のとこで挫折というか飽きてきた
どこがわからないというより掴みどころがない
個々のサンプルはググりながら調べて読めるんだがそれじゃ入門書の意味がない
>>101
言語はもう片手じゃ足りない程度は使ってきた
趣味で使った言語を含めると両手でも足りない
しかも、Rubyだって社内ツールを数本ほど書いてる
どうやら俺の地頭が悪いか、単純に合わない本だったかどちらかなんだろう
このまま読み進めたほうがいい?それとも他にオススメの本ある?

103 :12/02/19
>>102
ちょっと漠然としすぎていてアドバイスのしようがない
ググる必要があったコードって具体的にどれ?

104 :12/02/20
配列も分からずにどうやって社内ツール作るんだ?

105 :12/02/20
配列の説明で挫折っていうのは、
たとえば
a = []
a << 1
a << 3
a.each do |i|
p i
end
これが何してるか分からないってこと?

106 :12/02/20
>>104
ランチャープログラムとか

107 :12/02/20
Rubyで社内システム作ったったwww
#!/usr/bin/ruby
puts `社内システム`

108 :12/02/20
>>104
配列のないプログラミング言語では社内ツールのようなものは作れなかったのだろうか
いや、決してそんなことはない
配列はいわばデザインパターンでしかない

109 :12/02/20
>>102
ちょっとうろ覚えだが、『初めてのRuby』は薄いぶんだけ
Webドキュメントぐらい読めるよね〜ってのが前提になっていた気がする
ジュンク堂とか紀伊国屋とか、
デカ目の本屋ならRubyコーナーがあったりするから
そこで自分に合う本を探してみては

110 :12/02/20
Webドキュメントっていうのが公式のリファレンスマニュアルを指すのなら
真逆ですお

111 :12/02/21
>>102
Programming Ruby 1.9 あたりはどう?
電子書籍版なら安い。

112 :12/02/21
>>110
>本書を最後まで読めば、読者はリファレンスマニュアルを自在に読みこなし、Rubyライブラリを活用した
>高度なプログラミングを習得する準備ができていることでしょう。
まえがきにちゃんと書いてあった
yuguiさんごめんなさい

113 :12/02/21
電子書籍って本を表示するモニターが必要なんだよね
モニターもうひとつ買って横に並べたら便利かなとか思ったけど
その分で本を何冊も買えるんだよね
持ち運びには便利なんだけど持ち歩かない本はやっぱり
電子書籍じゃなくて紙媒体のほうがいいんだよね

114 :12/02/21
電子書籍用にandroidの安いスレートとか買えば幸せに慣れるよ。
ipadはもう時代遅れ。。

115 :12/02/22
すいません質問です
Ruby で外部コマンドの stdout, stderr, $? を
それぞれ分けて Ruby のプログラム内に取り込みたいのですが
どうやるのが定石なんでしょうか?

116 :12/02/22
Open3.popen3

117 :12/02/22
>116
すいません. Open3.popen3 でコマンドの
終了ステータスを得るにはどうすればよいのでしょうか?

118 :12/02/22
>>117
http://ruby-doc.org/stdlib-1.9.3/libdoc/open3/rdoc/Open3.html#method-c-popen3
このあたり?
「ri Open3.popen3」でも見られるよ。

119 :12/02/22
>>117
もし1.8使ってるならちょっとわからない($?じゃ取れないかも)
1.9のpopen3であればブロックの第四引数にvalueを呼ぶ

120 :12/02/22
>>119
http://bugs.ruby-lang.org/issues/1287
Bug #1287: $? not set after Open3::popen3
> ruby 1.8 don't have a way to know the exit status because double fork is used.

121 :12/02/22
>118,119
なるほど,1.8のドキュメントを
読んでいたのでできないものだと思っていました.
1.9ならできるんですね.ありがとうございました.

122 :12/02/22
1.8.7にバックポートマダー

123 :12/02/22
1.9系で動くCMSってありませんか?

124 :12/02/22
>>123
nanoc3 とか。
一般的なCMSとは異なるけど。

125 :12/02/22
こういうのあるんですね
ためしてみます
RubyはあんまりWEB系のCMSをみかけないのですすがRORがあるからなのかもしれませんが
RORが強すぎてRubyでCMSとかってあんまり需要がないからでしょうか?

126 :12/02/22
>>125
Radiant CMS があるよ
Ruby 1.9/Rails 3 に対応しているし、
www.ruby-lang.org も、これで動いている
また、非公式ながら有志による日本語ホームページもある

127 :12/02/22
おおありがとうございます

128 :12/02/22
@val1 = @val2 > @val3 ? @val2 - @val3 : @val2
@val2が3回@val3が2回出てくるのが納得いかないんだけど
まっとうな方法では短くするのは無理ですか?
ググろうにもキーワードが分からないし誰か教えてください

129 :12/02/22
>>128
valが整数なら
@val1 = @val2 % @val3
とか?

130 :12/02/22
ごめん、>>129だと@val2が@val3の2倍以上の場合
同じことにならんから、忘れておくれ

131 :12/02/22
>>128
大差はないが。
@val1 = @val2 - (@val2 > @val3 ? @val3 : 0)
または、
@val1 = @val2
@val1 -= @val3 if @val2 > @val3

132 :12/02/22
>>128
「もしval2がval3よりも大きければval2とval3の差を、そうでなければval2の値を利用する」
ロジックそのまんまなのだから、@val2が3回@val3が2回出てくるのは当たり前だと思うのだがどうか
どのへんが「消えそう」だと思う?

133 :12/02/22
>>131の最後のやつがいちばんわかりやすいだろう。

134 :12/02/22
全くわかりやすくはない

135 :12/02/22
>>115
ruby 1.9.3p125 (2012-02-16 revision 34643) [i386-mingw32] で
require 'open3'
stdout_str, stderr_str, status = Open3.capture3('ruby -e"$stderr.puts %!stderr!;puts %!stdout!;exit(5)"')
p [stdout_str, stderr_str, status]
で終了コード取れた
WindowsのRuby 1.8だと Open3.popen3は動かない
forkできんと言われて終了

136 :12/02/22
>>129-130
逆に言えば2倍未満の場合は有効ってことでメモしときました
ありがとうございます
>>131
単純化していうと「一回の式に同じ変数名が何度も出る」のを何とかできたらなあと思っているんです
>>132
当たり前なのは一応理解しています
理解はしてても、冗長だと感じてしまうのは事実なのでなにかないかと思った次第で
>どのへんが「消えそう」だと思う?
自分の知識ではどのへんも「消えそう」じゃないので困ってます
普通の書き方では無理ということのようなので納得することにします
ありがとうございました

137 :12/02/23
Ruby以前の問題で申し訳ないのですが
ソースをコンパイルするのに必要なライブラリはどこかに書いてありますでしょうか
CentOS6.2を使う予定でzlib-devel、readline-devel、openssl-develあたりが必要なのは解ったのですが
他のライブラリも知りたいです。

138 :12/02/23
1.9の場合、付いてくる拡張ライブラリ全部コンパイルするなら
iconv, curses, ffi, libyaml, バークレーdb, gdbm, tcl/tk
あたりかな。
ext/*/extconf.rb を have_library で grep してみれば確実だと思うけど。

139 :12/02/23
>>138
ありがとうございます。
ext/*/extconf.rb を 確認してみます。

140 :12/02/23
(名前で分かるかもしれないけど)
たとえば crypto は、実は opensslの一部だったりするのでちうい。

141 :12/02/23
>>137
一度yumでruby 1.8を入れて削除すれば必要なライブラリが揃いそう。

142 :12/02/23
ruby1.9を使っています。
Structで作った構造体のメンバに配列や連想配列を加えたいのですが、どのように書くかわかっていません。
初歩的なことのようにも思いますが、検索などで見つけられておらず、
教えていただけないでしょうか。

143 :12/02/23
言語によってはデータ格納に実際的に利用できるのが構造体しか実質存在しないようなものもあるが、
Rubyにおいては言語設計レベルから配列とHashを使い倒せと言われているので、
わざわざ不便なStructを最初から使うようなことはせずに、ふつうの用途では配列とHashのネストを使う
オブジェクト指向言語なのにデータ呼び出しがメソッドの形してないじゃないかとか、細かいことは気にするな

144 :12/02/23
わかりました。
郷に入れば郷に従えで、やってみます。
ありがとうございました。

145 :12/02/23
構造体は構造体で便利だと思うんだが
MyStruct = Struct.new(:list,:table)
s = MyStruct.new(Array.new,Hash.new)
s.list << 'hello' << 'world'
s.table[:key] = :value
puts s.list.join(' ')
s.table.each{|k,v| puts '%s = %s'%[k.inspect,v.inspect]}
class MyStruct
def [](key) ; self.table[key] ; end
end

146 :12/02/23
Structの問題は「構造体しか使ってない人」が他言語から来たときに、
Rubyでも構造体を使うんだと思って使用してしまうことだな

147 :12/02/23
すいません
Rubyのマニュアルにサンプルが付いてないのってやっぱり開発者の意向だからでしょうか?
開発者にコンタクトを取ってサンプルを提供と化したらふるぼっこにされますかね?

148 :12/02/23
ものすごく端的に誰にも気を遣わずに誤解と参加者撤退を恐れずに言うのならば、
マニュアル作成に参加した人たちにマニュアル作成のセンスや技術(の共有)がぜんぜんなかったからに尽きる
これを指摘してしまうとマニュアルの作成や管理に参加する人が誰もいなくなってしまう畏れがあった
マニュアル部分が揃ってないことのほうが大問題だったから、当時は些事だとされて敢えて誰も何も言わなかったのだ
まあ、つまり、わかってはいたんだよ
「こんなんじゃなくてほんとはもっとなんとかしなきゃいけないよねー」「だよねー」くらいのぼんやりしたやり取りはあった

149 :12/02/23
ということは今はコンタクト送らないほうがいいですよね
自分でマニュアルと連動したツリーでサンプルを書いていって
いつかマニュアルに取り入れてもらえるような感じになればいいかな程度でやってみようかなと思います

150 :12/02/23
RubyとCに精通した人がやってたというのも大きい
ソース読んで知ってるからサンプルとか書く理由がないし、
CやC++でのアレです以上、みたいな1行説明で充分通じるから説明するメリットもない
第一、そんな余計なことぐだぐだ書いたらマニュアルが長くなって読みにくいし使いにくいじゃないか
まあそのおかげで本も売れてRubyも商業的に一時期注目浴びたんだしいいんじゃねみたいななにか
マニュアルが完備してたら本は売れなかったかもしれないし、じゃあRubyで本出すかという出版社も少なかった可能性がある

151 :12/02/23
matzがマニュアル作るとか面倒くさいって公言してるじゃん
というか、マニュアルとは関係無いけど
ruby界隈の人ってムッツリこそこそ技術を出し惜しみする人が多いんだよ

152 :12/02/23
まじすか
やっぱり名乗り出てtwitterで晒しあげられそうなのでやめときます

153 :12/02/23
>>150
ちょっと擁護しておくと、当時のRubyユーザーは、
そういう他言語知識前提のマニュアルでも理解してもらえるようなバックグラウンド持ちの人が多かったんだよ
開発の初期は尖ったユーザーがわらわら集まることが多いけど、Rubyだってそうだったのだ
今みたいに
「Rubyでプログラミング始めました!Cってなんですか放送できますか」
みたいな人がネットで独学なんて稀だったし、優先度上げてリソース割く意義が薄かった
…人員リソース管理なんてしてなかったけどな

154 :12/02/23
>>152
晒されても死ぬわけじゃないんだからやっちゃえYO
「本当に動く」サンプルによる補完はぜひお願いしたい
die()がRubyにあると勘違いしたPerl使いがいたのは記憶に新しい

155 :12/02/23
いやだってRubyのためにやって叩かれたらむかつきますしね

156 :12/02/23
あんまりよその言語を知らないのだけど
本格的なマニュアルを作った日本のコミュニティーってあるの?
英語マニュアルの翻訳じゃなくて
ところで
やる気がある人なら
るりまプロジェクトに参加したらいいんじゃないだろうか
人的リソースが足りてるわけじゃないだろうし
「ぼちぼちと例を増やしていく要員」とかでもいいと思うのだけど
るりまプロジェクトに「参加するには」
必要なもの¶
* Subversion
* 開発中の ruby 本体をビルドできる環境
* 1.8.x の最新のバージョンの ruby 本体 (できれば trunk を含めた全てのバージョン)
 o patch level に関しては最大のものを用意するのが望ましい
* 1.9.x の最新のバージョンの ruby 本体 (できれば trunk を含めた全てのバージョン)
なんかハードル高いな
るりまプロジェクトに「貢献するには」
ドキュメントの誤り・改善点を指摘する¶
issues からチケットを登録してください。チケットを登録する際、アカウントが必要になりますが誰でも取得可能です。 (プロジェクトメンバに登録して欲しい場合は ML で報告してください。)
* ドキュメントの単純な誤り指摘 (バージョン間違いなど)
* ドキュメントをよりよくするための提案 (説明文追加など)
* あるメソッドのサンプルコード提供
* 既に上がっているチケットに対するコメント
こっちかな

157 :12/02/24
>>145
ありがとうございます。
4,6,8行目が理解できていませんが、やりたいことはやれそうな気がします。
ちなみに、昨日作っていたプログラムは、あの後ハッシユと配列で作ってみました。
ハッシュのキーを指定するところが少しまどろっこしく感じましたが、
以外と簡単にできました。

158 :12/02/24
俺はPHP並みのマニュアルを作りたい

159 :12/02/24
>>128 一般人にはこういう発想はないんだろうが、
その手の小さな計算は、こうやって定義を増やしていって暗記する
人のスペックが上がれば使えるようになる
v1 = 0
v2 = 8
v3 = 3
def ifltnlt a , b
  return yield if a > b 
  a
end
v1 =
if v2 > v3 
  v2 - v3 
else
  v2
end
p v1
a = ifltnlt v2 , v3 do
  v2 - v3
end
p a
   
ゲームなどで、Mobなどのパターンを大量に作らなければならないような処理の場合
ソースコード効率を求めたらこういうのばかりになってくる

160 :12/02/24
ruby1.9.3で勉強をしたいのですがredmineも使ってみたい
なのでruby1.8.7も一緒にインストールしたい
Windowsでこういう悩みを解決する方法を教えてください

161 :12/02/24
最近redmineの1.9対応がものすごく進んだと聞いた気がする。

162 :12/02/24
>>160
別の場所にインストールすれば共存できるんじゃない。
Redmineからforkしたものとして、ChiliProjectというものがあるね。
これは1.9.3対応。
https://www.chiliproject.org/
どの程度安定しているかは知らない。

163 :12/02/25
Perlでいう map {$_ => 1} @a のようなことをRubyでやるのに
h = {}; a.each {|x| h[x] = true }
はhを2回書く必要があってエレガントでないし
a.inject({}) {|h, k| h[k] = true; h }
Hash[*a.map {|x| [x, true] }.flatten(1)]
とかだと分かりにくいんですが、何かいい方法ないでしょうか。
Hash#to_aでalistに変換されるのだから、
a.map {|x| [x, true] }.to_hash
のように、Array#to_hashでalistをHashに変換してくれるといいなと思うんですが。

164 :12/02/25
>> RUBY_DESCRIPTION
=> "ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin11.3.0]"
>> a = %w(a b c d e f g)
=> ["a", "b", "c", "d", "e", "f", "g"]
>> Hash[a.map{|x|[x,true]}]
=> {"a"=>true, "b"=>true, "c"=>true, "d"=>true, "e"=>true, "f"=>true, "g"=>true}

165 :12/02/25
>>164
おお、Hash[] に直接alistを指定できるんだ!長年の不満が解消されたよ。ありがとう!
ちなみにリファレンスマニュアル見たら一応書いてあった。
http://doc.ruby-lang.org/ja/1.9.3/class/Hash.html
self[*key_and_value] -> Hash の(4)に書いてあったけど、
self[other] -> Hash のところに書くべきだろこれ。

166 :12/02/25
rubyでwebアプリをつくろう思うんだけど hamlつかってやる際参考なるサイトありますか?

167 :12/02/25
書いてある順番がおかしいんだろうな
先にkey_and_valueのことが書いてあればわかるが、最初にあると何に対してotherなんだって感じ

168 :12/02/25
>>161
まじっすか
でもぐぐっても対応してる情報が見つかりません
>>162
これいいですね

169 :12/02/25
>>168
http://forza.cocolog-nifty.com/blog/2012/02/redmine140ruby1.html
対応するのは1.4だろうね。

170 :12/02/27
Emacsで上で使うとなんかすっごいRubyプログラミングが便利になる定番プログラムとかライブラリとかありますか

171 :12/02/27
>>170
1:あります
2:初心者丸出しの奴にそんなもの教えても意味ねえよ
3:条件によるだろアホか
どれがいい?

172 :12/02/27
1かつ具体的に詳しく

173 :12/02/27
eclipse使えばいいよ。

174 :12/02/27
ruby1.9.2を使っています。
文字置換について教えて下さい。
文字コードが全てutf-8で扱っている前提で
org = "第1回"
temp = org.gsub(/第(.+)回/,"\1")
として"1"だけを取り出したいと考えています。
ところが上記を実行すると、
"1"と入って欲しい所が
tempは"\u0001"となります。
どうすれば"1"として取り出しできるでしょうか。

175 :12/02/27
たまたま1だったから分かりづらいのかもしれないけど、
"" の中のバックスラッシュエスケープ記法として解釈されてる。
'' の中なら ' と ¥ 以外のエスケープは解釈されず、置換結果文字列記法における ¥1 になる。
つーか置換にはブロック使え。

176 :12/02/27
なんでgsubの第2引数使う人がいるんだろう
どっか本にでも書いてあるんだろうか
燃やすから教えろ

177 :12/02/27
ありがとうございます、おかげさまで理解できました。
ブロックを使うというのは、今回の例でいくと
temp = org.gsub(/第(.*?)回/) {$1}
となる訳ですね。
これなら""の誤りも確かにでにくいですね。

178 :12/02/27
>>176
ググルで
「ruby 文字列 置換」
で検索してトップのほうにでるサイトのいくつかは、第二引数で使用しているもので
それがスタンダードなのだと思っていました。

179 :12/02/27
うんにゃ、subとgsubの第2引数は通常使用しない
代わりにブロックを使う(ブロックの最後の返り値で置き代わる)
他の言語で一般的な「ばっくすらっしゅ1」という記法を許容するために
(または、「ばっくすらっしゅ1」ではなくバックスラッシュに続く数字1だと書くために)
めんどくさい書き方をしなければならないので人気がない
irb> s = "第76回"
irb> puts s.gsub(/第(.+?)回/,"\\1")
76

180 :12/02/27
そんな嘘吐かずに個人的には非推奨とだけ言えばいいのに
http://www.koders.com/default.aspx?s=gsub&search.x=0&search.y=0&la=Ruby&li=*&scope=

181 :12/02/27
http://rurema.clear-code.com/1.9.3/method/String/i/sub.html
一応るりまには、第2引数で$1, $2, $3...や\を使う時は注意が必要だから
間違いを避けて可読性を上げるためにブロック付きのsubやgsubを使うべきとは書いてるな。
$1とか\が絡まなきゃ第2引数使ってもよくね?わざわざブロック作るのも面倒だし
というのは俺の個人的な意見。

182 :12/02/27
スレ的には「そもそも第2引数はないもんだと思って覚えてもらう」がベストだと思うがねえ
書くときにあらゆるものに注意して書けるくらいなら世の中からバグはもっと減っていてもいい

183 :12/02/27
じゃあそういう仕様にしろよカス

184 :12/02/28
無理
>>179の言う通り、\2などの「バックスラッシュと数字」を文字列リテラルで指定するためには第2引数のような仕様が、
文字列リテラルとして指定しない方法としてはブロックで $1 のように記述できる仕様が、どちらも必要
っていうか、第2引数がめんどくさ過ぎるからブロックで書けるようにしたんじゃなかったっけ
まあめんどくさいんだけど、将来マッチつき置換に書き変えるときにうっかりバグ仕込むよりはマシかと考える

185 :12/02/28
g?subの第二引数を使ってる標準ライブラリは教育的観点から一度標準から外すべき
さあgrepしてみよう

186 :12/02/28
ここまでのまとめ
gsubメソッドとgsub!メソッドは、文字列の中で正規表現のパターンにマッチした部分をすべて指定の文字列に置換します。
文字列で置換
str.gsub(pattern, replacement)
Ruby 1.9では、パターンの中で(?<名前>パターン)という形でカッコに名前を付けられます。第2引数replacementの中では、\k<名前>という書式でそのカッコに当てはまる部分を埋め込めます。
s = "one two, three four, five six"
puts s.gsub(/(?<first>\w+)\s+(?<second>\w+)/, '\k<second> \k<first>')
ハッシュで置換
Ruby 1.9 Ruby 1.9では、第2引数に{ マッチした文字列 => 置換文字列 }のようにハッシュを指定できます。次の例は、文字列中の< > & "をHTMLの文字参照に置き換えています。
s = '<hello> & "world"'
puts s.gsub(/[<>&"]/,
"<" => "<", ">" => ">", "&" => "&", '"' => """)
ブロックを使った置換
str.gsub(pattern) {|match| block }
s = "hello, world"
puts s.gsub(/\w+/) {|word| word.capitalize }

187 :12/02/28
>>174
いまさらだけど
そもそもの要求が置換じゃないんだからgsubを使うのが間違い
マッチした部分を取り出したいだけならslice,[]の方がいい
temp = org[/第(.+?)回/,1]
それとマッチさせるのが数字限定なら.よりも\d
上の場合は漢数字とか全角とかあるかもしれんけど

188 :12/02/28
多倍長整数(Bignum、符号なし)をArray#pack("Q")によりパックした文字列を
他のマシン(Windows、32ビット環境)で動作するrubyプログラムに送信したとします。
このとき、受信した文字列をString#unpack("Q")で変換するのは危ないですかね?
Cのlong longのサイズに依存しているということは、相手の環境によっては正しく変換されない可能性もあるんですよね・・・。
rubyは多倍長整数が扱えるので、何とかして環境を意識せずに扱いたいのです。
じゃぁ、整数をテキストとして送信すればいいじゃないか、と思われるかもしれませんが
事情により固定長のデータで送らなければならないのです。

189 :12/02/28
どんな事情かを語らずにそんなクイズみたいなことされてもなぁ。

190 :12/02/28
packとunpackは「同じマシン」でやることが前提
なんとなくunpackするだけでどんなマシン由来のデータも元に戻るなんてことはない
送信プロトコルや事前外部人力情報で相手の環境が知らされないのだとしたら、どうしようもないかもしれない

191 :12/02/28
るりまのpackフォーマットより
システムに依存しないデータを扱うときには n, N, v, V を用います。
エンディアン非依存、整数サイズ非依存 (ネットワークプロトコルなどに適切)
n: big endian unsigned 16bit
N: big endian unsigned 32bit
v: little endian unsigned 16bit
V: little endian unsigned 32bit
これの64bit版があればいいのにね
今のところ、自前で32bit 二つにするしかないんじゃない
ll = 12345678901234567890
u = (ll >> 32) & 0xFFFFFFFF
l = ll & 0xFFFFFFFF
data = [u,l].pack('NN')
ll2 = data.unpack('NN').inject{|r,x| (r<<32)+x}
p ll2 # => 12345678901234567890
p ll == ll2 # => true

192 :12/02/28
Q> と Q< は?

193 :12/02/29
そんなものがあったとは
Ruby 1.9.3 でエンディアン指定が追加されたのか
ll = 12345678901234567890
data = [ll].pack('Q<')
ll2 = data.unpack('Q<').first
p ll2 # => 12345678901234567890
p ll == ll2 # => true

194 :12/02/29
文字列を連結する場合に、
a = a + b
a << b
後者が圧倒的に速いようです
原因としては、前者だと新しいオブジェクトが作られていしまい、後者だと作られないからという理解でいいでしょうか?

195 :12/02/29
よろしいです
まあ、速度差が出るなんてよっぽどだけど…
本質的には別個の動作であり、どっちかがどっちかの代わりになるものではないです(本当は)
なお a << b << c は単に a.concat(b).concat(c) であり、b は変化しません
irb> a, b, c = 'A', 'B', 'C'
irb> a << b << c
irb> p a
"ABC"
irb> p b
"B"
これが "BC" になると思ってる人が時々いますが、後ろから処理しそうな見た目に惑わされず前からメソッドチェーンとして考えて下さい

196 :12/02/29
>>195
なるほど、勉強になるなあ。
func(a << b , b << c , c << a) だと左から順に評価されるので
a << b << c も同様だと、つい考えそうになる。

197 :12/02/29
>>196
a << b << c という形式は、擬似的に書けば「a.<<(b).<<(c)」なんよ
んで、基本的に<<は処理後のa自身を返すのがマナーなんで
ずっとaに対する処理となる
…一応仕様上は<<が自身以外のものも返すことは出来るが
混乱させるだけなので基本やらない

198 :12/02/29
>>197
>…一応仕様上は<<が自身以外のものも返すことは出来るが
できないんじゃないかなあ。
def <<(x); return "not self"; end
とかしても、Rubyのパーサが「<<」の戻り値を無視して、戻り値としてreceiverを強制的に使うようになってるはず

199 :12/02/29
Rubyerって何でPHPに敵対心むき出しなの?
どんだけだよ
ttp://j.ktamura.com/archives/1944

200 :12/02/29
>>198
1.8.6では強制的にreceiverが戻り値になることはないようだ。
http://codepad.org/bifkv52L
手元のruby 1.9.3p125でも同様の結果だった。

201 :12/02/29
>>199
そのページ主がRubyer?で、世界中のRubyユーザを代表していると?

202 :12/02/29
>>199=>>201

203 :12/03/01
Rubyerって初めて聞いた

204 :12/03/02
ちなみにRugbyはラグビーな

205 :12/03/02
↓絶妙なオチでこの話題を終わらせてくれ

206 :12/03/02


207 :12/03/02
Ruby UserでRuserってのはどうだ
決してLoserではない

208 :12/03/02
PHPって主にwebで使われてるじゃないですか
Rubyは主にどの分野で使われているものでしょうか?

209 :12/03/02
主に「外に出ない」部分で使われてます
賄い料理みたいな分野と言えばなんとなくわかってもらえますかぬ
毎日の賄い料理が便利に作れたり美味しく作れても客に出すメニューに載ることはまず無いが、
客に出すメニューの内容が賄い料理の経験で良い方向に変化することはありえるし、
「ただいま食事中」で店が長時間止まるようなこともなく、マズい昼食で料理人のテンションが下がることもない

210 :12/03/02
それは例えばLinuxでシェルスクリプトを書くのに使われるとか
受信したメールを処理するなどの内部で処理するシステムを書くときに使われるってことでしょうか?

211 :12/03/02
http://www.google.co.jp/search?num=30&hl=ja&q=ruby+%8E%96%97%E1&btnG=%E6%A4%9C%E7%B4%A2&lr=

212 :12/03/02
>>210
シェルスクリプトを知っているのなら、それのベターな代替位置だと思ってもらっていい
あなたやわたしが手元で作ってせいぜい10人が手元で使うもの
会社のサーバのcronで毎日ぐりぐり動いてるよくわからない何か
動作を書きなおすことはあっても、パフォーマンス計測して速度をチューニングされることはないようなプログラム
あとで絶対にCで作り直すからと言われつつも絶対にそのまま使われるプログラム
昔のPerlのようなもの(CGI用途?違うもっと前だ)という例えがどのくらい伝わるもんなのかよくわからん
キラキラしてテカテカした画面ができたり電気屋に箱がうず高く積まれたり雑誌の一面を飾ったりするようなサービスはできないが、
文房具のようにないと困るプログラムの作成言語
つまり糊

213 :12/03/02
でも実際は、ちょっとした雑務処理をrubyで書くことはあまり無いよな。
シェルスクリプトの方が、汎用性あるし読める人が多いし。
わずかな作業効率と自己満のためだけにrubyで書くってのも馬鹿らしい。エンジニアとして糞

214 :12/03/02
同一のIOを複数のスレッドが弄るとどうなりますか?
require 'socket'
sock = TCPSocket.open 'localhost', 80
t = Thread.start { loop { sock.write "HELLO" } } # 永遠に書き出す
loop { sock.read 4096 } # 永遠に読み出す
t.join
sock.close

215 :12/03/02
iCORE7とか結構いいCPU積んでるパソコンを持ってる人に伺いたいんですが
Rubyのコンパイルってどのくらい時間がかかりますか?
自分のはセレロンなんですけど2時間かけても終わりません
速度が速くなるならパソコンの買い替えをしたいんですが

216 :12/03/02
「シェルスクリプトで書ける」分野というのはそんなに広くはない
sedやawkとかの外部コマンド使いだしたらそれは「読みやすいシェルスクリプト」としての意味はないし、
シェル組み込みだけで書くなんて面倒にも程がある
一部LinuxディストリビューションでPythonがメインスクリプトとして採用されたのには理由があるってことだな
まあ、別にいいけど

217 :12/03/02
>>214
ぐちゃぐちゃになります
>>215
20分くらい?
コンパイル仕事にしてるんでなけりゃ別に無理してまで買う必要はないとは思うが

218 :12/03/02
>>217
マジで?
TCPのIOでもダメなんだ、やべぇな。。書き直しだ

219 :12/03/02
コマンドを順々に実行するならシェルスクリプトが最強効率だけど、
自前でデータ持つとかになると途端に…

220 :12/03/02
>>219
bash4では連想配列が使えるぞ
まあ、bashでシェルスクリプト書く奴はいないとは思うんだが

221 :12/03/02
>>218
ソケットは受信用と送信用のバッファ持ってるから
受信または送信を行うのがひとつのスレッドだけなら問題ないよ
ただ受信バッファがカラならreadはブロックするし
送信バッファが満杯ならwriteはブロックする

222 :12/03/03
>>215
さすがに2時間もかかってコンパイル終わらないようだと買い換えた方が良いのでは。
今はパソコンも安いし。
ちなみに手元のマシンだとconfigureから始めて4分くらい。
(rubyのバイナリ作るだけなら一瞬だけど。)

223 :12/03/03
セレロンは糞

224 :12/03/03
そうですか
やっぱ新しいの買おう
最近のスペックのは5万でもいいのあるし買っておきます

225 :12/03/03
3万程度で自作しろ

226 :12/03/03
福岡のルビービジネス広がる 参加企業5年で8倍に
http://www.nikkei.com/news/local/article/g=96958A9C93819891E2E3E2E2EA8DE2E0E2E1E0E2E3E09E8AE2E2E2E2;n=9694E3E4E3E0E0E2E2EBE0E0E5E2

227 :12/03/03
日経が記事にしたってことはそろそろ終息ですな

228 :12/03/03
<div>
<div class="test">aaaaaaaa</div>
<div class="test">bbbbbbbb</div>
</div>
上のHTMLの2番目のテキストbbbbbbbbを取得したくてXPathを利用してこう書きました
require "rexml/document"
include REXML
doc = Document.new File.new("test.xml")
result = XPath.first(doc, "//div[@class='test'][2]")
print result.text
これで取得はできるのですが以下のような構造だと取得できません
<div>
<div class="test">aaaaaaaa</div>
<div class="a">
<div class="test">bbbbbbbb</div>
</div>
</div>
HTMLの構造が分からないのでピンポイントで//div[@class='test']という書き方で取得したいのですが
//div[@class='test'][2]で取れません
どなたかご教示お願いいたします

229 :12/03/03
//div[@class='test']な要素を最初のひとつだけではなく
全部返してくれるメソッドがあればいいわけだけど
チュートリアル見た限りではXPath.matchが使えそうだよ
doc = Document.new File.new("test.xml")
result = XPath.match(doc, "//div[@class='test']")
p result[1].text

230 :12/03/03
勉強になりました
無事取れました
ありがとうございます

231 :12/03/04
WindowsにRubyインストーラーで配布されているexeかzipから入れようと思います
zipから入れた場合は自分で環境変数を追加しますが
それ以外にすることはありますか?
インストーラーで入れるとアンインストールしてからインストーラー立ち上げるのが面倒くさかったり
複数のバージョンを切り替えるのが面倒くさいのでzipから入れたいと考えてます
C:\rubyにパスを通して、1.8.7と1.9.3をフォルダ名を切り替えて利用したいため

232 :12/03/04
あとは関連付けくらいか

233 :12/03/04
関連付けってしてないのですがしないとダメですか?
rbファイルはテキストエディタに関連付けはしてます
実行するときはコマンドプロンプトからおこないます

234 :12/03/04
俺もそうしてる
ダブルクリック時はテキストエディタで開いて編集
どう考えても実行する回数より編集する回数のほうが多いから(あくまでも俺の場合

235 :12/03/04
& # 12487 ; & # 12473 ; & # 12494;
↑こういう文字列を日本語に変換できますか?

236 :12/03/04
楽にやるなら CGI.unescapeHTML(s)
まじめにやるなら数値抜き出して pack('U')

237 :12/03/04
ありがとうございます
#!/usr/local/bin/ruby -Ku書いて、CGI.unescapeHTMLでできました。

238 :12/03/05
Rubyスクリプトの実行はコマンドプロンプトやファイラーからだけで
エクスプローラーをまったく使ってないので
関連付けとかいらないんだけど
適切に関連付ければ
拡張子rbをbatファイルみたいな実行可能ファイルみたいに扱えるようになったりする
デフォルトが「エディタで開く」だと
コマンドプロンプトでスクリプト名だけ書いてもエディタで開いちゃう
デフォルトが実行するやつになってると
hoge.rb foo bar
で実行できる
環境変数PATHEXTに.rbを追加すると、拡張子無しの
hoge foo bar
で実行できる

239 :12/03/05
ruby 1.9.2p136 (2010-12-25 revision 30365) [i386-mswin32]でMS Excelで出力したcsvファイルを処理しようとしているのですが,
require 'csv'
CSV.foreach("hoge.csv", 'r') do |row|
p row
end
としても
C:/ruby/lib/ruby/1.9.1/csv.rb:1198:in `delete': can't convert Symbol into String (TypeError)
と表示され,うまくcsvファイルが読み込めません。
webで検索して 'r' を 'r:sjis' としてみたり,元のcsvファイルを utf-8 に変換してみたりしても状況は変わりませんでした。
csvファイルのの扱い方など教えていただけないでしょうか。

240 :12/03/05
>C:/ruby/lib/ruby/1.9.1/csv.rb:1198:in `delete': can't convert Symbol into String (TypeError)

241 :12/03/05
>>239
'r' は不要というかそこにStringは来ない。エンコードを指定したい場合は、
CSV.foreach("hoge.csv", encoding: "shift_jis")
> foreach(path, options = Hash.new, &block)
> ...
> The options parameter can be anything CSV::new() understands. This method
> also understands an additional :encoding parameter that you can use to specify
> the Encoding of the data in the file to be read.

242 :12/03/05
>>67
>f = File.Open("hoge.dat", "rb")
>
>data_array = f.Read(16)
今更質問の追加ですいません。。
上記のように、バイナリファイルを16Byte読み出し、
puts data_array[0]
とすると、データが化けてしまいます。
もちろん
data_array.each_byte{ |num|
print num
}
とすると、うまくデータは取得できます。
配列要素を取得するにはどうすればいいのでしょうか?
テキストファイル制御のサンプルは多いのに、
バイナリデータを取り扱うサンプルは少ないなあ。。

243 :12/03/05
まあ>>68の回答が思いつく限り最悪だったからな

244 :12/03/05
相変わらず質問のしかたがまずいですねぇ
「データ化ける」だけではよくわかりません
〜になって欲しいのに
〜になります
というように具体的に書いてもらわないと
それと、RubyのバージョンとかOSとかも書くといいでしょう
Ruby1.9以降だと想像すると
puts data_array[0]
は、data_arrayの先頭1バイトの「文字」を表示しますよ
puts data_array[0].ord
だとどうですか?

245 :12/03/05
質問の仕方がまずくてすいませんでした。
rubyは1.9.2です。
やりたいことは、
「ファイルの先頭から数バイト、バイナリデータとして読み出して、
配列に格納し、先頭要素の値が所望の値、例えば0x0Aだったら、次の処理へ、、
という逐次処理をしたいと思ってます。
そのために、まずはファイルから読み出したデータがちゃんと配列に格納されたか、
チェックしたくて、putsコマンドで確認していました。

246 :12/03/05
Ruby 1.8でも動かす可能性があるなら
data_array.bytes.to_a[0]
data_array.unpack("C16")[0]
という手もある。
バイナリファイルを扱うならunpackはほぼ必須だろう。

247 :12/03/05
ありがとうございます!
ファイルから取得した配列は、バイト単位の要素になってるわけじゃないんですね?
文字単位?
だから、希望の単位に分割させるためにunpackを用いる、という理解でいいんですかね。
unpack、packの使い方をちゃんと理解しないといけませんね。

248 :12/03/05
>>67
f.readの返り値はArrayではなくStringなのでdata_arrayという変数名は混乱の元。
unpackはStringをArrayに変換するメソッド。
data_array[0] の [] はArrayではなくStringに対するメソッド。Ruby 1.8と1.9で動作が違う。

249 :12/03/06
rubyをはじめてみようと思ったのですがバイナリを落とせません。
ここの 1.9.2 i386 (32bit)というバイナリなのですが。
http://www.garbagecollect.jp/ruby/mswin32/ja/download/release.html

250 :12/03/06
宣伝うぜえ
今はRubyInstallerの時代だろうが

251 :12/03/06
Ruby 1.9.2を使っています。下のコードをもっと短く書く方法はないでしょうか?
notebook = notebooks[notebooks.index{|n| n.name == "目的のノートブック" }]
notebooksが二度出てきてしまうのが気になります・・・

252 :12/03/06
notebooks.find{|n| n.name == '...' }

253 :12/03/06
>>252
ありがとうございます!Enumerableにfindというメソッドが定義されているのですね。
大変勉強になりました _ _

254 :12/03/07
pattern = '\d'
while gets
print if /#{pattern}/
end
上記の場合正常に動くのですが
while gets
print if /\d/
end
こう直接書くと警告が出るのはなぜなのでしょうか?
(~/\d/とすれば出なくなったのですが)

255 :12/03/07
うん、まあ、とりあえず、警告を読む努力はしてみてくれ
わけわからん警告も確かに多いんだが、最初からどうせわけわからんのだろうと放棄されるとちょっと寂しい
> warning: regex literal in condition
ということで、ふつうの正規表現リテラルをマッチ先省略表記で書くことはできない
irb> while gets; print if /\d/ end
(irb):1: warning: regex literal in condition
1
1
irb> while str=gets; print if str =~ /\d/ end
1
1
あと、Rubyにおいて $_ を利用した省略の書き方は全く行なわれない
きちんとローカル変数に代入しておくことを強く推奨

256 :12/03/07
なんか足りなかった
while str=gets; print str if str =~ /\d/ end

257 :12/03/07
ちなみに
print if /a/ while gets
は通るよ。>255と同じ警告がでるけど。

258 :12/03/07
StringIOってどういう目的で使われるんですか?
ファイルからIO作る場合は、
中身を読むためにファイルを直接扱うよりも、読み取るためのインタフェースを持ったIOを作る
ということだと思うので直感的に分かります。
でもStringってそれ自体が生のデータですよね。何のためにIOクラスを作るんですか?

259 :12/03/07
Ruby製でGUIで作ったソフトで有名なのってなんでしょうか?

260 :12/03/07
>>259
ありません

261 :12/03/07
>>258
printやreadが可能でありながら、実際のファイルに紐付いていないオブジェクトがStringIO
わかりやすいところでは「ファイルに書き込みするメソッドにIOの代わりに渡して中身を検分」という芸ができる
StringIOという名前は実のところあんまし実態を反映してない

262 :12/03/07
>>258
ファイルと同様にStringIOはどこまで読んだか覚えていてくれるのが大きい
例えば <続くデータの長さを示す4バイトの文字列><データ> なんて
構造を持つ文字列を解析するのに次のどちらが楽かは明白
len = sio.read(4).to_i
data = sio.read(len)
pos = 0
len = buf[pos...pos+4].to_i
pos += 4
data = buf[pos...pos+len]
pos += len

263 :12/03/07
>>261
>>262
ありがとうございます!面白いですね。
必要に迫られて生まれたクラスではなく、利便性のためにあるクラスということですね。

264 :12/03/07
Stringインスタンスに対してかぶせてStringIOを作ることより、
空で作って、IOを引数にするメソッド(ロガーとか)に渡して、
あとで検分するのに使うケースが、個人的には一番多い。

265 :12/03/07
1.9.3で推奨される文字コードの変換方法をそれぞれのパターンで教えてください
パターン1:変換できない文字があった場合、適当な文字に変換してスクリプトを走らせる
パターン2:変換できない文字があった場合、エラーを出してスクリプトが止まる

266 :12/03/07
String#encodeのオプションに
パターン1: invalid: :replace, undef: :replace, replace: '〓' のように渡す。
パターン2: デフォルト(invalid: nil, undef: nil)で例外出して死ぬ。

267 :12/03/07
>>265
変換できない文字があった場合、適当な文字に変換してもいいのならパターン1を使う
変換できない文字があった場合、エラーを出してもいいのならパターン2を使う
本気でどうでもよくて考えるのめんどくさくて言い訳もめんどくさい場合はパターン1の大家であるNKFにぶん投げる

268 :12/03/08
>>259
LimeChatがRubyCocoaで作られていた。
今は違うみたいだけど。

269 :12/03/08
>>259
有名かは知らないけれど、mikutter というのをたまに見かける

270 :12/03/08
RPGツクール…はゲームの記述言語としてだから違うか。

271 :12/03/08
なるほほど・・・
Python製のGUIソフトだとpycronとかkeyhacやキーボードランチャ(名前忘れました)があるんですが
RubyであまりないのはRubyはGUIに弱いからとかそういう理由があるのでしょうか?

272 :12/03/08
Rubyは、おそいのです。しろうとがみても、こわいほどおそい

273 :12/03/08
>>271 「RubyはGUIに弱い」
ruby tk
でぐぐったらでてくる

274 :12/03/08
「多種多様なTcl/Tk拡張ライブラリが存在
→ ほぼすべてをRuby/Tkから利用可能」
RubyTk-seminar200709
永井さんとこのRuby/tk講習会資料2007(テキストとサンプルソース)
http://www.dumbo.ai.kyutech.ac.jp/~nagai/RubyTk-seminar200709-files.zip
http://jp.rubyist.net/?RubyDocument

275 :12/03/08
やろうと思えばできるんだけど、わざわざやる必要がないので盛り上がってない、以下スパイラル
Windowsなら.netでいいし、絵を貼りつけたランチャー程度ならHSPとかでもいいし、Linuxでも動作したいならPythonでいい
せっかくのRubyなのにわざわざめんどくさい用途に使う理由ないじゃん? みたいな感じ
高枝切りバサミで具材切ってカレー作ったとして、それは凄いかもしれないが、真似しようとも思わないし、普及するとも思わないだろ

276 :12/03/08
でも鋏の機構をそのままにマジックハンドつけたらバカ売れしたというのがRailsなので、そうそう無碍にするようなもんでもない
ただ、スレ的におすすめするようなもんでもないのは間違いないが
慣れた人が試しにやってみるようなもん

277 :12/03/08
tkは使ったことあるけど、なんかRubyっぽい書き方にならなくてあんまり好きじゃない。

278 :12/03/08
すみません、質問です。
トップレベルにメソッドを定義したのですが、
トップレベルのselfの特異メソッドでは無いようです。
いったいどこに定義されたのでしょうか?
ご回答よろしくお願いします。
def zzz1; 111; end
class << self
def zzz2; 222; end
end
#どっちも同じように呼び出せる
p zzz1 #=> 111
p zzz2 #=> 222
#zzz1はどこに?
p self.methods.select{|i| i =~ /zzz/} #=> [:zzz2]

279 :12/03/08
Pythonで作ってあるのはクロスプラットフォームで動かせて、コンパイルが不要で使う人がスクリプトを修正してすぐに動かせるのがメリットかなと思ってました

280 :12/03/08
>>278
irb> def nya; end
irb> p Object.private_methods.include?(:nya)
true

281 :12/03/08
>>280
なるほど、privateとpublicの違いがあったんですね!
よくわかりました。素早いご回答ありがとうございました。

282 :12/03/08
トップレベルでのメソッド定義は、特異メソッドになるのではなくて、
トップレベルにおける self ( main とか呼ばれてる)のクラス(つまり Object )の
プライベートメソッドになる。

283 :12/03/08
>>282
ほんとだ!
つまり、他のクラスからでも呼び出せるようになるということですね。
Javaとは少し勝手が違うので難しいですね。
分かりました、ありがとうございました!
def zzz1; 111; end
class << self
def zzz2; 222; end
end
p Object.private_instance_methods.select{|i| i =~ /zzz/}
class Hoge
p zzz1 #=> 111 呼び出せる!
p zzz2 #=> NameError
end

284 :12/03/08
Rubyでは親クラスのprivateインスタンスメソッドをサブクラスから呼べるんですね。
呼べるからこそ、上記の動作(Objectのprivateインスタンスメソッドをどこからでも呼び出せる)になるわけですが。
protected なら分からなくもないのですが・・・
class A
private; def aaa1; return 111; end
protected; def aaa2; return 222; end
end
p A.private_instance_methods.select{|i| i =~ /aaa/} #=> [:aaa1]
p A.protected_instance_methods.select{|i| i =~ /aaa/} #=> [:aaa2]
class B < A
def bbb
p aaa1 #=> 111 サブクラスから親クラスのprivateインスタンスメソッドを呼び出せる!
p aaa2 #=> 222
end
end
BBB.new.bbb

285 :12/03/08
>>284
じゃあ聞こう
どうしてJavaの動作が「正しい」の?

286 :12/03/08
>>285
「正しい」とは思っていませんよ。
privateメソッドをサブクラスから呼び出せたら、
protectedメソッドと同じ挙動になるのでprotectedの意味が無くなると感じただけです。

287 :12/03/08
しかしこのprivateの挙動はいただけないですね。
Javaとは関係なしに。
とにかく、Rubyの挙動はわかりました。
大変参考になりました。
ありがとうございました。

288 :12/03/08
>>286
だから、
いや、わかんないならいいよ

289 :12/03/08
むかしはMatzも変えようとしてたけど、あまり大きな仕様変更はしない方針になったのでそのまま

290 :12/03/08
>>288
なんでRubyの挙動が「正しい」と思ってるの?

291 :12/03/08
Rubyの実装が正しいとは思わないが、Javaとは言語が違うんだから動作も違いうるということを意識してくれない人も困る

292 :12/03/08
privateだけ使え派と、意味的にはprotectedなんだからprotected使え派に別れます
私は_hogehogeみたいに、メソッド名にアンダースコア付ける派です

293 :12/03/08
>>283 で、「Javaとは少し勝手が違う」としか言ってないんですが・・・
勝手に「Javaが正しいと思ってる」と思わないで欲しいです・・・

294 :12/03/08
>>291
JavaはJavaしか知らない人がとっても多い
(しかも特定のフレームワークをみんなが使ってるJavaだと勘違いしてたりもする)
せっかく別の言語なんだから、なにもかも別だと最初から思って欲しいなあ

295 :12/03/08
>>293
あなたについての話はもう誰もしてないから帰っていいよ

296 :12/03/08
rubyのは実装間違えただけだから

297 :12/03/08
そうですか、さようなら。

298 :12/03/08
>>296
じゃあどんな実装なら正しいの?

299 :12/03/08
privateがあればいいんだよ

300 :12/03/08
動作はこれでも構わないけど名前が間違ってるというのはよく聞く

301 :12/03/08
まあrubyに限らずprotectedはいらないね

302 :12/03/08
protectedを無くすなら、レシーバ付きのprivateメソッドの呼び出しを許さないとな
def <=> other
 #self.xxx と other.xxx を比較(xxxはprivate)
end

303 :12/03/08
>>293
誰かの書き込みみて、そういやこういうことがあったなっていう居酒屋談義だから気にしないほうがいいよ。

304 :12/03/08
>>293
>>286はなんだったのか
後になって変なこというから誰も相手にしたくないんだよ。もうRuby使わないで

305 :12/03/08
>>255
レスありがとうございます。警告は読みました。なので最後の一文があります。
疑問点はなぜif /#{pattern}/では警告が出ず、if /\d/では警告が出るのか
というところでした。
>あと、Rubyにおいて $_ を利用した省略の書き方は全く行なわれない
$_を使う人はいないということでしょうか。
書く際はすらすら書けて便利だと思うのですが、
やはり可読性が下がるからなのかもしれませんね。

306 :12/03/08
>>304
しつこい。
あんた性格悪いね。

307 :12/03/08
>>305
/\d/ならパース時にどんな正規表現か確定できるけど
/#{ptn}/はptnの内容に依存するから
(パースし終えてからの)実行時にならないと確定できない
だからパース時には警告できない、とかそんなところだと思う
暗黙の$_を使うのはワンライナーぐらいだと思う
Perlに慣れてない人が読んだらまず読み違えるし

308 :12/03/08
と思ったけどif /#{ptn}/;でも警告してしまって問題ない気もする
何か都合が悪いんだろうか。えらい人解説してください

309 :12/03/08
>>305
前者だと、なぜ警告がでないんでしょうね?
実装のもれだと思いますけど
Rubyが出来た当初はPerlにならって$_を暗黙のレシーバーや引数として使うようになってましたが
いまとなっては、暗黙の引数はよくないだろうと言うことに
なかでも特に
条件式部分の単独の正規表現リテラルは
~/正規表現リテラル/ 扱いにするというのは
やり過ぎなので廃止の方向で
とう言うことなのでしょう
ちなみにワンライナーでコマンドラインに書いた場合には警告されません

310 :12/03/08
>>308,309
えらい人でもなんでもないけど、
>>307上段の解釈、つまり「動的文字列だから」でいいんジャマイカと思うよ

311 :12/03/08
なんかRORのおかげか、RUBY人口すごい増えた気がする。

312 :12/03/08
え、いまさら?

313 :12/03/08
生の正規表現リテラルを ~演算子が付いてるような扱いにするのが問題なので
やはり、単純な警告漏れだと思うのですよ
式展開をする場合はパースのしかたがちょっと違ってて
警告するようになってないだけなんじゃないでしょうか

314 :12/03/09
ここで言っててもらちがあかんぞ。
rubyコミッタの看板背負って発言してる奴はここには誰もいないんだから。

315 :12/03/09
>>295
>あなたについての話はもう誰もしてないから帰っていいよ
ここは初心者がずれた質問をしてもかまわない場所。
おまえこそ初心者スレに来るな。

316 :12/03/09
すいません、アドバイスお願いします
Rubyを勉強するのですがやっぱりIDEから入ったほうがいいですか?
やっぱりメソッド?とかインポートするライブラリの名前を覚えてない状態なので
はじめはIDEの補完に頼りながらがいいのかなとおもっているのですがどうなんでしょうか?
慣れてきたらテキストエディタに移行するといいでしょうか?

317 :12/03/09
初心者はまずvimを使いましょう
そこそこ慣れてきたらvimです
もう一人前かなと思ったらvimにするとよいでしょう

318 :12/03/09
なんでもいいから、IDE入れて補完がどの程度役に立つか体感してみたらいいよ。

319 :12/03/09
>>316
>>4 Rubyのためだけに新規導入するのはお勧めしない

320 :12/03/09
# ダメ
str = "abc\tdefg\th"
1 while(str.sub!(/\t+/, ' ' * ($&.size * 8 - $`.size % 8)))
p str
# イイ
str = "abc\tdefg\th"
str =~ /\t+/
1 while(str.sub!(/\t+/, ' ' * ($&.size * 8 - $`.size % 8)))
p str
subの第一引数の正規表現より前で行われた正規表現の結果が
subの第二引数で用いた$&や$`に入るんですね。
仕様として捉えるべきなのでしょうか。
タブを空白に置き換えようとしました。

321 :12/03/09
いや、違いますね。subは一切$&に関与しないようでした。
こうしたらうまくいきました。2回マッチさせているので非効率ですが・・。
str.sub!(/\t+/, ' ' * ($&.size * 8 - $`.size % 8)) while(str =~ /\t+/)
p str

322 :12/03/09
# ゆとり
s.split(/\t/).map{|e|e.ljust(8)}.join

323 :12/03/09
※ 正真正銘のゆとりであってお手本ではありません

324 :12/03/09
>>316
【初心者のためのVim入門】
Vimを起動したら、以下の手順で編集モードが開始します。
少し長いですが頑張って覚えましょう。
[:] → [q] → [!] → [Enter] → [e] → [m] → [a] → [c]→ [s] → [Enter]

325 :12/03/09
>>320
仕様ですってか他の言語でも大体同じでしょ
メソッド(sub!)に渡す引数はメソッドを呼び出す前に処理されるんだから
1 while str.sub!(/\t+/){ ' ' * ($&.size * 8 - $`.size % 8) }

326 :12/03/09
command not found.

327 :12/03/09
評価タイミングの問題なんだからブロック使え。
1 while(str.sub!(/¥t+/) { ' ' * ($&.size * 8 - $`.size % 8) })

328 :12/03/09
だからなんでsubの第二引数を使うのかと何百回言えばわかるんだ

329 :12/03/09
>>328
自分だけは大丈夫だと思ってるんだろ

330 :12/03/09
PerlからRubyに移行中なんでそ

331 :12/03/09
> subの第二引数
理解して正しく利用できるなら使ってもいいと思う
実際は>>174とか>>320みたいなポカをする人が多いけど

332 :12/03/09
>理解して正しく利用できるなら使ってもいいと思う
それはつまり使ってはいけないということだ

333 :12/03/09
書籍なり記事なりで、subとgsubにブロックを使っているかどうかで執筆者の質は見分けられる
ブロックを使っていない執筆者は、Rubyをサンプル程度にしか使ってないことが多い
…いや、まあ、Rubyの用途上はそーゆーのでも結構なんだが、記事なり書籍なりを書くには経験不足だと言わざるを得ない
最初からブロックを使えば全く何も問題がなかったパターンが多いわけで、わざわざ引数で難しく書く理由はない
元々はRubyのsubとgsub(と特殊な文字列のコラボ)の仕様がであるのが「悪い」んだが

334 :12/03/10
マニュアルにも「引数使うと死にます」くらいのことは書いておいたほうがいい
将来的に引数が原因で躓くのがあらかじめわかっているのにわざわざそれまで待っていてサプライズする必要はない

335 :12/03/10
どういうふうにかくのがいいのかおしえてk

336 :12/03/10
ブロック使えと、既に例も出てるだろ。

337 :12/03/10
rubyの勉強はじめたときに一番違和感があったのが、
ブロック付きメソッド呼び出しだったな。
まあ、理解できてしまうと便利なんだが。

338 :12/03/10
これを抜いたら Ruby じゃない、という特徴はありますか?
これを抜いちゃったら、たとえば PHP になっちゃう、とか。
まつもとゆきひろ
やっぱり、ブロックかなぁ。ブロックは結構重要みたい。あの文法のブロックっていう意味でね。
Smalltalk にも、ブロックはあるけど。
Rubyist Magazine - Rubyist Hotlinks 【第 1 回】 まつもとゆきひろさん
http://jp.rubyist.net/magazine/?0001-Hotlinks

339 :12/03/10
PHPは知らんが、ブロック(ブロック付きメソッド呼び出し)が無かったら、
PythonかPerlのようなものでしかないな。
PHPは、構文が似てるからというだけで引かれるレベルのC厨やJava厨を
ホイホイする何か、でしかない。

340 :12/03/10
RubyにブロックがなくてもPythonやPerlとは別物だよ
Pythonは式と文をがっつり分離するし
Perlは参照を明示的に操作する必要がある

341 :12/03/10
本当おまえらはPHPに敵意むき出しだよな
うぇbで勝てないくせにww

342 :12/03/10
最初は何をブロックで書き何を書くべきではないかっていうので結構悩んだな
当たり前だけどブロックを書いたらプロックをあちこちに投げまくるから

343 :12/03/10
全部使える場合、あえてPHPを使う理由って見当たらない。

344 :12/03/10
どれも結構違って、何かを抜いたからといって他の言語には似ないと思ってる。
みんな違ってみんないい

345 :12/03/10
稼ぎたい奴だけPHPを覚えればいいんだよ
俺ら引きこもりニートは究極の言語Rubyを極めるから

346 :12/03/10
プログラマなら全部使えて当たり前だから。

347 :12/03/10
器用貧乏が一番いらない

348 :12/03/10
全部使えるのは大前提であって、それすら出来ない人は望むべくもないと思ってる。
器用貧乏とかそれ以前の問題。

349 :12/03/10
PHPをバカにする自称Rubyiest笑が書いたPHPコードは読みづらい
ロクにPHP言語を精通してないのに見下すような恥ずかしいプログラマーはRuby使いに多い

350 :12/03/10
以下のコードをもっと簡潔にしたいのですが、どのようにしたら良いでしょうか?
s必ず定義され、何らかの文字列または空文字列が入ります。
puts s if !s.empty?

351 :12/03/10
>>350
いあ、簡潔というかこういうのもあるよねってだけだけど。おれはこっちのが好み。
puts s unless s.empty?

352 :12/03/10
複数のカテゴリが違う言語を使いこなしてるのって、人口の0.01%も居ないが、
その狭い世界の中でのシェアの貶し合いって、見てて哀れになるな。

353 :12/03/10
Ruby使いはPHPのことをPerlのパチモン程度にしか見てないからな
ひどいやつらだ

354 :12/03/10
このスレはRubyそれ自体より、それを使う人間に興味がある人のほうが多いんだな

355 :12/03/10
レスが多いだけで、そういう人間が多いとは限らない

356 :12/03/10
Rubyメインの人のブログでもやたらPHPにライバル意識燃やしてるのかそういう記事が多くてキモイ

357 :12/03/10
>>353
俺はRubyな人だがPerlのパチモンとは思わんよ
そもそも分野が違う言語ってイメージ

358 :12/03/10
Macでルビーの開発環境は何が簡単にできる?

359 :12/03/10
一番簡単に済ますなら、vimもterminalもrubyもOSに付いてくるのでそれを使えばいい。
Lionですら1.8.7p249という微妙に残念(=String#inspectにバグのあるバージョン)なバージョンだが。
他のrubyを入れたければHomebrewなりMacPortsなりrbmなり自分でコンパイルするなり。
(コンパイラはAppleに開発者登録してダウンロードする)

360 :12/03/10
×rbm
rvmとrbenvが混ざった。察して。

361 :12/03/10
>>358
Xcodeでおk

362 :12/03/10
>>354
http://toro.2ch.net/test/read.cgi/tech/1330003774/
同じことが書いてあったり敗走の記録があったりする
詳しく読む必要も反論する必要も理解する必要もないが、
この板を利用するならこのへんを知っておかないと余計な手間ばかりかかるぞ
2chの名前欄を見て「みなさん同じ名前なんですね!」とかレスしたりしないだろ
わざわざコピペに反応したりしないだろ
それと同程度の「他人に迷惑をかけず避けるための知識」がある

363 :12/03/10
tempfileを使い始めたのですが、write後closeしたファイルに
追加書き込みすることを意図して、再度openしてwriteしてみましたが、
close前のwriteの内容が消えてしまいました。
tempfileは一度closeしてしまうと、その後に追加してwriteすることは
できないのでしょうか?

364 :12/03/10
単に追加モードにしてないだけじゃないの?
tmpfileに限った話じゃないと思うけど。

365 :12/03/10
>>364
私の調査不足かもしれませんが、tempfileではモードを指定できないようです。
↓によると、常に"r+"でopenされるようです。
http://doc.ruby-lang.org/ja/1.8.7/method/Tempfile/i/open.html

366 :12/03/10
なるほど。
であれば、 tmpfile.path をよそに確保しておいて、tmpfile.close後File.openに与えたらよいと思う。

367 :12/03/10
RubyはRubyしか知らない人が多い印象
他のスレも読んでればすぐ気付くような煽りやレス乞食であっても、それとわからず反応してしまう傾向がある気がする
>>363
なんか似たようなとこで悩んで、結局Tempfileのpath作成機能だけ使って自力でopenしてた記憶

368 :12/03/10
>>366-367
ありがとうございます。検討してみます。

369 :12/03/10
昔は他の言語から流れた人がほとんどだったけれど、
今はRubyからプログラミング始める人も多いのかね。

370 :12/03/10
2chで世間が判った気になりはじめたら、色んな意味でヤバイな。

371 :12/03/10
むしろRubyほど他言語を全く知らない人が居ない言語も珍しいかと
大半のRubyの資料もコミュニティも
プログラミング自体の未経験者はあんまり想定してないよ

372 :12/03/10
…と思ったが、マイナー言語には未経験者が全くいないってのも多いか
まあ知名度の割に、ということで

373 :12/03/11
最近だと、大学の教養程度の授業で採用例がちらほらあったりするから
将来的にはそうでもなくなるのかもしれない

374 :12/03/11
『情報科学入門
Rubyを使って学ぶ』本書を使用した授業
* 東京大学教養学部「情報科学」
* 法政大学情報科学部「Webシステム向けスクリプト言語入門」
* 東京学芸大学「コンピュータ概論」
http://lecture.ecc.u-tokyo.ac.jp/johzu/joho-kagaku/text/

375 :12/03/11
目的は、プログラミング自体ではない

376 :12/03/11
近年の新参はツクールからの奴もそこそこいるんじゃね
だからいきなり「プログラミング言語」なるものを見せられて必要以上に混乱してるって印象
ここのスレじゃなくてほかの場所での感想だけど

377 :12/03/11
xcode4.2はruby使えないの?

378 :12/03/11
プログラミングRubyのRubyベタボメっぷりにRubyを使い始めて早10数年、使えば使う程にRubyって駄目だなと痛感する
Rubyを学習し始めた頃は誰でもRubyは素晴しいと思うのだが、数年も使えばそのどうしようもない互換性のなさにウンザリする
しかも互換性が無くなることをマズいと思っていない集団がRubyを制作しているのでどうしようもない
1.4時代のコードが1.6になった途端に互換性がなくなり動かなくなることはあったが、1.6→1.8ではそれが顕著になり、1.9など何のエラーも出さずに前のコードが動く方が珍しいほど
それどころか1.9に行かずREEが海外ではデファクトになりつつある現状、そして始まるPlain RubyとREEの方言問題
例えばPassengerもREEの方がうまく動いたり、かと思えば特定のバージョンだとPlainじゃないとまともに動かなかったりと、とても面倒臭い
美しいコードを求める為の副作用、という名の互換性のなさはRuby界全体に蔓延していて
例えばあれだけもてはやされたRailsも、Rails2とRails3の互換性のなさに誰しも苦労したのは記憶に新しいところ
誰もが互換性のなさに辟易し、俺ライブラリを量産するため、gemで探すと似たような事をする終わったプロジェクトがわんさか引っかかる
諸処の小さなプロジェクトだけがそんな現状ならば許せるが、dbiアダプタでさえそんな現状なので
バージョンが変わるとデータベースにすら接続できなくなったとか、dbiのAPIバージョン変わったのにアダプタ側の更新ないな、
とか思ってるとアダプタ作者がRubyから足洗ってたとか余裕
身内同士でRubyはコードが美しいと四六時中自画自賛しているが、実はそれこそがRubyのガン
その美しいコードという名のーの為に一体どれだけの互換性と人的リソースが失われていったことか
Rubyのコードは美しい、Railsスゲー、ベタボメする人は沢山いたがいつも一過性の人気しか得られないのはそこにあるし
ベタボメしていた人達もしばらくするとウンザリしてRuby界から消えてしまうのも原因は実はそこにある
達人プログラマーはRubyをベタボメしなくなったし、Mongrel作者はRailsどころかRubyに見切りをつけちゃったしね
ああいう熱狂的なRuby信者でもRubyから足を洗っているのを見ると、tDiaryがRubyに見切りつけてPythonで全部書き直したとか言われても驚かないだろう自分がいる

379 :12/03/11
で、どこからの改変コピペ?

380 :12/03/11
いや、オリジナルだよ

381 :12/03/11
Mongrelの作者はRubyのチュートリアルPDF売って小銭稼いでた気がする
またtDiaryはmethod_missingやらinstance_evalやらで
Pythonで書いたらものすごく面倒になりそうな気がする
そのあたりどう? >>380

382 :12/03/11
ttp://d.hatena.ne.jp/cccc4/20111028/1319790950

383 :12/03/11
おっとこっちか
ttp://developers.slashdot.jp/comments.pl?sid=539858&cid=1993247

384 :12/03/11
たださんってスラドにもコメントつけるのね

385 :12/03/11
第 10 回 連結リスト - お気楽 Ruby プログラミング入門
http://www.geocities.jp/m_hiroi/light/abcruby10.html
ここを読んでいたのですが、質問があります。
連結リストの要素をcpという名前の変数に入れています。
cpとは何の略だと思われますか?

386 :12/03/11
pointer to carでcpだと思う
セルの左がcarで右がcdrっていうLisp用語

387 :12/03/11
最近Rubyの勉強を始めようかと思っているのですが
何か良い書籍はありますか?
プログラミング言語はよく新しくなるから
最新の書籍じゃないとだめだと聞いたのですが
どれがいいのかよくわかりません。

388 :12/03/11
>>386
なるほど! carですか。
Lispは少しかじったことがあるのですが、こういう所で言葉が使われてたりするとちょっと面白いですね。
ありがとうございまいた。

389 :12/03/11
>>387
Programming Ruby 1.9
原書: http://pragprog.com/book/ruby3/programming-ruby-1-9
訳書: http://www.amazon.co.jp/dp/4274068099

390 :12/03/11
ありがとうございます

391 :12/03/12
rubyってphpの<?php ?>とかないの?

392 :12/03/12
ないんじゃない?
あれはPHPじゃなくてXMLのPIだからどうとでもなるけど

393 :12/03/12
mod_ruby
<%〜%>

394 :12/03/12
むしろそんなもんPHPだけだろ
少なくとも素人でも知ってるような言語のデフォルトでは

395 :12/03/12
>>392


396 :12/03/12
>>394
PHPはHTMLに埋め込むことを第一コンセプトにしてるからな
アイデンティティだと言ってもいい
Rubyだとerbやerubyあたりで処理埋め込みができる
erbはRubyスクリプトとして出力ができて手軽で便利だが大量に処理すると遅い
erubyは明示的にerubyコマンドを通さないといけない(mod_rubyでも可)のでめんどいが大量に処理してもそこそこ速度

397 :12/03/12
>>394
jsp

398 :12/03/12
rubyでwebサイトを構築する場合ってCGIで動かすものでしょうか?
それともmod_rubyをつかって動かすものでしょうか?

399 :12/03/12
CGIだとロクなライブラリないよ

400 :12/03/12
JSPって言語だったんだーへーー

401 :12/03/12
JSPも知らんかったのかカス。死んどけ

402 :12/03/12
Japanese Sushi Party

403 :12/03/12
>>401

404 :12/03/12
>>398
最近はRackの規約を実装した何か(RailsとかSinatraとか)+Rackが載せられるサーバ

405 :12/03/13
require長くなってきたけどpythonみたいに一行にならなかったっけ

406 :12/03/13
http://toro.2ch.net/test/read.cgi/tech/1324826777/8
これなんですけど今日ダウンロードできるRuby1.9.3のWindows版はp0じゃなかったんですけどこれでもバグ多いですか?

407 :12/03/13
複数urlにアクセスする場合はopen-uriを使わずNet::HTTPのほうがいいって聞きました
どっちみちページ毎にアクセスするのでどっちも同じだと思うんですが何故ですか?

408 :12/03/13
>>401

409 :12/03/13
>>407
同一ホストにアクセスする場合はkeep-aliveで連続取得できるから
もちろんそれができる書き方しないとダメだけど

410 :12/03/13
Rubyとまったく関係ない質問になってしまいますが
keep-aliveで接続をキープしておくっていうのはサーバには嫌われませんか?

411 :12/03/13
>>410
Keep-Aliveが「お互いお得」になるのは、HTMLにくっついてる数十の細かい画像が全部HTMLと同じサーバにあるとかそういう場合
HTMLを数回ダウンロードしたりする程度なら、Keep-Aliveで開けっぱ指示するよりも
毎回コネクション開いて一瞬で閉じてリソースを毎回サーバに明け渡して相手の都合に合わせたほうが遥かにマシ
比較的大きな画像とかを連続ダウンロードするような場合も、sleep入れるならむしろKeep-Aliveは使ってはならない
まあ、問題が頻出するようならそのサーバのほうで適当に設定変えて数秒で切ってくれるようになるとは思うが

412 :12/03/13
入門書などで
require "open-uri"
doc = open("http://www.yahoo.co.jp/")
などとありますが、doc.closeというのは書かなくてもいいのでしょうか?

413 :12/03/13
いちいち単発でうざいなぁ
少しはググったりしたら?

414 :12/03/13
>>412
書かなくていい

415 :12/03/13
(*´・∀・)(・∀・`*)ヘー

416 :12/03/14
XCodeのMacRuby Applicationの環境で、msg = IO.popen('pbpaste', 'r+').read
とクリップボードから日本語の文字列を読み込むと、???????のように文字化けするのですが、
何か対処方法のヒントをいただけないでしょうか。
コンソール画面から"ruby clipboardRead.rb"のように実行すると、問題なくクリップボードから日本語を読み込めるので、
XCodeの環境設定の問題のような気がしています。Lion上で、XCode4.2.1を使用しています。

417 :12/03/14
まつもとさんが軽量rubyとやらをつくっているそうだか、
これってJITを搭載してたりするの?
>>412
content = open(url) {|f| f.read }
とすれば書かなくていい

418 :12/03/14
>>411
なるほど
そういうことでしたか
相手側のサーバに迷惑かけるとまずいので1秒毎にアクセスするようにしてるのでやっぱりkepp-aliveは使えないです
ただ、現状keep-aliveに対応しているサーバは少ないような気がします

419 :12/03/14
>>417
↓見ると、PCで中間言語にコンパイルするようだ。
組込み分野での活用が期待される 軽量Rubyへの取り組み 技術トピックス
ttp://www.tjsys.co.jp/documents/pdf/download/wave/wave-15/Wave-15-18.pdf
>従来のRubyはスクリプ ト言語であるため、イン タープリターによってソー スコード
>そのままの状態で走らせますが、組込みRubyの場合は それとは異なる動作環境になり
>ます。まず開発用のPC上でソー スコードを記述し、次にRubyコンパイラによって中間
>言語(Java でいうバイトコード)に変換します。そして、生成された中間言語 を、ターゲット
>の機器で解釈しながら実行するRuby VM(バー チャルマシン)の上で動作させます(図-1)。
>これにより、従来の Rubyと比較してメモリ消費量が抑えられ、さらにRuby VMを支援
>するハードウェアロジックを搭載した専用チップにより高速に 動作させることができます。
>このRuby VMを支援するための専 用ロジックを搭載したチップをRubyチップと呼んでいます。

420 :12/03/14
実際に組み込んだブツの報告
ttp://www.slideshare.net/seil_smf/seil-mruby-20120203

421 :12/03/14
>>413

422 :12/03/14
>>412
content = open(url) {|f| f.read }
としない場合は書かないといけない

423 :12/03/14
>>416
追加の説明です。
ためしに「日本語」という文字列をクリップボードにコピーして、terminal上で
pbpaste > ~username/ja.txt
と実行すると、ja.txtに「日本語」と出力できているのですが、
一方、XCodeでMac Ruby Applicationを新規作成して、
IO.popen('pbpaste > ~username/ja.txt', 'r+').read
のコードを実行すると、ja.txt内が「???」という文字列に置き換わってしまいます。
どなたか原因がお分かりのかた、よろしくお願いします。

424 :12/03/14
そもそもXCode対応してたっけ

425 :12/03/14
OSX 10.5 だと、ターミナル上でもpbpasteの出力は文字化けするね
どうやらSHIFT JISコードみたいだから、文字コード変換が必要だった
$ pbpaste | nkf -S -w

426 :12/03/14
>>424
RubyスクリプトをAPP化するためだけにXcodeを使ってるのですが、
やはりどっか細かい問題は出てきますか
>>425
IO.popen('pbpaste | /opt/local/bin/nkf -S -w > ~username/ja.txt', 'r+').read
と実行してみましたが文字化けしたままでした。
OSX 10.7.3です。

427 :12/03/14
ターミナルで以下を実行すると何が出力される?
【OSX 10.5.8の実行例】
$ pbpaste | nkf -guess
Shift_JIS

428 :12/03/14
>>427
UTF-8
Xcode上で、
IO.popen('pbpaste | /opt/local/bin/nkf -guess > ~/ja.txt', 'r+').read
と実行するとASCIIと出ました。???がそのまま判定されてるっぽいですが。

429 :12/03/14
pbpasteのman(OSX 10.6.6)を見ると、以下のように書かれているから、
https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/pbpaste.1.html
pbcopy and pbpaste use locale environment variables to determine
the encoding to be used for input and output. For example,
absent other locale settings, setting the environment variable
LANG=en_US.UTF-8 will cause pbcopy and pbpaste to use UTF-8 for
input and output. If an encoding cannot be determined from the locale,
the standard C encoding will be used. Use of UTF-8 is recommended.
Note that by default the Terminal application uses the UTF-8 encoding and automatically sets the appropriate locale environment variable.
OSX 10.7のmanを確認した上で、たとえば
LANG=ja_JP.UTF-8 pbpaste > ~/ja.txt
とやってみるとか

430 :12/03/14
>>429
>LANG=ja_JP.UTF-8 pbpaste > ~/ja.txt
これで、うまく行きました。
半ば諦めモードに入ってました。すごい。ありがとうございます。

431 :12/03/14
最初にman嫁よw

432 :12/03/14
連番でファイルリネームしようとしたら間違ってファイルが亜空間に消え去ったでござる

433 :12/03/15
>> 416
クリップボード(Mac だとペーストボードが正式名称だが)
から文字列を MacRuby で取得するだけなら、
NSPasteboard.generalPasteboard.stringForType(NSStringPboardType)
と Cocoa API を叩いた方が早い

434 :12/03/15
>>419
さんくす。あらかじめバイトコードを吐き出しておいて、それを実行時に読み込むのね。
組み込み向けなら、この仕様は納得だな。
VMは、YARVとは違うのかな。

435 :12/03/15
すいません松本先生のツイートでこれを発見したんですけど
これはなんですか?
ttp://0xfe.muthanna.com/rubyrefresher/

436 :12/03/15
>>435
Rubyをすばやくおさらいする。
かつて修得した人向け。

437 :12/03/15
すっげ分かりにくいまとめだな。外人さんには分かりやすいのか?

438 :12/03/15
こういうのは自分で記憶の怪しい部分を書き溜めておくものだろ
取っ掛かりとして他人のを借りるのは悪くない

439 :12/03/15
refresh なんだから、少なくともスレ対象のような初心者がスタート地点として使うものじゃない。

440 :12/03/16
質問です。配列の中身を正規表現を使って取りだしたいのですが

441 :12/03/16
すいません。送信してしまいました。
str = ["あ", "い" ,"う",]
という配列の中身を正規表現を使い「い」だけ取り出したいのですが
if /い/ =~ str
という書き方だとエラーが出ます。
どのような書き方をすればいいのでしょうか?

442 :12/03/16
str は String の略で、おおむね文字列オブジェクトを指す、うまい名前が思いつかないとき用の変数名だ
配列なら Array なので a とか arr とかを使う
もちろん、もっと内容に合った変数名があるのなら、そちらを極めて強く推奨する
文字列が入った配列だからといって str を全面に出されるとものすごく混乱する
で、Rubyはオブジェクト指向言語なので、あらゆる「もの」はオブジェクトであり、特定のクラスのインスタンスだ
また、ほとんどの動作はメソッドであって、受け取れるオブジェクトがたいてい決まっている
/正規表現/ =~ 文字列 は正規表現クラスのメソッド「=~」で、このメソッドは文字列(か、そのように振舞えるオブジェクト) のみを受け取る
ということで、 /正規表現/ =~ の右側には文字列を持ってこないといけない
いろいろ書き方はあるんだけど、文字列の入った配列があるので、配列をeachで枚挙して配列要素の文字列を正規表現でチェックすることにする
arr = ["あ", "い" ,"う"]
arr.each do |s|
puts 'いがあったよ!' if /い/ =~ s
end
これがたぶん簡単
正規表現としては「い1文字が含まれていればなんでもいい」なので、「いぬ」でも「丸い」でもヒットしてしまうけど
い1文字だけなら /\Aい\Z/ になると思う

443 :12/03/16
>>441
ifの後に何をしたいかにもよるが、含まれてるか否かが判ればいいなら、
if /い/ =~ str.to_s

444 :12/03/16
Rubyには失望させられた
>> ["あ", "い" ,"う"].include?("い")
=> true
>> ["あ", "い" ,"う"].include?(/い/)
=> false

445 :12/03/16
irb(main):001:0> ["あ", "い" ,"う"].any? { |str| /い/ =~ str }
=> true
irb(main):002:0> ["あ","う"].any? { |str| /い/ =~ str }
=> false

446 :12/03/16
>>444
オブジェクト指向言語における「おなじ」は、大別して3つある
その1、オブジェクトIDが同一
その2、データとして同一(オブジェクトIDは違う)
その3、データとしては違うんだが利便性を鑑みて同じとみなす
その1はObject#equal?がある
irb> p "a".equal?("a")
false
irb> s = "a"; p s.equal?(s)
true
その2は==メソッドやeql?メソッドで、クラスごとに定義が違うことがある
irb> p "a" == "a"
true
その3はなんでもいいんだが、公式にはcase用の===メソッドが該当する
irb> p /a/ === "a"
true
irb> p (1..3) === 2
true
さて、Array#include? で使用すべきなのはどれ?

447 :12/03/16
正規表現は同値性の比較って難しい/効率が悪いのかね

448 :12/03/16
正規表現と文字列の「マッチするかどうか」という関係が特別過ぎるんだよ
[Time.parse("2012-03-16 15:06:58 +0900")].include?(1331878027) が false でも誰も文句言わないのに
["abc"].include?(/a/) が false だと文句言われる

449 :12/03/16
ずれてた
[Time.parse("2012-03-16 15:06:58 +0900")].include?(1331878018)
だった
どうでもいいけど
include? で正規表現が動作したらいいなというのはわからなくもないんだが、残念ながら動作しない
/re/ == "re" を true にするわけにもいかず、かといって include? 内部で正規表現だけ特別扱いするわけにもいかない

450 :12/03/16
447だけどそんなことはなかった
irb> r1 = /あ/
=> /あ/
rb> r2 = /あ/
=> /あ/
rb> p r1.object_id, r2.object_id
13661240
13643640
=> [13661240, 13643640]
rb> [r1].include? r2
=> true
>>444のは ["あ", "い", "う"] の中に /あ/ は含まれていますか、という質問だから
falseを返すのは当然

451 :12/03/16
>>446
オブジェクトの同値性判定がObjet#equal?の実装に
依存するうんぬんという考え方そのものは正しいと思うけど、
今回のケース(>>440)は正規表現の一致(Regexp#match)に関する話題だから、
ピント外れな気がする

452 :12/03/16
>>441 の者です
みなさんありがとうございました!

453 :12/03/16
何度も質問申し訳ないです
arr = ["ごりら", "りんご", "りす"]
if /^り[あ-ん]+$/s =~ arr.to_s
puts $&
else
puts "ない"
end
正規表現を使い、りんご、又は、りすがあるかどうか検索し
あった場合、その文字列を表示したいのですが
上のプログラムの場合検索がされず「ない」が表示されてしまいます。
何がダメなのでしょうか?

454 :12/03/16
>>453
正規表現にマッチするものが配列の中にあるか、みたいなのは =~ では一気にできないよ
なのでループして配列の中身1つ1つに対してマッチするか確かめないとダメ。
てなわけでもっと詳しい>>452のコードと解説参考にするといいよ

455 :12/03/16
>>454
わかりました!ありがとうございます!!

456 :12/03/16
半角の「英大文字と英小文字と数字と記号」の一覧を配列として得たいのですが、どうするのがスマートですか
現在は
ary = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890!#%&'()=~|{}`*+-_?><,./[]:;@^\\\$\"".split('')
で得ていますが、ちょっと格好悪いような気がするんです

457 :12/03/16
あ…半角スペース忘れてた…愚直にやってるので、こういったことも起こりやすいと思います…

458 :12/03/16
ふつうはそんな配列を必要としたりはしない
それで何やる気なのが言ってみれば別の解決策が

459 :12/03/16
>>456
(0x20..0x7e).inject([]) { |ary, n| ary << [n].pack("c") }
初心者なのでこのくらいしか思いつかない。

460 :12/03/16
(0x20..0x7e).to_a.pack("c*").split(//) でいいのか。

461 :12/03/16
(0x20..0x7e).map(&:chr)

462 :12/03/16
0x20..0x7eってなんですか

463 :12/03/16
7ビットの範囲で、制御コード(0x00-0x1F)とDEL(0x7F)を除いたもの。
(0..127).map(&:chr).select{|c| /[[:print:]]/ =~ c }
これは、7ビットのコード全体から印字可能文字を得る。

464 :12/03/16
話が逸れますが
ASCII-8BITというエンコーディングは、名前こそASCIIだけどどんな文字集合でも許容されると考えていいのかな?
つまりエンコーディング情報を持たない文字列に対して、便宜上名前をつけてる、という認識で合ってますか?
US-ASCIIは、ASCII文字のみが含まれるんですよね?

465 :12/03/16
さあ、どうなんでしょう…?
>>459-463
ありがとうございます、やってみます
>>458
(半角文字で構成された)ランダムな文字列(長さは任意、長いほうが良い)を生成するのに使いたいのですが、もっと良い方法がありますでしょうか…?

466 :12/03/16
>>465
よせや俺に礼などいらん
>>463
ありがとうございます

467 :12/03/16
>>464
> ASCII-8BIT
ばいなりぃ
思いっきり厳密にしかもわかりやすくと思ったら変な造語になって余計わかりにくくなった例
ASCII互換8BIT文字列の意味で、名前こそASCIIとかそういうレベルではない

468 :12/03/16
本当は後半の8BITのほうに注目して欲しいんだけど、メリケンピーポーな人とかは前半のASCIIの部分しか見てくれないよね
最近はもう説明も解説もめんどくさいのでEncoding::BINARYを使うことにしてる

469 :12/03/16
>>467
binary という別名も登録されているからそちらを使うのが分かりやすいかも。
[2] pry(main)> Encoding.find("binary")
=> #<Encoding:ASCII-8BIT>

470 :12/03/16
もしかしてASCII-IBITってrubyだけの用語?

471 :12/03/16
× ASCII-IBIT
○ ASCII-8BIT

472 :12/03/17
多分そう。
ASCIIと互換性がある8bit文字列 (バイト列) 程度の意味合いじゃ内かなあ。
[9] pry(main)> Encoding.find("ascii-8bit").ascii_compatible?
=> true
個人的にはこれが意外。IRC関係ではまった。
[10] pry(main)> Encoding.find("iso-2022-jp").ascii_compatible?
=> false

473 :12/03/17
>>385
Current Position かなぁ

474 :12/03/17
今日はputs("hoge")を覚えた。ルビリストに近づいてきたな(´・ω・`)

475 :12/03/17
俺なんてprint("hoge")までおぼえたんだぜ(=´∀`)人(´∀`=)
また一歩すぱーるびすとに近づいてしまった

476 :12/03/17
$stdout.print "hage"

477 :12/03/17
# ruby serr.rb > 1.txt
$stderr.print "stderr"
$stdout.print "stdout"

478 :12/03/17
open-uriでwikipediaにアクセスしようと思ったけど、たまに存在するのに失敗するページがあるみたいです。
鯨飲はなんでしょう。ブラウザで開けれるのに、ptyhonで書いてもダメでした。
こことか http://ja.wikipedia.org/wiki/%E9%9D%92%E5%B3%B6%E5%88%83

479 :12/03/17
ruby1.9で、
require "open-uri"
open("http://ja.wikipedia.org/wiki/%E9%9D%92%E5%B3%B6%E5%88%83"){|file|p file.read}
とやって、うまくできてるみたいだけど。

480 :12/03/17
>>478
「失敗」というのはありえない
Rubyにおけるほぼ全ての処理は成功を返すか、でなければ例外を吐いて落ちる
例外が出たなら例外が出た意味を考えて処置するべき
「失敗した」「壊れた」「動かない」というのは現在のプログラミングでは極めて稀で、ほぼ必ず付帯した状況の情報があるはず
で、WikipediaはUserAgentを見て403を返すことがある
UserAgentが空っぽか、一般的なWebブラウザではない場合に弾かれることがある
require "open-uri"
html = open('http://ja.wikipedia.org/wiki/%E9%9D%92%E5%B3%B6%E5%88%83', 'User-Agent' => 'open-uri Ruby/1.8.7').read
puts html.scan(/<title>(.+?)<\/title>/)[0].flatten
みたいなのでどう

481 :12/03/17
>>480で読み込めました。ありがとうございました。
あと>>478の「失敗」は「例外」のことでした、正しく書くよう気をつけます。

482 :12/03/17
>>481
ここは初心者スレだから100点満点の質問を期待しているわけじゃないから
専門用語の用法間違い(今回は X:失敗, O:例外)くらいはしかたないと思うけど、
・試してみたコードの断片のコピペ
・表示されたエラーメッセージのコピペ
くらいは気にした方がしたほうがいいと思われ

483 :12/03/17
>>453
arr = ["ごりら", "りんご", "りす"]
str = arr.to_s
puts str
してみれば分かるようにarr.to_sでは["ごりら", "りんご", "りす"]という1つの文字列が生成される
str = '["ごりら", "りんご", "りす"]'と同じ。
if /^り[あ-ん]+$/s =~ arr.to_s
この正規表現は先頭が「り」であり、その後ろに「あ-ん」の中の文字が続くものにマッチする。
arr_to_sの先頭は[であるのでこの時点でマッチしない。
正規表現をこの様に変えればマッチはするようになる: if /り[あ-ん]$/s =~ arr.to_s
しかし結果は望んだものとは違うだろう。望んだ結果を手に入れるには他に人が言うようにループを使う。

484 :12/03/17
訂正
X 正規表現をこの様に変えればマッチはするようになる: if /り[あ-ん]$/s =~ arr.to_s
O 正規表現をこの様に変えればマッチはするようになる: if /り[あ-ん]+/s =~ arr.to_s

485 :12/03/17
>>483はなにもわかっていない
どうして>>453が「間違った」のかもたぶんわかんないんだろう

486 :12/03/17
単純にArray#grepじゃあかんの?

487 :12/03/17
=== の結果が真になればいいんだから、今回に限っては grep で用が足りるな
=== の意味がわかってもらえてない場合、小手先のオマジナイになってしまうけど…

488 :12/03/17
>>485
俺のレス最期まで読んでないんじゃないか

489 :12/03/17
「○○だとなぜかできる」ってやつだな
なぜかじゃねーよ

490 :12/03/17
>>485
自分の知ってること書きたかった典型だよね
何の関連性もない

491 :12/03/17
なぜelseに行くのか分かってなさそうだったからその理由を説明しただけだが

492 :12/03/17
>>483
>str = '["ごりら", "りんご", "りす"]'と同じ。
irb(main):001:0> arr = ["ごりら", "りんご", "りす"]
=> ["¥343¥201¥224¥343¥202¥212¥343¥202¥211", "¥343¥202¥212¥343¥202¥223¥343¥201¥224", "¥343¥202¥212¥343¥201¥231"]
irb(main):002:0> str = arr.to_s
=> "¥343¥201¥224¥343¥202¥212¥343¥202¥211¥343¥202¥212¥343¥202¥223¥343¥201¥224¥343¥202¥212¥343¥201¥231"
irb(main):003:0> puts str
ごりらりんごりす
=> nil

493 :12/03/17
irb(main):001:0> arr = ["one", "two", "three"]
=> ["one", "two", "three"]
irb(main):002:0> str = arr.to_s
=> "[\"one\", \"two\", \"three\"]"
irb(main):003:0> puts str
["one", "two", "three"]
=> nil

494 :12/03/17
Tempfileってどんな時に使うの?
StringIOとかでゴリゴリやれば大抵済んじゃわない?

495 :12/03/17
>>444
["あ", "い" ,"う"].include?("い") # => true
[/あ/, /い/ ,/う/].include?(/い/) # => true

496 :12/03/17
http://jp.rubyist.net/magazine/?0029-BundledLibraries

497 :12/03/17
>>494
1GBとかでかい文字列を扱うがメモリ上に置きたくないときとか?
俺もよくわかってないからもっと例があれば知りたい

498 :12/03/17
tempfileにしたって扱ってる時はメモリに乗ってるでしょ

499 :12/03/17
rubyでgtkのアプリケーションを作ってみたいんですが、詳しく解説してる書籍はありませんか?

500 :12/03/17
Rubyのマニュアルを引用したいのですが
ライセンスはどのページに載ってるか分かりますか?

501 :12/03/17
http://doc.okkez.net/static/193/doc/license.html
「引用」なら法律の定める引用の条件を満たせばいいわけだが。

502 :12/03/17
回答レスしてから、リファレンスマニュアルは「思想感情を創作的に
表現したもの」なのか気になった。

503 :12/03/17
これってドメインが公式サイトのじゃないんですが
このライセンスで問題ないのでしょうか?
ライセンスによっては丸ごと引用してそこにサンプルを充実する形で使いたいのですが

504 :12/03/17
ごめんこっちに収容されてるのでこっちで。
http://doc.ruby-lang.org/ja/1.9.3/doc/license.html

505 :12/03/17
Array#pushとArray#<<って、リファレンスでも「同じ」って書いてあるけど
使い分けなきゃならないような状況ってありますか?
自分は見た目の好みで<<を使ってて今のところ困ったことはないんですけど

506 :12/03/17
arrayをスタックとして使っている場合にはpush/popを使うようにすると
Matzが夢の中で褒めてくれるイベントが発生する

507 :12/03/17
>>504
ありがとうございます

508 :12/03/17
>>499
Ruby/GTKそのものに関する書籍は知らないなぁ。
紙でGTK+の本自体がとても少ない。
こういうの参考にするとか。
ttp://en.wikibooks.org/wiki/Ruby_Programming/GUI_Toolkit_Modules/GTK2

509 :12/03/18
>>505
有名な例だが、Rubyではカウンタ付きループを
5通りぐらいの方法で書ける
どれが採用されるかは状況によって異なる
たぶんだが、Ruby使いの多くはそれが悪いことだとは考えていない
Perlの「やり方はいろいろある」の影響と言えるかもしれない

510 :12/03/18
>>506
>>509
基本的に無いってことか
ありがとうございます

511 :12/03/18
画像を取得するプログラムを書きました。関数は5個くらい作りました。
これをクラスにして使いやすいようにまとめたいんですが、
保存するディレクトリの指定なんかは、コンストラクタに引数で渡すのと、定数で設定しておくのでは
どちらが合理的な書き方なんでしょうか?

512 :12/03/18
>>511
どっちでもいけるのがいい方法
def initialize(savedir=DEFAULT_SAVEDIR)

513 :12/03/18
先頭の全角空白の有無を正規表現を使って判定したいのですが、
以下のように[]で括って記述するとひらがなやカタカナが引っかかります。
/\A[ ]/ =~ string
どうすれば全角空白のみを正しく判定できますか?
最終的に、いくつかの全角文字もまとめて判定したいので、[]は使いたいです。
/\A[ 「(『]/ =~ string

514 :12/03/18
ん、それで正常に動くだろ?
ary = ["あいうえお","アイウエオ", " あいうえお"," あいうえお"]
for str in ary
if /\A[ ]/ =~ str
print "match"
else
print "false"
end
puts ": #{str}"
end
false: あいうえお
false: アイウエオ
false: あいうえお
match:  あいうえお

515 :12/03/18
>>514
UTF-8だと、
match: あいうえお
match: アイウエオ
false: あいうえお
match:  あいうえお
となりました

516 :12/03/18
UTF-8でも" あいうえお"にしかヒットしないな。ちゃんとUTF-8で保存してる?

517 :12/03/18
$operator = {
'+'=>lambda{
b = $stack.pop
a = $stack.pop
$stack.push(a+b)
},
'-'=>lambda{
b = $stack.pop
a = $stack.pop
$stack.push(a-b)
}
}
上記はスタックで逆ポーランド記法で書かれた数式を計算させるプログラムのoperator定義部分です。
重複している部分があるのでそこを関数化したいと考えました。そのためには"+"という文字列を関数に
変換しなければならず、考えた末evalを使いました。もっと良い方法は無いでしょうか?お教えください。
def makeOperater(op)
lambda{
b = $stack.pop
a = $stack.pop
$stack.push(eval(a.to_s + op + b.to_s))
}
end
$operator = {
"+"=>makeOperater("+"),
"-"=>makeOperater("-"),
}

518 :12/03/18
>>516
SJISで保存した場合と、UTF-8で保存した場合で実行結果が変わります。
OS環境はLIONです。
ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]
(SJIS保存)% ruby test.rb | nkf -u
false: あいうえお
false: アイウエオ
false: あいうえお
match:  あいうえ
(UTF-8保存)% ruby test.rb
match: あいうえお
match: アイウエオ
false: あいうえお
match:  あいうえお

519 :12/03/18
>>517
{ '+'=>'+', '-'=>'-' } をさらに短くしてくださいと言っているようなもの
それ以上は短くならないし、やっても無駄

520 :12/03/18
>>517
def makeOperater(op, &fn)
  lambda{
    b = $stack.pop
    a = $stack.pop
    $stack.push(fn.call(a, b))
  }
end
$operator = {
  "+" => makeOperater("+") { |a, b| a + b },
  "-" => makeOperater("-",) { |a, b| a - b }
}

521 :12/03/18
1.8.7において、エンコーディングオプションのない正規表現リテラルの
エンコーディングは$KCODEの値に従う。デフォルトではマルチバイトを
考慮しない n なので、 /¥A[ ]/ はスクリプトが
UTF-8 で書いてあれば /¥A[¥xe3¥x80¥x80]/ と同値。
Shift_JIS で書いてあれば /¥A[¥x81¥x40]/と同値。

522 :12/03/18
細かい所を訂正して再カキコ
>>517
def makeOperater(&fn)
  lambda {
    b = $stack.pop
    a = $stack.pop
    $stack.push(fn.call(a, b))
  }
end
$operator = {
  "+" => makeOperater { |a, b| a + b },
  "-" => makeOperater { |a, b| a - b }
}

523 :12/03/18
>>521
$KCODE = 'UTF8'と書き加えると、うまく判定できるようになりました。
ありがとうございます。

524 :12/03/18
windowsでruby1.9にrailsをインストールしようとしたのですが失敗しました。
ファイルパスに空白が出ている事が原因だと思われるのですが、
現在のrubyをアンインストール後空白を含まない場所に再インストールする以外の道はないでしょうか?
>gem install rails
Building native extensions. This could take a while...
ERROR: Error installing rails:
ERROR: Failed to build gem native extension.
"D:/Program Files (x86)/Ruby-1.9.2/bin/ruby.exe" extconf.rb
creating Makefile
nmake
Microsoft (R) Program Maintenance Utility Version 7.00.8882
Copyright (C) Microsoft Corp 1988-2000. All rights reserved.
D:\Program Files (x86)\Ruby-1.9.2\bin\ruby -e "puts 'EXPORTS', 'Init_parser'" > parser-i386-mswin32_100.def
'D:\Program' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
NMAKE : fatal error U1077: 'D:\Program' : return code '0x1'
Stop.

525 :12/03/18
>>508
ありがとうございます。
オンラインのドキュメントを当てにするしか無いようですね。

526 :12/03/18
>>517
def makeOperater(op)
lambda{
b = $stack.pop
a = $stack.pop
$stack.push(a.send(op,b))
}
end
#っていうのはどうか?
1+2 #は
1.+(2) #でもあり
1.send('+',2) #と等価

527 :12/03/18
三項演算子で複数の値を返すことは出来ませんか?
def nantoka(a, b)
 puts a, b
end
nantoka condition ? "a", "b" : "c", "d"

528 :12/03/18
nantoka *(condition ? ["a", "b"] : ["c", "d"])

529 :12/03/18
>>528 ありがてぇ・・・
ありがとうございます

530 :12/03/18
カウンタ付きループで無限までのを簡単に書く方法はありますか?
例えば
i=0
while(条件)
i=i+1
計算
end
みたいなのを1行で書く方法はありますか?

531 :12/03/18
>>530
こういうこと?
i=0; while(条件); i += 1; 計算; end

532 :12/03/18
>>531
i=0とかi=i+1を書かなくてもすむような書き方はないでしょうか。
for ever とか endlessとか。
範囲が決まってればこんな形でかけるのですが……
(1..100).each{|i|puts i}

533 :12/03/18
こういうのとか。
(0..Float::INFINITY).each{|i| puts i; break if i > 10}
2.0だとlazy enumeratorが導入されるので、明示的に止めなくてもよくなる。

534 :12/03/19
>>533
おお。ありがとうございます。
チャンパーノウン定数のn桁目を計算するプログラムを書いてて、1から無限にループする(例えば(1..).each{|i|puts i} みたいなのがあればなぁと思ってました。

535 :12/03/19
>>512
ありがとうございます。

536 :12/03/19
ruby 1.8.6にjsonのgemを入れようとしたらAbort trapというエラーが出てきて前にすすめません。
そもそもAbort trapってどういう時にでるエラーなんですかね。。
どなたか解決法ご存知ですか?
ちなみにrvm使っています

537 :12/03/19
>>522,528
レス有難うございます。別記したブロック関数を渡す方法や、sendで文字列を渡す方法があるのですね。
sendの方法は良いですね。文字列を直接メソッド名として扱えていて、この様な方法があればと思っていました。
ブロックの方法もrubyらしさが出ていますね。
レスありがとうございました。

538 :12/03/19
失礼・・>>526さんでした。

539 :12/03/19
ファイルから「赤澤」の文字列を取り出してファイル名にすると「莎ゆ召」に化けてしまいます。(「表表」は大丈夫でした。)
test.txt側はいじらずに正しくファイルを作れないでしょうか。
[test.txt](utf-8n)
赤澤
[test.rb](utf-8n)
#! ruby -Ku
require "kconv"
path = open("test.txt",'r:utf-8').read.tosjis
open( path ,'w:utf-8')

540 :12/03/19
>>539
OSとかRubyのバージョンとかわからないけど、、
open("test.txt",'r:utf-8').read.tosjis
のところで、変換元文字コードの推測が誤ってるんでは?
Kconv.guess(open("test.txt",'r:utf-8').read) したらなに返ってくる?
open("test.txt",'r:utf-8').read.kconv(Kconv::SJIS, Kconv::UTF-8)
みたいな感じで、in と out のエンコーディングを明示的に指定したらいかかでしょうか?

541 :12/03/19
>>540
上手く変換できました、ありがとうございます。
path = open("test.txt",'r:utf-8').read.kconv(Kconv::SJIS, Kconv::UTF8)
(kconv::UTFの-が多かったです。)
p Kconv.guess(open("test.txt",'r:utf-8').read)
は 2 でした。EUC-JPだと推測されてたってことですよね・・・今度から明示します。

542 :12/03/19
>>541
おっとこれは失礼。
2 て何かと思ったら、Ruby-1.8.xだとそうなるのか。
別にいいけど、なんで1.8使ってらっしゃるの?

543 :12/03/19
2008年にリリースされた1.8.7版は当時としてもクズであり、詐欺寸前のJavaからの移行などを
謳い文句に多数の方を阿鼻叫喚の地獄へ叩き落しました。心より情弱乙と申し上げます。
当然、今後も使う奴は真性のバカであります。開発者は1.8に完全に飽きました。
これからは1.9使うよな当然。

544 :12/03/19
>>536
せめて1.8.7使ってくれ。

545 :12/03/19
Ruby1.9以降だとKconvじゃなくてString#encodeを使ったほうがいいんじゃないだろうか
open("test.txt",'r:utf-8'){|f|f.read} でUTF-8の文字列が得られてるはずで
文字列がちゃんと自分がUTF-8だってことを知っているので
path = open("test.txt",'r:utf-8'){|f|f.read}.encode('sjis')
でいいような
あと、openして読むだけなら
IO.read("test.txt",mode:'r:utf-8')
とかの方がいいと思う
ひょっとして1.8なのだとしたら
openのmode引数でエンコーディング指定できないので
utf-8などと書いても無視されてるだけなんじゃ
ところで、Ruby 1.9.3でも
Kconv.guess("赤澤".encode('UTF-8')) # => #<Encoding:EUC-JP>
ってなる
短すぎて誤判定してしまうのね
でも、KconvのString#tosjisとかは元のStringのエンコーディングを利用したほうがいいと思うな
ASCII-8BITだけ、自動判別するとか

546 :12/03/19
>>536
ruby-1.8.6 なのはアレとして、OS Xだったらこんなんあったけど
ttp://d.hatena.ne.jp/MonteCut/20111121/1321887844

547 :12/03/20
ウィキ作った。
書くの手伝って。
http://goo.gl/1Cysg

548 :12/03/20
>>547
なにを?

549 :12/03/20
>>544
サーバーの都合で1.8.6なんです。
普段は1.9系使っています

550 :12/03/20
>>546
ありがとうございます。
でも他のバージョンでは普通にgem入ったんですよね、、、
仕方ないのでファイルの中の使いたいgemを1.8.7からコピペしてなんとかうごきましたw

551 :12/03/20
またまた質問があります。
ttp://d.hatena.ne.jp/uk-ar/20110508/1304841777
これと同じように、
open(url,"r",{:ssl_verify_mode=>OpenSSL::SSL::VERIFY_NONE}) do |f|
みたいな記述をしたいのですが、
1.9系からしか対応していないみたいで、、
どなたか1.8.6でこれと同じような動きをさせる書き方知りませんか?

552 :12/03/20
ググれカス

553 :12/03/20
>>552
精一杯ググってこれでした
ttp://d.hatena.ne.jp/uk-ar/20110508/1304841777

554 :12/03/20
はい次の方どうぞー

555 :12/03/20
>>553
真剣?こういうのでよろしいのか?
ttp://snippets.aktagon.com/snippets/370-Hack-for-using-OpenURI-with-SSL

556 :12/03/20
>>555
ありがとうございます。
私も同じくこのページを発見し、
しかしproxyのhttp以下に記入するurlがわからずw
とりあえずhttpsのアドレスのhttpsをhttpにして試してみたのですが、
エラーがでてしまってダメだったんですよね。。

557 :12/03/20
(SSL的には禁じ手ではあるが)VERIFY_PEER を VERIFY_NONE 相当にして
ごまかすってのが本質なんだから :proxyのとこまで真似する必要ないだろ。

558 :12/03/20
そんなことしていいのか?

559 :12/03/20
>>547
書く内容と報酬を教えろ

560 :12/03/20
>>559
これ、Perlスレにもあったぞ

561 :12/03/21
みんな1.9に行くの(´・ω・`)?

562 :12/03/21
>>561
REEに移行とか?REEて1.8ベースだけど、コード修正なしで動くんかね

563 :12/03/21
>>551
555が教えてくれたページを参考に、書いてみた。1.8.7で動作確認ずみ。
require 'open-uri'
require 'openssl'
OpenSSL::SSL.send(:remove_const, :VERIFY_PEER)
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
url = 'https://www.google.co.jp/'
html = open(url) {|f| f.read }
puts html

564 :12/03/21
>>558
自分が何をしているのか、どういう意味があるか分かっているなら
自分の足を撃つのはそいつの勝手。

565 :12/03/21
>>511
Rubyは通常は関数じゃなくてメソッドだし、コンストラクタと呼ばれるものもない
というか、他言語における実装依存のコンストラクタの動作を期待されてしまうので、コンストラクタという語は不用意に使わんほうがええ
コンストラクタというものが一般になにかオブジェクト指向とかで規格化されているというわけではない
イニシャライザってのもなんかピンと来ないけどな…消しゴムかよ
class ImageSaver
DEFAULT_SAVEDIR="./dowmload_images"
def initialize(savedir=DEFAULT_SAVEDIR)
...
@savedir = savedir
end
attr_accessor :savedir
def get(uri)
path = File.join(savedir, uri.path)
File.open(path,'w'){|f| f.print(uri.read)}
end
end
こんな感じ?
個人的にはクラスを作ったなら関数的メソッド時代の定数をそのまま使うのはあんまり利がないと感じる
isaver = ImageSaver.new; isaver.savedir で実際の(ユーザー指定込みでの)保存ディレクトリを得られるわけだし
デフォルトを変更するのも定数文字列だからめんどくさいし、デフォルトの変更なら new の引数でやって欲しいし

566 :12/03/21
新しい物好きの初心者の俺にとっては早くredmineが1.9.3対応してくれることを願う

567 :12/03/21
コンストラクタって方言だよね

568 :12/03/21
どんなプログラミング言語においても、詳細に見ればそれぞれの言語固有の
意味が割り振られている、という意味では、どんな語も方言だよ。

569 :12/03/21

あ→3042
「あ」を3042に変換できるメソッドを教えてください
名前がよくわからずUnicode?に変換するのはRubyで何を使って出来ますか?

570 :12/03/21
コンストラクタという語自体はオブジェクト指向プログラミングの概略で出てくると思う
世の中のコンストラクタの98%はそれじゃなくてJavaあたりの特定の動作のコンストラクタを指してるとは思うが
>>569
Unicode文字列を16進数のUnicodeコードポイントに変換
"あ".unpack('U')[0].to_s(16)
=> "3042"
文字列なので注意
"あいう".split(//).map{|x| x.unpack('U')[0].to_s(16)}
=> ["3042", "3044", "3046"]

571 :12/03/21
>>570
pupackとto_sですね
コードありがとうございます

572 :12/03/21
本を読む習慣が無いひとには
おおまかに次の3つのタイプがあります
1.目が悪いひと
2.頭が悪いひと
3.文盲(識字出来ない)
頭が悪いひとより文盲の方が深刻です
普通は漢字が読めないレベルとかを想像しますが
アルファベットですら読めないひとが日本には多くいます

573 :12/03/22
俺は
読まなくても世渡りできるひと
学習効率が凡人とは違うので、必要になったときに知識を得るだけ。

574 :12/03/22
マルチに反応すんな

575 :12/03/22
馬鹿には無理

576 :12/03/22
PHPを毛嫌いしてたあの松本先生がついにPHPネタをリツイートしました!
これはPHPの完全勝利を意味します!

577 :12/03/22
こっちでやると食いつきいいよ
Rubyについて Part46
http://toro.2ch.net/test/read.cgi/tech/1324826777/

578 :12/03/22
よしそっちに出張するか

579 :12/03/22
>>569
Ruby1.9だと
"あ".encode('UTF-8').ord.to_s(16)
=> "3042"
"あいう".encode('UTF-8').codepoints.map{|c|c.to_s(16)}
=> ["3042", "3044", "3046"]

580 :12/03/23
ネットで学習するなら定番の際とってありますか?

581 :12/03/23
定番じゃないけど、こないだドットインストールで対応したから
あれためしてみたら?

582 :12/03/23
'p'がSJISに変換できません、どうしたら変換できますか?ruby1.9.3です
#! ruby -Ku
require "kconv";
p Kconv.guess('てるひこp彦')
p Kconv.guess('てるひこp彦'.tosjis)
p Kconv.guess('てるひこp彦'.kconv(Kconv::SJIS, Kconv::UTF8))
p Kconv.guess('てるひこp彦'.encode('sjis'))
>ruby sss.rb
#<Encoding:UTF-8>
#<Encoding:Windows-31J>
#<Encoding:Windows-31J>
#<Encoding:Windows-31J>

583 :12/03/23
Kconvのtosjisがどの文字集合を使っているのか忘れたけど、
「T」は JIS X 0212 の文字で U+4F8A
Windows-31J には含まれている。
Shift_JIS には含まれていない。

584 :12/03/23
tosjisとkconvとNKFは「べんりなてきとう変換」がモットーだからWindows-31J使ってエラーにならなくていいけど、
encode('sjis')はエラーになるべきだよな
irb> 'p彦'.encode('sjis')
Encoding::UndefinedConversionError: U+4F8A from UTF-8 to Shift_JIS
…あれ?

585 :12/03/23
やっぱりRubyってLinux環境で学習したほうがいいですか?
Rubyをコンパイルする場合、PHPみたいにコンパイルオプションがありますよね

586 :12/03/23
>>585
Windows意外ならなんでも

587 :12/03/23
秀丸があるからWindows使ってるんですけどLinuxでemacsとかviは使いたくない品

588 :12/03/23
秀丸ってgeditとかkateとかと何か違うの?

589 :12/03/23
>>583
ありがとうございます。UTF-8にあってSJISにない文字があるんですね。
>>584
???

590 :12/03/23
>>584
SJIS は Windows-31J と同義になっている。
http://bugs.ruby-lang.org/issues/4280

591 :12/03/23
ver. 1.9.3 から が抜けてしまった。

592 :12/03/23
SJISというのは定義が定かではない曖昧なシロモノなので、
Windows-31J か Shift_JIS を用途に応じて使い分けるのがベスト。

593 :12/03/24
>>585
Rubyのライブラリ群がUnixやその知識を前提としているものが多いので、
Linux環境の方がやりやすい。
ほとんどの場合コンパイルオプションは特につけなくてもいい。
./configure && make && make install で済む。

594 :12/03/24
Redmineのバージョン Ruby Rails Rack
1.3.x ruby 1.8.6, 1.8.7 Rails 2.3.14 Rack 1.1.1
1.2.x ruby 1.8.6, 1.8.7 Rails 2.3.11 Rack 1.1.1
1.1.x ruby 1.8.6, 1.8.7 Rails 2.3.5 Rack 1.0.1
1.0.x ruby 1.8.6, 1.8.7 Rails 2.3.5 Rack 1.0.1
0.9.x ruby 1.8.6, 1.8.7 Rails 2.3.5 Rack 1.0.1
0.8.x ruby 1.8.6, 1.8.7 Rails 2.1.2
なんだよ、このパズルゲームみたいな。しかも、↓。
注意:
Ruby 1.9には対応していません。

595 :12/03/24
>>585
LinuxサーバをLAN内かVM内に別途立ててWindowsからログインして使うのが学習上も効率上もいちばん便利
編集ファイルはなんらかの共有ディレクトリ機構(Samba、VMの簡単共有フォルダ機能)からアクセスしてWindowsのエディタで開く
唯一の問題はスクリプト実行コマンドをSSHなどの接続ターミナルで打たなければならないことだが、まあ、なんとかしてくれ
プログラム言語がLinux上にあるからといって、利用者がLinuxデスクトップを無理して利用しなければならない理由はない
っていうかあれは不便だ
chmの検索で全HTMLファイルをテンポラリに展開してgrepし始めたときはむしろ絶望した

596 :12/03/24
>>594
https://www.chiliproject.org/

597 :12/03/24
>>596
http://toro.2ch.net/test/read.cgi/tech/1330003774/67
ム板でレスしようとする人は「ひとつのスレしか見ない」というのはお願いだからやめてくれ、迷惑だから

598 :12/03/24
コピペやテンプレや煽りに反応してスレ壊しちゃう人多いよね
自演でないとしたら、どうしてわからないのかむしろ不思議

599 :12/03/24
>>597
プログラム板自治スレッド その4
http://toro.2ch.net/test/read.cgi/tech/1331208842/

600 :12/03/24
Rubyと関係ない>>597のレスが一番迷惑に感じました

601 :12/03/24
他言語(LL)のユーザがイチャモンをつけるのは、まぁ2chだから自由な権利として、
カキコ先が(Ruby本スレではなく)わざわざこの初心者スレというのが、いやはやなんとも....
煽るにしても、闘争を楽しめるネタならまだマシなんだけどね

602 :12/03/24
>>601
初心者スレに書く理由は、既に他スレでは反応してもらえなくなっているから
スルーする知識のある人、他スレで見慣れて無視するような人が少しでもいると困る

603 :12/03/24
それは別に書かなくてもいいです

604 :12/03/24
Rubyしかできない人が「使えねー」のと同程度には、
Rubyスレしか見てない人も初心者スレでは「使えねー」のだと思う

605 :12/03/24
お前のレスも使えねーです

606 :12/03/24
セミコロンって最後につけてる?

607 :12/03/24
Rubyでコードを書いて勉強しても忘れていくのでCMSかwikiとかに貼り付けて後で見れるようにしたいのですが
この用途でRuby1.9.3で動くCMSかWikiって何がいいですか?

608 :12/03/24
>>606
改行が(つけられ)ない場合はつけてる
>>607
Rubyで動作しなければならない理由がまったく思いつかない
とりあえず、ふつうにテキストファイルにでも書いとけ
編集も閲覧も誰にも気兼ねなく自由だ

609 :12/03/24
必要ないものをわざわざ付ける気になんかならないよ

610 :12/03/24
>>607
codepad使えば
というかそこまでのレベルで物忘れが激しいとやばくないか?

611 :12/03/24
>>606
基本は付けず、二行まとめたいときだけ付けてる
例えば例外クラス定義とかに使ってる、中身定義しないのに書くの何か嫌だし

612 :12/03/24
セミコロンつけとくと処理早くなるの知らないやつ多いんだな

613 :12/03/24
Rubyのマニュアルにセミコロンをつけてるサンプルがないので書いてません

614 :12/03/24
>>612
手間かけて僅かなパース時間すら削らないといけないようなスクリプトは残念ながら書いてないんで

615 :12/03/24
そんなレベルで処理速度を気にするなら、アセンブラで書くべきだな。

616 :12/03/24
>>614
ほんとにはやくなるの?

617 :12/03/24
>>616
アンカを間違ってるだろw
そういう質問なら>>612に汁

618 :12/03/24
俺に聞かれても困る

619 :12/03/24
>>616
理屈上、確実に速くはなる
実際は違うが、「この改行文字が文の終端なのか途中改行なのか判断する」という処理が不要(セミコロンは必ず終端)なぶん速い、と思ってくれ
その積み重ねが目に見えるかどうかは知らない
普通は目に見えないはず
まあ、何百万行のスクリプトを読み込んで即終了する行為を何度も行なうのにかかる時間をコンマ1秒でも短縮すれば1億円、みたいな場合はやる価値がある

620 :12/03/24
で、ベンチは?

621 :12/03/24
他の言語も使ってるからセミコロンは癖でつけてる

622 :12/03/24
そんなのはエディタの仕事

623 :12/03/24
>>585
とりあえず手軽に試してみるなら、こういうサイトも有る。
ttp://ideone.com/

624 :12/03/24
>>607
gistにでも書けば。

625 :12/03/24
>>607
##!! sample1
#!ruby
puts "hello"
##!! sample2
#!ruby
puts "world"
みたいに1つのソースにつなげて書いて
##!!で区切られたカーソル位置のソースを抽出・実行するエディタマクロ作ると
新言語の学習は楽になるよ。

626 :12/03/24
気持ち悪いことすんな
ファイル保存時に実行するように設定しろ

627 :12/03/24
ちょっと書き変えると前のスクリプトがなくなってしまう(コメントにして残すのもわけがわからなくなりそう)というのはわからんでもない
中途半端に頑張ったデータ配列とかあると大変

628 :12/03/25
俺はそういうのは何をしたコードなのかコメント付けて別ファイルで保存してた
>>607がそれじゃいやなのかそれができないのかその発想がなかったのかは知らんけど

629 :12/03/25
そういうのって定番はWordPressっていうのがあってだな

630 :12/03/25
>>628
そんなクソめんどくせーことやってられないと思ったから聞いたんだろ

631 :12/03/25
どんな方法でも「手で分類づけする」「実際にスクリプトを書く」「過去書いたもののどこが参考になるか考える」という作業は共通だけどな
なんだかよくわからないけど便利な魔法の方法、というものは残念ながら存在しない

632 :12/03/25
セミコロンの速度差気にする用途で
Rubyを選ぶのがそもそも間違ってる

633 :12/03/25
ルービーうめぇええぇえ!!!!11

634 :12/03/25
んなもんコーディング中にセミコロンをいちいちいらねえよ
ファイルを保存するタイミングでマクロで自動で入れとけや

635 :12/03/25
春すぎる

636 :12/03/25
言いたい事をうまく言えないとすぐ「春」とか無意味な言葉で逃げるクセは直したほうがよい

637 :12/03/25
言いたいことも言えないこんなスレだから…Python

638 :12/03/25
operlじゃもっさいからrubyってどんだけ発想が貧弱

639 :12/03/25
matz大激怒!こんな糞コミッタ−しか育たないんならRuby開発なんて意味ないね
http://ikura.2ch.net/test/read.cgi/bread/1325584365/

640 :12/03/25
>>639
AKB前田卒業ってマジかよ!!

641 :12/03/26
RubyをWindowsで使うときに、データベースの環境づくりはどれが一番楽ですか?
SQLiteを使おうと思ってネットで調べていろいろインストールしたら
なんかうまく行かなくて面倒くさくなってきたんですが...

642 :12/03/26
やたら楽したがったり訳も分からずいろいろ入れたりすぐ面倒になるような奴にはどれも楽じゃないよ

643 :12/03/26
>>641
面倒くさいのはWindowsだから諦めるとして
どの手順にしたがってインスコして
どううまくいかなかったのか書いたほうがいいよ

644 :12/03/26
>>641
MySQLでもPostgresでもワンクリックインストールだし、そんな大変でもないと思うけど。
SQLiteは、native extensionあたりでコケてんのかな…
というわけで>>643

645 :12/03/26
いろいろインストールというのが既におかしい

646 :12/03/26
極めてぶっちゃけるとそういう人にデータベースやって欲しくないので、
ご縁がなかったと諦めて頂くのが筋かと思われます

647 :12/03/26
余計なお世話

648 :12/03/26
>>645
じゃ、テキストファイルでいいんじゃねの

649 :12/03/26
いろいろインストールしなくてもgemで入れればいいだけじゃん
と言いたかっただけなんだが

650 :12/03/26
>>647
本人乙

651 :12/03/26
初めはみんな初心者。というかここは初心者スレ

652 :12/03/26
>>645から乱れ始めた感じ
つか、>>641は諦めたんか

653 :12/03/27
Rubyのスローガンは楽だろ

654 :12/03/27
その楽は>>641の求めてる楽とは質が違うでしょ

655 :12/03/27
本質的には同じ

656 :12/03/27
たのしい と らく ではかなり違う気がするお

657 :12/03/27
そもそもWindows上でRubyを使おうと思うのが間違い

658 :12/03/27
プログラマは怠惰であるべきだ

659 :12/03/27
rubyでphpみたいにHTMLに組み込む事って出来ますか?

660 :12/03/27
erb

661 :12/03/27
>>659
ERBで

662 :12/03/27
見かけPHPのようにできる(このへん語弊があるが)というだけであって、
PHPのようになにもかもがHTML出力に際して親切に動作するわけではないので注意

663 :12/03/27
CSSのセレクタを構文解析できるライブラリってありませんか?

664 :12/03/27
http://nokogiri.org/
NokogiriっていうライブラリがCSS3のセレクタのパース機能を提供してる。
XMLとかHTMLからデータを抜き出すライブラリなんだけど
CSSのセレクタを使って要素を指定することができる。
require 'nokogiri'
require 'pp'
pp Nokogiri::CSS::parse('body:first-child form#search > input[type="text"][value=""]')

665 :12/03/27
Nokogiriですね
これでZenCodingを作ってみます

666 :12/03/28
erbが進化したら、もうruby最強になるのに。

667 :12/03/28
どう進化してほしいの?というかもう進化してるかもよ

668 :12/03/28
rubyがjsみたいになればいい。

669 :12/03/28
jsでrubyを実装するんだ。

670 :12/03/28
>>669
これ?
ttp://coderepos.org/share/wiki/JSRuby

671 :12/03/28
メトロってこの延長線上な気がする
ttp://2ch.at/s/20mai00527004.jpg
ttp://2ch.at/s/20mai00527005.jpg
ttp://2ch.at/s/20mai00527006.jpg
ttp://2ch.at/s/20mai00527007.jpg
ttp://2ch.at/s/20mai00527008.jpg
ttp://2ch.at/s/20mai00527009.jpg

672 :12/03/28
>>671
またガラパゴスが世界標準になってしまったか。

673 :12/03/28
1.9.3ってもう入れてもいい?

674 :12/03/28
日本語エンコーディングに関するガイド文書か知識をお持ちなのなら
そうでないなら遠回りなんでどっかで解説なり訓練なり受けてからにするんが吉

675 :12/03/28
>>666
pry とか。

676 :12/03/28
>>675
それirbの進化

677 :12/03/28
>>676
やべえ。素で間違えた。w
まあ、pryは良く出来てるのでオススメだよ!

678 :12/03/28
てすつ

679 :12/03/29
>>670
なにこれ?誰か説明して。

680 :12/03/29
馬鹿には無理

681 :12/03/29
メトロってこの延長線上な気がする
ttp://2ch.at/s/20mai00527004.jpg
ttp://2ch.at/s/20mai00527005.jpg
ttp://2ch.at/s/20mai00527006.jpg
ttp://2ch.at/s/20mai00527007.jpg
ttp://2ch.at/s/20mai00527008.jpg
ttp://2ch.at/s/20mai00527009.jpg

682 :12/03/29
>>679
http://labs.cybozu.co.jp/blog/nakatani/2008/01/javascript_ruby_jsruby_01.html ( Japanese )
http://labs.cybozu.co.jp/blog/nakatani/2007/11/jsirb_javascript_ruby.html ( Japanese )
http://labs.cybozu.co.jp/blog/nakatani/2007/12/jjsruby_jsruby_for_rhino.html ( Japanese )

683 :12/03/29
自演

684 :12/03/29
質問させてください。
使用バージョン:1.9.3p125
読み取り専用のインスタンス変数を作りたい場合、どのようにすれば良いのでしょうか。
以下のコードを試してみましたが、うまくいきません。
class Test
attr_reader :read_only
def initialize
@read_only = []
end
end
test = Test.new()
test.read_only << "hoge"
puts test.read_only.to_s
→["hoge"]

685 :12/03/29
feezeすれば、レシーバ自体は変更できなくなるが、
それにぶら下がってるオブジェクトは変更可能なまま。
a = ['hello'].freeze
a << 'world' #=> RuntimeError: can't modify frozen Array
a[0].upcase!
a #=> ['HELLO']

686 :12/03/29
「そんなものはない」が正式な回答
Rubyはそのへんを本質的に禁止できない
「変更するな氏ね」とマニュアルに赤マジックででっかく書いとけ
それで充分
勝手に変更した人が悪いんだから、素直に不整合エラー出して終了したり微妙にそのまま走り続けたりして構わない

687 :12/03/29
そこまで責任持たなくてもいいってことだわな

688 :12/03/29
>>685,686,687
なるほど、rubyではその辺は融通きかせるのですね。頭を切り返えてみます。
ありがとうございました。

689 :12/03/29
いえいえ

690 :12/03/30
activerecordとmysql2をgemでインストールするにあたって
ぐぐったら何か問題あることはわかったんだけども
具体的に何をどうしたらいいのかわからないから
お母さんが説明するみたいに優しく教えて

691 :12/03/30
>>690
RoRはスレ違いよ、たかし。テンプレ見なさい。

692 :12/03/30
activerecord使ってたらRoR扱いなん?

693 :12/03/30
>>692
多くはそうだと思うけど、んなこたない

694 :12/03/30
置換をするときに正規表現は使いたくないんだけど
gsubやsubしか見当たらないけど何かいい方法ないですか?

695 :12/03/30
こういうの?
str = "abcde"
str["bc"] = "fff"
p str #=> "afffde"

696 :12/03/30
>>694
sub, gsubに文字列渡したらおk。とかそうこうことでなくて?

697 :12/03/30
>>695
そういうのやりたい!!
ってかそれでいの?!!
>>696
URLの置換なのでエスケープするのが大変なので何かいい方法ないかと探しています

698 :12/03/30
>>695
うまくいきました!!
置換する文字列がたくさんあった場合は何度か繰り返しました
プログラミングで感動したのはひさびさです。まだ興奮しています!!
ありがとうございます!

699 :12/03/30
>>697
>>695で解決したみたいだけど一応。
パターン中に / が沢山登場する時は、
%r!pattern! を使えば / はエスケープしなくてもいけますよ

700 :12/03/30
メタキャラクタ使わないのならsubやgsubでもいいと思うけど
"/a/b/c".sub('/b'){'/x'} # => "/a/x/c"

701 :12/03/30
>>700
>>694じゃないが
Regexpオブジェクトじゃなくて、文字列渡せばいいだけか。
そらそーか

702 :12/03/31
>プログラミングで感動したのはひさびさです。(キリッ
>まだ興奮しています!! (キリッ
きめーから初心者
>置換する文字列がたくさんあった場合は何度か繰り返しました
はああああああああああああ??????????Wwwwwwwwwww
書き込みから分かるわ、 どんなゴミカスソースかいてるかわかるわwwwwwwwwwゴミ量産すんなしね
変な事をやってないでさっさと正規表現覚えろカス 市ね初心者

703 :12/03/31
いちいちコテ付けて相手してほしいのか?

704 :12/03/31
>>703
マ板とム板でまだ表示してるのたぶんお前だけだぞ

705 :12/03/31
uy === QZ

706 :12/03/31
uyってのは本当に頭悪そうだけど、qzはそれなりに知識あるから明らかに別人。

707 :12/03/31
uyは頭が悪いというよりは、精神に何かしらの異常を持つ人物、という感じが強い
QZはまあ、普通のクソコテだな

708 :12/03/31
rubyスレはおかしい人が多いね
TOP カテ一覧 スレ一覧 2ch元 削除依頼
OpenWatcom C++ (709)
ポインタを難しいと言う奴が理解できない (797)
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part12 (888)
◆◇◆dbMAGICってどうよ?◆◇◆ (793)
【自動】株式トレーディングシステム Part6【売買】 (141)
【SL4】Windows Phone 7 アプリ開発スレ Part3【XNA】 (415)
--log9.info------------------
KOTOKO part118 (529)
ZARD part482 (283)
KCO 2 (870)
(@^ω^@)YUI(@^ω^@)Part305(@^ω^@) (403)
BENI = 安良城紅 - 008 (837)
■■MISIA Part78 米ワシントンDC桜祭■■ (680)
[あなたの夢の中]宇徳敬子10[そっと忍び込みたい] (564)
阿部真央 Part9 (781)
MiChi Part4 (425)
西野カナ Part16 (744)
【ConcertTour2012】平原綾香vol.31【ドキッ!】 (123)
山本サヤカ(dream)について語るやよ( ・ω・) (908)
鬼束ちひろ194 (809)
【月の仙女アラン】 alan vol.25 【阿蘭達瓦卓瑪】 (876)
KOKIA Part.104 (989)
古内東子っていいよね 8 曲目 (443)
--log55.com------------------
【れいわ・山本太郎代表】政権交代目指すためにも野党共闘が前提になる
韓国大統領府高官 日本の外務副大臣発言に強い不快感
「アベ政治を許さない」 国会前に約100人 在日2世「安倍政権になってから日韓関係が悪化した」
韓国最大野党「ノーベル賞24個の日本と韓国の技術格差は50年。文は冷酷な現実を直視しろ」 朝鮮人発狂
文在寅、日本のホワイトリスト除外に対抗し、「日本の放射能」問題を持ち出すと見られる ネット「福島よりも高いソウルの放射線」
【大村知事】表現の不自由展 展示中止言及「憲法違反が濃厚」 河村市長を批判
田嶋陽子「日本の韓国を支配したことと、それに対する対応をきちんとやってこなかった」 ネット「植民地ではなく本土以上に厚遇
韓国政府「放射能汚染が酷いため、東京を含め日本全域を旅行禁止区域とする検討が必要」 ネット「ソウルの線量には負けます