3
4 :
デフォルトの名無しさん:04/01/16 21:58
rubyって終わったの?
開発中。
もう間に合わないよ
7 :
デフォルトの名無しさん:04/01/16 23:10
うんこるびきち
エスカレイヤーとアルクェイドってどっちが強いの?
いくらなんでもエスカレイヤーには負けないと思われ
ここはるびきちスレになりました。
たとえばrubyでgoogleのサイトで(
http://www.google.co.jp/)から
"ruby"を日本語のページから検索し検索結果を出力するにはどうしたらいいんでしょう?
'net/http'を使えばいいぐらいしかわかりません
> 昨日から今日にかけて、core が 3つもとれた。大漁である。
この感覚は当然とはいえ凡人じゃない。
17 :
デフォルトの名無しさん:04/01/17 14:26
>>13 その画像が使われてるページの URL キボンヌ
>>15 ほかのサイトでフォームに入力して、ボタンを押すにはどうすればいいんでしょう?
そんなに簡単じゃないのかなぁ??
>>20 何いいたいんだかサパーリだが、
自分のweb pageにGoogleの検索フォームを付けたいってことか?
まるっとrubyに関係なさそうだ。
>>23 読んだんですさっぱりわかりませんエンティティってなんだかさっぱりわからず。おてあげ
状態です。
ページのHTMLソースくらいに思っとけ>エンティティボディ
フォーム?に文字列を入力してボタンを押すプログラムがわかりません。
プログラムする動機は競馬のオッズをJRAのサイトから取得するソフトがシェアウェア
だったので、それなら勉強にもなるので自分で作ってみようと思いました
でそのとき、フォーム?に文字列を入力しボタンを押す動作で引っかかってしまいました。
そのサイトは暗証番号を入力するところなので、一般的と思われるgoogleのサイトに
置き換えて質問しました。
正直、Rubyがどうこうとか言うレベル以前の話のようなので、WebProg板に逝け。
>>26 いきなり答えが目に飛び込んでくるはずなのです。
> ウェブサーバからドキュメントを得る (GET)
> フォームの情報を送信する (POST)
googleの検索結果を吐くだけなら、
> require 'net/http'
> Net::HTTP.version_1_2 # おまじない
> Net::HTTP.start('www.example.com', 80) {|http|
> response = http.get('/index.html')
> puts response.body
> }
の文字列を書き換えるだけでできます。
ただ、26さんはHTMLのFormとHTTPの関連性がわからなくて困っているの
でしょうね。CGIを作ってみればHTTPとブラウザの挙動がどんなものか
わかるでしょうから、勉強にというのであればそちらから挑戦してみてください。
逝ってきます。
おかげさまで動くようになりました
getとpostの使い方が間違っていたようです。
バリバリの初心者なんですが動くとうれしいものですね。
>>32
うるせー
34 :
デフォルトの名無しさん:04/01/18 21:35
リファレンスマニュアルのEnumerableモジュールのとこに、
>インクルードするクラスには each が定義されていなければなりません。
とありますが、具体的にはどんな感じにすればよいのでしょうか。
class hoge
include Enumerable
def initialize
@array = Array.new
end
def each
#この中身は??
end
end
@arrayについてEnumerableなメソッドを定義してほしいのです。。
どなたかご教示よろしくおねがいします。
>>34 def each
@array.each do |a|
yield(a)
end
end
この場合ならForwardableで委譲しちゃってもいいですね。
require 'forwardable'
class Hoge
include Enumerable
extend Forwardable
def_delegators( :@array, :each )
def initialize
@array = []
end
end
EnumerableをincludeするくらいならいっそArrayから継承した方が簡単という罠
継承よりも委譲を利用したほうがいいとおもうOOなお年頃
なんで?継承したほうが簡単じゃない?
ていうか委譲って何。
>>40 今のオブジェクト指向では安易な継承は害悪とされる。
主な理由はスーパクラスとサブクラスとが密結合になりすぎる点。
ご回答ありがとうございます。
yieldがポイントなんですね。
委譲については殆ど知識がないのですが、
>>36さんのコードを見る限り
:eachで識別されるメソッドが呼ばれたときに:@arrayに処理を丸投げする、という
認識でよいでしょうか。
余り分かっていないのに使うのも後々問題が起こりそうなので、
今回は
>>35のような方法でコードを書いてみたいと思います。
あと一つ気になったのが
include Enumerable
extend Forwardable
なんですが、Forwardableをextendにするのは何か理由があるのでしょうか。
includeとの違いがうまくつかめていません。
>>41 とはいえ、継承を捨てたはずの委譲系OOPLも結局クラスに近い仕組みに戻ってき
たりしていることを考えれば、継承は結局必要なのではないかという気がする。
module Foo
def foo() p 0; end
end
class Include; include Foo; end
class Extend; extend Foo; end
Include.new.foo #=> 0
Extend.foo #=> 0
>>42 each に限らず、Ruby のイテレータは yield が肝です。
# もしくは Proc
「委譲」に関しては、ほかのオブジェクトに仕事を依頼(たらい回し?)
することならなんでもそう呼びます。
@array をデータ保持に使った時点で、データ管理を Array に委譲した
と言える…のかな?教えて偉い人。
extend なのは、 Fooのインスタンスではなく class Foo 自体を
拡張するからです。self.extend Forwardable と書けばわかりやすいかな。
self.def_delegators がやってることは class_eval で、def定義を
テンプレート化することでコードを書く手間を減らしているだけです。
>>43 必要だからというより、クラスやその継承機構(ついでにミックスインも)は、
委譲機構があれば実現可能だ(委譲機構は言語機能としてよりプリミティブだ)
ということが示されただけでは?
結局、case by caseだという、当たり前の結論。
五月雨版のhotlink、ページごとに更新取得がバラバラだね。
前のは二時間ごとに全ページが更新されてたと思うけど、
新しいのは半日遅れでやっと反映されたりするので不便。
だって五月雨ですから。それが名前の由来。
五月雨の Touch とか No... はどういう意味なの?
>>49 一日に何回もチェックする必要ないだろ?日記マニアか?
>>51 [Touch]はtouch(1)相当、[NoLM]はLast-Modifiedヘッダなし、
[NoISM]はIf-Modified-Sinceヘッダなし。
……コード読んでないから、たぶん、だけどな。
>>53 > [NoISM]はIf-Modified-Sinceヘッダなし。
ヘッダなしというより、IMSを無視されたってことだろう。
変更されてないのに304 not modifiedを返さなかったとか。
55 :
デフォルトの名無しさん:04/01/20 17:57
CUIアプリケーションについてなんだけど、linux の rpm のように
hoge ######## [ 97%]
こんな感じの同じ行が更新されるような処理はどうやって書けばいいの?
rpmのソースを読めば分かるかもしれません
>>57 さんきゅ。
そのソースみて分かったよ。
エラー出力に表示すればいいんだね。
>>58 それは激しく勘違いだと思われ。
できる限りコンソールに出力したいメッセージ…というかコンソールに出さない
と意味ないからSTDERRなだけじゃない?
>>58 def eol
if @is_finished then "\n" else "\r" end
end
>>58 おまいは入力、出力、エラー出力と略す人間か?
>>55 \r か \b つかってがんがれ。
ぐらいのことしかわかりません。すみませんごめんなさいゆるしてください。
長い行とか出力した後に消すのが面倒なんですよねこういうのって。
"\b \b\b"とかやったりして。他にいい方法があるのかもしれんが。
>>63 ANSIエスケープシーケンスに対応した端末なら \e[1K で一行消えなかったっけ?
(エスケープシーケンスなんてDOS以来だから忘れてるよ)
いろいろな環境に対応したかったら curses とか termcap 使うんじゃね?
>>62 stdin/stdoutは標準入力/標準出力、stderrは標準エラーだよな。
なんとなく最後だけ片仮名が混ざるのが気になる。
標準錯誤…?
ん、ちょっと違うか。
標準インとかいわれるほうがよっぽど気になる。
あえて日本語に訳さなくても stdin, stdout, stderr で通じる。
それは何と読むんですか?
stdioはスタジオって黙読してる。
声に出すときは、スタンダードアイオーっつってるけど。
>>68>>70 漏れは「すたどいん」「すたどあうと」「すたどえらー」「すたどあいおー」だな。
脳内で「すとぅでぃお」
エスティーディーイン
エスティーディーアウト
エスティーディーエラー
だべ。
ストぅンダ-ド イン
ストぅンダ-ド アウッ
ストぅンダ-ド エルァ
せんと・でぃん
せんと・どーと
せんと・であー
せんと・でぃお
77 :
デフォルトの名無しさん:04/01/24 02:39
$ ruby -e 'Dir.mkdir("sample_dir",0777)'
$ ls sample_dir -ld
drwxr-xr-x 2 root root 4096 Jan 24 02:33 sample_dir
なんでmodeの通りにmkdirしないんですか?
$ ruby -e 'Dir.mkdir("sample_dir2",0700)'
$ ls sample_dir2 -ld
drwx------ 2 root root 4096 Jan 24 02:35 sample_dir2
だと問題なし
$ mkdir -m 777 sample_dir3
$ ls sample_dir3 -ld
drwxrwxrwx 2 root root 4096 Jan 24 02:36 sample_dir3
なんででしょう?
$ ruby -v
ruby 1.6.7 (2002-03-19) [i386-linux]
$ ruby -e 'File.umask 000;Dir.mkdir("sample_dir4",0777)'
$ ruby -e 'Dir.mkdir("sample_dir5") ; File.chmod(0777,"sample_dir5")'
萎える程にやってられない
system使おう
どう考えてもmkdir(2)よりもmkdir(1)の方が自然だ。
>作成されたディレクトリのアクセス権は特に 指 定 が な い 場
>合、0777 (`a+rwx') から umask にセットされているビットを引
>いたものになる。
つかセクションなんてどーでもいいよ
>>80 スコアが低いってのはわかった。んで、どこが「駄目」なの?
富豪的プログラミングのようなものがRubyの思想自体に含まれてた
はずだしね。
負荷を考えるならRubyインタプリタを使うこと自体がミスチョイス。
>>80 コードの行数を考慮に入れるとだいぶ順位が上がるよ。
アルゴリズムが短くすっきり記述できるのが ruby の利点ということだ。
そういえば、1.8系は1.6系よりも高速化されたらしいねぇ。
比較したことないから、分かんなかったけど。
>>87 Stringがかなりよくなったらしいけど、ほかどうだったっけ。
89 :
デフォルトの名無しさん:04/01/25 20:55
再帰呼び出しでブロックを渡すのってどうやるんでしょうか?
def visit(dir)
...
if condition
yield(entry)
else
visit(entry) #ここ!
...
end
visit("/usr/hoge") {|entry| print("#{entry}\n"}
def visit(dir,&block)
...
if condition
yield(entry)
else
visit(entry,&block) #ここ!
...
end
visit("/usr/hoge") {|entry| print("#{entry}\n"}
>>90 できました!
どうもありがとうございます.
def visit(dir)
...
if condition
yield(entry)
else
visit(entry) do |x|
yield(x)
end
end
visit("/usr/hoge") {|entry| print("#{entry}\n")}
が好み。速度的にも上なはず
俺はyield嫌い
&blockで受けてそのまま&blockで渡すケースは中田さんのpatchがあったからそんなに速度的な差はないんじゃないかな
require 'benchmark'
def func1(arg)
if arg == 0
yield(arg)
else
func1(arg-1){|x| yield(x)}
func1(arg-1){|x| yield(x)}
end
end
def func2(arg,&block)
if arg == 0
yield(arg)
else
func2(arg-1,&block)
func2(arg-1,&block)
end
end
Benchmark.bm {|bm|
bm.report('yield'){ func1(17){|i| nil} }
bm.report('block'){ func2(17){|i| nil} }
}
----
ruby 1.8.1 (2003-12-25) [i386-cygwin]
user system total real
yield 6.569000 0.000000 6.569000 ( 7.714000)
block 1.001000 0.000000 1.001000 ( 1.196000)
ruby 1.8.0 (2003-08-04) [i386-mswin32]
user system total real
yield 11.079000 0.000000 11.079000 ( 12.875000)
block 11.312000 0.765000 12.077000 ( 13.750000)
ruby 1.8.1 (2003-12-05) [i386-mswin32]
user system total real
yield 11.094000 0.000000 11.094000 ( 12.891000)
block 2.563000 0.047000 2.610000 ( 2.953000)
ブロックだけ速くなったんだね
>>94-95 ぱっと見てcygwinのほうが速いのかと思ったw
それにしても2003-12-05って微妙なバージョンだね。
2003-12-05は1.8.1pre3ですね。せめてrelease版にageようぜ。
高速化されたのが pre2 と pre3 の間だから、わかりやすいかと思って。
ごめんウソ。
99 :
デフォルトの名無しさん:04/01/26 16:32
11章 Ruby
を勝手に書いてオラに送りつけろ
次版には載せてくれるかもよ
rubyの作者はもっとレファレンスに力入れるべき
具体的にどんなのがほしい?
いちいち長ったらしい文章一から起こすより
パクリ元が書かれているリファレンスかな。
「〜のパクリです。詳細は〜を参照。」
「ああ、あれのパクリか。」
ってすぐわかるし。
るびー初出であれば
「※この機能はるびーオリジナルです。
**MLのNo**辺りからの議論で思いつきました」
とちゃんと書いて欲しいね。
どういう経緯で取り込んだのかわかるし、
最悪そいつらに聞けばわかるから。
>>105 あとになってはそのほうがめんどくさいし、
別の言語の機能について言及されても役に立たない人はおおいと思う。
Cは例外。
>>103 あるメソッドに対するUnitTestの半分くらいの量のサンプル
と、詳細なリファレンスの説明、すべてのメソッド・クラスに一ページを割り当てる。
>>103 標準添付ライブラリのドキュメントを充実とか。
たとえばforwardableやwebrickのあたり。
リンクがあるといっても、refeやHTMLヘルプなどでのオフライン利用の
ときに役に立たないのがイタイので、単体で完結していただけると
うれしいです。
>>104 上記と同様の理由から、付加情報として記載されてるならともかく、
それだけっていうのは勘弁です。
>>105 機能も人間もだんだん洗練されていくことを考えると、初出って
あまり意味無いかも。
>>109 ほぼ同感。
どこから拾ってきたか、とか、誰がどういう経緯で思いついたか、
なんてことは使う側にとってはどうでもいい。
>>105==パクられて怒り心頭のLarry Wall
>>107 > すべてのメソッド・クラスに一ページを割り当てる。
同意
一行しか説明が無くて無駄に空白が多いようでも、その方が引きやすい
require 'vr/vrcontrol'
require 'vr/vrhandler'
class MyDrawingCanvasPanel < VRCanvasPanel
include VRMouseFeasible
def self_mousemove(shift,x,y)
if shift==1 then
@canvas.grLineTo(x,y)
else
@canvas.grMoveTo(x,y)
end
refresh
end
end
module MyForm
def construct
self.caption="canvastest.rb改"
addControl(MyDrawingCanvasPanel,"cv","canvas",0,0,400,400)
@cv.createCanvas 400,400
end
end
VRLocalScreen.showForm(MyForm)
VRLocalScreen.messageloop
でも、何も無いよりは
>>105 のほうがまし。
チュートリアルももっと充実してほしい。せめて基本機能を一通り解説
するくらいの丁寧さがほしい。(ユーザーズガイドがあるけどさ…)
Ruby に入ってくる人がおそらく最初に読むドキュメントなのだから、
開発環境のセットアップとかその辺まで解説するといいんじゃないかなぁ。
というのが知り合いに Ruby を勧めて行動を観察した感想。
ぐぐる→本家ページへ→チュートリアル→ちょっと不満そう
Win2kなんですが 環境変数?設定したあと
カレントにないスクリプトを実行させるのに -S くっつけてやりますよね?
-Sつけずに ruby hoge.rb のみで実行させる方法ってありますか?
$ man ruby
ENVIRONMENT
RUBYPATH A colon-separated list of directories that Ruby searches
for Ruby programs when the -S flag is specified. This
variable precedes the PATH environment variable.
>>116 set RUBYOPT=-S
あとはhoge.rbを元にしたhoge.batを作る方法もあり。
bin/irb.bat参照。
>>118 返事どうもです。
それどっかのサイトで エラーでるって書いてあったんですよね。
ruby: Illegal switch in RUBYOPT: -S (RuntimeError) って エラーがでました。
やりかたが 間違っているんだろうか・・・。
rb2bat.rbってのを使ってbatにするんですよね。
無理そうだったら こっちの方にしておきます。
>>109 漏れHTMLヘルプ落として使ってるけどそんなんじゃだめなの?
標準添付ライブラリは使ってないからいらないや。
ネタがないだけでは。
リファレンスじゅーよー
ウィルス
0utじゃなくて何がいいかねぇ。
n0bu
全角英数の文字とかを半角にしたりするライブラリはどこですか?
>>132 やっとわかったかちゃんと2chにレポートしとけよ
138 :
デフォルトの名無しさん:04/01/30 21:09
教えて君ですまんが、
ruby 1.6.8で、文字列中のシングルクォートをバックスラッシュでエスケープしたいんだが、うまくいかない。
"a'b"を"a\'b"としたい場合
"a'b".gsub(%q('),%q(\\\'))
みたいな感じでやると思うのだが・・・。
予知能力ライブラリはありますか?
what?
nobuをrequireしとくといいでしょう。
>>143 ときどきErrno::EAGAINが発生するんですけど。
EALRADYもあるな。
最近あんまり落書きしてくれないのね……
Rubyゲイツ
tdiary をレンタルで使っているのですけど、オプションの設定で本日のリンク元に
「はてなアンテナ」を表示しないようにすることはできますか?
レンタルならレンタル先に聞くのが確実かと。
begin-endじゃなくてendだけですむんだから、{}と比べて別にユーザビリティが低いというわけではないだろう。
おれはRubyを勉強しはじめたときにendだけで済むのを知って「Excellent!」と思ったがな(Modula2みたい)。
まあendという変数が使えないのはときどき困るかな。
matzの言う「意識のスイッチ」という視点はおもろいなと思った
さすが言語ヲタ。
>>151 エディタのマクロが書き辛い。消す時に 3 文字消すのがだるい。見た目 カコワルイ.
辺りの声が聞こえてきそう。でも、何で唐突に end?
100文字あっても一発で消えますけど。
endそれ自体の是非以前にいちいちendに突っ込む厨房が
浪費したネットワークリソースの膨大さを考えると
endの採用は失敗であったといえよう。
確かにもし { } だったら、
Perl スクリプトを Ruby のつもりで書いてぐちゃぐちゃに壊したり、
逆をやっちゃったり、という事故が絶えなかったろうな。
おれは割とRubyマンセーの方なのだが、endだけはどうもよろしくないな。
実はruby-listでだいぶ前に議論になったことがあって、matzがいうには
何らかの構文 (忘れた。caseかifあたりだったかな) でうまい構文ができなくて、
そのままずるずると end を使うようになってしまったそうな。
もともと(イテレータでない、C言語で言うのとほぼ同じ意味での)ブロックは
{}でくくる式だったらしい。
ただまあ、{}に三つの意味を持たせることになるわけでそれはそれで混乱しそうな気がする。
ひとつめは、Hashのリテラル、もうひとつがイテレータとしてのブロックって意味があるからな。
それにもうひとつ付け加えたらどういうことになるかな。
これだけ広まってしまった以上、この辺に手を入れるわけにはいかんだろうな。
やるとすればRubyからforkして別の言語としてやるしかあるまい。誰かやる?
fiだのesacだのよりはマシだと思いたい。
おれはendよりもelsifが嫌
もう散々外出過ぎ。過去ログ嫁や。ウザッ
歴史は繰り返される。
スレに活気があるのは構文ネタのおかげ!
elsif が elseif でも良くなるパッチって ruby-dev に落ちてたような。
parse.y と keywords に手を入れるだけで良かったはず。
elsifが嫌な人は elseifが良かったという人なのかな。
俺は elifがいいなぁ。shとか pythonはそうだね。
そういえばいつか、どっかのCソースにこんな修正が入ってたな…
-#elsif
+#elif
むしろ else_if とかにした方が混乱しなくなって良さそう。
>>151 おれも使い始めた当初、Pascal(Delphi)使ってたから、
endだけってのに妙に便利さを感じたよ
>>155 Pascal系の構文っていつもおなじことを言われてる気がする。
Luaも endで終わるスクリプト言語だが、話題に上がるたびに
「C互換でないのが×」って言われる。
記述数の少しの差に関しては、問題にはならん。
Delphiなど、Rubyより遥かに記述数多いけど、
if then begin end なんて、まじめに書かんよ。コード補完で一発入力。
Boolean なんてのも、addonで b(スペース) で補完。
True、 False、function、procedure も同様。
いつも C-c C-e だな。
>>170 それ初めて知ったけど、直接end打った方が速いよ
endはnが遠いので却下
rubyやluaのendの使われ方は、終端記号としての意味しかないという点で、
LISPの括弧の役割と良く似ている。
kwd 〜 end <=> (kwd 〜)
演算子など他の要素もあるので問題が見えにくいが、
単一の終端記号なので、構文エラー検出が甘くなる。
>>173 あえてそういう堅固性を捨ててまでも、記述の簡略さを
求めたのが、Rubyのスクリプト言語たる所以じゃなかろうか。
型の静的・動的と同じく。
kwd{〜} でも一緒じゃないか?
>>175 それを色んな構文に適用すると変になると思わない?
例えばkwd{〜}形式でifを表現するとこうなる。
if { <testpt> then <thenpt> [elsif <testpt> then <thenpt>][else <elsept>] }
これは(主観によるけど)おかしな区切り方に見えるので、
if <testpt> then <thenpt> [elsif <testpt> then <thenpt>][else <elsept>] end
とする方がバランス的により良いと感じるのでは。
まあ、kwd〜end形式を変な構文と捕らえる人にとっては
どれも変ということになるんだろうけど。
LISPの括弧をとっぱらった様な言語を作るとすると、
自然とrubyやluaに近い構文になるんじゃないかな。
>>172 右手のホームポジションからは1幅しか離れていないが…
endなんて0.3秒もあればタイプできるのだが
拡張ライブラリの勉強をしていて、変な場所でひっかかりました。
以下のようなのを書いて「ruby -rdummy -e '10000.times{Dummy.new}'」とかやると、ループの6千回過ぎで確実に
-e:1: [BUG] Segmentation fault
ruby 1.9.0 (2004-02-03) [i686-linux]
Aborted (core dumped)
となります。
けれどぜんぜん関係なさそうな /* here */ の行を削ると落ちません。これはどういう事なんでしょうか?
#include "ruby.h"
typedef struct {
int i;
} Dummy;
static VALUE cDummy;
static void
dummy_free(void *p)
{
rb_fix2str(INT2FIX(1),10); /* here */
}
static VALUE
dummy_new(void)
{
Dummy *d = ALLOC(Dummy);
return Data_Wrap_Struct(cDummy, 0, dummy_free, d);
}
void
Init_dummy(void)
{
cDummy = rb_define_class("Dummy", rb_cObject);
rb_define_singleton_method(cDummy, "new", dummy_new, 0);
}
#! ruby -Ks
#-- ご挨拶のプログラム
require "phi"
require "dialogs"
ok, str = phi.input_query( "名前入力", "あなたのお名前は?", "名なしの権兵衛(じゃないよね?) ")
#p ok #=> true
#p str #=> "たけ(tk)"
Phi.message_dlg( "こんにちは #{str} さん!", Phi::MT_CUSTOM, [Phi::MB_OK] )
すいません。Rubyやってるんですが、これをapolloに書いて枠の表示が出ないのはどうしてですか?
どこか間違ってるのでしょうか?
たけさ〜ん、たけさ〜ん、クッキングストップ!
>>176 自然と言う意味では Smalltalk 風のピリオドが良いと思うんだけど、いかんせん
見辛い・・・。あ、メソッド呼び出しと被るか。
pythonみたいにインデント命にしてみるとか
インデントで範囲をあらわすなんて気が狂ってるとしか思えん
そりゃ主観でしかないな
>>180 dummy_free で free(p) してないからメモリ不足になったんじゃね?
あと new を定義するより rb_define_alloc_func するのが 1.8 流。
>>182 > ok, str = phi.input_query( "名前入力", "あなたのお名前は?", "名なしの権兵衛(じゃないよね?) ")
ここが間違っている。
>>181 一晩頭冷やしたんですけど、理解できませんでした…解説きぼんぬ。
>>191 free()は入れても入れなくてもSEGVになります。
またrb_define_alloc_func()も存じていましたが、使わないほうが短かそうだったので使いませんでした。
書き直した部分を載せます。結果は同じです。
static void
dummy_free(void *p)
{
free(p);
rb_fix2str(INT2FIX(1),10); /* here */
}
static VALUE
dummy_alloc(VALUE klass)
{
return Data_Wrap_Struct(klass, 0, dummy_free, 0);
}
static VALUE
dummy_init(VALUE self)
{
DATA_PTR(self) = ALLOC(Dummy);
return self;
}
void
Init_dummy(void)
{
VALUE cDummy = rb_define_class("Dummy", rb_cData);
rb_define_alloc_func(cDummy, dummy_alloc);
rb_define_method(cDummy, "initialize", dummy_init, 0);
}
>>193 allocはこうだろ。これでinitializeいらない。
Dummy *d;
return Data_Make_Struct(klass, Dummy, 0, dummy_free, d);
rb_fix2strで落ちるのはsweep中にgcが起動するとまずいとかそんなんかな?
これ以上はruby-devで聞いた方がいいぞ。
ruby-mode(rev1.76)で
foo = "bar-#{baz}"
と書くと次の行のインデントがずれるようです。
ヒアドキュメント関連でおかしくなってるのかなあ。
ぐばーってスクリプト書いて、実行させたら最後の行でsyntax error。
どうやら、end が一個足りない模様。
一体どこだ……。
ruby-modeぐらいいれとけ
viとかメモ帳なら知らん
ruby-modeて、emacsでつか?
WindowsでEmEditor使ってるのでわかりませんです。
>196
あーそれ俺も経験ある。もどかしいんだよね。
その時の原因はなんだったか忘れたな…。
たぶんコメント関係だと思う。
なんか足りないらしくて、おそらくendが欠けてるのはわかるんだけど、
探すのにものすごく時間がかかった。
インデントをきちんとしてても、問題の箇所を特定できないんだよ。
あちこちendを挿入して、コンパイル→エラーの繰り返しだった。
前田さんもちょろっと書いてるけど、end対応がわからなくなるのって
リファクタリングしるという神のお告げだと思われ。
なんで、わからなくなるぐらい深く長くなるの?
>>194 丁寧にどうもです。脊髄反射でStringIOからパクって書きました…
書き忘れてましたが、GCが絡むことは確かなようです。
ruby -rdummy -e '10000.times{|i| Dummy.new; GC.start if i % 1000 == 0}'
とかやって定期的にGCすると落ちません。
もともとhoge_free()の中で、デバッグメッセージを表示するために
rb_fix2str()を使っていました。そんなことをすっかり忘れ、ライブラリの
benchmarkを取るために10000回くらいループしたらSEGVが。
メッセージ表示部のコードを削除したので自分は問題がなかったのですが、
自分の拡張ライブラリ側の問題か、それともRuby側の既存のコードの問題か
切り分けができなかったので質問させてもらいました。
とりあえずはこのまま書き進め、本筋で問題が出たらruby-devかruby-extで
聞いてみます。ありがとうございました。
endが足りない原因は下の部分でした。
(0...@width).each do |x| (0...@height).each do |y|
res.flags[x][y] = @flags[x][y]
end
癖で2行ケチってしまうんだよな。
end; end に直して無事動いてるよ。
module M
class C
def f
ってしたら、もうそれだけで3段じゃん
そこからeachだのなんだの入れたら5段6段はすぐ行ってしまう。
vi 使いで autoindent も使ってないけど、
end のミスマッチでエラーになることは滅多に無いな。
いつも閉じ括弧や end を先に書いてから中を埋めるように書いてるからかな。
{ } は書き忘れることはないけど、do の書き忘れは多いなぁ。
>>203 1.8 ならこんなふうに書けると思うけど。
class M::C
def f
>>203 「深さ」が問題なんじゃなくて、「わからなくなるぐらいの深さ」が問題。
書き方にもよるだろうけど、5段ぐらいならたいていわかるだろうし。
5段分を一気にendするような状況になってくるとさすがにつらいけど、
それもブロック長すぎが原因とかじゃない?
あと{ }を織り交ぜるとかは?
>>207 はげどう。
わからなくなるとかいってるやつは、後でend付けてるのかね?
ruby-mode は使ってないのか?
どうしてもわからなくなるのなら、浅い方の end に、あらかじめ
何を閉じてるのわかるコメントを付けておくのもよい。
構文の欠陥を複雑に書くほうが悪いなんて摩り替えるのはいかがなものか。
書き方の欠陥を構文のほうが悪いなんて摩り替えるのはいかがなものか。
{ } だって、( ) とかと入りくんだらだんだん見た目じゃわからなくなるぞ
endが構文の欠陥だなんて、そこからは断言できない。
必要なのは構造化エディタか、開いたらすぐに閉じる習慣。
ネストが深くなって対応する物が分からなくなるのは{}でも同じことじゃん
{}は対応するやつが強調表示されるから分かりやすいんだけど、
うちのエディタは begin end、do end は強調してくれない
それはエディタ側の実装が悪いってだけの話でしょ。
「『{}』の方が強調表示の実装が簡単だ」という主張なら
まだ同意できるけど、「『{}』でないと強調表示してくれない」
っていうのは、あなたの愛用エディタの作者に言うべきかと。
じゃあ、「『{}』の方が強調表示の実装が簡単だ」
Rubyスレend1つで活気付く
まぁ{}が使えるに越したこたぁないけどねぇ
endくらいしかRubyの気に入らないところが無いってことじゃないんかなぁ.
C++とかJavaとかPerlとかいくらでも文句の言いようがあるよね.
>>216 その辺の気持ちはわかるなぁ。
一連のend論を追いかけていて思ったのは、「本家ruby-modeが使えない
環境では快適にはrubyを扱えないの?」ってことだったし。rubyistなら
emacsは当たり前だと言われてるような気分。
しかもメインエディタがxyzzyなもんだからよけいに歯がゆい。
もっとも、本家ruby-modeをまだ体験してないっていうのと、
雪見酒さんががんばってくれているおかげであんまり気になってはいない
けども。サンクス。>雪見酒さん
endもそうだけど、ブロックコメントが書きづらいのもRubyの気に入らないところ。
>rubyistならemacsは当たり前だと言われてるような気分。
まぁmatzも「rubyよりruby-modeの方が先にできた」って言ってるしね。
詳しく知らないんだけど、pythonはemacsと相性悪そうだな。
詳しく知らないんだけど、rubyは業務での開発と相性悪そうだな。
詳しく知らないんだけど、222はrubyと相性悪そうだな。
>>219 コメントは少なければ少ないほどコードが読みやすい、
と最近思うようになってきた。
rdoc 部分だけ fold するエディタないかね。
endの対応がわからなくなったのは、構文やエディタの欠陥だとは言ってない。
実際にendの対応を見失うと、探すのが大変だって言ってるんだ。
何故だかは知らないけどね。
そりゃendの対応を「見失うのを防止」「対応を解決」するという
机上の対策はあるけど、見失うことを経験したことのない奴が
想像でものを言ったってしょうがないと思う…。
endと }が混じってると、それなりにブロック?の範囲が把握しやすい。
>>225 >実際にendの対応を見失うと、探すのが大変だって言ってるんだ。
parse error になる位置が最後の行になるからかと。
>>199=225
ちなみにそれは、{}文法だったら解決する問題?
199じゃないけど
>>228の言う「{}文法」がどんなのだかわからないので
実際の言語を例とすると、例えばJavaやC言語とかでは起りにくい。
(そのかわりelseぶら下がりなどの別の問題がある。)
これにはちゃんとしたいくつかの理由があって、
構文がkwd〜endで一貫してるということがまず一つ。
これは昔から必然的にS式を扱うLISPが抱えていた問題と同じ。
さらに、文が式として扱える事も影響している。
C言語などでは文と式は区別され、特定の場所にしか書けないという
制限を持っているため、そこに着目して構文チェックが行える。
>>229 >>199は
> endの対応がわからなくなったのは、構文やエディタの欠陥だとは言ってない。
> 実際にendの対応を見失うと、探すのが大変だって言ってるんだ。
> 何故だかは知らないけどね。
って書いてるので(228を書いた時点で見落としてたけど)、少なくとも
>>199の言ってることは、
parser が大変になるとか、そういう文法上の問題ではないんだと思う。
それじゃあ原因は何かと考えると、たとえば字面によるものかなあと思ったんで、
「end のところに } を使う(他はどうでもよい)」くらいの意味で
「{}文法」と書いてみた。
>>230 いや、自分はLISP使いなので、この問題を良く理解しています。
昔、LISPを使い始めた時に原因は何かを考えたら
>>229(の特に後者)
だったわけで。
お気づきの様に、LISPはエディタの補助無しで何の対策も取らずに
書いていくには不向きというしかなく、上で述べた文法的な「ひと区切り」
相当が存在しないため、補助無しの環境で途中で1つ式や構文を
間違うと、ファイルの始めから全てをチェックする事が必要な場合がある。
エディタの補助が期待できない場合は、少し書いては実行を
繰り返す(またはS式としてreadで読みこませる)様なスタイルを取るか、
または明示的に別の記号(例えば'['〜']'=超括弧)などに変えて、
「ひと区切り」を明示的に示すことである程度安全に書き進める
ことができる。
232 :
デフォルトの名無しさん:04/02/05 06:45
すみません、教えて下さい。
Exerb2.6.7をこれまで使ってて正常に動いていたのですが、
そこにExerb3.2.0を入れたら以下のようにエラーが出るようになってしまいました。
C:\tmp>exerb.rb
Exerb 3.2.0
Usage: exerb.rb [options] recipe-file
Options:
-c --corename specifies exerb-core name.
-C --corefile specifies exerb-core file.
-o --output specifies output file.
-z --compress enable archive compression. (using Ruby/zlib)
-v --verbose enable verbose mode.
-g --debug enable debug mode.
-V --version display version number.
-h --help display this information.
Registered Core:
C:/Ruby/bin/exerb.rb:144:in `print_usage': uninitialized constant Exerb::CORE (N
ameError)
from C:/Ruby/bin/exerb.rb:27:in `main'
from C:/Ruby/bin/exerb.rb:162
どなかか原因等わかりませんでしょうか?
End If とかって書いたら、Ifと対応しないとダメって規則にすればいいんだよ
#! ruby -Ks
require 'strscan'
while ((line=gets) != nil)
puts('') if (line == "@r\n") # 空行命令
next if (line[0] == ?@ || line[0] == ?; || line[0] == ?*)
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
↑の使い方が分からない…(;´Д`)
Rubyって事は本体インスコして何らかの作業をしないといけないんでしょうか…
>>255 あふぉか。経験したことのない幸せなやつがいるもんか。
その痛い失敗を繰り返さないよう、先に終端を書いておいたり、一気に
書かずにこまめに文法チェックかけたり、見通しの悪いコードを書かな
いようになってくんだ。
現実解を机上論だと言い切る255の発言こそが机上論なんだよ。
そもそもだれも絶対に起きないとは言ってない。被害を十分減らせると
いうだけ。
で、255はどんなコードでハマったのさ?
実際問題として、=begin =endで確実そうなところをコメントアウト
しまくって範囲を狭めた上でruby -cに食べさせれば、わりと楽に
見つかると思うけど。
指定範囲をruby -cに食べさせるlispやマクロがあってもいいな。
おれは vi 使いなんで、end の対応が取れなくなったら
二分探索で探してるよ。まずクラスの上半分をコメントアウト
して ruby -wc で試す。エラーが出たら下半分にエラーが
あるということ。と言うぐあいに、エラー個所を特定する。
二分探索だから収束は早いし、たいして大変じゃないよ。
>>235 > 指定範囲をruby -cに食べさせるlispやマクロがあってもいいな。
(require 'inf-ruby)
>>222 バリバリ業務で使ってる(つーかWebアプリの実装に使ってる)けど何か。
おまえらRDEは無視ですか。
BBSにベータ版がうぷされてますよ。
begin-end関係が強化されたぽい。
ripperは標準添付にできるほど安定してないの?
なんかruby-modeとかRDEとか、あちこちで同じ苦労してる気がする……。
ripperはrubyじゃなかったか?
ruby-mode.elはelispだから使えないだろ。
>>241 Ripperは標準添付のライブラリ(generator.rb,set.rb)のパースにも失敗する状態です。
RubyForgeのBTSに報告したけど無反応。
Ruby による Ruby のための Ruby なエディタ はまだでつか? Emacs みたいな
ユーザビリティ の低い エディタ は嫌でつ。
>>246 ないよ。
GUIに得意なWindowsを蔑ろにするからそんなことになるんだよ。
反省しろ反省を。
RDEはいいよな。使ってて安心感がある。
ユーザビリティ == GUI なのか?という素朴な疑問が……
>>239 おまえはあれか。
ももんがプロジェクトの香具師か
Webアプリ且つ業務だから、ももんがとは違う別の何かでは? 多分。
>>237 なるほどそりゃいい考えだ。いいこと聞いた。どうもありがとう!
俺はソースの所々に=begin〜=endでコメント入れてて
=begin
#=end
コメントまたはソース
=begin
=end
とかやってるから丸々コメントアウトはできなかったんだけど
そういえば#を全行頭に挿入すれば良かったんだよな。
いまどき業務でrubyつかうのはべつに珍しくないでしょ。
もちろんつかっちゃいかんところもいっぱいあるだろうけど。
perl.orgの運営とかな。
るるる。は1.9.0 CVS HEADだぞ。
初心者的質問で申し訳ないのですが
インストールした拡張ライブラリを削除するにはどうすればいいのでしょう?
>>259 rm すれ。
パッケージシステムを持ったディストリビューションを使っているなら (debian とか gentoo とか)、
アンインストールできる。
>>260 その拡張ライブラリをパッケージシステムでインストールしたかどうかだね。
debian だろうと、野良ビルドで make install したなら rm するしか。
中には make uninstall できるやつも……あるかも。
ありがとうございます。
make installでインストールしたので素直にrmします。
アイデアについて意見聞きたいんだけど、ブロックパラメータのうまい使い方ってあります?
今、いろんなソースみて3つぐらいのパターンをみっけたんですけど。
ブロックは便利なのでいいアイデアがあるなら今のうちに聞いておきたいです。
# ■1.普通に繰り返し処理系
[1,2,3,4,].each do |a| print a; end
# ■2.ためて処理系
db["aaa"] = 1
db["bbb"] = 2
db.commit()
# ↑コレを↓こんな感じに。
db.transaction do
db["aaa"] = 1
db["bbb"] = 2
end
# ■3.ブロックでないと、うまく切り分けられない内部的な処理とか
Find.find('/foo','/bar') {|f| ...}
print [4,1,3,2].sort do |a,b| a <=> b; end
休みの日くらい違うことしたら?
>>265 休みの日だからRubyなんだYO!ヽ(`Д´)ノウワァァァン
>>264 Ruby/GNOME2はsignal_connectに使ってる。
つまりコールバックだけど、ブロックだとスコープを共有できるので書きやすい。
漢字だけにマッチする正規表現ってありますか.ついでにカタカナだけにマッチする正規表現も.
全角文字にマッチする正規表現(らしきもの)だったら
ASCII表を見ながら考えた /[^ -~\t]+/ でいいと思うのですが.
文字コードの違いとか考えるとよく分からなくて.EUC決め打ちでいいです.
簡易よみがな辞書を作るための簡易形態素解析をやろうとしてます.
/[亜-瑤]+/e
/[ァ-ヶ]+/e
/(?:(?![\0-\377]).)+/e
>>272 どうもです. [亜-瑤] はどうやらうまくいっているようです.
[ァ-ヶ] は [ァ-ヶー] とした方がいいと分かりました.
'・' を入れてもいいかも.
(?:(?![\0-\377]).) が何にマッチするのか分かりません.
手元のEUCテキスト (200KB超) でscanを行っても何もヒットしませんでした.
274 :
デフォルトの名無しさん:04/02/07 20:34
>>266 イテレータって使い方のことだよね?
>オブジェクトをパラメータ化したい時は引数を渡す。
>一方、コードをパラメータ化したい時はイテレータを使ってブロックを渡す。
そのページにあった上の文のイテレータって何を指しているんだろう.
言葉の使い方間違ってない?
Ruby は長らくブロックつきメソッド全般をイテレータと呼んでいたから。
>>274 昔はブロックのことを「イテレータ」と呼んでいた。
MLのログを見ると「くり返さないのにイテレータはおかしい」
「いやゼロ回以上のくり返しなんだ」みたいな議論が見つかると思う。
今はイテレータと呼ぶのは推奨されず、ブロックと呼ぶようになった。
「ブロックのことをイテレータと呼ぶ世界で最後の人間の座は私がいただくから、
さっさとブロックと言い換えなさい。」みたいなことを著書で書いてた
ような気がする。
すまん不正確だった。
ブロック→ブロック付きメソッド(呼び出し)、ね。
ずっとRubyやってて、最近C++の勉強を始めたらiteratorというのが
出てきて、始めのうちちょっと混乱した。
>>277 自分からすすんで使わねーやつ(著者)が言っても説得力ねーっつーの
>>280 激しく日本語読解能力が劣っていますね。
明らかに、俺はずっとイテレータを使い続けるぜ!という意味ではないだろ。
なるほど.
Ruby用語ですか.
了解しますた.
世界で最後の人間の座は私がいただくから、などと気取ったことを書かずに
単に、自分も今後は使わないから、と書いた方がいいのになあ
Rubyのマニュアルで、open()の説明のところに
> "a+": "r+" と同じですが、オープン時にファイルがすでに
> 存在していれば読み書き位置がファイルの末尾にセットされ
> ます。
とあるけど、末尾にいかないみたいです。
file = 'hoge.txt'
File.open(file, 'a') { |f| print f.pos, "\n" } #=> ファイルサイズを表示
File.open(file, 'a+') { |f| print f.pos, "\n" } #=> 0 を表示
なんか勘違いしてますか?
ruby 1.8.1 (2004-01-01) [i686-linux-gnu]
>>285 +は読み書きだから。最初は先頭から読みたいだろ?
O_APPENDは、常に末尾に書き込まれるという意味で、実はseekとは別。
>>285 あれ、おかしい。CVS HEADだと、
$ ruby -v
ruby 1.9.0 (2004-02-08) [i686-linux]
$ cat >hoge.txt
hoge
hoge
$ ruby -e 'open("hoge.txt", "a") {|f| puts f.pos}'
10
$ ruby -e 'open("hoge.txt", "a+") {|f| puts f.pos}'
10
という感じなのだけど。
そのバージョンから見ると、CVSから取ってきてるんですよね。
io.cのリビジョンはいくつです?
あとできれば、
#include <stdio.h>
main()
{
FILE *fp = fopen("hoge.txt", "a+");
printf("%ld\n", ftell(fp));
}
の結果も。
$ ~/src/ruby/HEAD/ruby -v
ruby 1.9.0 (2004-02-08) [i686-linux]
$ ~/src/ruby/HEAD/ruby -e 'open("hoge.txt", "a") {|f| puts f.pos}'
10
$ ~/src/ruby/HEAD/ruby -e 'open("hoge.txt", "a+") {|f| puts f.pos}'
0
>>287の結果も0になった。
カーネルかlibcの違いってことはないか?
$ ident io.c
io.c:
$Author: dave $
$Date: 2004/01/26 13:54:29 $
$ uname -sr; rpm -q glibc
Linux 2.4.20-pre11
glibc-2.3.2-11.9
$ uname -sr; rpm -q glibc
Linux 2.4.22-1.2140.nptl
glibc-2.3.2-101.4
>>288 そうかもしれないっすね。こっちは結構古いRedhatです。
$ ident io.c
io.c:
$Author: dave $
$Date: 2004/01/26 13:54:29 $
$ uname -sr; rpm -q glibc
Linux 2.4.20-19.7
glibc-2.2.4-33
どれが正しいのか、あるいはどうでもいいのかを知るために
Cの規格のPDF落としてきたけど、いまいち読み切れない…。
# しかしいつの間にか、JISがC99に追随していたとは知らなかった。
>>289 > glibc-2.2.4-33
これかねぇ。
ちなみにそちらの環境だと、"a+"ですぐgetsできる?
$ ruby -e 'open("hoge.txt", "a+"){|f| p f.pos; p f.gets}'
0
"hoge\n"
みなさんどうもありがとうございます。
>>285 ははあ、なるほど、f.posの値に関係なく、書き込みはすべて追加書き込みになるってことなんですね。
了解しました。
>>287 こちらはfedora1です。
$ uname -sr
Linux 2.4.22-1.2140.nptl
$ rpm -q glibc
glibc-2.3.2-101.4
>>290 同じ結果になりました。
>>291 > ははあ、なるほど、f.posの値に関係なく、書き込みはすべて追加書き込みになるってことなんですね。
このへんはrubyとは無関係でUNIXシステムコールの話になるんだけど、ユーザ
プロセスでseek->writeとかやってると、その間に他のプロセスに割り込まれ
た場合、そっちの出力を上書きしてしまうことになる。だからそのへんを
atomicに処理するのがO_APPENDなわけ。
> こちらはfedora1です。
> $ uname -sr
> Linux 2.4.22-1.2140.nptl
> $ rpm -q glibc
> glibc-2.3.2-101.4
一瞬ひょっとして同じマシン!?とか思ったけど、
fedora1だったらみんな同じってだけだな。
同じ事をこういいかえられますみたいなのを
競う世界に生きてるとそうなるんじゃない。
焦って書いたので書き忘れた。
テストファイルから「今のglibc(2.3.x)の挙動が正しい」ってわかるのは、f=open("hoge.txt", "a+")した後にすぐf.getsで文字が返ってくる、という点のみですよね。
f.pos(==ftell)が0を返すのが正しいのかはよく分かりませんでした。
あと、リンク先のbug-fopena+.cを簡略化してUNIX依存部を切り落としたやつ貼っときます。
glibc-2.2.x以前では、fgets()の部分でエラーメッセージを吐くはずです。
#include <stdio.h>
#include <string.h>
int main(void)
{
char buf[100]; FILE *fp; int result = 0;
fp = fopen ("test_for_fopen.tmp", "w");
if (fp == NULL) { puts ("cannot create file"); exit (1); }
if (fputs ("one\n", fp) == EOF || fputs ("two\n", fp) == EOF) {
puts ("cannot create filec content"); exit (1); }
fclose (fp);
fp = fopen ("test_for_fopen.tmp", "a+");
if (fp == NULL) { puts ("cannot fopen a+"); exit (1); }
if (fgets (buf, sizeof (buf), fp) == NULL) {
puts ("cannot read after fopen a+"); exit (1); }
if (strcmp (buf, "one\n") != 0) {
puts ("read after fopen a+ produced wrong result"); result = 1; }
fclose (fp);
return result;
}
…って結局スレ違いな話題になってスマソ
296 :
デフォルトの名無しさん:04/02/09 00:06
Rubyではヌル文字はどう表現すればよいのですか?
"\0"?
ヌル文字はないよ。
>>297 どう表現するのかは知らないけど、 0.chr でよくないか?
0.chr == "\0" #=> true
他になんか記号使った表現方法無かったっけ?
?0かと思ったけど違いマスタ。
$ ruby -e "p ?0"
48
>>301 % ruby -e "p ?\0"
0
もういっちょ。
% ruby -e "p ?\C-@"
0
しつこいが
>>295に追加。
$ uname -sr
CYGWIN_NT-5.1 1.5.7(0.109/3/2)
な環境でも、glibc-2.3と同じ挙動
(fopen(name, "a+")の直後ではftellが0を返し、fgetsで文字が得られる。当然追記もOK)
を確認。単にこっちの環境(glibc-2.2.x)のバグでしたね。ごめんなさい。
ということで
>>285さん、
$ ruby -e 'open("hoge.txt", "a+"){|f| puts f.pos}'
0
は恐らく、こういうものです。けど書き込んだ後にf.posを見れば、
$ ruby -e 'open("hoge.txt", "a+"){|f| f.puts("hogege"); puts f.pos}'
19
などとちゃんと末尾に移動しているはずです。
初心者質問で申し訳ないのですが
illegal instructionっつて落ちるときはスクリプトが悪いのですか?それともRuby?
ruby-listがループしてる(´=ω=`)
>>305 Ruby若しくは,拡張ライブラリ。
そんなこといちいち2ちゃんに書きに来るなよ。
まあマターリ行こうよ。
個人的には、よっぽどオフトピックな内容じゃなきゃ
皆が思ったことテキトーに書いてくれる方がイイ。
Rubyスレ見てたらうんこしたくなった
うんこしてたらRubyスレみたくなった
一本糞だった。
これが本当の糞スレ
>>310 さんせー。
自分はfj.comp.lang.*の代わりにここを見てるようなもんだけど、
fjとは対極を行く感じで、マターリいきませう。
# NNTPという文化は滅びたのだろうか。カナシィ
>>314 うまいけどヤヤウケ。
WindowsXPでちょっとしたプログラムを作ろうと思ってruby
を使おうと思ったけど
(例えば、あるディレクトリにある全てのm2pファイルを自動で
aviにエンコードするVirtualDubのラッパープログラム)
windowsプログラムをつくるにはHSPのほうがわかりやすい感じがする
参考にするようなHPもUNIXで使うことを前提としたようなものが多いし
ロングファイル名の扱いもよくわからない
rubyユーザーはUNIX使いが多い感じでruby自体はわかりやすそうなんだけど
俺みたいなプログラムよく知らない奴にとっては敷居が高い
>>317 rubyに思い入れが無いならWindowsで使うメリットはほぼ無い。
Windows標準搭載のWSH&VBScript使っときな。
構文長ったらしくてうんざりするけど。
>>318 やっぱりそうですか、WSHとかも調べてみます
>>319 ロングファイルネームなんて気にしなくても普通に動作するし、
他のプログラムはevalイッパツで呼び出せるから、
>317で書いたような要件はWindowsでも楽なんだけどな・・
まあWSHでいいっていうんならWSHも勉強すればいいさ
JScriptでプロトタイプベースオブジェクト指向に触れるのもまた楽しいぞ
げめん、evalじゃなくて Kernel#`
>>321 なんで system じゃなくて ` ?
WSHでできることってたいてい、Win32OLEで書き換えれるしね。
でもrubyの入ってないシステムへの可搬性を考えるとWSHも捨てがたい。
exerbのパッケージだとコマンドラインオプションを充実させなきゃ
ならない手間もあるし。ソースのad-hocな書き換え(特に定数)が
しにくいから。
とりあえずrubyの仕様周りでよくわからないときは、irbでどんどん
試してみるのがいいよ。rubyのことはruby自身が一番よく知ってる。
でもほかの言語の方が状況に適してると思ったのなら、躊躇無く切り
替えるのが正解。
>>306-307 「発狂」だってさw
定数いじりだけなら -s 使えばラクじゃん。忘れてた。
定数じゃなくてグローバル変数だがな。
-s使うなら、
$hoge ||= DEFAULT_HOGE
とか、
HOGE = $hoge || DEFAULT_HOGE
とか。
しかし、間違ったオプション指定してもエラーにならないところがやや困りもの。
ごめんごめん、マジックナンバーとかそのあたりの意味の"定数"。
>>323 初心者だっていってる奴にリファレンスの揃ってない言語すすめるなよ。
あとで地獄見るのわかってるのに。
>>327 WSHのこと?rubyのことかとオモタ。
でもどの言語も勧めたつもりはないんだ。
日本のPythonや海外のRubyのサイトと本家のとかを比べるとなんだかあっちは充実してるなと思ったり。
隣の庭は…なんだけど、ちょっとうらやましいかも。
ただでさえ少ないリファレンスやチュートリアルがあちこちに散在してるからな。
やっぱ他人のWikiに書き込むのは敷居が高いのかな、精神的に。
オフィシャルのリファレンスだと余計に敷居が高いです
サブクラスでオーバーライド可能なクラス変数をとっととつくってください。
定数じゃないなら代入しなおせばいいだけじゃないのですか?
とっとと気づけ。
>>333 あなたはホントにクラス変数使ったことあるんですか?
クラスのインスタンス変数じゃ駄目なの?
>>335 継承しない (明示的にセットしないといけない) のでイヤ。
>>331 直接が嫌ならここに書け。
俺以外の誰かがWikiに反映してくれるだろう。
このスレはさらに敷居が高いです
なら書くなよ。
>>338 じゃあ tDiary で書いて、つっこみを待て。
[ruby-list:39141] の原先生のスクリプト実行して、
先にIEを終了してからCtrl-Cでruby をとめると
[BUG] Segmentation fault がでました。
それだけ。
test-event.rb:30:in `method_missing': Unknown property or method : `quit' (WIN32
OLERuntimeError)
HRESULT error code:0x800706ba
RPC サーバーを利用できません。 from test-event.rb:30
test-event.rb:30: [BUG] Segmentation fault
ruby 1.8.1 (2003-12-25) [i386-mswin32]
342 :
デフォルトの名無しさん:04/02/12 00:07
windowsです。
接続されてるドライブの一覧をサクッ取得できるメソッドって
ありますか?
イメージ
pc.drives.each do |drive|
print "DRIVE::#{drive}\n"
end
実行結果
DRIVE::C
DRIVE::D
win32ole+WMIではできませんか?
>>342 これしかないかも。
require 'win32ole'
systemSet = WIN32OLE.connect("winmgmts:").InstancesOf("Win32_LogicalDisk")
systemSet.each do |system|
puts system.DeviceID
end
>>343 win32ole使ったことなかったりします。
WMIはWindows Management Instrumentationだそうで(初耳)。
>>344 ありがとうございます。
こぴぺ実行し、望みの結果を得れました。
ほう。generator なのか。面白いな。
思い付いた,細かなことだが,
rand(5..10)
を
rand(10-5)+5
という動作にするのはどうだ?(上の例の境界は適当
alias __rand__ rand
def rand(o = 1.0)
case o
when Integer, Float
__rand__(o)
when Enumerable
a = o.to_a
a[__rand__(a.size)]
else
__rand__(Integer(o))
end
end
352 :
デフォルトの名無しさん:04/02/13 09:14
>>348 html-template2でも似たようなこと出来そうだが。。。
>>352 そりゃまあ、「動的にWebページを生成する」という目的は一緒なんだから、
似たようなことができるのは当然なんだが。
それをいっちゃうと、html-template2もamritaもeRubyも、どれも似たようなことが
できることになってしまわないか?
目的を実現するための手段の違いをみてくれ。
それと、テンプレートからプレゼンテーションロジックを分離できる点は
他にはない特徴だと思っているのだが。どうだろう?
#これに類するものがあるとすれば、XMLCのPresentation Objectぐらいか。
perlやperl/html-templateにも対応してくれないかなぁ。
なんつーか、中途半端で最大公約数的な言語が1つ増えた悪寒。
Rubyの拡張って形にはできないのか。
>>354 perl対応はなし。かわりにTemplate-Toolkitに対応するかも。
詳しくは明日の発表で。
>>354 これはその通り。まあ、Rubyだけを相手にしているわけじゃないんで。
ちなみに文法の参考にしたのはRubyじゃなくてVelocity。
GNU Public License じゃなくて GNU *General* Public License だよ。 (GNU GPL)
>>357 `General'と`Public'って、被ってないか?
被ってないか・・
HTMLのテンプレートってamritaとかhtml-templateとか他にもいくつかあったと思うけど
どれがいいんだろう?
どういう視点で選ぶ?
使ってみて、しっくりするもの。つまり好みで選ぶ。
循環参照って絶対悪でしょうか?
それとも、インタプリタの寿命が長くなければ気にしなくてよいもの?
> 循環参照って絶対悪でしょうか?
何故そう思うのでしょうか?
> それとも、インタプリタの寿命が長くなければ気にしなくてよいもの?
何故そう思うのでしょうか?
リファレンスカウントで循環参照を解決する方法もあるんじゃなかったっけ?よく覚えてないけど...
(どっかの)GC は循環参照が回収できないと聞いたことがあったからです。
でも調べ方が激甘だったようで、ruby-dev:17784 によると
ruby ではだいじょうぶみたいですね。
ちょうど最近の話題に GC があがっていたことですし、勉強逝ってきます。
すまん俺は「ポインタ二つでconsセルが循環してるか判定するアルゴリズム」と勘違いしていたようだ。
>>357 直しました。ご指摘ありがとう。感謝します。
#やべーまだ起きてるよ。今から寝たら、ぜったい寝坊するよなー。
>>366 それはひょっとして、
1つズラしからスタートさせて、片方は+1、もう片方は+2
ってヤツ?
>>348 ひょっとして「プログラマー天国」の中の人ですか?
370 :
デフォルトの名無しさん:04/02/14 19:31
perlの
open(HOGE,"hoge |");
@content = <HOGE>;
close(HOGE);
をシミュレートしたいのですがrubyではpopenを使うのが一般的なのでしょうか?
他に楽な手がありましたらご教示願います。
file = IO.popen("wget -nv -O - '" + url + "'");
content = file.read()
file.close()
return content
こんな漢字で自己解決してみました。
>>371 おめでとうございます。 となぜか言いたくなった。
373 :
デフォルトの名無しさん:04/02/14 22:30
正規表現の/〜/の中に変数の中身を展開したいのですがどうすればいいのでしょうか?
perlで言う
$data = "omaemona";
$_ =~ /$data$/;
みたいな感じです。
>>373 data = "omaemona"
$_ =~ /#{data}/
みたいな感じです。
375 :
デフォルトの名無しさん:04/02/14 23:34
オレの知りたいのはRubyとPerlどっちやった方がいいかってことなんだけど・・・
どっちでも。
>>375 WindowsならRubyは辞めとけ。
すごい階級差別があるから。
>>377 WindowsならPerlってことでいいですか?
ちなみにどっちが簡単?
OOPまで行くならruby、一杯参考書や資料があって普及してる
のはPerl
381 :
デフォルトの名無しさん:04/02/14 23:57
OOならPerlをすすめる
>>375 perlもwindows環境はいいものではない気がする。
windows環境との相性を優先してどちらがいいかと問われたら、
自分はrubyと答えるかも。
>>383 代入時点に解決できるならいらないです。たしか。
ここはrubyスレなので
386 :
デフォルトの名無しさん:04/02/15 00:22
どっちもダメだ。php にしろ。
perlだろうがrubyだろうが、とにかく広く浅くかじる。
で、気に入った物は深く。
Unix技術者だとperlは必ず入ってるから便利かもね。
この間、コマンドラインツールとしてかなり役立った。
言語の将来性としてみるとrubyかな。
PHPはCGIプログラミングしか身につかないからオススメしない。
>>374 ループ処理か何かで、変数dataの中身が固定ならつけたほうがよい
中身が変わるんならつけちゃ駄目
>>371 よむだけなら
content = `hoge`
urlをgetしたいなら
require 'open-uri'
content = open(url).read
今インスコしてみた。
一行野郎で使ってみた。
反応がとろい。以上。
>>390 中の人はenのほうにも名前入れてるようなので、見た感じだと外の人だと思われ。
>>389 助かります。コレってリダイレクトとか勝手に処理してくれるんでしょうか?
>>393 リファレンスマニュアルは死んでも読まない主義ですか?
395 :
デフォルトの名無しさん:04/02/15 14:08
>>394 同じようなレスしようかと思ったけど、詳細すぎたからやめた。
ところでこれってソースへのリンクしかないんだけど
勝手に解説書いていいの?
Rubyでお手軽簡単に3DのCG描くライブラリってないの?
>>397 よい。ソースコードにリンクを張っているのは
「書く暇がないのでとりあえずリンクだけ張っておくね」程度の意味。
日本語のリファレンスを書いてくれるならそれにこしたことはない。
open-uri.rb を誰が作った知らんが、マニュアル加計よ
rubyのスレッドって時分割とか書いてあるんですがプリエンティブですよね?
>>401 Thread のクラスライブラリを把握するとわかると思われ。
時間分割なのは実装上の都合で、移植性の問題だったっけ?
>>402 取りあえず、
SocketとかSystemとか呼んでる時どうも他のスレッドが走ってないっぽい。
Thread.passなんてWindows3.1を彷彿とさせるスレッド明け渡しメソッドがあったり。
怪しいです。何かが。かなり。
とりあえずopen-uri.rbの例だけ訳して書いてみたけど、
添付ライブラリリファレンスのテンプレってないのだろうか?
ReFeとかにも使うから、適当じゃダメなんだよね?
>>403 あー、C レベルでは non-preemptive。
Thread#pass は、File#close みたいなもんじゃない?
pthread使って書き直してるみたいだけど、
GCまわりでだいぶ難航してるみたいね。
>pthread使って書き直してるみたいだけど、
マジ?
これって既存のスレッドを置き換えるの?
んなことしたら既存のコードがバグバグにならない?
> んなことしたら既存のコードがバグバグにならない?
なんで?
プリエンプチヴになったら挙動変わるじゃん。
「バグバグ」になるほど変わるか?
CとかでCriticalSectionやmutexのコード全部取っ払ったらそらバグバグになるだろ
>>403 ちゃんと動くよ。
$ ruby -e 'Thread.start{loop{puts Time.now.sec;sleep 1}}; system("sleep 10")'
16
17
18
19
20
21
22
23
24
25
>>412 なんだろう?標準出力に排他制御がかかってるとかpopenしてるのがまずいのかとかなのかなぁ?
ああ、cygwinでやってます。その辺かも。
ruby-dev の 22893 の akr 先生のコメントにシビレタ。
>>413 リファレンスマニュアルは死んでも読まない主義ですか?
>>415 不完全な印象。
少なくともopen-uriにはまともなドキュメントがないので。
適当にググってみたらなんとなくスレッドセーフじゃない印象。
ttp://www.rubycgi.org/cgi_explanation/2-6.htm を参考に、outtest.txt に Hello world! と書こうと
outflie = open("outtest.txt","w");
outfile.print "Hello world!"
outfile.close
を実行してみましたが outtest.txt というファイルができただけで
書き込みはできませんでした。どこが間違っているのでしょうか?
>>417 > outflie = open("outtest.txt","w");
変数名 のスペルミス?
それってぬるぽで落ちないの?
NameError で例外
当然
undefined local variable or method `outfile' for main:Object (NameError)
になるけど?
そこを修正しても、
> outfile.print "Hello world!"
と最後に改行がないから、cat outtest.txt しても、シェルによっては
表示されないかもしれんが。
あ゙〜〜〜あほですた。すんませんでした。
shim 1.8.1 まだー?
427 :
デフォルトの名無しさん:04/02/16 00:29
>>428 >>429 >>430 サンクス
でもオレには難しすぎるぜ
もっと2・3日で大枠が分かるようなのが欲しいのだ。
やっぱり本買うしかないのか。でも高いんだよね。
>>432 何か他の言語を使ってるなら、
リファレンス読めば 2、3 日で何となくわかると思うけど。
プログラミングに明るくないなら本読んでも同じ。
でもRubyの本って絶対無料では公開しないよね。
意外とケチなんだね。
>>436 Programming Ruby なんか思いっきり無料公開されてるわけだが。
あ、釣られちった。
win32oleとruby-graphvizで
登録されてるCOMの継承ツリーをグラフ化してみそ
英語じゃん駄目じゃん
>>438 Perlほど読みにくい書き方ができないから、他人の(小さめの)コードを
リファレンス引きながら読むのがおすすめ。Perlでプログラミングそのものの
知識をすでに持っているならそれでけっこうなんとかなるはずです。
>>436 RHGマダー?
>>442 そうか?
Perlのへんてこ変数がそのまま継承されてたり糖衣構文多かったりendと{}の使い分けが微妙だし。
444の言う「Perlのへんてこ変数」って $(記号) のこと?
オレは $1〜 くらいしか使わないんでそんなに気にならないけど。
本当は Regexp.last_match.foo を使った方が OO っぽくてキレイだと
(個人的に)思うんだけど、Regexp.last_match って長すぎるんだよなあ。
かといっていい代替案も思いつかないし……。
また字面ネタですか・・・
$1ってPerl由来じゃないんですが
釣れてますね
>>444 継承されたかどうかではなく「スパゲティが生成されまくっている」か
どうかが問題です。
そしてそれは文法よりも、グローバル変数と $_ などの存在が
一番の原因だと認識しています。use strict; がデフォルトなら
Perl もそこまで酷いものじゃないはずだけれども。
とりあえず経験論として、Perl に比べてハズレを引く確率がかなり
少ないです。
>>446 こんな感じでどうかな?
if md = /(.*)/.match(str)
p md[1]
end
存在っていうか、当たり前に使われているってことね。>一番の原因
>>451 case str
when /(.*)/
p $1 # Regexp.last_match[1]
end
ここで $1 使っちゃうんで、他の場所でも使っていいかぁって気になってしまう。
>>453 > ここで $1 使っちゃうんで、他の場所でも使っていいかぁって気になってしまう。
perlじゃないんで、$1を排除した方が速いなんてことはないぞ。
ワンライナーのとき以外 $_ 系の変数を禁止するとか
English.rb組込み化?
50以上新着レスがあったから何かと思った。
プチ盛りあがってたのね。
$0 だけ排除できない。
スクリプト言語は如何にradができるか。美しさだとか指向とかはどうでもいいよ。
>>458 $ fgrep '$0' lib/English.rb
alias $PROGRAM_NAME $0
Mix-inってなんですか?
すでにあるクラスに継承せずに機能を追加することですか?
たとえば↓のような感じ
class Kernel
def Sanders()
print "かぁーねるサンダース!!鳥インフルエンザで申し訳ございません"
end
end
464 :
デフォルトの名無しさん:04/02/17 00:17
rubyでGUI作りたい(オセロとか将棋を作ってみたい)んですけど
ruby/tk,gtk(その他?)のどっちでやるのがいいんでしょう?
467 :
デフォルトの名無しさん:04/02/17 01:48
Apolloも加えてみる
468 :
デフォルトの名無しさん:04/02/17 02:15
>>468は、やれば出来る子なんだからもっとがんばれ。
471 :
デフォルトの名無しさん:04/02/17 04:00
これ公開してもユーザーは増えそうにないな・・・
初心者が読んだら、すぐにお腹一杯になるかも。
というか本を発売直後に買ったけど
挫折してほったらかしになってる
>>462 うい。ありがとう
とりあえず、Mix-inと呼ばれているrubyのソースコード読んでくる
というか、Rubyの中の人を紹介してもユーザとしてはどうでもいいと思う。
クラス変数に特異メソッドからアクセスすることはできませんか?
class Circle
@@PI = 3.14
def initialize(r)
@radius = r
end
end
cir = Circle.new(10)
def cir.area
@@PI * @area * @area
end
こんな風に使いたいのですが,
in `area': uninitialized class variable @@PI in Object (NameError)
初期化されてないって怒られてしまいます.
これではダメ?
class Circle
PI = 3.14
def initialize(r)
@radius = r
end
end
cir = Circle.new(10)
def cir.area
Circle::PI * @radius * @radius
end
>>478 どうも.
もちろんそっちの方がいいんですが,
さっきの例はやってることに意味はないです.
「クラス変数に特異メソッドからアクセスすること」ができないのか,
なぜなのかが知りたかったのです.
クラス変数はサブクラスからもインスタンスからも参照できるので,
特異メソッドからも参照できることは自然だと思うのですが.
class Circle
@@PI = 3.14
def initialize(r)
@radius = r
end
attr_accessor :PI
end
cir = Circle.new(10)
def cir.area
self.PI * @radius * @radius
end
まぁでもattr_accessorが使えるようなので,特に困ることはないですね.
>>479 それだと@@PIじゃなくて@PIを参照するからNoMethodErrorになるぞ。
ruby-listで聞けば正しい答えが返ってくるだろう。
>>480 あれ,ほんとだ…
こうしないとだめか.
class Circle
@@PI = 3.14
def self.PI
@@PI
end
def self.PI=(value)
@@PI = value
end
def initialize(radius)
@radius = radius
end
end
def cir.area
Circle.PI * @radius * @radius
end
MLはなぁ…
ヘタレな俺はちょっと質問しずらいです.
でもエライ人もここ見てるんでしょ?
それとも知っててもここだと答えにくいってことかな.
ここでの質問にいつも相手してると、そのうち MLが機能しなくなっていくし。
ここで相手することとMLが機能しなくなるのはあまり関係ないじゃないかな。
むしろここみたいに気軽なところを活かした方が活性化するような…
そのくらいの気軽さでruby-listに投げればいいと思われ
客の奪い合いカコワルイ
お客さんは (゚听)イラネ
>>481 全然ヘタレな疑問じゃないと思うけど。
というか一部の人はここもlistも見てるけど,ここに答えてくれる人は少ないよ。
情報共有を重視する立場だと検索しづらいここは投稿したくないし。
# ×しずらい ○しづらい
>>477 たんにコンテキストの問題なので、
下のようにすればできないことはないですね。
class Circle
@@PI = 3.14
def initialize(r)
@radius = r
end
end
$cir = cir = Circle.new(10)
class Circle
def $cir.area
@@PI * @radius * @radius
end
end
cir.area => 314.0
クラス変数は最近導入されたので仕様の欠陥かも。
クラス変数って使い時がよーわからん。教えて偉い人。
× Rubyはクラス変数が使えるのか。じゃあ使おう。
○ これはクラス変数を使うと実現できるのか。じゃあ使おう。
だから使い時がわかるまで使わなくていいよ。
スマソ、質問が悪かった。どんなときに使ってる?
ほとんど使ってない。
例えば、三山崩しみたいなゲームを解かせるときに
山の状態を表すクラスを作って、クラス変数には
計算済みの山の状態が、先手必勝だったか後手必勝だったかの
フラグを入れておいたりとかいう使い方をしている。
良い使い方なのかどうかは知らない。
クラス変数は安易に使わない方がいいよ。
増やせないからね。
増やせないとはつまりどういうこと?
>>495 ゲームを Thread で複数同時に解かせてたりしてても大丈夫でしょうか?
>>498 そのへんまったく考えてないダメダメなコードの実例がlib/rexml/encoding.rb。
特に問題なさそうな気がするんだけど気のせいかな……。
Threadはほとんど使わなくて知識がないので何とも言えない。
あるCGIに対して、POSTメソッドでファイルを送信したい、つまり
ブラウザでファイルを送信するのと同じことをしたいのですが、
Net::HTTP#post() の第2引数に何を指定したらよいのかわかりません。
str = File.open('hoge.txt') { |f| f.read }
require 'net/http'
http = Net::HTTP.new('192.168.0.1', 80)
resp_header, resp_body = http.post('/cgi-bin/upload.cgi', str)
なんか、ファイルのデータをそのまま指定したらダメみたいです。
マルチパートにするんじゃないかと思うんですが、やり方がさっぱり。
すみませんが、おしえてください。
>>495 勘違いしてるかもしれないけど、その情報はclass Computer < Playerに
持たせたほうがよいと思われ。
それはともかくその使い方も、classのインスタンス変数で十分じゃない?
サブクラスで代入するとスーパークラスにも影響するという性質のよさが
わからないんだ。グローバル変数並に扱いにくいし。
メソッドのように
* 継承はする
* 変更がスーパークラスのインスタンスに影響しない(逆流しない)
なら使い時があるんだけど、こうなってない理由って一体?
>>501 リファレンスのCGIのところにリンクあり。
>>502 いや、リファレンスのCGIのところにあるリンクは、ブラウザから送られてきたファイルを
サーバ側「で」読み込む例だよね?
おれがやりたいのは、サーバー「に」送り出すこと。
504 :
デフォルトの名無しさん:04/02/18 19:47
1.6から1.8に上げようと思うんだけど
MySQL/Ruby と Ruby/MySQL って
どっちを使うべきなんですか?
1.6で使ってきたMySQL/Rubyって1.8.1でも動くのかな?
うーん、こんな感じかなー。
filename = 'hoge.txt'
str = File.open('hoge.txt') { |f| f.read }
name = 'upfile'
cont_type = "text/html"
boundary = 'foooobarrrbazzz'
### データ
data = <<END
--#{boundary}
Content-Disposition: form-data; name="#{name}"; filename="#{filename}"
Content-Type: #{cont_type}
#{str}
--#{boundary}--
END
### ヘッダー
header = {
'Content-Length' => data.length.to_s,
'Content-Type' => "multipart/form-data; boundary=#{boundary}",
}
require 'net/http'
http = Net::HTTP.new('192.168.0.1', 80)
resp_header, resp_body = http.post('/cgi-bin/hoge.cgi', data, header)
もうちょっとでうまくいきそう。でもわからん。
>>503 [ruby-list:25399]に「送り出すテスト」も含まれてる。
まあRFC1867でも見てくれ。
>>502 クラスのインスタンス変数なんてものがあるなんて知らなかったよー。
確かにクラスのインスタンス変数でも十分でした。
アドバイスありがとう。ためになりました。
>>505 "\r" をいれたらうまくいった。
### データ
data = <<END
--#{boundary}\r
Content-Disposition: form-data; name="#{name}"; filename="#{filename}"\r
Content-Type: #{cont_type}\r
\r
#{str}
\r
--#{boundary}--\r
END
最新のNoraだと、そういうアップロードなんかも簡単に出来るようになってる。
require 'web/agent'
agent = Web::Agent.new
agent.setup
file = Web::Common::FileData.new('test.txt','text/plain')
file.path = '/home/xxxx/test.txt'
agent.req['name'] = file
agent.post('
http://example.com/upload.cgi')
>>504 MySQL/Ruby も動くと思うよ。
少なくとも、1.8.0 では動いている。
とりあえず、どっちも試してみて、損はないと思うけど。
>>493 あるクラスを継承したすべてのクラスで共有できる変数がほしいとき。たとえばuri.rb
Rubyって拡張の標準規格無いの?
TclでいうところのTEAみたいなの。
>>512 uri見たけど、これクラス定数でいいような。
定数に破壊的な変更をするのは少々気持ち悪いけど、かといって
クラス変数ならではとは言い難い。
…もしかしてクラス変数ってそんなもの?
>>514 定数とか変数という呼び方にとらわれすぎると気持ち悪くなりますね。
Ruby用語で、
なんとか変数と呼んでいるのは1つのオブジェクトにバインドされた名前のうちのひとつ。
定数と呼んでいるのは、「変数」のうち別のオブジェクトにバインドを変えられないもの。
いまいちへぼい説明でスマソ
間違えた。定数も変えられるみたいだから、
定数と呼んでいるのは、「変数」のうち別のオブジェクトにバインドを変えると警告されるもの。
こうかな?
>>511 どもです
ruby-dbi経由ですがMySQL/Rubyちゃんと動いてるっぽいです
1.8に上げて出るwarningの方が大変だった
519 :
デフォルトの名無しさん:04/02/20 16:11
Rubyでコネクションプーリングを実現するライブラリ等があったらそれも教えてください。
>>521 おおー。灯台下暗し。
CGIKit試してる過程で、EOFみたいなツールあったらいいなと思って探してたんだけど、
同じ作者が作ってたんだね。
ありがとう。見つけられなかった自分に鬱。。。
>>519 軽量級だと moonwolf さんの dbiclass
重量級だと vapor (PostgreSQL 限定)
C:\>ruby -rbigdecimal -e "p BigDecimal('1')**2.0"
-e:1:in `**': wrong argument type Float (expected Fixnum) (TypeError)
from -e:1
C:\>ruby -rbigdecimal -e "p 2**BigDecimal('1')"
-e:1:in `**': wrong argument type BigDecimal (expected Fixnum) (TypeError)
from -e:1:in `**'
from -e:1
このあたりのエラーって今のところ諦めるしかないんでしょうか
mod_rubyで次のようなスクリプトを実行しました。
#!/usr/bin/ruby
print "Content-Type: text/html\r\n\r\n"
print "<html><body>\n"
print "<h1>Hello World!</h1>\n"
print "</body></html>\n"
そしたら、こんなエラーがでてうごきません。
/usr/lib/ruby/1.8/apache/ruby-run.rb:53:in `load': loading from unsafe file /var
/www/html/test.rbx (SecurityError)
from /usr/lib/ruby/1.8/apache/ruby-run.rb:53:in `handler'
apache/ruby-run.rbの53行目はこんなかんじ。
45 module Apache
46 class RubyRun
47 include Singleton
48
49 def handler(r)
50 status = check_request(r)
51 return status if status != OK
52 filename = setup(r)
53 load(filename, true)
54 return OK
55 end
だれか、SecurityErrorが出ている原因とその解消法を教えて。
>>525 > /usr/lib/ruby/1.8/apache/ruby-run.rb:53:in `load': loading from unsafe file /var
> /www/html/test.rbx (SecurityError)
> from /usr/lib/ruby/1.8/apache/ruby-run.rb:53:in `handler'
親ディレクトリ /var /var/www var/www/html のどれかが、誰にでも書き込み可能になってる。
>>524 どっちもBigDecimal#**がFixnumしか受け付けてないから。
作者にいってみれ。
登録したWebサイトに連続でアクセスするような処理(アンテナみたいな)をしたいのですが,
やたらCPU食って時間かかって結局エラー出ちゃいます.
/usr/lib/ruby/1.8/net/protocol.rb:197:in `rbuf_fill': socket read timeout (60 sec) (Timeout::Error)
以下のようなコードを書いたのですが,何か問題ありますか?
IO.foreach(@url_file_name){|url|
url = url.chop
uri = URI::parse(url)
Net::HTTP.start(uri.host, 80) {|http|
# head check
res = http.head(uri.path)
modified = res["Last-Modified"]
}
}
タイムアウトを拾ったら?
begin
res = http.head(uri.path)
modified = res["Last-Modified"]
rescue Timeout::Error
end
例外はともかく、ここが気になる。そんなもんだっけ?
> やたらCPU食って
>>530 そんなことはないはずだが。
せめてruby -vくらいは出してくれんとなんとも。
>>526 さんくす!そのとおりでした。
でもこれって常識なのかな?前のバージョンのApacheではこんなことなかったとおもったのに。
しかも、このエラーメッセージでGoogle検索しても、なんかうまくヒットしなかった。
>>532 Apacheではなくて、mod_ruby由来の$SAFE==1が原因なのは気がついてる?
>>529 どうも.TimeoutErrorは出てないようです.
でも例外って捕捉しない場合プログラムはエラー吐いて停止するんじゃないですか?
>>530,531
すみません.http.bodyもやってて,それ消したらCPUはさほど消費しなくなりました.
でもまだ時間は相当かかります.
56個のサイトを順番にheadしてくと1分以上かかりました.
Cygwinだからってのもあると思いますがこんなもんですかねぇ…
Rubyのバージョンは1.8.1です.
>>534 設定値の 60 秒以内に TimeoutError 出したら、そりゃ socket の
怠慢だわな。というか質問が悪いよ。529だって「巡回が中断されて困る」
んだと思って回答してくれたんだろうし。
> 56個のサイトを順番にheadしてくと1分以上
スレッドなしで 1 second/request はまずむりでしょ。
あと、ruby -v を意訳しないこと。日付すらじゅーよー。
>>529 >>535 すみませんでした.
自分でもどの辺がまずいのか全くわかってない状態で質問してしまいました.
>スレッドなしで 1 second/request はまずむりでしょ。
そうなんですか.ちょっと意外でした.
WWWCなんかかなり高速だったと思いますが,
あれはスレッドのおかげってことでしょうか.
>あと、ruby -v を意訳しないこと。日付すらじゅーよー。
了解しました.
ruby 1.8.1 (2003-12-25) [i386-cygwin]
cygか・・・orz
>>536 お湯が沸くのをじっと待ってるタイプと見た。
料理ヘタでしょ?
>>538 2つ年上の彼女が何でもやってくれるんでそうでもないです。
何でもやってくれる年上の彼女禁止。ヽ(`Д´)ノ
>>536 > >スレッドなしで 1 second/request はまずむりでしょ。
> そうなんですか.ちょっと意外でした.
どこがボトルネックになってるか分かってる?
サーバに対してリクエスト投げてるんだから、
相手が返事してくんなきゃ進みっこないんだよ。
> WWWCなんかかなり高速だったと思いますが,
> あれはスレッドのおかげってことでしょうか.
WWWCって知らんのだけど、これ?
http://www.nakka.com/wwwc/ http/http.cで名前解決にスレッド使ってるようだが、
メインは単純にコールバックで処理してるように見える。
ちゃんと見てないんでよく分からんが。
むしろプログラミングもやってもらいなよ。
遠回しだったとはいえ、せっかくのヒントを。。
いや,やってますよ.
スレッド5個作って回すと20秒くらいに縮まりました.
ただまだ原因不明の例外捕捉ミスがたまにあるんですが…
def check(url)
page = Page.new; page.url = url; uri = URI::parse(url)
return nil if uri.scheme != "http"
port = uri.port ? uri.port : 80
Net::HTTP.start(uri.host, port) {|http|
http.read_timeout = 5
begin
res = http.head(uri.path)
modified = res["Last-Modified"]
if modified != nil then
page.last_modified = DateTime.parse(modified)
rescue
warn "head ", $!
end
}
page.last_checked = DateTime.now; return page
end
def checkall
pages = Array.new; i = 0
threads = ThreadGroup.new
IO.foreach(@url_file_name){|url|
url.chomp!
if threads.list.size == @thread_count then
sleep @wait_sec; redo
end
t = Thread.start(i, url) {|i, url|
pages[i] = self.check url
}
threads.add(t)
i = i.next
}
threads.list.each {|t|
begin
t.join(10)
rescue
warn "join:", $!
pages[t.index].warn = $!
end
}
return pages
end
俺も起きました。スレッドって怖いね。
>>544 何時に寝てんだよ。
>>542 どういう例外が出んのよ。
あと、どうせ貼るんならsyntax error出ないコードを。
rescueの前にendが抜けてんだろうとは想像つくけど、
果して他は全部正しいんだろうか、という疑問は避けられない。
オートコンプリート機能の貧弱なオレにも理解できる文章と
情報を書いてくれ。
>>545 /usr/lib/ruby/1.8/net/protocol.rb:197:in `rbuf_fill': socket read timeout (5 sec) (Timeout::Error)
ってやつです.
http.headでtimeoutしてるってことなんだと思うんですが,
checkメソッド内のrescueにもt.joinのrescueにもかからないのです.
で,状況を再現してみようと何度もやってみたのですが再発しませんでした…
なんかいろいろ弄ってるうちに直ったのかなぁ.
end付け忘れすみません.
コピペして短くなるように編集した時にうっかり消しちゃいました.
スピードはまぁそれなりになったけど,
xreaで使うと負荷制限にかかって殺されちゃうんですよねぇ.
アンテナと何が違うのかわからんけど、レンタル鯖での鯖側なら
一回で全部巡ろうと思ったらあかんて。
キューに入れてキャッシュしながら少しずつ消化するとか。
>>548 そうそう、マルチスレッドでhttpとかを使うとそこで絶対落ちる。
例外をキャッチする術も無し。落ちるタイミングはまちまち。
共用のリソースの排他制御は行っている。
_,,,,,,,,
, - ' ゙ `` ‐ 、_,,,,,
,r' /=ミ
/ 彡ll',''´
. / 彡lll
!-- .、 ,、、、、,,, 彡lノ
l,,,,,__ / ___ 'r''゙ヽ
. |`゙'' ./ `'゙'''" .〉,l |
|. ,' //
. ',. ,' , r'
. ゙, ゙'ー ‐` l |
゙、''゙ ,,、二''‐ ノ l、
''''''''7'ヽ ''' / /`〉`゙T''''''''''
l ` 、,,,,、- ' " / /.| |
. | | .l i / ./ | |
| | | l / ./ .| |
. | | | l / / | |
| | | ', / / l .l
【大バグレス】
このレスを見た人は近いうちに大バグを出します。
回避方法はありません。
他のスレへコピペしても無駄です。
MD5(でなくてもいいんですが)でユニークさを著しく損なうことなく
長さを8,12位に縮めたハッシュ値にすることはできませんか?
>>549 アンテナを作ろうとしてるんですよ.
>>550 CPU食ってなくてもプロセスの起動時間で殺されるのでなかなか面倒です.
cronも使えないし…
HTMLから一定時間毎にスクリプト起動させるとかできそうですが,
Webプログラム系の知識ゼロなんで時間かかりそうです.
>>551 謎ですねぇ.
net/httpのバグなんだろうか.
パスの区切り文字を表す定義済み変数とかないですか?
つまり、UNIXだったら '/'、Windowsなら '\' となってるような変数。
>>557 File::SEPARATORかと思ったけどこれは違うね。
>>555 可逆ではないです。
通常32バイト出力されるハッシュ値を8バイト(または12バイト)で出力したいということです。
32バイトバージョンと同程度(1/4程度)のユニークさを保ったまま取得したいです。
単純に下位8バイト抜き出すだけの場合どの程度精度が劣化するんですかね。
560 :
デフォルトの名無しさん:04/02/23 09:34
age てしまった。。
>>556 >>> アンテナみたいな
> アンテナを作ろうと
何を作りたいのかもわかってないで質問してるのかと小一時間。orz
アクセス数がそれなりにあれば、似非 cron ができる。
自分で考えてみてほしいけど。
> Webプログラム系の知識ゼロ
…。orz
>>559 同程度の「効率」ってことか。
数学的に MD5 を知らないからウソかもしれんけど、その性質からして
常に同じ部分を抜き出している限りは「落としたデータ量に等しいだけ
衝突しやすくなる」だと思う。
理屈で言えば、それができないと Digest 関数としては質が悪いんじゃないかと。
>>558 おお、やっぱりそういうのがあるのね。さんくす。
たぶんこれでいいと思う。
>>562 > SEPARATOR
> Separator
> ファイルパスのセパレータです。ファイルを扱うメソッドにパス名を渡す場合
> などスクリプト内のパス名は環境によらずこのセパレータで統一されます。
> 値は "/" です。
Windows でも "/" だけど、いいの?
いい
File::ALT_SEPARATOR||File::SEPARATOR
>>561 大体そんな感じ。8桁の16進数に対する birthday attack と考えてよいので
ファイル数を増やしていって衝突する確率がはじめて1/2を超えるのは77163個。
採用するMD5の値を一桁増やすごとに、この個数はおおよそ4倍になる。
切り詰める前のMD5だと2e+19個程度とされる。
>>559 数字を合わせるタイプの鍵、あれは3桁のと4桁のが市販されてるけど、
そのとき3桁タイプの正解の見つけやすさは4桁タイプの3/4。
…ではないよね?
1 / 1000 ≠ 1 / (10000 * 3/4)
「見つけやすさ」じゃなくて「見つけにくさ」だった。
>>566 初めて超えるのは77164個では?
def ba(n, try) (1..try-1).inject(1.0) { |q,i| q*(n-i)/n } end
for try in 77163..77164 do p [try, 1 - ba(16**8, try)] end
>>563 あれ、そうなの?
>>565のようにしなきゃいけないんだ。
でもなんで?
おいら頭悪いから日本語よくわからないんだけど
「スクリプト内のパス名は環境によらずこのセパレータで統一されます。」
ってのは、
「スクリプト内のパスに使われる区切り文字は、環境によらずこの定数の値で統一されます。」
ということでしょうか?
もしそうなら、Windowsでもパス名は「/foo/bar/baz」と表現すればよい?もしそうなら便利だなー。
NT系なら、c:/foo/barでアクセスできる。
CreateFileがそうなってたはず。
Rubyで、WINDOWS上で動くexeプログラム(バイナリ)を作成・コンパイルすることはできないんですか?
Rubyで書いたプログラムを走らせるためには、LINUX環境とRuby.exeが必要ですか?
Ruby/Gtkを使って、あるプログラム作ろうと思ったんですが、
配布しても実行するにはCygwinやらRubyやらGtkやら入れなきゃいけないなら誰も使ってくれなさそうで(^-^;;;
おとなしくJavaかDelphiかC++あたりを勉強するしかないですかねぇ…。
ExerbはGtk使えませんよね…。VisualuRubyってGtkと比べてどうですか?
VisualuRubyは(・∀・)イイ!!
プログラミングって、誰かに使ってもらうってのが喜びになるもんですかねぇ。
いや、そういうわけじゃないんですが、広範囲に使われて初めて意味の出るプログラムを考えているので。
とりあえずVisualuRubyとExerbで環境を整えてみました。
Exerb のレシピファイルって*.rbcから*.exrってのになったの?
で、コマンド名とか変わった?
kcodeがset_kcodeだったり?
おせーて。
exrじゃなくてrbcのままじゃないの?確かにwin32のバイナリだとexrになってるっぽいけど…。
set_kcodeになってたのか。でもあれだね、
$ ruby -r exerb/mkrbc ***.rb
でrbcファイル作るとkcodeになるね。
でそのrbcで実行しようとするとkcodeって意味が分かりませんエラーが出るw
3.2.0ダメなのか?
exerb-3.2.0はなんかいろいろ変わったっぽいがどこにもそれが書いてない…。
困った…。
kcode -> set_kcode で kcode 問題は解決したが、すぐ次の行で
scriptって意味が分かりませんエラーが出る。
ちなみにexrでもrbcでも問題ないようだ。
581 :
初心者 552:04/02/24 01:23
>>560 どうもありがとうございます。
確かに、
@table[:title] = ["NAME","ADDRESS"]
@table[:data] = [["taro","Hongo"],["taro","Hongo"]]
の方がいいですね。
あれれ、一日かかって作ったのにぃ。
あと、Enumerableをインクルードしてない理由は
DPStoreクラスのeachは、ブロックに渡すのが、Stringクラスでなく、Arrayクラスだったからなんですが
Arrayクラスをブロックに渡すeachを定義してると、Enumerableのメソッドが誤作動
しないですかね?ちょっと心配なので、インクルードしなかったんですが。
あと、Rubyコーディング規約っていうのが、とても参考になります。
わからなかったらリファレンスと irb。これ最強。
結論的には、String も Array も Object のサブクラスだから無問題。
[[0],[1]].each_with_index { |i, idx| p i, idx }
で問題ないのが何よりの証拠。
>>571 95系でも、APIレベルでは/でアクセスできる。
\じゃないとダメなのは、アプリケーション側でそう制限してる場合。
典型的には、command.comとかcmd.exeとか。
>>577 Apolloも選択肢に入れてあげて!!
噂によると、exerb-3.2.0でRuby/Tkがコンパイルできるようになった(が、多少の問題はある)らしい。
Ruby/Gtkはまだ未対応のようだが…。
VisualuRubyよりもTkの方が使いやすくないかなぁ。
VisualuRubyはオブジェクトの扱いがイマイチなような(個人的意見)…。
「まだ未対応」っておかしいか。「まだ対応してない」に訂正しとく。
コンパイル、っつーのは誤解を招くからやめませんか。
class Proc
def === arg
self.call arg
end
end
case i
when lambda{|i| 0 <= i and i < 10}
puts "児童"
when proc{|i| 10 <= i and i < 20}
puts "10代"
when Proc.new{|i| 20 <= i and i < 30}
puts "20代"
else
puts "おさん"
end
って書くのが冗長だから
when節はデフォでブロックとれて
when{ |i| i > 40}
とかいっそcaseのiをデフォルトのイテレータ子ととれて
when{i>40}
とか書けたら便利だと唐突に思ったんだけど変かな。
既出だったらごめんさい
それならifを並べときゃええように思うけど。
>>588 case
when 0 <= i and i < 10
puts "児童"
when 10 <= i and i < 20
puts "10代"
when 20 <= i and i < 30
puts "20代"
else
puts "おさん"
end
case i
when 0...10
puts "児童"
when 10...20
puts "10代"
when 20...30
puts "20代"
else
puts "おさん"
end
Proc に === を定義して when で使うってのは気付かなかったな
覚えとこう
Proc自体に定義するんじゃなくて、Procのサブクラスに定義したほうがいいと思われ。
>>590 >case
>when 0 <= i and i < 10
> puts "児童"
>when 10 <= i and i < 20
> puts "10代"
>when 20 <= i and i < 30
> puts "20代"
>else
> puts "おさん"
>end
こんで十分な気がしてきた。thx
>>589 case文の意味つうかありがたさはcaseの引数に
視点を置いてそれについての複数の処理の記述だから。
if,elsif節の連続は何についての処理かは特に指定されないし…
30代を「おさん」と言うな「お兄さん」って言えー ヽ(`Д´)/ウワァーン
お兄さんは20代の後半あたりまでだろ
前半でおっちゃんよばわりされてますが何か?
ょぅι゙ょ相手に抗議もできず泣き寝入り
matzは貴重な資源なんだから、建設的でない議論でリソースを消費して欲しくないなぁ。
目立つ人が自分の立場を表明しちゃったらいろいろ言われるのは当たり前。
日本ではさしあたって他に目立てる人がいないからしかたない面もある。
塩お兄ちゃんだって、貴重な資源だし、目立つひとだぞ。
…彼らなりの息抜きなのか?
なんで塩がMatzに噛み付いてんのかわからん。
matzは論文調査もろくにできない(能力、時間ともにない)くせに「誰よりもよく知っている
俺が言うから間違いない」みたいなことをいけしゃーしゃーと言うから波風立つんだよ。
>>602 そんなことあったっけ?
Mix-inに関するMatz日記でのやり取りのこと??
>>587 そっか、コンパイルしてるわけじゃないのか。インタープリタ型言語なんだから当然(?)か。
ってことはやっぱりJavaとかC++とかをコンパイルしたexeに比べたら遅いのかなぁ?
ボトルネックになるのってどんな処理でしょうか?
>>602 議論になることを目的としてるんだろうから、
今のやり方は適っているんじゃないかね。
>>604 数値計算。あと単純にメソッド呼び出しが多い場合。
>>604 ruby自体は内部的にはコンパイルしてるわけだが、
exerbは内部的にもそういう動作はしてないってことじゃないか。
どっちかっつーと(比喩としては)リンカだな。
>>600 塩にーちゃんが貴重な資源なのは同意するけど、目立つのは我々の世界の
中でだけ。Matzは外の世界でも目立っている。
だからMatzが塩にーちゃんより上だ、とかそういう意味ではないのでちうい。
日記ネタはUNIX板の日記観察スレでやってくれ。
あちこちに発散されるとワケわからん。
>>604 C++に比べたら遅いのは当たり前。
JavaはJust-In-Timeコンパイラが発達しているし、VMもこなれてきているし、プリコンパイル型だから
通常は負ける。だがこれも当たり前。
まあC++/Javaのコードがヘタレだと余裕で勝つこともあるが…
速度を犠牲にして書きやすさ/柔軟性を優先するのがLL(Lightweight Language)。
でも速度の追求を怠っているわけじゃないぞ。
C++より遅いのがどうだって言うんだ?そんなに速度を追求したけりゃC++で書け。
>>610 つーかね。
C++やJavaのような静的な型システムを持つ言語と
Rubyのような動的な型システムの言語を比べりゃ、
どうしたって前者が圧倒的に有利なのは当然なのよ。
定数の畳み込みさえするわけには行かないんだから。
いまさらそんなネタで熱くなるなよ
613 :
デフォルトの名無しさん:04/02/25 19:09
なんでキレてんのか分からん。
アホなのか?
>>612 不定期に繰り返されるネタではあるね
ほっときゃいいのにさ
定数の畳み込みぐらいはできそうだけど
定数の畳み込みとしては、
a = 10 * 2
を
a = 20
などとする、というのがよくある例だが、RubyではFixnum#*が再定義される
可能性があるので、構文木生成時には畳み込みを行うことができない。
ま、そういうこった。
Ruby には、定数にも自分自身を変更するメソッドあるじゃない?
class Foo
def foo1
end
def foo2
end
end
:foo1 というシンボルを
Foo#foo1 メソッドを呼ぶのに使うには
どうしたらいいですか?
>619
あ、ありがとうございます!できました。
send というキーワードが見つからなかったんです。
class Foo
def foo1
end
def foo2
end
end
Foo.new.send(:foo1)
Object#__send__を使っておくことをお勧めする。
send が再定義された場合に備えて別名 __send__ も
用意されており、ライブラリではこちらを使うべきです。また
__send__ は再定義すべきではありません。
ありがとうございます。マニュアルで読みましたよ。
う〜ん、確かにrobustなシステムを作りたいときは
よろこんで__send__使いますけど、
今回はブラックボックス作ってるんで、send使います。
そっちのほうがなんか好きだから。
クラスの粒度を考えても、そのクラスのsendが
再定義されることはなさそうですし。
そういう判断するのが面倒だからいつも__send__つかってる。
私はそういう判断をするのが楽しくて好きだからいーんです。
>616見て
あらためてクソ言語だと思ったよ
どうして?
>>626 ん? Fixnum#* が再定義できるくらいの方が、ワシの好みだけどね。
まあ、好みはそれぞれ。自分お好きなところに行ってらっしゃい。
スレちがいだったらすみません。
ruby-gtk なのですが、以下のようなウィジェットを作ろうと思っています。
どのGtkウィジェット・メソッドを使うのが定石でしょうか?
アドバイスありましたら、おねがいします。
イメージ:
* イメージとして、Windows のネットワーク接続(?)のようなウィンドウ
* スタートボタンを押すと、なんらかの処理がはじまる。
簡単な進捗表示(アイコン or プログレスバー)が表示される。
* エラー時などの、advanced な情報として、ログ表示の on/off をトグルボタンで切り
替えることができる。
実現したい処理は以下:
* 「詳細」ボタン(トグルボタン)を押すと、ウィンドウサイズが下に向かって
伸び(大きくなり)、テキスト(Gtk::Text) 等にログが表示される。
* 「詳細」ボタンをもういちどトグルすると、テキストが消え、
ウィンドウが元通りにちぢむ。
VBox で pack_start の引数をいろいろいじってみましたが、
トグルボタンを on したときにはじめ hide にしておいたテキストが表示され、
ウィンドウが大きくなるのは実現できたのですが、もういちどトグルすると、
テキストは消えるものの、ウィンドウの大きさはおおきくなったままです。
ここを自動的に shrink させるにはどうしたらいいでしょうか?
Ruby でP2P掲示板作りたいなと思うんですが、やっぱ処理が重くなりますかね?
Ruby が書きやすくて好きなんだけどな〜。
>>633 いや…あの…処理重くなりませんか?って質問だったんですが…(^-^;;;
オープンソース化して同士集めてRubyでP2P掲示板作りますか?
ちょっとしたアイディアがあるんですが。
もしある程度の人が集まるようなら専用スレ立てますが。
あ、exeファイル化したいんで最初はVisualuRubyでやろうと思ったんですが、
個人的にイマイチだったんで、Exerb3.2.0から使えるようになったと噂のRuby/Tkでやるつもりですが…。
>>634 君は exe を神格化してないかね?
C++にするかRubyにするかよりもネットワーク遅延の方がはるかに関係するし
そもそもP2P掲示板程度で気になるほど処理が重くなるとしたら君のプログラムが下手なだけだ。
>>634 何に比べてという対象がないと重いかどうかなど意味がない。
C++等で書いたのネイティブアプリより重いというのは当たり前
>>604-610
いや、exe化しないと広まらないと思うんですが…。
P2Pは広まらなきゃ意味ないし…。
PerlのP2P掲示板はあるようですが、あれはPerl入れなきゃ使えないってことで、
一般人には敬遠されてますしね。
UNIX系のユーザーはいいとして、もっともMajorityなWindows系に受け入れられないのは…。
Rubyでそういったアプリ作ったことはないので、
単純に使える程度のものになるのかどうかを知りたかっただけです。
せっかく作っても「Rubyだから重すぎ」とか言われて使えないなら、
最初から他言語で書いた方がいいなと思っただけで。
他のP2PがC++やDelphiで書かれていることを思うと不安です。
あ、現に研究の数値計算を試しにRubyで書いてみたんですが、
やっぱり差の出やすい部分なだけあって実用的とは言えませんでした…。
P2P掲示板程度なら差は出ない、というならよろこんでRubyで書きます。
(´-`).。oO(おまえが作ったプログラムをオープンソースにすればいいだけだろ・・・)
> Rubyだから重すぎ
exerb 使ったからといって重さが変わるわけじゃない。
> exe化しないと広まらない
それはそうかもしれないが632や634にはそんな意図はどこにも入ってない。
まあそもそもRubyを信用してないんだったら別にRubyで書かなくていいよ。
>>640 あのさ〜携帯板のキャリア信者みたいちょっと疑問を持たれただけでキレるのはキモイからやめなよ。
>>634のexe化したい、って話は全然速度とは関係ない話で書いてるように読めるぞ、俺には。
プログラミング言語ばかり読んでて日本語が読めなくなったのか?
信用とかついには訳のわからない話まで出してるし。痛すぎだぞ。
>>634 Rubyでもほとんど問題ないはず。
上でも言われてたが、現実には言語の差よりも書き方の差による速度差の方が大きい場合が多い。
理想的な書き方をしたらC++の方が早いのは当然だが。
書いてみてボトルネックになってる部分の書き方を改良していけば十分実用的になると思うぞ。
速度気にするならRubyとか使うな。
絶対的に重い。
絶望的に重い。
それでもスクリプトとしての可搬性の方が大事なら選択しろ。
>>640 いいのか
>>642みたいに言わせといて。半狂乱になって反発しなくていいのか?
>>642 処理の程度が比較的普通のGUIプログラム作ってもそんなに速度違うかい?
一番のボトルネックは人間です
>>641 ま、速度がボトルネックになったらその部分だけ
C(or C++)で書き直せば済むことだしね。
おれは応援してるよ。がんばりーや。
Exerb使って配布されてるメジャーなアプリってなんかあるの?
どうでもいいけどRubyで書かれたもっさり掲示板クライアントなんて
広く使ってはくれないだろ。いちいちレスポンスが悪そう。
まず作ってみれ。
それが使い物にならないぐらい重量級になってしまったら、
profile でもとってみて遅いところだけ拡張ライブラリにするなり、
それでもだめそうなら乗り換えを考えればいい。
もしフルスクラッチで書き直すことになってしまったとしても、
プロトタイピングとして、考えをまとめたりプロトコルや UI
の実験の役に立ったりするし。
面倒かもしれないけど、長い目で見れば絶対に損はしない。
ちなみに個人的には C++ のほうがきっと遅い。ボトルネックは
「開発のめんどくささ」。開発がうまくいかなきゃ、処理速度は
0 にしかならないし。
まじめな話をしているところ、腰を折るようですまん。
P2P掲示板ってなんだ?
その前にExerbで作ったバイナリってランタイムなしで動くの?(´・ω・`)スゴイネ
ランタイムが別途に必要だったら、mswin32 版をインスコさせるのと
誤差の範囲だ。rb2bat で十分。
そんなに速度は気にならないと思うけど。
rubyの起動時間以外は。・・・ウェブアプリだと結構、痛いか。
>>650 ありがとう。P2P掲示板のことが手に取るようにわからなかったよ
P2Pつっても匿名じゃないわけ?
匿名用途でソース公開とかしたらIP抜きまくりになる気がするんだけど。
>>653 普段からIPアドレスを各種サーバにばらまいてる癖に今更何を言ってるんですかと。
656 :
omikuji wtl3swtn01.jp-t.ne.jp:04/02/28 10:38
どれどれ?ほほ〜い
HTMLでなく、単なるテキストに書いてある "(h)
ttp://host/path" を
抜き出すにはどうしたらいいですか。
URLに使える文字集合も知らないので困ってます。
KFC登場。
perlには強力なパターンマッチ機能があって重宝しているのですが、
rubyには、オブジェクト指向であるという以外に
perlのようなパターンマッチ機能ってありますか?
>>660 gsubとかreplaceとか、$1とかも使える。String型のメソッドとして実装されている。
まあ、perlのパクリだからね。
著作権違反だな。
Larry Wall<謝罪と賠償請求するニダ!!
perlはawkとかsedのパクりで良いんだっけ?
c:\>ruby -ve "h = Hash.new(){|h,k| File.open(\"#{k}.txt\", 'w')}; 100.times{|i|h[i%9].puts i.to_s}"
ruby 1.8.1 (2003-12-25) [i386-mswin32]
こういうかき方ってしちゃダメ?
一回きりしか動かさないから、まーいーやーって書いたんだけど
意図したのと微妙に違う動作するようなんだよね。
キモい Hash.new のブロック(;´Д`)ハァハァ
ruby -ve "
h = Hash.new(){|h,k| h[k] = File.open(\"#{k}.txt\", 'w')};
100.times{|i|h[i%9].puts i.to_s}
"
こうじゃないの? 'h[k] =' が追加分。
>>642 Ruby厨ウザ杉。SWIGで拡張するとか言う手もあるだろ。
なんでそんなに排他的なんだ。だからRubyユーザーは
嫌われるんだよ。
俺もそうおもたw
おれも
>>668-669 なるほどね、こりゃ便利。
h = Hash.new{|h,k| h[k] = []}
h[:foo] << "bar"
>>657 require 'uri'
module URI ; @@schemes['TTP'] = HTTP ; end
puts URI.extract(ARGF.read, %w(http ttp))
> module URI ; @@schemes['TTP'] = HTTP ; end
この行あってもなくても結果同じみたいだけど。
ttp → httpになるのかと思いきや。
>>677 URI.parse の挙動に影響します。
>>668-669 こ、これは・・・なにが起こっているんだ?
エロい人、できたらでいいんですが解説キボン(´・ω・`)
>>679 コマンドラインで使い捨てのフィルタとかを作るときに便利な技。
ああ、なるほど。
Hash.new の引数って「キーに対応する値が存在しない時のデフォルト値」なんですね。知らんかった。
んでデフォルトが、「ファイル名がキー+".txt"のストリーム」を返すと。
たしかにおもしろきもい (;´Д`)ハァハァ
ruby-htreeでツリー構造にしたものを
もとのxhtmlに戻すにはどうやればいいんでしょうか?
eruby使っているときに、くっきー設定したりするのは
<% ERuby.request['Set-Cookie'] = CGI::Cookie.new('key', 'value').to_s %>
のようにするようですが、なぜresponseではなくrequestなんでしょうか?
Content-Typeだって ERuby.request.content_type = 'text/html' だし。
すごく違和感を感じるのはおれだけ?
685 :
デフォルトの名無しさん:04/03/02 21:55
cvsでrubyソースもってきてインスコしたんだけどhttpsが使えない
openssl関係ってどうやって入れるんですか?
>>685 configure のときに OpenSSL をインスコした場所を指定しる。
例えばこんな感じ。
% ./configure \
--with-openssl-include=/usr/local/ssl/include \
--with-openssl-lib=/usr/local/ssl/lib
httpsクライアント側だよね? デフォで入るはずだけど。
$ ruby -v -rnet/https -e0
晒してみそ
>>684 Apache API 自体の仕様じゃない?
あるclassでmoduleをincludeするとinstance methodsが作成されますが、同様にしてclass methodsを作成することはできますか?
module X
def m1
"m1"
end
def self.m2
"m2"
end
end
class A
include X
end
print A.new.m1 #=> "m1"
print A.m2 #=> NoMethodError
moduleに関数を追加するにはどうするの?
module Math
def abs(x)
x = -x if x < 0
return x
end
end
とやっても、Math.abs()が使えない。
>>690 module Math
def self.abs(x)
...
end
end
で Math.abs()が使えるようにならないか?
>>689 [ruby-list:38073]からのスレッド嫁。
>>691 ありがとうございました。出来ました。
でも、なんで標準でabs()やceil()がないんだろう…。
探し方が悪いから。
Numeric#abs
Numeric#ceil
>>694,695
俺も最初のころは、それに引っかかった。
absやceilがNumericのメソッドであることには異議を唱えるつもりはないんだけど、世間一般では数学の関数として「絶対値関数」とかいう事も多いんだから、Math以下にもあっていいように、自分は思うんだけど。
なにか経緯があって現状に落ち着いたのだろうけど(知ってる人フォローお願いします)、それこそ「TMTOWTDI」という言葉もあるんだし、Numeric#absの別名としてMath.abs()が存在してもいいんじゃないだろうか。という独り言。
Cでもmath.hでlibmだし。
括弧省略したら警告されたのでRuby辞めますた。ばいばい。
はいはい。ばいばい。
括弧との間に空白入れたら警告されたのでRuby辞めますた。ばいばい。
>>700 はい、さよなら。
もうこの話はいいから、次↓
def a; 0; end; a = 1; p a
で何が起こるかわけわからなくなったのでRuby辞めますた。ばいばい。
なんかRuby辞めますた。ばいばい。が流行っているみたいなので僕も記念にRuby辞めますた。ばいばい。
>>686-687 すみませんOpenSSLが入ってませんでした
OpenSSLを入れて再インスコしたあと
>>687をしたらこう出ました
ruby 1.9.0 (2004-03-02) [i686-linux]
/usr/local/lib/ruby/1.9/net/https.rb:127: warning: method redefined; discarding old edit_path
/usr/local/lib/ruby/1.9/net/https.rb:136: warning: redefine socket_type
/usr/local/lib/ruby/1.9/net/https.rb:163: warning: method redefined; discarding old on_connect
-e:1: warning: useless use of a literal in void context
>>692 読んだけど、なんのことやらさっぱり。
こんな難しいことをみんな理解しているのか。俺には無理だ。
おれもRuby辞めようかな・・・
最近よしだむさんの落書きがなくて悲しい…
707 :
デフォルトの名無しさん:04/03/05 01:36
Hashのブロックって、変体だな。
>706
Rubyの記法自体変態のかたまりだが、
そこを好きになれるかどうかだ。
まちがった。>707。
字面の変態性と吃驚最小限の法則は直行する概念なのか?
この変態文法で驚き最小限の法則を名乗ってることこそが一番の驚きだと思う今日この頃。
変態文法を言い出したら、
perl, python, ruby のどれをとっても超変態な訳だが
じゃぁみ〜んな変態だから問題なし、ってことで。めでたしめでたし。
VBScriptの優勝ということで
変態文法ならAPLかIntercalがブッちぎりでは?
Whitespaceが一番。
Whitespaceは文法が変なわけじゃない。表記が変なだけ。
むしろ変態じゃないのってどれ?
LISP
るびきちといえば
☑ฺ くっさー
□ (・∀・)イイ!
藻前らbrainfuckを忘れてませんか
シラネーヨ
バーカ>723
ウンコー >723
ri っていえば、rdoc ruby-1.8.1/lib/**/*.rb が通らない。
c:/usr/local/lib/ruby/1.8/rdoc/code_objects.rb:318:in `find_symbol':
undefined method `find_module_named' for nil:NilClass (NoMethodError)
ruby 1.8.1 (2003-12-25) [i386-mswin32]
鬼車キターーーー!!
>>727 これで直ってんじゃないか?
RCS file: /pub/cvs/ruby/src/ruby/lib/rdoc/code_objects.rb,v
revision 1.2.2.2
date: 2004/01/02 06:01:12; author: dave; state: Exp; lines: +6 -0
Finish documenting internal stuff. See Changelog for other details
RPGツクールXPへの採用おめでとうございます
Rubyがまさかゲームに組み込まれるとはね
でわノシ
ツクール厨がなだれ込む悪寒
ツクラーにしかわからないようなネタで雑談始めたりするから注意しる
へー。
Ruby 側に何かしら還元されると嬉しいな。
メニューでCTRLを押しながらセーブを選ぶとゲーム進行スイッチの状態を確認することができるぞ。
ツクール厨には使いこなせません
ってかRubyそのものは組み込まれないのでココには来ないっしょ
>>730 あ、どこかのページで詳細見れる?
URL 教えて。
オープンソースコミュニティーの成果を
たかだか一私企業の金儲けに使うなんてあってはならないことだ。
新言語 RGSS……Ruby と呼ばれる構造化プログラミング言語を元に…
これって構文が似てるだけの別物じゃない?
>>737 金儲け大いに結構だと思うけど。
採用事例が増えればコミュニティの層も厚くなるわけだし。
>>740 >マルチゲームスクリプターとか、そう言うの好きな会社だから。
詳細キボン
作者誰?MLにはいるのかな。
「似た」ってのが微妙だな。ASCIIなんだから完全にパクれ!
# っていまはenterbrainか…
少なからず影響がないと呼ぶ理由がないなぁ。
RPGツクラーが後日、
ちらほらやってくるかもしれませんので適切な対応をお願いします。
質問厨が、発売日後に来るんじゃない?
Q. Rubyってなんですか?
A. 変な宝石です。
>変な宝石です
あ、いいかもw
750 :
デフォルトの名無しさん:04/03/07 02:27
>>738 別物っぽい。
ツクール作者はやはり処理系大好き言語オタクなのか。
(Ruby のコード自体は使ってくれないわけやね・・・ 何が障害だったのだろうか。
やはり、自分で言語作ること自体に熱意がある人なんだろうね。
Ruby コミュニティや利用者には、いい話じゃないと思うぞ。
似たもの作ってもらってもな。せめて今あるものよりはマシなもの作らないと。)
ツクールってWindowsだろ?
スレッド周りの実装がネックになったという可能性もなくはない。
Ruby始めました
これからCGI作って遊びます。(出回ってるの改変するだけだけど)
家にあるCD・DVDの一覧表でも作ろっと。
Welcome to Ruby
>>751 RPGツクールのスクリプト言語ごときにスレッドまでサポートする必要ないだろう。
>>729 thx. oniguruma も net/http もアツそうだしと snapshot 使ってみたら、
nmake install 中の rdoc 生成で落ちた。痛い。
E:/usr/ruby/lib/yaml.rb:193:in `end_object': method `write'
called on terminated object (0x2ab6aa0) (NotImplementedError)
ruby 1.9.0 (2004-03-06) [i386-mswin32]
756 :
デフォルトの名無しさん:04/03/07 17:13
興味があり、irbの中を覗いてウヒウヒ遊びはじめました。
で、いきなりツマッテしまいました。
http://kansai.anesth.or.jp/gijutu/ruby/man-z1/refm0322.html 上記サイトにて、「irbはReadlineモジュールにも対応しています。
Readlineモジュールがインストールされている時には、
それを使うのが標準になります。」との記述があります。
実際にirb/completion.rb:10 にて require "readline"
としているみたいなんですが、
どのディレクトリを見に行ってるんだろうか。
このReadlineモジュールとは、GNUのReadlineのことを
言っているのだろうか。
>>755 それは気にせずにもう一度nmake installすれば通るかも。
たぶんsyckのGC絡みのバグ。
>>756 そのサイトの説明は言葉がごちゃごちゃになってるんだけど、
(1) GNU Readline(またはそれと互換)ライブラリがインストールされていて、
(2) それに対応したRuby拡張ライブラリ(readline.so)がインストールされていれば、
(3) require "readline"でその拡張ライブラリがロードされてGNU Readlineの機能が
利用できる。
ということでよいかな。
requireが探しにいくディレクトリは、変数 $: に入っている。
>>758 readlineってbashのアレだっけ?
>>758 早速の解答、ありがとうございます。助かります。
PATHに関しては自作スクリプトと同じだから、
当然と言えば当然ですね。
当方、2つ環境がありまして、
1つ目の環境にはreadline.soがありました。
2つ目の環境ではreadline.soはありませんでした。
2つ目の環境でreadline.soを作成したいと思い、
ソースをおっことしてきたのですが、
readlineのMakefileが無い。
Buildの途中で誰かに作られるんですね。
もう少しウヒウヒ追ってみます。
ツクール祭りは一日で収束かよつまらん
>>761 情報がないのにどうやって騒げと。
作った人でも降臨させてくれ。
>>757 thx. 三回目でやっと通ってくれた。
けど syck のバグだとちょっと致命的。関連情報どこかありますか?
shim-ruby16_18 ってもうメンテされないですか?
最近、無道編を見ながらraccをいじり始めたんですが、
あれって、例文集(っていうかクックブック)に相当する物や
わかりやすい利用例みたいなものありませんか。
やっぱり、yacc関係の本を読むのが近道?
>>767 Racc の sample/*.y じゃ少なすぎる?
ん。どちらかというと、こういう対象のときにはこうするんだよっていうのが欲しいですね。
Q 重なった余分な括弧をとりたい。
A
block : '{' inner '}'
| '{' block '}'
とか(簡単過ぎるけど)。実はあんまり無いのかな。
あとは、エラー回復の有効な使い方ですね。
sampleではちょっとわからなかった...
Racc クックブック
楽々Racc
そういう事例集が作られるほど racc が使われているわけでもないような。
青木さんの wiki に作ってみたら?
>>774 いや、だから、「Rubyに(見た目が)似た言語」であって、Rubyじゃないんだってば。
>>775 えっ、そうなの?てっきりツクールの作者がRubyの亜種を作ったのかと思ってた
Ruby で実装した Ruby に似た言語、ってこと?
Ruby embedded ってことじゃねーの?<Rubyを利用したシステム
いまどきXPとかいってるのかよ
ソースコード公開汁
組み込みサポートが弱い今のrubyを、よく使う気になったねえ
諸々の問題点はどうやってクリアしてるんだろ
ライブラリを作成しているのですが、ファイルがでかくなってしまい読込が重くなってしまいました。
そのライブラリはクラスがいっぱい定義してあるのですが、
使用方法によっては、まったく利用しないクラスもあるため、
クラスごとにソースを分割し、クラスが利用されない場合は読み込まず、
利用される場合は自動で読み込むようにしたいと思っています。
そこで同じようなことをしている、またはやった方はいませんか?ノウハウを教えていただきたいです。
続きです。
今は最初にmethod_missingのみ定義した実体のないクラスを定義し、
method_missingが発生したら実体が記述されたソースをrequireするようにしています。
ただこの方法だと継承された時や、ちょっと複雑なことをやってしまうとうまくいかないのですが。
#---------------------------------------------------------------
# Raiburari.rb。単にmethod_missingを定義したスケルトン
class Raiburari
class A
def method_missing(args)
require "Raiburari.A.rb" # アクセスされたときに class A の実体が書かれたソースをrequire
self.method(args[0]).call
end
end
class B; 同上; end
class C; 同上; end
end
単位がクラスでいいならautoloadかな。
>>785-786 ( ´∀`)うおおおお!それだぁぁぁぁぁ!
それなら変なことしなくてもきれいに実現できる。
ありがとうございまする。
試してみます
Hash#default= ってなんで self を返さないのかな?
aHash = {
1=>2,
3=>4,
}.defalut = 0
とかできて便利だと思うんだけど。
いや、待てよ、
aHash = {1=>2,3=>4}.default = 0
とかだと紛らわしいか。
>>788 字面が a = b = 0 と同じだから、0 を返す方が自然に見えるなあ。
Xxx#yyy= で self を返すものってあるっけ。
デフォルト値といえば、個人的には
* Hash#inspect でデフォルト値が表示されない
* Hash#default_proc= がない
とかが気になる。
>>788 1. (実装時に)あまり考えてなかった
2. 気づいてなかった
あたりかな。体系の不一致を見つけたら ruby-list or ruby-dev に投稿しる!
>>790 いつのころからだったか、代入系のメソッド(=が最後に付くメソッド)は、
メソッドの返り値に関係なく、引数(右辺)を返すことになりました。
ただし、__send__ を使えば、メソッドの返り値が使われるようです。
最近の ruby-talk にもそんな話がありましたな。
まぁ
h1 = {1 => 2, 3 => 4};
h2 = {5 => 6, 7 => 8};
h1.default= h2.default= 0;
これでh1のdefaultがh2になったら鬱だろ
あ、 FreeBSD ports の refe を最新のにして欲すぃ。
each の返り値に決まりはありますか?
selfが返ってくるんじゃない?>each
Enumerable を include するのに必要な条件ってこと?
特に決まってないと思うけど、selfを返すのが定石かも。
>>798,799
self が返ってくるんですね。ずっと前にマニュアルを見たときに
は書いてなかったんだけど、今ArrayやHashのところを見たら書い
てありました。
refeとriってどう違うのよ
ri
* PragmaticProgrammers
* rdoc
refe
* aamine
* RD
あってる?
rdoc に RD ?
しょうもな。 おまけに、何で同じようなのが2つもあるんだ?
Perl なら pdoc ? Python なら pydoc ?
はぁ、ばかばかしい。まぁ、 Ruby 村でひっそりやっててくれ。
>>803 えーと、何しに Ruby村に来られたのですか?
ここが Ruby村だってこと、分かってないのですか?
釣りでしたら、他の村のほうがもっと釣れるかもしれませんよ。
ここじゃ、私くらいしかかからんですわ。
どこかに RDoc と RD の違いとか歴史とかまとまってないかな
Ruby村とDash村って関係ありますか?
>>803 俺も思うんだがなんで複数あるの?
Rubyはそういうのが多い気がする
"There's more than one way to do it." -- Larry Wall
ユーザが選べるという意味で選択肢が多いのは結構だけど、
両者に余り違いが無ければ、混乱するだけだと思うけど?
>>810 それはそうかも、とLinuxの各ディストリビューションを見ながら思う。
いや、それとこれとは...
>>795 現状の環境云々ではなく、望ましい仕様について議論しているのが分かりませんか。
あ、勘違いした。漏れのレスから rdoc <-> RD の話が始まったのか。
だとして、ますます
>>813 の意図がわからなくなってきた。
何が言いたいのですか?
古くからいる人は定番ライブラリとかわかるのかもしらんけど、
なんだか同じようなライブラリがいっぱいでわけ判らないんだよ。
もう、RAAなんてやめて全部CVSかなんかに放り込んで
できる奴がよってたかって作り込むとかって選択肢はないの?
>>816 ライセンスが問題ないものに関してはやりたい人が勝手にやってください。
>>815 別の話題が盛り上がってる中、自分もあいまいな言い方してすまんかった。
696で書いたとおり、「Math.abs()欲しい(他の人はどう思う?)」って話です。
>>819 perlにもローカルなドキュメント規格もどきが複数あるの?
>>820 それは誤読だろ。
Ruby と Perl の関係を、rdoc と RD の関係にたとえてるんじゃないの?
(そのたとえが適切かどうかは別だけど)
Ruby/SDLとRUDLとかな。
かたやWin32版バイナリがRuby1.6、mingw用だったり、
かたや日本語が使えなかったりと、使うには面倒な事が多いけど。
すごい勢いで投稿を続ける ocean たんは何者ですか?
ちょっと落ち着いて欲しいよね。変数名の話とかわけわかんねえし。
春先に出没する珍走団みたいな感じかな。
>>824 同感。でも前も書いたが、
静か過ぎるよりはよりは今のほうがいいんじゃないでしょうか。
ただ、思いついたら即投稿っていうのはやめて、もっと熟慮を重ねてメール一通あたりの情報量を増やして欲しい。
>>826 そうなのよ!
一つのスレッドを同じ投稿者がしめているのはいかがなものかと。
他人から反応があったときのキャッチボールがもうちょっとうまくいってもいいのではないかと。
>>805 RdocとRDって違うからなぁ。
プレーンなテキストファイルで構造的な文章を書かなきゃいけないときに、(blog や wikiの構文とか)
それの一つのいい形としてRDがあって。
RdocはまんまJavaDocの移植って感じ。
漏れはソースにドキュメント埋め込むならRDocがいいと思う。
(さらにいうなら、ドキュメント書くまでもない意図が明確なソース書くべき)
829 :
デフォルトの名無しさん:04/03/13 21:44
result=`command`
として、標準出力を得るのはできましたが、エラー出力を得るにはどうすればよいですか
解決しますた Process::Statusが帰ってくるのですね
ありゃ、$? に Process::Statusになんかエラー出力の文字列が格納されていると勘違いしてた・・・
やっぱエラー出力とれないや
>>831 やってみます
833 :
デフォルトの名無しさん:04/03/13 22:19
>>831 The fork() function is unimplemented on this machine
といわれますた
834 :
デフォルトの名無しさん:04/03/13 23:40
`#{cmd} 2>&1`
でstderrをstdout にやることができますた
興味あるんだけど、forkがないプラットフォームって何?
% time ruby -ne '' FILE
とかやって気付いたんだけど、
この時の速度って、
File.open(file){|f|
while line = f.gets
end
}
とか
IO.foreach(file){|line|}
に比べてずいぶん速くない?
デファクトスタンダードの存在しない多様性は単なる混沌に過ぎない。
各々好き勝手に類似の機能を撒き散らしているようではRubyコミュニティは早晩崩壊するだろう。
UNIX も Linux も崩壊と。
プログラミング言語も崩壊と。
OSはWindowsが、言語はC#とVBScriptがデファクトだから実際崩壊してない。
ふむ。
Ruby はそれらのデファクトから外れたところにあるのだから余計なお世話だな。
>>840 なんか最近は普通のWindowsアプリでもJava製品をよく見かけるよ。
C#のはまだはっきりみたことない。あるんだろうけどさ。
タブ移動ができない(キーボードでコントロール間移動できない)
アプリは大抵Javaランタイム要求するやつ。
マウスなんか使わせるなよ。
ちゃんと作れよ。
WindowsUIデザインに従ってくれよ・・。
>>837 当然だろ。-nは純粋にC言語で実装されてるからな。
>>840 そういうUIへのこだわりがないっていうのは、大抵コンピュータに関心のないプログラマが作るものだねぇ
うちでは大差ないぞ。
% time ruby -ne' ' /usr/share/dict/words
0.560u 0.010s 0:00.57 100.0% 0+0k 0+0io 0pf+0w
% time ruby -e'IO.foreach(ARGV[0]){}' /usr/share/dict/words
0.540u 0.030s 0:00.61 93.4% 0+0k 0+0io 0pf+0w
>>838 Eclipse対FreeRIDEのオープンソースIDE対決もあったり、
それで、いったいどっちがいいんだと迷う人もいるかもしれん。
Eclipseのクソ長い冗長コードよりはFreeRIDEのほうがコードの質は高そうな感じするけど、
Eclipseのほうがカネかけてるだけあってそれなりに多機能。
オープンソース同士何争ってるんだって思う人もいるかもしれんけど、
こういう競争がないとね。
個人的にはJavaは無駄が多いし(1.5の言語仕様拡張でいよいよポリシー失いつつ
ある感じしてる)Eclipse陣営がRubyでIDE書くのが一番効率よいと思うのだが。
>842
最近はVBより多いかもね>Java製
開発側からしてみればいいことなんだろうけど、
UIに関してはガイドライン無視ってのが本当に多い。
この辺の状況はVB全盛の頃からあんま変わってないな(w
意識の問題かなあ。
Winロゴ取得とかすれば変わるんだろうけど。
RubyスレにWindowz至上主義者がわんさかいるってのも不思議な感じだな。
>>848 郷に入らば郷に従え、windowsのアプリケーションを書くのであれば
windowsの作法に従えという話でしかないように思うのだが。
wxWindow や FOX 使えばそれなりに Windows っぽいのが作れるんじゃない。
>>549 過去ログに車輪の再発明とかでてるけど、
Strutsやらなにやらは古タイヤの再利用くらいだとおもう。
ほしい物に似てるけどちょっと違うんだなあ。
だから車体を古タイヤに合わせて設計してみました、みたいな。
似たようなもの毎回作っちゃってもいいんじゃないの?
設計の再利用ってもう流行ってないのかな。
実装なんて再利用しようとても毎回しっくりこないんじゃない?
これ、JBossというかEJBのときにも思った。
既存の道具生かすためになんか本体側で無駄な苦労してるなあと。
「怒りを感じ」てるらしいね。「同種」っていうのも意味不明だけど。
>>805 これからはソースのドキュメントはRDocが標準なんだっけ?
RDとの関係とか、もっと資料があってもいいよね。
ところでRDocのパーサ、時々おかしくないですか。
コメントを自動抽出してくれるのはありがたいが、違うところのコメントが出てきたりとか。
ドキュメント書きが仕事なのに、ツールのデバッグなんかしたくないよー。
リファレンスマニュアルが落ちてる……
てか、www.ruby-lang.orgのwebサーバ自体が落ちてる
annonymous CVS につながらないと思ったらWebも落ちてたのね
>>846 > 個人的にはJavaは無駄が多いし(1.5の言語仕様拡張でいよいよポリシー失いつつ
> ある感じしてる)Eclipse陣営がRubyでIDE書くのが一番効率よいと思うのだが。
無駄が多いってか。あれは大規模プログラミング磨る上では重要なことだよ。
>ポリシーを失いつつあると感じている
相変わらずそうでもなさげだよ。J2SE1.5(Tiger)スレなどを見て見るべし
>>857 > 個人的にはJavaは無駄が多いし
Rubyでの短く書くことができるのに対して
Javaは長いのが売りだと思うんだけど、
その長さも今後の言語拡張で中途半端になる
のが漏れは好まない。
859 :
デフォルトの名無しさん:04/03/16 21:48
>>857 Javaが大規模に向いてるって理屈いつまでたってもわかんない漏れ
>>859 型制約が厳しい言語は開発人数が増えても比較的安全にプログラミング
できる、といわれている。ほんとか?とは思うな。大体、コンパイル時
型チェックに引っかかってコンパイルエラーを吐きまくるような馬鹿
プログラマ使ってたら、どんな言語だろうと「安全にシステム構築」な
んかできるはずがないと思うよねえ。
インスタンスの実行時型やライフサイクル把握しなきゃまともなシステム
にはならんわけで、そこまでわかっているマトモなプログラマなら静的型
チェック機構なんかどーでもよい、というのはスクリプト系Guruが書く
コードが証明しているよね。
>>862 その通り、欲しいのは成果物。
目的が達成されれば手段を選ぶ必要もなければ性格の悪い陰湿な言語オタを
使う必要もない。
>>862 後者の方が実行時のバグを持ち込みやすい。
バカ+厳格 神+ルーズってのは変数が二つになるわけで比較対象としてはどうかと思われ、
(そんなにスパゲティが好きなのなら止めはしないが。デバッグは自分でやってくれ。)
どちらかの変数を固定して1変数で比べてはどうか?
バカ+厳格
バカ+ルーズ
神+厳格
神+ルーズ
一般人+厳格
一般人+ルーズ
そうすると俺の1行目の結論がしっくり来ると思われ。
>>864 そこは、マネージャが厳しくテストを書けとプログラマに言い聞かせればよい
>>864 型制約の有無とスパゲティコードは関係ないでしょ。
>>865 そんな余計な手間をかけるなら・・・
と言う手を指してみようと思う。王手。
>>866 問題を複雑なまま考えようとしている様をスパゲッティと呼んだ。後のは洒落だよ。
>>867 テストしないコードなら書かないほうがよい、と逃げる
>>867 型付けをするのが手間でしようがねぇです。
>>868 の脳内では
型制約なし=問題を複雑にする
なのか?おれと逆だ。
言語の性格はそんなに関係ないと思われ。
型のよしあしは慣習に依存する部分が大きい。
つーか、100万locを超えるようなものは
楽しくない部分もたくさんあるからビジネスじゃないと無理。
商用の処理系を導けるような伝統的な形式の仕様文書か、
Zendみたいなサポート会社かどっちかないとね。
>>871 変数が複数=問題を複雑にする
と言っていると思われ。
わけわかんなくなってきた。
>>864 俺の1行目の結論というのはどれのこと?
Cとか型の制約が厳しいものを長年扱ってきて、Rubyを使い始めた当初は
不安で不安で、メソッド定義の最初にかならず、raise unless foo.is_a?(String)
式の型チェックをいれてた。
えーと、Cの型の制約が厳しいというのは、Pascalみたいに処理系が厳密に
律してくれるという意味じゃなくて、間違った型でも平気でプログラムできて、
しかも往々にしてそれが致命的かつ見つけづらいバグになるって意味ね。
char *を容易にint *として扱えたり(まずやらんけど)。
たしかruby-listでだったと思うけどRubyのような言語の場合重要なのは型じゃなくて、
そのオブジェクトがどんなメソッドを持っているかだけが重要だ、というのを読んでから
視界が晴れた気分になったよ。型チェックみたいなことはほとんどしなくなった。
なるほど、オブジェクト指向で最も重要な機能は多態だといわれてるのが、
やっと理解できた気がしたよ。
>>859 デザインパターンをJavaでやるのとRubyやPerlでやるのとで
比べてみるとわかるかも。
>>862 コンパイルエラーが出るからこそ、バグを早期に発見することができるようになり
堅牢性が高まるわけだよ。
コンパイルエラーが出るべきところででなければ
自分の責任でバグを探さないといけない。
人間と機械はどちらが信用できるかというと機械のほう。
人間はしばしば間違いを犯す生物。いくら信頼と実績があっても
歳や病気、寝不足にはかなわなかったりする。機械の場合は動力源さえあれば
言うことを確実に聞いてくれる。
ようするに型チェックは人間より機械に任せた方が信用できるということ。
そこらへんがvery strongly typed(強く型付けされた)言語のメリット。
しかしRubyやPerlでもツールなどで補えば同じことができるんではないかと。
RubyがJavaに勝っている点はMixJuiceのようなモジュール分割が
容易なことでないかな。
そりゃ100%安全は無理。けれども無いよりは少し安全になるというところか。
荷物を運ぶのに滑車(型チェック)を使おうが使わないが仕事量は同じでも
滑車は使われている。なぜかって、便利だから。小さい荷物を運ぶには不向きだけれども。
>>876 考え方が型に最もうるさい言語Smalltalkを作ったアランC系みたいだ。
すべての型は皆Objectであって型の違いは無いみたいな。
>>846 J2SE1.5でも相変わらずポリシーは失ってないよ。
みんなJavaがC#みたいになってポリシーを失うと勘違いしているけど
よくみるとそうでもない。あたかもC#からパクったように見える機能は
J2SE1.5でもそのまま実装されているわけでもない。
まるでC#を反面教師としてうまい具合に実装しているかのようだ。
JCPの観察能力恐るべしというか。
それとGenericsがでたのはかなり大きいと思われ。
GenericsがでたからといってC++のtemplateのような
とんでもないスパゲティコードをかきやすくなるわけでもないみたいだ。
ああ、すれ違い須磨祖
>>878 オブジェクトの型と変数の型を混用するな
オブジェクト指向言語って変数名とかメソッド名が長くなりがちでイヤン。
それに加えて型情報までソースコードに入れるとタイプ量が増えて超鬱陶しい。
趣味でRubyを4年ほど使ってるんだけど、いったいいつに
なったら仕事で使える日が来るんだろう。
デファクトでいいからデプロイのツールが標準化されるだけで
随分違うんじゃないかな。
Javaのいいところというか退屈なところは言語自体がどうこうより
とにかく大量にコードが書けるようオートメーションが進んでいるところと
デプロイ自体とそのあとで他の実行環境にあまり依存しないように
がんばってるところにあると思うよ。
>>882 転職するしか。使ってるところもいっぱいある。
>>881 自動生成ツールとかIDEとかでどうにかなるもんさ
>>882 ここ3年ほど、入ってくる案件の7割くらいはRubyで作って納めてる。
残りはPerlとCが半々くらいかな。
>>881 名前に使う必要のある情報を同じにして比較してる?オブジェクト
指向言語の方が、オブジェクト自体が情報を持つ分だけ短くなる傾
向があると思うけどな。
/* C */
GuiWidget* w = gui_entry_new();
gui_entry_set_editable(w.TRUE);
// C++
Gui::Widget* w = new Gui::Entry();
w->set_editable(TRUE);
// Java
Gui.Widget w = new Gui.Entry;
w.set_editable(true);
/* Objective-C */
id w = [[GuiEntry alloc] init];
[w editable: YES];
# Python
w = GuiEntry()
w.set_editable(TRUE)
# Ruby
w = Gui::Entry.new
w.editable = true
というか変数名がながくていやっていっても
名前はほとんど自分できめるものだし。
クラス名とかメソッド名は長くても
オブジェクト名や変数名、自作クラス、メソッド名は
自分できめられるし。
とはいってもJavaとかの場合コーディング規約で
なるべくクラス名やオブジェクト名は名詞、
メソッド名は動詞にすることが推奨されている。
やっぱりそのほうが読みやすいんですわ。
自分でクラスとかつくるのが面倒くさいと思う人は嫌がるかもしれないけど
そこで型推論ですよ、とか言ってみる。今風の関数型言語とかじゃたいてい
ついてるけど他じゃあんまりないのはどうしてだろうか。
>>889 明示的な指定はしないけども型違いによるコンパイルエラーを出すってもの?
と推論してみる。
ふと思ったんだけど、ruby において型無しで困ることの大半は、うっかり
nil をやりとりしてしてしまい NoMethodError になることじゃない?
デバッグのときだけでよいから、特定の変数に nil が代入された時点で
エラーを出せるようになるとありがたいかも。
>>890 っ[set_trace_func][trace_var]
っ[ソースコード]
>>888 >とはいってもJavaとかの場合コーディング規約で
>なるべくクラス名やオブジェクト名は名詞、
>メソッド名は動詞にすることが推奨されている。
面倒なのはこっちです。Smalltalk 風の命名規則は、Smalltalk が IDE が組み込みの
環境だから許容出来ると思います。
その他にも、同じ様な単語を何回も書かされるのは辛いです。
compiledCode := Compiler compile: aCode.
関数型言語は比較的記述がすっきりしている様な気がします。
>>893 JavaだったらEclipseとかJDE(Emacs)とかIDEっぽい環境あるじゃないか。
確かに補完なしでプログラムするのはつらいけどね。
そーいや、変数に型のない言語だと補完が中途半端になっちゃうね。
変数が指してるオブジェクトがなんだかわからないから、
メソッドの補完ができないもの。これはRubyの弱みかなw
>>891 trace_var はグローバル変数だけにしか使えないようだし、set_trace_func
は代入を検知できないみたいなのでムリぽい。
set_trace_func lambda {|*arg| p arg}
foo = Object.new
bar = nil
["line", "tracetest.rb", 2, nil, #<Binding:0x2ac7600>, false]
["c-call", "tracetest.rb", 2, :new, #<Binding:0x2ac75b8>, Class]
["c-call", "tracetest.rb", 2, :initialize, #<Binding:0x2ac7360>, Object]
["c-return", "tracetest.rb", 2, :initialize, #<Binding:0x2ac7318>, Object]
["c-return", "tracetest.rb", 2, :new, #<Binding:0x2ac71e0>, Class]
["line", "tracetest.rb", 3, nil, #<Binding:0x2ac70c0>, false]
>>892 きっちり作るならいいけど、起こりうる状況をちゃんと想定しないといけない
のがおっくう。
手元のデータが処理できればいいとかその程度だと、対処療法に走りたいのです。
あと他人のプログラムを使っていて起きたエラーを追跡する時も unittest は
書いてられない。
補完があるっていっても、名前が長すぎると読みにくい
よ。極端な例だと、mainWindowUpperSubmitButton と
mainWindowUpperCancelButton じゃあ、一目見ただけ
では違いがわからない。
ちなみに
>>893 の Compiler.compile みたいのは、
オブジェクト指向言語の例として出すにはちょっと
例外すぎるだろう。strategy のクラスメソッドじゃ
なあ。基本はインスタンスメソッドでしょ。
それに Compiler の例であっても、new してパラメータ
をいろいろセットして compile、ていうのだったらオブ
ジェクト指向言語のほうが短いと思う。
>例外すぎるだろう。
C#だと
Font Font = new Font()
みたいなのばっかだけどな。
>>895 その場合、おそらくローカル変数では不足だろう。
メソッドの返り値をチェックしないとまずいと思う。
そうなるとチェックのためだけにいったん変数に
代入したり、チェックを指定するディレクティブを
入れたりしないといけないが、ソースコード変更を
許容できるのなら、そもそも手で assert を入れても
同じようなことができる。
また、うっかり nil にしてしまうのは例えば Java
で言えば NullPo(ry に相当するが、これは静的型付け
言語であっても防げない。
興味深いがlong l;だけはちょっと勘弁。
もちろんエディタは1lI|の見分けがつくフォントにしてるけど、
それでも単独の小文字のLはやめてくれ。
お願いします。お願いします(涙
# トラウマらしい
require と load ってぶっちゃけどう違うのかまだわかりません。
そもそも require が何をするものなのかもわかってません。#include みたいなもの?
だれかずばっ!と説明していただけますか?
load が #include だとするなら require は #import
>>901 requireは同じものを1度しか読まない。
loadは呼ばれたら必ず読む。
904 :
デフォルトの名無しさん:04/03/19 10:05
インストールしたんですが、使い方がよく分かりません。
どのようにすればいいんですか?
>>904 それではまず、あなたがインストロールしたソフトウェアの名称を教えてください。
>>903 あと、requireは拡張ライブラリも読める、
$:を探すというのも。
>>905 >インストロール
釣りか? 釣りなのか? そんなエサにはひっかからないぞ!
908 :
デフォルトの名無しさん:04/03/19 12:08
IDEはがんばって欲しいよ
そりゃ昔からやってる人はEmacsだろうけど、大多数はWindows組だしさ
xxx.
てな具合にドットをつけてしまっただけで、[ソースの最終行]syntax errorと表示されて
しまうのも不親切だと思う。ここを示してくれる構文チェッカーが欲しい
909 :
デフォルトの名無しさん:04/03/19 12:23
909
ftools.rb 、面倒見る気無いなら、ドキュメントで obsolete と宣言するなり、
require 時に warning 出すなりした方が良いと思うのだが。
>>906 load も $: 見るよ。
おれも最近知って驚いたんだけどね。
load で設定ファイルなんかを読むときは
横着せずに File.expand_path したほうがいいな。
>>911 CVS上ではとっくに「fileutils推奨」と書き込まれているわけだが。
914 :
デフォルトの名無しさん:04/03/19 17:54
>>905 Ruby Entry Package for Win32をダウンロードして
インストールしたんですが、使い方がよく分かりません。
どのようにすればいいんですか?
Matz日記にアクセス拒否されてる気がするのは俺だけか?
はてなアンテナは更新取ってきてるのに自分はアクセスできない
rexmlってutf-8しかparseしないと言われているけど、
漏れが使ってる限り、そうでもないのだが
require 'rexml/document'
require 'kconv'
p Kconv::SJIS == Kconv.guess( REXML::Document.new('<a>あ</a>').to_s)
>true
>>918 確かに以前は UTF-8 だけしかダメだったけど、最近はそうでもないらしいよ。
るびきち だ け は 勘 弁 し て く だ さ い
>>923 > 嵐を呼ぶイベントLightweight Language Saturday!
> あの興奮が今誌面によみがえります。
なんつーあおり文句だw
>>912 そんな気もしたんだけど、出先だったんで確認できなかった。
うろ覚えスマソ。
>>882 仕事で使ってます。
「え、Perlにしろって?コードが2倍に、開発時間4倍になりますけどいいですか?」
と開き直る。確信犯だが、良いものは広めていかねば。
Perlは良いライブラリが充実してて初心者にやさしいからなぁ
ほしいライブラリを探して、無いことほとんどないし。
Rubyはライブラリという点で力を入れないと。
>>884 どこの会社が使ってんのかさっぱりわからないよ。
転職するとき開発言語Rubyで探してたけど擦りもしないし。
>>886, 927
そんな立場だといいんだけど、下っぱの俺にはどうすることもできない。
あと5年ぐらい待ってみるか。
>>886 > ここ3年ほど、入ってくる案件の7割くらいはRubyで作って納めてる。
> 残りはPerlとCが半々くらいかな。
ちなみに会社はどのあたりにあるのでしょうか?
都道府県名で教えてもらえませんか?
>>917 正直、日本語処理で有利かといわれると、そんなことないしな。
933 :
デフォルトの名無しさん:04/03/20 21:00
Ruby Entry Package for Win32をダウンロードして
インストールしたんですが、使い方がよく分かりません。
どのようにすればいいんですか?
そのままnyに放流するとか
>>933 DOSプロンプトを起動
ruby -v
937 :
デフォルトの名無しさん:04/03/20 23:57
>>931 googleで検索してたらアドワーズで
「Rubyを活かす求人情報」なんて出て
findjobとかいう求人サイトへ飛んだぞ
なんかクリックして激しく後悔した
(別に活かしたいわけじゃないし。そんなにのフラフラと乗せられんなよ)
後悔したっていうのは。
Rubyユーザはプログラミング好きな香具師だから
そいつらを狙おうという、
要らない打算がありそうなのが気持ち悪い。
>>940 正しい用法の場合は「確信犯だが」などためらってはいかんと思う。
確信犯は自分で自分の事を確信犯だとはいわない気がする。
1.6以前だと、sub(pettern, replace)の pettern が正規表現に変換されるのだけど、
これを防ぐ方法ってある?
正規表現に変換されると、上手く文字列が置換できないのだが……
>>943 sub(Regexp.quote(pattern), replace)
>>944 即レスありがとうっ!
# ちゃんと書かなきゃ駄目だったのか。
# ……単に''で括って駄目だったので諦めてた……阿呆だ漏れ
つか自動的に変換してんじゃねーよ、という気は確かにする。
>>946 変換しなかったらしなかったで怒る癖に。
948 :
デフォルトの名無しさん:04/03/21 15:33
ハングマンを作りたいのですが何もてにつかない
初心者ですみません 誰か救いの手を・・・
>>948 1: 頭の中でルールを整理する
2: 思うがままに書く
3: 書いたとおりに動く
4: 思ってる通りに書けてないので goto 2;
てーかRubyで仕事って冗談でしょ。
簡単すぎだろ。仕事になるのか?
Rubyで仕事って一見馬鹿っぽいけど実は重要な意味があるんだよ。
Rubyで仕事->他人にはメンテ不可->自分の存在価値が高まる->クビになりにくい->(゚Д゚)ウマー
というわけさ。
無職の春坊には分かるまいが自分の仕事を確保するのもまた重要な仕事なのだよ。
>>947 でもさ、文字列リテラルと正規表現リテラルの書き分けは出来るんだから、
勝手に変換するのは混乱の元だと思う。
だから、変換しないようになったじゃない
>>950 つまらん釣りだとは思うが。
仕事が簡単になるのは良いことだよ。
同じ仕様を実現するにも開発効率がよければより多くの仕事をこなせるでしょ。
おれの場合フリーだから開発効率は収入に直結してるよ。
Rubyで多くの仕事をこなすようになって収入は2倍とまではいかないものの、
少なくとも5割増くらいにはなったからね。工数を短めに見積もれるから、
合見積もりに強くなったしね。
んー、いかにも信者っぽい発言に見えるな、我ながらw
ただ実感としてそうだからねえ。他に開発効率のよいものがあれば喜んで移るつもりはある。
Lispなんかそうらしいんだけど、おれの頭じゃついていけんw
もちろんRubyじゃ仕様を満たせない要求も存在するんで、
そういうときは別のものを使って開発するしね。その辺は考えてますよ。
角度とか。
じーくじおんっ!
すいません、質問いいですか?
class V
def initialize(x, y, z)
@x = x
@y = y
@z = z
end
def *(n)
V.new(@x * n, @y * n, @z * n)
end
attr_accessor :x, :y, :z
end
と言う定義があって
a = V.new(1, 2, 3)
b = a * 5 #=> b.x = 5, b.y == 10, b.z == 15
c = 5 * a #(*)
と、したときに、(*)の行でcがbと同じになる様にしたいのですが、
どう書けばいいのでしょうか?
>>959 class Numeric
def *(x)
if x.is_a?(V)
x * self
else
super
end
end
かなあ。
>>960 あー、superじゃだめだ。alias使ってください。
>>957 そそ。まったく同意。
効率が良いだけじゃなくて、なんつうの、いい意味で頭を使う楽しさもあるよな。
綺麗に書けたときは嬉しいし、
# Perlで綺麗に書けてもあまり嬉しくない :-(
OOのせいで機能追加や汎用化に強いシステム作りやすいしな。
(どうせ完成してからも、アレ足せコレ変えろソレ出来ないかって言ってくるわけだから)
もっといいものがあれば移るけどね、いまんとこ満足してる。
ライブラリとかも、あと5年くらいすればなんとかなるでしょ。
インデント幅が4って、かなり違和感あるな。
ところで ruby-indent-level を 3にして
適当なコードを re-indentしてみたら悪くない。
でも他から浮いちゃうからなー……。
>>960 そういうときって coerce 使うんじゃないっけ?
>>963 tdiaryの開発者ですか?
Ruby以外の言語はインデント幅どうしてます?
ruby は 2
C/C++ は 4
タブでインデントする奴は死刑
まぁ死刑は冗談にしても、
Emacs使ってる人は indent-tabs-mode を nil にしておいてほしい。
じゃないと、インデントにタブとスペースが混じっちゃうから。