プログラミング言語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を読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
バージョンに関するよくある質問 ・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等外部第三者ライブラリの対応が超適当特に英語圏産 初心者を脱した人が外部ライブラリの開発コミュニティに参加してくれたりすることを期待中
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」
これは
>>1 乙じゃないんだからねうんたらかんたら
○
>>1 乙 もうお前に用はない
く|)へ
〉 ヽ○ノ
 ̄ ̄7 ヘ/
/ ノ
|
/
|
/
,―ヽ_(((((_、― ,/ ノ ヽ ~\ / ノ IPA ヽ ~\ / ノ ヽ、 `ヽ | ノ / ̄\ / ̄~ヽ ヽ i | ノ | ノ \ | <●> <●> ( ) \ | | | i / | / ヽ レ i (●_●) / i、 ,-――-、 ・ / i、 <(EEEEE)> ∵/ IPA Rubyスレは誰でもウェルカム i、 \ ./ / \ ーー ,ノ ,,.....イ.ヽヽ、ー-―一ノ゙-、. : | '; \_____ ノ.| ヽ i | \/゙(__)\,| i |
Dir.globじゃなく、ただワイルドカードを判定ってどうやるんですか? if match("aaa", "*a*") ~みたいな感じで
正規表現じゃだめなの? /a/.match("aaa") とか
どういうことをしたいのかいまいちよくわからんが、 ファイル一覧の文字列を含んだ配列の各要素に対して 正規表現でマッチするかどうかをチェックすればいいのではなかろうか
>>11 File.fnmatch
ただしglobで使える一部のパターンは使用不可
>>14 オリジナルのfnmatchの知識がある人向けだな、これ…
わざわざfnmatchをやりたいつってんだから、fnmatchの知識は要求してもいいんじゃね。
Fileメソッドなのはおかしい String#matchに文字列渡したら発動するようにしようぜ
OK わかった ここまでまとめてこうか wild_card = "*a*" if Regexp.new(wild_card.gsub(/\*/, '.*')).match("aaa") then ... うん。絶対違うな
proc と lambda って違うの? Proc オブジェクトという名前で lambda 使ったらだめ?
20 :
デフォルトの名無しさん :2010/03/23(火) 11:16:57
21 :
デフォルトの名無しさん :2010/03/23(火) 11:21:38
>>19 「ここにはProcオブジェクトを指定します」というところでlambda使ったら駄目
「ここにはProcオブジェクトかlambdaを指定します」ならlambda使ってもOK
「ここにはlambdaを指定します」というマニュアルだったらProcオブジェクトでは駄目な理由を問い詰めろ
指定したい場合は「手続きオブジェクト」という日本語で逃げてる俺 実際問題として、引数増減させたり内部でreturnしたりしてエラー出されても俺はそんなん知らん
>>21 > 正直、lambdaがなぜMethodオブジェクトでないのか解りません。
> おそらく、Rubyの後のバージョンでは変更されるのではないでしょうか。
lambdaは作られたところのコンテキストを保存するので、Methodとは決定的に異なる。
> キーワード [binding] は発見できませんでした。 さもありなん
そこら辺の概念がよく分からない C++で説明してくれないか
javaのequalsに相当するメソッド?を教えてください そして、オブジェクト同士を比較する時は、それをオーバライドする必要があるのですか?
self == other self と other が等しければ真を返します。デフォルトでは equal? と同じ効果です。 このメソッドは各クラスの性質に合わせて再定義するべきです。 self === other このメソッドは case 文での比較に用いられます。 デフォルトは Object#== と同じ働きをしますが、この挙動はサブクラスで所属性のチェックを実現するため適宜再定義されます。 eql?(other) 二つのオブジェクトが等しければ真を返します。Hash で二つのキーが等しいかどうかを判定するのに使われます。 このメソッドを再定義した時には Object#hash メソッドも再定義しなければなりません。 eql? のデフォルトの定義は equal? と同じくオブジェクトの同一性判定になっています。 equal?(other) other が self 自身の時、真を返します。 このメソッドを再定義してはいけません。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 複雑だよねー
>>26 c++ の人ならlambdaはC++にもある(boost)から概念ならそこから理解できるはず
>>27 irb> "str" == "str"
true
irb> "str".equal?("str")
false
ということで String#equals?
>>28 そう複雑でもない
プリミティブなクラスを発明しない限り普通は === も eql? も再定義することはない
クラスごとに「おなじとみなしていいもの」の判定を == で定義すればいい
31 :
27 :2010/03/23(火) 21:38:42
rubyにはconstやfinalのみたいな、再代入を防ぐ方法は無いんですか?
普段使うのは == と equal? だけだな
>>32 Object#freeze
>>32 ない
変数名の再使用を禁止することはできない
オブジェクトの内容が変更されることを防ぐことならできる
のが
>>33
定数(名前が大文字から始まる変数)がいちおうそれだけど、効力としては警告止まり 警告を無視するようなバカには効果はないが javaと違って基本的にプログラマを疑っていない言語だからそこは割り切ってくれ
36 :
26 :2010/03/23(火) 22:23:55
37 :
32 :2010/03/23(火) 22:25:40
>>33-35 ありがとうございます
まだrubyプログラミングに慣れていないので、間違えて再代入しないようにしたかったのですが
ムリぽですね
そもそもそういう動機で再代入を禁止してはいけない
39 :
デフォルトの名無しさん :2010/03/23(火) 22:30:04
Haskellやればいい
グーニーズくるー?
現在、Threadが実行中か調べる方法を教えてください
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
44 :
41 :2010/03/24(水) 10:52:29
>>42-43 ありがとうございます
Rubyのスレッドって寿命があるんですかね
Thread.start {
for i in 1..10000
puts i
end
}
最後まで表示されないので
…あれ、なんだこれ
46 :
41 :2010/03/24(水) 10:58:41
メインのスレッドが終わっているから、全部表示されないのかも
t = Thread.start { for i in 1..10000 puts i end } t.join
48 :
41 :2010/03/24(水) 11:12:33
>>47 そこまで、すぐにわかりました
IOに時間がかかるので、GUIを描写を止めないようにしたいんです
def~endの間でしかスレッドを使えないんですかね?
デーモンみたいな感じで使えたらいいんですが
def hoge
t = Thread.start{}
end
49 :
41 :2010/03/24(水) 12:43:59
def buttonPush ←ボタンがクリックされた時に呼び出される t = Thread.start{ 適当な処理(時間がかかる) storeBinary() } end def storeBinary 大きいデータを書き込む end buttonPushが呼び出された時に、GUIを止めたく無いんです
よくわからんけど、バックグラウンド処理用のスレッドを管理する仕組みを作って GUIのスレッド(ここではbuttonPush)から呼び出すとかじゃダメなのかな。
51 :
デフォルトの名無しさん :2010/03/24(水) 13:13:05
全体の最後に Thread.list.each {|t| t.join} を置いておけばいいのかな。 メソッドを抜けたときに参照がなくなってGC対象になってしまう?
環境(OS, Ruby, GUI, IOの種類)を書いた方がいいんじゃないかな
>>51 生きていればThread.listが参照してる
参照してるっていうのは正確じゃなさげ でもThreadクラスオブジェクトが知ってるということはどこかしらで参照してるんだろう
54 :
41 :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:ネットワークからデータを取ってきて保存する
>>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
メッソド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?
>>54 スレッドが回っていないんじゃない?多分。
GUI起動したmainスレッド側で実行権つかみっぱなしな悪寒
GUI起動直前に、タイマーかなんかで定期的に
Thread.passでスレッド回すコード追加してみたら
いけるかもね
60 :
54 :2010/03/24(水) 22:05:26
>>59 GUIでボタンをクリック→スレッドのスタート→Net::HTTPのライブラリーが呼び出される
という順番でプログラムを書いているのですが
Net::HTTP#get()が呼びだされた瞬間に、勝手にスレッドが終了してしまうようです(rubyのバグ?)
シングルスレッドでテストしてみると、何にも問題がありません
ひとまず、違う処理系でも実行してみたいと思います
なんらかの例外が起きてるんじゃないか? ruby に -d オプション付けてみた?
62 :
デフォルトの名無しさん :2010/03/24(水) 22:23:40
状況を再現できる短いコードが用意できればベストなのだが。
GUIやるかスレッドやるかどっちかにせえやという気は若干しなくもなく…
>>61 例外でスレッド終了か
シングルスレッドだと動いてるみたいだしなさそうだが
>>63 GUI + スレッドは正しい道のりな気が
>>59 他の GUIツールキットの事情は知らないけど
wxruby はもろにそれだな
t = Wx::Timer.new(self, 9999)
evt_timer(9999) { Thread.pass }
Thread.new { hoge }
t.start(100)
こんな感じでタイマー使って定期的に Thread.pass してた
67 :
54 :2010/03/24(水) 23:17:15
jrubyはネイティブなrubyの処理系を必要としますか? NetBeansのRubyだけで、おk?
なにがなんだかさっぱりわからんが、JRuby は Java の実行環境上で動作する インストールに必要なのは Java の実行環境
説明しよう! Java で動作してる NetBeans には JRuby が最初から同梱されて使える状態になっているのだ! だから cruby を別途インストールしなくても Ruby スクリプトそのものは作れるんだ! すごいね!
Rubyは雑務や仕事の効率化UPのためのちょこっとスクリプトに使う人がよくいるみたいですが シェルスクリプトとはできることが違うのでしょうか? シェルスクリプトにできなくてRubyなら出きることって何かありますか?
シェルスクリプトつかったことないならむりしてわだいにださなくていいよ
shell script だけではできる事は非常に限られている shell の種類にもよるが四則演算すらできないしカウンタも使えない ``を多用すればruby 以上の事はできるが面倒で煩雑 ruby の方が shell script より楽ってこと
InterfaceやAbstractがないことに驚いたんですけど! 動的言語では型付けがいらないからInterfaceを返してキャストとが要らないのは 分かったものの、ダックタイピングというのが分からない とりあえずInterfaceおいてダックであることを明示、保証するのが当たり前だと 思ってたけど、この必要がない理由と動的言語の性格って関連があるの?
必要な時に必要なだけメソッド定義すれば
動的言語に何の保証があるというのか
静的型付け言語なら定義済みのクラスやインターフェースからコンパイル時に 型チェック(引数や型による代入制限、メソッドの有無等)を行えるが 変数が型を持たないrubyではそれらが意味をなさない ダックタイピングは乱暴に言っちゃうと メソッドが無かったり引数があわなければどっちにしろエラーになるんだから それでええやん、て感じ
実際は別にダックタイピングを駆使してるわけでも意識してるわけでもない どう考えたって逆にめんどくさいからな 「○○するメソッド名ってやっぱ××だよな」程度の使われ方になる クラス作成者とクラス利用者の間における命名規則の紳士協定みたいなもんだ
あれ時間が戻った?
・Rubyの変数には型がない(代入に制約がない) ・Rubyは動的型付けの言語(=型が実行時に定まる) 型が無いわけではない この辺が混同されやすいのかなあ
「いわゆる型」がないんだよね 型って言われたら「その型って具体的に何を指してるんですか」とか聞かないと駄目かなあ
クラスと型ってどう違うの? なんとなく同じ様なもののイメージなんだけど
うだうだ言ってないで文法書とサンプル読みあさった方が手っ取り早い。 先にRuby的言葉遊びから入って得られるものは少ない。
オブジェクト指向の知識があるならそれでOKなんだよ 問題はオブジェクト指向と称して実はただの「C++の知識」「Javaの知識」だったりするから
Rubyの場合は話してる最中に 「いやこれはたぶんRuby依存の特有の話だな…」 とか気づけるからまだマシなような気もする Javaの実装がオブジェクト指向だと思い込んでる人は結構困る
聞き手そっちのけのオナニー喩話はどうでもいいよ。 ちっとも理解が促進されないし。 既に解ってる連中同士の内輪ネタでしかない。
Rubyでオブジェクト指向の基礎を学ぶのは厳しい こんな感じなんだ~程度なら十分だけど
実際に実行可能な言語に落とした時点でオブジェクト指向でもなんでもないものになる オブジェクト指向は実行しないからこそ美しい 実行のための仕組みは邪魔
たのしいRuby 第3版がもう出てた。
>>78-79 なるほど
振舞いやパターンを明示することを積極的に排除する理由があるわけじゃなかったのか
いわれてみれば静的な型に頼らないってことと振舞いをまったく規定しないってことには大きな開きがあったね
>>76-77 instance_evalとか使いまくりがデフォなの?
これから学ぶweb関連のプログラミング言語としてはrubyでいいでつか?
> でつ
Javascriptと、PHPかJava辺りがいいんじゃないかな
かなーり微妙臭いふぃんきではある 主要なフリーウェアでスクリプト書くときなんか大概Python主流だし RubyもPythonも両方やるのが吉
97 :
デフォルトの名無しさん :2010/03/25(木) 22:17:44
ひとつやっとけばOKという発想は捨てよう。
そういう意味ではライブラリが共通の.NETは楽だわな
>>89 真面目な質問だがOOPの基礎を学ぶのが簡単な言語はどれ?
OOPなんてcode書かなきゃわかるようにならん
codeを書きやすいか,書く気になるかどうかのトレードオフが大きいからね
100 :
99 :2010/03/25(木) 22:50:23
>>99 > codeを書きやすいか,書く気になるかどうかのトレードオフが大きいからね
→…どうかとのトレードオフ…
すまん
LISPかな。 いや、冗談半分本気半分なんだけど、OOPとはなんぞやってのが あまりにも難しすぎる。 オブジェクトが自立性を持っていて、受け取ったメッセージを自分で判断して 振舞う(メッセージを拒絶することも含む)ような処理系でのプログラミングが OOPなんだぜ! という学派からすれば、Rubyはまさにそれではある。
OOの前にOOでない言語を身につけた方がいいな お薦めはCだ
自分もCから入ったからCじゃないものから入る人の気持ちは分からない いきなりRubyを使うってどんな感じなんだろう
LispやCから入れと言ったら挫折する人が多いと思うな 俺はいきなりRubyでも良いと思うけどな まずプログラムをどんどん書かないと 遊びでも良いから何か実用性を見出せないと強制しないと続かないと思う 昔はBasicで入った人も多いし(俺はFortran→Cで入ったが)
プログラムをどんどん書くって結構難しい。 家では本を読むだけだから力がつかない。 やっぱ仕事でプレッシャーかからないとダメ。
作りたいものがないならプログラミング言語なんて覚えなくていいし学び続けられるものじゃない 作りたいものが特にないのならRubyのことなんて忘れて他のことやれ もし本当にRubyのようなものが必要なのなら、たとえ今離れてもやっぱり戻ってくる
遊ぶのなら、今日日はJavaとかActionScript(Flash)からとかじゃない? WEBアプリをSwingやFlexでとか、ぶっちゃけ楽しい。 サーバサイドはRailsでもPHPでもとにかく楽できるし、その辺全部無料で Windowでも完結できるし。 で、その辺から入ると、最後までCにたどり着かない可能性が高いと。
>>107 Java使ってるけど正直プログラミング初心者には難しいのでは
Rubyの方がまだ簡単で何かできる感じがするが
たとえばファイル名を整理するとかファイルの中身を整形しなおす
とかデータ合わせるとか実用的でそんなに難しくない
これをJava+Swingでやれといったら初めは大変だと思うんだが
> たとえばファイル名を整理するとかファイルの中身を整形しなおす > とかデータ合わせるとか実用的でそんなに難しくない いや、遊びでそんなことしないし 遊びと言えば、なんか表示して動かす。BASICから入った人なんかは 特にそうじゃね?他には音を鳴らすってパターンもあったけどもさ そう言う意味で、SwingやらFlashやらって言ってみた
Rubyは「おまじない」がないか、または最低限レベル(思想的にはBASICに近い) JavaやC++はあらゆるパラメータを自力で全部指定できるのがメリットだが、初心者にはただの負担だ
N88-BASICはおまじないの嵐だったがな もちろん、BASICマガジンに載ってたコードの事だが
>>106 とりあえず何か書いてから考察なり質問なりすべきw
どうしたらコード書くか言語学習するかなんて100%自分の動機だけの問題じゃんね
cはゆるゆる過ぎて変な癖がつくと思う。 かといってrubyも変にperl互換な所で、変な癖がつくのは変わらないけど。 ゆるゆるから厳しい所はキツいので、最初から厳しく型宣言必要な言語のほうが、いいかもね。後から緩く成る分には楽で楽しく成るだけだし。 いろいろまんべんなく使ってみるのが無難かもね。
Rubyを使ってると、しょうもないことを偉そうに語りたがるようになるということはわかった。
しょうもないことってなに?
片栗粉はゆるゆる過ぎて変なクセがつくと思う かといって羊羹も変にこんにゃく互換で変なクセがつくのは変わらないけど ゆるゆるから厳しいところはキツイので最初から厳しく型成形必要な射出のほうがいいかもね
意味がわからんが、片栗粉はちゃんとレンジでチンしたのか?
初めから厳しい言語使えとかまんべんなく使えなんてまず挫折すると思うが コンパイル一つだって失敗するかも知れないのに いきなり高い目標設定せずにとにかく自分が入りやすい言語を使う方が良いと思う
おっさんしゃべり場
ruby/tkってデフォルトでrubyに入ってるの? tkだとスレッドに問題が発生することないのか 教えてエロい人!!
スクリプトを実行する人のマシンにRubyがインストールされていて、 RubyのC言語ファイルの最初のコンパイル時にtkが有効にされていて、 なおかつ同じパソコンにTcl/Tkまたはtklib相当のものが別途インストールされていれば動作する
…まあ、自分用だよな 他人にウィンドウを提供するために使うようなもんでもない
横からだけど、じゃあ他人用にするなら何がいいと言うんだ 選択肢が多すぎて逆にどれを選んでいいかわからん
rubyだめじゃん rails以外は何にも作れないじゃん
○○するのにはRubyは便利 ××するのにはRubyは不便 ○○に入るのが自分用スクリプトの作成 ××に入るのがウィンドウでGUI
なんでこんな中途半端なポジションになってしまったんだろう・・・
>>129 ウィンドウを作るということに意味があると考えているのだろ
少なくともGUI対応はPerlとそう変わらないレベルだと思うんだが何がそんなに劣ってるのだろう
rubyはGUIはどうでもいいと思ってるようです
・中途半端そうなライブラリがフラットにたくさん並んでいる ・ググっても網羅的な情報がない ・スレでGUI系の質問を見かけるたびに陰気臭い人にネチョネチョとからまれている
>>131 言語の問題というよりは
使ってる人達の問題じゃないかな
GUIを便利にしようとするモチベーションがないし
そういう芽を自ら摘んでしまう独特の文化がある
135 :
デフォルトの名無しさん :2010/03/26(金) 12:39:53
ウィンドウを作ることに意味はないとでも言うのか
そう言っている人が Ruby 界隈には多いってことだろ
>>135 必ずしも意味があるとは限らない
標準入力から標準出力への流れがプログラムだ
この両方が保証さえされていれば、ウィンドウは必須ではない
>>133 WindowsのAPIべったりだったり特定のGUIバインディング限定の話をだらだらされるからだよ
Railsの話をこのスレでしないのと同程度には、GUIの話はここでは向かない
Ruby on Railsは全く別物でRuby本体の機能あんま関係ないよな
と
RubyのGUIシステムは全く別物でRuby本体の機能あんま関係ないよな
はほぼ同じ
GUIのスレはこことかもあるぞ
ttp://pc12.2ch.net/test/read.cgi/tech/1155031689/
>>137 それて、windows限定でしょ
意味不明なスレに飛ばそうとするなよ
GUIの話の95%くらいはWindows限定の話だからWindows用スレで適当な気もする
LinuxでウィンドウアプリケーションをRuby経由のツールキットを利用して作ってて なおかつRubyの知識が初心者スレレベルという人を見つけるくらいなら宝くじに当たったほうが簡単 Linuxのツールキットが使えるような人はRubyも使い慣れてて本スレで聞きそうだと思う
GUIが便利なのは、直感的な操作が求められる場合と 問題が本質的にグラフィカルな場合(画像編集とか) 現状じゃRubyって感じではないような…… あれば便利なのは間違いないけど JRubyからSwingを使うアプローチとかは面白そうではある
> Linuxのツールキットが使えるような人はRubyも使い慣れてて本スレで聞きそうだと思う という認識でFA Rubyユーザーにとって、GUIはRubyを使い慣れたあとにGUIを司るライブラリ単体で学習して使うもの Ruby/Tkなら、Tkの使い方を勉強する Tkの勉強だから、Rubyスレは関係ない Ruby/GTKなら、GTKの使い方が必要で、やっぱりRubyスレは無関係 GUIライブラリを呼ぶような部分は、慣れたRubyユーザーなら特に質問が出るような障害にはならないと
こういう長文でスレが埋ま理始めると末期だな。
自分のやり方は間違ってない主張の初心者 vs お前のやり方は間違ってるの主張の古参 という図式は毎年長期休みにたいていのスレで見られるもんだと思われ たいていの場合、前者が誤りで、後者が大人気ない
今年はテンプレが増えるのかどうか生暖かく見守ってます
一人やけに沸点低い古参がいて毎回トラブルの元になってるんだよな 初心者スレまで来て何やってんだか
初心者スレなので 「RubyでGUIなんて現状誰もやらないし、やっても中級者が趣味として嗜むレベルなんだよ」 というようなことは粘り強く啓蒙していくべきかと 勘違いしてしまう被害者は少なければ少ないほどいい Ruby初心者にもGUI言語初心者にもわかりやすいGUIバインディングや解説を作るんだという志は大層立派だが、 でもこのスレとは無関係なので完成したら改めて教えてくれ
無知のくせに絡んでくるんだよなGUI否定の人は
そんなに頻繁に出てきてそのたびに荒れるんならGUI専用スレ作ればいいのに
現代的スクリプト言語のうち 一般的なスクリプト用途とGUI用途とOS跨いだ移植に向いててそこそこ解説のある言語はPythonだけだな 「たったひとつの言語」をスクリプト言語に求めるならPythonやれ 本当はC++がいいんだが残念ながらスクリプト言語ではない
CUI専用スレでも作ればw
完成したら、というが そんなに素晴らしいなら、作ってみてから また来てくれ。 1. よし言語バインディングを調べて 2. 各ライブラリのラッパを書いて(これ膨大すぎるだろ) 3. ど、ドキュメントを書くぞ 大抵は1.の段階でほかの方向なり模索すると 思うんだな…(2までやるのでもかなり凄い。下手したら俺言語作るよりよほど難易度高いという…
>>153 それ言ってしまうとジャスト1時間前の
>>126-127 に戻ってまたループに
なんかGUI否定の否定派がいる雰囲気
RubyはGUIに向かない、という事実を述べることのどこがそんなに気に食わないんだ…
GUIプログラミングがしたかったら Windows使えってことか。
質問掲示板なんかでよくあるパターンだな 質問に答えることもなく、~~すべきでないと言いくるめようとする
何がどうGUIに向いてないんだよ 普通に使ってるわボケ
>>157 Rubyしか使えない人でなおかつGUIだけをやってる人がいるんだと思う
両方一気に否定されて立つ瀬がない
教祖がウィンドウズ使ってないもの。 ウィンドウズの話は異端。地獄に堕ちるよw
「向かない」と「できない」には天と地の差が…
>>160 それがスレ相当のRuby初心者にもできるのなら是非
オブジェクト指向でGUIに向いてないってどんな言語だよ
Ruby部分とツールキット部分を分けて考えられるかどうかが境界な気がする
>>165 正直、puts したらアラートウィンドウがポップアップするくらいになってるべきだと思う
いやそんな将来がどうとか妄想がどうとかどうでもいいから 現在どうなっていて、初心者はどうすべきかだけ教えてくれ
>>167 自分で調べられない人が使えるほど楽ではないから、諦めた方がいいと思う。
英語にアレルギーがなくて、自分で調べられる人なら、問題無いように思う。
結構いろいろGUIライブラリのRubyバインディングはある GUIライブラリ本体やRubyライブラリのインストールにつまづく初心者は潔く諦めて他の方法を探す 使い始めて分からないことはGUIライブラリ本体の勉強をすれば分かるだろう Rubyに関係ない質問が無ければここもそんなに変な空気にならんだろう
>>167 Ruby/○○ の ○○ の使い方を自分で勉強できるなら問題はない(TkとかQtとか、Win32APIとか)
これはRubyとは無関係で、世間様一般では○○単体で使われていて、専用の参考書や解説がある
ただ、GUI提供ライブラリの利用初心者には普通に難しいとは思う
この部分は「Rubyは初心者にもけっこう簡単」という(実は間違った)煽り文句の適用範囲外
で、これらを物凄く乱暴にまとめた言葉が「RubyはGUIに向かない」「初心者はGUIやめとけ」
RubyでGUIを扱ってみて質問しに来る人と比べたら、GUI否定のおっさんは初心者にも及ばないカスみたいなもんだな
>>172 はRubyでGUIパーツ扱ったことないな
GTKとか、ドキュメント少なすぎ。 やっぱりウィンドウズでやるしかないのか。
Ruby/Tkが学習コストとできることの兼ね合い上おそらくベストと思われるが、
Ruby初心者かつTkの知識がない人にこれが理解できるとはとーてー思えん。
せめてどっちかに習熟しててくれないと発散しすぎて無駄に大変だと思う。
変に分離性が高いので、
「ここからRuby」「ここからTkを呼ぶRuby」「GUI連携はTk独自でRuby無関係」
という…
Rubyに慣れてると学びやすいという説に一票、あと
>>173 。
Ruby/Tkは「いいよもうこれ全部Tcl/Tkで書いたほうがいいよ畜生」と自棄になってTclに戻らせようとする巧妙な罠
Windowsでいちばん簡単なのは「HSPでGUI作ってシェル経由でRubyスクリプトを呼ぶ」だと思う昨今
178 :
120 :2010/03/26(金) 14:29:32
ところで、お前らの結論を教えて欲しいんだけど 結局、お前らは何だかんだ言ってGUIをやったことが無いんだな
なんだまだいたの
エグザイルみたいなもんか
>>153 同感
Ruby で無理して GUI やっちゃうと
環境依存になって結局後々苦労するのが見えてる
Python でやっとけばびっくりするほど簡単にどこでも動く
複数の言語を使うことを厭うのは損だよね
てすと
ruby で角括弧[]が browserForm = Form.new() [browserForm].each do |f| f.Text = 'hoge' end の様に使われているコードがあるのですが、この場合は どういう意味なのでしょうか?
array = [browserForm] array.each ~ を省略して、生成と同時にメソッドコールしてるだけ
いちおう追記 質問のために書いたコードや操作対象が複数のときに一括処理する場合に備えているならともかく このコード自体はこれでいい browserForm = Form.new() browserForm.Text = 'hoge'
>>185 ありがとうございます。
おっしゃる通り一括処理で使われています。
ruby の理解が浅いため何となく分かった程度ですが、
brouseForm = Form.new()
brouseForm.hoge = ~
といういくつかの処理を f.hoge という形で見やすくしている
と考えれば良いのでしょうか。
見やすくっていうのも間違いではないけど ループや関数(メソッド)化して同じ記述を避ける(DRY原則)のほうかな puts "a" puts "b" puts "c" ["a", "b", "c"].each {|str| puts str } 3要素1項目ぐらいだから大差ないように見えるけど これが10要素5項目ぐらいになったらバカバカしいことになる つーかローマ字やめれw
ローワーキャメルケースとキャピタライズメソッドのコンボの恐怖 どっちもRubyの主流から外れてるので書くときの参考にはしないように 配列に関してはオブジェクトが「入ってる」という理解でいい (余裕があるならラベル入りの箱と考えるといいんだが) 箱からいっこ取り出すよ機能のeachで入ってるオブジェクト取り出して、 そのオブジェクトのメソッドを利用してる
190 :
デフォルトの名無しさん :2010/03/26(金) 19:31:18
確かに [very_long_variable_name].each do |v| … end で他の言語でいうletみたいなことはできるけど、普通は使わんなw
あれ、GUI論争ってもう終わったの? (コンパイルする方法がわからなくて途方に暮れながら)
Tkのスレッド対応みたいに突っ込んだ話になるとレスがつかないのに GUI論争するのっておかしい気がするな
そもそもここで「論争」なるものをしないで欲しいので
>>192 だってRubyのGUIでスレッドの話するのめんどくさいもん
ネイティブのTkのスレッドとユーザーレベルのRubyのスレッドの両方の話せんといかん
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 のほうがベタだけどすっきり。
>>192 春だからな、仕方がないんだよ
ここの人はプログラミングした事無いのに、
そこら辺の宗教戦争が好きだから
知らないことを答えようとするとGUI否定の人みたいなのしか出てこないことになる 知らないことは見てるだけでいい
Ruby/Tkの中の人があれだけがんばってるのに GUI否定とかやられるとがっかりするよな GUIスレが立ったみたいだからそっちが機能してくれればいいけど難しいか
203 :
195 :2010/03/27(土) 00:42:18
thx 単純には書けないんですね
>>202 どう言葉で表現してもそもそも初心者向けではないはずなのだが、どうもそこに引っかかってる人がいる模様
初心者にもできるべきだと考える理由って何だろうね
>>204 彼らはGUI肯定をしているわけではないのです
ほんのちょっぴり、初心者であったときのことを忘れてしまっているだけなのです
ここは初心者スレなのに、自分ができるからって相手もできると思ってしまってる
初心者にも優しいとか散々宣伝してきたツケが回ってきてるだけだろ 自業自得だ
ルビーのアンチは嘗ての初心者
RubyにGUIは向いてないとか言って馬鹿にされたから、今度は初心者がどうのこうのって もうアホすぎて死んで欲しいわ
Linuxだからruby-gnome2で満足してるけど、 ruby-gnome2と呼べばいいのかruby-gtk2と呼べばいいのか悩むことはある
Apollo ってなに?
過去の過ち
黒歴史になってんの?
ビッグ・ボンバーズみたいなもんだ 5年遅かったスペシャルマンと5年早かったカナディアンマンのコンビ
あれはRubyもいいけどDelphiもね!というキャンペーンの一環だった気がする Delphiは言語自体はよかったんだけどねえ 過去形で話さなければならないのがつらい所 黒歴史ではない ただの過去の遺物 Delphiのコンポーネントの知識があるなら選択肢になるかと思う
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 ...
>>205 オタクの悪いところだよなぁ
俺はわかるから、分からないお前らがだめなんだよ
みたいな
クソ根性論だよ
>>221 誰もそんなこと言ってない気がするんだが。
ちょっと聞きたいんだけど、 >>[1, 2, 3].each do |i| >> puts i >>end >>[1,2, 3].each { |i| puts i } この二つを実行すると同じ結果が出てくるけど 書き方が違うだけ(『do~end』が『{~}』になった)って事でいいのかい?
>>223 そこに疑問持つくらいならまとまった解説をきちんと読んどいたほうがいいぞ
ちなみに回答はYES
do … end は { … } のブロックに置き換えることができる
全く似ていないものに begin … end があるがこれは置き換えができない
{ … } は Hash リテラルを記述するのにも使用されるがこれを end つき構文に置き換えることもできない
>>224 うn、ありがとう&ごめん
本とか買わずにリファレンスだけ読んでて、唐突に.each doとか出てきて
『each』と『each do』って二つあんのか!ってびっくりしてしまってな
do で始まって end で終わるものだけだな end で終わるならなんでもカーリーブレースで置き換えられると思ってしまう人が結構いるので注意 どちらかというと do の存在のほうに注目してほしいんだが、なぜか end にばかり目が行く模様
Runnable.new { public void run(){ //適当な内容 }} javaではこのようにクラスをオーバーライドすることができますが、 Rubyでこのような事をやるにはどうすればいいんですか?
Rubyではクラスのオーバーライドはないと思う ただの定数にクラス定義(とメソッド定義)が入ってるだけだから、 継承するだけで別のクラスオブジェクトになれるはず 元クラスの動作を変更せずに安全にメソッド追加したいだけなら クラスを継承してからクラス定義を再オープンしてdef追加するかオブジェクトにextendでいいんじゃね
229 :
227 :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
231 :
227 :2010/03/27(土) 20:54:42
>>230 特異メソッドにそんな使い方があったとは
単純にクラスに属すメソッドの定義だと思っていました
ありがとうございます
>>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クラスのインスタンスだから、
その特異メソッドはいわゆるクラスメソッドの位置づけに相当するということ。
普通のメソッドから特異メソッドにアクセスできないみたいですが、 どうにかなりませんか?
>>235 >>231 と仮定すると、どうにもならない
そもそも所属が違うから、特異メソッドの存在を知らないインスタンスメソッドは特異メソッドにアクセスできない
そうでないのなら、特異メソッドは new されたオブジェクトではなく
new するのに使った Class オブジェクトの持ち物なので self.class.hoge で使え
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
配列にはattr_writerでアクセッサを指定することはできないんでしょうか?
240 :
デフォルトの名無しさん :2010/03/27(土) 22:53:26
メソッドがほしいというより使い方が知りたいのです 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] のようにできるけど。
244 :
239 :2010/03/27(土) 23:08:53
こういう風にしました readerArray = Array.new(3, 0) attr_reader :readerArray
245 :
239 :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]
のようなことは起こる。
Rubyにアクセサという機構はない attr_* は同名のインスタンス変数を返す(か代入する)メソッドを自動で作成するだけ def arr @arr end def arr=(a) @arr = a end メソッド定義を自力で書くのを避けたいときに使うだけで、特別な動作はしない def を書く代わりにできるだけ
248 :
239 :2010/03/28(日) 00:11:30
>>246 なるほど
アクセッサで指定した配列オブジェクトそのものは読み、書き専用になるけれども、
その中身のwriterArray[0]とかはwriterArrayのオブジェクトから読み込みができないので
各要素オブジェクトにもアクセスできなくなるので、writeArray[0] = 1 はできなくなり
readerArrayの場合は、readerArrayの読み込みはできるのでreaderArray[0]にアクセスできるけれども
readerArray[0]の要素オブジェクト自体は読み取り専用じゃないので readerArray[0] = 1 ができてしまうんですね
大変参考になりました
>>247 やっぱり横着してはならないのですね
夜遅くまでありがとうございました
ぶっちゃけ、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= というメソッドしか 作られないからダメってことですな。
どうでもいいけどLCCで書くのやめて欲しいなあ Rubyではスネークケースで書いて欲しい そういやスネークケースって言葉ぜんぜん流行らないよね write_array みたいな全小文字でアンダースコア区切りの書き方ね
>>250 require 'net/smtp'
使い方はマニュアル読め
>>252 禿げ同。
初心者がスネークケースで質問するスレ立ててよw
>>252 Rubyではあらゆる点でアンダースコア区切りが主流だと思って
ライブラリのトップファイル名をアンダースコア区切りにしたら叩かれたでござる
require 'hoge_lib' ではなく require 'hoge-lib' となるように作ろうね
require しないファイルはアンダースコア区切り
個人的にはピリオド区切りが好き
私初心者だけど クラス命はFooBar メソッド命もFooBar 変数名はfoo_barって感じで書いてた こういうの嫌われるの?
>>257 間違えた
クラス名 => FooBar
メソッド名 => fooBar
変数名 => foo_barでした
>>255 マジか。アンダースコアで作っちゃった。
でも、active_recordとかもアンダースコアだし、いいよね?
ちなみに、その指針みたいなのどっかに書いてある?
>>258 Rubyではメソッドを呼ぶ行為とローカル変数を呼ぶ行為は字面で区別しない
LCCを使用するのは特定の外部ライブラリのラッパーとかの特殊用途向け
メソッド名と変数名は全部小文字でアンダースコア区切りが普通
ちなみに大文字メソッド名でも定義はできるし動作もする(ただしレシーバ必須で self.Hoge 等と呼ぶ)
余談だが日本語でもできる(文字エンコーディングに注意)
>>259 そもそも active_support なのか active-support なのか activesupport なのかわかりにくいから
新しいメソッドはもうまとめようぜという話になったと記憶
こんなとこでどうでもいい宗教論争吹っかけんなよ糞うざいから
>>261 別に従わなくてもいい
全部のメソッド名を日本語にしても構わない
DSLで自分のルールを作るのさえ自由だ
end を } にするように書き換えてコンパイルすることを別に止めはしない
ただ、それは孤児になる
Java が 1.1 系列になるときに、クラス定義の規則や、命名規則を厳格にすることで、 JavaBeans が成立し、開発環境でそれらを扱えるようになった。 マウスのD&Dで、イベント定義をしたり。 引数なしのコンストラクターを定義して、 setter/getter とか boolean は isProperty() にするとかそんなの。 命名にも、そういう実益があればいいんだけど、単にスタイルの問題だと従う意味が分からない。
教祖が適当に決めてるのが現状だしな。 perl互換にしたがる傾向が強いが。
>>263 Rubyは本当に本当に自由に書くことができるので、逆に記法が散逸してしまったのだな
スタイルというよりはデファクトの決定
読めない上に入力方法もわからない外国語UTF-8クラス名の外国語UTF-8メソッドを使いますとか言われても困る
rubygems は gem install のインストールディレクトリ名と require のファイル名を別個にすることができるので
たいそう混乱した
これは Hoe や Jeweler のサポートで軽減されてきている
別に従わなくてもいい
特に外部に公開しない場合は
公開するような場合でも、別に守らなくても構わない
ただし、それに伴って何か不利益を被ったとしてもそりゃ自己責任で
俺と違うやり方の世界のほうが悪いんだと叫んでくれ
jrubyのライブラリはネイティブな実装ですか?
「RubyはGUIに向かない、Pythonにしとけ」ってのは、どういうこと? Pythonには、LinuxでもMacでもWindowsでも動くことができるGUIライブラリが標準で用意されてるんでしょうか。
というかRubyのGUIは全部間借りなのよ Ruby/TKはTcl/Tkというものを使ってて、Tkの勉強が必要 Ruby/GTKはGTKの、Ruby/QtはQt(Qt4)そのものの勉強をする必要がある Rubyの文法とか考えとかそういうものとは全く別のものを勉強しなければならない 「GUIはRails並に別」と言われる所以 「わざわざRubyから呼んで苦労背負い込むくらいなら 直接そのプログラミング言語を学んで直接起動させたほうがマシじゃね」という
> Pythonには、LinuxでもMacでもWindowsでも動くことができるGUIライブラリが標準で用意されてるんでしょうか。 これに全く答えてないわけだが。 Pythonには間借りでないGUIライブラリがあるわけ?
この際だから はっきり言ってしまうと Pythonの場合 wxPythonならwxWidgetsは覚える必要はないし PyQtならQtを覚える必要がない TkinterだけはTcl/Tkを知らないと使えないとは思うけど
Tclの難しいところ(変数/コマンド置換、制御構文のブレース等)はRubyがやってくれるから Tcl知ってる人がTk使えるようになるのと Ruby知ってる人がRuby/Tk使えるようになるのに必要な勉強の量は大差ないだろう 問題はLinuxでRuby/Tkが使えるようになるまでだけど RubyでGUIやりたいって言ってる人はたいていWindowsユーザなんじゃないか だとすればActiveScriptRuby入れてActiveTcl入れるだけでRuby/Tkが使えるようになるから PythonでTkinter使うのとたいしてかわらない とういわけでRubyでGUIスレの発展を切に願います
Ruby/Tkが学習距離的にいちばんマシではある 「とりあえずウィンドウとかボタンとか入力欄とか出せればなんとかなんじゃね」 というコンセプトがRuby寄りだ 「Tcl/Tkでいちばん難しいのはTcl」という本末転倒な症状もRubyなら軽減 が、Rubyを一通り学んでからGUIに手を出すという順番自体は重ねて推奨
>>273 半分くらい答えになってるんじゃね?真偽は置いておいて。
というか何故そんなに喧嘩腰なんだ
wxPythonなんかも結局wxWidgetsのマニュアル見ることになるから あんまりRuby/Tkなんかと変わらないよ その辺はどこのGUIインタフェースも一緒
深い使い方しないという範囲限定の話だと思う
277 :
267 :2010/03/28(日) 11:02:09
>>268 プログラム言語によらず、GUIライブラリなんてそんなもんだと思っていたので、
RubyじゃなくてPythonだと何が嬉しいのかを知りたかったのです。
>>270 > wxPythonならwxWidgetsは覚える必要はないし
> PyQtならQtを覚える必要がない
GUIライブラリ固有の知識がなくてもPythonの知識だけでGUIが作れるということでしょうか。
これはにわかには信じられないのですが、ちょっとPython勉強して出直してきます。
でも俺はある程度Tcl/Tk知ってるからPerlでもRubyでもPythonでもTcl/Tk単体でも 学習コスト最低レベルでウィンドウを扱える まあ要は用途次第だな GUIを提供することだけが最重要で、その裏にあるプログラムの動作はどうでもいいとか
そもそものあれとしてGUIが必要な人はRubyを使わないし、 Ruby使ってる人はRubyからGUIライブラリを呼ぼうなんて考えない GUIが必要なときは素直に他の言語で書く
>>280 んなこたーない。
…とは思うものの、自分も Ruby で書かれた GUI アプリは Rabbit くらいしかしらない。
>>280 で、つまりRuby上のGUIは初心者の領域ではないという話になるわけか
別スレ立ったんだしとりあえずそっちでいいじゃん
>>280 それはそうだろうけど、その「他の言語」ってところでPythonを勧められることがままあると。
んで、PythonとRubyではそんなに違いないんじゃないの?ってのが
>>267 の疑問では。
C#やらJavaやら勧められるんなら、そういう疑問は出てこないと思う。
>>281 goRua…は終わったか
ホントにGUI部分の処理が面倒だなあ
ウィンドウ処理と滅茶苦茶高次に融合したRubyとかないの
286 :
デフォルトの名無しさん :2010/03/28(日) 11:39:52
ここは初心者スレだからGUIの話もオッケーよ
287 :
デフォルトの名無しさん :2010/03/28(日) 11:46:26
プログラミング初心者には、GUIってのは、すでに出来上がって動いている ものを操作するのは分かりやすいが、それをそう見えるように作るのは面倒 くさいということは知って欲しいなー。 テキストメッセージ1つのウィンドウを出す程度で満足なら別だけど。
Rubyで使えるGUIライブラリってどんなのがあるの? WndowsFormは使えんよね?
attr_writer :hogeとdef hoge=(h);@hoge = h; endは 同じ意味だと思いますが、どっちを使うべきなんですか?
>>289 前者は後者の意味であるということを理解してるならどっちでもいいよ
作ってる最中は attr のことが多いと思う
条件演算子→if式→case式 と移行するのと似たような感じで
結局後者(でメソッド内部で正規化処理つき)になることが少なくない
>>288 Ruby/Tk
VisualuRuby
Ruby/Qt4
Ruby/GTK2
WxRuby
FxRuby
Apollo
Ruby/FLTK
RubyShoes
なんか終わってるのもいくつかあるが気にするな
test do 例外が発生する可能性のある処理 end ---------------------------------------------------------------------------- def test begin 例外が発生する可能性のある処理 yield ensure;end end このようなコードを書いたのですが、test do; endの適切な処理がわかりません 教えてエロ人!!
295 :
デフォルトの名無しさん :2010/03/28(日) 13:06:36
発生したときどうしたいのさ?
296 :
294 :2010/03/28(日) 13:18:57
>>295 test do endの中で全ての例外を処理し、
例外が発生した時はメソッドをreturnで終了させたい
> test do endの中で全ての例外を処理 えー そういう場合はメソッドのユーザーが自分の責任で begin で括る begin test do ... end rescue => e error_handling(e) end
チルダとダブルクォーテーションの使い分けって何かあったっけ? 何か重要なものがあったような気がするけど思い出せないんだ
チルダ ( ~ ) ? Ruby で ~ を使うのは、マッチング演算子の =~ とその否定の !~ と、 前置の単項演算子で、整数のbitwise-not、正規表現オブジェクトと $_ とのマッチ、 IPAddr オブジェクトのbitwise-not、なので、ダブルクォートとの使い分けをする場面は ないと思うが...
間違ったプライムだ 文字やら文字列列をくくる時なんかに使うアレ
′や″をRubyで使うことはない
LispやErlangなんかのフォーマット文字列だっけ チルダ使うの
親クラスのアトリビュートにアクセスするためには、どうすればいいんですか?
記号の区別の知識があることがやっぱ前提だよな "''゛“"”′″`'‘’
>>307 Rubyにはアトリビュートというものはない
継承されたクラスの a というメソッド内部から継承元の同名のメソッド a にアクセスするには super を使う
310 :
307 :2010/03/28(日) 16:34:42
>>309 そんじゃ、親クラスで定義した@hogeには
サブクラスから(メソッドを通さず)アクセスできないってことですか?
>>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"
読み方いくつかバリエーションあるんだが " ダブルクォート(ダブルクォーテーション) ' シングルクォート(シングルクォーテーション) ` バッククォート でいいよな 表記の揺れは許容
( ) カッコ、パーレン、小カッコ { } ブレース、波カッコ、カーリーブラケット [ ] ブラケット、角カッコ
314 :
デフォルトの名無しさん :2010/03/28(日) 17:08:01
シェルスクリプトやPerlの知識はいくらか前提にしたいなー。
プライムは 1′23″ とか書くときに使う記号だな
>>312 「マーク」を付けないところが童貞っぽい。
IPアドレスをIPって略しちゃうのと一緒で。
317 :
307 :2010/03/28(日) 18:00:19
>>311 JRubyでJavaのコードを継承しているんだけど
なぜかnilになっちゃう
318 :
307 :2010/03/28(日) 18:20:48
どうやら、JRubyからJavaのフィールドにアクセスするためには 絶対publicじゃないとダメみたい しかもJRubyではローカル変数としてアクセスするみたい class Super{ public String str = "str" } class Sub < Super def initialize p str end
>>315 わかったからもうやめて
俺のHPは0だ
>>316 ダブルクオーテーションとダブルクオーテーションマークに何か違いでも
フルだとどうにも長いからな IPアドレスなんかとは違って紛らわしい候補はないから縮めてもらっても意味はわかるが そもそもがダブルクとかシングルクとかそれくらい短いといいのに
一重引用符、二重引用符で各5文字だ。
>>322 それは、カギカッコと区別がつきづらいので使わないで欲しい。
半角単引用符 半角複引用符 6文字でFA
ほほう«ギュメ»は‹引用符›ではないと申されるかこれは異なことを …いいよもうシングルクオートで
次の瑣末粘着者さんどうぞ
メソッドの名称とかモジュールの名称って 短い方がプログラムの実行速度が速くなるとかありますか?
…いつのBASICだ 気にする必要はない 変な省略はせずにわかりやすい長めの名称推奨
大きなオブジェクトを変数に入れた後は変数に nil を明示的に指定すると メモリ内に巨大なデータがいつまでも残ったままになったりしません とか書いたら信じて実行してくれるだろうか
irb だとわかるけど、 require するとけっこうメモリ食うよね
win32版Ruby1.87(OSはWindowsXP)9で、漢字を表示するようなスクリプトをUTF-8で保存して スクリプト一行目に#! ruby -Kuと入れて実行したら文字化けした -KsにしてS-JISで保存して実行したら直った ・・・ちゃんとBOM無しとやらにしたのに何でかしら?Ruby本体の設定とかあって、それを間違えてるとかかしら? ちなみに使用したのはサクラエディタ
>>331 Windowsという事は、コマンドプロンプトで実行したという事ですね。
コマンドプロンプトはデフォルトではSJISしか正しく表示できないのです。
コードページをUTF-8に変更すれば表示できると思われます。
方法は「コマンドプロンプト コードページ UTF-8」でググってみて下さい。
>>332 ㌧
コマンドプロンプトちゃんの設定が悪かったのか
にしてもこんな設定があったとは・・・
chcp65001 のことだったらまともに動かないし使えねーんだが
QueueにデータAが無かったら、データAを追加する 処理を書きたいのですが どのようにして確認すればいいのでしょうか?
デフォルトでは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のペアを使って キューと見なすほうがよいと思う。
339 :
336 :2010/03/29(月) 13:33:19
>>337-338 よーくわかりました。
Array.newとQueue.newの2つを使いたいと思います
ありがとうございました
File.exist?(filename)とFile.exists?(filename) の違いがわからない 単に書き方が違うだけか?
342 :
デフォルトの名無しさん :2010/03/29(月) 20:15:24
>>340 なるほど、んじゃあexist?(hoge)を使うようにしよう
ともかくありがとう
javaのつもりでcase 文で一行ごとにbreakを入れたら酷い目にあった 知ったかは危険だ・・・
スレッドの中から@arrray.shift()としたのですが、 スレッドの外から@arrayを見るとちゃんと動作していません どうやったら、整合性が取れるようになりますか?
>>345 > どうやったら、整合性が取れるようになりますか?
typoを無くす
>>342 まあ 1.9.2 で実際に出たら考える
shiftできるんだから、@arrrayの方が正しんだな。
BitmapArrayって何ですか?
def hoge *argsのとき、 hoge {:fuga => :piyo} で呼ばれたのか、 hoge :fuga => :piyo で呼ばれたのか判断する方法ってあるんですか?
353 :
352 :2010/03/31(水) 09:06:16
あ、 hoge {:fuga => :piyo}じゃブロックになっちゃうから hoge({:fuga => :piyo})ですね。
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) も同じ
355 :
352 :2010/03/31(水) 10:02:08
どもです。わかりました。
356 :
デフォルトの名無しさん :2010/04/02(金) 04:53:24
正規表現で得た複数のデータをそれぞれ配列に格納して、 その配列を比較するにはどうすればよいのでしょうか。
そのまんま1処理ずつ書けばいいじゃん なんでもかんでも1フレーズに押し込めようとするのは損
鬼車を使いたいんですが、1.87に実装されていますか? 1.91は不安なので。
360 :
デフォルトの名無しさん :2010/04/04(日) 02:47:06
リテラルは無理だが、oniguruma gemはある。
>>360 どうもありがとうございます。今から試してみます。
ところでみなさん、1.9系統への移行はいまだに時期尚早だと思いますか?
正式リリースから一年以上経ったし、そろそろ良いかなーとも思っているんですが。
みなさんはいまだに何か不都合とかありますか。
system("make")等でmakeを実行しつつログを保存したいのですが 良い方法はないでしょうか?IOクラスのパイプとかリダイレクトとか良く分からなくて… text=`make`ではmakeの出力がリアルタイムで確認できず system("make 2>&1 | tee hoge.txt")では、$?でmakeの戻り値を 取得できなくなってしまうので困ります(失敗したらexitしたいのです)。
>>362 1.8 なら fork と exec で自分でがんばるしかないと思う。
1.9.1 なら spawn で、1.9.2 なら open3 で、できるかもしれない。
Structを要素とする2次元配列の消費メモリが大きくて困っています 500個 * 約13000個 * 要素数5の構造体(整数4つ+文字列)のデータで 2Gbyte以上消費します(Cで書けば150Mbyte程度で収まる) Rubyではこの程度のメモリ消費は普通なのでしょうか? あるいは使い方やコツ等が分かっていないのでしょうか? 環境はruby1.8.7 on MacOSXです
366 :
362 :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
>Rubyではこの程度のメモリ消費は普通なのでしょうか? 普通
ruby1.8.7がruby1.9系の良いところをフィードバックしたバージョン rails3がruby1.9対応だからみんなそれまでは焦って動くことはなさそう。 メモリ消費でCと比べるのはrubyがかわいそう javaだってcの10倍以上使っておかしくないんだぜ? ruby1.9系が1.8系よりも良い所って 今のところガーベージコレクションが良いって記事しか読んだ事無いな。
>>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がなければそのくらい作れ。
あ、teeになってないな、これだと。 copy_streamの代わりにこうでもしてくれ。 mk.each{|line| log.puts(line); puts(line)}
371 :
365 :2010/04/05(月) 17:58:32
>>367 ,368
そうですか・・
倍程度かなと勝手に予想してましたが、そんなに甘くはないですね
ありがとうございました。
書きやすくて実行しやすくてなおかつ投げ出したくならない程度の実行速度も求めた結果、 Ruby においてはメモリはすっげぇ大量に消費される ご存知の通り、プログラムにおいて実行速度とメモリ使用量はトレードオフだ どっちも良くしたい場合はアセンブラかせめて C で書か「ねばならない」 大量のデータを処理するのでなければ常識的な範囲内に収まるものではあるのだが、 大量のデータを処理することが事前にわかっているのなら Ruby を使わないほうがたぶん幸せ
馬鹿な事いってんじゃないよ、 ムーアの法則知らないのか? それは、10年前のpcの話だろ
>>373 何言ってるの
いつの時代もCPUは100パーセント使用されるし
メモリはスワップにまで突っ込むし
HDDは90%まで埋まるもんだよ
10年前のデータ量を現在のマシンで取り扱うなら、君の言ってることは真だろうね
ムーアの法則を知っていてパーキンソンの法則を知らないのはニワカ
>>372 大量のデータでまったく同じ処理を何回もするならそうかも知れない
(大量の定義にもよるが)
あるいはとにかく速さを要求されるならそうかも知れん
ただ,大量のデータでもそんなに何度もしないならRubyの方が幸せかも知れん
たとえばRubyで処理に1日かかってアセンブラなら半分の時間でできるとしよう
coding/debug でその差以上得しなければ時間的にさえ得にならない
人件費ではさらに得にならない
coding のオーバーヘッド評価しないと意味が無いから状況に依りすぎる
有名な教訓を思い出すなぁ
"premature optimization is the root of all evil"
>>374 いわゆるデスクトップ版Linuxを使ってるとその思いが強くなる
10年くらい前は「もうちょっとマシンが早かったらこれすげえ快適なんじゃね!?」と思い
5年くらい前には「もうちょっとマシンが早かったらこれすげえ快適なんじゃね!?」と思い
今年インストールしたLinuxでも「もうちょっとマシンが早かったらこれすげえ快適なんじゃね!?」と思ってる
今すぐtwmに変更するんだ!
通年重いのはツールキット部分だな 起動するGUIアプリケーションが全部OpenMotif使うようになるとかなら歓迎だがそうでもあるまい
Ruby 使うって時点で GTK だったりするのがアレだ罠
マク自体余計なものがいっぱいで重いしなあ。今更。 twmに戻れば爆速。マクってgui無効に出来ないものなのか?
ちょっと質問いいでしょうか?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取得はもっと簡単にかけるよ などということです。
>>384 1.9.2 だと Socket.ip_address_list ってのが使えますけど、それ以前はこれって方法はないですね。
ていうかめんどくへえから公式でメソッドいっこに纏められたという感じだな
ずっと規制で書けなくてもうすっかり今更なんだけど、
折角実験までしたので勿体ないから書いとく。
>>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ちょい
>>387 たぶん1.9.1ならStringのあたりでメモリ消費減ると思う
Structの要素数が3以下ならそっちでも減るはず
389 :
384 :2010/04/08(木) 18:05:06
>>385-386 サンクス
Rubyのバージョンは1.8.7でした。1.8.7だと簡単な方法はないですかー。回りくどい方法でやってみます
ファイルパスは文字列で書けないのね File.join 使わないと動作が保証できないとか面倒すぎる
UNIX使え
>>390 Pathname 使って + するのは?
File.join はアイデンティティが崩壊中 どんな場合に使うのが正しいのか誰も回答示せない状態
>>391 それはそのスクリプトの作者ではなくそのスクリプトを使用するユーザー全員に言うべき
※ UNIX/Linuxじゃないと動作保証しません
File.join って obsolete じゃなかったっけ?
「末尾がどっちのディレクトリ区切り文字かわからない(ついてるかどうかすら不明な)文字列」 を連結したくて、なおかつ結果を現在のOS依存の相対ディレクトリ表記で表記したい場合に File.join を使う
そもそものアレとして dirA\dirB\file.txt という文字列が外部から来たとき、これを File で扱うことはできない
>>399 Windowsなど(含むcygwin)ならopenとかFile.expand_pathとかFile.basenameとかでは扱える。
扱えないのはDir.globくらい。
C:>ruby -v ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32] C:>ruby -e "p File::SEPARATOR" "/" この時点で File.join に存在価値はない
>>401 > ruby -e "p File::ALT_SEPARATOR"
"\\"
RubyでHTTPをIOライクに扱えるライブラリがあったら教えてください 巨大なファイルやストリーム的に送信されるデータをRubyで取得したいです 標準のnet/httpやopen-uriはレスポンスが終了するまで処理が停止してしまいますし socketだとHTTPをすべて実装する必要があるので・・・ よろしくお願いします
何がどうIOライクなんだ
もしかしたら非同期でHTTP通信したいということじゃないか もしそうならスレッド使ったらいいのでは
1キロバイトずつ通信するとかそういう器用なことをしたいのでは
とあるエディットボックスの 日本語入力中に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 # 常に空の文字列「""」しか返ってこない #------------------------------------------------------- …となってしまいます。根本的にやり方がおかしいのでしょうか? どなたか上手く取得する方法を教えてください。
すいません、自己解決しました。引数が間違っていたようです
410 :
403 :2010/04/12(月) 20:32:01
レスありがとうございます
>>409 それっぽく動いてくれそうなので使ってみます
たのしいruby第3版買った
そういやベストプラクティスで「単純な場合はattr_*使え」ってあったけど、あれrdocとかのコメント機構追いついてないよね 内部変数名と外部提供用アクセスメソッドが同名であることが自然な場合ってレアだよね
> diff 'hello'.class.instance_methods 'hello'.class.methods が実行できない事に失望した
結果は配列なんだし引けば 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
104?
インスタンスメソッドとクラスメソッドだからもともと包含関係にはない
Object とかでたまたま被ってる数だな
>>413 Kernel.diffがあればできるだろうけど、ないからね
> p 'hello'.class.instance_methods - 'hello'.class.methods
でいいんじゃないの?見にけりゃ、ppで
というか diff 関数のあるスクリプト言語ってそんなにあるっけか
今こそ差分演算子 --- の導入を!
Array#-とどう違うんだ
そこまで言ったらリフレクションの世界っぽいし、 現実的にはぶっちゃけシェルでやっちゃえよ
Rubyのライブラリで、文字列のdiffとか無いの?
外部の diff を使うほうが速くて安くて安心という結論だった気がする
「diff なんだったらあれもこれもできて欲しい」というのがあるからなー それを pure Ruby で再実装しようというのは結構マゾい
レーベンシュタイン距離導入してほしいとかいう声は見た気がする。
あれを String に入れてというのはそれこそアレだ それを活用するライブラリを作ってそれを require すると String が拡張、みたいな手順踏んでもらったほうが ところで $LOAD_PATH.unshift(File.join(File.dirname(File.expand_path(__FILE__)), '/../lib/')) これ File なんとかの部分短くなんないっすかね
どんな起動のされ方しても __FILE__ が常にフルパスを保証できるかどうかとかそういう話?
$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/"))
$LOAD_PATH が相対で何かまずいことがある? …あるか __FILE__ という名前の変数は「慣習的に絶対パス」だと思うなあ
diff-lcs というライブラリはある。 lcsの意味が分からない人向けではないと思う。
下のようなことをRubyで書くにはどうすればいいでしょうか? $str ="Tom,19,man"; list($name,,$sex) = explode(",",$str); いろいろ試してみたのですが下のように書くとエラーがでます。 name,,sex = str.scan(/(.+?),(.+?),(.+)/);
433 :
デフォルトの名無しさん :2010/04/15(木) 21:09:32
age
str ='Tom, 19 ,man' name, age, sex = str.split(/\s*,\s*/) age が不要なら _ にでもしとけ
>>434 ありがとうございます
なんらかの変数に代入しないとだめなんですね
436 :
433 :2010/04/16(金) 07:57:44
あたしにもお礼を
_
うむ、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']
「処遇を考えるのが面倒な、捨てるためのローカル変数」として _ は若干ポピュラー
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"]
map と find は理解利用できるとスクリプトの長さが半分くらいになる Array や Hash といったコレクション主体のスクリプトを書くようになるから inject も概念は素晴らしいんだがメソッドとしてのインターフェースに難あり
>>440 1.8.7か1.9だと
arr_in_arr,map(&:first)
と書けてしあわせ
rubyもだんだんperl化して汚…
>>442 別にそれは幸せではない
&に意味がなさ過ぎる
そういや 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 の都合だよね
Ruby1.9.1 にて invalid multibyte char (UTF-8) が出るのってどういうとき? カッコの中のエンコーディングだとみなしてパースを行ったが エンコーディングだと解釈できないバイトの連なりがありましたエラー?
>>446 そのはず
括弧の中が、マジックコメント等で指示されて Ruby が想定しているエンコーディング
表現的にまだわかりにくいな
ruby parser found invalid multibyte char for UTF-8 とでも表示すればいいのか
for はやめといたほうが… ArgumentError の轍をわざわざ踏まなくても ArgumentError: wrong number of arguments (3 for 2) 足りないのか余ってるのか一発で判断可能な表記にしろ ArgumentError: wrong number of arguments (expected 2, but 3) とか表示してくれたら全世界の Ruby ユーザーが涙流して喜んだろうに
>>445 1.8.7以降なら
Hash[h.map{|k, v| [k.to_s, v]}]
でいけるようになってる
Hash#to_a で出来る形式のArrayを逆にHashに出来るようになってるよ
1.9で追加されて1.8.7にバックポートされたのかな
マニュアルは見当たらんのだが
どこかに書かれてるのだろうか?
最近打ち合わせでは分かり切ったことは飛ばして話を進めているのに 知識として持っててあたりまえのことを質問する馬鹿が増えた
そりゃ「わかり切ってる」つもりなのがお前だけだからだろ
まあ自分が知ってることは他人も知ってて当然 って気質だからな日本人は
2chの読み書きを支援するライブラリってありますか? Rubyから2chに書き込みたいです
あります
そうじゃねえよアホ
馬鹿は質問に答えなければいいのにね
>458 python なら end がいらないから 10 行以下だったね 惜しい
require '2ch' thre = Nichannel['プログラム'][1269233796] puts thre[453].text.to_a[0] #=>2chの読み書きを(略 thre.post(nil,'sage',text) こんな感じか 出来る奴ならすぐ作れるだろ
誰も質問には答えないってやつだな
SETTING.TXTも取ってきてチェックしないと
なんでもかんでも追い出そうとするなよ つまんねえ奴だな
>>466 が自壊を望むのはそれで結構だが自分ひとりで壊れてください
私たちは自分たちの使ってる掲示板を壊すようなものを進んで提示することはありません
Rubyに関係してるのに追い出すなよ
>>462 >>453 に対しては
>>454 で終了
それ以上の情報提供をする人は昔ならともかく今はどんなスレでだってまずいない
2chの仕様調べてHTTPクライアント作るまでが参入障壁
公開された爆撃スクリプトに自分のコードが書いてあったときの絶望を知るがいいぞ
で?
私たちは自分たちの使ってる掲示板を壊すと日本の経済が今より上向くような希ガス
失業率1パーセントくらい減るんじゃねーかとは言われてるな
>>470 それって「包丁は人を殺せるから売ってはいけない」的な主張と同じじゃね?
いや著作権を侵害されたことを嘆いてるんだと思われ
スレ違いだけど、HTTPの処理をするだけで2chに書き込めると思ったら大間違いよ。
Rubyなんて受刑者にやらせとけば十分
>>476 それって質問とますます全く関係なくね?
ぬるぽ
仕様満たさなかったんだな
kusukusu
rubyはデフォルトだと付かないからなw
>>477 > 2chの仕様調べてHTTPクライアント作るまでが参入障壁
このまんまだと思うが…
書き込むだけなら適当でおk。 エラー処理は苦痛。
>>485 416 Requested Range Not Satisfiable
お前の想定している例外はそれだけかよ? おめでてーな
まあスクリプトバラ撒いたり連投ツールにしたり保守ツールにしたりSMAP書き込みしたりするのでさえなければ 勉強になるものであることは間違いがない 2chの鯖自体には毎日変なGETやPOSTが来てるんだろうと思う
>>487 一番めんどいエラーだと思うが
板移転なんてあぼーん検知と最小取得に比べたらどうということもない
毎回dat全部読んでる俺は勝ち組
話それるけど2chブラウザ作る場合は、エラーメッセージはどう扱うの? 「ERROR:xxx」部分を切り出して表示するのかな。 bbs.cgiはもうちょっと頑張るべきなのになぁ・・・
> 「ERROR:xxx」部分を切り出して表示するのかな 基本はそう メッセージボディを正規表現でごりごり判定 ぶっちゃけレスポンスヘッダはもうちょっと頑張ってもいい
bbsmenuのフォーマット見た時点で萎えました。
Cの仕様と一緒でいまさら変えられないってのがあるんだろうな
つか2chの運営に関わっている人たちに関わっちゃだめだろ
んじゃもうforkしちゃえば?
forkされたものはいっぱいある
スレッドフロート型の掲示板としては2chはわりと旧式 システム側はわりと頑張ってるぽいんだけど、掲示板本体の機能は20世紀のまま
>>494 基本設計はちゃんとやろうね、という良いお手本だな。
ぬるぽ
>>499 そもそもそんなふうに出発したものじゃないからなあ
開発という視点からはタイミングが全部後手後手裏目なんだよね
いいかげんスレ違いなので他の質問の方どうぞ
Rubyから2chに書きたいって話から明後日の方向に話が行っている気がする件
RubyでOS書けますか?
puts "OS"
1.91で次のように書いてもマッチしないんですが、どこが問題なのでしょうか。 str4 = "あ" p /[\x{3041}-\x{309e}]/ =~ str4
そこ意外
エンコーディングの指定が間違っていることは間違いがないな
実は常用しているエディタがUnicode前提で、 検索に使える正規表現はこのような書き方しか受け付けないんです。 それでRubyで処理したいファイルと出力したいファイルがシフトJISじゃないと駄目だったりするんです。 だからRubyの中での書き方もエディタの書き方に合わせたいな、と思いまして。 へんてこな使い方ですからやっぱり無理なんですかね。残念。
str4 = NKF.nkf("-w", "あ") p /[\x{3041}-\x{309e}]/ =~ str4
外部が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]] よろしくお願いします
最近の1.9なら [ [1,2] , [1,3] , [2,1] , [2,3] , [2,7], [4,5] ].uniq(&:first) が使える。 ないバージョンならRubyで作ろう。
・ 該当するっぽいクラスの見当をつける ・ クラスのメソッドの説明を流し見する ・ たぶんそのものずばりはないはずだが、組み合わせればなんとかなりそうなものが見つかる ・ 組み合わせる この繰り返し 初心者のときは10行くらいになることをひとまず厭ってはいけない 最初からカッコよく書こうなんて無理無駄
514 :
デフォルトの名無しさん :2010/04/18(日) 17:47:11
>>512 ありがとうございます。
あまり大規模な配列じゃないので自分で作っちゃいました。
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
RubyInstaller使ってるならアンインストールしてActiveScriptRuby入れろ
落とすのは eventmachine-0.12.10-x86-mswin32-60.gem こっちじゃないのか? アーキテクチャの整合性は知らん。
Windowsで1.91入れようと思うんですが、 ActiveScriptRuby RubyInstaller Rumix の中でどれが良いでしょうか。大きく変わらないのかもしれませんが。 ちなみに日本語環境でしか使いません。
まず、Ruby 初心者は 1.9.1 は基本的に最初に使うな
悪いこと言わないから、1.8.7 に慣れてからにしておけ
慣れるのには 2ヶ月も要らないと思う
で、Windows では ActiveScriptRuby が日本でのデファクト
ていうかこのへんは
>>6
520 :
515 :2010/04/19(月) 21:04:32
>>516 ,517
ありがとうございます。
ActivescriptRubyでやってます。
eventmachine-0.12.10-x86-mswin32-60.gem
やってみます。
>>519 どうもです。なるほどActiveScriptRubyが事実上の標準なんですね。
ちなみにRumixというのはどうなんでしょうか?
日本語で使う場合に便利という触れ込みですが。
ただ、ファイルサイズが倍以上あるので「?」な感じはしますが。
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 シェルを経由したくないのは、コマンド文字列の中に|とか>みたいな特殊文字が 入ってるとややこしいから。
>>522 ありがとうございました。初心者ですし、
そんなに凝ったプログラムをするわけではないので、
推奨どおりActiveScriptRubyをインストールしてみます。
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>
>>523 popen安定
>>525 gem install --remote eventmachine
環境おかしいな
ruby -ropen-uri -e "puts open('
http://google.com/ ').read"
がHTMLを表示しないなら、使ってるパーソナルファイアーウォールで ruby にネットアクセスを許可しろ
本当はこれも INSTALL に書かれるべきなんだけどね
>>505 \x{3041}じゃなくて\u{3041}だよ
そろそろ1.91入れても良いと思うよ。 つーか正規表現で戻り読みができない1.8xには戻る気がせん。
1.9.1本体の問題ではないということにいつになったら気づくのだろう
何言ってるの 2種類のRubyに触れるとぷちゅっと弾けて消えてしまう人もいることくらい覚えておこうね 一生のうち1種類だけのRubyは安全だけど、2種類のRubyに触れることは死を意味する
その程度ではじけるようじゃ、そもそもプログラミングに向いてないから
あほか 対象性の崩れなんか関係ない ruby world から足を洗っただけだろ
というか、プログラミングrubyの1.9verはいつ翻訳されんだよ。
ruby 1.9.1 [i386-mswin32] でrmagickは使えますか?
質問です やりたいこと:ファイルから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)
seieki = Regexp.new(mojiretsu)
>>537 ご回答ありがとうございます。
その書き方でやってみましたが、それでもエラーが出てしまいます。
>>536 Regexpにメソッドがあるからリファレンスマニュアル嫁
あほが湧いてるな。せっかく入学した学校で虐めにでもあってるのか?
542 :
デフォルトの名無しさん :2010/04/21(水) 21:05:11
>>536 エラーがあった場合どうしたいの?
mojiretsuを正規表現でなくて文字列そのままマッチさせたいんだったらRegexp.quote使うといいと思うけど
Regexp.quoteだろうね。 たぶんそれだけじゃ通じないだろうってのと元のコードも見た上での希望をエスパーすると、 /\b#{Regexp.quote(mojiretsu)}\b/ かな。
ActiveScriptRubyってWindows 7の64bitにインスコできないん?インストーラー実行するとエラる
yes
インスコ出来てるけどなぁ
>>539 ,542,543
回答ありがとうございます。
quoteをリファレンスマニュアルで調べました。
文字列をそのままマッチさせたかったので、quoteで大丈夫そうです。
本当にありがとうございました。
また、わかりやすくコードまで用意してくださってありがとうございます。
当方三週間前にputsとか知った新参です。 ウインドウを表示してランダムに表示されたセリフ とそのセリフを言った人を選択して当てる というゲームで三週間 詰んでます。 人がゴミのようだ を言った人は ムスカ ↑ランダム台詞 ↑選択できる人物名 ランダム台詞はhashとrandでなんとかできたんですが、選択人物は キーボードの↑や↓で選択できるようにしたい。 サイト巡って数字を表示するプログラムを見つけてそれを真似してるんですが、 日本語と数字では表示の仕方が違うみたいで失敗続きです。
元になったプログラムに似せたプログラムです。 これを元に台詞とか入れたいのでご指南ください。 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)
続き #ウインドウの横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 #ウインドウのループ終了
>>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
>>546 1.8.7のやつでOSは64bitです?
そだよ64bitでc:\ruby\ruby187\以下に入れた
>>551 わざわざどうもです。
>>549 ~
>>550 のプログラムを実行すると、ランダムで出てくる数字と
キーボードの上下で数が変わる数字がウインドウに出てきます。
その「数字」を「文字」にしたいんです。
>>555 文字列の部分だけ
SERIF = ['人がごみのようだ','当たらなければ','とらすとみー']
NAME = ['ムスカ','シャア','ハトヤマ']
num = ans = 0
str = "#{SERIF[num]} をいった人は #{NAME[ans]}"
あとプログラムで数値を扱う時は1からじゃなくて0から始める方が都合がいい
説明めんどくへえからウィンドウ表示用のクラスと内部計算のクラスと分けれ
アルファベットの全角半角を無視する正規表現ってどうやって実現できますか?
無視した上でどうしたいん?
全角半角どっちでもマッチするようにっていう意味かな
1.9なら[[:alpha:]]だけど……。
リテラルなら /hoge/i のように i フラグを付ける
$KCODEを指定した上で文字クラスの否定はどうなん? $KCODE = 'SJIS' /[^a-zA-Za-zA-z]/
クラスとか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
これにキボドの上下で人物名の選択 と台詞と人物が一致したら成功コメント、
ミスならミスコメントを表示したいんですが、結果として可能ですか?
クラスを使わないのはまだしも、メソッド分割くらいはしろ
こういうのはウィンドウアプリケーション部分を取っ払って構成を見極めてからウィンドウ部分を作るのが近道 とか言って作ったらなんか潰しのきかない代物になったのはおかしい 投稿用に一行に縮めた部分があるので注意 @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
webrickのエラーページを変更する方法を教えてください 標準状態だとwebrickのバージョンとか例外を起こしたクラス名等が 表示されてしまうのでこれらを消したいです
puts "#{text}" これで hogehoge みたいに出力されるとき、#{text}のtextにhogehogeが入っていて、 #{ }は代入しているという理解であってますか?
>>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
>>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になる。
>>569 String ならそのまま入る
そうでなければそのオブジェクトの to_s メソッドを行った結果が入る
puts "「#{text}」" と puts '「' + text + '」' はおおむね結果一緒だが Ruby では前者を無闇に好む
ここであえて第三の道を行くフォーマット文字列を使って個性をアピール と思ったけど > '%s: %d' % ['banana', '200'] => "banana: 200" やっぱりやめときます
>>575 gettext ライブラリを使うときはそっちがお勧め。
'hoge' + 'fuga' はバッファを継ぎ足すからメモリ使用効率が悪い&速度も遅い っていうのは本当
puts "one" << "two" << "three" のほうが「速い」というのがなんとも 連結なので文字列再利用に注意
レスしてくださった方々ありがとうございました。 どうやら自分には早かったみたいです。しばらく修行してきます
puts "" << "one" << "two" << "three" にすれば文字列再利用しても問題ない。 けど、"#{}" の方が早いんじゃないだろうか。
Sat Mar 06 18:20:37 +0900 2010 みたいな日付をunix timeに変換したいとき、正規表現ではなく、直接変換できる関数はありますか?
>>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
やっぱWindows 7の64bitにASR1.8.7入れようとするとインストール中にエラー出るわ いろいろ試してみたけどダメぽ 「このパッケージをインストールするときに予期しないエラーが検出されました。このパッケージは問題がある可能性があります。エラーコードは2902です。」 つうことで、初心者のくせに仕方なくRubyInstaller1.8.7の方を使うことになった 質問するけど許してね★ミ
target時刻まで待ちたい場合、 sleep Time.parse(target) - Time.now とすると1時間待ちで5分ずれたりします。 sleep 0.1 until Time.parse(target) < Time.now のように定期的に時刻を調べないといけないのでしょうか?
ずれない Time はシステムの時刻を読む ずれてるのはシステムの時刻
>>588 自分は
>>587 じゃないけどsleepって誤差がでかくね?
マシンに負荷が掛かっている状態でsleep(5)とかやると平気で10秒とか待たされるが・・・
つか、自分もインターバル処理をしようと思って同じ事で悩み中
(sleepで数日とか数週間待たせたら大変なことになりそうだ)
これは若干わかりにくいが、Time.parse(target) - Time.now が1時間につき5分ずれるという話ではない sleep 60*60 が1時間0分0秒のスリープにならずに数分ずれるという話だ …当たり前じゃんね、そんなの 素直にスケジューラ使え サーバで提供されてないならサーバに負担かけるな氏ね
当たり前、ではない
592 :
587 :2010/04/23(金) 19:43:21
sleepはシステム依存で精度が低いのでRubyではどうにもならないということでしょうか。
>>592 sleep を呼んだのは 1 回だけ?それともループの中で何度も呼んでる?
「起こしてくれっていったのに!」とオカンに八つ当たりする状況に似ている
どこが原因なんだか知らんけど1時間で5分ずれるて糞すぎだなw 1秒、1分ごとにチェックでいいんじゃね
s = Time.now sleep(5) # 5秒待ち e = Time.now p e - s みたいなコードを実行してみれば判るよ そのままでも誤差が酷いけどバックグラウンドで 負荷が掛かっていると笑えない状態になる
597 :
587 :2010/04/23(金) 21:03:48
>>593 sleepは1回だけの実行です。
その間、別のプロセスが20~30%ほど継続的にCPUを使用しているような状況です。
598 :
587 :2010/04/23(金) 21:11:35
時刻を定期的にチェックして調節することにします。ありがとうございました。
C#ならもっと簡単にできるのに・・・
Rubyは「楽しい」ってことが大事なんだと思う。 :PerlもJavaも駄目だったがRubyで行けた時は「楽しいってこういうことか」と納得した。
GUI作るときは苦痛でしかないけどな
Ruby で GUI は禁句
GUIアプリ以外で何プログラムするんだ?
フロントエンドの世界で生きている人は大変だなp
結局rubyのsleepの精度って結局どのくらいなの?
>>596 で30分待ったけど
1800.048342 だった
C#の方が高精度なのに・・・
608 :
デフォルトの名無しさん :2010/04/23(金) 23:57:03
初心者です ActiveRuby1.8.7をダウンロード出来たので、 デスクトップに出たruby consoleで画面を開くまでは出来たのですが、 いざ文字を表示させようというところで詰まってしまいました ruby -vでバージョン確認は出来たのですが、例えば print ("Hello\n") と入力すると 「デバイス PRN を初期化できません」と出てしまいます 検索で似たような質問はあったのですがあちらはPerlだったのでよくわかりませんでした どうかアドバイスお願いします
よし漏れも実験してみる
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
とする
なんかわかりにくかったね。こういうこと (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
612 :
608 :2010/04/24(土) 00:24:07
ありがとうございます、お陰さまで助かりました こんなつまらない質問でお手数をおかけしてすみませんでした
>>606 バックグラウンド(該当プロセス以外)で負荷を掛けた?
うちだとYoutubeを再生しながら
>>596 を実行すると11とかになるよ
SMP/SMT環境だと多重で負荷を掛けないと判らないかもしれないけど
614 :
610 :2010/04/24(土) 02:10:41
Win7 x64 / Phenom II X3 720 2.80 GHz / Mem 4GB
3600.000908
>>613 環境ぐらい示したらいいのでは
>>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 で概ね解決するけどちょっと面倒だな
cronクローンを作った時は sleep 60 - Time.now.sec ってやってたな
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です。
618 :
617 :2010/04/24(土) 08:02:08
原因分かりました httpartyは0.4.3以下が想定されていたみたいです。(新しいバージョンは 0.5.3) > gem 'httparty', "<= 4.3" 4.3以下って…これ記述ミスですね。
記述ミスではないと思う 「俺の知ってる過去のバージョンでは概ね動作するが、知らない未来のバージョンでは動作を保証しない」 というバージョン指定の仕方は普通 というか、通常、httpparty 4.3 が一緒にインストールされるはずなんだが
あーすまん Rakefile: gem.add_dependency('httparty') gem.add_dependency('activesupport') tumblr.rb require 'rubygems' gem 'httparty', "<= 4.3" require 'httparty' うん、記述ミスだな というかこれ酷いな
>>610-612 昔業務ソフトを納品した先で
パソコンからピーピー音がするんですと
仕事出来ないからすぐ来てって呼ばれて
関係ないのに渋々逝ったら
キーボードの上に物が置かれていた
(仕事は他のPCでやってるじゃねーか)
っていう出来事を思い出した
622 :
606 :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分もずれてるし
負荷というより環境の違いなのかな
とりあえず参考になりましたお二方ありがとう
ubuntuで $ptn = "/(日本語|英語)/u" $str = "日本語難しい" if Regexp.new($ptn) =~ $str then puts 1 else puts 0 end としたファイルをUTF8で保存し、端末で実行しましたがマッチしないようです。 端末で-Kuとしてもだめでした。原因はどこにあるかわかりますか?
とりあえず Regexp.new で Regexp を作るときは周りの / ... / はいらないよ あれは正規表現リテラル用
pattern = '(日本語|英語)' str = '日本語難しい' if /#{pattern}/u =~ str then puts 1 else puts 0 end グローバル変数使う人間は殴られて月まで吹っ飛べ
627 :
587 :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 氏も同じバージョンで同様の現象が起きていますので、
どこかのバージョンで修正されたのだと思います。
レス下さった方々ありがとうございました。
そういや、下らないバグがあって、u氏が何度も間違えながら直してたな。
629 :
617 :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してケロ!ってやってみればいいのかな。
手元でリビルドすればいい(まあ実質、インストールされたファイル編集するのと同じだけど) 連絡はすると好ましいが、面倒なら別にしなくてもいい
修正されないといつまでも自分でパッケージ作らなきゃならないので、 何らかの形で作者のコードに反映されるように仕向けたほうが後々楽ではある。 pull requestが面倒なら Issues に報告するだけでもOK。
エディタで編集中のファイル foo.rb のパスを渡して irbを起動し、直後に自動的にload "foo.rb"を実行して 入力待ち状態にしたいんですが そういう事が可能になるirbの引数みたいなのってないですか? デバッグ中にそういう使い方ができたら便利そうなんですが。 環境はXP+ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mswin32]
loadではなくrequireになるけど、毎回新しい irb になるなら、 irb -rfoo でいいんじゃね?
>>632 irb では基本的にはできない
ということを踏まえた上で、以下を実行
$ ruby -rirb -e "require 'date'; @today=Date.today; IRB.start"
irb> p @today.to_s
"2010-04-25"
なるほど。 メインのコードを走らせる手前で require "irb"; IRB.start とソースに書いておいてもよさそうですね。 あれこれいじってquitすればそのまま実行を継続できるからデバッグブレーク的に使えそう。 何気に神機能のような。 ありがとうございました。
レベルに低い質問ばかりだな ちょっと調べれば分かる程度の質問している奴が なぜRubyやろうと考えるのかね
日本語でおk
636「おれのレベルは99だ!」
レベル2低い。
Rubyでレースゲーム作りたいんだけどできますか?
やってやれないことはないが、 他の言語を選べるならそっちでやったほうが簡単で質も高いものが作れると思われる
>>636 >レベルに低い質問ばかりだな
>ちょっと調べれば分かる程度の質問している奴が
>なぜRubyやろうと考えるのかね
きみのような上級者には初心者の相手は苦痛だろう。
きみにはもっとふさわしい居場所があるから、初心者スレには二度とこないでね。
煽りじゃなくてマジで python がおすすめ Ruby で GUI はタブー
なんでGUIが出てくるんだよアホ せめてDXRubyとか勧めろよ
やっぱC#にしまーす
GameはGUIに含まれるんですかね 個人的には狭い範囲で GUI=ウィンドウシステム ってイメージなので Game内部では独自のウィンドウシステムを作ることはあるかもしれませんけど さすがにレースゲームの物理演算的なのをRubyでやるのは無理がありそうですが RubyでGameってそんなに非現実的ですかね Pythonなどより動作が遅くなるとしても SDLやDirectXとかのラッパーを使えば作れそうですが ただ、Gameを一本完成させるだけのやる気と根気があるのならば コンパイル型の言語でも作れるだろうし その方が処理速度に余裕がある分だけ、Game内で出来る幅が広がるでしょうけれど
ほとんどラッパーで作るなら最初からC++でやるわw
できないくせに
Rubyだけで格ゲー作りたいんだけどできますか?
必要なライブラリを全て自作すれば可能です 不可能ではないです。
ゲームだと Python の方が pygame とかあるしいいんじゃないのかな frozen-bubble は perl だよね これ perl で書けるのかって出た当時感動した覚えある
ただ、Gameを一本完成させるだけのやる気と根気があるのならば 最初からCでやる罠
今からやるならWindows API Code Pack
言い訳ばっかりだなお前ら 「やる気があれば」 こればっかw
やる気があるから非効率的でバグだらけのRubyを使う信者であった。 いいえ、ただの無能です
,―ヽ_(((((_、― ,/ ノ ヽ ~\ / ノ 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 作って。
アホなら何も書き込まなければいいのに
レベルに低い質問ばかりだな ちょっと調べれば分かる程度の質問している奴が なぜRubyやろうと考えるのかね
>>659 つまりRubyでは何も出来ないということですねわかります
高速な描画が必要ならDXRuby、ノベルゲームやスピードにこだわらなければMiyakoで。
Windowsしか使ってない人が想像できるような範囲の仕事はRubyが不得意とするところ。
Windows意外のOSなんてありえんわ
Rubyはレベルが低い人の期待に応えていないと
レベルの高い人はpython、低い人はruby
Ruby信者のように根気がない奴は他人のツールを利用するだけ
よく言われるPythonの売りに、ライブラリの充実ってのもなかったっけ? 全否定っすか
Pythonはライブラリが整備されてる感じがするけど Rubyは野良ライブラリが多いという印象
優秀ライブラリがたくさんあり、野良ライブラリも大量で活気があり怪しい → Perl 優秀ライブラリがたくさんあるが野良が少なめで大人しい → Python 優秀ライブラリはともかく野良ライブラリが大量にあって単に怪しい → Ruby Rubyは「楽しい」が、「利用しにくい」とも言える
実は Ruby はプログラム書く時間よりライブラリ探す時間の方が長い
てことで、C#最強説浮上
その人次第の適材適所なんじゃないかな Ruby は楽しいしせいぜい数十行程度のスクリプトなら 他の言語に比べてストレス感じない それ以上の場合は俺は他の言語(普通C++)で書いてる Ruby でも色々できるの知ってるけど好みや慣れもあるしね
>>674 >他の言語に比べてストレス感じない
コード書かないでWPFみたいなことができますか?
1.9からWindowsの冷遇っぷりが厳しい。
冷遇と言うより、Windows 環境のわかるコミッタが少なすぎるのが問題。
そもそものあれとして今までWindowsのサポートがアンオフィシャルででも続いてたこと自体が奇跡 かなりほうぼうに無理させまくって維持してた状態
1.9からなんかWindowsの扱い変わったっけ?
Javaプログラムをメモ帳で作ると死ぬ
>>678 そうやって築いたWindows系信者じゃなくてボランティアも
冷遇のせいでどんどん離れて逝ってる訳ですね
なにがどうアンチなのか
レス乞食はせめて隔離スレでやってくれ
自分のわからない話は他スレに誘導しようとするおっさんが常駐しています
とりあえずのあの見にくくなった新ドキュメントの改良をだな・・・
原理上Javaで出来ることはRubyでも(もう少し簡単に)できるよね? 携帯アプリぐらいならRubyで作れるんじゃ?
まあ昨今は携帯電話の画面を書き換えることができればなんでも携帯アプリだとか呼ばれるので 小さい文字のCGIあたりでなんかすれば携帯アプリと名乗っていいんじゃないかと思う
webrickでアクセスログを取る時は:AccessLogにIOオブジェクトを指定するようですが auth_server = WEBrick::HTTPServer.new({ ~, :ServerType => WEBrick::SimpleServer, :AccessLog => [[open("access.log", "a"), WEBrick::AccessLog::COMMON_LOG_FORMAT]] }) みたいに書くとファイルがクローズするまでログが書き出されず、メモリを圧迫するほか Rubyインタプリタが落ちたときにログを失う可能性があります 逐次ディスクに書き出すようにしたいのですが良い方法があったら教えてください
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?}
693 :
691 :2010/04/27(火) 21:38:54
>>692 ありがとう。その方法でやってみます
しかしサーバー側のログはWEBrick::BasicLogなのにアクセスログがIO・・・
何でこんな作りになっているんだ(´・ω・`)
Ruby 本体が Windows 環境に冷たいからこそ、 IronRuby の本を出したら売れそうだな
>>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 |
RGSS2から入ってある程度できるようにはなったんですが C++が商業系のゲームソフトでメインに使われている言語と聞いたので C++を学ぼうと思ってるんですが rubyとC++ってどちらの方がレベルが高いのでしょうか? おそらくC++が高いと個人的に思ってるのですが
,―ヽ_(((((_、― ,/ ノ ヽ ~\ / ノ IPA ヽ ~\ / ノ ヽ、 `ヽ | ノ / ̄\ / ̄~ヽ ヽ i | ノ | ノ \ | <●> <●> ( ) \ | | | i / | / ヽ レ i (●_●) / i、 ,-――-、 ・ / i、 <(EEEEE)> ∵/ お前は何を言っているんだ? i、 \ ./ / \ ーー ,ノ ,,.....イ.ヽヽ、ー-―一ノ゙-、. : | '; \_____ ノ.| ヽ i | \/゙(__)\,| i |
なんか色々へにょんとするな
>>698 レベルが高かったらどうするの?
低いって答が来たらどうするん?
言語のレベルが高いとか低いとかまた紛らわしいことをw 低レベル 言語 高レベル 言語 でググって出直してこいw
ハイクラスとかハイグレードとかにしておくべきだな
VS2010めちゃくちゃ進化してるww もう他の言語やってらんねーな
誤爆
うんRubyにもう戻ってこなくていいよwwwwww
これは恥ずかしい
みんなVS2010に流れちゃったかな?w
うんRubyにもう戻ってこなくていいよwwwwww
ダウソしてたらディスク容量足りなくなった ピンチ
Ruby使っている奴って貧乏なんだなw そりゃそだなこんな言語知ってても就職できないわなw
Rubyしか使わないって人は少ないんじゃないの?
当人が1言語しか使えないから他人もそうだと思ってるんじゃない?
とりあえずなんだ、就職頑張れよw
はい
715 :
(u_・y) ◆rT33C51l9k :2010/04/30(金) 03:26:52
なんか意味わからないキチガイをRubyの話題でよく見かけるから気になる そこの名無しを分析してみた 1 Ruby以外の言語の信者 2 Rubyでの金儲け手段に気づいていて競合を少しでもなくそうとしている 3 私怨 4 実はMatz 5 もしかしたらRubyが理解出来なかった人 6 endが大嫌い やっぱ4かな 逆に叩いて火をつけようとしてるとか
7. ごめん、私やっぱりLarryが好き
条件で0が真扱いだということを知ったときちょっと嫌いになった
0は配列のidxでも使うんだし当然だろ
偽は FalseClass のオブジェクト false と NilClass のオブジェクトnil だけです 0 も "" も [] も真です クラスの基底であることを調べたい場合は i.zero? とか str.empty? とかしてくだされ
>>717 うっせーよ
0
とだけ書いた1バイトのファイル送りつけるぞ
0が真でないなら数学の問題で0が答えの場合 0点だな
>>721 なにこの中学生みたいな発想
表示されている数はただの概念説明用識別符号で絶対ではない
テストの点数は10進の正の整数と定義付けされているだけだ
Rubyオワタ
0が真・・・んじゃ1は?
falseとnil以外は全部真 嫌ならActiveSupport入れてblank?使え
文字列が英文であるかを判定したいんですが、すでによくテストされた実装があれば教えて欲しいです。
^\w+$
,や.や(や)や-や'や
辞書つきのエンコーディング推測をしたいのだろう ライブラリはあったかなあ
>>727 です。
すいません仕様があいまいでした。
日本語か英語か判別したいです。
イズディスイングリッシュ?
Blog設置してて外国からのコメントを弾くとかそんなのだろうか
・ ASCII文字だけで構成されている ・ UTF-8 等で、日本語圏で使われている文字が1文字でも含まれているかどうか なら調べられると思う
簡易的にNKF.guessでasciiだったら英語 UTF16,UTF32だったらUTF8に変換してからもう一度 NKF.guess って思って試してみたら UTF32は判別できなかった 英語の文章でもユニコードで記号使ってるとASCIIにならんのもダメだけど
コマンドプロンプトでの出力に関しての質問です。 putsにて「◯% 完了」と表示させているのですが、◯部分のみを書き換えて 追記や改行はせずに表示させたいのです。 なにかそのようなメソッドは用意されているのでしょうか? よろしくお願いします。
puts でなく print を使い、\r(行頭に戻す文字)を使えばおk
たのしいRubyやってんだけどハッシュとかホントに使うのかよ イマイチ実感わかねってばよ
無人島にデータ構造をひとつ持っていくならハッシュという有名な言葉があってだな
O(1)で出し入れできるハッシュのエロさが解らんかっ
というかHashが速過ぎて自作オブジェクトの優位性がない とりあえずHashに格納したスクリプトの速さは異常
rubyはすんごいことが出来ますか?
単なる言語に何を期待しているんだ。
いや別にそれほどでもなく ただ、日常の「プログラミングで片付くさまざまなこと」を安楽に片付けることができるので(除くGUI操作)、 メインの「すんごいこと」に気兼ねなく注力できるようになるご利益はあるかも
家のLinuxマシンでは30個くらい自作rubyスクリプトが動作して自動でいろんなことしてるが、 この中に「すごいの」はひとつもないぞ
>>742 Hashオブジェクトは使わない日はない
Object#hash のことなら自力ではまず使わない
irb> "str".hash
987610256
普通にパソコン使っている人にはRubyは不要だな 大抵はフリーソフトで事足りる
普通にの定義にもよるが一般的にはそりゃそうだろう
>>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? が真のとき同一な値になる」ように調整すると「同じキー」として扱われる
これ、地味に邪魔なメソッド名だよね hash_value とか __hash__ とかにしてくれればよかったのに
実際問題として自作オブジェクトそのまんまをHashのキーにすることはきわめて稀なんで 目的外の動作で上書きしても多勢に問題はないんだけどさ
まともなコンテキストが提供されてないから仕方ない
イベントがある度にログを標準出力に出力するプログラムがあって、その出力するログを常に追って特定の文字列をパターンマッチで検索して、マッチしたらあるコマンドを実行したいと思っています。 そしてパターンマッチの部分をスレッドで並列に動かしたいと思い、自分でなんとか考えて書いてはみたのですが、自信がないので何かアドバイスを頂ければ幸いです。 ---- #!/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
ループ do if ファイル更新検知 then コマンドA if /パターンA/ =~ 更新部 コマンドB if /パターンB/ =~ 更新部 end end これでいいんでは
スレッドは毎回作らずに仕事専用にそれぞれ割り当てておくとか。 で、それぞれ仕事の待ち行列(キュー)を持ってて、メイン処理では 待ち行列に仕事情報をひたすら突っ込む。 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
レベル低いな この程度か
晒しage
0-9の範囲で2-4でa,b,cが数字の後に付く場合があるとします。 このときに、 3bであれば、[3,b] 3であれば、[3,nil] 5であれば、[5,nil] 7aであれば、[7,nil] のように取り出したいのですが、正規表現のパターンはどうなるでしょうか?
レベル低い質問ばかりだなー こんな奴がなんでRubyやってるの?
別に正規表現ひとつで無理しなくてもいいじゃん 配列を自分で作ればいい 正規表現だけをここで聞いたって、ちょっと変えたくなったときに即手詰まりだ
>>766 宗教活動ですか?
ネガキャンはやめてくださいね。
>>768 昼間からスレ新着再読み込み連打してる人になに言っても無駄
>>769 2分間隔でレスつけてるお前らのがすごいよw
RubyていったらC++をマスターした奴が 趣味でやるための言語だろ? 正規表現やマルチスレッドもわからないようなカスなんて SmallBasicで十分だろ
>>765 $1([0-9]{1})$2:([a-z]?{0}:{1})
[$1,$2]
>>772 SmallBasicの宗教活動ですか?
ネガキャンはやめてくださいね。
Rubyのしかも初心者スレを荒らす意図がわからん
本スレでは太刀打ちできないからだろう
>>777 現行のRuby標準ではUnicode文字の含まれたファイル名を扱うことはどう頑張ってもできない
諦める
WindowsのAPIを直に呼べばできるけど、 ・ これができる人はそもそも普通に使うのでライブラリとして残らない ・ できない人はそもそもできないからほかの手段を使う というデッドエンドな感じが… Win32::Unicode とか gem で作ってる人いないの、みたいな
>>778 >>779 レスありがとうございます
なんとかする方法はないかとずっとあがいていましたが、おかげであきらめられそうです
一応、require 'win32ole' してから ファイルの読み込みから書き出しまで全部 WIN32OLE 経由でやればなんとでもなる Ruby のクラスではなく、やりたいことに関する WIN32OLE の知識が必要
だいぶ前に 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の絵文字として直に書くこと
>>765 俺の頭じゃ正規表現だけってのは無理
a = [$3||$1,$2] if s =~ /(?:([2-4])([abc])|(\d))/
今時Unicodeもまともに使えない言語ってw
むしろWindowsのローカライズがまともじゃないとかいうことはない?
>>785 まあ、フツーに作るとUnicodeファイルを安全に読めないのはWindows側の欠陥ではある
gem にすらラッパーがないのはRubyの怠慢…でもないな、なんだろう、ユーザーの怠惰?
PythonはUnicodeファイル名にアクセスできる
PerlはWin32::Unicodeを使えば自己責任でアクセス可能
それって日本製であるが故の弊害って奴?
>>787 …半分はそう
RubyはもともとUTF-8には対応してなかった(太古の話だが)
UTF-8に対応できそうとなったときに、Windows9x用のコードとシステムを全部捨てて新しく作ればよかったんだけど
まーそんなことできんわなーだよねーですよねー
CreateFileWを使わない ruby がクソ
Wつきに変えるだけでいいなら 1.8 くらいで完了してた気はしなくもない
puts $Count[num] としたら、 unexpected tGVAR ,expecting kDO or '{' or '(' というエラーになりました。 どこが間違いでしょうか?
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です うまく入れる方法があれば教えてください
>>794 Ruby1.8.5は4年も前の不安定版です
いまさら動作するほうが不思議
自分以外のユーザーがいないのなら、ホームディレクトリでRuby1.8.7をコンパイルして使うことをお勧め
CentOSってパッケージ古いのしか入ってないよねー
安定を目指してるわりにパッケージングポリシーに一貫性が薄い まだ Debian のほうが頼れるわ 実用上は自分で rpm 作るのが基本とか CentOS の意味ねえよ
データを入れている配列aと、それのインデックス配列bがあります。 aを並び替える(降順)と後々の処理で面倒なので、bを並び替えて、それを使って呼び出したいと考えてます。 処理的にどんな感じになるんでしょうか
状況がいまいちわからないんだけど、プロプログラマーとかだとわかるのかな
呼び出し方もなにも・・・a[b[i]] じゃだめなのか プロプログラマーならわかるんだろうか
>>800 呼び出し方はわかるのですが、
インデックスの並び替えを降順に揃えるメソッドを使って上手く出来ないでしょうか?
できなければ、バブルソートで行こうと思ってるのですが
b.sort! でいいじゃないか
なーんかよくわからんがハッシュじゃなくて配列なんだよな
>>802 その解答は合ってるけど混乱しかしねえw
降順なら b.sort! {|i, j| a[j] <=> a[i] } かな
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 とエラーが出ます。引数の数が違うみたいです。
自己解決しました ありがとうございました
ちょっとスレ違いかもしれませんがスクリプトの実行時間を計る方法ありますか? ちなみにRDE使ってます
あります
教えてください
「RDEでは無理」です
>>804 b.sort_by!{|i|a[i]}.reverse!
RDEでできるのか知らんけど ruby -r profile yourscrupt.rb あるいは starttime = Time.now ... puts Time.now - starttime するのが手っ取り早い
むしろ RDE に「スクリプト総実行時間表示機能」があってもいいな というかそうでもしないとうまく動かないと思う
>>813 下のほうでできました
ありがとうございます
900近い要素を持つ配列aryをごっちゃ混ぜにしたいのですが、 ary.sort_by{rand} でやると、最初の方だけランダムになってて後ろはもとと同じです。 複数回やっても同じ状態でした。 なにかいい方法はありますか?
うむ、ごく普通には、「そうならないようによーく考えてプログラムを作る」だ! いやけっこうマジで 基本、「一発ではできない」のでとりあず素直に実装
>>817 そだな
一度考え方を自力で見つければ全部に応用が利く
ナニがランダムで、ナニがランダムにならないかの認識は最重要
while arr.size > 0 do res << arr.delete_at(rand(arr.size)) end として作った res は
ランダムな分布になれるでしょうか、みたいな
そういうのはやっぱ大学の情報系の授業をきちんと受けてれば理解できたんだろうか
>819 自分でできないやつが、教わってできるようになるかよ。 甘えるな。
821 :
デフォルトの名無しさん :2010/05/03(月) 20:21:32
sort_by{rand}は大体正しく動くと思うけど(randが同じ値を返すと微妙に偏るという問題はあるが) 何か他のところが間違ってるんじゃないかな
元のままです、なら、sort_by! 使うか、sort_by が返す配列をちゃんと受け取りなさい、 なんだけど、始めのほうだけランダムになってるってのが謎だな。
>>819 けっこうな割合で基礎知識を教えてもらえる可能性があるよ
こういうのは教科書的な基礎素養がないと、どんなに試行錯誤をしても確証が得られないから完全手探り
本当は偏ってるのか、たまたまうまくいったのか、それを確かめるのは通常「自分ではできない」
これを教科書なしで自分でできるなら学者さんになれるぞ
どっかで半分ぶっこわしてるとか
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]
>>816 とりあえず ary.shuffle ではダメなのはバージョンの都合?
>>827 このスレ、何も書いてなけりゃ1.8.7限定だし回答も1.8.7限定推奨
アルコトを可能にさせるためだけに1.9.1入れさせるとかないわー
>>826 クラス内クラスは単なる定数のスコープがネストしているだけです。
Javaのinner classにあるFoo.this のような参照は持っていないので、
Bar生成時にself(Fooインスタンス)を渡して内部で参照を持つように
してください。
>>828 1.8.7にArray#shuffleあるんだけどな。
>>826 module Foo
class Bar
end
end
でBarからFooに対してできることと同じ
だからインスタンス変数(のことだよね?)にどうこうはできない
このへんはClassがModuleのサブクラスだから
classでもmoduleと同様に名前空間にできるとかいう話
>>828 1.8.7にArray#shuffleあるでしょ
>>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
833 :
826 :2010/05/03(月) 21:26:41
>>831-832 言われた方法でできました! 超ありがとうございます。
できましたけど、すごく面倒くさいですね……
心が折れそうです。
すごく面倒くさいときは十中八九、設計が間違ってるんだぞ
うむ
836 :
826 :2010/05/03(月) 21:56:22
設計したの俺じゃないのでwww
子が親を参照するというのはまれによくある
> まれによくある ?
>>838 恐らく、「まれ」は人に、「よくある」はそいつの書いたコードに掛かっているんだろうな。
『まれに、子が親を参照するコードをよく書く奴がいる』……? 駄目だ、俺には校正仕切れない。
まぁ、何度かコード書き直したら、清書するぐらいの方がいいよ。ほっとくとスパゲティソースになる。
まれによくある、はブロント語というやつなのであまり気にしないでいい。
ラムダ式を使わなければいい
整数を格納した配列 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
なんで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
Rubyでラムダ式つかえんの?
845 :
842 :2010/05/04(火) 00:51:00
>>842 あのさ、そんなこともわからないのに
なんでRuby始めたの?
強制されているわけじゃないのなら
他の言語やったほうがいいぞ
こんな漢字? a = [] indexes = [] 100.times{a << rand(10)} a.each_with_index{|x, i| indexes << i if x == a.min}
変な人が居着いちゃったね。初心者スレ
宿題スレみたいなヤツばっか てか宿題スレよりひどいな
初心者スレなんだから質問はかまわんだろ、答えたくなきゃスルーすればいいだけ 答えもしないで初心者を馬鹿にするだけの奴は死んで欲しいけどな
849みたいなのを変な人と言ったのだが、本人は全然自覚してなかったんだな
Rubyについての質問ならいいが プログラミング初心者は勘弁
GUI否定の人でしょ?
それ織れ出汁
>>842 は、Rubyにはそれを一発でやってくれる(に近い)メソッドはあるかっていう質問じゃないの?
環境:Ubuntu 8.04 LTS on virtualbox (on winXP) ruby が 1.8.6 だったので 1.8.7 Synapticとかいうパッケージマネージャで
すみません。途中で送ってしまいました。 質問です。 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) ってのが残ってる
色をセットするのにターゲットとカラーの2つの値が必要な時に aaa.color = [target, color] aaa.color[target] = color のどちらがより望ましいですか?
>>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とは別オブジェクトには違いないからインスタンス変数にアクセスとかしづらい
>>857 gem という Ruby スクリプトをどの ruby で起動したかに完全に依存する
というか一般論としてパッケージと自力ビルドの混在はシステムに関する知識が必要
ある意味 Ruby 関係ないね
複数の Ruby を使い分けたいのなら rvm 使うといい
861 :
858 :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 になるのが変
>>860 ありがとうございます。
とりあえず gem の1行目書き換えてみて、ダメだったのであきらめがつきました。
すっぱりディストリビューション変えます。
どうせ使わないんだしパッケージのRuby1.8.6アンインストールすればいいのに
>>861 うお蛇足が役に立ってる
いいこと思いついたw
class C
def color
self
end
def []=(*arg)
puts arg
end
end
aaa = C.new
aaa.color[:target] = :color
少しまじめに[]=を使おうとしたらこうなった メソッド呼び出し方式をごまかしただけだけど、しかしやっぱりめんどくさいな 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
汚いコード張るなカス
867 :
858 :2010/05/04(火) 18:24:23
>>865 なるほど、無駄に変なクラスが露出しない分
>>865 の書き方の方がいいですね。
どうしてもコードが増えますが、ライブラリは使われて何ぼなので
ユーザーインターフェースを分かりやすくするために、この方式で頑張ります。
非常に有難うございました。
>>866 だったらとっとと綺麗なコード貼れよ
そんなお前にカスと言う権利はにぃ
いちいち反応する
>>868 みたいなバカってなんなの
自演?
ubuntuでrubyのバージョンを上げたのですが、パス関係は RUBYLIB=$PREFIX/lib/ruby/1.8:$PREFIX/lib/ruby/site_ruby/1.8:$PREFIX/lib export RUBYLIB これでOKですか?これまで動いてたのが動かなくなったので間違っていると思うのですが・・
>>870 えーと、Ubuntuのが古いからPREFIX以下に自分でいれたって言う話だよね?
もとのRubyのライブラリが入っているところは新しく入れたRubyの関知する
ところではないので(同じところに上書きすれば別)、ライブラリも一切合切
用意してください。
RUBYLIBは特に指定しなくていいはず。
つか質問は一箇所にしろ
100円に群がる乞食どもwww こういう乞食が2chの質問スレ荒らしているんだな
そういや1.9にするとrubygemも高速になるの?
>>877 はてなの金券充当は低い
払うほうは必ず1ポイント1円だが
暇で趣味じゃないと回答できん
>>878 速くなる場合と遅くなる場合があるが、
起動して重い処理かまして終了する、ということをさせた場合にはおおむね高速になるはず
ただ、起動して「即終了」するようなタイプのスクリプトだと、1.8.7のほうがたぶんかかる時間は短い
ものによっては1.8.7だと一瞬なのに1.9.1だとウンコみたいに時間がかかるみたいなこともある
なるほど。起動が以前より若干重いってことか
CPU が 1GHz 未満のマシンで Addressable/URI を require すると 1.9.1 では 1.8.7 の100倍以上時間がかかるみたいな話はどっかで読んだ あれって原因なんだったんだろう
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 1.8.7 で 1.5 秒なのに 1.9.1 では 15 秒になったとかいう場合、
悪いのはマシンの遅さではなく ruby 本体かライブラリ自身だと思われ
はじめて触ってみたけど書くのは楽なのに構文エラーがすごくわかりづらいね
うん、エラーメッセージは中途半端にわかりにくい ArgumentError とか日本人向けではない
>>874 p72は間違いだろうと思うが、1.8ではgemは標準付属品になっていないので、
そのgem1.8はUbuntuにもとから入っていたgemだ。
どの言語もなれないうちはエラーメッセージわかりにくいもんだよな
>>874 1. ruby 1.8.7-p249を入れる
2. rubygem (gemコマンド)を入れる
3. /usr/bin/gem list を実行して出てきたgemを
/usr/local/bin/gemを使って別途インストール。
下手に/usr以下のを上書きしようとせず、素直に/usr/localに入れてPATHだけ
通して使うのが一番楽だと思うよ。
>>890 ,888
ありがとうございます
結局、上書きではないインストールでやりました
お手数おかけしました
rdocでhtmlが正常に生成されず困っています。 メソッドや、 コメントを 記入して、実行してみて問題なかった プログラムを、 コマンドプロンプトから rdoc --charset= shift_jis hello.rb でhtmlを生成して、ブラウザで表示させて見ましたが、 Files: 1 Classes: 0 Modules: 0 Methods: 0 Elapsed: 0.4s こうなり、ましてメソッドが認識されません。 html上でもメソッドやメソッド詳細が表示されません。 原因はあるのでしょうか?
RubyGems のジャンル別のカタログというか、ジャンル別使用率ランキングみたいなwebサービスがあったと思うのですが、 御存知ありませんか? rubyforgeではなく別の海外サイトだったはずです
894 :
893 :2010/05/05(水) 21:15:00
あるクラス内のメソッド内で頻出の処理を関数にしたいのですが どのように定義し呼び出すのがいいでしょうか。 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()は公開する必要なし - ていうかメソッドじゃないだろこれ
でっていう
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ではできないので素直に諦める
>>897 >>898 なるほど。メソッドとして定義すること自体は普通なのですね。
とりあえず private で内部処理であることはアピールできる、と。
どうもありがとうございました。
クラスのインスタンスが解放されるときに処理をしたいのですがどのようにしたらいいですか? ENDだとスコープが違うので意図したとおりに実行されません class FOO def initialize @f = open("log.txt", "w") end END {@f.close} end foo = FOO.new みたいなことを考えています。よろしくお願いします
「インスタンスの開放」ってなに? 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!
教科書的な正しい答えとしては そんなことを考えること自体が間違ってるので普通にメソッド呼び出ししましょう ということになる
903 :
901 :2010/05/07(金) 21:01:01
まあねえ 「やろうと思えばできるが普通は間違ってる」ことの代表格のような気はする フックかけて自動でやらせようとするのがたぶん98パーセントくらいの割合で間違い 将来絶対ここでコケる
拡張ライブラリとか作ったことないのか
ここは初心者スレ
C++ の、スコープから抜けたらデストラクタ呼び出し、みたいなことをしたいのだと思うが、 Ruby ではそういうのは、 def foo obj = Obj.new yield obj ensure if obj then obj.close end end foo{|obj| obj を使う手続き } みたいにするのがよくある書きかたということになっている。
どこをマルチスレッドにしたいのかにもよるが、 構造だけ参考にしてゼロから作り直したほうがたぶん早いな…
Rubyには、JavaのConcurrentパッケージみたいなのはないでつか?
>>912 標準にあるのはMutexやConditionVariableのような比較的低レベル(部品的な意味)クラスだね。
914 :
908 :2010/05/09(日) 05:14:09
>>909 すみません、示し忘れてました。
>>910 複数のページを開くと動画キャッシュ保存や別のリクエスト終了で待機させられてしまうので、
動画をキャッシュする部分とプロキシ本体をスレッド生成して、並列処理したいです。
イメージとしてはアクセス数に応じて増減するApacheのスレッド生成みたいな。
外部動画サーバへのリクエスト数が常識範囲内だったならやる人はいるかも いないかも そもそもそういうスレでもないからなあ ある日どっかで誰かが「改造しましたー」とか出す感じ
916 :
908 :2010/05/09(日) 05:37:26
>>915 WEBrickとThread.*復習して0から再構成が妥当ですかね。
スレッド生成が関わってくると全然構成が違うものになりそうなので。
一人で使う分にはnicocache使えばいいからな。 webサービス化したいのか。動画のキャッシュサービスって帯域とか負荷対策大変じゃないか?w
>>908 デーモン化するにはNicoProxyServer.newの引数configにこれ↓を追加
:ServerType=>WEBrick::Daemon
# 最終行のWEBrick::Daemon.start(とその上のrequire)は不要なので削除
並列化というかコンテンツをキャッシュせずにクライアントに垂れ流すには
open-uriのopenやProxyContentHandlerでは実現できない
俺のやった方法ではWEBrick::HTTPResponseにも手をいれないとダメだった
まともなHTTP Proxyフレームワークは欲しいねぇ。WEBrickは逐次転送に対応していないし・・・ 自分も似たようなことを考えたことがあるけど止まっているわ('A`)
920 :
908 :2010/05/09(日) 19:26:18
>>917 家庭内の共有利用になりそうなので帯域は大丈夫です。
>>918 335行目を変更しましたが、こんなんでいいのでしょうか……
server = NicoProxyServer.new(config, conf['cache'], conf['cache_servers'], conf[':ServerType=>WEBrick::Daemon'])
ニコニコ動画由来の動画ファイル本体だけ無期限キャッシュするということを考えてます。
キャッシュ中に焦らされる状態を気にしてはいないので、逐次転送はしなくて大丈夫です。
ですが、別のニコニコアカウントで家内がログインしてこの串を同時に使った時、
キャッシュする動画が2つになって、同時にキャッシュが始まってキャッシュ完了待ちになるならまだしも、
『キャッシュ順番待ち状態』になってしまうので、それを解消したくて来ました。
逐次転送ではなく、動画キャッシュ自体の並列処理です。
質問分かりにくくて御免なさい。
>>920 > 335行目を変更しましたが(ry
違う、confじゃなくてconfig
330行から始まるハッシュに追加するんじゃ
良く知らんけどキャッシュ順序待ちはニコニコ側の制限じゃないの?
複数動画の同時閲覧(ダウンロード)禁止みたいな
IronRubyでWPF使ってGUIあプリ作ろうとしてるんですが もしかしてDockプロパティとか使えないままですか? preAlpha1だと使えないみたいですけど 1.0でもダメなんですかね・・・・
924 :
908 :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つで解決してしまうのが逐次転送ですが……。
どうしたものやら。
>>922 WPFにDockなんかない
DockPanelを使っている場合はDockPanel.SetDockメソッドを使う(添付プロパティというもの)
.NET使う以上言語の違いは無意味なのでC#の書き方覚えて.NET系のスレで聞いた方がいい
>>924 普通に使えてるが。
ubuntu9.10+sun-java6
927 :
908 :2010/05/11(火) 18:58:21
>>926 ルータが2つあって、デフォルトゲートウェイがLAN内でサーバーと普段使いと違うのですが
そのせいでしょうか……。
nicoproxy.rbはバインドアドレスを指定できるので、多分それで使えてるんだと思います。
>>927 ソフト板のNicoCacheスレではserver:deb cliant:winの報告もあるから
あっちで聞いた方が良いのでは?
929 :
922 :2010/05/12(水) 01:20:21
為替のデータがcsvで配布されてたので、rubyで処理しようと思ったら、うちのrubyは1.6.8なのでcsvライブラリが無かった。orz 一行読み込んでsplitしてちまちま読むか。処理手順考えるのまんどくせw
931 :
908 :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はどのような機能を持っているのでしょうか?
よろしくお願いします。
| じゃなくて l になってるのが気になるがw
スレ的にあまりよい書き方ではないな
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を囲むのは ' ' ではなく "" になってます
require 'open-uri' data = open(path){|f| f.read} は 「path に来るのが URL なのかディスク上のファイルパスなのか事前にわからないorどっちも受け付ける」 というような場合に使う URL 限定だということが事前にわかってるフェッチャ用途なら素直に require 'open-uri' data = URI.parse(uri).read しれ こっちのほうが速いし間違いもない
rubyで画像の指定した座標(イメージマップのような)に色をつけたり、文字を入れる処理はできますか?
RMagickとかGD2とかのライブラリで。
Rubyである必要性はないな Rubyでもできるが、Rubyじゃないほうがマシ
C/C++
ライブラリを使ったサンプルなら、JavaやPHPなんかも多そうだけど
932です。
>>933 ありがとうございます。プログラムの意味がよくわかりました。
>>934 |の出し方がわかりません・・・。
ググっても出ませんし、初心者向けを謳っている現在使用中の本には出し方が載ってませんでした。
もしよろしければ出し方を教えてください。
>>935 >>936 回答ありがとうございます。申し訳ないのですが、今の私のレベルではお二人の議論の意味がよくわかりませんので、
保存しておいて数週間後に改めて理解したいと思います。
> |の出し方がわかりません・・・。 ぱそこんのせつめいしょでもよめ マウスどう使うんですかとかキーボードどう打つんですかとかいちいちそこまで付き合い切れない
|はシフトキー押しながらバックスペースの左にあるキーで出るよ!
バックスペースがどこにあるかわかりません! いや、今たまたまひとのノートPC使ってたのでつい
質問させて下さい。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
1.9の Proc#curry だろうか。 a = lambda {|x,y,z,w| x + y + z + w } a.curry[1][2][3][4] #=> 10
949 :
947 :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多いし。いずれにせよサンクス
>>948 向上心を持てって言ってんだろ
お前のはそれ上昇志向だよ
>>852 >Rubyについての質問ならいいが
>プログラミング初心者は勘弁
このスレ的にはおまえこそ勘弁
おーっと翼くん1週間以上前のボテ球を拾いにいくこれはどうしたことだー!?
953 :
948 :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 こうなりました。勉強になりました。
954 :
947 :2010/05/13(木) 22:32:55
名前間違えました948でなく947でした
955 :
947 :2010/05/14(金) 00:19:56
たびたびすみません。xs.push(x) は xs+[x] でないとだめでした。 カリー化されたProcを2度目に呼ぶと前回のxsが継続の中に残っていて まずかったです。
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のパスを絶対パスにすれば動くようですがコーディング上不便です 相対パスのまま動かす方法があったら教えてください。よろしくお願いします
>>956 pwd = Dir.pwd
server.config[:StartCallback] = proc { Dir.chdir(pwd) }
# 956のソース正しくコピペしてないだろ
# サーバをnewした後でconfig設定しても無意味
># サーバをnewした後でconfig設定しても無意味
いろいろ読み直してみたら間違ってた
訂正すると
>>956 はこの行が無意味になってる
> server.config[:BindAddress] = '127.0.0.1'
他にもnew前に指定しないと無効な設定があるけど、それはソース読んでくれ
960 :
956 :2010/05/14(金) 17:21:50
質問です。 pメソッドで日本語表示したとき、最後の1文字だけ文字化けします。 putsは大丈夫です。 これを直すにはどうすれば良いでしょうか? 環境 windows ver 1.8.7 dos窓のコードページ 932 SJIS ソース $KCODE = "s" puts $KCODE str = "おはようからおやすみまで暮らしを見つめるテクニック" puts str p str 実行結果(dos窓) SJIS おはようからおやすみまで暮らしを見つめるテクニック "おはようからおやすみまで暮らしを見つめるテクニッ\203N"
r+で作成済みでないときにエラーが出るのは仕様ですか?
>>962 中身を消したくなければ IO::RDWR|IO::CREAT
966 :
961 :2010/05/16(日) 00:54:36
>963 >965 回答ありがとうございます。 悩んで損しました。
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 は動作します。 ということはスタティックなクラスメソッドは継承されても、モジュールメソッドは 継承されないということだと思います。何故このような仕様になっているのか教えてください。
書き間違えました。すみません。 x class Bar2 < Foo o class Bar2 < FooClass
3行目のuhoは:uhoです。すみません。
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 でインスタンスメソッドとして定義する
open("test.csv") do |file| file.each do |line| line.chomp! puts <<EOS 掲示板を作ろうとしていて、新しい書き込みが上にくるようにしたいです. 上記はプログラムの一分ですが、これのどこにreverseを入れたら良いか分かりません. 出来れば教えてください.
ストリームをワンパスでソートするのは無理だな。 結論:無理
>>971 一行ずつ処理を追うんだ
綺麗に書こうだなんてとりあえず二の次にしとけ
あと File#each は配列を返さないから Array クラスのメソッドの出番はないぞ
Array のメソッドを使いたいなら、どっかで配列を作れ
>>970 ありがとうございます。
しかし、実際にそういうことをしたいのではなく、なぜモジュールとクラスで
継承の挙動が違うのかが知りたいのです。
「クラス < クラス」の場合はクラスメソッド(クラスの特異メソッド)も継承されるのに、
「クラス < モジュール」の場合はモジュールの特異メソッドは継承されません。
今のところ僕は「モジュール関数をincludeしたときにややこしくなるから」
だと思っているのですが、、、
>>971 Ruby1.9ならeachはEnumerator返すから
file.each.to_a.reverse do |line| # File -> Enumerator -> Array -> Arrayな感じ
みたいな感じでいけるんじゃないか?確認はしてないけど。
ただ、これ一回配列に戻すってあんまりかっこよくないね。
ごめんreverseの次eachね。やっぱりかっこよくない。
>>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したいのですが。。。
>>979 hoge = A
obj = hoge.new
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 で動きました!ものすごく感謝です。
deadline.each do | a,b | c = Date.parse(b) - Date.today d = "#{a} #{b} あと#{c}日 <br>" puts d end 上記のプログラムでcを一番上に持っていきたいのですが、どうしたら良いでしょうか教えていただけないでしょうか?
deadlineはどういう構造のデータなの?
Enumerable#eachとブロック引数を見れば明らか。
Hashですね。
987 :
971 :2010/05/17(月) 02:00:49
死にたくなった
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を読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
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 をしてもインストールされない見たいです。どうすれば復旧できるでしょう?
>>990 thread.rb は libruby1.9.1 パッケージに入っている。
fullを入れるとき、半端に残っている既存のRubyパッケージを消してから入れた?
インストールされている、という情報が残っているかぎり、
それが上書き再インストールされることはない。
OSをアップデートで10.04にした人なんだろ
>>991 いけました、ありがとう
librunby1.9.1ってなんか変なところにインストールされるんですね
#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 をやっても同じエラーが出ます どなたか教えてください・・・
落ちそうだけど質問いいですか? falseか値がない場合は、 un ||= "unko" とかできますが、 同じような感じで簡単に文字列の追加はできないもんでしょうか? un << "unko" では当たり前ですが aが nil の場合エラーがでます。 (un ||= "") << "unko" とか考えたんですが、自分で書いておいてかなりギョットします。
u
m
e
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、 --イ´⌒ ''ー ''\ /
\/ 〉 ⌒彡彡彡彡ミ ミ彡彡彡彡⌒ 〈 ヽ/
ヽ ,, -‐" 彡彡彡彡ミ ミ彡彡彡彡 ゛‐- ,, /
\/ / ィ _彡彡彡彡 彡彡彡彡__ ィ \ ヽ/
"ーーーー(,,___/つミ彡彡 彡彡ミとヽ___,,)ーーーー"
( ========================)
/ ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄//_ //^\ゝ
/ ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄//_ ///== \ゝ
/ ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄//_. /// ∥ \ゝ
ⅱ ノ ̄ノノ ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ̄// ⅱ_ノ//======== \ゝ .ⅱ
.ヒ==,@==@,==@,==@,==@,==@,==@,==@,==@,==@,==@,==@ ノ人ノ ∥ ン
 ̄∥~  ̄~ ̄~  ̄~ ̄~ ̄ ̄~ ̄~ ̄~ ̄~ ̄~ ̄~ ̄~ ̄~ ̄~ ̄~∥| ̄ ̄ .∥ ̄ ̄ ∥
∥============================================.∥|=====∥==== ∥
http://www.youtube.com/watch?v=1qdlcfqTbDU ∩
| ゝ <ヽ
.─ ────=≡/ / ヽ ∨
./ i / /
───=≡. / 丿 / ノ ズザーーーーーッ 見よ!わたしの華麗なダイブ
)⌒`) ( ヽ、 / 〈
`)⌒`) \ /'' ー'' ⌒`/ヽー 、
────=≡ \/ 〉 ⌒彡彡ミミ\
`)⌒`);;;`)⌒`) ヽ ,, -‐" 彡彡彡ミヽ
`)`)⌒`) ) \/ / ィ. _彡彡彡}
──=≡;;;⌒`)≡⌒)≡≡"ーーーー(,,___/つミ彡ノ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。