Ruby 初心者スレッド Part 36

1デフォルトの名無しさん
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

★注意★ Ruby 1.9.1 は初心者にはまだ時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
   (理由:現時点では有名ライブラリやアプリが 1.9.1 に完全には対応していないためです)
 1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 を習得すれば将来スムーズに 1.9 系に移行できるでしょう。

関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・モジュール名やエラーメッセージでググる
 ・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
 ・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(自力で訳さずなるべくそのままで)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。

■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
2デフォルトの名無しさん:2010/03/22(月) 13:57:18
【よくあるしつもん】
Q:
いちからRubyを始める初心者向けのRuby入門書は何がありますか?

A:
プログラム作成自体の初心者なら
 ・「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
  http://www.amazon.co.jp/dp/4797336617/
文法は理解済み(orリファレンスで乗り切る既言語習得者)の場合のRuby様式を知る必携2冊目
 ・「初めてのRuby」
  http://www.amazon.co.jp/dp/4873113679/

以下は外れが少ないとされている本です。必ず立ち読みした上で自分の目的とレベルに応じて購入してください。
 ・「Rubyレシピブック 第2版 268の技」(初心者向け)
  http://www.amazon.co.jp/dp/4797340045/
 ・「プログラミングRuby 第2版 言語編」(初心者向け)
  http://www.amazon.co.jp/dp/4274066428/
 ・「Ruby Way 第2版」(脱初心者向け)
  http://www.amazon.co.jp/dp/4798115339/
 ・ 「Rubyクックブック ―エキスパートのための応用レシピ集」(脱初心者向け)
  http://www.amazon.co.jp/dp/4873113245/

以下の本は言語作者が書いた最新本ですがとりあえず初学者向けではありません。
 ・「プログラミング言語 Ruby」(言語として深く知りたい人向け)
  http://www.amazon.co.jp/dp/4873113946/
3デフォルトの名無しさん:2010/03/22(月) 13:57:59
Ruby 公式・非公式便利サイト2009

・Ruby Home Page 【公式、お役立ち度が微妙】
 http://www.ruby-lang.org/ja/
・Rubyリファレンスマニュアル 【検索機能休止中、Googleなどの併用を】
 http://www.ruby-lang.org/ja/man/
 http://www.ruby-doc.org/ 【詳しい英語版】
・HTMLヘルプ版リファレンスマニュアル配布さん 【Windowsで便利、検索も無論可能】
 http://elbereth-hp.hp.infoseek.co.jp/ruby.html
・Programming Ruby - The Pragmatic Programmer's Guide 【好評書籍の初版がネットで、ただし英語】
 http://www.ruby-doc.org/docs/ProgrammingRuby/
・Rubyist Magazine - るびま 【ライブラリ紹介などの読み物、過去のコードレビューは一読の価値あり】
 http://jp.rubyist.net/magazine/

・逆引きRuby 【やりたいことから探すWiki、最近元気ないので編集者募集】
 http://www.namaraii.com/rubytips/
・はてなキーワード > Ruby 【うっかりどっさりまとまったリンク集、説明なし】
 http://d.hatena.ne.jp/keyword/Ruby

・RubyForge 【○○をやりたい管理されたライブラリを探すならここ、英語】
 http://www.rubyforge.org/
・GitHub 【○○をやりたいコードをとにかく探すならここ、英語】
 http://github.com/

・日本Rubyの会 【最近はオフライン勉強会の寄り合い場と化しているので近くで勉強会があれば】
 http://jp.rubyist.net/
4デフォルトの名無しさん:2010/03/22(月) 13:58:40
●関連スレ
Rubyについて Part 39
http://pc12.2ch.net/test/read.cgi/tech/1265467681/
●アンチスレ
・Rubyについて(アンチ専用) Part004
http://pc12.2ch.net/test/read.cgi/tech/1249737531/
●Railsスレ
【Ruby】Ruby on Rails Part9
http://pc11.2ch.net/test/read.cgi/php/1266563593/
●Windows用スレ
・【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc11.2ch.net/test/read.cgi/tech/1155031689/
●Ruby 1.9 系列スレ
・魁け! Ruby 1.9.X
http://pc11.2ch.net/test/read.cgi/tech/1201603546/

●前スレ
Ruby 初心者スレッド Part 35
http://pc12.2ch.net/test/read.cgi/tech/1267668057/
Ruby 初心者スレッド Part 34
http://pc12.2ch.net/test/read.cgi/tech/1264635554/
Ruby 初心者スレッド Part 33
http://pc12.2ch.net/test/read.cgi/tech/1259990485/
5デフォルトの名無しさん:2010/03/22(月) 13:59:20
バージョンに関するよくある質問

・Ruby 1.8.5
 レンタルサーバ等にいまだに残ってる非安定な古いバージョン
 1.8.6 にすらなってない理由はたぶん管理の手抜きなので怒ってよい

・Ruby 1.8.6
 過去の長期政権と数の暴力で一大勢力圏を維持中の旧安定版
 公開スクリプトはこれでも動作するべきではあるんだがそろそろ 1.8.7 に譲ってくれ

・Ruby 1.8.7
 1.9 シリーズの機能をいくつか足したハイブリッドなバージョン、初学者にこそお勧め
 1.9 系機能は 1.8.6 では動かないが「えーマジ1.8.6!? 1.8.6が許されるのは小(AA略」と煽ってよい

・Ruby 1.9.0
 不安定にして先鋭機能が超満載の開発版バージョンだったもの
 1.9.x は本来全てが開発版の呼称だったのだが、事情が変わって(ここ笑うところ)1.9.1 は安定板に

・Ruby 1.9.1
 満を持して登場の 1.9 系列安定板(本体は 1.8.6 程度には使えるということになっている)
 本体と添付ライブラリの動作は問題がないのだがgem等外部第三者ライブラリの対応が超適当特に英語圏産
 初心者を脱した人が外部ライブラリの開発コミュニティに参加してくれたりすることを期待中
6テンプレここまで:2010/03/22(月) 14:04:20
Windows で Ruby を使う初心者はとりあえず ActiveScriptRuby の 1.8.7 をインストールして慣れろ
OneClickInstaller は単に古すぎ、RubyInstaller は MinGW32 版で現状扱い怪しい、cygwin 版は cygwin マニア専用
IDE のお勧めは特にない(せいぜい汎用のEclipseかNetBeans)、RDE は古くて独自すぎで Ruby に慣れた人向け

■ Windows でとにかく迷いたくない普通の人 … ActiveScriptRuby 1.8.7
ttp://arton.hp.infoseek.co.jp/indexj.html
 の題字のでかい 「ActiveScriptRuby 1.8.7(p249) with-winsock2 tcl-stub」

 マニュアルはWebで見ることもできるが手元にあると便利、1.8.7 の HTML ヘルプ版が
ttp://www.ruby-lang.org/ja/documentation/
 の「Rubyリファレンスマニュアル刷新計画 chm版 1.8.7用」

 夢のお告げ等、何かの間違いで Ruby の知識がないうちから 1.9.1 を使って苦しみたいマゾい人は
ttp://www.artonx.org/data/asr/ の「Ruby-1.9.1-p数字 Microsoft Installter Package」
7デフォルトの名無しさん:2010/03/22(月) 14:11:58
これは >>1 乙じゃないんだからねうんたらかんたら
8デフォルトの名無しさん:2010/03/22(月) 14:12:39
ちょっと補足

>>2の『たのしいRuby』は第3版が3/31に発売予定だとか
ttp://www.amazon.co.jp/gp/product/4797357401/


ところで↓はテンプレに載っててもいいと思うんだけど
何かまずいんだっけ?

『プログラミング入門 - Rubyを使って - 未来のプログラマのためのチュートリアル』
ttp://www.ie.u-ryukyu.ac.jp/~kono/software/s04/tutorial/index.html
(訳した西山先生のサイトは現在行方不明)
9デフォルトの名無しさん:2010/03/22(月) 14:16:24
 ○  >>1 乙 もうお前に用はない 
 く|)へ
  〉   ヽ○ノ
 ̄ ̄7  ヘ/
  /   ノ
  |
 /
 |
10デフォルトの名無しさん:2010/03/22(月) 19:42:32
      ,―ヽ_(((((_、―
   ,/  ノ       ヽ  ~\
  /   ノ   IPA    ヽ   ~\
/   ノ           ヽ、  `ヽ
|    ノ / ̄\   / ̄~ヽ ヽ    i
|   ノ              |  ノ
\  |  <●>  <●>  (  )
 \ |      | |       i /
    |      /  ヽ       レ
   i     (●_●)      /  
    i、    ,-――-、   ・ /
    i、  <(EEEEE)> ∵/    IPA Rubyスレは誰でもウェルカム
      i、  \   ./  /
       \   ーー   ,ノ       
  ,,.....イ.ヽヽ、ー-―一ノ゙-、.
  :   |  '; \_____ ノ.| ヽ i
      |  \/゙(__)\,|  i |
11デフォルトの名無しさん:2010/03/22(月) 23:21:15
Dir.globじゃなく、ただワイルドカードを判定ってどうやるんですか?
if match("aaa", "*a*") ~みたいな感じで
12デフォルトの名無しさん:2010/03/22(月) 23:30:30
正規表現じゃだめなの?
/a/.match("aaa") とか
13デフォルトの名無しさん:2010/03/22(月) 23:30:52
どういうことをしたいのかいまいちよくわからんが、
ファイル一覧の文字列を含んだ配列の各要素に対して
正規表現でマッチするかどうかをチェックすればいいのではなかろうか
14デフォルトの名無しさん:2010/03/22(月) 23:31:38
>>11
File.fnmatch
ただしglobで使える一部のパターンは使用不可
15デフォルトの名無しさん:2010/03/22(月) 23:37:51
>>14
オリジナルのfnmatchの知識がある人向けだな、これ…
16デフォルトの名無しさん:2010/03/23(火) 00:35:36
わざわざfnmatchをやりたいつってんだから、fnmatchの知識は要求してもいいんじゃね。
17デフォルトの名無しさん:2010/03/23(火) 01:30:25
Fileメソッドなのはおかしい
String#matchに文字列渡したら発動するようにしようぜ
18デフォルトの名無しさん:2010/03/23(火) 02:20:21
OK わかった ここまでまとめてこうか

wild_card = "*a*"
if Regexp.new(wild_card.gsub(/\*/, '.*')).match("aaa") then ...

うん。絶対違うな
19デフォルトの名無しさん:2010/03/23(火) 11:10:04
proc と lambda って違うの?
Proc オブジェクトという名前で lambda 使ったらだめ?
20デフォルトの名無しさん:2010/03/23(火) 11:16:57
http://doc.okkez.net/static/192/method/Kernel/m/proc.html

正直覚えきれない。
関数的ならlambda、手続き的ならprocという感じ?
21デフォルトの名無しさん:2010/03/23(火) 11:21:38
ttp://d.hatena.ne.jp/shunsuk/20090101/1230816826
これはわかりやすいかも
22デフォルトの名無しさん:2010/03/23(火) 11:29:12
>>19
「ここにはProcオブジェクトを指定します」というところでlambda使ったら駄目
「ここにはProcオブジェクトかlambdaを指定します」ならlambda使ってもOK
「ここにはlambdaを指定します」というマニュアルだったらProcオブジェクトでは駄目な理由を問い詰めろ
23デフォルトの名無しさん:2010/03/23(火) 11:37:35
指定したい場合は「手続きオブジェクト」という日本語で逃げてる俺
実際問題として、引数増減させたり内部でreturnしたりしてエラー出されても俺はそんなん知らん
24デフォルトの名無しさん:2010/03/23(火) 15:16:05
>>21
> 正直、lambdaがなぜMethodオブジェクトでないのか解りません。
> おそらく、Rubyの後のバージョンでは変更されるのではないでしょうか。
lambdaは作られたところのコンテキストを保存するので、Methodとは決定的に異なる。
25デフォルトの名無しさん:2010/03/23(火) 15:53:39
> キーワード [binding] は発見できませんでした。
さもありなん
26デフォルトの名無しさん:2010/03/23(火) 19:46:49
そこら辺の概念がよく分からない
C++で説明してくれないか
27デフォルトの名無しさん:2010/03/23(火) 20:45:47
javaのequalsに相当するメソッド?を教えてください
そして、オブジェクト同士を比較する時は、それをオーバライドする必要があるのですか?
28デフォルトの名無しさん:2010/03/23(火) 20:54:26
self == other
  self と other が等しければ真を返します。デフォルトでは equal? と同じ効果です。
  このメソッドは各クラスの性質に合わせて再定義するべきです。

self === other
  このメソッドは case 文での比較に用いられます。
  デフォルトは Object#== と同じ働きをしますが、この挙動はサブクラスで所属性のチェックを実現するため適宜再定義されます。

eql?(other)
  二つのオブジェクトが等しければ真を返します。Hash で二つのキーが等しいかどうかを判定するのに使われます。
  このメソッドを再定義した時には Object#hash メソッドも再定義しなければなりません。
  eql? のデフォルトの定義は equal? と同じくオブジェクトの同一性判定になっています。

equal?(other)
  other が self 自身の時、真を返します。
  このメソッドを再定義してはいけません。
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

複雑だよねー
29デフォルトの名無しさん:2010/03/23(火) 20:54:48
>>26
c++ の人ならlambdaはC++にもある(boost)から概念ならそこから理解できるはず
30デフォルトの名無しさん:2010/03/23(火) 20:57:47
>>27
irb> "str" == "str"
true
irb> "str".equal?("str")
false

ということで String#equals?

>>28
そう複雑でもない
プリミティブなクラスを発明しない限り普通は === も eql? も再定義することはない
クラスごとに「おなじとみなしていいもの」の判定を == で定義すればいい
3127:2010/03/23(火) 21:38:42
>>28
複雑だとは思いませんが、条件式としては微妙だと思います

>>28,>>30
ありがとうございます
32デフォルトの名無しさん:2010/03/23(火) 21:49:02
rubyにはconstやfinalのみたいな、再代入を防ぐ方法は無いんですか?
33デフォルトの名無しさん:2010/03/23(火) 21:50:29
普段使うのは == と equal? だけだな

>>32
Object#freeze
34デフォルトの名無しさん:2010/03/23(火) 21:55:08
>>32
ない
変数名の再使用を禁止することはできない

オブジェクトの内容が変更されることを防ぐことならできる
のが>>33
35デフォルトの名無しさん:2010/03/23(火) 22:08:38
定数(名前が大文字から始まる変数)がいちおうそれだけど、効力としては警告止まり
警告を無視するようなバカには効果はないが
javaと違って基本的にプログラマを疑っていない言語だからそこは割り切ってくれ
3626:2010/03/23(火) 22:23:55
>>29
ありがとう。Boostは使ったことない
3732:2010/03/23(火) 22:25:40
>>33-35
ありがとうございます

まだrubyプログラミングに慣れていないので、間違えて再代入しないようにしたかったのですが
ムリぽですね
38デフォルトの名無しさん:2010/03/23(火) 22:26:58
そもそもそういう動機で再代入を禁止してはいけない
39デフォルトの名無しさん:2010/03/23(火) 22:30:04
Haskellやればいい
40デフォルトの名無しさん:2010/03/24(水) 00:00:36
グーニーズくるー?
41デフォルトの名無しさん:2010/03/24(水) 10:19:10
現在、Threadが実行中か調べる方法を教えてください
42デフォルトの名無しさん:2010/03/24(水) 10:25:25
Thread#status
43デフォルトの名無しさん:2010/03/24(水) 10:25:51
t.status #=> "run" or "sleep" or "aborting" or false or nil
t.alive? #=> true or false
4441:2010/03/24(水) 10:52:29
>>42-43
ありがとうございます

Rubyのスレッドって寿命があるんですかね
Thread.start {
for i in 1..10000
puts i
end
}
最後まで表示されないので
45デフォルトの名無しさん:2010/03/24(水) 10:56:51
…あれ、なんだこれ
4641:2010/03/24(水) 10:58:41
メインのスレッドが終わっているから、全部表示されないのかも
47デフォルトの名無しさん:2010/03/24(水) 11:03:47
t = Thread.start {
for i in 1..10000
puts i
end
}
t.join
4841:2010/03/24(水) 11:12:33
>>47
そこまで、すぐにわかりました

IOに時間がかかるので、GUIを描写を止めないようにしたいんです
def~endの間でしかスレッドを使えないんですかね?
デーモンみたいな感じで使えたらいいんですが

def hoge
t = Thread.start{}
end
4941:2010/03/24(水) 12:43:59
def buttonPush ←ボタンがクリックされた時に呼び出される
t = Thread.start{
適当な処理(時間がかかる)
storeBinary()
}
end

def storeBinary
大きいデータを書き込む
end

buttonPushが呼び出された時に、GUIを止めたく無いんです
50デフォルトの名無しさん:2010/03/24(水) 13:09:52
よくわからんけど、バックグラウンド処理用のスレッドを管理する仕組みを作って
GUIのスレッド(ここではbuttonPush)から呼び出すとかじゃダメなのかな。
51デフォルトの名無しさん:2010/03/24(水) 13:13:05
全体の最後に Thread.list.each {|t| t.join} を置いておけばいいのかな。
メソッドを抜けたときに参照がなくなってGC対象になってしまう?

52デフォルトの名無しさん:2010/03/24(水) 14:35:57
環境(OS, Ruby, GUI, IOの種類)を書いた方がいいんじゃないかな

>>51
生きていればThread.listが参照してる
53デフォルトの名無しさん:2010/03/24(水) 14:37:14
参照してるっていうのは正確じゃなさげ
でもThreadクラスオブジェクトが知ってるということはどこかしらで参照してるんだろう
5441:2010/03/24(水) 15:14:58
>>51
わからないよ

>>52
OS:Gentoo Linux 2.6.32-r7
Ruby:1.8.7 (2010-01-10 patchlevel 249) [x86_64-linux]
GUI: KDE-Smoke 4.4.1(QtRuby)
IO:ネットワークからデータを取ってきて保存する
55デフォルトの名無しさん:2010/03/24(水) 18:06:29
>>54
>>50 と同じようなことだと思うけど、ワーカースレッド作って buttonPush で
ワーカースレッドにキューを投げるようにすればいいんじゃないの?
雰囲気は、こんな感じ。(動くかどうかは未確認)
def initialize
 @queue = Queue.new
 Thread.start do
  while q = @queue.pop
   storeBinary
  end
 end
end
def buttonPush
 @queue.push(:store)
end
56デフォルトの名無しさん:2010/03/24(水) 18:34:13
メッソドAがやっている事に、プラスαの操作をつけたい

def MethodA
処理A
処理B
end

def methodB
処理A
yield
処理B
end

yield以外はまったく同じ操作なんですが、やっぱり2つメソッドを作るしかないんですか?
57デフォルトの名無しさん:2010/03/24(水) 18:55:12
yield if block_given?
58デフォルトの名無しさん:2010/03/24(水) 19:04:15
>>57
thx
59デフォルトの名無しさん:2010/03/24(水) 21:33:34
>>54
スレッドが回っていないんじゃない?多分。
GUI起動したmainスレッド側で実行権つかみっぱなしな悪寒
GUI起動直前に、タイマーかなんかで定期的に
Thread.passでスレッド回すコード追加してみたら
いけるかもね
6054:2010/03/24(水) 22:05:26
>>59
GUIでボタンをクリック→スレッドのスタート→Net::HTTPのライブラリーが呼び出される
という順番でプログラムを書いているのですが

Net::HTTP#get()が呼びだされた瞬間に、勝手にスレッドが終了してしまうようです(rubyのバグ?)
シングルスレッドでテストしてみると、何にも問題がありません

ひとまず、違う処理系でも実行してみたいと思います
61デフォルトの名無しさん:2010/03/24(水) 22:09:56
なんらかの例外が起きてるんじゃないか?
ruby に -d オプション付けてみた?
62デフォルトの名無しさん:2010/03/24(水) 22:23:40
状況を再現できる短いコードが用意できればベストなのだが。
63デフォルトの名無しさん:2010/03/24(水) 22:27:19
GUIやるかスレッドやるかどっちかにせえやという気は若干しなくもなく…
64デフォルトの名無しさん:2010/03/24(水) 22:29:46
>>61
例外でスレッド終了か
シングルスレッドだと動いてるみたいだしなさそうだが

65デフォルトの名無しさん:2010/03/24(水) 22:31:13
>>63
GUI + スレッドは正しい道のりな気が
66デフォルトの名無しさん:2010/03/24(水) 22:50:43
>>59
他の GUIツールキットの事情は知らないけど
wxruby はもろにそれだな

t = Wx::Timer.new(self, 9999)
evt_timer(9999) { Thread.pass }
Thread.new { hoge }
t.start(100)

こんな感じでタイマー使って定期的に Thread.pass してた
6754:2010/03/24(水) 23:17:15
>>61
ttp://www.darshancomputing.com/qt4-qtruby-tutorial/chapter_01
これくらいでも、例外が発生していました
LinuxでもWindowでも例外が発生します

>>62
簡単なコードを書きました
ボタンを押すと、コンソールに"test"と表示されます
ずーっと"test"と表示されていて欲しい所ですが、2~3回しか"test"と表示されません
ttp://loda.jp/textliving/?id=28

windowsの人は「gem install -r qtruby4」でインストールしてください
Linuxでは「kde-base/kdebindings-ruby(Gentooの場合)」というパッケージをインストールしました

>>60
ここでは、バグかな~と思ったのですが
Active Script Rubyでも、同じ所でスレッドが終了してしまいました
どうやら、処理系のバグってのは勘違いっぽそうです
68デフォルトの名無しさん:2010/03/25(木) 00:40:13
>>67
ASR1.8.7でそのコードを試した感触だと>>66がビンゴっぽい
69デフォルトの名無しさん:2010/03/25(木) 00:42:24
jrubyはネイティブなrubyの処理系を必要としますか?
NetBeansのRubyだけで、おk?
70デフォルトの名無しさん:2010/03/25(木) 00:55:13
なにがなんだかさっぱりわからんが、JRuby は Java の実行環境上で動作する
インストールに必要なのは Java の実行環境
71デフォルトの名無しさん:2010/03/25(木) 00:59:12
説明しよう!
Java で動作してる NetBeans には JRuby が最初から同梱されて使える状態になっているのだ!
だから cruby を別途インストールしなくても Ruby スクリプトそのものは作れるんだ! すごいね!
72デフォルトの名無しさん:2010/03/25(木) 01:11:46
Rubyは雑務や仕事の効率化UPのためのちょこっとスクリプトに使う人がよくいるみたいですが
シェルスクリプトとはできることが違うのでしょうか?
シェルスクリプトにできなくてRubyなら出きることって何かありますか?
73デフォルトの名無しさん:2010/03/25(木) 01:15:40
シェルスクリプトつかったことないならむりしてわだいにださなくていいよ
74デフォルトの名無しさん:2010/03/25(木) 01:29:39
shell script だけではできる事は非常に限られている
shell の種類にもよるが四則演算すらできないしカウンタも使えない
``を多用すればruby 以上の事はできるが面倒で煩雑
ruby の方が shell script より楽ってこと
75デフォルトの名無しさん:2010/03/25(木) 03:17:53
InterfaceやAbstractがないことに驚いたんですけど!
動的言語では型付けがいらないからInterfaceを返してキャストとが要らないのは
分かったものの、ダックタイピングというのが分からない
とりあえずInterfaceおいてダックであることを明示、保証するのが当たり前だと
思ってたけど、この必要がない理由と動的言語の性格って関連があるの?
76デフォルトの名無しさん:2010/03/25(木) 03:40:37
必要な時に必要なだけメソッド定義すれば
77デフォルトの名無しさん:2010/03/25(木) 05:22:26
動的言語に何の保証があるというのか
78デフォルトの名無しさん:2010/03/25(木) 06:14:26
静的型付け言語なら定義済みのクラスやインターフェースからコンパイル時に
型チェック(引数や型による代入制限、メソッドの有無等)を行えるが
変数が型を持たないrubyではそれらが意味をなさない

ダックタイピングは乱暴に言っちゃうと
メソッドが無かったり引数があわなければどっちにしろエラーになるんだから
それでええやん、て感じ
79デフォルトの名無しさん:2010/03/25(木) 08:25:53
実際は別にダックタイピングを駆使してるわけでも意識してるわけでもない
どう考えたって逆にめんどくさいからな

「○○するメソッド名ってやっぱ××だよな」程度の使われ方になる
クラス作成者とクラス利用者の間における命名規則の紳士協定みたいなもんだ
80デフォルトの名無しさん:2010/03/25(木) 10:59:42
あれ時間が戻った?
81デフォルトの名無しさん:2010/03/25(木) 15:58:55
>>75 どっかの面接みたいな問だな
82デフォルトの名無しさん:2010/03/25(木) 17:18:31
・Rubyの変数には型がない(代入に制約がない)
・Rubyは動的型付けの言語(=型が実行時に定まる)
 型が無いわけではない

この辺が混同されやすいのかなあ
83デフォルトの名無しさん:2010/03/25(木) 17:29:12
「いわゆる型」がないんだよね
型って言われたら「その型って具体的に何を指してるんですか」とか聞かないと駄目かなあ
84デフォルトの名無しさん:2010/03/25(木) 17:38:40
クラスと型ってどう違うの?
なんとなく同じ様なもののイメージなんだけど
85デフォルトの名無しさん:2010/03/25(木) 17:41:20
うだうだ言ってないで文法書とサンプル読みあさった方が手っ取り早い。
先にRuby的言葉遊びから入って得られるものは少ない。
86デフォルトの名無しさん:2010/03/25(木) 17:43:55
オブジェクト指向の知識があるならそれでOKなんだよ

問題はオブジェクト指向と称して実はただの「C++の知識」「Javaの知識」だったりするから
87デフォルトの名無しさん:2010/03/25(木) 18:48:07
Rubyの場合は話してる最中に
「いやこれはたぶんRuby依存の特有の話だな…」
とか気づけるからまだマシなような気もする
Javaの実装がオブジェクト指向だと思い込んでる人は結構困る
88デフォルトの名無しさん:2010/03/25(木) 18:52:33
聞き手そっちのけのオナニー喩話はどうでもいいよ。
ちっとも理解が促進されないし。
既に解ってる連中同士の内輪ネタでしかない。
89デフォルトの名無しさん:2010/03/25(木) 18:52:38
Rubyでオブジェクト指向の基礎を学ぶのは厳しい

こんな感じなんだ~程度なら十分だけど
90デフォルトの名無しさん:2010/03/25(木) 18:59:41
実際に実行可能な言語に落とした時点でオブジェクト指向でもなんでもないものになる
オブジェクト指向は実行しないからこそ美しい
実行のための仕組みは邪魔
91デフォルトの名無しさん:2010/03/25(木) 19:08:43
たのしいRuby 第3版がもう出てた。
92デフォルトの名無しさん:2010/03/25(木) 19:19:12
>>78-79
なるほど
振舞いやパターンを明示することを積極的に排除する理由があるわけじゃなかったのか
いわれてみれば静的な型に頼らないってことと振舞いをまったく規定しないってことには大きな開きがあったね

>>76-77
instance_evalとか使いまくりがデフォなの?
93デフォルトの名無しさん:2010/03/25(木) 19:55:17
これから学ぶweb関連のプログラミング言語としてはrubyでいいでつか?
94デフォルトの名無しさん:2010/03/25(木) 20:03:11
> でつ
95デフォルトの名無しさん:2010/03/25(木) 20:06:10
Javascriptと、PHPかJava辺りがいいんじゃないかな
96デフォルトの名無しさん:2010/03/25(木) 20:41:58
かなーり微妙臭いふぃんきではある

主要なフリーウェアでスクリプト書くときなんか大概Python主流だし
RubyもPythonも両方やるのが吉
97デフォルトの名無しさん:2010/03/25(木) 22:17:44
ひとつやっとけばOKという発想は捨てよう。
98デフォルトの名無しさん:2010/03/25(木) 22:31:57
そういう意味ではライブラリが共通の.NETは楽だわな
99デフォルトの名無しさん:2010/03/25(木) 22:35:11
>>89
真面目な質問だがOOPの基礎を学ぶのが簡単な言語はどれ?

OOPなんてcode書かなきゃわかるようにならん
codeを書きやすいか,書く気になるかどうかのトレードオフが大きいからね


10099:2010/03/25(木) 22:50:23
>>99
> codeを書きやすいか,書く気になるかどうかのトレードオフが大きいからね
→…どうかとのトレードオフ…

すまん
101デフォルトの名無しさん:2010/03/25(木) 23:13:35
LISPかな。

いや、冗談半分本気半分なんだけど、OOPとはなんぞやってのが
あまりにも難しすぎる。
オブジェクトが自立性を持っていて、受け取ったメッセージを自分で判断して
振舞う(メッセージを拒絶することも含む)ような処理系でのプログラミングが
OOPなんだぜ! という学派からすれば、Rubyはまさにそれではある。
102デフォルトの名無しさん:2010/03/25(木) 23:14:57
OOの前にOOでない言語を身につけた方がいいな
お薦めはCだ
103デフォルトの名無しさん:2010/03/25(木) 23:28:43
自分もCから入ったからCじゃないものから入る人の気持ちは分からない
いきなりRubyを使うってどんな感じなんだろう
104デフォルトの名無しさん:2010/03/26(金) 00:51:26
LispやCから入れと言ったら挫折する人が多いと思うな
俺はいきなりRubyでも良いと思うけどな
まずプログラムをどんどん書かないと
遊びでも良いから何か実用性を見出せないと強制しないと続かないと思う

昔はBasicで入った人も多いし(俺はFortran→Cで入ったが)
105デフォルトの名無しさん:2010/03/26(金) 01:01:25
プログラムをどんどん書くって結構難しい。
家では本を読むだけだから力がつかない。
やっぱ仕事でプレッシャーかからないとダメ。
106デフォルトの名無しさん:2010/03/26(金) 01:04:14
作りたいものがないならプログラミング言語なんて覚えなくていいし学び続けられるものじゃない
作りたいものが特にないのならRubyのことなんて忘れて他のことやれ

もし本当にRubyのようなものが必要なのなら、たとえ今離れてもやっぱり戻ってくる
107デフォルトの名無しさん:2010/03/26(金) 01:07:58
遊ぶのなら、今日日はJavaとかActionScript(Flash)からとかじゃない?

WEBアプリをSwingやFlexでとか、ぶっちゃけ楽しい。
サーバサイドはRailsでもPHPでもとにかく楽できるし、その辺全部無料で
Windowでも完結できるし。

で、その辺から入ると、最後までCにたどり着かない可能性が高いと。
108デフォルトの名無しさん:2010/03/26(金) 01:35:20
>>107
Java使ってるけど正直プログラミング初心者には難しいのでは
Rubyの方がまだ簡単で何かできる感じがするが

たとえばファイル名を整理するとかファイルの中身を整形しなおす
とかデータ合わせるとか実用的でそんなに難しくない

これをJava+Swingでやれといったら初めは大変だと思うんだが
109デフォルトの名無しさん:2010/03/26(金) 01:39:36
> たとえばファイル名を整理するとかファイルの中身を整形しなおす
> とかデータ合わせるとか実用的でそんなに難しくない

いや、遊びでそんなことしないし

遊びと言えば、なんか表示して動かす。BASICから入った人なんかは
特にそうじゃね?他には音を鳴らすってパターンもあったけどもさ
そう言う意味で、SwingやらFlashやらって言ってみた
110デフォルトの名無しさん:2010/03/26(金) 01:42:11
Rubyは「おまじない」がないか、または最低限レベル(思想的にはBASICに近い)
JavaやC++はあらゆるパラメータを自力で全部指定できるのがメリットだが、初心者にはただの負担だ
111デフォルトの名無しさん:2010/03/26(金) 01:44:23
N88-BASICはおまじないの嵐だったがな
もちろん、BASICマガジンに載ってたコードの事だが
112デフォルトの名無しさん:2010/03/26(金) 02:01:19
>>106
とりあえず何か書いてから考察なり質問なりすべきw
どうしたらコード書くか言語学習するかなんて100%自分の動機だけの問題じゃんね
113デフォルトの名無しさん:2010/03/26(金) 02:29:46
cはゆるゆる過ぎて変な癖がつくと思う。
かといってrubyも変にperl互換な所で、変な癖がつくのは変わらないけど。

ゆるゆるから厳しい所はキツいので、最初から厳しく型宣言必要な言語のほうが、いいかもね。後から緩く成る分には楽で楽しく成るだけだし。
いろいろまんべんなく使ってみるのが無難かもね。
114デフォルトの名無しさん:2010/03/26(金) 02:32:45
Rubyを使ってると、しょうもないことを偉そうに語りたがるようになるということはわかった。
115デフォルトの名無しさん:2010/03/26(金) 02:54:35
しょうもないことってなに?
116デフォルトの名無しさん:2010/03/26(金) 03:01:20
片栗粉はゆるゆる過ぎて変なクセがつくと思う
かといって羊羹も変にこんにゃく互換で変なクセがつくのは変わらないけど
ゆるゆるから厳しいところはキツイので最初から厳しく型成形必要な射出のほうがいいかもね
117デフォルトの名無しさん:2010/03/26(金) 03:04:45
意味がわからんが、片栗粉はちゃんとレンジでチンしたのか?
118デフォルトの名無しさん:2010/03/26(金) 09:18:26
初めから厳しい言語使えとかまんべんなく使えなんてまず挫折すると思うが
コンパイル一つだって失敗するかも知れないのに

いきなり高い目標設定せずにとにかく自分が入りやすい言語を使う方が良いと思う
119デフォルトの名無しさん:2010/03/26(金) 09:52:34
おっさんしゃべり場
120デフォルトの名無しさん:2010/03/26(金) 11:07:01
ruby/tkってデフォルトでrubyに入ってるの?
tkだとスレッドに問題が発生することないのか
教えてエロい人!!
121デフォルトの名無しさん:2010/03/26(金) 11:14:00
スクリプトを実行する人のマシンにRubyがインストールされていて、
RubyのC言語ファイルの最初のコンパイル時にtkが有効にされていて、
なおかつ同じパソコンにTcl/Tkまたはtklib相当のものが別途インストールされていれば動作する
122デフォルトの名無しさん:2010/03/26(金) 11:21:33
…まあ、自分用だよな
他人にウィンドウを提供するために使うようなもんでもない
123デフォルトの名無しさん:2010/03/26(金) 11:26:24
横からだけど、じゃあ他人用にするなら何がいいと言うんだ
選択肢が多すぎて逆にどれを選んでいいかわからん
124デフォルトの名無しさん:2010/03/26(金) 12:04:48
rubyだめじゃん
rails以外は何にも作れないじゃん
125デフォルトの名無しさん:2010/03/26(金) 12:15:21
>>123
Rubyは使わない
126デフォルトの名無しさん:2010/03/26(金) 12:17:40
○○するのにはRubyは便利
××するのにはRubyは不便

○○に入るのが自分用スクリプトの作成
××に入るのがウィンドウでGUI
127デフォルトの名無しさん:2010/03/26(金) 12:19:08
なんでこんな中途半端なポジションになってしまったんだろう・・・
128デフォルトの名無しさん:2010/03/26(金) 12:25:22
>>124
早く気付けて良かったですね
129デフォルトの名無しさん:2010/03/26(金) 12:29:07
>>127
どこが中途半端なのかわからない
130デフォルトの名無しさん:2010/03/26(金) 12:31:44
>>129
ウィンドウを作るということに意味があると考えているのだろ
131デフォルトの名無しさん:2010/03/26(金) 12:34:13
少なくともGUI対応はPerlとそう変わらないレベルだと思うんだが何がそんなに劣ってるのだろう
132デフォルトの名無しさん:2010/03/26(金) 12:36:37
rubyはGUIはどうでもいいと思ってるようです
133デフォルトの名無しさん:2010/03/26(金) 12:38:33
・中途半端そうなライブラリがフラットにたくさん並んでいる
・ググっても網羅的な情報がない
・スレでGUI系の質問を見かけるたびに陰気臭い人にネチョネチョとからまれている
134デフォルトの名無しさん:2010/03/26(金) 12:38:36
>>131
言語の問題というよりは
使ってる人達の問題じゃないかな
GUIを便利にしようとするモチベーションがないし
そういう芽を自ら摘んでしまう独特の文化がある
135デフォルトの名無しさん:2010/03/26(金) 12:39:53
ウィンドウを作ることに意味はないとでも言うのか
136デフォルトの名無しさん:2010/03/26(金) 12:41:03
そう言っている人が Ruby 界隈には多いってことだろ
137デフォルトの名無しさん:2010/03/26(金) 12:44:43
>>135
必ずしも意味があるとは限らない
標準入力から標準出力への流れがプログラムだ
この両方が保証さえされていれば、ウィンドウは必須ではない

>>133
WindowsのAPIべったりだったり特定のGUIバインディング限定の話をだらだらされるからだよ

Railsの話をこのスレでしないのと同程度には、GUIの話はここでは向かない
  Ruby on Railsは全く別物でRuby本体の機能あんま関係ないよな

  RubyのGUIシステムは全く別物でRuby本体の機能あんま関係ないよな
はほぼ同じ

GUIのスレはこことかもあるぞ
ttp://pc12.2ch.net/test/read.cgi/tech/1155031689/
138デフォルトの名無しさん:2010/03/26(金) 12:46:05
>>137
さっそくからんでるしw
139デフォルトの名無しさん:2010/03/26(金) 12:48:23
>>137
それて、windows限定でしょ
意味不明なスレに飛ばそうとするなよ
140デフォルトの名無しさん:2010/03/26(金) 12:50:14
GUIの話の95%くらいはWindows限定の話だからWindows用スレで適当な気もする
141デフォルトの名無しさん:2010/03/26(金) 12:53:58
LinuxでウィンドウアプリケーションをRuby経由のツールキットを利用して作ってて
なおかつRubyの知識が初心者スレレベルという人を見つけるくらいなら宝くじに当たったほうが簡単

Linuxのツールキットが使えるような人はRubyも使い慣れてて本スレで聞きそうだと思う
142デフォルトの名無しさん:2010/03/26(金) 12:56:36
GUIが便利なのは、直感的な操作が求められる場合と
問題が本質的にグラフィカルな場合(画像編集とか)

現状じゃRubyって感じではないような……
あれば便利なのは間違いないけど
JRubyからSwingを使うアプローチとかは面白そうではある
143デフォルトの名無しさん:2010/03/26(金) 12:56:51
> Linuxのツールキットが使えるような人はRubyも使い慣れてて本スレで聞きそうだと思う

という認識でFA
Rubyユーザーにとって、GUIはRubyを使い慣れたあとにGUIを司るライブラリ単体で学習して使うもの
Ruby/Tkなら、Tkの使い方を勉強する
Tkの勉強だから、Rubyスレは関係ない
Ruby/GTKなら、GTKの使い方が必要で、やっぱりRubyスレは無関係

GUIライブラリを呼ぶような部分は、慣れたRubyユーザーなら特に質問が出るような障害にはならないと
144デフォルトの名無しさん:2010/03/26(金) 12:59:32
こういう長文でスレが埋ま理始めると末期だな。
145デフォルトの名無しさん:2010/03/26(金) 13:00:58
>>144
お前2ch使うの今月が初めてか
146デフォルトの名無しさん:2010/03/26(金) 13:03:01
自分のやり方は間違ってない主張の初心者 vs お前のやり方は間違ってるの主張の古参

という図式は毎年長期休みにたいていのスレで見られるもんだと思われ
たいていの場合、前者が誤りで、後者が大人気ない
147デフォルトの名無しさん:2010/03/26(金) 13:04:37
今年はテンプレが増えるのかどうか生暖かく見守ってます
148デフォルトの名無しさん:2010/03/26(金) 13:06:03
>>141
それ、俺だよ
149デフォルトの名無しさん:2010/03/26(金) 13:07:40
一人やけに沸点低い古参がいて毎回トラブルの元になってるんだよな
初心者スレまで来て何やってんだか
150デフォルトの名無しさん:2010/03/26(金) 13:10:36
初心者スレなので
「RubyでGUIなんて現状誰もやらないし、やっても中級者が趣味として嗜むレベルなんだよ」
というようなことは粘り強く啓蒙していくべきかと
勘違いしてしまう被害者は少なければ少ないほどいい

Ruby初心者にもGUI言語初心者にもわかりやすいGUIバインディングや解説を作るんだという志は大層立派だが、
でもこのスレとは無関係なので完成したら改めて教えてくれ
151デフォルトの名無しさん:2010/03/26(金) 13:29:15
無知のくせに絡んでくるんだよなGUI否定の人は
152デフォルトの名無しさん:2010/03/26(金) 13:31:35
そんなに頻繁に出てきてそのたびに荒れるんならGUI専用スレ作ればいいのに
153デフォルトの名無しさん:2010/03/26(金) 13:32:19
現代的スクリプト言語のうち
一般的なスクリプト用途とGUI用途とOS跨いだ移植に向いててそこそこ解説のある言語はPythonだけだな
「たったひとつの言語」をスクリプト言語に求めるならPythonやれ

本当はC++がいいんだが残念ながらスクリプト言語ではない
154デフォルトの名無しさん:2010/03/26(金) 13:32:20
>>151
同感
155デフォルトの名無しさん:2010/03/26(金) 13:33:04
CUI専用スレでも作ればw
156デフォルトの名無しさん:2010/03/26(金) 13:35:08
完成したら、というが

そんなに素晴らしいなら、作ってみてから
また来てくれ。

1. よし言語バインディングを調べて
2. 各ライブラリのラッパを書いて(これ膨大すぎるだろ)
3. ど、ドキュメントを書くぞ

大抵は1.の段階でほかの方向なり模索すると
思うんだな…(2までやるのでもかなり凄い。下手したら俺言語作るよりよほど難易度高いという…
157デフォルトの名無しさん:2010/03/26(金) 13:37:59
>>153
それ言ってしまうとジャスト1時間前の>>126-127に戻ってまたループに

なんかGUI否定の否定派がいる雰囲気
RubyはGUIに向かない、という事実を述べることのどこがそんなに気に食わないんだ…
158デフォルトの名無しさん:2010/03/26(金) 13:39:45
GUIプログラミングがしたかったら
Windows使えってことか。
159デフォルトの名無しさん:2010/03/26(金) 13:39:45
質問掲示板なんかでよくあるパターンだな
質問に答えることもなく、~~すべきでないと言いくるめようとする
160デフォルトの名無しさん:2010/03/26(金) 13:40:48
何がどうGUIに向いてないんだよ
普通に使ってるわボケ
161デフォルトの名無しさん:2010/03/26(金) 13:41:11
>>157
Rubyしか使えない人でなおかつGUIだけをやってる人がいるんだと思う
両方一気に否定されて立つ瀬がない
162デフォルトの名無しさん:2010/03/26(金) 13:42:26
教祖がウィンドウズ使ってないもの。
ウィンドウズの話は異端。地獄に堕ちるよw
163デフォルトの名無しさん:2010/03/26(金) 13:43:31
「向かない」と「できない」には天と地の差が…

>>160
それがスレ相当のRuby初心者にもできるのなら是非
164デフォルトの名無しさん:2010/03/26(金) 13:43:44
オブジェクト指向でGUIに向いてないってどんな言語だよ
165デフォルトの名無しさん:2010/03/26(金) 13:45:40
Ruby部分とツールキット部分を分けて考えられるかどうかが境界な気がする
166デフォルトの名無しさん:2010/03/26(金) 13:47:04
>>165
正直、puts したらアラートウィンドウがポップアップするくらいになってるべきだと思う
167デフォルトの名無しさん:2010/03/26(金) 13:50:12
いやそんな将来がどうとか妄想がどうとかどうでもいいから
現在どうなっていて、初心者はどうすべきかだけ教えてくれ
168デフォルトの名無しさん:2010/03/26(金) 13:54:26
>>167
自分で調べられない人が使えるほど楽ではないから、諦めた方がいいと思う。
英語にアレルギーがなくて、自分で調べられる人なら、問題無いように思う。
169デフォルトの名無しさん:2010/03/26(金) 13:56:05
結構いろいろGUIライブラリのRubyバインディングはある
GUIライブラリ本体やRubyライブラリのインストールにつまづく初心者は潔く諦めて他の方法を探す
使い始めて分からないことはGUIライブラリ本体の勉強をすれば分かるだろう

Rubyに関係ない質問が無ければここもそんなに変な空気にならんだろう
170デフォルトの名無しさん:2010/03/26(金) 13:59:42
>>167
Ruby/○○ の ○○ の使い方を自分で勉強できるなら問題はない(TkとかQtとか、Win32APIとか)
これはRubyとは無関係で、世間様一般では○○単体で使われていて、専用の参考書や解説がある

ただ、GUI提供ライブラリの利用初心者には普通に難しいとは思う
この部分は「Rubyは初心者にもけっこう簡単」という(実は間違った)煽り文句の適用範囲外
171デフォルトの名無しさん:2010/03/26(金) 14:05:34
で、これらを物凄く乱暴にまとめた言葉が「RubyはGUIに向かない」「初心者はGUIやめとけ」
172デフォルトの名無しさん:2010/03/26(金) 14:07:46
RubyでGUIを扱ってみて質問しに来る人と比べたら、GUI否定のおっさんは初心者にも及ばないカスみたいなもんだな
173デフォルトの名無しさん:2010/03/26(金) 14:12:55
>>172はRubyでGUIパーツ扱ったことないな
174デフォルトの名無しさん:2010/03/26(金) 14:14:42
GTKとか、ドキュメント少なすぎ。
やっぱりウィンドウズでやるしかないのか。
175デフォルトの名無しさん:2010/03/26(金) 14:18:34
Ruby/Tkが学習コストとできることの兼ね合い上おそらくベストと思われるが、
Ruby初心者かつTkの知識がない人にこれが理解できるとはとーてー思えん。
せめてどっちかに習熟しててくれないと発散しすぎて無駄に大変だと思う。

変に分離性が高いので、
「ここからRuby」「ここからTkを呼ぶRuby」「GUI連携はTk独自でRuby無関係」
という…
Rubyに慣れてると学びやすいという説に一票、あと>>173
176デフォルトの名無しさん:2010/03/26(金) 14:22:54
Ruby/Tkは「いいよもうこれ全部Tcl/Tkで書いたほうがいいよ畜生」と自棄になってTclに戻らせようとする巧妙な罠
177デフォルトの名無しさん:2010/03/26(金) 14:25:45
Windowsでいちばん簡単なのは「HSPでGUI作ってシェル経由でRubyスクリプトを呼ぶ」だと思う昨今
178120:2010/03/26(金) 14:29:32
ところで、お前らの結論を教えて欲しいんだけど

結局、お前らは何だかんだ言ってGUIをやったことが無いんだな
179デフォルトの名無しさん:2010/03/26(金) 14:31:52
なんだまだいたの
180デフォルトの名無しさん:2010/03/26(金) 15:20:58
エグザイルみたいなもんか
181デフォルトの名無しさん:2010/03/26(金) 15:35:15
>>153
同感
Ruby で無理して GUI やっちゃうと
環境依存になって結局後々苦労するのが見えてる
Python でやっとけばびっくりするほど簡単にどこでも動く
182デフォルトの名無しさん:2010/03/26(金) 15:39:34
複数の言語を使うことを厭うのは損だよね
183デフォルトの名無しさん:2010/03/26(金) 17:38:13
てすと
184デフォルトの名無しさん:2010/03/26(金) 18:09:39
ruby で角括弧[]が
browserForm = Form.new()
[browserForm].each do |f|
f.Text = 'hoge'
end
の様に使われているコードがあるのですが、この場合は
どういう意味なのでしょうか?
185デフォルトの名無しさん:2010/03/26(金) 18:11:57
array = [browserForm]
array.each ~
を省略して、生成と同時にメソッドコールしてるだけ
186デフォルトの名無しさん:2010/03/26(金) 18:16:55
いちおう追記
質問のために書いたコードや操作対象が複数のときに一括処理する場合に備えているならともかく
このコード自体はこれでいい

browserForm = Form.new()
browserForm.Text = 'hoge'
187デフォルトの名無しさん:2010/03/26(金) 19:10:37
>>185
ありがとうございます。
おっしゃる通り一括処理で使われています。
ruby の理解が浅いため何となく分かった程度ですが、
brouseForm = Form.new()
brouseForm.hoge = ~
といういくつかの処理を f.hoge という形で見やすくしている
と考えれば良いのでしょうか。
188デフォルトの名無しさん:2010/03/26(金) 19:19:36
見やすくっていうのも間違いではないけど
ループや関数(メソッド)化して同じ記述を避ける(DRY原則)のほうかな

puts "a"
puts "b"
puts "c"

["a", "b", "c"].each {|str|
puts str
}

3要素1項目ぐらいだから大差ないように見えるけど
これが10要素5項目ぐらいになったらバカバカしいことになる

つーかローマ字やめれw
189デフォルトの名無しさん:2010/03/26(金) 19:20:37
ローワーキャメルケースとキャピタライズメソッドのコンボの恐怖
どっちもRubyの主流から外れてるので書くときの参考にはしないように

配列に関してはオブジェクトが「入ってる」という理解でいい
(余裕があるならラベル入りの箱と考えるといいんだが)
箱からいっこ取り出すよ機能のeachで入ってるオブジェクト取り出して、
そのオブジェクトのメソッドを利用してる
190デフォルトの名無しさん:2010/03/26(金) 19:31:18
確かに [very_long_variable_name].each do |v| … end
で他の言語でいうletみたいなことはできるけど、普通は使わんなw
191デフォルトの名無しさん:2010/03/26(金) 20:56:33
あれ、GUI論争ってもう終わったの?
(コンパイルする方法がわからなくて途方に暮れながら)
192デフォルトの名無しさん:2010/03/26(金) 21:02:29
Tkのスレッド対応みたいに突っ込んだ話になるとレスがつかないのに
GUI論争するのっておかしい気がするな
193デフォルトの名無しさん:2010/03/26(金) 21:03:35
そもそもここで「論争」なるものをしないで欲しいので
194デフォルトの名無しさん:2010/03/26(金) 21:10:00
>>192
だってRubyのGUIでスレッドの話するのめんどくさいもん
ネイティブのTkのスレッドとユーザーレベルのRubyのスレッドの両方の話せんといかん
195デフォルトの名無しさん:2010/03/26(金) 21:13:35
rake教えてください
前処理が必要ないソース群と必要なソース群があるときruleはどう書けばいいんでしょうか?
下の例で、Bxのために前処理のルールをrule '.src' => '.pre'と書くと前処理が不要なAxまで前処理しようとします。
XはA1.out...An.out,B1.out...Bn.outに依存し、makeX A1.out A2.out...Bn.out -o Xで作成
A1.out...An.outはA1.src...An.srcに依存し、それぞれ makeOut Ax.src -o Ax.outで作成
B1.out...Bn.outはB1.src...Bn.srcに依存し、おなじく makeOut Bx.src -o Bx.outで作成
B1.src...Bn.srcはBn.pre...Bn.preに依存し、 makeSrc Bx.pre -o Bx.srcで作成
Ax,Bxはファイルが複数あることを示すため書いているだけで、ファイル名が連番ということではありません
196デフォルトの名無しさん:2010/03/26(金) 21:32:13
rule '.out' => '.src'
rule /B.*¥.src/ => proc {|t| t.sub('src', 'pre') }
197デフォルトの名無しさん:2010/03/26(金) 21:44:15
全部がBで始まるというのもないのか。

Regexp.union(FileList['*.pre'].pathmap('%n.src'))
などと工夫してみて。
198デフォルトの名無しさん:2010/03/26(金) 22:06:43
正規表現使ってまで rule に固執せずに

FileList['*.pre'].each do |pre|
file pre.pathmap('%n.src') => pre
end

のほうがベタだけどすっきり。
199デフォルトの名無しさん:2010/03/26(金) 23:57:10
>>192
春だからな、仕方がないんだよ
ここの人はプログラミングした事無いのに、
そこら辺の宗教戦争が好きだから
200デフォルトの名無しさん:2010/03/27(土) 00:19:01
まだ>>120が粘着してるのか
201デフォルトの名無しさん:2010/03/27(土) 00:19:02
知らないことを答えようとするとGUI否定の人みたいなのしか出てこないことになる
知らないことは見てるだけでいい
202デフォルトの名無しさん:2010/03/27(土) 00:37:34
Ruby/Tkの中の人があれだけがんばってるのに
GUI否定とかやられるとがっかりするよな

GUIスレが立ったみたいだからそっちが機能してくれればいいけど難しいか
203195:2010/03/27(土) 00:42:18
thx
単純には書けないんですね
204デフォルトの名無しさん:2010/03/27(土) 00:44:34
>>202
どう言葉で表現してもそもそも初心者向けではないはずなのだが、どうもそこに引っかかってる人がいる模様
初心者にもできるべきだと考える理由って何だろうね
205デフォルトの名無しさん:2010/03/27(土) 00:47:08
>>204
彼らはGUI肯定をしているわけではないのです
ほんのちょっぴり、初心者であったときのことを忘れてしまっているだけなのです
ここは初心者スレなのに、自分ができるからって相手もできると思ってしまってる
206デフォルトの名無しさん:2010/03/27(土) 00:55:29
初心者にも優しいとか散々宣伝してきたツケが回ってきてるだけだろ
自業自得だ
207デフォルトの名無しさん:2010/03/27(土) 01:08:29
ルビーのアンチは嘗ての初心者
208デフォルトの名無しさん:2010/03/27(土) 01:15:40
209デフォルトの名無しさん:2010/03/27(土) 01:52:19
RubyにGUIは向いてないとか言って馬鹿にされたから、今度は初心者がどうのこうのって
もうアホすぎて死んで欲しいわ
210デフォルトの名無しさん:2010/03/27(土) 01:52:54
Linuxだからruby-gnome2で満足してるけど、
ruby-gnome2と呼べばいいのかruby-gtk2と呼べばいいのか悩むことはある
211デフォルトの名無しさん:2010/03/27(土) 02:06:10
>>205
Rubyコミュニティそのままだな
212デフォルトの名無しさん:2010/03/27(土) 04:00:11
教祖がウィンドウズ使ってないからね。
信者もウィンドウズ使わずに過ごせばいいとしか思ってない。

ルビー使いたければ、教祖と同じデビアン使えば患部も目指せるかもよ。

http://pc11.2ch.net/test/read.cgi/linux/1267107714/
Debian GNU/Linux スレッド Ver. 63
http://pc11.2ch.net/test/read.cgi/linux/1154631461/
Debian原理主義者テラモエス
http://pc11.2ch.net/test/read.cgi/linux/1162356771/
Debian原理主義者ペタキモス
http://pc11.2ch.net/test/read.cgi/linux/1178083456/
【ubuntu】Debianは終わった?【knoppix】
http://pc11.2ch.net/test/read.cgi/linux/1237256190/
Debian-Liveに決めました
213デフォルトの名無しさん:2010/03/27(土) 08:53:31
Apollo ってなに?
214デフォルトの名無しさん:2010/03/27(土) 08:55:02
過去の過ち
215デフォルトの名無しさん:2010/03/27(土) 09:07:11
黒歴史になってんの?
216デフォルトの名無しさん:2010/03/27(土) 09:13:04
ビッグ・ボンバーズみたいなもんだ
5年遅かったスペシャルマンと5年早かったカナディアンマンのコンビ
217デフォルトの名無しさん:2010/03/27(土) 09:24:16
あれはRubyもいいけどDelphiもね!というキャンペーンの一環だった気がする
Delphiは言語自体はよかったんだけどねえ
過去形で話さなければならないのがつらい所

黒歴史ではない
ただの過去の遺物
Delphiのコンポーネントの知識があるなら選択肢になるかと思う
218デフォルトの名無しさん:2010/03/27(土) 11:11:47
>>208
いきなりクソスレ
ワロタ
219デフォルトの名無しさん:2010/03/27(土) 14:47:11
class C
 def a
  …
 end
 def b
  a.scan(re)
 end
 def re
  /…/
 end
end

というのを rspec とかでテストしたいです
a メソッド(と re メソッド)に依存してる b メソッドのテストはどうすればいいですか?
a がいくつかの値をとる場合の b のテストを書きたいです
b のテストで必要になるような値を a に返させるような初期値を与えるべきですか?
それとも全メソッド引数で渡すようにするべきですか?
220デフォルトの名無しさん:2010/03/27(土) 15:04:59
c = C.new
c.stub!(:a).and_return('ほげふが')
c.stub!(:re).and_return(/ふが/)
c.b.should ...
221デフォルトの名無しさん:2010/03/27(土) 17:58:47
>>205
オタクの悪いところだよなぁ
俺はわかるから、分からないお前らがだめなんだよ
みたいな
クソ根性論だよ
222デフォルトの名無しさん:2010/03/27(土) 18:02:32
>>221
誰もそんなこと言ってない気がするんだが。
223デフォルトの名無しさん:2010/03/27(土) 19:45:29
ちょっと聞きたいんだけど、

>>[1, 2, 3].each do |i|
>> puts i
>>end

>>[1,2, 3].each { |i| puts i }

この二つを実行すると同じ結果が出てくるけど
書き方が違うだけ(『do~end』が『{~}』になった)って事でいいのかい?
224デフォルトの名無しさん:2010/03/27(土) 19:50:36
>>223
そこに疑問持つくらいならまとまった解説をきちんと読んどいたほうがいいぞ

ちなみに回答はYES
do … end は { … } のブロックに置き換えることができる

全く似ていないものに begin … end があるがこれは置き換えができない
{ … } は Hash リテラルを記述するのにも使用されるがこれを end つき構文に置き換えることもできない
225デフォルトの名無しさん:2010/03/27(土) 19:55:35
>>224
うn、ありがとう&ごめん
本とか買わずにリファレンスだけ読んでて、唐突に.each doとか出てきて
『each』と『each do』って二つあんのか!ってびっくりしてしまってな
226デフォルトの名無しさん:2010/03/27(土) 20:01:57
do で始まって end で終わるものだけだな
end で終わるならなんでもカーリーブレースで置き換えられると思ってしまう人が結構いるので注意
どちらかというと do の存在のほうに注目してほしいんだが、なぜか end にばかり目が行く模様
227デフォルトの名無しさん:2010/03/27(土) 20:21:11
Runnable.new {
public void run(){
//適当な内容
}}
javaではこのようにクラスをオーバーライドすることができますが、
Rubyでこのような事をやるにはどうすればいいんですか?
228デフォルトの名無しさん:2010/03/27(土) 20:33:09
Rubyではクラスのオーバーライドはないと思う
ただの定数にクラス定義(とメソッド定義)が入ってるだけだから、
継承するだけで別のクラスオブジェクトになれるはず

元クラスの動作を変更せずに安全にメソッド追加したいだけなら
クラスを継承してからクラス定義を再オープンしてdef追加するかオブジェクトにextendでいいんじゃね
229227:2010/03/27(土) 20:42:46
>>228
1つのメソッドをオーバーライドできればいいんです
しかも、そのクラスは1回しかインスタンス化しません
なのでわざわざ、面倒なことはしたくないんです
230デフォルトの名無しさん:2010/03/27(土) 20:46:35
特異メソッドを使うといいと思う
obj = Runnable.new
def obj.run
puts "foo"
end
231227:2010/03/27(土) 20:54:42
>>230
特異メソッドにそんな使い方があったとは
単純にクラスに属すメソッドの定義だと思っていました

ありがとうございます
232デフォルトの名無しさん:2010/03/27(土) 20:56:33
>>230
うひょうこの定義のしかた超きめえ今度から使おう

素直に extend する人用

module RunExtender
def run; @run; end
end

r = Runnable.new
r.extend(RunExtender)
r.run
233デフォルトの名無しさん:2010/03/27(土) 21:00:57
>>231
発想の順番からいうと、特定のインスタンスだけで使えるように
定義するのが特異メソッド。
で、RubyのクラスってのはClassクラスのインスタンスだから、
その特異メソッドはいわゆるクラスメソッドの位置づけに相当するということ。
234デフォルトの名無しさん:2010/03/27(土) 21:05:09
ていうか>>219のもこれで用済まないかね
235デフォルトの名無しさん:2010/03/27(土) 22:33:45
普通のメソッドから特異メソッドにアクセスできないみたいですが、
どうにかなりませんか?
236デフォルトの名無しさん:2010/03/27(土) 22:43:16
>>235
>>231と仮定すると、どうにもならない
そもそも所属が違うから、特異メソッドの存在を知らないインスタンスメソッドは特異メソッドにアクセスできない

そうでないのなら、特異メソッドは new されたオブジェクトではなく
new するのに使った Class オブジェクトの持ち物なので self.class.hoge で使え
237デフォルトの名無しさん:2010/03/27(土) 22:44:57
>>236
thx
238デフォルトの名無しさん:2010/03/27(土) 22:45:24
できるよ。

irb> class Object; def hello; hello2; end; end
irb> o = Object.new
irb> def o.hello2; puts "hello"; end
irb> o.hello
hello
239デフォルトの名無しさん:2010/03/27(土) 22:52:12
配列にはattr_writerでアクセッサを指定することはできないんでしょうか?
240デフォルトの名無しさん:2010/03/27(土) 22:53:26
>>239
どういうメソッドが欲しいの?
241デフォルトの名無しさん:2010/03/27(土) 23:02:07
メソッドがほしいというより使い方が知りたいのです
attr_writerを指定すると読み書き両方ともできなくなったので
根本的に配列にattr_readerやwriterを使うのは間違いなのですか?

242デフォルトの名無しさん:2010/03/27(土) 23:05:09
えーと、

class Array
attr_reader ??? # ここに何書いたの?
end
243デフォルトの名無しさん:2010/03/27(土) 23:07:14
たとえば、配列にhogeという書き込み専用属性を作りたければ、

class Array
attr_writer :hoge
end
a = []
a.hoge = 10
a.instance_variables #=> [:@hoge]

のようにできるけど。
244239:2010/03/27(土) 23:08:53
こういう風にしました
readerArray = Array.new(3, 0)

attr_reader :readerArray
245239:2010/03/27(土) 23:17:04
質問のしかたが悪くてすみません・・・
こういう感じだとクラス内の配列は読み取りや書き込み専用にはならないのでしょうか
class Foo
def initialize
@readerArray = Array.new(3, 0)
@writerArray = Array.new(3, 0)
end
attr_reader :readerArray #ダメ
attr_writer :writerArray
end
246デフォルトの名無しさん:2010/03/27(土) 23:32:41
>>245
オブジェクトを作ってみる。
> f = Foo.new #=> #<Foo:0x000001010e23b8 @readerArray=[0, 0, 0], @writerArray=[0, 0, 0]>
@writerArray
書き込みアクセサで書き換える。
> f.writerArray= [1,2,3] #=> [1, 2, 3]
読み出しアクセサはない。
> f.writerArray #=> NoMethodError: undefined method `writerArray' for #<Foo:0x000001010e23b8>
リフレクションで取得は可能。
> f.instance_variable_get(:@writerArray) #=> [1, 2, 3]
@readerArray
書き込みアクセサはない。
> f.readerArray = [10, 20, 30] #=> NoMethodError: undefined method `readerArray=' for #<Foo:0x000001010e23b8>
リフレクションで書き換えることは可能。
> f.instance_variable_set(:@readerArray, [4,5,6]) #=> [4, 5, 6]
読み出しアクセサで取得。
> f.readerArray #=> [4, 5, 6]
attr_reader しかしていないと言っても、それで得られたオブジェクトが読み取り専用になっているわけではないので、
> f.readerArray.pop #=> 6
> f.readerArray #=> [4, 5]
のようなことは起こる。
247デフォルトの名無しさん:2010/03/28(日) 00:03:47
Rubyにアクセサという機構はない
attr_* は同名のインスタンス変数を返す(か代入する)メソッドを自動で作成するだけ

def arr
@arr
end

def arr=(a)
@arr = a
end

メソッド定義を自力で書くのを避けたいときに使うだけで、特別な動作はしない
def を書く代わりにできるだけ
248239:2010/03/28(日) 00:11:30
>>246
なるほど
アクセッサで指定した配列オブジェクトそのものは読み、書き専用になるけれども、
その中身のwriterArray[0]とかはwriterArrayのオブジェクトから読み込みができないので
各要素オブジェクトにもアクセスできなくなるので、writeArray[0] = 1 はできなくなり
readerArrayの場合は、readerArrayの読み込みはできるのでreaderArray[0]にアクセスできるけれども
readerArray[0]の要素オブジェクト自体は読み取り専用じゃないので readerArray[0] = 1 ができてしまうんですね
大変参考になりました

>>247
やっぱり横着してはならないのですね

夜遅くまでありがとうございました
249デフォルトの名無しさん:2010/03/28(日) 00:15:03
ぶっちゃけ、attr_ はもう名称変えたほうがいい
こんだけ広まったらもう混乱の元にしかならん
250デフォルトの名無しさん:2010/03/28(日) 00:15:55
rubyでmail送信したいんだけどXPHomeeditionではできない?
できれば携帯におくりたいんだけどできるかな?
ただしSMTPサーバがない状態で。
VB.NET & XP Professionalなら簡単にできたんだど。
だれかそのあたり詳しい人いますか?
条件は
XP Home Edition
携帯にmail送信。(異常時に)
SMTPサーバなし(外部サーバ通じてではできるらしい。VB.NET & Professional
なら不要)

251デフォルトの名無しさん:2010/03/28(日) 00:15:58
f.writeArray[0] は f に writeArray というメソッドがあってそこから
返ってくる配列に添え字アクセスする意味。
attr_writer :writeArray では writeArray= というメソッドしか
作られないからダメってことですな。
252デフォルトの名無しさん:2010/03/28(日) 00:20:48
どうでもいいけどLCCで書くのやめて欲しいなあ
Rubyではスネークケースで書いて欲しい

そういやスネークケースって言葉ぜんぜん流行らないよね
write_array みたいな全小文字でアンダースコア区切りの書き方ね
253デフォルトの名無しさん:2010/03/28(日) 00:24:46
>>250
require 'net/smtp'
使い方はマニュアル読め
254デフォルトの名無しさん:2010/03/28(日) 00:25:48
>>252
禿げ同。
初心者がスネークケースで質問するスレ立ててよw
255デフォルトの名無しさん:2010/03/28(日) 00:29:24
>>252
Rubyではあらゆる点でアンダースコア区切りが主流だと思って
ライブラリのトップファイル名をアンダースコア区切りにしたら叩かれたでござる

require 'hoge_lib' ではなく require 'hoge-lib' となるように作ろうね
require しないファイルはアンダースコア区切り
256デフォルトの名無しさん:2010/03/28(日) 00:30:49
個人的にはピリオド区切りが好き
257デフォルトの名無しさん:2010/03/28(日) 00:59:00
私初心者だけど
クラス命はFooBar
メソッド命もFooBar
変数名はfoo_barって感じで書いてた
こういうの嫌われるの?
258デフォルトの名無しさん:2010/03/28(日) 01:00:21
>>257
間違えた
クラス名 => FooBar
メソッド名 => fooBar
変数名 => foo_barでした
259デフォルトの名無しさん:2010/03/28(日) 01:03:37
>>255
マジか。アンダースコアで作っちゃった。
でも、active_recordとかもアンダースコアだし、いいよね?
ちなみに、その指針みたいなのどっかに書いてある?

260デフォルトの名無しさん:2010/03/28(日) 01:16:19
>>258
Rubyではメソッドを呼ぶ行為とローカル変数を呼ぶ行為は字面で区別しない
LCCを使用するのは特定の外部ライブラリのラッパーとかの特殊用途向け
メソッド名と変数名は全部小文字でアンダースコア区切りが普通
ちなみに大文字メソッド名でも定義はできるし動作もする(ただしレシーバ必須で self.Hoge 等と呼ぶ)
余談だが日本語でもできる(文字エンコーディングに注意)

>>259
そもそも active_support なのか active-support なのか activesupport なのかわかりにくいから
新しいメソッドはもうまとめようぜという話になったと記憶
261デフォルトの名無しさん:2010/03/28(日) 01:21:58
こんなとこでどうでもいい宗教論争吹っかけんなよ糞うざいから
262デフォルトの名無しさん:2010/03/28(日) 01:25:50
>>261
別に従わなくてもいい
全部のメソッド名を日本語にしても構わない
DSLで自分のルールを作るのさえ自由だ
end を } にするように書き換えてコンパイルすることを別に止めはしない

ただ、それは孤児になる
263デフォルトの名無しさん:2010/03/28(日) 02:00:57
Java が 1.1 系列になるときに、クラス定義の規則や、命名規則を厳格にすることで、
JavaBeans が成立し、開発環境でそれらを扱えるようになった。
マウスのD&Dで、イベント定義をしたり。

引数なしのコンストラクターを定義して、
setter/getter とか boolean は isProperty() にするとかそんなの。

命名にも、そういう実益があればいいんだけど、単にスタイルの問題だと従う意味が分からない。
264デフォルトの名無しさん:2010/03/28(日) 02:13:14
教祖が適当に決めてるのが現状だしな。
perl互換にしたがる傾向が強いが。
265デフォルトの名無しさん:2010/03/28(日) 02:24:29
>>263
Rubyは本当に本当に自由に書くことができるので、逆に記法が散逸してしまったのだな
スタイルというよりはデファクトの決定
読めない上に入力方法もわからない外国語UTF-8クラス名の外国語UTF-8メソッドを使いますとか言われても困る

rubygems は gem install のインストールディレクトリ名と require のファイル名を別個にすることができるので
たいそう混乱した
これは Hoe や Jeweler のサポートで軽減されてきている


別に従わなくてもいい
特に外部に公開しない場合は
公開するような場合でも、別に守らなくても構わない
ただし、それに伴って何か不利益を被ったとしてもそりゃ自己責任で
俺と違うやり方の世界のほうが悪いんだと叫んでくれ
266デフォルトの名無しさん:2010/03/28(日) 08:12:01
jrubyのライブラリはネイティブな実装ですか?
267デフォルトの名無しさん:2010/03/28(日) 09:54:00
「RubyはGUIに向かない、Pythonにしとけ」ってのは、どういうこと?
Pythonには、LinuxでもMacでもWindowsでも動くことができるGUIライブラリが標準で用意されてるんでしょうか。
268デフォルトの名無しさん:2010/03/28(日) 10:04:22
というかRubyのGUIは全部間借りなのよ
Ruby/TKはTcl/Tkというものを使ってて、Tkの勉強が必要
Ruby/GTKはGTKの、Ruby/QtはQt(Qt4)そのものの勉強をする必要がある
Rubyの文法とか考えとかそういうものとは全く別のものを勉強しなければならない

「GUIはRails並に別」と言われる所以
「わざわざRubyから呼んで苦労背負い込むくらいなら
直接そのプログラミング言語を学んで直接起動させたほうがマシじゃね」という
269デフォルトの名無しさん:2010/03/28(日) 10:07:09
> Pythonには、LinuxでもMacでもWindowsでも動くことができるGUIライブラリが標準で用意されてるんでしょうか。

これに全く答えてないわけだが。
Pythonには間借りでないGUIライブラリがあるわけ?
270デフォルトの名無しさん:2010/03/28(日) 10:15:22
この際だから
はっきり言ってしまうと
Pythonの場合
wxPythonならwxWidgetsは覚える必要はないし
PyQtならQtを覚える必要がない
TkinterだけはTcl/Tkを知らないと使えないとは思うけど
271デフォルトの名無しさん:2010/03/28(日) 10:35:23
Tclの難しいところ(変数/コマンド置換、制御構文のブレース等)はRubyがやってくれるから
Tcl知ってる人がTk使えるようになるのと
Ruby知ってる人がRuby/Tk使えるようになるのに必要な勉強の量は大差ないだろう

問題はLinuxでRuby/Tkが使えるようになるまでだけど
RubyでGUIやりたいって言ってる人はたいていWindowsユーザなんじゃないか
だとすればActiveScriptRuby入れてActiveTcl入れるだけでRuby/Tkが使えるようになるから
PythonでTkinter使うのとたいしてかわらない

とういわけでRubyでGUIスレの発展を切に願います
272デフォルトの名無しさん:2010/03/28(日) 10:39:34
Ruby/Tkが学習距離的にいちばんマシではある
「とりあえずウィンドウとかボタンとか入力欄とか出せればなんとかなんじゃね」
というコンセプトがRuby寄りだ
「Tcl/Tkでいちばん難しいのはTcl」という本末転倒な症状もRubyなら軽減

が、Rubyを一通り学んでからGUIに手を出すという順番自体は重ねて推奨
273デフォルトの名無しさん:2010/03/28(日) 10:48:22
>>270
それは>>269の答えになってるの?それともただの独り言?
274デフォルトの名無しさん:2010/03/28(日) 10:50:05
>>273
半分くらい答えになってるんじゃね?真偽は置いておいて。
というか何故そんなに喧嘩腰なんだ
275デフォルトの名無しさん:2010/03/28(日) 10:54:18
wxPythonなんかも結局wxWidgetsのマニュアル見ることになるから
あんまりRuby/Tkなんかと変わらないよ
その辺はどこのGUIインタフェースも一緒
276デフォルトの名無しさん:2010/03/28(日) 10:56:24
深い使い方しないという範囲限定の話だと思う
277267:2010/03/28(日) 11:02:09
>>268
プログラム言語によらず、GUIライブラリなんてそんなもんだと思っていたので、
RubyじゃなくてPythonだと何が嬉しいのかを知りたかったのです。

>>270
> wxPythonならwxWidgetsは覚える必要はないし
> PyQtならQtを覚える必要がない
GUIライブラリ固有の知識がなくてもPythonの知識だけでGUIが作れるということでしょうか。
これはにわかには信じられないのですが、ちょっとPython勉強して出直してきます。
278デフォルトの名無しさん:2010/03/28(日) 11:08:16
ttp://www.ibm.com/developerworks/jp/linux/library/l-qt/
> Ruby/Qt の使い方は、PyQtにかなり似ています。どちらの言語も同じような動的特性 (dynamism) と
> 簡潔性を備えていますので、個々の要素に名前の違いはあるにしろ、似た感じのコードになっていても
> 不思議はありません。
RubyもPythonも似たようなもんなんじゃね?
279デフォルトの名無しさん:2010/03/28(日) 11:08:42
でも俺はある程度Tcl/Tk知ってるからPerlでもRubyでもPythonでもTcl/Tk単体でも
学習コスト最低レベルでウィンドウを扱える

まあ要は用途次第だな
GUIを提供することだけが最重要で、その裏にあるプログラムの動作はどうでもいいとか
280デフォルトの名無しさん:2010/03/28(日) 11:14:18
そもそものあれとしてGUIが必要な人はRubyを使わないし、
Ruby使ってる人はRubyからGUIライブラリを呼ぼうなんて考えない
GUIが必要なときは素直に他の言語で書く
281デフォルトの名無しさん:2010/03/28(日) 11:17:23
>>280
んなこたーない。
…とは思うものの、自分も Ruby で書かれた GUI アプリは Rabbit くらいしかしらない。
282デフォルトの名無しさん:2010/03/28(日) 11:17:35
>>280
で、つまりRuby上のGUIは初心者の領域ではないという話になるわけか
別スレ立ったんだしとりあえずそっちでいいじゃん
283デフォルトの名無しさん:2010/03/28(日) 11:18:38
>>280
それはそうだろうけど、その「他の言語」ってところでPythonを勧められることがままあると。
んで、PythonとRubyではそんなに違いないんじゃないの?ってのが>>267の疑問では。

C#やらJavaやら勧められるんなら、そういう疑問は出てこないと思う。
284デフォルトの名無しさん:2010/03/28(日) 11:20:22
>>281
goRua…は終わったか
ホントにGUI部分の処理が面倒だなあ
ウィンドウ処理と滅茶苦茶高次に融合したRubyとかないの
285デフォルトの名無しさん:2010/03/28(日) 11:25:03
いいからこっちでやれ
Railsとスレ分けられるんだからGUIとだってスレ分けられるだろ

Ruby で GUI するスレ
http://pc12.2ch.net/test/read.cgi/tech/1269609576/
286デフォルトの名無しさん:2010/03/28(日) 11:39:52
ここは初心者スレだからGUIの話もオッケーよ
287デフォルトの名無しさん:2010/03/28(日) 11:46:26
プログラミング初心者には、GUIってのは、すでに出来上がって動いている
ものを操作するのは分かりやすいが、それをそう見えるように作るのは面倒
くさいということは知って欲しいなー。

テキストメッセージ1つのウィンドウを出す程度で満足なら別だけど。
288デフォルトの名無しさん:2010/03/28(日) 11:59:32
Rubyで使えるGUIライブラリってどんなのがあるの?
WndowsFormは使えんよね?
289デフォルトの名無しさん:2010/03/28(日) 12:03:19
attr_writer :hogeとdef hoge=(h);@hoge = h; endは
同じ意味だと思いますが、どっちを使うべきなんですか?
290デフォルトの名無しさん:2010/03/28(日) 12:10:29
>>289
前者は後者の意味であるということを理解してるならどっちでもいいよ

作ってる最中は attr のことが多いと思う
条件演算子→if式→case式 と移行するのと似たような感じで
結局後者(でメソッド内部で正規化処理つき)になることが少なくない
291デフォルトの名無しさん:2010/03/28(日) 12:17:26
>>288
Ruby/Tk
VisualuRuby
Ruby/Qt4
Ruby/GTK2
WxRuby
FxRuby
Apollo
Ruby/FLTK
RubyShoes

なんか終わってるのもいくつかあるが気にするな
292デフォルトの名無しさん:2010/03/28(日) 12:22:24
>>290
ありがとうございました
293デフォルトの名無しさん:2010/03/28(日) 12:22:57
>>291
ありがとうございました
294デフォルトの名無しさん:2010/03/28(日) 13:01:29
test do
例外が発生する可能性のある処理
end
----------------------------------------------------------------------------
def test
begin
例外が発生する可能性のある処理
yield
ensure;end
end
このようなコードを書いたのですが、test do; endの適切な処理がわかりません
教えてエロ人!!
295デフォルトの名無しさん:2010/03/28(日) 13:06:36
発生したときどうしたいのさ?
296294:2010/03/28(日) 13:18:57
>>295

test do endの中で全ての例外を処理し、
例外が発生した時はメソッドをreturnで終了させたい
297デフォルトの名無しさん:2010/03/28(日) 13:24:46
> test do endの中で全ての例外を処理
えー
そういう場合はメソッドのユーザーが自分の責任で begin で括る

begin
 test do ... end
rescue => e
 error_handling(e)
end
298デフォルトの名無しさん:2010/03/28(日) 13:30:30
>>297
THX
299デフォルトの名無しさん:2010/03/28(日) 15:51:35
チルダとダブルクォーテーションの使い分けって何かあったっけ?
何か重要なものがあったような気がするけど思い出せないんだ
300デフォルトの名無しさん:2010/03/28(日) 15:55:41
質問が微妙によくわからないけどこれ置いとく
http://doc.okkez.net/187/view/spec/literal
http://ja.wikipedia.org/wiki/%E3%83%81%E3%83%AB%E3%83%80
301デフォルトの名無しさん:2010/03/28(日) 16:01:10
チルダ ( ~ ) ?
Ruby で ~ を使うのは、マッチング演算子の =~ とその否定の !~ と、
前置の単項演算子で、整数のbitwise-not、正規表現オブジェクトと $_ とのマッチ、
IPAddr オブジェクトのbitwise-not、なので、ダブルクォートとの使い分けをする場面は
ないと思うが...
302デフォルトの名無しさん:2010/03/28(日) 16:08:37
間違ったプライムだ
文字やら文字列列をくくる時なんかに使うアレ
303デフォルトの名無しさん:2010/03/28(日) 16:10:41
′や″をRubyで使うことはない
304デフォルトの名無しさん:2010/03/28(日) 16:13:32
「円記号でエスケープ」と聞いて¥を使ってしまうようなピュアな人がここにも…ッ

というか文字列括る記号はさっき出てた
ttp://doc.okkez.net/187/view/spec/literal#string
このへんで用が済みそうだが
305デフォルトの名無しさん:2010/03/28(日) 16:17:51
うーn?%記法とやらを使えってか?
>>http://doc.okkez.net/187/view/spec/literal
とりあえずこれ読んでくる
306デフォルトの名無しさん:2010/03/28(日) 16:20:10
LispやErlangなんかのフォーマット文字列だっけ
チルダ使うの
307デフォルトの名無しさん:2010/03/28(日) 16:20:46
親クラスのアトリビュートにアクセスするためには、どうすればいいんですか?
308デフォルトの名無しさん:2010/03/28(日) 16:26:42
記号の区別の知識があることがやっぱ前提だよな
"''゛“"”′″`'‘’
309デフォルトの名無しさん:2010/03/28(日) 16:29:56
>>307
Rubyにはアトリビュートというものはない
継承されたクラスの a というメソッド内部から継承元の同名のメソッド a にアクセスするには super を使う
310307:2010/03/28(日) 16:34:42
>>309
そんじゃ、親クラスで定義した@hogeには
サブクラスから(メソッドを通さず)アクセスできないってことですか?
311デフォルトの名無しさん:2010/03/28(日) 16:40:09
>>310
え、いやふつーにアクセスできると思うんだが
irb> class C; def initialize; @hoge="hoge"; end; end
irb> class C2 < C; def hoge; @hoge; end; end
irb> p C2.new.hoge
"hoge"
312デフォルトの名無しさん:2010/03/28(日) 16:59:36
読み方いくつかバリエーションあるんだが

" ダブルクォート(ダブルクォーテーション)
' シングルクォート(シングルクォーテーション)
` バッククォート

でいいよな
表記の揺れは許容
313デフォルトの名無しさん:2010/03/28(日) 17:05:59
( ) カッコ、パーレン、小カッコ
{ } ブレース、波カッコ、カーリーブラケット
[ ] ブラケット、角カッコ
314デフォルトの名無しさん:2010/03/28(日) 17:08:01
シェルスクリプトやPerlの知識はいくらか前提にしたいなー。
315デフォルトの名無しさん:2010/03/28(日) 17:15:11
プライムは 1′23″ とか書くときに使う記号だな
316デフォルトの名無しさん:2010/03/28(日) 17:58:23
>>312
「マーク」を付けないところが童貞っぽい。
IPアドレスをIPって略しちゃうのと一緒で。
317307:2010/03/28(日) 18:00:19
>>311
JRubyでJavaのコードを継承しているんだけど
なぜかnilになっちゃう
318307:2010/03/28(日) 18:20:48
どうやら、JRubyからJavaのフィールドにアクセスするためには
絶対publicじゃないとダメみたい
しかもJRubyではローカル変数としてアクセスするみたい
class Super{
public String str = "str"
}
class Sub < Super
def initialize
p str
end
319デフォルトの名無しさん:2010/03/28(日) 19:11:37
>>315
わかったからもうやめて
俺のHPは0だ
320デフォルトの名無しさん:2010/03/28(日) 19:20:27
>>316
ダブルクオーテーションとダブルクオーテーションマークに何か違いでも
321デフォルトの名無しさん:2010/03/28(日) 19:43:07
フルだとどうにも長いからな
IPアドレスなんかとは違って紛らわしい候補はないから縮めてもらっても意味はわかるが

そもそもがダブルクとかシングルクとかそれくらい短いといいのに
322デフォルトの名無しさん:2010/03/28(日) 20:04:45
一重引用符、二重引用符で各5文字だ。
323デフォルトの名無しさん:2010/03/28(日) 20:19:17
>>322
それは、カギカッコと区別がつきづらいので使わないで欲しい。
324デフォルトの名無しさん:2010/03/28(日) 20:21:07
半角単引用符
半角複引用符
6文字でFA
325デフォルトの名無しさん:2010/03/28(日) 20:24:53
ほほう«ギュメ»は‹引用符›ではないと申されるかこれは異なことを

…いいよもうシングルクオートで
326デフォルトの名無しさん:2010/03/28(日) 20:27:50
次の瑣末粘着者さんどうぞ
327デフォルトの名無しさん:2010/03/29(月) 00:06:44
メソッドの名称とかモジュールの名称って
短い方がプログラムの実行速度が速くなるとかありますか?
328デフォルトの名無しさん:2010/03/29(月) 00:12:59
…いつのBASICだ
気にする必要はない
変な省略はせずにわかりやすい長めの名称推奨
329デフォルトの名無しさん:2010/03/29(月) 00:38:43
大きなオブジェクトを変数に入れた後は変数に nil を明示的に指定すると
メモリ内に巨大なデータがいつまでも残ったままになったりしません

とか書いたら信じて実行してくれるだろうか
330デフォルトの名無しさん:2010/03/29(月) 00:49:44
irb だとわかるけど、 require するとけっこうメモリ食うよね
331デフォルトの名無しさん:2010/03/29(月) 01:56:45
win32版Ruby1.87(OSはWindowsXP)9で、漢字を表示するようなスクリプトをUTF-8で保存して
スクリプト一行目に#! ruby -Kuと入れて実行したら文字化けした
-KsにしてS-JISで保存して実行したら直った

・・・ちゃんとBOM無しとやらにしたのに何でかしら?Ruby本体の設定とかあって、それを間違えてるとかかしら?
ちなみに使用したのはサクラエディタ
332デフォルトの名無しさん:2010/03/29(月) 02:12:20
>>331
Windowsという事は、コマンドプロンプトで実行したという事ですね。
コマンドプロンプトはデフォルトではSJISしか正しく表示できないのです。
コードページをUTF-8に変更すれば表示できると思われます。
方法は「コマンドプロンプト コードページ UTF-8」でググってみて下さい。
333デフォルトの名無しさん:2010/03/29(月) 02:38:29
>>332

コマンドプロンプトちゃんの設定が悪かったのか
にしてもこんな設定があったとは・・・
334デフォルトの名無しさん:2010/03/29(月) 07:43:46
chcp65001 のことだったらまともに動かないし使えねーんだが
335デフォルトの名無しさん:2010/03/29(月) 07:47:45
>>334
全く問題ない文字を表示してるだけなら問題はない
>>333はそのパターンだろう
336デフォルトの名無しさん:2010/03/29(月) 12:48:03
QueueにデータAが無かったら、データAを追加する
処理を書きたいのですが
どのようにして確認すればいいのでしょうか?
337デフォルトの名無しさん:2010/03/29(月) 13:23:48
デフォルトではQueueは存在しないので、
自分で作るかArrayで代用するか適当なライブラリインストールする必要がある

…で、Arrayで代用する場合はまあ include? でいいんじゃね

queue = Array.new
queue.push('one')
queue.push('two')
queue.push('three')

puts queue.shift
puts queue.shift

queue.push('four') if queue.include?('three')
338デフォルトの名無しさん:2010/03/29(月) 13:24:23
RubyのQueueはスレッド間のデータ受け渡し用に用意されているもので、
汎用のデータコンテナではないと思う。

一応 Queue のインスタンス変数 @que が内部で持ってるデータのリスト
なので、これを無理矢理参照して include? でデータの存在をチェック出来
るけど、素直にArrayをshift/pushもしくはunshift/popのペアを使って
キューと見なすほうがよいと思う。
339336:2010/03/29(月) 13:33:19
>>337-338
よーくわかりました。
Array.newとQueue.newの2つを使いたいと思います
ありがとうございました
340デフォルトの名無しさん:2010/03/29(月) 19:12:32
File.exist?(filename)とFile.exists?(filename)
の違いがわからない
単に書き方が違うだけか?
341デフォルトの名無しさん:2010/03/29(月) 19:21:06
>>340
前者推奨
sつきの後者は互換性のために残されているだけで1.9では既に無い
ttp://www.ruby-lang.org/ja/man/html/obsolete.html#FileTest.2eexists.3f
見つけるの苦労したぞ
わかりやすいとこに置いておいてくれ
342デフォルトの名無しさん:2010/03/29(月) 20:15:24
その後復活したけどな
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/file.c?view=diff&r1=14389&r2=14390
しかもobsoleteもなくなってるという
343デフォルトの名無しさん:2010/03/29(月) 21:37:30
>>340
なるほど、んじゃあexist?(hoge)を使うようにしよう
ともかくありがとう
344デフォルトの名無しさん:2010/03/29(月) 22:56:56
javaのつもりでcase 文で一行ごとにbreakを入れたら酷い目にあった
知ったかは危険だ・・・
345デフォルトの名無しさん:2010/03/29(月) 23:40:13
スレッドの中から@arrray.shift()としたのですが、
スレッドの外から@arrayを見るとちゃんと動作していません

どうやったら、整合性が取れるようになりますか?
346デフォルトの名無しさん:2010/03/30(火) 00:38:52
>>345
> どうやったら、整合性が取れるようになりますか?
typoを無くす
347デフォルトの名無しさん:2010/03/30(火) 05:58:33
>>336
それはキューではない。
348デフォルトの名無しさん:2010/03/30(火) 08:12:10
>>346
何それ?
349デフォルトの名無しさん:2010/03/30(火) 10:23:04
>>342
まあ 1.9.2 で実際に出たら考える
350デフォルトの名無しさん:2010/03/30(火) 10:25:27
shiftできるんだから、@arrrayの方が正しんだな。
351デフォルトの名無しさん:2010/03/30(火) 19:18:13
BitmapArrayって何ですか?
352デフォルトの名無しさん:2010/03/31(水) 08:49:43
def hoge *argsのとき、
hoge {:fuga => :piyo} で呼ばれたのか、
hoge :fuga => :piyo で呼ばれたのか判断する方法ってあるんですか?
353352:2010/03/31(水) 09:06:16
あ、
hoge {:fuga => :piyo}じゃブロックになっちゃうから
hoge({:fuga => :piyo})ですね。
354デフォルトの名無しさん:2010/03/31(水) 09:14:02
Ruby にはキーワード引数というものは存在しない
Symbol キーの Hash をそれっぽく使っているだけ
メソッドの引数内に限り、解釈の混乱の起きない範囲で Hash リテラルは { } を省略することができる

hoge(:key1 => val1, :key2=>val2)

hoge({:key1 => val1, :key2=>val2})
は同じだ

huga(param, {:key1 => val1, :key2=>val2})

huga(param, :key1 => val1, :key2=>val2)
も同じ
355352:2010/03/31(水) 10:02:08
どもです。わかりました。
356デフォルトの名無しさん:2010/04/02(金) 04:53:24
正規表現で得た複数のデータをそれぞれ配列に格納して、
その配列を比較するにはどうすればよいのでしょうか。
357デフォルトの名無しさん:2010/04/02(金) 10:02:28
そのまんま1処理ずつ書けばいいじゃん
なんでもかんでも1フレーズに押し込めようとするのは損
358デフォルトの名無しさん:2010/04/03(土) 13:57:20
359デフォルトの名無しさん:2010/04/04(日) 01:27:32
鬼車を使いたいんですが、1.87に実装されていますか? 1.91は不安なので。
360デフォルトの名無しさん:2010/04/04(日) 02:47:06
リテラルは無理だが、oniguruma gemはある。
361デフォルトの名無しさん:2010/04/04(日) 12:02:56
>>360
どうもありがとうございます。今から試してみます。

ところでみなさん、1.9系統への移行はいまだに時期尚早だと思いますか?
正式リリースから一年以上経ったし、そろそろ良いかなーとも思っているんですが。
みなさんはいまだに何か不都合とかありますか。
362デフォルトの名無しさん:2010/04/04(日) 14:42:20
system("make")等でmakeを実行しつつログを保存したいのですが
良い方法はないでしょうか?IOクラスのパイプとかリダイレクトとか良く分からなくて…

text=`make`ではmakeの出力がリアルタイムで確認できず
system("make 2>&1 | tee hoge.txt")では、$?でmakeの戻り値を
取得できなくなってしまうので困ります(失敗したらexitしたいのです)。
363デフォルトの名無しさん:2010/04/04(日) 14:52:42
>>362
1.8 なら fork と exec で自分でがんばるしかないと思う。
1.9.1 なら spawn で、1.9.2 なら open3 で、できるかもしれない。
364デフォルトの名無しさん:2010/04/04(日) 15:32:31
365デフォルトの名無しさん:2010/04/04(日) 17:33:45
Structを要素とする2次元配列の消費メモリが大きくて困っています
500個 * 約13000個 * 要素数5の構造体(整数4つ+文字列)のデータで
2Gbyte以上消費します(Cで書けば150Mbyte程度で収まる)

Rubyではこの程度のメモリ消費は普通なのでしょうか?
あるいは使い方やコツ等が分かっていないのでしょうか?
環境はruby1.8.7 on MacOSXです
366362:2010/04/04(日) 17:34:10
>>363>>364
ありがとうございます。1.9.1だったので以下のようにしてみました。
こういうコードでいいのか分かりませんが、とりあえず目的は達成できました。

r,w = IO.pipe
pid = spawn("make", STDOUT=>w)
spawn("tee build.log", STDIN=>r)
ret = Process.waitpid2(pid)[1].to_i
w.close
if ret != 0
puts "[Error] (build) #{src}"
exit 1
end
367デフォルトの名無しさん:2010/04/04(日) 17:40:08
>Rubyではこの程度のメモリ消費は普通なのでしょうか?

普通
368デフォルトの名無しさん:2010/04/04(日) 18:56:57
ruby1.8.7がruby1.9系の良いところをフィードバックしたバージョン
rails3がruby1.9対応だからみんなそれまでは焦って動くことはなさそう。

メモリ消費でCと比べるのはrubyがかわいそう
javaだってcの10倍以上使っておかしくないんだぜ?
ruby1.9系が1.8系よりも良い所って
今のところガーベージコレクションが良いって記事しか読んだ事無いな。
369デフォルトの名無しさん:2010/04/05(月) 10:54:00
>>366
わざわざtee使って複数プロセスにするから面倒な事になるんだろ。

ret = IO.popen("make", "r") {|mk|
open("build.log", "w") {|log| IO.copy_stream(mk, log)}
Process.wait2(mk)[1]
}
unless ret.success?
abort "[Error] (build) #{src}"
end

IO.copy_streamがなければそのくらい作れ。
370デフォルトの名無しさん:2010/04/05(月) 10:55:53
あ、teeになってないな、これだと。
copy_streamの代わりにこうでもしてくれ。
mk.each{|line| log.puts(line); puts(line)}
371365:2010/04/05(月) 17:58:32
>>367,368
そうですか・・
倍程度かなと勝手に予想してましたが、そんなに甘くはないですね
ありがとうございました。
372デフォルトの名無しさん:2010/04/05(月) 22:51:12
書きやすくて実行しやすくてなおかつ投げ出したくならない程度の実行速度も求めた結果、
Ruby においてはメモリはすっげぇ大量に消費される

ご存知の通り、プログラムにおいて実行速度とメモリ使用量はトレードオフだ
どっちも良くしたい場合はアセンブラかせめて C で書か「ねばならない」

大量のデータを処理するのでなければ常識的な範囲内に収まるものではあるのだが、
大量のデータを処理することが事前にわかっているのなら Ruby を使わないほうがたぶん幸せ
373デフォルトの名無しさん:2010/04/05(月) 23:17:25
馬鹿な事いってんじゃないよ、
ムーアの法則知らないのか?
それは、10年前のpcの話だろ
374デフォルトの名無しさん:2010/04/05(月) 23:22:18
>>373
何言ってるの
いつの時代もCPUは100パーセント使用されるし
メモリはスワップにまで突っ込むし
HDDは90%まで埋まるもんだよ

10年前のデータ量を現在のマシンで取り扱うなら、君の言ってることは真だろうね
375デフォルトの名無しさん:2010/04/05(月) 23:34:47
ムーアの法則を知っていてパーキンソンの法則を知らないのはニワカ
376デフォルトの名無しさん:2010/04/05(月) 23:35:36
>>372
大量のデータでまったく同じ処理を何回もするならそうかも知れない
(大量の定義にもよるが)
あるいはとにかく速さを要求されるならそうかも知れん
ただ,大量のデータでもそんなに何度もしないならRubyの方が幸せかも知れん

たとえばRubyで処理に1日かかってアセンブラなら半分の時間でできるとしよう
coding/debug でその差以上得しなければ時間的にさえ得にならない
人件費ではさらに得にならない

coding のオーバーヘッド評価しないと意味が無いから状況に依りすぎる

有名な教訓を思い出すなぁ
"premature optimization is the root of all evil"
377デフォルトの名無しさん:2010/04/05(月) 23:45:13
>>374
いわゆるデスクトップ版Linuxを使ってるとその思いが強くなる

10年くらい前は「もうちょっとマシンが早かったらこれすげえ快適なんじゃね!?」と思い
5年くらい前には「もうちょっとマシンが早かったらこれすげえ快適なんじゃね!?」と思い
今年インストールしたLinuxでも「もうちょっとマシンが早かったらこれすげえ快適なんじゃね!?」と思ってる
378デフォルトの名無しさん:2010/04/05(月) 23:59:29
>>377
いいかげんマシン買い換えようよ
379デフォルトの名無しさん:2010/04/06(火) 00:31:18
>>378
えっ
380デフォルトの名無しさん:2010/04/06(火) 14:16:53
今すぐtwmに変更するんだ!
381デフォルトの名無しさん:2010/04/06(火) 15:39:04
通年重いのはツールキット部分だな
起動するGUIアプリケーションが全部OpenMotif使うようになるとかなら歓迎だがそうでもあるまい
382デフォルトの名無しさん:2010/04/06(火) 18:11:00
Ruby 使うって時点で GTK だったりするのがアレだ罠
383デフォルトの名無しさん:2010/04/07(水) 15:56:17
マク自体余計なものがいっぱいで重いしなあ。今更。
twmに戻れば爆速。マクってgui無効に出来ないものなのか?
384デフォルトの名無しさん:2010/04/07(水) 21:00:58
ちょっと質問いいでしょうか?railsでの話なのですが、rubyとネットワーク一般なのでこちらで質問させて下さい。

webアプリで自ホストからのアクセスかどうかチェックするスマートな方法はないでしょうか?

railsだとlocal_request? というメソッドがあるのですが、
それはデフォルトだとrequest.remote_ip(つまりREMOTE_ADDR環境変数のようなもの)が127.0.0.1かどうかのみをチェックしているため、
開発マシンだとそれでローカルかは判別できるのですが、サーバーだと127.0.0.1以外の自ホストのアドレス(グローバルIPとかNAT内のIP)が返ってきてうまくいきません。

そのため、local_request?の処理を上書きしてやろうと(ドキュメントには上書きして使ってね、とありますし)
指針としては、自ホストのIPアドレスとrequest.remote_ipが同じかチェックしようとしているのですが、
自ホストのIP取得するのには、
Socket.getaddrinfo(Socket::gethostname, nil, Socket::AF_INET)[0][3]
でいいものでしょうか?ちょっと回りくどくないですか?

お聞きしたいことは、
・(ローカルからのアクセスの判別は)実はもっと簡単な方法があるよ、
・自ホストのIP取得はもっと簡単にかけるよ
などということです。
385デフォルトの名無しさん:2010/04/07(水) 21:37:31
>>384
1.9.2 だと Socket.ip_address_list ってのが使えますけど、それ以前はこれって方法はないですね。
386デフォルトの名無しさん:2010/04/07(水) 21:54:52
ていうかめんどくへえから公式でメソッドいっこに纏められたという感じだな
387デフォルトの名無しさん:2010/04/08(木) 01:25:10
ずっと規制で書けなくてもうすっかり今更なんだけど、
折角実験までしたので勿体ないから書いとく。

>>365
2GBは食い過ぎの気がする。
初期化の仕方とか工夫してみたらどうだろう。
ウチの環境で下のコードを動かした結果がコレ。
メモリ不足でこれ以上はできないが、参考まで。

S = Struct.new(:i1,:i2,:i3,:i4,:s)
i = 0
a = Array.new(500) { Array.new(8192) { i+=1; S.new i,i+1,i+2,i+3,i.to_s } }

Ruby 1.8.7 WinXP SP3 (32bit) 400MB未満
Ruby 1.8.7 FreeBSD 8.0 (64bit) 800MBちょい
388デフォルトの名無しさん:2010/04/08(木) 13:03:12
>>387
たぶん1.9.1ならStringのあたりでメモリ消費減ると思う
Structの要素数が3以下ならそっちでも減るはず
389384:2010/04/08(木) 18:05:06
>>385-386
サンクス
Rubyのバージョンは1.8.7でした。1.8.7だと簡単な方法はないですかー。回りくどい方法でやってみます
390デフォルトの名無しさん:2010/04/08(木) 20:20:53
ファイルパスは文字列で書けないのね
File.join 使わないと動作が保証できないとか面倒すぎる
391デフォルトの名無しさん:2010/04/08(木) 20:25:23
UNIX使え
392デフォルトの名無しさん:2010/04/08(木) 20:26:06
>>390
Pathname 使って + するのは?
393デフォルトの名無しさん:2010/04/08(木) 20:27:15
File.join はアイデンティティが崩壊中
どんな場合に使うのが正しいのか誰も回答示せない状態
394デフォルトの名無しさん:2010/04/08(木) 20:29:47
>>391
それはそのスクリプトの作者ではなくそのスクリプトを使用するユーザー全員に言うべき
395デフォルトの名無しさん:2010/04/08(木) 20:32:08
※ UNIX/Linuxじゃないと動作保証しません
396デフォルトの名無しさん:2010/04/08(木) 20:33:16
File.join って obsolete じゃなかったっけ?
397デフォルトの名無しさん:2010/04/08(木) 20:38:06
>>396
怖いこと言うな
398デフォルトの名無しさん:2010/04/08(木) 20:46:37
「末尾がどっちのディレクトリ区切り文字かわからない(ついてるかどうかすら不明な)文字列」
を連結したくて、なおかつ結果を現在のOS依存の相対ディレクトリ表記で表記したい場合に File.join を使う
399デフォルトの名無しさん:2010/04/08(木) 20:49:58
そもそものアレとして dirA\dirB\file.txt という文字列が外部から来たとき、これを File で扱うことはできない
400デフォルトの名無しさん:2010/04/08(木) 20:54:21
>>399
Windowsなど(含むcygwin)ならopenとかFile.expand_pathとかFile.basenameとかでは扱える。
扱えないのはDir.globくらい。
401デフォルトの名無しさん:2010/04/08(木) 21:08:57
C:>ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32]
C:>ruby -e "p File::SEPARATOR"
"/"

この時点で File.join に存在価値はない
402デフォルトの名無しさん:2010/04/08(木) 21:18:20
>>401
> ruby -e "p File::ALT_SEPARATOR"
"\\"
403デフォルトの名無しさん:2010/04/12(月) 02:12:03
RubyでHTTPをIOライクに扱えるライブラリがあったら教えてください
巨大なファイルやストリーム的に送信されるデータをRubyで取得したいです

標準のnet/httpやopen-uriはレスポンスが終了するまで処理が停止してしまいますし
socketだとHTTPをすべて実装する必要があるので・・・

よろしくお願いします
404デフォルトの名無しさん:2010/04/12(月) 02:26:25
何がどうIOライクなんだ
405デフォルトの名無しさん:2010/04/12(月) 04:16:18
もしかしたら非同期でHTTP通信したいということじゃないか
もしそうならスレッド使ったらいいのでは
406デフォルトの名無しさん:2010/04/12(月) 06:54:20
1キロバイトずつ通信するとかそういう器用なことをしたいのでは
407デフォルトの名無しさん:2010/04/12(月) 11:22:03
とあるエディットボックスの
日本語入力中にIMEの変換中の文字列を取得したいのですが、
#-------------------------------------------------------
win = エディットボックスのウインドウハンドル

# 入力コンテキスト取得
a = Win32API.new( "imm32", "ImmGetContext","l" ,"l").call(win)

# バッファ作成
buf = "\0" * 256

# IMEの変換中文字列を取得
ImmGetCompositionString = Win32API.new("imm32", "ImmGetCompositionString", "llpl", "l")
ImmGetCompositionString.call(a, 0x0008, buf, 0)
buf.delete!("\0")

p buf # 常に空の文字列「""」しか返ってこない

#-------------------------------------------------------
…となってしまいます。根本的にやり方がおかしいのでしょうか?
どなたか上手く取得する方法を教えてください。
408デフォルトの名無しさん:2010/04/12(月) 11:32:37
すいません、自己解決しました。引数が間違っていたようです
409デフォルトの名無しさん:2010/04/12(月) 11:58:17
>>403
Net::HTTP#get に block を渡すか、
http://doc.okkez.net/static/187/method/Net=3a=3aHTTP/i/get.html
OpenURI#open の :progress_proc オプションを使う
http://doc.okkez.net/static/187/class/OpenURI.html
410403:2010/04/12(月) 20:32:01
レスありがとうございます

>>409
それっぽく動いてくれそうなので使ってみます
411デフォルトの名無しさん:2010/04/13(火) 00:20:17
たのしいruby第3版買った
412デフォルトの名無しさん:2010/04/13(火) 09:18:51
そういやベストプラクティスで「単純な場合はattr_*使え」ってあったけど、あれrdocとかのコメント機構追いついてないよね
内部変数名と外部提供用アクセスメソッドが同名であることが自然な場合ってレアだよね
413デフォルトの名無しさん:2010/04/13(火) 12:37:21
> diff 'hello'.class.instance_methods 'hello'.class.methods
が実行できない事に失望した
414デフォルトの名無しさん:2010/04/13(火) 12:46:26
結果は配列なんだし引けば

irb> p 'hello'.class.instance_methods.size
185
irb> p 'hello'.class.methods.size
81
irb> p ('hello'.class.instance_methods - 'hello'.class.methods).size
134
415デフォルトの名無しさん:2010/04/13(火) 13:11:01
104?
416デフォルトの名無しさん:2010/04/14(水) 07:55:44
インスタンスメソッドとクラスメソッドだからもともと包含関係にはない
417デフォルトの名無しさん:2010/04/14(水) 08:17:25
Object とかでたまたま被ってる数だな
418デフォルトの名無しさん:2010/04/14(水) 21:34:35
>>413
Kernel.diffがあればできるだろうけど、ないからね
> p 'hello'.class.instance_methods - 'hello'.class.methods
でいいんじゃないの?見にけりゃ、ppで
419デフォルトの名無しさん:2010/04/14(水) 21:36:35
というか diff 関数のあるスクリプト言語ってそんなにあるっけか
420デフォルトの名無しさん:2010/04/14(水) 22:04:50
今こそ差分演算子 --- の導入を!
421デフォルトの名無しさん:2010/04/15(木) 00:42:30
Array#-とどう違うんだ
422デフォルトの名無しさん:2010/04/15(木) 02:38:16
そこまで言ったらリフレクションの世界っぽいし、
現実的にはぶっちゃけシェルでやっちゃえよ
423デフォルトの名無しさん:2010/04/15(木) 02:41:35
Rubyのライブラリで、文字列のdiffとか無いの?
424デフォルトの名無しさん:2010/04/15(木) 07:54:42
外部の diff を使うほうが速くて安くて安心という結論だった気がする
425デフォルトの名無しさん:2010/04/15(木) 08:24:32
「diff なんだったらあれもこれもできて欲しい」というのがあるからなー
それを pure Ruby で再実装しようというのは結構マゾい
426デフォルトの名無しさん:2010/04/15(木) 09:33:12
レーベンシュタイン距離導入してほしいとかいう声は見た気がする。
427デフォルトの名無しさん:2010/04/15(木) 09:41:01
あれを String に入れてというのはそれこそアレだ
それを活用するライブラリを作ってそれを require すると String が拡張、みたいな手順踏んでもらったほうが

ところで

$LOAD_PATH.unshift(File.join(File.dirname(File.expand_path(__FILE__)), '/../lib/'))

これ File なんとかの部分短くなんないっすかね
428デフォルトの名無しさん:2010/04/15(木) 09:44:44
どんな起動のされ方しても __FILE__ が常にフルパスを保証できるかどうかとかそういう話?
429デフォルトの名無しさん:2010/04/15(木) 09:47:59
$LOAD_PATH は ruby 用だからスラッシュ区切り確定でいいと思う
File.join はいらね

$LOAD_PATH.unshift(File.join(File.dirname(File.expand_path(__FILE__)), '/../lib/'))
$LOAD_PATH.unshift("#{File.dirname(File.expand_path(__FILE__))}/../lib/"))
430デフォルトの名無しさん:2010/04/15(木) 09:55:55
$LOAD_PATH が相対で何かまずいことがある?
…あるか

__FILE__ という名前の変数は「慣習的に絶対パス」だと思うなあ
431デフォルトの名無しさん:2010/04/15(木) 10:57:40
diff-lcs というライブラリはある。
lcsの意味が分からない人向けではないと思う。
432デフォルトの名無しさん:2010/04/15(木) 20:34:05
下のようなことをRubyで書くにはどうすればいいでしょうか?
$str ="Tom,19,man";
list($name,,$sex) = explode(",",$str);

いろいろ試してみたのですが下のように書くとエラーがでます。
name,,sex = str.scan(/(.+?),(.+?),(.+)/);

433デフォルトの名無しさん:2010/04/15(木) 21:09:32
age
434デフォルトの名無しさん:2010/04/15(木) 21:13:47
str ='Tom, 19 ,man'
name, age, sex = str.split(/\s*,\s*/)

age が不要なら _ にでもしとけ
435デフォルトの名無しさん:2010/04/16(金) 01:25:59
>>434
ありがとうございます
なんらかの変数に代入しないとだめなんですね
436433:2010/04/16(金) 07:57:44
あたしにもお礼を
437デフォルトの名無しさん:2010/04/16(金) 08:24:56
_
438デフォルトの名無しさん:2010/04/16(金) 08:39:24
うむ、age は不要
439デフォルトの名無しさん:2010/04/16(金) 13:21:28
>>436
あげてくださってありがとうございますm(_ _)m

>>473
「 _ 」 も普通の変数というわけではないのでしょうか?

p _
してみるとageに入るデータが入っているので結局はageに代入するか_に代入するかの違いのように感じました。


また連続での質問で恐縮なのですが以下のようなことをするにはどうすればいいでしょうか?

person = Array.new()
arr = [
['Tom',19,'boy'],
['Emi', 12,'girl'],
['Shun',32,'boy'] ]
for p in arr
person[name][] = p[1]
end

p person「name]
# 求めている出力結果
['Tom','Emi','Shun']
440デフォルトの名無しさん:2010/04/16(金) 13:42:51
「処遇を考えるのが面倒な、捨てるためのローカル変数」として _ は若干ポピュラー
Ruby 的に何か意味があるわけではない
ただの1文字のローカル変数
多用すると超格好悪いのであまり初心者スレ向きではないが、
1行で書かないと死ぬ病とかの人の対症療法に有効

>>439
Array#map の勉強をしろ
写像というポピュラーで強力な概念だ

arr_in_arr = [
['Tom',19,'boy'],
['Emi', 12,'girl'],
['Shun',32,'boy'] ]

p arr_in_arr.map{|a| a[0]} #=> ["Tom", "Emi", "Shun"]
441デフォルトの名無しさん:2010/04/16(金) 14:12:01
map と find は理解利用できるとスクリプトの長さが半分くらいになる
Array や Hash といったコレクション主体のスクリプトを書くようになるから

inject も概念は素晴らしいんだがメソッドとしてのインターフェースに難あり
442デフォルトの名無しさん:2010/04/16(金) 14:47:35
>>440

1.8.7か1.9だと
arr_in_arr,map(&:first)
と書けてしあわせ
443デフォルトの名無しさん:2010/04/16(金) 14:51:53
rubyもだんだんperl化して汚…
444デフォルトの名無しさん:2010/04/16(金) 15:04:18
>>442
別にそれは幸せではない
&に意味がなさ過ぎる
445デフォルトの名無しさん:2010/04/16(金) 15:22:30
そういや Hash を返す Hash#map がないのはなんで?
空の Hash 作って移行するとかめんどくさいことやってる

h = {:k1 => 'v1', :k2 => 'v2'}
new = {}
h.each_pair do |k, v|
new[k.to_s] = v
end

ちなみにこれが最短だが傍目に何やってるかわかりにくくて嫌い
Hash[*h.map{|k, v| [k.to_s, v]}.flatten]
* とか flatten とか Ruby の都合だよね
446デフォルトの名無しさん:2010/04/16(金) 17:12:30
Ruby1.9.1 にて invalid multibyte char (UTF-8) が出るのってどういうとき?
カッコの中のエンコーディングだとみなしてパースを行ったが
エンコーディングだと解釈できないバイトの連なりがありましたエラー?
447デフォルトの名無しさん:2010/04/16(金) 17:16:40
>>446
そのはず
括弧の中が、マジックコメント等で指示されて Ruby が想定しているエンコーディング
表現的にまだわかりにくいな
ruby parser found invalid multibyte char for UTF-8 とでも表示すればいいのか
448デフォルトの名無しさん:2010/04/16(金) 17:23:00
for はやめといたほうが…
ArgumentError の轍をわざわざ踏まなくても

ArgumentError: wrong number of arguments (3 for 2)

足りないのか余ってるのか一発で判断可能な表記にしろ

ArgumentError: wrong number of arguments (expected 2, but 3)

とか表示してくれたら全世界の Ruby ユーザーが涙流して喜んだろうに
449デフォルトの名無しさん:2010/04/16(金) 19:07:10
>>445
1.8.7以降なら
Hash[h.map{|k, v| [k.to_s, v]}]
でいけるようになってる

Hash#to_a で出来る形式のArrayを逆にHashに出来るようになってるよ
1.9で追加されて1.8.7にバックポートされたのかな

マニュアルは見当たらんのだが
どこかに書かれてるのだろうか?
450デフォルトの名無しさん:2010/04/16(金) 20:56:53
最近打ち合わせでは分かり切ったことは飛ばして話を進めているのに
知識として持っててあたりまえのことを質問する馬鹿が増えた
451デフォルトの名無しさん:2010/04/16(金) 21:13:35
そりゃ「わかり切ってる」つもりなのがお前だけだからだろ
452デフォルトの名無しさん:2010/04/17(土) 02:29:26
まあ自分が知ってることは他人も知ってて当然
って気質だからな日本人は
453デフォルトの名無しさん:2010/04/17(土) 03:42:23
2chの読み書きを支援するライブラリってありますか?
Rubyから2chに書き込みたいです
454デフォルトの名無しさん:2010/04/17(土) 04:00:55
あります
455デフォルトの名無しさん:2010/04/17(土) 04:16:30
456デフォルトの名無しさん:2010/04/17(土) 04:29:06
そうじゃねえよアホ
457デフォルトの名無しさん:2010/04/17(土) 04:41:51
>>455 があれば 10 行以下で書けるだろ
458デフォルトの名無しさん:2010/04/17(土) 06:04:51
Net::HTTP.start("#{}.2ch.net", 80) do |http|
  qs = "bbs=#{}&key=#{}&time=#{}&FROM=#{}&mail=#{}&MESSAGE=#{}&submit=#{}&#{suka}=#{pontan}"
  req = Net::HTTP::Post.new("http://#{}.2ch.net/test/bbs.cgi")
  req['Referer'] = "http://#{}.2ch.net/"
  res, body = http.request(req, qs)
  if /2ch_X:cookie/ =~ body then
    req = Net::HTTP::Post.new("http://#{host}.2ch.net/test/bbs.cgi")
    req['Referer'] = "http://#{host}.2ch.net/"
    req['Cookie'] = res['set-cookie']
    res, body = http.request(req, qs)
  end
end

10行はむりぽorz
459デフォルトの名無しさん:2010/04/17(土) 06:10:04
馬鹿は質問に答えなければいいのにね
460デフォルトの名無しさん:2010/04/17(土) 06:41:27
>458
python なら end がいらないから 10 行以下だったね
惜しい
461デフォルトの名無しさん:2010/04/17(土) 06:50:22
require '2ch'
thre = Nichannel['プログラム'][1269233796]
puts thre[453].text.to_a[0] #=>2chの読み書きを(略
thre.post(nil,'sage',text)

こんな感じか
出来る奴ならすぐ作れるだろ
462デフォルトの名無しさん:2010/04/17(土) 07:03:08
誰も質問には答えないってやつだな
463デフォルトの名無しさん:2010/04/17(土) 07:07:37
>>460
いや
pythonだと7行で書けたw
464デフォルトの名無しさん:2010/04/17(土) 07:09:54
SETTING.TXTも取ってきてチェックしないと
465デフォルトの名無しさん:2010/04/17(土) 07:11:19
466デフォルトの名無しさん:2010/04/17(土) 07:13:23
なんでもかんでも追い出そうとするなよ
つまんねえ奴だな
467デフォルトの名無しさん:2010/04/17(土) 07:24:11
>>466が自壊を望むのはそれで結構だが自分ひとりで壊れてください
私たちは自分たちの使ってる掲示板を壊すようなものを進んで提示することはありません
468デフォルトの名無しさん:2010/04/17(土) 07:25:55
Rubyに関係してるのに追い出すなよ
469デフォルトの名無しさん:2010/04/17(土) 07:28:07
>>467
むしろ向こうでやられたほうが迷惑だろ
470デフォルトの名無しさん:2010/04/17(土) 07:40:02
>>462
>>453に対しては>>454で終了
それ以上の情報提供をする人は昔ならともかく今はどんなスレでだってまずいない
2chの仕様調べてHTTPクライアント作るまでが参入障壁

公開された爆撃スクリプトに自分のコードが書いてあったときの絶望を知るがいいぞ
471デフォルトの名無しさん:2010/04/17(土) 07:41:33
で?
472デフォルトの名無しさん:2010/04/17(土) 09:14:24
私たちは自分たちの使ってる掲示板を壊すと日本の経済が今より上向くような希ガス
473デフォルトの名無しさん:2010/04/17(土) 09:20:13
失業率1パーセントくらい減るんじゃねーかとは言われてるな
474デフォルトの名無しさん:2010/04/17(土) 09:29:02
他人事ではない100人の『転落』
~30代独身者はホームレス予備軍
ttp://business.nikkeibp.co.jp/article/life/20100413/213964/
475デフォルトの名無しさん:2010/04/17(土) 15:36:18
>>470
それって「包丁は人を殺せるから売ってはいけない」的な主張と同じじゃね?
476デフォルトの名無しさん:2010/04/17(土) 17:07:46
いや著作権を侵害されたことを嘆いてるんだと思われ
477デフォルトの名無しさん:2010/04/17(土) 17:46:46
スレ違いだけど、HTTPの処理をするだけで2chに書き込めると思ったら大間違いよ。
478デフォルトの名無しさん:2010/04/17(土) 17:58:24
Rubyなんて受刑者にやらせとけば十分
479デフォルトの名無しさん:2010/04/17(土) 17:59:09
>>476
それって質問とますます全く関係なくね?
480219.114.145.43 hage:2010/04/17(土) 18:09:34
ぬるぽ
481デフォルトの名無しさん:2010/04/17(土) 18:18:17
仕様満たさなかったんだな
482デフォルトの名無しさん:2010/04/17(土) 18:27:50
kusukusu
483デフォルトの名無しさん:2010/04/17(土) 18:41:04
rubyはデフォルトだと付かないからなw
484デフォルトの名無しさん:2010/04/17(土) 18:59:56
>>477
> 2chの仕様調べてHTTPクライアント作るまでが参入障壁
このまんまだと思うが…
485デフォルトの名無しさん:2010/04/17(土) 19:17:26
書き込むだけなら適当でおk。
エラー処理は苦痛。
486デフォルトの名無しさん:2010/04/17(土) 19:19:36
>>485
416 Requested Range Not Satisfiable
487デフォルトの名無しさん:2010/04/17(土) 19:21:49
お前の想定している例外はそれだけかよ?
おめでてーな
488デフォルトの名無しさん:2010/04/17(土) 19:22:55
まあスクリプトバラ撒いたり連投ツールにしたり保守ツールにしたりSMAP書き込みしたりするのでさえなければ
勉強になるものであることは間違いがない
2chの鯖自体には毎日変なGETやPOSTが来てるんだろうと思う
489デフォルトの名無しさん:2010/04/17(土) 19:24:47
>>487
一番めんどいエラーだと思うが
板移転なんてあぼーん検知と最小取得に比べたらどうということもない
490デフォルトの名無しさん:2010/04/17(土) 19:27:24
毎回dat全部読んでる俺は勝ち組
491デフォルトの名無しさん:2010/04/17(土) 19:28:42
話それるけど2chブラウザ作る場合は、エラーメッセージはどう扱うの?
「ERROR:xxx」部分を切り出して表示するのかな。
bbs.cgiはもうちょっと頑張るべきなのになぁ・・・
492デフォルトの名無しさん:2010/04/17(土) 19:30:48
> 「ERROR:xxx」部分を切り出して表示するのかな
基本はそう
メッセージボディを正規表現でごりごり判定
ぶっちゃけレスポンスヘッダはもうちょっと頑張ってもいい
493デフォルトの名無しさん:2010/04/17(土) 19:30:58
bbsmenuのフォーマット見た時点で萎えました。
494デフォルトの名無しさん:2010/04/17(土) 19:33:18
Cの仕様と一緒でいまさら変えられないってのがあるんだろうな
495デフォルトの名無しさん:2010/04/17(土) 19:34:01
つか2chの運営に関わっている人たちに関わっちゃだめだろ
496デフォルトの名無しさん:2010/04/17(土) 19:35:00
んじゃもうforkしちゃえば?
497デフォルトの名無しさん:2010/04/17(土) 19:35:59
forkされたものはいっぱいある
498デフォルトの名無しさん:2010/04/17(土) 19:39:22
スレッドフロート型の掲示板としては2chはわりと旧式
システム側はわりと頑張ってるぽいんだけど、掲示板本体の機能は20世紀のまま
499デフォルトの名無しさん:2010/04/17(土) 19:43:00
>>494
基本設計はちゃんとやろうね、という良いお手本だな。
500hage:2010/04/17(土) 19:49:08
ぬるぽ
501デフォルトの名無しさん:2010/04/17(土) 19:53:05
>>499
そもそもそんなふうに出発したものじゃないからなあ
開発という視点からはタイミングが全部後手後手裏目なんだよね

いいかげんスレ違いなので他の質問の方どうぞ
502デフォルトの名無しさん:2010/04/17(土) 19:55:51
Rubyから2chに書きたいって話から明後日の方向に話が行っている気がする件
503デフォルトの名無しさん:2010/04/17(土) 19:59:08
RubyでOS書けますか?
504デフォルトの名無しさん:2010/04/17(土) 20:03:27
puts "OS"
505デフォルトの名無しさん:2010/04/17(土) 21:37:43
1.91で次のように書いてもマッチしないんですが、どこが問題なのでしょうか。

str4 = "あ"
p /[\x{3041}-\x{309e}]/ =~ str4
506デフォルトの名無しさん:2010/04/17(土) 21:55:21
そこ意外
507デフォルトの名無しさん:2010/04/17(土) 21:58:04
エンコーディングの指定が間違っていることは間違いがないな
508デフォルトの名無しさん:2010/04/17(土) 22:31:03
実は常用しているエディタがUnicode前提で、
検索に使える正規表現はこのような書き方しか受け付けないんです。
それでRubyで処理したいファイルと出力したいファイルがシフトJISじゃないと駄目だったりするんです。
だからRubyの中での書き方もエディタの書き方に合わせたいな、と思いまして。
へんてこな使い方ですからやっぱり無理なんですかね。残念。
509デフォルトの名無しさん:2010/04/17(土) 22:50:00
str4 = NKF.nkf("-w", "あ")
p /[\x{3041}-\x{309e}]/ =~ str4
510デフォルトの名無しさん:2010/04/17(土) 22:59:17
外部がShift_JISなら、IO境界(openとか)で好きなコードに変換すればいい。
511デフォルトの名無しさん:2010/04/18(日) 16:58:44
配列の中に配列がある状態で
第1要素が同じ配列で先頭のモノ意外を削除するメソッドってありますか?

以下のようにしたいのですが。
[ [1,2] , [1,3] , [2,1] , [2,3] , [2,7], [4,5] ].削除メソッド #=> [[1,2],[2,1],[4,5]]

よろしくお願いします
512デフォルトの名無しさん:2010/04/18(日) 17:13:34
最近の1.9なら
[ [1,2] , [1,3] , [2,1] , [2,3] , [2,7], [4,5] ].uniq(&:first)
が使える。

ないバージョンならRubyで作ろう。

513デフォルトの名無しさん:2010/04/18(日) 17:14:00
・ 該当するっぽいクラスの見当をつける
・ クラスのメソッドの説明を流し見する
・ たぶんそのものずばりはないはずだが、組み合わせればなんとかなりそうなものが見つかる
・ 組み合わせる

この繰り返し
初心者のときは10行くらいになることをひとまず厭ってはいけない
最初からカッコよく書こうなんて無理無駄
514デフォルトの名無しさん:2010/04/18(日) 17:47:11
>>512
ありがとうございます。
あまり大規模な配列じゃないので自分で作っちゃいました。
515デフォルトの名無しさん:2010/04/19(月) 20:23:00
windowsXPでeventmachineを入れたいのですが、エラーが出てしまいます。
原因はなんでしょうか?
gemをオンラインから落とすとエラーになるので一旦落としてローカルから呼び出しています。
C:\Program Files\ruby-1.8\bin>gem install eventmachine --local
Building native extensions. This could take a while...
ERROR: Error installing eventmachine:
ERROR: Failed to build gem native extension.
"C:/Program Files/ruby-1.8/bin/ruby.exe" extconf.rb
checking for rb_trap_immediate in ruby.h,rubysig.h... no
checking for rb_thread_blocking_region()... no
checking for inotify_init() in sys/inotify.h... no
checking for __NR_inotify_init in sys/syscall.h... no
checking for writev() in sys/uio.h... no
checking for rb_thread_check_ints()... no
checking for rb_time_new()... no
checking for windows.h... no
could not find header: windows.h
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack ofnecessary libraries and/or headers. Check the mkmf.log file for moredetails. You may need configuration options.
Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--srcdir=.
--curdir
--ruby=C:/Program Files/ruby-1.8/bin/ruby
Gem files will remain installed in C:/Program Files/ruby-1.8/lib/ruby/gems/1.8/gems/eventmachine-0.12.10 for inspection.
Results logged to C:/Program Files/ruby-1.8/lib/ruby/gems/1.8/gems/eventmachine-0.12.10/ext/gem_make.out
516デフォルトの名無しさん:2010/04/19(月) 20:35:13
RubyInstaller使ってるならアンインストールしてActiveScriptRuby入れろ
517デフォルトの名無しさん:2010/04/19(月) 20:51:05
落とすのは
eventmachine-0.12.10-x86-mswin32-60.gem
こっちじゃないのか?
アーキテクチャの整合性は知らん。
518デフォルトの名無しさん:2010/04/19(月) 20:55:36
Windowsで1.91入れようと思うんですが、
 ActiveScriptRuby
 RubyInstaller
 Rumix
の中でどれが良いでしょうか。大きく変わらないのかもしれませんが。
ちなみに日本語環境でしか使いません。
519デフォルトの名無しさん:2010/04/19(月) 21:03:47
まず、Ruby 初心者は 1.9.1 は基本的に最初に使うな
悪いこと言わないから、1.8.7 に慣れてからにしておけ
慣れるのには 2ヶ月も要らないと思う

で、Windows では ActiveScriptRuby が日本でのデファクト
ていうかこのへんは>>6
520515:2010/04/19(月) 21:04:32
>>516,517
ありがとうございます。
ActivescriptRubyでやってます。
eventmachine-0.12.10-x86-mswin32-60.gem
やってみます。
521デフォルトの名無しさん:2010/04/19(月) 21:16:33
>>519
どうもです。なるほどActiveScriptRubyが事実上の標準なんですね。
ちなみにRumixというのはどうなんでしょうか?
日本語で使う場合に便利という触れ込みですが。
ただ、ファイルサイズが倍以上あるので「?」な感じはしますが。
522デフォルトの名無しさん:2010/04/19(月) 21:25:18
Rumixは中身mswin32だっけか

Ruby本体以外に付属するものが違うだけなので、ふろくで選ぶのがいいかと
Windowsで動くRubyはmswin32とmingw32(とcygwin)の2(3)種類あって、mswin32が一応初心者的鉄板
523デフォルトの名無しさん:2010/04/19(月) 22:18:39
外部コマンドをシェル経由せずに実行して、かつコマンドの出力を取得したいんだけど
どうするのがいいのかな?
今はこんな感じで書いてる。

result = IO.popen("-", "r+") do |io|
 if io
  io.read
 else
  exec("ls")
 end
end

シェルを経由したくないのは、コマンド文字列の中に|とか>みたいな特殊文字が
入ってるとややこしいから。
524デフォルトの名無しさん:2010/04/19(月) 22:19:56
>>522
ありがとうございました。初心者ですし、
そんなに凝ったプログラムをするわけではないので、
推奨どおりActiveScriptRubyをインストールしてみます。
525デフォルトの名無しさん:2010/04/19(月) 22:21:23
515ですが、rubyでgemでライブラリをインストールするにはどこで実行すればいいのでしょうか?
ローカルからではなく、ネットから引っ張って入れたいのです。

C:\Program Files\ruby-1.8\bin>gem install eventmachine
ERROR: While executing gem ... (Errno::ENOENT)
No such file or directory - /home/Administrator

C:\Program Files\ruby-1.8\bin>
526デフォルトの名無しさん:2010/04/20(火) 04:52:43
>>523
popen安定

>>525
gem install --remote eventmachine

環境おかしいな
ruby -ropen-uri -e "puts open('http://google.com/').read"
がHTMLを表示しないなら、使ってるパーソナルファイアーウォールで ruby にネットアクセスを許可しろ

本当はこれも INSTALL に書かれるべきなんだけどね
527デフォルトの名無しさん:2010/04/20(火) 12:59:32
>>505
\x{3041}じゃなくて\u{3041}だよ
528デフォルトの名無しさん:2010/04/20(火) 23:17:31
そろそろ1.91入れても良いと思うよ。
つーか正規表現で戻り読みができない1.8xには戻る気がせん。
529デフォルトの名無しさん:2010/04/21(水) 00:21:11
1.9.1本体の問題ではないということにいつになったら気づくのだろう
530デフォルトの名無しさん:2010/04/21(水) 08:25:05
何言ってるの
2種類のRubyに触れるとぷちゅっと弾けて消えてしまう人もいることくらい覚えておこうね
一生のうち1種類だけのRubyは安全だけど、2種類のRubyに触れることは死を意味する
531デフォルトの名無しさん:2010/04/21(水) 08:55:55
その程度ではじけるようじゃ、そもそもプログラミングに向いてないから
532デフォルトの名無しさん:2010/04/21(水) 09:06:39
あほか
対象性の崩れなんか関係ない
ruby world から足を洗っただけだろ
533デフォルトの名無しさん:2010/04/21(水) 11:07:28
というか、プログラミングrubyの1.9verはいつ翻訳されんだよ。
534デフォルトの名無しさん:2010/04/21(水) 14:17:41
ruby 1.9.1 [i386-mswin32] でrmagickは使えますか?
535デフォルトの名無しさん:2010/04/21(水) 19:27:32
395 nobodyさん [sage] 2010/04/21(水) 18:18:33 ID:??? Be:
    ■参考サイト
    <英語> http://www.robyonrails.org
    本家:http://www.rubyonrails.org
    API document:http://api.rubyonrails.com/
    開発者のblog:http://weblog.rubyonrails.org/
    参考wiki:http://wiki.rubyonrails.org/rails

    これ全部ドメイン失効で見れないんだけど
536デフォルトの名無しさん:2010/04/21(水) 19:27:41
質問です
やりたいこと:ファイルから1行読み込んで、その1行の正規表現を作る

以下が今書いたソースです。

--
txt = File.open("text.txt",'r')

mojiretsu = txt.gets.chomp!
seiki = /¥b#{mojiretsu}¥b/
--

まずtxtファイルを読み込んで、1行目を取得しそれを変数mojiretsuに格納し、
変数mojiretsuの正規表現としてseikiを作成しています。
しかしながらこの方法ですと、mojiretuに読み込んだ1行が例えば"( ABC"のように
半角括弧の記号が含まれている場合、正規表現が作成できずエラーになります。
この根本的な解決方法はないでしょうか?よろしくお願いします。

以下がエラーメッセージです。(rubyのバージョンは1.8.7)
unmatched (: /¥b( ABC¥b/ (RegexpError)

537デフォルトの名無しさん:2010/04/21(水) 19:31:42
seieki = Regexp.new(mojiretsu)
538デフォルトの名無しさん:2010/04/21(水) 20:06:35
>>537
ご回答ありがとうございます。
その書き方でやってみましたが、それでもエラーが出てしまいます。
539デフォルトの名無しさん:2010/04/21(水) 20:16:25
>>536
Regexpにメソッドがあるからリファレンスマニュアル嫁
540デフォルトの名無しさん:2010/04/21(水) 20:19:55
>>537
半角括弧入ってるって言ってるだろ
541デフォルトの名無しさん:2010/04/21(水) 20:32:18
あほが湧いてるな。せっかく入学した学校で虐めにでもあってるのか?
542デフォルトの名無しさん:2010/04/21(水) 21:05:11
>>536
エラーがあった場合どうしたいの?
mojiretsuを正規表現でなくて文字列そのままマッチさせたいんだったらRegexp.quote使うといいと思うけど
543デフォルトの名無しさん:2010/04/21(水) 22:02:49
Regexp.quoteだろうね。
たぶんそれだけじゃ通じないだろうってのと元のコードも見た上での希望をエスパーすると、
/\b#{Regexp.quote(mojiretsu)}\b/
かな。
544デフォルトの名無しさん:2010/04/21(水) 22:58:41
ActiveScriptRubyってWindows 7の64bitにインスコできないん?インストーラー実行するとエラる
545デフォルトの名無しさん:2010/04/21(水) 23:07:14
yes
546デフォルトの名無しさん:2010/04/21(水) 23:15:40
インスコ出来てるけどなぁ
547デフォルトの名無しさん:2010/04/21(水) 23:46:11
>>539,542,543
回答ありがとうございます。
quoteをリファレンスマニュアルで調べました。
文字列をそのままマッチさせたかったので、quoteで大丈夫そうです。
本当にありがとうございました。
また、わかりやすくコードまで用意してくださってありがとうございます。
548デフォルトの名無しさん:2010/04/22(木) 00:01:55
当方三週間前にputsとか知った新参です。
ウインドウを表示してランダムに表示されたセリフ 
 とそのセリフを言った人を選択して当てる というゲームで三週間
詰んでます。

人がゴミのようだ   を言った人は  ムスカ
  ↑ランダム台詞           ↑選択できる人物名

ランダム台詞はhashとrandでなんとかできたんですが、選択人物は
キーボードの↑や↓で選択できるようにしたい。

サイト巡って数字を表示するプログラムを見つけてそれを真似してるんですが、
日本語と数字では表示の仕方が違うみたいで失敗続きです。

549デフォルトの名無しさん:2010/04/22(木) 00:04:46
元になったプログラムに似せたプログラムです。
これを元に台詞とか入れたいのでご指南ください。


require "dxruby" #dxrubyでプログラムする合図

# メインとなるクラス
class HowMeny #クラス?はて?の開始
def initialize #initialize の開始

#@を付ける決まりがあるらしい
@num=rand(10) + 1 #1~10までランダムで数字を決める
@answer=1 #ウインドウ表示時の答え欄に最初に入ってる数字
@font=Font.new(24) #フォントの大きさを決める
end #initialize はここまで

def select(val) #select(val)の開始
@answer+=val #解答の数値を増減する
if @answer<1 #解答が1より少なくなったときは
@answer=10 #解答を10にする
elsif @answer>10 #解答が10より大きくなったときは
@answer=1 #解答を1にする
end #if の終了
end #select の終了

def update #update の開始
#キーの↑か←を押すと数値up、↓か→を押すと数値down
select(1) if Input.keyPush?(K_UP) or Input.keyPush?(K_RIGHT)
select(-1) if Input.keyPush?(K_DOWN) or Input.keyPush?(K_LEFT)

550デフォルトの名無しさん:2010/04/22(木) 00:06:59
続き

#ウインドウの横10、縦10の位置に@numと@answerを
#大きさを決めたfontで表示
Window.drawFont(10,10,"#{@num}==#{@answer}",@font)
end #update はここまで
end #HowMeny はここまで

hm = HowMeny.new #HowMeny はhmに入れられた

# ウィンドウの設定
Window.caption="数当てゲーム" #ゲームの名前"
Window.width=300 #ウインドウの横サイズ
Window.height=500 #ウインドウの縦サイズ

#ウインドウのループ表示
Window.loop do


#Escを押したら終了
break if Input.keyPush?(K_ESCAPE)

hm.update

end #ウインドウのループ終了


551デフォルトの名無しさん:2010/04/22(木) 00:41:08
>>549-550清書してみた。とりあえず、いらんコメントを消すだけで大分問題の摘出につながると思うよ。
俺はあんたがやりたいこともそのためにはどこガ悪いのかもよくわからんけどな。

require "dxruby" # dxruby ライブラリ

# メインとなるクラス
class HowMeny
  def initialize
    @num=rand(10) + 1  # 1~10 ランダム
    @answer = 1          # ウインドウ表示 初期値
    @font=Font.new(24) # フォントサイズ
  end

  def select(val)
    @answer += val
    if @answer < 1
      @answer = 10
    elsif @answer > 10
      @answer = 1 
    end
  end

  def update
    #キーの↑か←を押すと数値up、↓か→を押すと数値down
    select(1)  if Input.keyPush?(K_UP)   or Input.keyPush?(K_RIGHT)
    select(-1) if Input.keyPush?(K_DOWN) or Input.keyPush?(K_LEFT)
    
    # 表示
    Window.drawFont(10,10,"#{@num}==#{@answer}",@font)
  end
end
552デフォルトの名無しさん:2010/04/22(木) 00:50:14
>>546
1.8.7のやつでOSは64bitです?
553デフォルトの名無しさん:2010/04/22(木) 01:03:34
そだよ64bitでc:\ruby\ruby187\以下に入れた
554デフォルトの名無しさん:2010/04/22(木) 01:21:21
>>553
レスサンクス
もっかいやってみます
555548=549=550:2010/04/22(木) 03:30:46
>>551わざわざどうもです。
>>549>>550のプログラムを実行すると、ランダムで出てくる数字と
キーボードの上下で数が変わる数字がウインドウに出てきます。
その「数字」を「文字」にしたいんです。
556デフォルトの名無しさん:2010/04/22(木) 04:25:14
>>555
文字列の部分だけ
SERIF = ['人がごみのようだ','当たらなければ','とらすとみー']
NAME = ['ムスカ','シャア','ハトヤマ']
num = ans = 0
str = "#{SERIF[num]} をいった人は #{NAME[ans]}"

あとプログラムで数値を扱う時は1からじゃなくて0から始める方が都合がいい
557デフォルトの名無しさん:2010/04/22(木) 07:29:01
説明めんどくへえからウィンドウ表示用のクラスと内部計算のクラスと分けれ
558デフォルトの名無しさん:2010/04/22(木) 08:44:54
アルファベットの全角半角を無視する正規表現ってどうやって実現できますか?
559デフォルトの名無しさん:2010/04/22(木) 09:29:14
無視した上でどうしたいん?
560デフォルトの名無しさん:2010/04/22(木) 09:59:42
全角半角どっちでもマッチするようにっていう意味かな
561デフォルトの名無しさん:2010/04/22(木) 10:31:55
1.9なら[[:alpha:]]だけど……。
562デフォルトの名無しさん:2010/04/22(木) 10:36:24
リテラルなら /hoge/i のように i フラグを付ける
563デフォルトの名無しさん:2010/04/22(木) 11:28:06
>>562
大文字小文字じゃないぞ、全角半角だぞ
564デフォルトの名無しさん:2010/04/22(木) 11:28:42
$KCODEを指定した上で文字クラスの否定はどうなん?

$KCODE = 'SJIS'
/[^a-zA-Za-zA-z]/
565548=549=550:2010/04/22(木) 13:19:01
クラスとかdef select(val) を使わないでキーボードの上下で表示を変える
ことってできます?クラスとか深く理解してないからあまり使いたくない
>>556の入れてみたんだけど何でかうまくいかなかったんでできる範囲でやってみました。
require "dxruby"
serif=['人がごみのようだ','当たらなければ','とらすとみー']
name= ['ムスカ','シャア','ハトヤマ']
a = serif[rand 3]
b = name[1]
setumei="名台詞を言ったのは誰?"
font1=Font.new(24)
font2=Font.new(12)
Window.drawFont(10,10,"#{a} をいった人は #{b}",font1)
Window.drawFont(10,40,setumei,font2)
Window.loop do
end
これにキボドの上下で人物名の選択 と台詞と人物が一致したら成功コメント、
ミスならミスコメントを表示したいんですが、結果として可能ですか?
566デフォルトの名無しさん:2010/04/22(木) 13:29:25
クラスを使わないのはまだしも、メソッド分割くらいはしろ
567デフォルトの名無しさん:2010/04/22(木) 14:24:48
こういうのはウィンドウアプリケーション部分を取っ払って構成を見極めてからウィンドウ部分を作るのが近道
とか言って作ったらなんか潰しのきかない代物になったのはおかしい
投稿用に一行に縮めた部分があるので注意

@data = [{'id' => 1, 'name' => 'ムスカ', 'say' => '見ろ!人がごみのようだ!'},
{'id' => 2, 'name' =>'シャア', 'say' => '当たらなければどうということはない'},
{'id' => 3, 'name' =>'ハトヤマ', 'say' => 'トラストミー'}]
def fetch_data_by(id)
@data.each do |h| return h if h['id'] == id.to_i end
puts "エラー: #{id} にマッチする内部データがありません!"
end
def show_prompt(id)
puts '誰のセリフ? 数字とEnter'
puts "「#{fetch_data_by(id)['say']}」"
puts @data.map{|h| "#{h['id']}: #{h['name']}"}.join(', ')
end
def user_input
while input = $stdin.gets do
return input.chomp.to_i
end
end
def show_ok(id)
puts '正解!'
puts "#{fetch_data_by(id)['name']}「#{fetch_data_by(id)['say']}」"
end
def show_true_answer(id)
puts "残念正解は#{fetch_data_by(id)['name']}でした"
end

mondai_id = rand(@data.size) + 1
show_prompt(mondai_id)
if user_input == mondai_id then show_ok(mondai_id) else show_true_answer(mondai_id) end
568デフォルトの名無しさん:2010/04/22(木) 20:52:56
webrickのエラーページを変更する方法を教えてください
標準状態だとwebrickのバージョンとか例外を起こしたクラス名等が
表示されてしまうのでこれらを消したいです
569デフォルトの名無しさん:2010/04/22(木) 21:10:30
puts "#{text}"
これで
hogehoge
みたいに出力されるとき、#{text}のtextにhogehogeが入っていて、
#{ }は代入しているという理解であってますか?
570デフォルトの名無しさん:2010/04/22(木) 21:40:30
>>568
正攻法は何だろうね。とりあえず、WEBrick::HTTPResponse に
create_error_page というメソッドを定義するとそれを使って処理
できるという造りにはなっている。

1/2の確率で ガッ されるサーバ
require 'webrick'
server = WEBrick::HTTPServer.new(Port: 10000)
def server.service(req, res)
 def res.create_error_page
  @body = 'ga!'
 end
 super
end
server.mount_proc '/', ->(req, res) do
 raise StandardError, 'nullpo!' if rand < 0.5
 res.body = 'OK'
end
server.start
571デフォルトの名無しさん:2010/04/22(木) 22:02:47
>>569

変数 text が (String のインスタンスである) 'hogehoge' を指していると
きはもちろんそうなるが text.to_s した結果が 'hogehoge' になるように
定義された String でないオブジェクトであっても、そうなる。

o = Object.new
puts "o=#{o}" #=> o=#<Object:0x00000101096e40>
def o.to_s; 'hogehoge'; end
puts "o=#{o}" #=> o=hogehoge

" ... " の中で #{ } を使うと、
1. 中にある式(変数単体でぽつんと置いても式)の計算をする
2. 1. の結果が String ならそれをそのまま使って置換える。
3. 1. の結果が Stringでなけい場合は、そいつに対して to_s メソッドを呼ぶ。
4. 3. の結果が String ならそれで置換える。
4. 3. の結果が String でない場合は処理系依存の内容の Stringになる。
572デフォルトの名無しさん:2010/04/22(木) 22:07:40
>>569
String ならそのまま入る
そうでなければそのオブジェクトの to_s メソッドを行った結果が入る
puts "「#{text}」" と puts '「' + text + '」' はおおむね結果一緒だが Ruby では前者を無闇に好む
573デフォルトの名無しさん:2010/04/22(木) 22:12:39
>>571,572
ありがとうございます。
574デフォルトの名無しさん:2010/04/22(木) 22:27:49
>>572が簡潔
575デフォルトの名無しさん:2010/04/22(木) 23:05:01
ここであえて第三の道を行くフォーマット文字列を使って個性をアピール
と思ったけど

> '%s: %d' % ['banana', '200']
=> "banana: 200"

やっぱりやめときます
576デフォルトの名無しさん:2010/04/22(木) 23:09:55
>>575
gettext ライブラリを使うときはそっちがお勧め。
577デフォルトの名無しさん:2010/04/22(木) 23:25:28
>>576
おkちょっとそこまで国際化してくる
578デフォルトの名無しさん:2010/04/22(木) 23:30:33
'hoge' + 'fuga' はバッファを継ぎ足すからメモリ使用効率が悪い&速度も遅い
っていうのは本当
579デフォルトの名無しさん:2010/04/22(木) 23:56:43
puts "one" << "two" << "three" のほうが「速い」というのがなんとも

連結なので文字列再利用に注意
580548=549=550:2010/04/23(金) 00:42:57
レスしてくださった方々ありがとうございました。
どうやら自分には早かったみたいです。しばらく修行してきます
581デフォルトの名無しさん:2010/04/23(金) 16:47:48
puts "" << "one" << "two" << "three"
にすれば文字列再利用しても問題ない。

けど、"#{}" の方が早いんじゃないだろうか。
582デフォルトの名無しさん:2010/04/23(金) 16:58:02
Sat Mar 06 18:20:37 +0900 2010
みたいな日付をunix timeに変換したいとき、正規表現ではなく、直接変換できる関数はありますか?
583デフォルトの名無しさん:2010/04/23(金) 17:13:55
>>582
require 'Time'
Time.parse('Sat Mar 06 18:20:37 +0900 2010').to_i
=> 1267867237

Time.at(0).to_s
=> "Thu Jan 01 09:00:00 +0900 1970"
Time.parse(_).to_i
=> 0
584デフォルトの名無しさん:2010/04/23(金) 17:21:57
やっぱWindows 7の64bitにASR1.8.7入れようとするとインストール中にエラー出るわ
いろいろ試してみたけどダメぽ

「このパッケージをインストールするときに予期しないエラーが検出されました。このパッケージは問題がある可能性があります。エラーコードは2902です。」

つうことで、初心者のくせに仕方なくRubyInstaller1.8.7の方を使うことになった
質問するけど許してね★ミ
585デフォルトの名無しさん:2010/04/23(金) 17:22:57
>>583
さんくす!
586デフォルトの名無しさん:2010/04/23(金) 18:24:54
>>570
ありがとう。やってみます
587デフォルトの名無しさん:2010/04/23(金) 18:46:49
target時刻まで待ちたい場合、
sleep Time.parse(target) - Time.now
とすると1時間待ちで5分ずれたりします。
sleep 0.1 until Time.parse(target) < Time.now
のように定期的に時刻を調べないといけないのでしょうか?
588デフォルトの名無しさん:2010/04/23(金) 18:54:52
ずれない
Time はシステムの時刻を読む
ずれてるのはシステムの時刻
589デフォルトの名無しさん:2010/04/23(金) 19:05:13
>>588
自分は>>587じゃないけどsleepって誤差がでかくね?
マシンに負荷が掛かっている状態でsleep(5)とかやると平気で10秒とか待たされるが・・・

つか、自分もインターバル処理をしようと思って同じ事で悩み中
(sleepで数日とか数週間待たせたら大変なことになりそうだ)
590デフォルトの名無しさん:2010/04/23(金) 19:10:04
これは若干わかりにくいが、Time.parse(target) - Time.now が1時間につき5分ずれるという話ではない

sleep 60*60 が1時間0分0秒のスリープにならずに数分ずれるという話だ

…当たり前じゃんね、そんなの
素直にスケジューラ使え
サーバで提供されてないならサーバに負担かけるな氏ね
591デフォルトの名無しさん:2010/04/23(金) 19:19:01
当たり前、ではない
592587:2010/04/23(金) 19:43:21
sleepはシステム依存で精度が低いのでRubyではどうにもならないということでしょうか。
593デフォルトの名無しさん:2010/04/23(金) 19:54:33
>>592
sleep を呼んだのは 1 回だけ?それともループの中で何度も呼んでる?
594デフォルトの名無しさん:2010/04/23(金) 19:58:42
「起こしてくれっていったのに!」とオカンに八つ当たりする状況に似ている
595デフォルトの名無しさん:2010/04/23(金) 20:06:16
どこが原因なんだか知らんけど1時間で5分ずれるて糞すぎだなw
1秒、1分ごとにチェックでいいんじゃね
596デフォルトの名無しさん:2010/04/23(金) 20:52:11
s = Time.now
sleep(5) # 5秒待ち
e = Time.now
p e - s
みたいなコードを実行してみれば判るよ
そのままでも誤差が酷いけどバックグラウンドで
負荷が掛かっていると笑えない状態になる
597587:2010/04/23(金) 21:03:48
>>593
sleepは1回だけの実行です。
その間、別のプロセスが20~30%ほど継続的にCPUを使用しているような状況です。
598587:2010/04/23(金) 21:11:35
時刻を定期的にチェックして調節することにします。ありがとうございました。
599デフォルトの名無しさん:2010/04/23(金) 21:21:42
C#ならもっと簡単にできるのに・・・
600デフォルトの名無しさん:2010/04/23(金) 21:24:51
>>599
何が問題か理解しているかい?
601デフォルトの名無しさん:2010/04/23(金) 22:00:59
Rubyは「楽しい」ってことが大事なんだと思う。
:PerlもJavaも駄目だったがRubyで行けた時は「楽しいってこういうことか」と納得した。
602デフォルトの名無しさん:2010/04/23(金) 22:04:09
GUI作るときは苦痛でしかないけどな
603デフォルトの名無しさん:2010/04/23(金) 22:09:42
Ruby で GUI は禁句
604デフォルトの名無しさん:2010/04/23(金) 22:29:07
GUIアプリ以外で何プログラムするんだ?
605デフォルトの名無しさん:2010/04/23(金) 22:36:11
フロントエンドの世界で生きている人は大変だなp
606デフォルトの名無しさん:2010/04/23(金) 23:36:37
結局rubyのsleepの精度って結局どのくらいなの?
>>596で30分待ったけど
1800.048342 だった
607デフォルトの名無しさん:2010/04/23(金) 23:37:28
C#の方が高精度なのに・・・
608デフォルトの名無しさん:2010/04/23(金) 23:57:03
初心者です ActiveRuby1.8.7をダウンロード出来たので、
デスクトップに出たruby consoleで画面を開くまでは出来たのですが、
いざ文字を表示させようというところで詰まってしまいました
ruby -vでバージョン確認は出来たのですが、例えば
print ("Hello\n")
と入力すると 「デバイス PRN を初期化できません」と出てしまいます
検索で似たような質問はあったのですがあちらはPerlだったのでよくわかりませんでした
どうかアドバイスお願いします
609デフォルトの名無しさん:2010/04/24(土) 00:04:41
山田くん、>>608に座布団一枚
610デフォルトの名無しさん:2010/04/24(土) 00:05:00
よし漏れも実験してみる

s = Time.now
sleep(3600) # 1h
e = Time.now
p e - s

結果が出るまでおやつみ

>>608
その Ruby Console は Ruby 用の環境変数(ぐぐって)設定済みのコマンドプロンプトだよ
つまり dir や copy, そして print (テキスト印刷用の DOS コマンド)は受け付けても
Ruby の式である print "hello\n" は受け付けない

対話的に Ruby の式や文を試したいのであれば
> irb
とする
611デフォルトの名無しさん:2010/04/24(土) 00:08:00
なんかわかりにくかったね。こういうこと

(Ruby Console アイコンをダブルクリックして実行)

C:\Users\Public\Desktop>print
印刷するファイルがありません

C:\Users\Public\Desktop>print "hello\n"
デバイス PRN を初期化できません

C:\Users\Public\Desktop>irb
irb(main):001:0> print "hello\n"
hello
=> nil
612608:2010/04/24(土) 00:24:07
ありがとうございます、お陰さまで助かりました
こんなつまらない質問でお手数をおかけしてすみませんでした
613デフォルトの名無しさん:2010/04/24(土) 01:04:51
>>606
バックグラウンド(該当プロセス以外)で負荷を掛けた?
うちだとYoutubeを再生しながら>>596を実行すると11とかになるよ
SMP/SMT環境だと多重で負荷を掛けないと判らないかもしれないけど
614610:2010/04/24(土) 02:10:41
Win7 x64 / Phenom II X3 720 2.80 GHz / Mem 4GB
3600.000908

>>613
環境ぐらい示したらいいのでは
615デフォルトの名無しさん:2010/04/24(土) 04:07:46
>>614
WinXP SP3 / CoreSolo U1400 1.2GHz / Mem 1.5GByte

>ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32]

普通に実行(ただしバックグラウンドでWebブラウザが間欠的にCPUを使用)
>ruby test.rb
6.0

Youtube/fmt=22を再生しながら実行(CPU使用率は100%に張り付き)
>ruby test.rb
14.297
コードは>>596と同じ物

長時間である程度の精度が欲しければ>>595で概ね解決するけどちょっと面倒だな
616デフォルトの名無しさん:2010/04/24(土) 04:34:32
cronクローンを作った時は
sleep 60 - Time.now.sec
ってやってたな
617デフォルトの名無しさん:2010/04/24(土) 07:47:23
RubyGemsの質問なんですが、
tumblr-apiというgemがhttpartyというgemに依存していたのですが、
httpartyの最近のバージョンでは動かなくなっていて、
 gem 'httparty', "<= 4.3"
 require 'httparty'
という記述があり、httpartyの4.3をインストール済みにもかかわらず、
最新バージョンのhttpartyを読みに行っているみたいでtumblr-apiが上手く動作しないという現象がおきました。
4.3より新しいhttpartyをアンインストールしたところ正しく動作するようになったのですが、
これでは不便です。

rubygemsの仕様的にこれで正しいのでしょうか?
対処法はないのでしょうか?

jeffkreeftmeijer's tumblr at master - GitHub
http://github.com/jeffkreeftmeijer/tumblr


rubygems 1.3.6です。
618617:2010/04/24(土) 08:02:08
原因分かりました

httpartyは0.4.3以下が想定されていたみたいです。(新しいバージョンは 0.5.3)

> gem 'httparty', "<= 4.3"

4.3以下って…これ記述ミスですね。
619デフォルトの名無しさん:2010/04/24(土) 08:21:27
記述ミスではないと思う
「俺の知ってる過去のバージョンでは概ね動作するが、知らない未来のバージョンでは動作を保証しない」
というバージョン指定の仕方は普通

というか、通常、httpparty 4.3 が一緒にインストールされるはずなんだが
620デフォルトの名無しさん:2010/04/24(土) 08:25:39
あーすまん

Rakefile:

 gem.add_dependency('httparty')
 gem.add_dependency('activesupport')

tumblr.rb

 require 'rubygems'
 gem 'httparty', "<= 4.3"
 require 'httparty'

うん、記述ミスだな
というかこれ酷いな
621デフォルトの名無しさん:2010/04/24(土) 09:34:33
>>610-612
昔業務ソフトを納品した先で
パソコンからピーピー音がするんですと
仕事出来ないからすぐ来てって呼ばれて
関係ないのに渋々逝ったら
キーボードの上に物が置かれていた
(仕事は他のPCでやってるじゃねーか)
っていう出来事を思い出した
622606:2010/04/24(土) 11:18:22
>>614 >>615
WinXP SP3 / CeleronM 1.3GHz / Mem 512MByte
ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32]

高負荷状態(使用率ほぼ100%)でも>>596で誤差0.1秒未満なんだよなあ
先の例だと負荷状態2、3割なのに1時間で5分もずれてるし
負荷というより環境の違いなのかな

とりあえず参考になりましたお二方ありがとう
623デフォルトの名無しさん:2010/04/24(土) 14:47:36
ubuntuで
$ptn = "/(日本語|英語)/u"
$str = "日本語難しい"

if Regexp.new($ptn) =~ $str then
puts 1
else
puts 0

end

としたファイルをUTF8で保存し、端末で実行しましたがマッチしないようです。
端末で-Kuとしてもだめでした。原因はどこにあるかわかりますか?
624デフォルトの名無しさん:2010/04/24(土) 14:57:47
とりあえず Regexp.new で Regexp を作るときは周りの / ... / はいらないよ
あれは正規表現リテラル用
625デフォルトの名無しさん:2010/04/24(土) 14:59:32
pattern = '(日本語|英語)'
str = '日本語難しい'
if /#{pattern}/u =~ str then
puts 1
else
puts 0
end

グローバル変数使う人間は殴られて月まで吹っ飛べ
626デフォルトの名無しさん:2010/04/24(土) 15:16:56
>>624
>>625
うまくいきました!ありがとうございます
627587:2010/04/24(土) 16:09:20
sleepの件ですが、Rubyを最新のリリース版を試したところ、CPU使用率による変動はなくなりました。

次のコードで実験
5.times{ s=Time.now; sleep(10); e=Time.now; p e-s; }

結果
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32]
11.969
12.375
12.593
12.86
13.609


ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32]
10.000064
10.000064
10.000064
10.000064
10.000064

>>615氏も同じバージョンで同様の現象が起きていますので、
どこかのバージョンで修正されたのだと思います。
レス下さった方々ありがとうございました。
628デフォルトの名無しさん:2010/04/24(土) 18:04:48
そういや、下らないバグがあって、u氏が何度も間違えながら直してたな。
629617:2010/04/25(日) 00:03:01
>>620
やっぱりそうですよね。
gemインスコの依存関係でバージョン指定されてなくてhttpartyの最新版が入ってきちゃうのに
その最新版では上手く動かなくて、一応ライブラリ内でバージョン指定はしているけどそこが記述ミスってるせいで
httpartyの最新版が入れられなくなってるみたいで・・・。

RubyGemsって下手するとこういうことになるんですね。httpartyの新しいバージョンにはとくに依存してなくて助かりましたが。
railsでもgemsはfreezeしろ、とかpluginで入れろとか、Rails3からbundler推奨になったのはこういうことなのかな。

むかしのVBのDLLヘルみたいだw

なれないけどtumblr-apiはgithubにあるからforkして修正してpullしてケロ!ってやってみればいいのかな。
630デフォルトの名無しさん:2010/04/25(日) 00:17:56
手元でリビルドすればいい(まあ実質、インストールされたファイル編集するのと同じだけど)
連絡はすると好ましいが、面倒なら別にしなくてもいい
631デフォルトの名無しさん:2010/04/25(日) 00:29:50
修正されないといつまでも自分でパッケージ作らなきゃならないので、
何らかの形で作者のコードに反映されるように仕向けたほうが後々楽ではある。
pull requestが面倒なら Issues に報告するだけでもOK。
632デフォルトの名無しさん:2010/04/25(日) 15:12:40
エディタで編集中のファイル foo.rb のパスを渡して
irbを起動し、直後に自動的にload "foo.rb"を実行して
入力待ち状態にしたいんですが
そういう事が可能になるirbの引数みたいなのってないですか?
デバッグ中にそういう使い方ができたら便利そうなんですが。

環境はXP+ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32]
633デフォルトの名無しさん:2010/04/25(日) 15:25:36
loadではなくrequireになるけど、毎回新しい irb になるなら、
irb -rfoo でいいんじゃね?
634デフォルトの名無しさん:2010/04/25(日) 16:00:04
>>632
irb では基本的にはできない

ということを踏まえた上で、以下を実行

$ ruby -rirb -e "require 'date'; @today=Date.today; IRB.start"
irb> p @today.to_s
"2010-04-25"
635デフォルトの名無しさん:2010/04/25(日) 16:24:24
なるほど。

メインのコードを走らせる手前で
require "irb"; IRB.start
とソースに書いておいてもよさそうですね。

あれこれいじってquitすればそのまま実行を継続できるからデバッグブレーク的に使えそう。
何気に神機能のような。

ありがとうございました。
636デフォルトの名無しさん:2010/04/25(日) 21:46:37
レベルに低い質問ばかりだな
ちょっと調べれば分かる程度の質問している奴が
なぜRubyやろうと考えるのかね
637デフォルトの名無しさん:2010/04/25(日) 21:52:17
日本語でおk
638デフォルトの名無しさん:2010/04/25(日) 21:55:17
639デフォルトの名無しさん:2010/04/25(日) 21:57:46
636「おれのレベルは99だ!」
640デフォルトの名無しさん:2010/04/26(月) 08:19:10
レベル2低い。
641デフォルトの名無しさん:2010/04/26(月) 08:54:47
Rubyでレースゲーム作りたいんだけどできますか?
642デフォルトの名無しさん:2010/04/26(月) 09:22:01
やってやれないことはないが、
他の言語を選べるならそっちでやったほうが簡単で質も高いものが作れると思われる
643デフォルトの名無しさん:2010/04/26(月) 10:51:55
>>636
>レベルに低い質問ばかりだな
>ちょっと調べれば分かる程度の質問している奴が
>なぜRubyやろうと考えるのかね

きみのような上級者には初心者の相手は苦痛だろう。
きみにはもっとふさわしい居場所があるから、初心者スレには二度とこないでね。
644デフォルトの名無しさん:2010/04/26(月) 13:56:57
煽りじゃなくてマジで python がおすすめ
Ruby で GUI はタブー
645デフォルトの名無しさん:2010/04/26(月) 14:58:28
646デフォルトの名無しさん:2010/04/26(月) 15:33:47
なんでGUIが出てくるんだよアホ
せめてDXRubyとか勧めろよ
647デフォルトの名無しさん:2010/04/26(月) 15:37:43
やっぱC#にしまーす
648デフォルトの名無しさん:2010/04/26(月) 15:52:00
GameはGUIに含まれるんですかね
個人的には狭い範囲で GUI=ウィンドウシステム ってイメージなので
Game内部では独自のウィンドウシステムを作ることはあるかもしれませんけど

さすがにレースゲームの物理演算的なのをRubyでやるのは無理がありそうですが
RubyでGameってそんなに非現実的ですかね
Pythonなどより動作が遅くなるとしても
SDLやDirectXとかのラッパーを使えば作れそうですが

ただ、Gameを一本完成させるだけのやる気と根気があるのならば
コンパイル型の言語でも作れるだろうし
その方が処理速度に余裕がある分だけ、Game内で出来る幅が広がるでしょうけれど
649デフォルトの名無しさん:2010/04/26(月) 16:26:49
ほとんどラッパーで作るなら最初からC++でやるわw
650デフォルトの名無しさん:2010/04/26(月) 16:28:31
できないくせに
651デフォルトの名無しさん:2010/04/26(月) 16:33:15
Rubyだけで格ゲー作りたいんだけどできますか?
652デフォルトの名無しさん:2010/04/26(月) 17:57:45
必要なライブラリを全て自作すれば可能です

不可能ではないです。
653デフォルトの名無しさん:2010/04/26(月) 18:16:40
ゲームだと Python の方が pygame とかあるしいいんじゃないのかな
frozen-bubble は perl だよね
これ perl で書けるのかって出た当時感動した覚えある
654デフォルトの名無しさん:2010/04/26(月) 18:38:04
ただ、Gameを一本完成させるだけのやる気と根気があるのならば
最初からCでやる罠
655デフォルトの名無しさん:2010/04/26(月) 18:46:42
今からやるならWindows API Code Pack
656デフォルトの名無しさん:2010/04/26(月) 18:49:04
言い訳ばっかりだなお前ら
「やる気があれば」
こればっかw
657デフォルトの名無しさん:2010/04/26(月) 18:50:56
やる気があるから非効率的でバグだらけのRubyを使う信者であった。












いいえ、ただの無能です
658デフォルトの名無しさん:2010/04/26(月) 19:07:00
      ,―ヽ_(((((_、―
   ,/  ノ       ヽ  ~\
  /   ノ   IPA    ヽ   ~\
/   ノ           ヽ、  `ヽ
|    ノ / ̄\   / ̄~ヽ ヽ    i
|   ノ              |  ノ
\  |  <●>  <●>  (  )
 \ |      | |       i /
    |      /  ヽ       レ
   i     (●_●)      /  
    i、    ,-――-、   ・ /
    i、  <(EEEEE)> ∵/    Ruby使いこなせない落ちこぼれは消えろよ
      i、  \   ./  /
       \   ーー   ,ノ       
  ,,.....イ.ヽヽ、ー-―一ノ゙-、.
  :   |  '; \_____ ノ.| ヽ i
      |  \/゙(__)\,|  i |
659デフォルトの名無しさん:2010/04/26(月) 20:56:05
>>648
Rubyでゲームは余裕。
レンダリングエンジンや物理エンジンは全部C/C++で書いて
RubyからはAPIを呼び出すだけ。処理の90%をC/C++で実行する。
もちろんエンジン(ライブラリ)は再利用可能な形でフリーで公開する。
というわけで>>648作って。
660デフォルトの名無しさん:2010/04/26(月) 22:08:27
アホなら何も書き込まなければいいのに
661デフォルトの名無しさん:2010/04/26(月) 22:15:07
レベルに低い質問ばかりだな
ちょっと調べれば分かる程度の質問している奴が
なぜRubyやろうと考えるのかね
662デフォルトの名無しさん:2010/04/26(月) 23:17:41
>>659
つまりRubyでは何も出来ないということですねわかります
663デフォルトの名無しさん:2010/04/27(火) 00:47:55
高速な描画が必要ならDXRuby、ノベルゲームやスピードにこだわらなければMiyakoで。
664デフォルトの名無しさん:2010/04/27(火) 00:51:00
Windowsしか使ってない人が想像できるような範囲の仕事はRubyが不得意とするところ。
665デフォルトの名無しさん:2010/04/27(火) 05:38:22
Windows意外のOSなんてありえんわ
666デフォルトの名無しさん:2010/04/27(火) 06:56:13
Rubyはレベルが低い人の期待に応えていないと
667デフォルトの名無しさん:2010/04/27(火) 07:47:20
レベルの高い人はpython、低い人はruby
668デフォルトの名無しさん:2010/04/27(火) 08:11:53
Ruby信者のように根気がない奴は他人のツールを利用するだけ
669デフォルトの名無しさん:2010/04/27(火) 08:14:34
よく言われるPythonの売りに、ライブラリの充実ってのもなかったっけ?
全否定っすか
670デフォルトの名無しさん:2010/04/27(火) 09:22:31
Pythonはライブラリが整備されてる感じがするけど
Rubyは野良ライブラリが多いという印象
671デフォルトの名無しさん:2010/04/27(火) 09:31:23
優秀ライブラリがたくさんあり、野良ライブラリも大量で活気があり怪しい → Perl
優秀ライブラリがたくさんあるが野良が少なめで大人しい → Python
優秀ライブラリはともかく野良ライブラリが大量にあって単に怪しい → Ruby

Rubyは「楽しい」が、「利用しにくい」とも言える
672デフォルトの名無しさん:2010/04/27(火) 09:40:11
実は Ruby はプログラム書く時間よりライブラリ探す時間の方が長い
673デフォルトの名無しさん:2010/04/27(火) 10:01:15
てことで、C#最強説浮上
674デフォルトの名無しさん:2010/04/27(火) 10:38:41
その人次第の適材適所なんじゃないかな

Ruby は楽しいしせいぜい数十行程度のスクリプトなら
他の言語に比べてストレス感じない
それ以上の場合は俺は他の言語(普通C++)で書いてる

Ruby でも色々できるの知ってるけど好みや慣れもあるしね
675デフォルトの名無しさん:2010/04/27(火) 10:51:47
>>674
>他の言語に比べてストレス感じない
コード書かないでWPFみたいなことができますか?
676デフォルトの名無しさん:2010/04/27(火) 11:16:10
1.9からWindowsの冷遇っぷりが厳しい。
677デフォルトの名無しさん:2010/04/27(火) 11:52:49
冷遇と言うより、Windows 環境のわかるコミッタが少なすぎるのが問題。
678デフォルトの名無しさん:2010/04/27(火) 12:02:04
そもそものあれとして今までWindowsのサポートがアンオフィシャルででも続いてたこと自体が奇跡
かなりほうぼうに無理させまくって維持してた状態
679デフォルトの名無しさん:2010/04/27(火) 12:17:52
1.9からなんかWindowsの扱い変わったっけ?
680デフォルトの名無しさん:2010/04/27(火) 12:55:51
>>675
IronRubyならWPFは使えるけど、コード書かないでは厳しいな
あと多分>>674は文法レベルの話をしてるんじゃないかな
実装とか楽できる機構とか周辺環境はまた別問題だと思う
http://www.hanselman.com/blog/WPFSampleInIronRubyTalkingViaCToWesabe.aspx
681デフォルトの名無しさん:2010/04/27(火) 13:04:22
Javaプログラムをメモ帳で作ると死ぬ
682デフォルトの名無しさん:2010/04/27(火) 13:30:30
>>678
そうやって築いたWindows系信者じゃなくてボランティアも
冷遇のせいでどんどん離れて逝ってる訳ですね
683デフォルトの名無しさん:2010/04/27(火) 13:37:22
逝という字を2chで使ってる人間を数年ぶりに見た
何年前の化石よ

アンチ活動はこちらで
http://pc12.2ch.net/test/read.cgi/tech/1249737531/
684デフォルトの名無しさん:2010/04/27(火) 14:08:02
なにがどうアンチなのか
685デフォルトの名無しさん:2010/04/27(火) 14:33:53
レス乞食はせめて隔離スレでやってくれ
686デフォルトの名無しさん:2010/04/27(火) 15:02:32
自分のわからない話は他スレに誘導しようとするおっさんが常駐しています
687デフォルトの名無しさん:2010/04/27(火) 17:27:25
とりあえずのあの見にくくなった新ドキュメントの改良をだな・・・
688デフォルトの名無しさん:2010/04/27(火) 18:20:22
原理上Javaで出来ることはRubyでも(もう少し簡単に)できるよね?
携帯アプリぐらいならRubyで作れるんじゃ?

689デフォルトの名無しさん:2010/04/27(火) 19:21:52
>>688
携帯アプリってなに?
690デフォルトの名無しさん:2010/04/27(火) 19:32:24
まあ昨今は携帯電話の画面を書き換えることができればなんでも携帯アプリだとか呼ばれるので
小さい文字のCGIあたりでなんかすれば携帯アプリと名乗っていいんじゃないかと思う
691デフォルトの名無しさん:2010/04/27(火) 20:42:42
webrickでアクセスログを取る時は:AccessLogにIOオブジェクトを指定するようですが
auth_server = WEBrick::HTTPServer.new({
~,
:ServerType => WEBrick::SimpleServer,
:AccessLog => [[open("access.log", "a"), WEBrick::AccessLog::COMMON_LOG_FORMAT]]
})
みたいに書くとファイルがクローズするまでログが書き出されず、メモリを圧迫するほか
Rubyインタプリタが落ちたときにログを失う可能性があります
逐次ディスクに書き出すようにしたいのですが良い方法があったら教えてください
692デフォルトの名無しさん:2010/04/27(火) 21:22:54
IOオブジェクトぶん投げるタイプの設計は個人的にあまり好きではない

>>691
begin
 file = File.open('access.log', 'a')
 file.sync = true
  …
 :AccessLog => [[file, WEBrick::AccessLog::COMMON_LOG_FORMAT]]
  …
rescue Exception
 file.close
 raise
end
END{ file.close unless file.closed?}
693691:2010/04/27(火) 21:38:54
>>692
ありがとう。その方法でやってみます

しかしサーバー側のログはWEBrick::BasicLogなのにアクセスログがIO・・・
何でこんな作りになっているんだ(´・ω・`)
694デフォルトの名無しさん:2010/04/27(火) 22:42:38

Ruby 本体が Windows 環境に冷たいからこそ、
IronRuby の本を出したら売れそうだな
695デフォルトの名無しさん:2010/04/27(火) 23:45:29
>>693
別にIOじゃなくても<<が定義されていれば良いから
LoggerとかStringとかでもいいのよ
696デフォルトの名無しさん:2010/04/28(水) 07:43:46
確かにダックタイピングは多態だけど、制限のない多態だけ見て多態性の本質が理解出来るとは思えないな。
697デフォルトの名無しさん:2010/04/28(水) 07:45:52
      ,―ヽ_(((((_、―
   ,/  ノ       ヽ  ~\
  /   ノ   IPA    ヽ   ~\
/   ノ           ヽ、  `ヽ
|    ノ / ̄\   / ̄~ヽ ヽ    i
|   ノ              |  ノ
\  |  <●>  <●>  (  )
 \ |      | |       i /
    |      /  ヽ       レ
   i     (●_●)      /  
    i、    ,-――-、   ・ /
    i、  <(EEEEE)> ∵/    どういたしまして
      i、  \   ./  /
       \   ーー   ,ノ       
  ,,.....イ.ヽヽ、ー-―一ノ゙-、.
  :   |  '; \_____ ノ.| ヽ i
      |  \/゙(__)\,|  i |
698デフォルトの名無しさん:2010/04/28(水) 18:11:14
RGSS2から入ってある程度できるようにはなったんですが
C++が商業系のゲームソフトでメインに使われている言語と聞いたので
C++を学ぼうと思ってるんですが
rubyとC++ってどちらの方がレベルが高いのでしょうか?
おそらくC++が高いと個人的に思ってるのですが
699デフォルトの名無しさん:2010/04/28(水) 18:15:12
      ,―ヽ_(((((_、―
   ,/  ノ       ヽ  ~\
  /   ノ   IPA    ヽ   ~\
/   ノ           ヽ、  `ヽ
|    ノ / ̄\   / ̄~ヽ ヽ    i
|   ノ              |  ノ
\  |  <●>  <●>  (  )
 \ |      | |       i /
    |      /  ヽ       レ
   i     (●_●)      /  
    i、    ,-――-、   ・ /
    i、  <(EEEEE)> ∵/    お前は何を言っているんだ?
      i、  \   ./  /
       \   ーー   ,ノ       
  ,,.....イ.ヽヽ、ー-―一ノ゙-、.
  :   |  '; \_____ ノ.| ヽ i
      |  \/゙(__)\,|  i |
700デフォルトの名無しさん:2010/04/28(水) 18:35:53
なんか色々へにょんとするな

>>698
レベルが高かったらどうするの?
低いって答が来たらどうするん?
701デフォルトの名無しさん:2010/04/28(水) 19:05:24
言語のレベルが高いとか低いとかまた紛らわしいことをw

低レベル 言語
高レベル 言語 でググって出直してこいw
702デフォルトの名無しさん:2010/04/28(水) 20:07:31
ハイクラスとかハイグレードとかにしておくべきだな
703デフォルトの名無しさん:2010/04/28(水) 20:36:56
VS2010めちゃくちゃ進化してるww
もう他の言語やってらんねーな
704デフォルトの名無しさん:2010/04/28(水) 20:39:04
誤爆
705デフォルトの名無しさん:2010/04/28(水) 20:42:17
うんRubyにもう戻ってこなくていいよwwwwww
706デフォルトの名無しさん:2010/04/28(水) 20:51:23
これは恥ずかしい
707デフォルトの名無しさん:2010/04/29(木) 14:32:40
みんなVS2010に流れちゃったかな?w
708デフォルトの名無しさん:2010/04/29(木) 15:11:30
うんRubyにもう戻ってこなくていいよwwwwww
709デフォルトの名無しさん:2010/04/29(木) 15:38:44
ダウソしてたらディスク容量足りなくなった
ピンチ
710デフォルトの名無しさん:2010/04/29(木) 15:41:02
Ruby使っている奴って貧乏なんだなw
そりゃそだなこんな言語知ってても就職できないわなw
711デフォルトの名無しさん:2010/04/29(木) 16:49:27
Rubyしか使わないって人は少ないんじゃないの?
712デフォルトの名無しさん:2010/04/29(木) 17:31:52
当人が1言語しか使えないから他人もそうだと思ってるんじゃない?
713デフォルトの名無しさん:2010/04/29(木) 18:34:53
とりあえずなんだ、就職頑張れよw
714デフォルトの名無しさん:2010/04/29(木) 22:20:50
はい
715(u_・y) ◆rT33C51l9k :2010/04/30(金) 03:26:52
なんか意味わからないキチガイをRubyの話題でよく見かけるから気になる
そこの名無しを分析してみた
1 Ruby以外の言語の信者
2 Rubyでの金儲け手段に気づいていて競合を少しでもなくそうとしている
3 私怨
4 実はMatz
5 もしかしたらRubyが理解出来なかった人
6 endが大嫌い

やっぱ4かな
逆に叩いて火をつけようとしてるとか
716デフォルトの名無しさん:2010/04/30(金) 03:48:11
7. ごめん、私やっぱりLarryが好き
717デフォルトの名無しさん:2010/04/30(金) 10:24:25
条件で0が真扱いだということを知ったときちょっと嫌いになった
718デフォルトの名無しさん:2010/04/30(金) 10:43:31
0は配列のidxでも使うんだし当然だろ
719デフォルトの名無しさん:2010/04/30(金) 10:46:45
偽は FalseClass のオブジェクト false と NilClass のオブジェクトnil だけです
0 も "" も [] も真です
クラスの基底であることを調べたい場合は i.zero? とか str.empty? とかしてくだされ
720デフォルトの名無しさん:2010/04/30(金) 10:48:35
>>717
うっせーよ

0

とだけ書いた1バイトのファイル送りつけるぞ
721デフォルトの名無しさん:2010/04/30(金) 10:58:33
0が真でないなら数学の問題で0が答えの場合
0点だな
722デフォルトの名無しさん:2010/04/30(金) 11:09:21
>>721
なにこの中学生みたいな発想
表示されている数はただの概念説明用識別符号で絶対ではない
テストの点数は10進の正の整数と定義付けされているだけだ
723デフォルトの名無しさん:2010/04/30(金) 11:27:44
Rubyオワタ
724デフォルトの名無しさん:2010/04/30(金) 11:48:39
0が真・・・んじゃ1は?
725デフォルトの名無しさん:2010/04/30(金) 12:05:42
falseとnil以外は全部真

嫌ならActiveSupport入れてblank?使え
726デフォルトの名無しさん:2010/04/30(金) 12:14:20
727デフォルトの名無しさん:2010/04/30(金) 15:25:38
文字列が英文であるかを判定したいんですが、すでによくテストされた実装があれば教えて欲しいです。
728デフォルトの名無しさん:2010/04/30(金) 15:45:57
^\w+$
729デフォルトの名無しさん:2010/04/30(金) 15:47:58
,や.や(や)や-や'や
730デフォルトの名無しさん:2010/04/30(金) 16:10:05
>>727
英文じゃないものってなんですか
731デフォルトの名無しさん:2010/04/30(金) 16:21:38
辞書つきのエンコーディング推測をしたいのだろう
ライブラリはあったかなあ
732デフォルトの名無しさん:2010/04/30(金) 19:05:29
>>727です。
すいません仕様があいまいでした。
日本語か英語か判別したいです。
733デフォルトの名無しさん:2010/04/30(金) 19:26:07
>>732 Korewa Eigo?
734デフォルトの名無しさん:2010/04/30(金) 19:29:07
イズディスイングリッシュ?
735デフォルトの名無しさん:2010/04/30(金) 19:32:55
Blog設置してて外国からのコメントを弾くとかそんなのだろうか
736デフォルトの名無しさん:2010/04/30(金) 19:36:39
・ ASCII文字だけで構成されている
・ UTF-8 等で、日本語圏で使われている文字が1文字でも含まれているかどうか

なら調べられると思う
737デフォルトの名無しさん:2010/04/30(金) 19:40:29
738デフォルトの名無しさん:2010/04/30(金) 20:34:56
>>733
日本語
739デフォルトの名無しさん:2010/04/30(金) 21:53:42
簡易的にNKF.guessでasciiだったら英語
UTF16,UTF32だったらUTF8に変換してからもう一度 NKF.guess
って思って試してみたら
UTF32は判別できなかった
英語の文章でもユニコードで記号使ってるとASCIIにならんのもダメだけど
740デフォルトの名無しさん:2010/05/01(土) 00:25:36
コマンドプロンプトでの出力に関しての質問です。
putsにて「◯% 完了」と表示させているのですが、◯部分のみを書き換えて
追記や改行はせずに表示させたいのです。
なにかそのようなメソッドは用意されているのでしょうか?
よろしくお願いします。
741デフォルトの名無しさん:2010/05/01(土) 00:33:30
puts でなく print を使い、\r(行頭に戻す文字)を使えばおk
742デフォルトの名無しさん:2010/05/01(土) 04:03:22
たのしいRubyやってんだけどハッシュとかホントに使うのかよ
イマイチ実感わかねってばよ
743デフォルトの名無しさん:2010/05/01(土) 05:32:25
無人島にデータ構造をひとつ持っていくならハッシュという有名な言葉があってだな
744デフォルトの名無しさん:2010/05/01(土) 07:56:51
O(1)で出し入れできるハッシュのエロさが解らんかっ
745デフォルトの名無しさん:2010/05/01(土) 08:15:10
というかHashが速過ぎて自作オブジェクトの優位性がない
とりあえずHashに格納したスクリプトの速さは異常
746デフォルトの名無しさん:2010/05/01(土) 09:10:20
rubyはすんごいことが出来ますか?
747デフォルトの名無しさん:2010/05/01(土) 09:19:31
単なる言語に何を期待しているんだ。
748デフォルトの名無しさん:2010/05/01(土) 09:21:04
いや別にそれほどでもなく

ただ、日常の「プログラミングで片付くさまざまなこと」を安楽に片付けることができるので(除くGUI操作)、
メインの「すんごいこと」に気兼ねなく注力できるようになるご利益はあるかも
749デフォルトの名無しさん:2010/05/01(土) 09:23:05
家のLinuxマシンでは30個くらい自作rubyスクリプトが動作して自動でいろんなことしてるが、
この中に「すごいの」はひとつもないぞ
750デフォルトの名無しさん:2010/05/01(土) 09:27:49
>>742
Hashオブジェクトは使わない日はない
Object#hash のことなら自力ではまず使わない
irb> "str".hash
987610256
751デフォルトの名無しさん:2010/05/01(土) 09:33:50
>>750
これ何に使うの?
752デフォルトの名無しさん:2010/05/01(土) 09:52:39
普通にパソコン使っている人にはRubyは不要だな
大抵はフリーソフトで事足りる
753デフォルトの名無しさん:2010/05/01(土) 09:54:34
普通にの定義にもよるが一般的にはそりゃそうだろう
754デフォルトの名無しさん:2010/05/01(土) 09:59:04
>>751
特に使わない
あるクラスの eql? を再定義したとき、
そのクラスのオブジェクトを Hash のキーとして使用許可したい場合に再定義する

irb> class C; def initialize(v); @val=v; end; attr_reader :val; def eql?(o); val.eql?(o.val); end; end
irb> h = {C.new(1) => 'v'}
irb> h[C.new(1)] = 'new!'
irb> p h
{#<C:0xb7557d0c @val=1>=>"v", #<C:0xb7553234 @val=1>=>"new!"}
irb> class C; def hash; val.hash; end; end # reopen
irb> h = {C.new(1) => 'v'}
irb> h[C.new(1)] = 'new!'
irb> p h
{#<C:0xb7549054 @val=1>=>"new!"}

eql? だけでは2回目の C.new(1) が「hに既に入ってるキーと同じ」とみなされなかったが、
hash の値を「eql? が真のとき同一な値になる」ように調整すると「同じキー」として扱われる
755デフォルトの名無しさん:2010/05/01(土) 10:04:21
これ、地味に邪魔なメソッド名だよね
hash_value とか __hash__ とかにしてくれればよかったのに
756デフォルトの名無しさん:2010/05/01(土) 10:11:09
実際問題として自作オブジェクトそのまんまをHashのキーにすることはきわめて稀なんで
目的外の動作で上書きしても多勢に問題はないんだけどさ
757デフォルトの名無しさん:2010/05/01(土) 10:26:42
>>753
定義がなければ会話できないのかよアホ
758デフォルトの名無しさん:2010/05/01(土) 10:29:34
まともなコンテキストが提供されてないから仕方ない
759デフォルトの名無しさん:2010/05/01(土) 12:30:32
イベントがある度にログを標準出力に出力するプログラムがあって、その出力するログを常に追って特定の文字列をパターンマッチで検索して、マッチしたらあるコマンドを実行したいと思っています。
そしてパターンマッチの部分をスレッドで並列に動かしたいと思い、自分でなんとか考えて書いてはみたのですが、自信がないので何かアドバイスを頂ければ幸いです。

----
#!/usr/bin/env ruby

log_prog ="/usr/bin/hoge"
command1 ="/usr/bin/fuga"
command2 ="/usr/bin/hogehoge"


open("| #{log_prog}") do |a|
while true
if ( log =a.gets )
t1 =Thread.new do
system(command1) if /patternA/ =~ log
end
t2 =Thread.new do
system(command2) if /patternB/ =~ log
end
else
t1.join
t2.join
exit 0
end
end
end
760デフォルトの名無しさん:2010/05/01(土) 12:51:33
>>759
あきらめろ
お前には無理
761デフォルトの名無しさん:2010/05/01(土) 13:01:41
ループ do
if ファイル更新検知 then
コマンドA if /パターンA/ =~ 更新部
コマンドB if /パターンB/ =~ 更新部
end
end

これでいいんでは
762デフォルトの名無しさん:2010/05/01(土) 14:20:23
スレッドは毎回作らずに仕事専用にそれぞれ割り当てておくとか。
で、それぞれ仕事の待ち行列(キュー)を持ってて、メイン処理では
待ち行列に仕事情報をひたすら突っ込む。

require 'thread'

# 仕事1スレッドと待ち行列
q1 = Queue.new
t1 = Thread.start do
  while line = q1.pop # 待ち行列から偽(nil, false)が出てきたら終了
    system command if /patternA/ =~ line
  end
end
# 仕事2...
q2 = ...
t2 = ...

open(...) do |log|
  log.each_line do |line|
    q1.push line
    q2.push line
  end
end

q1.push nil # 仕事終了通知
q2.push nil

[ t1, t2 ].each(&:join)

みたいなふいんき(なぜか(ry
763デフォルトの名無しさん:2010/05/01(土) 15:56:05
レベル低いな
この程度か
764デフォルトの名無しさん:2010/05/01(土) 16:10:15
晒しage
765デフォルトの名無しさん:2010/05/01(土) 16:21:35
0-9の範囲で2-4でa,b,cが数字の後に付く場合があるとします。
このときに、
3bであれば、[3,b]
3であれば、[3,nil]
5であれば、[5,nil]
7aであれば、[7,nil]
のように取り出したいのですが、正規表現のパターンはどうなるでしょうか?
766デフォルトの名無しさん:2010/05/01(土) 16:26:04
レベル低い質問ばかりだなー
こんな奴がなんでRubyやってるの?
767デフォルトの名無しさん:2010/05/01(土) 16:27:43
別に正規表現ひとつで無理しなくてもいいじゃん
配列を自分で作ればいい
正規表現だけをここで聞いたって、ちょっと変えたくなったときに即手詰まりだ
768デフォルトの名無しさん:2010/05/01(土) 16:28:22
>>766
宗教活動ですか?
ネガキャンはやめてくださいね。
769デフォルトの名無しさん:2010/05/01(土) 16:30:36
>>768
昼間からスレ新着再読み込み連打してる人になに言っても無駄
770デフォルトの名無しさん:2010/05/01(土) 16:31:12
>>768
お前がやめればな
771デフォルトの名無しさん:2010/05/01(土) 16:33:58
>>769
2分間隔でレスつけてるお前らのがすごいよw
772デフォルトの名無しさん:2010/05/01(土) 16:35:38
RubyていったらC++をマスターした奴が
趣味でやるための言語だろ?
正規表現やマルチスレッドもわからないようなカスなんて
SmallBasicで十分だろ
773デフォルトの名無しさん:2010/05/01(土) 16:42:03
>>765
$1([0-9]{1})$2:([a-z]?{0}:{1})
[$1,$2]
774デフォルトの名無しさん:2010/05/01(土) 16:42:19
>>772
SmallBasicの宗教活動ですか?
ネガキャンはやめてくださいね。
775デフォルトの名無しさん:2010/05/01(土) 20:40:29
Rubyのしかも初心者スレを荒らす意図がわからん
776デフォルトの名無しさん:2010/05/01(土) 20:41:03
本スレでは太刀打ちできないからだろう
777デフォルトの名無しさん:2010/05/01(土) 20:42:16
勉強がてらファイルのリネームスクリプトを作ってみた
どうもunicodeのファイル名だとうまくいかないらしい
調べてみるとこんなQ&Aを見つけた
http://oshiete.goo.ne.jp/qa/3413696.html
だとすれば自分でunicodeを正しく扱うライブラリ作るしかないのか・・でもできないw
先輩方はどうされてますか?
環境:WinXP SP3, ruby1.8.7
778デフォルトの名無しさん:2010/05/01(土) 20:48:06
>>777
現行のRuby標準ではUnicode文字の含まれたファイル名を扱うことはどう頑張ってもできない
諦める
779デフォルトの名無しさん:2010/05/01(土) 20:54:35
WindowsのAPIを直に呼べばできるけど、

 ・ これができる人はそもそも普通に使うのでライブラリとして残らない
 ・ できない人はそもそもできないからほかの手段を使う

というデッドエンドな感じが…

Win32::Unicode とか gem で作ってる人いないの、みたいな
780デフォルトの名無しさん:2010/05/01(土) 20:59:09
>>778>>779
レスありがとうございます
なんとかする方法はないかとずっとあがいていましたが、おかげであきらめられそうです
781デフォルトの名無しさん:2010/05/01(土) 21:06:50
一応、require 'win32ole' してから
ファイルの読み込みから書き出しまで全部 WIN32OLE 経由でやればなんとでもなる
Ruby のクラスではなく、やりたいことに関する WIN32OLE の知識が必要
782デフォルトの名無しさん:2010/05/01(土) 21:08:07
だいぶ前に

require 'win32ole'
WIN32OLE.codepage = WIN32OLE::CP_UTF8
fso = WIN32OLE.new('Scripting.FileSystemObject')
a = fso.CreateTextFile("♡♥♡♥.txt", true)
a.WriteLine("This is a test")
a.Close()

というスクリプトがあがってたな
絵文字はUnicodeの絵文字として直に書くこと
783デフォルトの名無しさん:2010/05/01(土) 21:08:35
>>765
俺の頭じゃ正規表現だけってのは無理
a = [$3||$1,$2] if s =~ /(?:([2-4])([abc])|(\d))/
784デフォルトの名無しさん:2010/05/01(土) 22:03:52
今時Unicodeもまともに使えない言語ってw
785デフォルトの名無しさん:2010/05/01(土) 22:10:42
むしろWindowsのローカライズがまともじゃないとかいうことはない?
786デフォルトの名無しさん:2010/05/01(土) 22:16:16
>>785
まあ、フツーに作るとUnicodeファイルを安全に読めないのはWindows側の欠陥ではある
gem にすらラッパーがないのはRubyの怠慢…でもないな、なんだろう、ユーザーの怠惰?

PythonはUnicodeファイル名にアクセスできる
PerlはWin32::Unicodeを使えば自己責任でアクセス可能
787デフォルトの名無しさん:2010/05/01(土) 22:17:29
それって日本製であるが故の弊害って奴?
788デフォルトの名無しさん:2010/05/01(土) 22:27:11
>>787
…半分はそう
RubyはもともとUTF-8には対応してなかった(太古の話だが)
UTF-8に対応できそうとなったときに、Windows9x用のコードとシステムを全部捨てて新しく作ればよかったんだけど

まーそんなことできんわなーだよねーですよねー
789デフォルトの名無しさん:2010/05/01(土) 22:33:51
CreateFileWを使わない ruby がクソ
790デフォルトの名無しさん:2010/05/01(土) 22:40:47
Wつきに変えるだけでいいなら 1.8 くらいで完了してた気はしなくもない
791デフォルトの名無しさん:2010/05/01(土) 23:16:24
何年も前にこんだけ揉めて未だに実装されてないんだし
もうwin32に対してOSとのI/FとしてUnicodeは使わない方向なんじゃね
ttp://www.ruby-forum.com/topic/69291
792デフォルトの名無しさん:2010/05/02(日) 02:09:41
puts $Count[num]
としたら、
unexpected tGVAR ,expecting kDO or '{' or '('
というエラーになりました。
どこが間違いでしょうか?
793デフォルトの名無しさん:2010/05/02(日) 02:29:43
unexpected tなんたら は構文エラー。この場合は、
「文法的にはこのあとグローバル変数ではなく do か 括弧類が来るはず」
というエラーなんだが、示されたコード自体に文法の間違いはない。
その前のほうの行に何か問題があるはず。
794デフォルトの名無しさん:2010/05/02(日) 04:45:15
CentOS5.4にruby-ldapをインストールしたいのですが、
make: *** [mod.o] エラー 1
で止まってしまいます。
検索しても、入らないという問題の報告はありますが
解決方法が見つかりません。
rubyはパッケージの1.8.5、ruby-ldapは0.9.8です
うまく入れる方法があれば教えてください
795デフォルトの名無しさん:2010/05/02(日) 04:54:17
>>794
Ruby1.8.5は4年も前の不安定版です
いまさら動作するほうが不思議

自分以外のユーザーがいないのなら、ホームディレクトリでRuby1.8.7をコンパイルして使うことをお勧め
796デフォルトの名無しさん:2010/05/02(日) 05:06:17
CentOSってパッケージ古いのしか入ってないよねー
797デフォルトの名無しさん:2010/05/02(日) 05:18:33
安定を目指してるわりにパッケージングポリシーに一貫性が薄い
まだ Debian のほうが頼れるわ
実用上は自分で rpm 作るのが基本とか CentOS の意味ねえよ
798デフォルトの名無しさん:2010/05/02(日) 15:33:36
データを入れている配列aと、それのインデックス配列bがあります。
aを並び替える(降順)と後々の処理で面倒なので、bを並び替えて、それを使って呼び出したいと考えてます。
処理的にどんな感じになるんでしょうか
799デフォルトの名無しさん:2010/05/02(日) 15:41:18
状況がいまいちわからないんだけど、プロプログラマーとかだとわかるのかな
800デフォルトの名無しさん:2010/05/02(日) 15:49:39
呼び出し方もなにも・・・a[b[i]] じゃだめなのか
プロプログラマーならわかるんだろうか
801デフォルトの名無しさん:2010/05/02(日) 15:51:27
>>800
呼び出し方はわかるのですが、
インデックスの並び替えを降順に揃えるメソッドを使って上手く出来ないでしょうか?
できなければ、バブルソートで行こうと思ってるのですが
802デフォルトの名無しさん:2010/05/02(日) 15:54:58
b.sort! でいいじゃないか
803デフォルトの名無しさん:2010/05/02(日) 16:17:26
なーんかよくわからんがハッシュじゃなくて配列なんだよな
804デフォルトの名無しさん:2010/05/02(日) 16:57:11
>>802
その解答は合ってるけど混乱しかしねえw

降順なら b.sort! {|i, j| a[j] <=> a[i] } かな
805デフォルトの名無しさん:2010/05/02(日) 17:10:02
>>804
ありがとうございます
806デフォルトの名無しさん:2010/05/03(月) 16:23:57
setterメソッドで値を2つ同時入れるにはどう書けばいいでしょうか?
def size= width, height
@width = width
@hieght = height
end
と書いても
./main.rb:25:in `size=': wrong number of arguments (1 for 2) (ArgumentError)
from ./main.rb:25
とエラーが出ます。引数の数が違うみたいです。
807デフォルトの名無しさん:2010/05/03(月) 16:35:43
自己解決しました
ありがとうございました
808デフォルトの名無しさん:2010/05/03(月) 16:36:28
ちょっとスレ違いかもしれませんがスクリプトの実行時間を計る方法ありますか?
ちなみにRDE使ってます
809デフォルトの名無しさん:2010/05/03(月) 16:37:15
あります
810デフォルトの名無しさん:2010/05/03(月) 16:38:35
教えてください
811デフォルトの名無しさん:2010/05/03(月) 16:48:41
「RDEでは無理」です
812デフォルトの名無しさん:2010/05/03(月) 16:52:18
>>804
b.sort_by!{|i|a[i]}.reverse!
813デフォルトの名無しさん:2010/05/03(月) 16:55:22
RDEでできるのか知らんけど

ruby -r profile yourscrupt.rb

あるいは
starttime = Time.now
...
puts Time.now - starttime
するのが手っ取り早い
814デフォルトの名無しさん:2010/05/03(月) 16:56:52
むしろ RDE に「スクリプト総実行時間表示機能」があってもいいな
というかそうでもしないとうまく動かないと思う
815デフォルトの名無しさん:2010/05/03(月) 17:27:12
>>813
下のほうでできました
ありがとうございます
816デフォルトの名無しさん:2010/05/03(月) 19:54:25
900近い要素を持つ配列aryをごっちゃ混ぜにしたいのですが、
ary.sort_by{rand}
でやると、最初の方だけランダムになってて後ろはもとと同じです。
複数回やっても同じ状態でした。
なにかいい方法はありますか?
817デフォルトの名無しさん:2010/05/03(月) 19:58:30
うむ、ごく普通には、「そうならないようによーく考えてプログラムを作る」だ!

いやけっこうマジで
基本、「一発ではできない」のでとりあず素直に実装
818デフォルトの名無しさん:2010/05/03(月) 20:05:38
>>817
そだな
一度考え方を自力で見つければ全部に応用が利く
ナニがランダムで、ナニがランダムにならないかの認識は最重要
while arr.size > 0 do res << arr.delete_at(rand(arr.size)) end として作った res は
ランダムな分布になれるでしょうか、みたいな
819デフォルトの名無しさん:2010/05/03(月) 20:12:37
そういうのはやっぱ大学の情報系の授業をきちんと受けてれば理解できたんだろうか
820デフォルトの名無しさん:2010/05/03(月) 20:21:28
>819
自分でできないやつが、教わってできるようになるかよ。
甘えるな。
821デフォルトの名無しさん:2010/05/03(月) 20:21:32
sort_by{rand}は大体正しく動くと思うけど(randが同じ値を返すと微妙に偏るという問題はあるが)
何か他のところが間違ってるんじゃないかな
822デフォルトの名無しさん:2010/05/03(月) 20:25:49
元のままです、なら、sort_by! 使うか、sort_by が返す配列をちゃんと受け取りなさい、
なんだけど、始めのほうだけランダムになってるってのが謎だな。
823デフォルトの名無しさん:2010/05/03(月) 20:31:25
>>816>>818も(randの精度の範囲で)問題なさそうに見えるけどなぁ
824デフォルトの名無しさん:2010/05/03(月) 20:34:01
>>819
けっこうな割合で基礎知識を教えてもらえる可能性があるよ
こういうのは教科書的な基礎素養がないと、どんなに試行錯誤をしても確証が得られないから完全手探り
本当は偏ってるのか、たまたまうまくいったのか、それを確かめるのは通常「自分ではできない」

これを教科書なしで自分でできるなら学者さんになれるぞ
825デフォルトの名無しさん:2010/05/03(月) 20:59:29
どっかで半分ぶっこわしてるとか
826デフォルトの名無しさん:2010/05/03(月) 21:01:03
クラスFooの中で定義したクラスBarの中から、
Fooのメンバー変数にアクセスしたいのですがどうすればできますか。
こんな感じです。
class Foo
attr_accessor :bar
class Bar
def [] n
@vars[n]
end
end
def initialize
@vars = [10, 20, 30]
@bar = Bar.new
end
end

foo = Foo.new
puts foo.bar[1]
827デフォルトの名無しさん:2010/05/03(月) 21:04:58
>>816
とりあえず ary.shuffle ではダメなのはバージョンの都合?
828デフォルトの名無しさん:2010/05/03(月) 21:07:17
>>827
このスレ、何も書いてなけりゃ1.8.7限定だし回答も1.8.7限定推奨
アルコトを可能にさせるためだけに1.9.1入れさせるとかないわー
829デフォルトの名無しさん:2010/05/03(月) 21:10:07
>>826
クラス内クラスは単なる定数のスコープがネストしているだけです。
Javaのinner classにあるFoo.this のような参照は持っていないので、
Bar生成時にself(Fooインスタンス)を渡して内部で参照を持つように
してください。
830デフォルトの名無しさん:2010/05/03(月) 21:11:22
>>828
1.8.7にArray#shuffleあるんだけどな。
831デフォルトの名無しさん:2010/05/03(月) 21:16:18
>>826
module Foo
class Bar
end
end
でBarからFooに対してできることと同じ
だからインスタンス変数(のことだよね?)にどうこうはできない

このへんはClassがModuleのサブクラスだから
classでもmoduleと同様に名前空間にできるとかいう話

>>828
1.8.7にArray#shuffleあるでしょ
832デフォルトの名無しさん:2010/05/03(月) 21:16:34
>>826
Rubyにメンバー変数というものはない
呼び名で機能を期待されるので、RubyのものはRubyでの呼び名を使うことを強く勧める
インスタンス変数と言われれば、メンバ変数のような動作を期待されることはないわけで

で、内包されるクラスは単なる別クラスだ
ふつーにアクセス手段を提供するしかないね

class Foo
attr_accessor :vars, :bar
def initialize
@vars = [10, 20, 30]
@bar = Bar.new(self)
end

class Bar
def initialize(foo); @foo = foo; end
def [](n); @foo.vars[n]; end
end
end

p Foo.new.bar[1] #=> 20
833826:2010/05/03(月) 21:26:41
>>831-832
言われた方法でできました! 超ありがとうございます。
できましたけど、すごく面倒くさいですね……
心が折れそうです。
834デフォルトの名無しさん:2010/05/03(月) 21:36:34
すごく面倒くさいときは十中八九、設計が間違ってるんだぞ
835デフォルトの名無しさん:2010/05/03(月) 21:52:13
うむ
836826:2010/05/03(月) 21:56:22
設計したの俺じゃないのでwww
837デフォルトの名無しさん:2010/05/03(月) 22:04:39
子が親を参照するというのはまれによくある
838デフォルトの名無しさん:2010/05/03(月) 22:20:45
> まれによくある
839デフォルトの名無しさん:2010/05/03(月) 22:31:15
>>838
恐らく、「まれ」は人に、「よくある」はそいつの書いたコードに掛かっているんだろうな。
『まれに、子が親を参照するコードをよく書く奴がいる』……? 駄目だ、俺には校正仕切れない。

まぁ、何度かコード書き直したら、清書するぐらいの方がいいよ。ほっとくとスパゲティソースになる。
840デフォルトの名無しさん:2010/05/03(月) 22:35:40
まれによくある、はブロント語というやつなのであまり気にしないでいい。
841デフォルトの名無しさん:2010/05/03(月) 22:42:00
ラムダ式を使わなければいい
842デフォルトの名無しさん:2010/05/03(月) 23:17:28
整数を格納した配列 arr の中の、最小の要素の位置を取得したいのですが、
以下よりもスマートな記述はあるでしょうか。

min_num = arr.min
min_num_index = []
for i in 0...arr.size
min_num_index.push(i) if arr[i] = min_num
end
843デフォルトの名無しさん:2010/05/03(月) 23:34:23
なんでpushしてるん?

> a = 1.upto(20).to_a.shuffle
=> [12, 3, 6, 1, 15, 2, 4, 11, 9, 5, 8, 19, 18, 10, 20, 17, 7, 14, 13, 16]
> a.index(a.min)
=> 3
844デフォルトの名無しさん:2010/05/03(月) 23:43:38
Rubyでラムダ式つかえんの?
845842:2010/05/04(火) 00:51:00
>>843
最小が複数ある場合もあるからです
846デフォルトの名無しさん:2010/05/04(火) 01:07:22
>>842
あのさ、そんなこともわからないのに
なんでRuby始めたの?
強制されているわけじゃないのなら
他の言語やったほうがいいぞ
847デフォルトの名無しさん:2010/05/04(火) 01:08:53
こんな漢字?
a = []
indexes = []
100.times{a << rand(10)}
a.each_with_index{|x, i| indexes << i if x == a.min}
848デフォルトの名無しさん:2010/05/04(火) 01:20:40
変な人が居着いちゃったね。初心者スレ
849デフォルトの名無しさん:2010/05/04(火) 02:05:23
宿題スレみたいなヤツばっか
てか宿題スレよりひどいな
850デフォルトの名無しさん:2010/05/04(火) 02:14:24
初心者スレなんだから質問はかまわんだろ、答えたくなきゃスルーすればいいだけ
答えもしないで初心者を馬鹿にするだけの奴は死んで欲しいけどな
851デフォルトの名無しさん:2010/05/04(火) 03:10:23
849みたいなのを変な人と言ったのだが、本人は全然自覚してなかったんだな
852デフォルトの名無しさん:2010/05/04(火) 03:12:31
Rubyについての質問ならいいが
プログラミング初心者は勘弁
853デフォルトの名無しさん:2010/05/04(火) 03:14:02
GUI否定の人でしょ?
854デフォルトの名無しさん:2010/05/04(火) 04:07:02
それ織れ出汁
855デフォルトの名無しさん:2010/05/04(火) 12:30:49
>>842は、Rubyにはそれを一発でやってくれる(に近い)メソッドはあるかっていう質問じゃないの?
856デフォルトの名無しさん:2010/05/04(火) 16:22:06
環境:Ubuntu 8.04 LTS on virtualbox (on winXP)
ruby が 1.8.6 だったので 1.8.7
Synapticとかいうパッケージマネージャで

857デフォルトの名無しさん:2010/05/04(火) 16:29:19
すみません。途中で送ってしまいました。

質問です。 gem environment で表示される
RUBY EXECUTABLE: /usr/bin/ruby1.8 を /usr/bin/ruby に変更する方法を
ご存知でしたら教えていただけますでしょうか。

経緯
環境:Ubuntu 8.04 LTS on virtualbox (on winXP)
ruby が 1.8.6 だったので 1.8.7 にしたくもSynapticとかいうパッケージマネージャは
1.8.6 が最新だと言って聞かぬのでソースからビルド -> インストール
でもgem install で 1.8.7 依存のが入んない
/usr/bin/ruby は 1.8.7 になってるぜよあれ?/usr/bin/ruby1.8(1.8.6) ってのが残ってる



858デフォルトの名無しさん:2010/05/04(火) 16:38:54
色をセットするのにターゲットとカラーの2つの値が必要な時に
aaa.color = [target, color]
aaa.color[target] = color
のどちらがより望ましいですか?
859デフォルトの名無しさん:2010/05/04(火) 16:57:13
>>858
どちらかといえば後者
代入の度に無駄なArrayを生成しないのと、セットするだけでいいなら実装がシンプル

class C
attr_reader :color
def initialize
@color = {}
end
end
aaa = C.new
aaa.color[:target] = "red"

ただしdef color[]=()みたいな定義はできないから(上記のHashのように間に挟む必要がある)
colorがセットされたら他オブジェクトに通知するといったように、代入に見せかけて処理がしたいときには
前者か、素直にaaa.set_color(target, color)とか
Hash代わりの独自クラスでdef []=を定義してもいいんだけど
aaaとは別オブジェクトには違いないからインスタンス変数にアクセスとかしづらい
860デフォルトの名無しさん:2010/05/04(火) 16:59:05
>>857
gem という Ruby スクリプトをどの ruby で起動したかに完全に依存する
というか一般論としてパッケージと自力ビルドの混在はシステムに関する知識が必要
ある意味 Ruby 関係ないね

複数の Ruby を使い分けたいのなら rvm 使うといい
861858:2010/05/04(火) 17:17:43
>>858
う、悩んでいたことがズバリ当てられています。あなたはエスパーか。
def color[]= (target, color) が定義できれば終わりです。ただそれは言語仕様上無理なので。
セットするときに独自の処理をしたいのでHashは無理。
したがって独自クラスを作って def []= を定義して
その独自クラスからaaaの方にアクセスする手段を用意して……
出来なくはないのですが、いくら何でも大変過ぎる。

aaa.set_color (target, color)
aaa.color = [target, color]
aaa.color[target] = color

やっぱり見た目が一番いいのは3番ですよね。
1番でも良いけど値が一つの時は color= で、2つになると set_color になるのが変

862デフォルトの名無しさん:2010/05/04(火) 17:40:34
>>860
ありがとうございます。
とりあえず gem の1行目書き換えてみて、ダメだったのであきらめがつきました。
すっぱりディストリビューション変えます。
863デフォルトの名無しさん:2010/05/04(火) 18:00:35
どうせ使わないんだしパッケージのRuby1.8.6アンインストールすればいいのに
864デフォルトの名無しさん:2010/05/04(火) 18:03:27
>>861
うお蛇足が役に立ってる

いいこと思いついたw
class C
def color
self
end
def []=(*arg)
puts arg
end
end
aaa = C.new
aaa.color[:target] = :color
865デフォルトの名無しさん:2010/05/04(火) 18:04:08
少しまじめに[]=を使おうとしたらこうなった
メソッド呼び出し方式をごまかしただけだけど、しかしやっぱりめんどくさいな
class C
 attr_reader :color
 def initialize
  @color = Color.new(self)
 end
 def change_color(target, color)
  puts target, color
 end
 class Color
  def initialize(parent)
   @parent = parent
   @container = {}
  end
  def []=(target, color)
   @container[target] = color
   @parent.change_color(target, color)
  end
  def [](target)
   @container[target]
  end
  def each(&block)
   @container.each &block
  end
 end
end
aaa = C.new
aaa.color[:target] = :color
866デフォルトの名無しさん:2010/05/04(火) 18:22:09
汚いコード張るなカス
867858:2010/05/04(火) 18:24:23
>>865
なるほど、無駄に変なクラスが露出しない分>>865の書き方の方がいいですね。
どうしてもコードが増えますが、ライブラリは使われて何ぼなので
ユーザーインターフェースを分かりやすくするために、この方式で頑張ります。
非常に有難うございました。
868デフォルトの名無しさん:2010/05/04(火) 18:27:21
>>866
だったらとっとと綺麗なコード貼れよ
そんなお前にカスと言う権利はにぃ
869デフォルトの名無しさん:2010/05/04(火) 18:29:15
いちいち反応する>>868みたいなバカってなんなの
自演?
870デフォルトの名無しさん:2010/05/04(火) 18:30:18
ubuntuでrubyのバージョンを上げたのですが、パス関係は
RUBYLIB=$PREFIX/lib/ruby/1.8:$PREFIX/lib/ruby/site_ruby/1.8:$PREFIX/lib
export RUBYLIB
これでOKですか?これまで動いてたのが動かなくなったので間違っていると思うのですが・・
871デフォルトの名無しさん:2010/05/04(火) 18:34:19
>>869
お前も反応すんな
872デフォルトの名無しさん:2010/05/04(火) 18:41:28
>>870
えーと、Ubuntuのが古いからPREFIX以下に自分でいれたって言う話だよね?
もとのRubyのライブラリが入っているところは新しく入れたRubyの関知する
ところではないので(同じところに上書きすれば別)、ライブラリも一切合切
用意してください。
RUBYLIBは特に指定しなくていいはず。

873デフォルトの名無しさん:2010/05/04(火) 18:54:08
つか質問は一箇所にしろ
874デフォルトの名無しさん:2010/05/04(火) 19:45:28
>>872
$ wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p249.tar.gz
$ cd ruby-1.8.7-p72
$ ./configure --prefix=/usr
$ make
$ sudo make install

こんな感じで入れて、ruby -v で1.8.7となっているのですが、
sudo gem1.8 install ruby-mysql
でruby-mysqlは1.8.7が必要です。となってしまいます
875デフォルトの名無しさん:2010/05/04(火) 19:50:30
>>874
せっかく100円払ったんだからこっちで粘ったら?
ttp://q.hatena.ne.jp/1272950114

rvm 使えというアドバイスも無視だし
876デフォルトの名無しさん:2010/05/04(火) 19:52:50
>>875
ばれたw
877デフォルトの名無しさん:2010/05/04(火) 20:00:39
100円に群がる乞食どもwww
こういう乞食が2chの質問スレ荒らしているんだな
878デフォルトの名無しさん:2010/05/04(火) 20:05:41
そういや1.9にするとrubygemも高速になるの?
879デフォルトの名無しさん:2010/05/04(火) 20:19:58
>>877
はてなの金券充当は低い
払うほうは必ず1ポイント1円だが
暇で趣味じゃないと回答できん
880デフォルトの名無しさん:2010/05/04(火) 20:23:02
>>878
速くなる場合と遅くなる場合があるが、
起動して重い処理かまして終了する、ということをさせた場合にはおおむね高速になるはず
ただ、起動して「即終了」するようなタイプのスクリプトだと、1.8.7のほうがたぶんかかる時間は短い

ものによっては1.8.7だと一瞬なのに1.9.1だとウンコみたいに時間がかかるみたいなこともある
881デフォルトの名無しさん:2010/05/04(火) 20:28:21
なるほど。起動が以前より若干重いってことか
882デフォルトの名無しさん:2010/05/04(火) 20:31:38
CPU が 1GHz 未満のマシンで Addressable/URI を require すると
1.9.1 では 1.8.7 の100倍以上時間がかかるみたいな話はどっかで読んだ
あれって原因なんだったんだろう
883デフォルトの名無しさん:2010/05/04(火) 20:41:27
1.8.7 の require 'addressable/uri' 自体は一瞬なので、100倍というか…
$ time ruby1.9 -rubygems -e "require 'addressable/uri'"
14.49s user 0.13s system 99% cpu 14.678 total
$ time ruby1.9 -rubygems -e "require 'addressable/uri'"
14.49s user 0.17s system 100% cpu 14.648 total

$ time ruby -rubygems -e "require 'addressable/uri'"
1.58s user 0.33s system 25% cpu 7.560 total
$ time ruby -rubygems -e "require 'addressable/uri'"
1.44s user 0.28s system 100% cpu 1.719 total
884デフォルトの名無しさん:2010/05/04(火) 20:44:07
>>883
パソコン遅過ぎ
買い換えろ
885デフォルトの名無しさん:2010/05/04(火) 20:46:07
>>884
1.8.7 で 1.5 秒なのに 1.9.1 では 15 秒になったとかいう場合、
悪いのはマシンの遅さではなく ruby 本体かライブラリ自身だと思われ
886デフォルトの名無しさん:2010/05/04(火) 21:40:11
はじめて触ってみたけど書くのは楽なのに構文エラーがすごくわかりづらいね
887デフォルトの名無しさん:2010/05/04(火) 21:58:29
うん、エラーメッセージは中途半端にわかりにくい
ArgumentError とか日本人向けではない
888デフォルトの名無しさん:2010/05/04(火) 21:58:54
>>874
p72は間違いだろうと思うが、1.8ではgemは標準付属品になっていないので、
そのgem1.8はUbuntuにもとから入っていたgemだ。
889デフォルトの名無しさん:2010/05/04(火) 22:02:29
どの言語もなれないうちはエラーメッセージわかりにくいもんだよな
890デフォルトの名無しさん:2010/05/04(火) 22:07:48
>>874
1. ruby 1.8.7-p249を入れる
2. rubygem (gemコマンド)を入れる
3. /usr/bin/gem list を実行して出てきたgemを
/usr/local/bin/gemを使って別途インストール。

下手に/usr以下のを上書きしようとせず、素直に/usr/localに入れてPATHだけ
通して使うのが一番楽だと思うよ。
891デフォルトの名無しさん:2010/05/04(火) 22:33:17
>>890,888
ありがとうございます
結局、上書きではないインストールでやりました
お手数おかけしました
892デフォルトの名無しさん:2010/05/05(水) 20:22:32
rdocでhtmlが正常に生成されず困っています。

メソッドや、
コメントを
記入して、実行してみて問題なかった
プログラムを、

コマンドプロンプトから
rdoc --charset= shift_jis hello.rb
でhtmlを生成して、ブラウザで表示させて見ましたが、
Files: 1
Classes: 0
Modules: 0
Methods: 0
Elapsed: 0.4s

こうなり、ましてメソッドが認識されません。
html上でもメソッドやメソッド詳細が表示されません。
原因はあるのでしょうか?
893デフォルトの名無しさん:2010/05/05(水) 20:51:41
RubyGems のジャンル別のカタログというか、ジャンル別使用率ランキングみたいなwebサービスがあったと思うのですが、
御存知ありませんか?
rubyforgeではなく別の海外サイトだったはずです
894893:2010/05/05(水) 21:15:00
The Ruby Toolboxでしたお騒がせしました。今見るとRailsプラグインばっかりですね・・・

The Ruby Toolbox - Know your options!
http://www.ruby-toolbox.com/

ツールをランキング表示する「Ruby Toolbox」公開 Ruby開発者の利用するツールが一目瞭然:CodeZine
http://codezine.jp/article/detail/3962


Ruby Toolboxにみる人気Rubyライブラリ 10 | エンタープライズ | マイコミジャーナル
http://journal.mycom.co.jp/news/2009/05/19/051/index.html
895デフォルトの名無しさん:2010/05/07(金) 03:38:18
あるクラス内のメソッド内で頻出の処理を関数にしたいのですが
どのように定義し呼び出すのがいいでしょうか。

class TheClass
 def method1
  @a = common_ope(@a)
 end
 def method2
  @b = common_ope(@b)
 end
 def common_ope(x)
  x * 2
 end
end

上のように書いてみたものの、以下の理由でおかしいですよね?
- common_ope()は公開する必要なし
- ていうかメソッドじゃないだろこれ
896デフォルトの名無しさん:2010/05/07(金) 03:49:48
でっていう
897デフォルトの名無しさん:2010/05/07(金) 06:10:30
>>895
privateは?
898デフォルトの名無しさん:2010/05/07(金) 06:47:28
Rubyのメソッドはfunction兼subroutine兼procedureなので「処理」を分けるためだけに使っても正当
オブジェクトに対するメッセージが~とか考えなくてもOK

んで
 「このメソッドはユーザーに見せる必要がない」
 「ユーザーがこのメソッドに直接アクセスする必要がない」
 「マニュアルコメント書こうと思ったがよく考えたらこれ内部処理だな」
とかいうような場合は>>897の言うように private を使う

class C
 def method1
  @a = common_ope(@a)
 end
 def method2
  @b = common_ope(@b)
 end

 private
 # こっから下のdefが全部プライベート
 def common_ope(x)
  x * 2
 end
end

private より下のメソッドはレシーバつきでアクセスすることができなくなる
obj.common_ope が不可に
C 内で common_ope とするのは可
C 内の self.common_ope も不可なので注意

obj.__send__(:common_ope) は動作可
アクセス時の書き方だけを制御できる
なにがなんでも秘匿するというようなことはRubyではできないので素直に諦める
899デフォルトの名無しさん:2010/05/07(金) 10:43:22
>>897
>>898
なるほど。メソッドとして定義すること自体は普通なのですね。
とりあえず private で内部処理であることはアピールできる、と。
どうもありがとうございました。
900デフォルトの名無しさん:2010/05/07(金) 18:51:09
クラスのインスタンスが解放されるときに処理をしたいのですがどのようにしたらいいですか?
ENDだとスコープが違うので意図したとおりに実行されません
class FOO
def initialize
@f = open("log.txt", "w")
end

END {@f.close}
end

foo = FOO.new
みたいなことを考えています。よろしくお願いします
901デフォルトの名無しさん:2010/05/07(金) 20:45:56
「インスタンスの開放」ってなに?
GCで回収されるとき?
ファイナライザを指定したいということでいい?

irb>
class C
def self.finalizer
proc{|o| puts "#{o.inspect} is gone!" }
end
def initialize
ObjectSpace.define_finalizer(self, self.class.finalizer)
end
end
irb> c = C.new
irb> GC.start
irb> c = nil
-609198068 is gone!
902デフォルトの名無しさん:2010/05/07(金) 20:53:23
教科書的な正しい答えとしては
そんなことを考えること自体が間違ってるので普通にメソッド呼び出ししましょう
ということになる
903901:2010/05/07(金) 21:01:01
まあねえ
「やろうと思えばできるが普通は間違ってる」ことの代表格のような気はする
フックかけて自動でやらせようとするのがたぶん98パーセントくらいの割合で間違い
将来絶対ここでコケる
904デフォルトの名無しさん:2010/05/07(金) 21:03:27
拡張ライブラリとか作ったことないのか
905デフォルトの名無しさん:2010/05/07(金) 21:06:53
ここは初心者スレ
906デフォルトの名無しさん:2010/05/07(金) 21:09:54
C++ の、スコープから抜けたらデストラクタ呼び出し、みたいなことをしたいのだと思うが、
Ruby ではそういうのは、

def foo
 obj = Obj.new
 yield obj
ensure
 if obj then
  obj.close
 end
end

foo{|obj|
 obj を使う手続き
}

みたいにするのがよくある書きかたということになっている。
907デフォルトの名無しさん:2010/05/07(金) 21:11:39
>>904
それ「残り2%」だとおもう
908デフォルトの名無しさん:2010/05/08(土) 12:09:35
このプロキシーサーバーをデーモン・マルチスレッド化したいのですが、どのようにすればいいでしょうか。
ご教授お願いします。

元スクリプト置いて一旦去ります。
http://fono.jp/uploader/src/file_0356.zip_a8FCwonD6gByq86dAwob/file_0356.zip
909デフォルトの名無しさん:2010/05/08(土) 12:27:15
移動もとのスレくらい書いて欲しいもんだ
ttp://pc11.2ch.net/test/read.cgi/php/1222645553/799-802
> 799 :nobodyさん:2010/05/06(木) 05:56:26 ID:???
>   【 CGI&PHP名 】 NicoProxy
>   【 配布先URL 】 http://d.hatena.ne.jp/hayori/20080609/1213005114#c
>   【 依頼期限 】 半年
>   【 依頼内容 】 マルチスレッド化して欲しい。
910デフォルトの名無しさん:2010/05/08(土) 12:45:39
どこをマルチスレッドにしたいのかにもよるが、
構造だけ参考にしてゼロから作り直したほうがたぶん早いな…
911デフォルトの名無しさん:2010/05/08(土) 12:48:42
WebrickのHTTPプロキシでコンテンツキャッシュはできるのでしょうか。
http://jp.rubyist.net/magazine/?0002-WEBrickProxy

見た感じ、レスポンスボディの取得までライブラリ側でやってるので
汎用性無さそうなんですけど、作った人います?
912デフォルトの名無しさん:2010/05/08(土) 21:00:04
Rubyには、JavaのConcurrentパッケージみたいなのはないでつか?
913デフォルトの名無しさん:2010/05/08(土) 21:16:41
>>912

標準にあるのはMutexやConditionVariableのような比較的低レベル(部品的な意味)クラスだね。
914908:2010/05/09(日) 05:14:09
>>909
すみません、示し忘れてました。

>>910
複数のページを開くと動画キャッシュ保存や別のリクエスト終了で待機させられてしまうので、
動画をキャッシュする部分とプロキシ本体をスレッド生成して、並列処理したいです。

イメージとしてはアクセス数に応じて増減するApacheのスレッド生成みたいな。
915デフォルトの名無しさん:2010/05/09(日) 05:30:15
外部動画サーバへのリクエスト数が常識範囲内だったならやる人はいるかも
いないかも
そもそもそういうスレでもないからなあ

ある日どっかで誰かが「改造しましたー」とか出す感じ
916908:2010/05/09(日) 05:37:26
>>915
WEBrickとThread.*復習して0から再構成が妥当ですかね。
スレッド生成が関わってくると全然構成が違うものになりそうなので。
917デフォルトの名無しさん:2010/05/09(日) 06:39:09
一人で使う分にはnicocache使えばいいからな。
webサービス化したいのか。動画のキャッシュサービスって帯域とか負荷対策大変じゃないか?w
918デフォルトの名無しさん:2010/05/09(日) 07:17:38
>>908
デーモン化するにはNicoProxyServer.newの引数configにこれ↓を追加
:ServerType=>WEBrick::Daemon
# 最終行のWEBrick::Daemon.start(とその上のrequire)は不要なので削除

並列化というかコンテンツをキャッシュせずにクライアントに垂れ流すには
open-uriのopenやProxyContentHandlerでは実現できない
俺のやった方法ではWEBrick::HTTPResponseにも手をいれないとダメだった
919デフォルトの名無しさん:2010/05/09(日) 12:53:53
まともなHTTP Proxyフレームワークは欲しいねぇ。WEBrickは逐次転送に対応していないし・・・
自分も似たようなことを考えたことがあるけど止まっているわ('A`)
920908:2010/05/09(日) 19:26:18
>>917
家庭内の共有利用になりそうなので帯域は大丈夫です。

>>918
335行目を変更しましたが、こんなんでいいのでしょうか……
server = NicoProxyServer.new(config, conf['cache'], conf['cache_servers'], conf[':ServerType=>WEBrick::Daemon'])


ニコニコ動画由来の動画ファイル本体だけ無期限キャッシュするということを考えてます。
キャッシュ中に焦らされる状態を気にしてはいないので、逐次転送はしなくて大丈夫です。
ですが、別のニコニコアカウントで家内がログインしてこの串を同時に使った時、
キャッシュする動画が2つになって、同時にキャッシュが始まってキャッシュ完了待ちになるならまだしも、
『キャッシュ順番待ち状態』になってしまうので、それを解消したくて来ました。

逐次転送ではなく、動画キャッシュ自体の並列処理です。

質問分かりにくくて御免なさい。
921デフォルトの名無しさん:2010/05/09(日) 20:58:51
>>920
> 335行目を変更しましたが(ry
違う、confじゃなくてconfig
330行から始まるハッシュに追加するんじゃ

良く知らんけどキャッシュ順序待ちはニコニコ側の制限じゃないの?
複数動画の同時閲覧(ダウンロード)禁止みたいな
922デフォルトの名無しさん:2010/05/10(月) 00:47:59
IronRubyでWPF使ってGUIあプリ作ろうとしてるんですが
もしかしてDockプロパティとか使えないままですか?
preAlpha1だと使えないみたいですけど
1.0でもダメなんですかね・・・・
923デフォルトの名無しさん:2010/05/10(月) 02:08:24
>>920
> 家庭内の共有利用になりそうなので帯域は大丈夫です。

それこそ nicocacheでいいと思うよ。できもので住むなら作らないの早い
Java製のproxyだからサーバーたててそのように使っても多分動くだろう、いや保証できんけどw

現行スレ:
【ニコニコ】自動ローカル保存プロクシ NicoCache 9
http://pc12.2ch.net/test/read.cgi/software/1265404267/

導入はこれ見ればわかる。
FrontPage - NicoCache_nl
http://nicolist.net/nicocache_nl/wiki/


家庭内でNATで固定IP共有なら、複数マシンから同時ダウンロードの場合は
まずニコ動側で一定時間規制入るしプログラム側で捌けるようにしてもあまり意味ないかと思うw
924908:2010/05/10(月) 04:56:33
>>921
config = {
:BindAddress => conf['bind'],
:Port => conf['port'],
:ServerType => WEBrick::Daemon
}
構文から見てどう考えてもここでした。指摘有り難うございます。

>>923
家族銘々のアカウントで閲覧している中に1人、プレミアムがいて、
IPアドレス毎のダウンロード規制ではなく、
Cookieで識別してるようなので、規制が原因ではないと思います。

あと、すみません、NicoCache_nlでしたが、Linuxでは動きませんでした。
使用環境を言っていなくてすみません。>>1を再読してきました。

4つのymlファイルを作って、BindAddressを1つずつ変えて、
キャッシュディレクトリを同じにするという妙なことを思いついたのですが、
可能でしょうかね……。

スレッド1つで解決してしまうのが逐次転送ですが……。

どうしたものやら。
925デフォルトの名無しさん:2010/05/11(火) 00:05:25
>>922
WPFにDockなんかない
DockPanelを使っている場合はDockPanel.SetDockメソッドを使う(添付プロパティというもの)
.NET使う以上言語の違いは無意味なのでC#の書き方覚えて.NET系のスレで聞いた方がいい
926デフォルトの名無しさん:2010/05/11(火) 00:07:19
>>924
普通に使えてるが。
ubuntu9.10+sun-java6
927908:2010/05/11(火) 18:58:21
>>926
ルータが2つあって、デフォルトゲートウェイがLAN内でサーバーと普段使いと違うのですが
そのせいでしょうか……。
nicoproxy.rbはバインドアドレスを指定できるので、多分それで使えてるんだと思います。
928デフォルトの名無しさん:2010/05/11(火) 21:22:04
>>927
ソフト板のNicoCacheスレではserver:deb cliant:winの報告もあるから
あっちで聞いた方が良いのでは?
929922:2010/05/12(水) 01:20:21
レスありがとうございます。

前の文章が悪かったのですが、プロパティを設定できないと言うよりも
Pre alpha1では
下記のHPにあるようにCLR上の列挙体が正常に使えないようです。
http://hsj.jp/works/2007/07/25/ironruby_prealpha_1web.html

もう少し自分なりに調べてみます。
930デフォルトの名無しさん:2010/05/12(水) 03:40:37
為替のデータがcsvで配布されてたので、rubyで処理しようと思ったら、うちのrubyは1.6.8なのでcsvライブラリが無かった。orz
一行読み込んでsplitしてちまちま読むか。処理手順考えるのまんどくせw
931908:2010/05/12(水) 11:56:54
>>908
ソフト板へ逝きます。
レス本当にありがとうございました。
932デフォルトの名無しさん:2010/05/12(水) 17:58:50
プログラミング初心者のruby学習中のものです。
以下のコードについて質問です。

# encoding: cp932

require"open-uri"

open("http://codezine.jp/rss/new/20/index.xml") do lhttpl
File.open("codezine-news.xml","w") do lfilel
file.write(http.read())
end
end

7行目のfile.write(http.read())の意味がよくわかりません。
疑問は2つあります。
まず第一に、httpブロックとFileオブジェクトとfileブロックの関係がよくわかっていないような気がします。
httpブロックのなかのFileオブジェクトにあるfileブロックを使っているということでいいのでしょうか?

第二に、read()の意味がよくわかりません。リファレンスの中には「self.open(options={}).read と同じです。
このメソッドによって返される文字列は OpenURI::Meta によって拡張されています。」
と書いてあるのですが、意味がわかりません。結局、このライブラリでのreadはどのような機能を持っているのでしょうか?

よろしくお願いします。
933デフォルトの名無しさん:2010/05/12(水) 18:10:37
oepn-uriってのはURLをファイルと同じように開けるようにするライブラリ
やってることはこれと一緒。

data = open("http://codezine.jp/rss/new/20/index.xml").read
open("codezine-news.xml", "w").write(data)
934デフォルトの名無しさん:2010/05/12(水) 18:32:53
| じゃなくて l になってるのが気になるがw
935デフォルトの名無しさん:2010/05/12(水) 19:20:31
スレ的にあまりよい書き方ではないな
open-uri はブロックなしで直接 read するのがベスト

そもそも open-uri のブロック内仮引数は HTTP とは無関係
open-uri は open(uri) の瞬間に uri へのアクセスを完了し、ローカルの Tempfile をブロックに渡す

require 'open-uri'
xml = open("http://codezine.jp/rss/new/20/index.xml").read
File.open('codezine-news.xml', 'w'){|f| f.write(xml)}

# 2chブラウザの関係上、URLを囲むのは ' ' ではなく "" になってます
936デフォルトの名無しさん:2010/05/12(水) 19:38:43
require 'open-uri'
data = open(path){|f| f.read}


「path に来るのが URL なのかディスク上のファイルパスなのか事前にわからないorどっちも受け付ける」
というような場合に使う
URL 限定だということが事前にわかってるフェッチャ用途なら素直に

require 'open-uri'
data = URI.parse(uri).read

しれ
こっちのほうが速いし間違いもない
937デフォルトの名無しさん:2010/05/12(水) 20:42:06
rubyで画像の指定した座標(イメージマップのような)に色をつけたり、文字を入れる処理はできますか?
938デフォルトの名無しさん:2010/05/12(水) 20:45:25
RMagickとかGD2とかのライブラリで。
939デフォルトの名無しさん:2010/05/12(水) 22:19:05
Rubyである必要性はないな
Rubyでもできるが、Rubyじゃないほうがマシ
940デフォルトの名無しさん:2010/05/12(水) 22:33:15
>>939
おすすめの言語ってありますか?
941デフォルトの名無しさん:2010/05/12(水) 23:00:28
C/C++
942デフォルトの名無しさん:2010/05/12(水) 23:06:06
ライブラリを使ったサンプルなら、JavaやPHPなんかも多そうだけど
943デフォルトの名無しさん:2010/05/12(水) 23:31:28
932です。

>>933
ありがとうございます。プログラムの意味がよくわかりました。

>>934
|の出し方がわかりません・・・。
ググっても出ませんし、初心者向けを謳っている現在使用中の本には出し方が載ってませんでした。
もしよろしければ出し方を教えてください。

>>935
>>936
回答ありがとうございます。申し訳ないのですが、今の私のレベルではお二人の議論の意味がよくわかりませんので、
保存しておいて数週間後に改めて理解したいと思います。
944デフォルトの名無しさん:2010/05/13(木) 00:05:04
> |の出し方がわかりません・・・。
ぱそこんのせつめいしょでもよめ
マウスどう使うんですかとかキーボードどう打つんですかとかいちいちそこまで付き合い切れない
945デフォルトの名無しさん:2010/05/13(木) 00:18:35
|はシフトキー押しながらバックスペースの左にあるキーで出るよ!
946デフォルトの名無しさん:2010/05/13(木) 00:22:51
バックスペースがどこにあるかわかりません!

いや、今たまたまひとのノートPC使ってたのでつい
947デフォルトの名無しさん:2010/05/13(木) 00:23:04
質問させて下さい。n重に入れ子した Proc を動的に作りたいのですが、
下の方法しか思いつきません。ましな方法はありますか。

def make_proc(n)
case n
when 1; proc {|a1| a_method [a1] }
when 2; proc {|a1| proc {|a2| a_method [a1, a2] }}
when 3; proc {|a1| proc {|a2| proc {|a3| a_method [a1, a2, a3] }}}
else raise '多すぎ'
end
end
948デフォルトの名無しさん:2010/05/13(木) 00:29:49
1.9の Proc#curry だろうか。

a = lambda {|x,y,z,w| x + y + z + w }
a.curry[1][2][3][4] #=> 10

949947:2010/05/13(木) 01:36:41
def make_proc(n)
(lambda {|*as| a_method as }).curry(n)
end
ですね。rubyのCソース見てもよくわからなかったので考えたら
class Proc
def curry(f, n)
(n <= 1) ? f : (proc {|x| curry(proc {|*xs| f.call(x, *xs) }, n-1) })
end
end
となったんですが、まだ良い方法がありそう。proc多いし。いずれにせよサンクス
950デフォルトの名無しさん:2010/05/13(木) 11:38:22
>>948
向上心を持てって言ってんだろ
お前のはそれ上昇志向だよ
951デフォルトの名無しさん:2010/05/13(木) 20:02:50
>>852
>Rubyについての質問ならいいが
>プログラミング初心者は勘弁

このスレ的にはおまえこそ勘弁
952デフォルトの名無しさん:2010/05/13(木) 20:09:51
おーっと翼くん1週間以上前のボテ球を拾いにいくこれはどうしたことだー!?
953948:2010/05/13(木) 22:32:13
向上心を持ってインスタンスメソッドの書き方から勉強し直したところ、
class Proc
def curry(n = self.arity, xs = [])
(n<1) ? self[*xs] : (proc {|x| curry(n-1, xs.push(x)) })
end
end
こうなりました。勉強になりました。
954947:2010/05/13(木) 22:32:55
名前間違えました948でなく947でした
955947:2010/05/14(金) 00:19:56
たびたびすみません。xs.push(x) は xs+[x] でないとだめでした。
カリー化されたProcを2度目に呼ぶと前回のxsが継続の中に残っていて
まずかったです。
956デフォルトの名無しさん:2010/05/14(金) 03:01:01
require 'webrick'

class Servlet < WEBrick::HTTPServlet::AbstractServlet
def do_GET(req, res)
str = open("./foo.html", 'r'){|f|f.read}
res.body = str
res['content-type'] = 'text/html'
end
end

server = WEBrick::HTTPServer.new({
:Port => 4000
})
server.config[:BindAddress] = '127.0.0.1'
#server.config[:ServerType] = WEBrick::SimpleServer # SimpleServerなら問題ない
server.config[:ServerType] = WEBrick::Daemon
server.config[:ServerName] = 'server'
server.mount('/', Servlet)
trap('INT') { server.shutdown }
server.start
をLinux上で実行してブラウザからアクセスすると
>Internal Server Error
>No such file or directory - ./foo.html
とopenに失敗してしまいます。openのパスを絶対パスにすれば動くようですがコーディング上不便です
相対パスのまま動かす方法があったら教えてください。よろしくお願いします
957デフォルトの名無しさん:2010/05/14(金) 04:12:09
>>956
pwd = Dir.pwd
server.config[:StartCallback] = proc { Dir.chdir(pwd) }

# 956のソース正しくコピペしてないだろ
# サーバをnewした後でconfig設定しても無意味
958デフォルトの名無しさん:2010/05/14(金) 06:00:07
># サーバをnewした後でconfig設定しても無意味
いろいろ読み直してみたら間違ってた
訂正すると>>956はこの行が無意味になってる
> server.config[:BindAddress] = '127.0.0.1'
他にもnew前に指定しないと無効な設定があるけど、それはソース読んでくれ
959デフォルトの名無しさん:2010/05/14(金) 15:21:13
>>945
ありがとうございます。
960956:2010/05/14(金) 17:21:50
>>957-958
動きました。そういう事もあったのか
ありがとうございました
961デフォルトの名無しさん:2010/05/15(土) 23:49:36
質問です。

pメソッドで日本語表示したとき、最後の1文字だけ文字化けします。
putsは大丈夫です。
これを直すにはどうすれば良いでしょうか?

環境
 windows
 ver 1.8.7
 dos窓のコードページ 932 SJIS


ソース
$KCODE = "s"
puts $KCODE
str = "おはようからおやすみまで暮らしを見つめるテクニック"
puts str
p str


実行結果(dos窓)
SJIS
おはようからおやすみまで暮らしを見つめるテクニック
"おはようからおやすみまで暮らしを見つめるテクニッ\203N"

962デフォルトの名無しさん:2010/05/16(日) 00:07:55
r+で作成済みでないときにエラーが出るのは仕様ですか?
963デフォルトの名無しさん:2010/05/16(日) 00:09:29
>>961
patchlevelを上げる

>>962
仕様
作成させたければw+
964デフォルトの名無しさん:2010/05/16(日) 00:10:34
>>962
中身を消したくなければ IO::RDWR|IO::CREAT
965デフォルトの名無しさん:2010/05/16(日) 00:21:40
>>961
1.8.7-p249のバグ
966961:2010/05/16(日) 00:54:36
>963
>965
回答ありがとうございます。
悩んで損しました。
967デフォルトの名無しさん:2010/05/16(日) 12:21:54
module FooModule
 def self.uho
  uho
 end
end
class FooClass
 def self.uho
  :uho
 end
end
というモジュール、クラスがあったとき
class Bar1
 include FooModule
 uho
end
は動作しませんが、
class Bar2 < Foo
 uho
end
は動作します。

ということはスタティックなクラスメソッドは継承されても、モジュールメソッドは
継承されないということだと思います。何故このような仕様になっているのか教えてください。
968デフォルトの名無しさん:2010/05/16(日) 12:23:14
書き間違えました。すみません。
x class Bar2 < Foo
o class Bar2 < FooClass
969デフォルトの名無しさん:2010/05/16(日) 12:24:29
3行目のuhoは:uhoです。すみません。
970デフォルトの名無しさん:2010/05/16(日) 13:13:22
irb> module M; def foo; 'M#foo'; end; end
irb> class C; class << self; include M; end; end
irb> puts C.foo
M#foo
irb> puts C.new.foo
NoMethodError: undefined method `foo' for #<C:0xb74a8e24>
irb> class C; include M; end
irb> puts C.new.foo
M#foo

include M は self に M のインスタンスメソッドをクラスメソッドとして追加する
このときクラスメソッドと呼ぶとわけがわからなくなるので特異メソッドとか呼んだりする
M のクラスメソッドは M = Class.new('M') のようなイメージで生成されたオブジェクト M にくっついてるメソッドなので
include や extend で外に持ち出すことはできない
include や extend して使いたいメソッドは M でインスタンスメソッドとして定義する
971デフォルトの名無しさん:2010/05/16(日) 13:54:19
open("test.csv") do |file|
file.each do |line|
line.chomp!

puts <<EOS

掲示板を作ろうとしていて、新しい書き込みが上にくるようにしたいです.
上記はプログラムの一分ですが、これのどこにreverseを入れたら良いか分かりません.
出来れば教えてください.
972デフォルトの名無しさん:2010/05/16(日) 14:06:09
ストリームをワンパスでソートするのは無理だな。
結論:無理
973デフォルトの名無しさん:2010/05/16(日) 14:06:42
>>971
一行ずつ処理を追うんだ
綺麗に書こうだなんてとりあえず二の次にしとけ

あと File#each は配列を返さないから Array クラスのメソッドの出番はないぞ
Array のメソッドを使いたいなら、どっかで配列を作れ
974デフォルトの名無しさん:2010/05/16(日) 14:11:57
>>970
ありがとうございます。
しかし、実際にそういうことをしたいのではなく、なぜモジュールとクラスで
継承の挙動が違うのかが知りたいのです。

「クラス < クラス」の場合はクラスメソッド(クラスの特異メソッド)も継承されるのに、
「クラス < モジュール」の場合はモジュールの特異メソッドは継承されません。

今のところ僕は「モジュール関数をincludeしたときにややこしくなるから」
だと思っているのですが、、、
975デフォルトの名無しさん:2010/05/16(日) 14:17:19
>>971
Ruby1.9ならeachはEnumerator返すから

file.each.to_a.reverse do |line| # File -> Enumerator -> Array -> Arrayな感じ

みたいな感じでいけるんじゃないか?確認はしてないけど。
ただ、これ一回配列に戻すってあんまりかっこよくないね。
976デフォルトの名無しさん:2010/05/16(日) 14:19:59
ごめんreverseの次eachね。やっぱりかっこよくない。
977デフォルトの名無しさん:2010/05/16(日) 14:57:49
>>973-976
いけました.
ありがとうございます.
978デフォルトの名無しさん:2010/05/16(日) 23:01:12
>>975
IO.readlinesならopenからfile.each.to_aまでやってくれるし
1.8でも使える
979デフォルトの名無しさん:2010/05/17(月) 00:26:19
引数で渡した値をそのままnewするような方法ないでしょうか?
クラスAが定義されてたとして、

hoge = "A"

obj = #[hoge].new

みたいな感じでAをnewしたいのですが。。。
980デフォルトの名無しさん:2010/05/17(月) 00:40:50
>>979
hoge = A
obj = hoge.new
981デフォルトの名無しさん:2010/05/17(月) 00:59:40
hoge = 'A' なら

Object.const_get(hoge).new
とか
eval "#{hoge}.new"
とか
982デフォルトの名無しさん:2010/05/17(月) 01:17:45
ありがとうございます!
hoge = "A"の場合、
hoge.newだと「"A"にはnewメソッド無いです」エラーになってしまいましたが、
Object.const_get(hoge).new
で動きました!ものすごく感謝です。
983デフォルトの名無しさん:2010/05/17(月) 01:18:02
deadline.each do | a,b |
c = Date.parse(b) - Date.today
d = "#{a} #{b} あと#{c}日 <br>"
puts d
end

上記のプログラムでcを一番上に持っていきたいのですが、どうしたら良いでしょうか教えていただけないでしょうか?
984デフォルトの名無しさん:2010/05/17(月) 01:26:47
deadlineはどういう構造のデータなの?
985デフォルトの名無しさん:2010/05/17(月) 01:38:52
Enumerable#eachとブロック引数を見れば明らか。
986デフォルトの名無しさん:2010/05/17(月) 01:56:34
Hashですね。
987971:2010/05/17(月) 02:00:49
死にたくなった
988デフォルトの名無しさん:2010/05/17(月) 05:07:44
ERROR:新このホストでは、しばらくスレッドが立てられません。
またの機会にどうぞ。。。
うひょう


プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

★注意★ Ruby 1.9.1 は初心者にはまだ時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
 文字エンコーディング等の外部基礎知識が必要な上、不完全対応の第三者ライブラリでの問題の切り分けが手間です。
 1.8.7 は 1.9 系の新機能のいくつかが利用可能なため、1.8.7 を習得すればスムーズに 1.9 系に移行できるでしょう。

関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・エラーメッセージの共通そうな部分やエラーの出るモジュール名でググる
 ・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
 ・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
 ・エラーメッセージ(自力で訳さずなるべくそのままで)
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
回答してくれた人には「ありがとう」のひとことをいってあげて。

■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
#>>2の「たのしいRuby」を第3版に差し替え

 ・「たのしいRuby 第3版 Rubyではじめる気軽なプログラミング」
  http://www.amazon.co.jp/gp/product/4797357401/


#>>4は本スレと前スレ更新、GUIと宿題追加

●関連スレ
Rubyについて Part 40
http://pc12.2ch.net/test/read.cgi/tech/1272248179/

●GUIの使えなさを堪能するスレ
Ruby で GUI するスレ
http://pc12.2ch.net/test/read.cgi/tech/1269609576/
●ぶん投げスレ
Rubyの宿題教えてください。2限目
http://pc12.2ch.net/test/read.cgi/tech/1200175247/

●前スレ
Ruby 初心者スレッド Part 36
http://pc12.2ch.net/test/read.cgi/tech/1269233796/
Ruby 初心者スレッド Part 35
http://pc12.2ch.net/test/read.cgi/tech/1267668057/
Ruby 初心者スレッド Part 34
http://pc12.2ch.net/test/read.cgi/tech/1264635554/
990デフォルトの名無しさん:2010/05/17(月) 08:37:56
Ubuntu10.04でgemsをセットアップしようとすると

'requir' : no such file to load -- thread (LoadError)

と出て出来ないのですが、どうもthread.rbが無いみたいなんです。
間違えて消してしまったのかも知れませんが、

sudo apt-get install ruby1.9.1-full

をしてもインストールされない見たいです。どうすれば復旧できるでしょう?
991デフォルトの名無しさん:2010/05/17(月) 09:14:41
>>990
thread.rb は libruby1.9.1 パッケージに入っている。

fullを入れるとき、半端に残っている既存のRubyパッケージを消してから入れた?
インストールされている、という情報が残っているかぎり、
それが上書き再インストールされることはない。
992デフォルトの名無しさん:2010/05/17(月) 15:14:25
OSをアップデートで10.04にした人なんだろ
993デフォルトの名無しさん:2010/05/17(月) 21:25:24
>>991
いけました、ありがとう
librunby1.9.1ってなんか変なところにインストールされるんですね
994デフォルトの名無しさん:2010/05/18(火) 00:03:46
#rails hoge

#rake db:create

!!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql.
rake aborted!
no such file to load -- mysql

ubuntuなんですが↑のエラーがでます

#sudo gem install mysql -- --with-mysql-config=/usr/bin/mysql_config

をやっても同じエラーが出ます
どなたか教えてください・・・
995デフォルトの名無しさん:2010/05/18(火) 02:10:27
落ちそうだけど質問いいですか?

falseか値がない場合は、
un ||= "unko"
とかできますが、
同じような感じで簡単に文字列の追加はできないもんでしょうか?

un << "unko"
では当たり前ですが aが nil の場合エラーがでます。

(un ||= "") << "unko"

とか考えたんですが、自分で書いておいてかなりギョットします。
996デフォルトの名無しさん:2010/05/18(火) 03:02:01
u
997デフォルトの名無しさん:2010/05/18(火) 03:02:47
m
998デフォルトの名無しさん:2010/05/18(火) 03:03:27
e
999デフォルトの名無しさん:2010/05/18(火) 03:10:57
http://www.youtube.com/watch?v=1qdlcfqTbDU
                   .,!'i、      ィ-,     ,,、_,,-.
                   /.イヘ,     | ,!     .| ゙ニ-i、,!
    ∩             ./,r'1.,/     | |_,,,,,.  .| 7'ニ",!             ∩
    | ゝ  <ヽ       ,/,,''y゙./  .r‐ー''",二,,,,7  | lニ-'',>       / >  く |
    / /   ヽ ∨     "゙.゙l"/   ゙'ー'"〔.|     | l'ッ ||i、      ∨ /    ヽ ヽ
   /  i    / /       .,/,l゙._,,.    |.|,-.   .,l゙,|"r゙lヽ'i、    i  ヽ    i  ヽ
  /  丿   /  ノ      丿 二i、 ゙l   |゙',―i、゙l   .l゙,タ-l |_゙‐'      ヽ  ヽ    ヽ  ヽ
 (   ヽ、 /  〈       /ノ! | .| l゙   .l゙{ .| |   ,l゙,!ィ'',",ニl゙      〉  ヽ /   )
  \  /'' ー'' ⌒`/ヽー、シ" .| ゙l,,,"]   ゙l.二__|  ,l゙,l゙,,,ニl゙.゙‐''''i、 --イ´⌒ ''ー ''\   /
    \/       〉   ⌒彡彡彡彡ミ     ミ彡彡彡彡⌒   〈       ヽ/
     ヽ   ,, -‐"      彡彡彡彡ミ   ミ彡彡彡彡       ゛‐- ,,   /
       \/      / ィ _彡彡彡彡   彡彡彡彡__ ィ \      ヽ/
        "ーーーー(,,___/つミ彡彡    彡彡ミとヽ___,,)ーーーー"  
        ( ========================)
         / ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄//_ //^\ゝ
        / ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄//_ ///== \ゝ
       / ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄//_. /// ∥  \ゝ
   ⅱ  ノ ̄ノノ ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄//  ⅱ_ノ//======== \ゝ .ⅱ
   .ヒ==,@==@,==@,==@,==@,==@,==@,==@,==@,==@,==@,==@ ノ人ノ     ∥      ン
    ̄∥~  ̄~ ̄~  ̄~ ̄~ ̄ ̄~ ̄~ ̄~ ̄~ ̄~ ̄~ ̄~ ̄~ ̄~ ̄~∥| ̄ ̄ .∥ ̄ ̄ ∥
     ∥============================================.∥|=====∥==== ∥
1000デフォルトの名無しさん:2010/05/18(火) 03:32:12
http://www.youtube.com/watch?v=1qdlcfqTbDU
            ∩
            | ゝ  <ヽ
.─ ────=≡/ /   ヽ ∨     
           ./  i    / /
 ───=≡.  /  丿   /  ノ      ズザーーーーーッ 見よ!わたしの華麗なダイブ
)⌒`)       (   ヽ、 /  〈
  `)⌒`)     \  /'' ー'' ⌒`/ヽー 、           
  ────=≡ \/       〉   ⌒彡彡ミミ\
  `)⌒`);;;`)⌒`)   ヽ   ,, -‐"      彡彡彡ミヽ
  `)`)⌒`)  )     \/      / ィ. _彡彡彡}
──=≡;;;⌒`)≡⌒)≡≡"ーーーー(,,___/つミ彡ノ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。