3げっと
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/ 1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。
27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?
38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27 鋭いです。
73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
6 :
デフォルトの名無しさん :03/01/09 01:05
age
>467 すでに・・・すでに!?
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/ 1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。
27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?
38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27 鋭いです。
73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
名スレの予感
漏れ達がひろゆきを愛したように、ひろゆきも漏れ達を愛してほしい!
IP表示すればいいじゃん。 田舎者の煽りは酷い。
>>138 メガビだからって安心なわけじゃないような。
なんか誤爆が激しいが、 2ch壊れたのか?
前スレの RDT だけど、JRuby のパーサを使おうという話は出てないのかな。
======2==C==H======================================================
2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 138720人 発行日:2003/1/9
年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。
そんなわけで、年末に予告したIP記録ですが実験を開始しています。
「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50 ────────────────────────────
18 :
デフォルトの名無しさん :03/01/09 21:09
去年は2回しか新バージョンがリリースされなかったんだが、 ちょっと淋しいねえ。 いいかげん 1.8 も出してもらいたいし。
被ってる上にかなり出遅れてるし。
>>567 そういう状況なってみないと分からんよ。
>>16 JRuby触ってみたけど、結構いい感じ。
まだまだ細かいところで未完成の部分はあるけどな。
でも、起動がスゲー重いよ。
Javaの遅さにRubyの遅さがプラスされて…。
$ jruby -e "puts 'hello, world'"
だけで、数秒かかるのはJRubyの所為というよりやっぱJavaの所為かな…。
でも、何となく期待している。
Jythonに負けるな!
まあ、本家Rubyにほぼ完全対応って感じでないと、
パーサとして使うのは難しいかも知れないね。
>>21 irb・rtags・RDocのパーサー(と言えるか怪しいけど)は
Rubyの文法に完全対応していないけど、そこそこ使える。
JRubyは完全対応しないといけないだろうけど、
結局、適材適所じゃないかな。
ちなみに、Rubyのパーサーに本当に完全対応させるのはかなり面倒だと思う。
Rubyではローカル変数等に日本語が使えるので、そこまでやりはじめると…。
某○○は相手が事実を認識しえたと判った段階でレス汁w
某○○は相手が事実を認識しえたと判った段階でレス汁w
って言うよりも俺たちがひろゆき氏を助けなければ こんな面白い遊び場作ってくれたんだから・・・何とかしてやろ〜ぜ!
うわ、まじだよ。
こんなスタイルになるのかな? 誰かが他の掲示板で密告→第三者が2chでスレ建て→祭り
>>22 ruby本体にparser API みたいなのが欲しいねえ
なるほど
ひろゆき 仕事紹介してくれ
IP取ろうが取るまいが 捕まるときは捕まるし 別に今までと大して変わらんと思われ。 ただ、今はちと過渡期なので まわりが様子見な感じだけど すぐに元に戻ると思われる
34 :
デフォルトの名無しさん :03/01/10 23:46
ぼすけて
切っ掛けは匿名だったかもしれないけど、今ではそんなに重要性ないでしょう。 アングラな内容も1ジャンルって感じだし。 昔はカテごとに雑談できるのも(目に付くところでは)珍しかったし いち早くUG系から離れたのもあるんでない?
我ながら好き勝手にほざいてしまいますた・・(汗 もし実現しても回線細そうですしね。。。
新しいwww.ruby-lang.org、python.jpの後追いみたいで何だか...。
>>30 まつもと氏はRiteでは用意するとか言っていた気がする。
この辺のライブラリの整備のされ方はpythonと大きく違うよね。
今はFreeRIDEのようにripperを使うのが一番良い気がする。
氏ね
/⌒∞、 ずさー♥ ./ ゚∀~・:ヽ、 ι、,,,,、,,,,,,、,,,,ゝ
======2==C==H======================================================
2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 139038人 発行日:2003/1/10
なにやら、連日メルマガだしてるひろゆきです。
そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。
重くなって落ちたりしてもご愛嬌ってことで。。。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50 ────────────────────────────
快速たん(・∀・)イイ!!
さん 10桁トリップの時に、トオルさんとマァヴさんが、話してましたわね、
スレ違いのレスはよくないな。 ここは快速スレですよ
45 :
デフォルトの名無しさん :03/01/11 15:19
Vector 見てたら、 C/C++統合開発環境 WideStudio が 「Ruby 言語(v3.20から)」も使えるようになったようですな。 誰か使ってみた人いる? ちょっと試したけど、Rubyのサンプルが見あたらないので訳わからん。
何で前スレスレストかかってんの?
sports3鯖死んでる?? 国内サッカー板が見れない…
>>45 前に見たときは Linux 版しか対応してなかったけど、
Windows 版も出てるようだから試してみるね。
49 :
デフォルトの名無しさん :03/01/11 19:24
>>45 おなじく ruby によるサンプルをはげしく希望
お前のは議論じゃないよw 「これ言っていいですか?」 「これ言うとヤバイですか?」 って他人に聞いてるだけw 寝るのがイヤなら、教えて厨は初心者板に逝ってねw
もしこれが実行されたらにちゃんは閉鎖だな、きっと
wって2ちゃん発祥なの? ださくないか? (笑)もザサイから、(^^)がナウイよ。
>>52 なわけねーだろ。
ネット初心者がこーゆーとこに来るのは、どうかと思うぞ。
吉と出るか凶と出るか
レスありがとう。 俺素人だからよくわからないが アク禁にしないのは何か理由るのかな・・?
荒らしと見分けるために、名前欄に何か入れるようにしない?
>>45 ガイシュツだったような気がする。
つか、WideStudioって結構使われているの?
使いやすい?
今検索したら、前スレ666で既出でしたね。 すみませぬ。 #これ荒らしなの? 2chがイカレタのかと思ってた。
昨日、ruby-talkに登録してみたら、本日分だけで70通以上来てびびった。
これと比較するとruby-listはおとなしめだな。
興味を持った話題。
Win32Serial Extension Library for Ruby
WindowsのシリアルポートをRubyで使うライブラリ。
ttp://grub.ath.cx/win32serial/ Rubyで制御とかできるのかな。
だれかに突っ込むの手伝ってくだいよぉ
実質的には上告はもう無理らしい。 うれしいなぁ。
>>56 徹底できるわけがないから無駄なことやめて unix 板へでも逝け。
ここはもう人いないよ。
>>63 それもそうだな。
俺、窓使いだけどおじゃまさせてもらいます。
あーっはっは! 久しぶりに笑ったよ!
公開トリップ?そんな魅力も何にもないトリップなんて わざわざ使う人いないと思うけど… どこで公開されてるの?そんな糞トリップ公開されてもねぇ 同じ人が串でも使っているんじゃ?
お疲れさまでした〜
(^^)
69 :
irbについて :03/01/14 15:48
irbを電卓代わりに使いたいのですが 自前のモジュール(関数郡)を組み込んだり 一度プロセスを終了しても変数の値を保存しておいたりすることはできますか?
1. 普通に require すればいい 2. Marshal や PStore
(^^)
72 :
irbについて :03/01/15 20:43
>2. Marshal や PStore 使った変数すべてを自動的に保存復旧したいのです。 a=3 exit 再起動 p a 3 みたいに。
>>72 irb で打ち込んだのを全て保存しておいて、
起動時に読ませるようにすれば?
>>72 local_variables()を使えばいけそう。
と思ったが、ローカル変数だと、ちいと辛いな・・
bindingでうまくいかないかな?
ちと、やってみます。
require 'pstore' class VarsStore def initialize(storefile) @store = PStore.new(storefile) end def save(bind) hash = {} eval("local_variables", bind).each do |name| val = eval("#{name}", bind) if val.equal?(self) next end hash[name] = val end @store.transaction do @store["local"] = hash end end ----- つづく
つづき ----- def load(bind) hash = nil @store.transaction do hash = @store["local"] end hash.each do |key, val| $varsstore_val = val eval("#{key} = $varsstore_val", bind) end end end
requireして、
セーブ
VarsStore.new("hoge").save(binding)
ロード
VarsStore.new("hoge").load(binding)
とする、今のところBindingを指定しないとだめ。
ローカル変数にダンプできないオブジェがあるとエラーを吐く。
保存できるクラスは限定させた方がいいかな?(NumericかStringのみとか、、、)
あとは、適当に改造してみてね。
>>72
79 :
デフォルトの名無しさん :03/01/16 10:17
Win32APIを使う必要が出てきたのですが、 Win32API.new に関するリファレンスは どっかに転がってないでしょうか?
>>81 君がダウンロード時に自動的にgzip展開するブラウザを使ってるんだろう。
84 :
デフォルトの名無しさん :03/01/17 14:27
RubyUnit の Ruby 標準添付バージョン Test::Unit では、 サンプルコードとして以下のようなものが添付されてます。 -- tc_adder.rb class class TC_Adder < Test::Unit::TestCase .. -- ファイル名、クラス名なんですけども、もはや ファイル名の頭に「tc_」、クラス名の頭に「TC_」っていうのは、 業界標準なんでしょうか。
85 :
デフォルトの名無しさん :03/01/17 16:59
ruby-modeでC-jをenterでできるようにしたいのですが、.emacsにどのような設定をすれば よいのでしょうか。
C-m
>>84 漏れは RubyUnit(runit) の表記の方が好き。
Adder -> AdderTest のように suffix をつける。
>>84 Adder -> TestAdderって付ける漏れは標準でないのか…。
そして、ファイル名はtestadder.rbだし。
ファイル名とクラス名を同じにするのは普通なんじゃないの?
それとも漏れがJavaなんかやっている所為でそれになれているから?
90 :
デフォルトの名無しさん :03/01/18 09:42
ちゅうか、RubyUnit じゃなくて Test::Unit をRuby の標準添付ライブラリに採用するっていうのが どうにも違和感がある。RubyUnit からの移行は、Ruby の動的な言語仕様のおかげで、移行のための コードもそんなに書かなくて済むけど(今後、XML::Dom だの出てくるだろう)ちょっとな。 (メソッド名でも assert_equals, assert_equal という違いがある なんで統一しない? < Test::Unit) 今更、Rubyにライブラリのネーミング規則云々っていうのは似合わないような気がしてる。
eaocf-18p157.ppp15.odn.ne.jp
92 :
デフォルトの名無しさん :03/01/19 00:18
Rubyって最近、すごい分野の狭い話題で1冊の本になってるのが多いですよね。 Ruby+GtkとかeRubyとかRuby+XMLとか… あんなんでよく本が1冊も書けるなあ、っていうか、買う人いるの? 他の言語の開発者だったら、あんなの1冊ずつ買ってたら絶対置き場所なくなる。
>>92 そっか? Amazonで、Javaあたりで検索すれば、Swingで、Appletで、DBで、XMLで、
Webサービスで、……という具合なんだが。アプリケーションドメイン毎に本が出る
のは当然じゃないだろか?
>>92 入門書だけで10冊や20冊ぐらいある言語を見ると、
そっちの方がある意味おかしくないかい?
まあ、256本のやつは確かに異常だけどさ…。
でも、極道編は俺にとって面白かったぞ。
UnitTestの入門書としては。
95 :
デフォルトの名無しさん :03/01/20 22:45
www.ruby-lang.orgもやっと最近流行のWeblog風になりましたけど、なんだかまだ 寂しげですね。素直にZope使ってはいかがですか?
96 :
デフォルトの名無しさん :03/01/20 23:13
確かに他の言語と比べたらアート的な部分に関して(RWiki といい)今ひとつモダンな感じがしないね。
そーだね。Ruby界隈はカタい雰囲気ある。 HTMLはStrictじゃないと許さん、みたいな。
オンラインでリファレンスを見てると、たまにやたらと重いときがあるんで、 ローカルで見るようにしよと思ってドキュメントをダウソして解凍してみたら 形式がRDでやんの。 HTMLの形式でも配ってくれればいいのに。 HTMLのやつもあったけど、リンク切れがあちこちにあるし、 ひとつのファイルに連結されてるからIEじゃ重くて使いにくいし。
100 :
デフォルトの名無しさん :03/01/21 01:41
オブジェクト指向原理主義、オープンソース界のアルカイーダ HTMLはStrictにしる!ドキュメントはRDにしる!! Windows、Mac OSは消去してLinux/BSDにしる! スローガン: 欲 し が り ま せ ん 勝 つ ま で は
rd2 で HTML に変換すれば?
102 :
Rubist@カラアゲ :03/01/21 04:20
んこんこんこんこんこんこんこんこんこんこんこんこんこんんこんこんこ んこんこんこんこんこんこんこんこんこんこんこんこんこんんこんこんこ んこんこんこんこんこんこんこんこんこんこんこんこんこんんこんこんこ んこんこんこんこんこんこんこんこんこんこんこんこんこんんこんこんこ んこんこんこんこんこんこんこんこんこんこんこんこんこんんこんこんこ んこんこんこんこんこんこんこんこんこんこんこんこんこんんこんこんこ んこんこんこんこんこんこんこんこんこんこんこんこんこんんこんこんこ んこんこんこんこんこんこんこんこんこんこんこんこんこんんこんこんこ んこんこんこんこんこんこんこんこんこんこんこんこんこんんこんこんこ んこんこんこんこんこんこんこんこんこんこんこんこんこんんこんこんこ んこんこんこんこんこんこんこんこんこんこんこんこんこんんこんこんこ んこんこんこんこんこんこんこんこんこんこんこんこんこんんこんこんこ
103 :
Rubist@カラアゲ :03/01/21 04:21
>97 俺のようなマイルドな奴もいるぜ、ヒヒヒ。。
>103 ごめん, 厨のこと忘れてた。
美的感覚といえば、Ruby はインデントの主流が2なのもどうかと思う。 正直見づらい。 (RDフォーマットは賛美両論ありながらも、俺は気に入ってる)
>>106 何の言語でもインデント 2 で書きますが何か?
…趣味で作るやつは、だけど。
>>108 原理主義者だから、GNUスタイルのインデント 2なのね。
ruby は2がしっくりくるなぁ C あたりは4
文字列にある文字列が含まれてるか判断するのに正規表現より index()を使ったほうが速いだろうと思っていて、いままで全部index() を使ってきたけど、念のために速さを調べてみたら正規表現のほうが 速かった。 ちょっとショック。 if str.index('hoge') ... if str =~ /hoge/ ... # こっちのほうが速い
112 :
デフォルトの名無しさん :03/01/21 19:49
>>109 あれ、linux カーネルは tab の 8 で書かれてなかったっけ。
インデントにスペース使う奴はドキュソ
オレはスペース派。 違う環境に持っていってもインデントが崩れないのが好き。
>>111 String#indexをBM searchでも使って書き直して送るべし。
>>115 調べなおしてみたら、文字列が短いときとか最初のほうでマッチするとき
は、index()のほうが速かった。
if text.upcase == 'HOGEHOGE' if text =~ /^hogehoge$/i 大文字小文字無視して等しいか調べるときも、正規表現が速かった。 1.7ではcasecmpというのがあるみたいだけど、入れるのが面倒だから 調べられない。
120 :
デフォルトの名無しさん :03/01/22 10:24
2スペースだと、年とってから苦労しますよ。4ぐらいにしときなさい。
普段、抽象化抽象化と煩い奴に限って、 インデントをタブ文字で抽象化しないのは何故だ?
環境依存だからです。
スクリプト言語でタブインデントする根拠は希薄
スクリプト言語でオブジェクト指向する根拠は希薄
動的オブジェクト指向は書き捨てでも役に立つぞ
Rubyyyy>>>>>>>>>>>>>>>perl. HTML>>>>>>>>>>>>>>>>>>rd
一気に合成する方法として、例えば、ImageMagick の % convert -crop (ca)x(db)+a+b orange.gif blue.gif の機能を使って、 png画像→1/2.5万 1/2.5万→1/5万 1/2.5万→1/20万 1/5万→1/20万 とする方法が考えられます。 この変換スクリプト、誰か書いてくださいませんでしょうか。 僕にはそこまでできません。 す み ま せ ん が 誰 か 助 け て く だ さ い 。
129 :
デフォルトの名無しさん :03/01/23 10:39
winのmutexみたいに、プロセスをまたいで排他処理を行う方法は rubyには無いのでしょうか? (flockくらいしか方法は無いのでしょうか?)
131 :
デフォルトの名無しさん :03/01/23 10:55
>>111 でindex()より正規表現が速いって書いたものです。
↓このように書いてたものを
while true
text.index('hoge')
end
↓このように書き直してみたら、正規表現とほぼ同じ速さになりました。
t = hoge
while true
text.index(t)
end
リテラルがあると遅くなるのかなぁ?
>>132 それはプロセス内でしか使えないのでは?
>>129 RAAで、semaphoreとかSysV IPCとか入れて探してみれば。
>>133 あ、勘違いスマソ。
プロセス間ね、スレッド間だと思っていた。
137 :
デフォルトの名無しさん :03/01/23 15:09
>> 131 > リテラルがあると遅くなるのかなぁ? 構文解析結果のノードの中の文字列をそのまま使用できないので、 毎回、'hoge'文字列のコピーが行われます。 変数を使用する場合は、その変数の値の文字列が そのまま使用されます。
(^^)
139 :
デフォルトの名無しさん :03/01/24 11:13
>>137 > 構文解析結果のノードの中の文字列をそのまま使用できないので、
> 毎回、'hoge'文字列のコピーが行われます。
補足すると、文字列自体はStringオブジェクトの間で共有されるので、
文字列のコピーというよりは、Stringオブジェクトのコピーが
毎回行われるということです。
140 :
デフォルトの名無しさん :03/01/24 11:40
arr.each{|i|...} の|i|を省略可能にしてくれ。
その場合決め打ちで i になるわけ? そんなのヤだ。
142 :
デフォルトの名無しさん :03/01/24 16:33
文字列linesをファイルに書き出したいのですが もっと簡潔に書けないでしょうか? open("log", "w"){|f| lines.each{|s| f.puts s } }
143 :
デフォルトの名無しさん :03/01/24 16:35
>>142 f.puts lines.join("\n")
144 :
デフォルトの名無しさん :03/01/24 16:35
>>143 joinはいらないのでは?
f.puts lines
IO.popenで起動したプロセスが終了したのを認識するのってどうすればいいんでしょうか? 厨な質問でスマソ
>>147 読み込みならそれが終わるまででいいんでないの。
書き出しなら先に終了されたらエラーになるでそ。
どうしてもやりたきゃ pid をとって waitpid。
150 :
デフォルトの名無しさん :03/01/24 20:58
スレ違いかもしんないですが、 Rubyで実装されたWikiを利用するとしたら、 * Tiki * asWiki どちらをオススメしますか? パッと見、似たような感じだけど……。 # RWikiはdaemonが必要だからちょっと敬遠。 amritaを使っているのでaswikiかなあ、とは思っているんですが、 「Tikiのほうがイイってば!」ってなポイントがあれば知りたい。
152 :
デフォルトの名無しさん :03/01/25 00:02
153 :
デフォルトの名無しさん :03/01/25 01:01
>>152 tDiaryのプラグインが使えるってのがちょっと面白い。
154 :
デフォルトの名無しさん :03/01/25 17:36
>>127 合成するって、めちゃくちゃにでかい画像ファイルができそうだが。
Ruby でグラフィックを扱うなら Ruby/GD を使うのがいいよ。
やっとrubyがわかってきますた。 慣れたら簡単やね
RDのフォーマットってもうこれ以上変わらんのかな? オブジェクト(イメージ)の埋め込みが出来てほしい PODに乗り換えようかと思ったけど、 RDの方が分かりやすかった。 この仕様だけなんだけど。
>>156 もともとはテキストの為のフォーマットなので、
画像を扱うというのは考えられていないと思われ。
RWikiとかみたいに自分で拡張する分には自由でしょう。
>>156 まつもとさんは以前RDをこれ以上複雑にしたくない、
という趣旨の発言をしていたんで、RDという枠組みでは無理じゃないかな。
んで、拡張するのならRDという名前は捨ててくれ、ということだった。
だから、欲しいのなら君が拡張してRDじゃない名前をつけて発表すれ(w
160 :
デフォルトの名無しさん :03/01/26 17:53
名前付パイプでプロセス間通信をしようとしています。 サーバー[1] <- クライアント[多] クライアント(送信がわ)のデータが512バイト以下であれば、 データは交じり合わない(アトミック)であるということは調べたのですが、 RubyのIOバッファはどのくらいの大きさなのでしょうか? 512バイトの書き込みをして、2回に分けて書き込みがなされることはないと 考えてもよいのでしょうか? data = 512バイト以下のデータ open('パイプのパス', 'w') do |f| while ... f.print data f.flush end end ↑このようにして、手元の環境で、複数のプロセスからパイプに書き込んで、 実験したところ、データが混じりあうことは無かったのですが…
>>160 syswrite()でやればOKそうな気がするので、syswrite()でやります。
>>111 そういえば、以前、index を速くするパッチ投げたんですけど、
$= 見てなかったりいまいちだったんで、その後放置してたのを思い出しました。
あの頃から実装変わってるのかな?まあどうでもいいか。
163 :
デフォルトの名無しさん :03/01/27 21:05
質問です。 ------------------------------- c:/src/hello.rb(↓中身) def hello() print("Hello ruby.\n") end ------------------------------- c:/src/call.rb(↓中身) require "hello" hello() ------------------------------- c:/bat/hello.bat(↓中身) ruby c:/temp/call.rb ------------------------------- 上記のような状態で3ファイル有り、 c:/bat>hello.bat(←コマンドプロンプト) のような状態でバッチファイルを実行するとエラーになります。 そこで次のような形でとりあえず解決しました。 ------------------------------- c:/bat/hello.bat(↓中身) cd c: cd temp ruby call.rb ------------------------------- もしこれをRubyのみで解決する場合どのようにするのが賢いでしょうか? どうか教えてください。 よろしくお願いします。
>>163 いつもいつも言われることだが、エラーの中身を書け、と。
あと、ruby -vの結果も。ついでにWindows(だよな?)のバージョンも。
ついでなので、環境変数PATHの中身とrubyがインストールされている
場所も書くとなおよいだろう。
>>163 環境変数 RUBYLIB に hello.rb のあるディレクトリを記述しる
>>163 call.rbの先頭に次の一行追加する。
$:.unshift(File.dirname($0))
これで、call.rbと同じディレクトリにあるファイルを
requireするようになる。
>>163 hello.batの中身を
ruby -IC:/temp C:/temp/call.rb
とするか、
ruby -CC:/temp call.rb
とする。
って、結局、*.rbはC:/srcとC:/tempとどっちにあるんだよ!
Exerb 使って単一ファイルにすれ。
こんなまともな回答が来るとは思ってなかったので、正直ビビっております。
昨晩の時点でレス無くてあきらめてたんで、なおさらでした。
まず、
>>164-168 皆様回答ありがとうございます。
んで、回答ですが、私の求めていた形は
>>166 さんのものでした。
私の作った*.rbを他者が使用する場合、
各環境によってbatやPATHを変更するのがどうにも具合が悪かったためです。
たくさん回答していただきありがとうございました。ホント感激です。
2chなめててスマソ。
>>164 まず質問の書き方を知りませんでした。
以後気を付けます。
>>167 さん
srcです。tempじゃ無いです。
ごめんなさい、逝ってきます…
>>168 さん
Exerbの存在を知りませんでした。
こういう方法もあるのですね。
勉強になります。ありがとうございました。
>>162 > そういえば、以前、index を速くするパッチ投げたんですけど、
どこにあるの?
>>166 $0より__FILE__の方が良いかも。
172 :
デフォルトの名無しさん :03/01/30 00:29
Windows(not cygwin)でrdrt2使うとOpen3.popenでforkが実装されていないよとエラーになるのですが解決策があればおしえてください。
>>174 call.rbが更に別ディレクトリにある他のスクリプトからrequireされると、
File.dirname($0)では困るからとか?
よいかどうかというより、意味が違う。
$0は最初に与えられたスクリプトファイル名、
__FILE__は現に実行中のファイル名(この場合はcall.rb)。
call.rbを基準にロードしたいなら、
>>171 のいう通りFile.dirname(__FILE__)。
はっきりいって散々外出。
ありがとうございます。 win32 環境で rttool を利用する手順です。 (1) rttool をインストール (2) win32_popen をインストール (3) rd/tree.rb:20 を以下のように書き換える TMP_DIR = ENV["TEMP"] || ENV["TMP"] || "/tmp"
(4) ~/.rd2rc の external_filterを以下のように書き換える #pipe[0] .close だとブロックしてうまくいかなかった。。。 def external_filter (prog) require "win32_popen" pipe = IO.win32_popen3(prog) pipe[0] .print self pipe[0] .print "\C-z" pipe[1] .read end (5) rt2 を実行する rt2.bat を作る ruby %YOUR_RUBY_HOME%/bin/rt2 %*
179 :
デフォルトの名無しさん :03/02/04 17:40
すいません。すごい馬鹿なこと聞きます。 たとえば、a.txtっていうファイルを作って、 そこに I have a pen って内容を書きたかったらどうしたらいいですか? 次の様に書いたら動きませんでした。 new_file = File.new("a.txt") new_file.print("I have a pen") new_file.close
>>179 > new_file = File.new("a.txt")
open modeを省略すると"r"(読み込み)と解釈されるんで、当然書けない。
>>180 これで2時間悩んでました。
ありがとうございました。
>>178 > #pipe[0] .close だとブロックしてうまくいかなかった。。。
win32_popen3は三つのIO全部にpidをセットしてるので、どれかをcloseしよう
とすると子プロセスの終了を待ってしまう。
> def external_filter (prog)
> require "win32_popen"
> pipe = IO.win32_popen3(prog)
stderr垂れ流しでもいいんなら、1.8.0ではIO.popen(prog, "r+")でいけるよ
うになってるはず。
rubi-1.6.7で makeの時わざとconfigure消してautoconfigしたらreadlineの所で エラーになったんだけど、これってreadlineが古いから?(1.??使用) ちなみに、元々入ってるConfigreで、./configre、make、make test だと問題無い。
>>183 rubiの話は専用スレへ。
autoconfのバージョンとエラーの内容は?
185 :
デフォルトの名無しさん :03/02/08 18:06
mswin32版で拡張ライブラリをmakeするばあいVC++が必須なん?
VC++くらい買えよ
>>185 mingwでコンパイルできるはずだが、rbconfig.rbをいじらんと無理だろうな。
188 :
デフォルトの名無しさん :03/02/08 19:06
javaでunicodeからshiftJisへの変換ってどうやるの〜????
できません。rubyを使いましょう。 #!/usr/bin/env ruby system('nkf -Ws #{ARGV[0]}')
>>188 激しくすれ違い。
java.nio.charsetパッケージのリファレンスを読んで自分で調べろ。
>>189 そりゃrubyでやってるとはいわんだろ。
せめてuconvかiconv
192 :
デフォルトの名無しさん :03/02/08 22:23
>>187 やっぱそうなんだ。
しょうがないのでmingw版のバイナリをもってきて、バイナリエディタでruby-mingw32.dllにリンクしている情報をmswinに書き替えちゃったよ。
>>192 素直にmingw版を使えばいいのにとは思うが、
1.8ではmingwとmswinは拡張ライブラリを共有できるようになってる。
194 :
質問スレではスルーされた :03/02/10 07:15
Rubyプログラミングを大学でやるらしいのですが、こちとら生まれて此の方 プログラミングなんていう高等技術をやったことがありません。 初心者Rubyプログラマーのポータルサイトなど御座いますでしょうか?
つーか授業でRuby使うって、島根大学?
>>195-197 入門って入れればいいのか・・・
何やってんだろう、ずっと初心者とかで検索してた。
すいませんでした。今度から徹底的に検索してから参ります。
199 :
デフォルトの名無しさん :03/02/11 11:44
DelphiのExtractFileExt/Pathのようなパス操作関数ってないですか?
ExtractFileDir: File::dirname ExtractFileName: File::basename ExtractFileExt: File::extname
202 :
デフォルトの名無しさん :03/02/12 22:57
hikiのソースって、まだダウンロードできないのかな?
まだっぽい。早く公開してくれないかねぇ。
2/9「変更点は以下の通り。あと、プラグイン周りを見直してページの凍結を作り込んだら細々と公開させてもらいます。 」 もうしばらく待つが吉。
文法がWardCunninghamっぽい、tDiaryの匂いがする、ってことで ヒジョーに期待しています。 って、ここに書かないでHikiに書いたほうがいいのかもしれないが、 向こうではガイシュツだからここに書こう。
206 :
デフォルトの名無しさん :03/02/13 07:35
Hiki 良さそうですね。 ひとつだけ気になったのが、画像URLがデフォルトで<img>にされて しまうこと。コピペしたテキストとかの中身に注意を払わないと、 含まれてた画像URLが意図せず埋め込まれちゃいそう。
あまりあれこれ機能を足さず、シンプルなまま公開してほすい
208 :
デフォルトの名無しさん :03/02/15 15:11
Windows版ってパス名をC:\RUBY\HELLO.RBみたいに指定したり SJISのファイル名をちゃんと処理できないんですか?
DOSISH 対応は漸進的に進められているので 1.8-cvs を使って。
210 :
デフォルトの名無しさん :03/02/16 17:44
すみません。 つかぬことをお聞きしますが、'r+'で開いたファイルを操作する時に、 いままでそのファイルに記述してあったところの途中で、ファイルを終わらせたい場合には、 どのようにすればよいのでしょうか。 部分的に削除をしたいのです。
File#truncate
truncateなんてあったのですね。 なんとかできたようです。 ありがとうございました。
>>212 基本的に、UNIX系の標準ライブラリやシステムコールを知ってると類推できる
ことが多い。
214 :
デフォルトの名無しさん :03/02/16 22:07
オブジェクト指向っていっても、rubyのは単に .でつなぐだけでしょ?
>>214 そうだよ。 Perl にはそれすらできないんだってさ。
perlの話でもうしわけないんだけど、 日本語変換モジュールのJcodeは Jcode->new($str, 'sjis')->euc; みたいにできるのに 同じ作者のEncodeは encode('euc', decode('sjis', $str)); みたいな仕様にしたのかな? ->を使ってOOっぽく見せるのはやめて 関数型でやるのがPerl的には美しいの?
>>216 > Jcode->new($str, 'sjis')->euc;
対応するエンコーディング名があらかじめ決まってないといけないからじゃないの。
あ、なんでこうしなかったかってことか。 Encode->decode($str, 'sjis')->encode('euc')
>>218 ですです
関数型の方が語順が英語と似るからかな。
ruby本に書いてありましたよね。
Jcode.pmのOO風変換インターフェイスは失敗だったと思うから、採用しなくて良かったと思う。
>>221 個々のメソッドのインターフェイスがバラバラ。
例えば、下の例の前者は問題なくて後者は実行時エラー
print Jcode->new('文字列')->h2z()->sjis();
print Jcode->new('文字列')->sjis()->h2z();
文字列化演算子をオーバーロードするのなら、
両方の構文をサポートしてもよかったのではないかと思うのだが。
更に、convert()のエンコーディング指定文字列も、
正式名称"EUC-JP"などを受け付けるようにしていれば、もっと便利だったはずだ。
>>222 なるほど。
しかしそれはOO風にしたための失敗とはいえないのでは?
>>223 いや、まあ、元々不満だったのは「Jcodeのインターフェイス」であって、
「OO風インターフェイス」だから不満だったわけじゃないのだ。
Encode.pmはというと、インターフェイスこそ手続き型だけど、
その実装はOO無しには語れず、ただの関数を多態的に動作させるようになってる。
にもかかわらずあえて公開OOインターフェイスを備えていないのは、
関数の方が楽だから、だと思う。これは想像だが。
Encode->find('EUC-JP')->encode($str); # タイプが面倒
Encode->encode("EUC-JP", $str); # 悪くないが、まだ長い
encode("EUC-JP", "文字列"); # 短い。楽だ。
スマートにコンマ区切りのCSVを処理したいのですが どうsplitすればいいのでしょうか?
>>224 なるほどね。
> Encode->find('EUC-JP')->encode($str); # タイプが面倒
Rubyでいうと、iconvがこのスタイルだな
Iconv.new("shift_jis", "euc-jp").iconv(str)
> Encode->encode("EUC-JP", $str); # 悪くないが、まだ長い
これもあるようだが。
Iconv.iconv("shift_jis", "euc-jp", str)
>>227 Iconv はストリームを処理する状態機械だから str を引数に渡すのは派生だな
TidyみたいなライブラリのRuby実装ってご存知の方、いらっしゃいますか? マークアップがぐちゃぐちゃなHTMLをwell-formedなXHTMLに変換してくれ るようなものを探しています。 html-parser.rbがそうかな?と思ったんですが、 探しているのとちょっと違うような気がするんです……。
htmlrepair に手を入れて使うとか。
>>229 ああ「strを引数に渡すの」じゃなくて「クラスメソッド」だったyo
>>230 ありがとうございます。ruby-extはsubscribeしてませんでした。
tidy.rbのAgeが4hoursとはこれまたホットですね。ヲチしたいと思います。
236 :
デフォルトの名無しさん :03/02/20 00:23
amritaはしょうがないとして、strscan前提ってのはやめてもらえないかねえ。
>236 class Foo; p self; end
>>237 shim 入れろ。
ていうか、HTML を自分でパースしようと思ったら、strscan ってめっちゃ便利よ。
現在の1.8の安定度ってどんなもん?
仕様の安定度なら、かなり低い
Ruby の仕様と実装の関係はイデア理論で説明できる。 仕様はイデアである。実装はその影に過ぎない。 従って、イデアを求めて実装は変化するのである。
実装の過程でイデアも変化したりするがな。
>>240 strscan って ML みてるとインストールのトラブルがあったりで印象が悪いんだよね。
それに strscan を使わなくても じゅうぶん速く parse できるよ。
pure ruby の xml parser だってあるし。
247 :
デフォルトの名無しさん :03/02/24 01:45
RubyでJISX0208の記号(EUCで\xA1\x??〜\xA2\x??)にマッチするような正規表現を教えて下さい
EUCで? /#{"[\xa1\xa1-\xa2\xfe]"}/eo かな。
>>248 ありがとうございます。
これってそのままPerlでも通用するのでしょうか?
最近のPerlのI18N動向はよく知らないんだが、少なくとも#{}というのはRuby 独自なのでそのままは動かない。
あ、-Keつければ直接書けるよ。 /[ -◯]/
252 :
デフォルトの名無しさん :03/02/25 01:13
10執念あげ。
>>249 jperl なら通用するかもしれない。と後ろ向きなアドバイス。
[ruby-talk:65710]はなかなかお茶目だな。
255 :
デフォルトの名無しさん :03/02/27 17:49
ruby-shadow は後ろに立っている人から守る(ブラウザからは利用できない)。 ruby-password は統計的に弱過ぎるパスワードをつける不注意から守る。 BASIC認証は盗聴されない前提で比較的低頻度の総あたり攻撃から守る。 盗聴の危険が高い回線なら、SSLでBASIC認証を使い、 ruby-password で検査するくらいで適当。それでも弱いと思うなら、 BASIC認証を使わず、POSTでより長いパスワードを提供するしかない。 その場合はクッキーなどでセッションを維持することになる。 しかし通常のBBSならSSLでBASIC認証を使えば十分だと思うし、 SSLでなくてもBASIC認証だけでも構わないと思う。
クラス変数をpublicにしたいのですが、どうしたらできますか?
>>258 他にやり方があるかもしらんが
class Mona
@@val
def val=(v)
@@val = v
end
def val
@@val
end
end
>>259 クラス変数をインスタンスメソッドで変更するのはキモくないか?
class Mona
@@val
def self.val=(v)
@@val = v
end
def self.val
@@val
end
end
文字コードから、文字を得るのと 文字から文字コードを得るのって、どうすればいいですか?
>>262 文字というのがStringオブジェクトだとして
Integer#chr
String#[](index)
を使う
p 64.chr # '@'
p '@'[0] # 64
なるほど、ありがとうございました。
2.8.0preview2が出たというのに、静かだなぁここは。
違う、1.8.0preview2だ。鬱。
「ここだけ時間が5年進んでいるスレ。」からの誤爆とか。
previewはもういいよ。早く2.0出してくれ。
まだやること山のように残ってんので無理。
271 :
デフォルトの名無しさん :03/03/05 10:40
rubyでCGIを書いているのですが、 printf('<p class="%s">%d<p>', ck, num) print '<input name="'+name+'"' 〜 上記のような処理を下記のように全部書き直したら、 表示に6秒ほどかかってたのが3秒ほどになって、ちょっと感動しますた。 print '<p class="',ck,'">',num.to_s,'<p>' print '<input name="',name,'"' 〜 文字列の連結とか時間がかかるんだなぁ。
>>271 前者のprintfはいちいち書式指定文字列をパースしているから。
前者のprint は余計な文字列オブジェクトを生成しているから。
>271 前者だと演算子のたびに新しい文字列オブジェクトを生成するからね。 ま、ふつうは print %Q(<p class="#{ck}">#{num}<p>) print %Q(<input name="#{name}"〜) とか書くわけだが。
Person オブジェクトには、Person#name や Person#addr といったメソッドがあり、
実際には DB への問い合わせを行っているものとします。
DB の host 名や user や password などの設定を /etc/personrc に記述したい場合、
Person クラスへこの設定をくべるには、どのような設計にするのが良いでしょうか?
>>273 "#{num}" は新しい String オブジェクトを生成しないんでしょうか?
それとも生成してしまう?
>>274 > "#{num}" は新しい String オブジェクトを生成しないんでしょうか?
> それとも生成してしまう?
そこだけは新しいStringオブジェクトを生成する。num.to_sと同じ。
今までそんな文字列はどこにも存在しないんだから当然。
>>274 「くべる」って薪かよ。
すべてのPersonオブジェクトは単一のDBを共有するわけ?
最初にコネクションを張るときに読めばいいんじゃないの。
""ってだけでも常に新しいStringオブジェクトを生成するわけだが、
"#{num}"は(1.8では)""<<num.to_sと等価。
趣味は聞くまでもないだろう。と思った。
280 :
デフォルトの名無しさん :03/03/10 01:54
truncate ってどこで区切って、なんて読むんですか?
普通の英単語なんだが
>>280 「とらんかて」という関西弁のアルファベット表記です。
> お気に召さない場合は「インライン・コールバック」でも「ケサラン・パサラン」 > でも,なんでもお好きな名前に自由に読み換えてください. ってなんだかなあ…
インタビューおもしろかった。
まつもとさんのインタビュー読んで思ったのだけど、Ruby はギャグ、ユーモア という点で、Perl や Python に完全に負けてると思う。 Larry Wall や Tim Peters みたいにシャレの効いた言い回しのできる人がいない。 これけっこう重要なことだと思う。
うーん。 しかし、日本人のプログラマでユーモアのセンスがある人って見たことない。
>>286 namazuの高林さんてどう?
ユーモアのセンスありすぎだと思うけど、
ちょっと方向性が違うか。
288 :
デフォルトの名無しさん :03/03/17 14:36
高林さんっていうか、ソニーCSL絡みの人はみんな面白いですね。
こういうのをまじめくさって話す時点で もうシャレが通じないっていうか...。
ML によく投稿してる中田さんの >--- 僕の前にBugはない。 >--- 僕の後ろにBugはできる。 っての俺好きだなぁ。 初めて見たときニヤリとしたよ。
ユーモアの感想をいうことほど面白くないものはない
「ふえろ! わかめちゃん作戦ですえ但」は今年に入って消えたのな
「え但」って?
ハートマークが化けた状態か? そういう化け方は見たことないが
>>296 僕の書いたコードにバグはないが、後から続く者がバグを産む。
僕が書く前にはバグはないが、僕が書いた後にはバグを産む。
道程なんだから前者ってことはなかろう
>>296 http://sourceforge.net/mailarchive/message.php?msg_id=1349966 化けるので引用
> 「バグばっかりつくってごめんなさい」
> というのが、いちばん単純な解釈でしょうが、
> 謝ることができるということの裏には、
> 実際にコードを書いて働いていることや、
> 誤りを自ら認める心の広さが表現されているように
> 思えます。あるいは、「Bugはない」というのは
> 「コードそのものがない」ということを意味するとすれば、
> 開拓者魂の表現のようにも見えます。
> いずれにせよ、Bugの理由を、「コードは一般的にBugを
> 含むものだ」と「単に中田さんの技量の問題だ」の
> どちらの立場で解釈するかが、最初の分れ道ですね。
まさに >291 の言うとおりユーモアの解説は無粋だ。 >299 を攻めてるんじゃなくてそのリンク先の人ね。 笑えりゃOK、笑えなければポイでいいと思うんだがなぁ。
301 :
デフォルトの名無しさん :03/03/19 14:55
↓こういう感じで書けば圧縮ファイルができます。 o = open('|gzip -c > a','r+') o.print 'aaaaaaaaaaaaaaaaaaaaaa' o.close それをファイルに書き出さないで、メモリに読み込む方法はありますか? ↓こういうイメージです(このコードは動かない) o = open('|gzip -c','r+') o.print 'aaaaaaaaaaaaaaaaaaaaaa' data = o.read o.close リファレンスのIO.popenのサンプルで、catを使ってそういう ことをやっているので、なにか方法がありそうなのですが。
Warlus のひとの 「stableでなければ生きていけない。unstableでなければ生きてる意味がない」 ってのが好き
_人 ノ⌒ 丿 うんこ〜♪ _/ ::( / :::::::\ うんこ〜♪ ( :::::::;;;;;;;)_ うんこ〜♪ \_―― ̄ ̄::::::::::\ \ ノ ̄ ::::::::::::::::::::::) /うんこ〜♪ \( ::::::::::::::;;;;;;;;;;;;人/ / ̄――――― ̄ ̄::::::::\ ( ● \__/::●:::::::::::::) \__::::::::::\/;;;;;;;;;;;;;;;;;;;;;;ノ うんこ〜♪
305 :
デフォルトの名無しさん :03/03/19 21:37
307 :
デフォルトの名無しさん :03/03/21 19:17
おしえてください。 次の変形はどうやるの? str = "123" #=> "1,2,3"
>307 p "123".gsub(/(.)(?=.)/, "\\1,") p "123".split(//).join(",")
309 :
デフォルトの名無しさん :03/03/24 23:45
>307 こんなのはどう? p "123".scan(/\d/).join(',')
p("1,2,3") if str == "123"
>>310 こんなのにウケてしまうのが、自分で悔しい。
312 :
デフォルトの名無しさん :03/03/25 06:43
RubyがANSIとかで標準化されるのはいつですか?
松本がアメリカに帰化するとき
その前に、JISで標準化されます。
RubyがJISとかで標準化されるのはいつですか?
マツモトの偽者、Rubyのルイジ貧が出てこない限りは、 標準化する必要がないです。
俺はそんなものは望まない!
すでに大部分の機能をPythonにパクられているわけだが
>>319 これまでのPythonがダメダメだったんでいいんでないかい
>>319 え?そうなん?
どのへんがパクられたのか、どっかでまとめられてたりするかな?
foo = 7 if !foo をすっきり書くには foo ||= 7 が定石だけど, foo = (foo ? foo.to_i : 7) はなんかうまく書けないでしょうか? foo を 3 回も書くのがいやすぎ. -s オプションお手軽で好きなんだけど…
foo = (foo || 7).to_i
ちょっと話しずれるけど、foo = 0 にもできるようにしたい場合を考えると、 Perl じゃなくてよかったと思えるね。
メソッドチェインで、途中でnilになったらそこでエラーにせずに止める、とい うようなオペレータがかつて議論にのぼったことがあったような気がするが、 どうなったんだろう。 最近追い掛けてないのでage.
>>325 立ち消え状態だと思うが、こんなのはどうよ?
module Kernel
def ifnil?
self
end
end
class NilClass
def ifnil?
yield
end
end
catch(:nil) {
hoge.foo.ifnil?{throw :nil}.bar.ifnil?{throw :nil}.zot
}
>>326 こんなのは?
class Object
BLACKHOLE = Object.new
def BLACKHOLE.to_s() "()" end
def BLACKHOLE.method_missing(*x,&y) self end
def default(v=BLACKHOLE,&b) self or BLACKHOLE end
def and() default end
end
class NilClass
def default(v=BLACKHOLE,&b) block_given? ? yield : v end
end
puts ARGV.shift.and.hex
puts ARGV.shift.default("0").hex
>>327 > def default(v=BLACKHOLE,&b) self or BLACKHOLE end
def default(v=BLACKHOLE,&b) self or v end
もっともだ
330 :
デフォルトの名無しさん :03/03/28 22:39
Ruby界で標準のXMLライブラリってどれですか? 用途は、XML文章を操作するというのかなんというかDOMやらSAX が使いたいんです(まだどっちがどうなのかよくわかっていませんが)。 配布する環境はUNIXなんですが、開発はWindowsなんで、 どちらでも使えるとうれしいです。
REXML 余裕があるなら xmlscan をいじってみると面白いと思う。
標準って何? オープンソースって同一機能の複数実装が魅力なわけ。 標準なんてあるわけない。 もしも標準なんてあってそこを精密爆撃で狙われたら 標準が消滅しちゃうでしょ。 そのリスクを回避するために一見無駄な冗長性を持たせてるわけ。
333 :
デフォルトの名無しさん :03/03/28 23:01
すごい簡単なことかもしれないけど、質問させてください。 Ruby であるテキストファイル中の特定の語句を置換したいとします。 例: いぬ いぬ いぬ ねこ -> いぬ いぬ いぬ いぬ (ねこをいぬに置換) (要するに sed みたいなことがやりたい) 単純に File.open して each_line で置換したい語句があるかどうか調べていき、 マッチしない場合にはそのままの行を、マッチした場合には置換した行を一時ファイルに書き出し、 最終的に一時ファイルを元のファイルに rename する、ということを考えました。 この例だと一時ファイルを使ってしまいますが、一時ファイルを使わずに each_line で 見ていきながら、マッチする部分を直接書き換える、ということってできますか? もしあれば、コード例を示していただけると助かります。
>>333 よくわからんが、ruby の -i オプションを使えば解決されるような話?
なんか正規表現の変更の話が出ているみたいだけど、 [-0-9] のような表現って多用しませんか? いまさら [\-0-9] と書けって言われても、って感じ。
>>333 デカいファイルを突っ込むとメモリ馬鹿食いするけどこんなの。
TEXTFILE = 'inuneko.txt'
if (s = IO.readlines(TEXTFILE).map!{|line| gsub(/ねこ/, 'いぬ')})
open(TEXTFILE, 'w').print(s)
end
あ。だめだ。これだとどんな場合でも書いてしまう。 if (s = IO.readlines(TEXTFILE).map!{|line| gsub(/ねこ/, 'いぬ')}) # × if (s = IO.read(TEXTFILE).gsub!(/ねこ/m, 'いぬ')) # ○
>>336 これならデカいファイルでも安心。
どんな場合でも書いちゃうし非 unix 環境でちゃんと動くかは知らないけど。
File.open(file) { |src|
File.unlink(file)
File.open(file, 'w') { |dest|
src.each_line { |line|
dest << line.gsub(/ねこ/, 'いぬ') }}}
ruby -i -pe 'gsub(/ねこ/, "いぬ")' *.txt じゃだめ?
341 :
デフォルトの名無しさん :03/03/29 00:06
rubyさわっててつまってます。 text = <<-AHYA fooTEXTboo AHYA hoge = '\1000yen' p text.sub(/TEXT/, hoge) このスクリプトで出力が foo\1000yenboo\n となるのを期待してるのですが\1が消えてしまいます。 消えないようにするにはどうしたらいいのでしょうか?
\を¥にする
>>335 perlとかでも多用されているもんな。
>>342 そんな一休さんみたいな答えじゃなくて他の案をお願いします・゚・(ノД`)
hoge = "('1000yen'.to_i / 10 - 10 + 10 / 10).chr.succ" + "1000yen"
>>341 text.sub(/TEXT/) {hoge}
>>341 hoge = '\\\\1000yen'
>>347 誰かがまとめてたの見たことあるよ
本家マニュアルサイトの「落し穴」あたりをあたってみては
>>348 それは直感的にわかりにくい。
>>346 のほうが新婦瑠でわかりやすいから、暗号的なプログラムを書きたい
のでないかぎり、ブロックを使ったほうが良いと思う。
>>335 POSIX regex で許されてる表現はそのまま通って欲しいな。
352 :
not333な初心者 :03/03/29 13:02
>>338 の解説キボウ。お願いします。
なぜ、これなら、でかいファイルでもメモリを浪費しないんでしょうか?
2行目のunlinkが関係してるようなんですが。。
openしたブロックの中でunlinkって??
>>352 1. each_line なので全行をいっぺんにメモリに格納しません。
2. ファイルを open した状態で unlink してもファイルの中身は消えません。
(open したプロセスが一個も無くなってから消えます)
unlink 後に同名のファイルを open しても旧ファイルの中身に触れることはできません。
354 :
not333な初心者 :03/03/29 13:52
>>353 じゃあ、メモリを浪費しないのは、each_lineを使ってるからで、
処理前と処理後を、同名のファイル名にしたい今回のような場合は、
一行ごと、each_lineするためには、unlinkして、
旧ファイルの内容と、新ファイルの内容を別々に扱ってるってことですね。
ありがとうございました。
>>354 だから結局一時ファイルを使っているのと変わらないのよ。
どうも、ファイル書き換えについて質問させていただいた 333 です。 338 さん、プログラムリストと解説ありがとうございました。
>>338 少なくともDOSISH(mswin32, mingw32, bccwin32, djgpp, たぶんhuman68kも)
ではopenしているファイルを削除することはできない。
それ以外は分からん。
358 :
デフォルトの名無しさん :03/03/31 14:22
RUBYってSmalltalkのぱくりだったんですね
んなこと言ったら、Rubyにオリジナルなとこなんて無い
色んな言語の良いとこ取りですよ?
361 :
デフォルトの名無しさん :03/03/31 21:40
mswin版のruby使ってるんですけど、 倍精度の浮動小数点数使うにはどうしたらいいの?
Float で間に合わないときは BigFloat
今ならBigdecimal。
>オリジナル 本当にオリジナルな言語なんて数えるほどしかないだろうし、 これからさらに減っていくのでは。
>>359 Rubyオリジナルなのは、モジュールを使ったMix-inあたりかなあ。
イテレータの柔軟な扱いは他の言語にはない・・・こともないか。 Lispじゃ常套手段だしな。 変数のスコープをprefixで区別するのはRubyオリジナルかな?
>>361 というか倍精度しか提供されてないのだが
368 :
デフォルトの名無しさん :03/04/01 13:50
名前空間ってこんな感じでいいの? module ORE_NAME_SPACE class Main end end
>368いい
>>370 「ついに」って、いままでなんかあったの?
373 :
デフォルトの名無しさん :03/04/01 16:21
>>370 糠喜びさせやがって。まぁあの粘着君が閉めるわきゃねーわな。
Rubyなんて言語仕様がころころ変わるもんは使えないと上司に言われてしまいました。 (´・ω・`)ショボーン
バージョン番号振ってある様な言語は信用できんな。
正直バージョン番号の無い言語って何だろう。 C/C++ はライブラリ無いと何も出来ないし。
C も C++ も Perl も言語仕様が結構変わっているわけだが。 結局メジャーかどうかだな。
確かにC++なんて初期のころと比べたら仕様は変わりまくってる。 rubyなんかの比じゃない。
Windows も API が突然使えなくなったりとかしてるけど、 だから使うの止めたとか聞かないし。
382 :
デフォルトの名無しさん :03/04/02 21:52
すみません。数字をバイナリでファイルに出力、そして読み込むことを目的で以下のメソッドを書いたのですが、 もっと簡単な方法はないのでしょうか??またはこう書いた方が速いとか。 それとネーミングセンスがないので、良い名前がありましたら教えてください (^^; class Integer def fixedByte(byte) fixedByte_(byte, self.abs, 1, (self < 0 ? 0b10000000 : 0b00000000)) end private def fixedByte_(byte, target, count, flg) nexttarget = target / 256 if count != 1 str = (target % 256).chr else str = ((target % 256) | flg).chr end if byte > count str = fixedByteS_(byte, nexttarget, count + 1, flg) << str end str end end
383 :
デフォルトの名無しさん :03/04/02 21:52
class String def b_to_i ssize = self.size - 1 i = 0 for x in 0..ssize y = 1 for z in 1..(ssize - x) y *= 256 end if x != ssize i += self[x] * y else flg = ((self[x] & 0b10000000) > 0 ? -1 : 1) i += (self[x] & 0b01111111) * y i *= flg end end i end end
pack unpack じゃだめなの?
お仕事の場合はゴルァって電話をかける先があるかどうかが問題じゃないかね
end読みにくいなあ。LISPみたい
今日は釣りが多い気がする。
lispのほうが256倍読みやすいYO
(・∀・)イイヨイイヨ-
>>382 fixedByteS_ってのがないがfixedByte_のtypoか?
任意のバイト数のビッグエンディアンで書き出そうという意図に見えるが、
最下位に符号をつけるのはまずかろう。
392 :
デフォルトの名無しさん :03/04/03 17:15
こんばんは〜。 ビッグエンディアン‥そうですねそのようです。 その用語はじめて触れました (^^; はじめ、符号なしを書いて、上で書いていたメソッド名にして、 そのあと、符号つきを書いてその名前の後ろに'S'を付けてました。 バグありましたね。符号つきを書くとき、あまり考えず、テストをしないでいたようです (^^; ここにカキコする際に、符号つきを'S'を取り払った状態でカキコしたつもりでそうなりました。 pack unpackは〜機能を限定すればスッキリ書けるようですね。同等の機能を持たせるには複雑になりそうな予感‥ Marshalは〜、そもそも使いたくありません。すみません。 取り敢えず、方法としては、あまり間違ってないんですね?? ところで、メソッド名とかいい名前はありませんかね‥
>>393 > 取り敢えず、方法としては、あまり間違ってないんですね??
方向としては間違ってないが、再帰を使う必要はないだろう。
> ところで、メソッド名とかいい名前はありませんかね‥
うーん、いい名前があればなぁ。前からこういうのは提案しようとは思ってる
んだけど。
# ワンライナー版
class Integer
def to_bin(width = self.size)
n = self
(0...width).inject([]) {|a,i| a << (n & 0xff); n >>=8; a}.reverse.pack("cC*")
end
def self.from_bin(s)
s.unpack("cC*").inject(0){|i,j| (i<<8)|j}
end
end
394さんありがとうございます! わー短くてカッコイイなァ〜 (笑 そもそも私が用いた方法では、マイナスの表現方法がダサイしね (苦笑 はじめinjectでひっかかりましたが、それを使える方法で置き換えたらばっちりでした!
ちがた。ほすぃのは、perl2ruby
うっ、ばっちりと思っていましたら、 文字列から数字に変える変換で、ちょっと複雑になりそうな感じです‥
現実的には、Perl 処理系を Ruby から使うか、 Ruby で Perl をエミュレートするライブラリを使うかくらいなので、 速度が糞遅くなることを考えれば、手で移植した方がまし。
perl2ruby程度なら作れそうだけど、 問題はライブラリなんじゃないかと。 おれは興味ないが。
>>393 仕様がよく分からないのだけど、これであってる?
class Integer
def dump(w) f = f(self,w); (1..w).map{|i|(f>>(8*(w-i)))&255}.pack("C*") end
private; def f(x,w) n = 2**(8*w); (x+n)%n; end
end
class String
def undump(w) g(unpack("C*").inject(0){|i,j| (i<<8)|j},w) end
private; def g(b,w) n = 2**(8*w); (b+n/2)%n-n/2; end
end
20.times do
w = rand(10)+1
x = (-1)**rand(2)*rand(256**(w-1))
d = x.dump(w)
u = d.undump(w)
p [x == u, d.size == w, w, x, d.unpack("H*")[0].scan(/../).join(" ")]
end
すみません。 私のinjectの分解方法が悪かったです。 injectをArrayに実装して、そのままで動かしたら、 394さんのもので、符号付きでしっかり動きました。 ありがとうございました。 符号付きでしたら、文字(?)から数字に変えるときはunpackを使ったほうが速そうですが、 そうでない場合はもunpackを使わないほうが速かったりするのでしょうか。 packは使わないほうが速そうです。 あまりまともには速度のテストしてませんけど (^^;
>>404 そりゃコードによるがたいていは組み込みメソッドが早い。
str = 'efgh' str2 = 'abcd' str = str + str2 より str = 'efgh' str2 = 'abcd' str << str2 のほうが遅いのですが、どうしてでしょうか?? ruby 1.6.7 (2002-03-01) [i586-mswin32] です。
>>406 どうやって計ったかを書くべし。これで計ったらどうよ?
N=1000000
t0=Time::times; N.times{str='efgh';str2='abcd';str=str+str2}; t1=Time::times
u,s=t1.utime-t0.utime,t1.stime-t0.stime
printf("%-2s user %7.4f, system %7.4f, total %7.4f\n", "+", u,s,u+s)
t0=Time::times; N.times{str='efgh';str2='abcd';str<<str2}; t1=Time::times
u,s=t1.utime-t0.utime,t1.stime-t0.stime
printf("%-2s user %7.4f, system %7.4f, total %7.4f\n", "<<", u,s,u+s)
406ではないがやってみた。 [分かったこと] ・ オレの環境では << の方が少々早い。 ・ その差は1ケタパーセント。これが大きいのか小さいのかよーわからん。 ・ 1.8 の方がちょい遅い。そんなもん? ・ 1.8 では Time::times が obsolete。 % ruby -v ~/hoge.rb ruby 1.6.8 (2002-12-24) [i686-cygwin] + user 3.6150, system 0.0000, total 3.6150 << user 3.3850, system 0.0000, total 3.3850 % ruby-18 -v ~/hoge.rb ruby 1.8.0 (2003-03-03) [i386-cygwin] ./hoge.rb:2: warning: obsolete method Time::times; use Process::times ./hoge.rb:2: warning: obsolete method Time::times; use Process::times + user 3.7350, system 0.0100, total 3.7450 ./hoge.rb:5: warning: obsolete method Time::times; use Process::times ./hoge.rb:5: warning: obsolete method Time::times; use Process::times << user 3.4750, system 0.0000, total 3.4750
>>409 > ・ 1.8 では Time::times が obsolete。
ちょっとワロタ
同じく406ではないがやってみた。
ruby 1.6.8 (2003-03-11) [i386-netbsdelf1.6]
+ user 3.4000, system 0.0200, total 3.4200
<< user 3.2600, system 0.0100, total 3.2700
ruby 1.8.0 (2003-04-04) [i386-netbsdelf1.6]
+ user 3.6600, system 0.0000, total 3.6600
<< user 3.6200, system 0.0100, total 3.6300
全然変わらねぇ…
a) for i in 0..10000000 1+1 end と b) for i in 0..10000000 2 end ではb)の方が早い。 a)10.21s user 0.03s system 100% cpu 10.208 total b)5.85s user 0.00s system 100% cpu 5.802 total rubyは毎回のループごとに1+1をいちいち計算してるわけか…
>>411 > rubyは毎回のループごとに1+1をいちいち計算してるわけか…
その手の最適化って一切しないのけ?
>>412 Fixnum#+が再定義されないとも限らないので、「最適化」しちゃうわけにはいかない。
この議論はdevでもtalkでも繰り返し出てるんで、検索してみるのがよろしいかと。
>>409 >>410 str='efgh';str2='abcd' を N.times の外に出したら変わるのかも
うーんしかしこういうのはいかがなものか #define BEGIN { とかいうのとあんまり変わらないような気もする(そんなこともないかな)
つーか Ruby が入って無いと使えないんじゃないのか?
正規表現の互換性を無くす話だけど、ruby-talk側には常識的な人が 多いようで、少し安心した。
頭が逝かれてるのは作者と一部の信者だけだろ
>>408-410 同じく406ではないがやってみた。
$ ruby -v ./time.rb
ruby 1.6.4 (2001-06-04) [i586-linux]
+ user 9.3900, system 0.0500, total 9.4400
<< user 10.1600, system 0.0400, total 10.2000
何故だ......_| ̄|○
>>421 << の測定前にGCしたら変わったりして
N=1000000
t0=Time::times; N.times{str='efgh';str2='abcd';str=str+str2}; t1=Time::times
u,s=t1.utime-t0.utime,t1.stime-t0.stime
printf("%-2s user %7.4f, system %7.4f, total %7.4f\n", "+", u,s,u+s)
GC.start
t0=Time::times; N.times{str='efgh';str2='abcd';str<<str2}; t1=Time::times
u,s=t1.utime-t0.utime,t1.stime-t0.stime
printf("%-2s user %7.4f, system %7.4f, total %7.4f\n", "<<", u,s,u+s)
406ではな(ry
>>422 変わらなかったっす。
くっだらねーイージーミスであることを恐れてソースを
>>422 からコピペして動かしてみましたが結果変わらず。
+ user 9.0300, system 0.0800, total 9.1100
<< user 9.7100, system 0.0800, total 9.7900
ちなみに
$ rpm -qi ruby
Name : ruby Relocations: (not relocateable)
Distribution: Kondara MNU/Linux 2.0(Mary) Vendor: (none)
Version : 1.6.4 Option: (none)
Release : 2k Build Date: 2001年06月07日 13時12分4
時代に取り残された環境です(〃▽〃)♪
424 :
デフォルトの名無しさん :03/04/08 06:47
>423 1.6.4ってえらく古いな kondaraの動向は知らんがmomongaに乗り換えたら新しいrpmが使えるのかな
一見<<演算子のほうが速いように思えるが…どういう実装なんだろう。 <<の実装と+の実装が同じなのかな。
427 :
デフォルトの名無しさん :03/04/08 19:01
jpegのデータを読み込んだStringから GD::Image.newFromJpeg(file)でimage instanceを作りたいのですが ファイルを作らずにStringから直接image instanceを作れないでしょうか?
ローカル変数のアクセスが微妙に影響してるような。 N=1000000 t0=Time::times; N.times{'efgh'+'abcd'}; t1=Time::times u,s=t1.utime-t0.utime,t1.stime-t0.stime printf("%-2s user %7.4f, system %7.4f, total %7.4f\n", "+", u,s,u+s) GC.start t0=Time::times; N.times{'efgh'<<'abcd'}; t1=Time::times u,s=t1.utime-t0.utime,t1.stime-t0.stime printf("%-2s user %7.4f, system %7.4f, total %7.4f\n", "<<", u,s,u+s) $ ruby-1.6 -v /tmp/s.rb ruby 1.6.8 (2003-03-26) [i686-linux] + user 4.7000, system 0.0300, total 4.7300 << user 4.6700, system 0.0300, total 4.7000
>>427 gdImageCreateFrom*Ctx()はサポートしてないみたいだな。
作者にリクエスト汁。
430 :
デフォルトの名無しさん :03/04/09 16:09
1.8はいつ出るの?
作者の気が向いたら。
>>431 Preview releaseが出てるのに気が向いたらも糞もあるか
子供の日とかじゃないの?
もう一回くらいはpreview必要だろ。五月でもどうかなぁ。
作者はイラクに人間の盾に行ったので、戻ってきません。
class Insertion_sort def mini_sort(index,array) i = index unsorted_array = array judge = true while judge if unsorted_array[i - 1] > unsorted_array[i] || i != 1 tmp = unsorted_array[i - 1] unsorted_array[i - 1] = unsorted_array[i] unsorted_array[i] = tmp i-- else judge = false end end end def Insertionsort.sort(unsorted_array) i = 1 while i < (unsorted_array.size) mini_sort(i,unsorted_array) i++ end sorted_array = unsorted_array return sorted_array end end test_array = [2,4,45,6,3,677,32,64,453,1,3,56,7,0] p Insertionsort::sort(test_array)
437 :
初心者436 :03/04/10 00:54
配列とし渡した、数字の並びを挿入ソートしたいのですが 上のように書いたら次のようなメッセージで動きません。 test3.rb:12: parse error test3.rb:22: parse error test3.rb:29: parse error p Insertionsort::sort(test_array) ^ Ruby始めたばっかりで、どこがおかしいか検討がつきません。 endの閉じ忘れとかは注意したはずなんですが。。 なにかおかしなところ指摘してください。 動かない理由以外でも、書き方のへんなところとか教えて下さい。
i++やi--はないのでi+=1やi-=1とかいてください
>>438 そこを直すと、違うエラーメッセージがでてきて進みそうです。
よくみたらクラス名もおかしかった。。
もうちょっと自分でやってみます
アドバイスありがとうございました
class Insertion_sort def self.mini_sort(index,array) i = index unsorted_array = array judge = true while judge if unsorted_array[i-1] > unsorted_array[i] && i != 0 then tmp = unsorted_array[i - 1] unsorted_array[i - 1] = unsorted_array[i] unsorted_array[i] = tmp i -= 1 else judge = false end end return unsorted_array end def self.sort(unsorted_array) i = 1 while i < unsorted_array.size do unsorted_array = mini_sort(i,unsorted_array) i += 1 end sorted_array = unsorted_array return sorted_array end end test_array = [2,4,45,6,3,677,32,64,453,1,3,56,7,0] p Insertion_sort::sort(test_array)
>>440 これだと破壊的だがそれで良い?
例えば
test_array = [2,4,45,6,3,677,32,64,453,1,3,56,7,0]
p test_array.sort, test_array # Array#sort は test_array を破壊しない
p Insertion_sort::sort(test_array), test_array # Insertion_sort::sort は破壊的
結果
[0, 1, 2, 3, 3, 4, 6, 7, 32, 45, 56, 64, 453, 677]
[2, 4, 45, 6, 3, 677, 32, 64, 453, 1, 3, 56, 7, 0]
[0, 1, 2, 3, 3, 4, 6, 7, 32, 45, 56, 64, 453, 677]
[0, 1, 2, 3, 3, 4, 6, 7, 32, 45, 56, 64, 453, 677]
>>440 breakというものを教えて上げたいような上げたくないような。
>>441 もとのsortメソッドの名前をsort!に改めて
新しく次のようにsortメソッドを作りました。
普段、あまり破壊的、非破壊的ということを意識してませんでした。
単純にcloneメソッドを使ってつくりました。
def self.sort(unsorted_array)
i = 1
cloned_unsorted_array = unsorted_array.clone
while i < cloned_unsorted_array.size do
cloned_unsorted_array = mini_sort(i,cloned_unsorted_array)
i += 1
end
sorted_array = cloned_unsorted_array
return sorted_array
end
>>442 breakを使うとしたら、mini_sortのwhile文中でしょうか?
loopとbreakを使うとすっきりしました。
def self.mini_sort(index,array)
i = index
unsorted_array = array
loop{
if unsorted_array[i-1] > unsorted_array[i] && i != 0 then
tmp = unsorted_array[i - 1]
unsorted_array[i - 1] = unsorted_array[i]
unsorted_array[i] = tmp
i -= 1
else
break
end
}
return unsorted_array
end
私だったこう書く module InsertionSort module_function def insertion_sort!(array) modified = nil for n in 0..array.size-1 n.downto(1) do |i| break unless array[i-1] > array[i] array[i-1], array[i], modified = array[i], array[i-1], true end end modified and array end def insertion_sort(array) insertion_sort!(copy = array.dup) or copy end end
しまった、ら抜き言葉を発明してしまった
漏れだったこう書く(w module Enumerable def insertion_sort array = [] each do |a| if array.each_with_index {|b, i| if b > a array[i, 0] = [a] break end } array << a end end array end end
>>448 かちゅで読むとインデントされてないから無茶苦茶読みにくい
451 :
デフォルトの名無しさん :03/04/10 23:42
RubyでCGIを作ってIISで実行するとrubyプロセスがIISサービスを 殺してしまい、ワトソンくんが出現します。(スタックオーバーフロー) rubyは1.6.7のmswinです。 あと意味はないですが、CGIの先頭行に#!を記述しています。 もし何か知っている方いられましたら教えてください。
>451 RubyでCGIがうんぬんというより、そもそもスクリプトがスタック食いまくりとか だったりしませんか?
>>449 そりゃ悪かった。かちゅーしゃって行頭の空白消しちゃうのか。
module Enumerable
def insertion_sort
array = []
each do |a|
if array.each_with_index {|b, i|
if b > a
array[i, 0] = [a]
break
end
}
array << a
end
end
array
end
end
>>452 もしそうならWindowsはスタックサイズの上限を指定できないの?
>>455 できまっせ。
標準で1メガはあるはずだけど。
でもスタックオーバーフローを起こす様なプログラムは
アルゴリズム修正した方がいいんじゃねえの?
それはそうだがサーバプロセスが死ぬような設定もよろしくない
サーバプロセスを殺せるってことはmod_rubyなのか? IISでmod_rubyって使えるんだっけ?
451です。 ただのRubyプロセスでIISがシニマス。 プロセス空間を別にしてもシニマス。 CGIスクリプトは最後まで完了していて、その後もRubyがガリガリしていて まもなくIISがシニマス。 自分のちびマシンのAN HTTPDでは問題なく動作します。 Apache+Linuxでも問題なく動作します。 仕事の都合上IISしか使えません。 ということでマイっています。
>>459 スタックオーバーフローって出るのはrubyに対して、それともIIS?
サーバを殺してしまうということだと、吐いてるデータに問題があるような気
がするが、nphモードにしてみるとどうなる?
>>460 451です。
IISに対してオーバーフローが発生します。
そのときRubyは終了しています。
一時的に標準出力に出さないようにしてテストしてみます。
勉強不足ですみませんが、nphモードって何でしょうか?
>>462 451です。
詳細にありがとうございます。月曜日に試してみます。
HTTPヘッダでの方法でやってみます。
pai...
>>462 やってみましたが、結果は同じでした。
RubyプロセスがIISを殺せるなんてやっぱりおかしいので、IISのバグあたりが
妥当ではないかと思っています。
>>465 AN HTTPDでは動くってことは、その可能性が高いと思われ。
rubyを使わずに、固定のデータを送るようなCGIにしても同じかな?
添付ライブラリのURIクラスがあんまり遅いんでワラタ 使うのやめたら、10秒以上掛かってた処理が1秒を切ったよ。 これに限らず、Rubyの添付ライブラリは玉石混淆過ぎ つか、地雷原(w
どういう使いかたしてたんだ?
漏れも実例が見てみたい
>>467 の玉と石の分類を見てみたい。
煽りではなく、参考にさせてもらいたいので。
URI使う所の多くで、URIのインスタンスを使ってたの。 プロファイラに掛けたら、URI.parseも遅かったが、 URI#+は失禁するぐらい遅かった。 URIライブラリは、UriValidatorとUriUtilに分けたらどうだ? CGIライブラリもなぁ、なんか使いにくいよ。 Ruby唯一の処理系に付属するオフィシャルな おまけライブラリにしては、実装者のアクが強すぎ。 なんつーか、ツブシの効かない感じ。
>>471 プロファイラの結果見たい。遅いのはどのへん?
# URI::Generic#mergeあたりかな。
473 :
デフォルトの名無しさん :03/04/16 01:15
XMLを出力したいのですが、適当なライブラリって何になるのでしょうか? xml-parserでできますっけ。
そも「るるる」とは何ぞや?
単純な質問ですが、しばらくわからないままなので教えてください。 X ターミナルの表示可能なカラム数を Ruby から得るにはどうしたらいいですか? やりたいことは、Debian や RedHat の apt-get を実行したときに、画面右端に出る [38%] などのパーセント表示を右端ぴったりに出したい、ということなのですが。
477 :
デフォルトの名無しさん :03/04/16 22:50
age
>>476 安直でよければ
columns = (columns.to_i if columns = ENV["COLUMNS"])
ウィンドウリサイズに追従したければcursesでも使うべきだろう。
$ ruby -rcurses -e 'Curses.init_screen;l,c = Curses.lines,Curses.cols; Curses.close_screen;puts "#{c}x#{l}"'
100x50
>>478 ありがとうございました!その方法でやってみます。
(^^)
481 :
デフォルトの名無しさん :03/04/17 23:35
>>465 CGIでRubyがIISを落とす件です。
なんとなくわかりました。
httpdはIIS4です。フォームからCGIにデータを送信して、CGIの中で
Locationヘッダを使って自分のCGIに戻すことをしています。
掲示板なんかでの再読み込み防止策としてやったのですが、
これがなぜか無限ループに陥ってしまうのです。
リクエスト内容を見るとLocationにはクエリを渡していないのに
その前のフォームのデータが流れてきています。
そしてまたLocation。
ちなみにただLocationでループさせても適度な回数でたたききられます。
>>482 RFC2616 の
10.3 Redirection 3xx
14.30 Location
をよく読んだら何か分かるかも。
'a' =~ /(a*)*/ のマッチのあと、$1 が 'a' ではなく '' になるのはなぜでしょうか?
"a" に (a*) が2回マッチするからじゃないかのう。
∧_∧ ( ^^ )< ぬるぽ(^^)
>>487 それじゃあ説明になってないんじゃ?
普通に考えると、a* が貪欲に 'a' にマッチすると思うんだけど。
/((a*)*)/.match('a').to_a # => ["a", "a", ""]
↑これは、ちょっと理解し難いです。
(a*) が空文字にマッチしてるのに、
どうしてその外側の ((a*)*) が 'a' にマッチし得るの?
>>489 だから内側のカッコは2回マッチしてるんだってば。
最終的な $~ は最後のマッチが有効になる。
これなら分かる?
$ ruby -e 'p /((ba*)*)/.match("bab").to_a'
["bab", "bab", "b"]
$~ が最後にマッチしたデータになるというのは分かります。 でも、なぜ(a*)が2回マッチするのかが分かりません。 1回目のマッチで文字列全部を取ってしまってるので、それで終了にはならないのですか?
>>491 .{0,0} は空文字列に最低一回マッチする。
>>490 あぁ、なるほど。理解できました。
(a*) は、1回目のマッチで 'a' を食べて、
2回目のマッチで '' を食べたところで繰り返しが終了し、
その時点のマッチの状態ってことで $1 = '' がセットされたってわけですね。
>>493 まあこういうのはマニュアルなんかにはあまり詳しく書かれてないから
Friedl の Mastering regular expressions でも買って読むのが吉
えっと、.* が空文字にヒットするのは分かるので、 2回目のマッチが行われれば $1 に '' が入るのは分かるのですが、 1回目のマッチですべての文字列を食べ終わっているのに 2回目のマッチを行おうとするというのがどうも理解できません。 文字列の最後に仮想的な空文字を想定して、 1回目のマッチ後ではそれがまだ残っているというふうに考えるのでしょうか。
>>495 まあそうなんだが「仮想的な空文字を想定して」というのはよく分からん。
まず空文字ではなくて空文字列というべきだろう。
そして仮想的に想定しているのでなく実際にある。
Time#to_s をそのまま Time.parse しても元に戻らないってのは不便じゃないですか? irb(main):008:0> t = File.stat('foo').mtime.to_s => "Fri Jul 26 23:01:14 GMT+9:00 2002" irb(main):009:0> Time.parse t => Sat Jul 26 23:01:14 UTC 2003
Time#to_s のフォーマットは好きに変えられるんだからいいじゃん?
Time#to_s って %Z とかあるからOS依存なのでは
>>497 そういうTZってありだっけ?
begin-base64 644 tz.diff.gz
H4sIAAAAAAACA71Ry2rbQBRde77iLAKRMh7r4dgmA0IJKZQssknclWWKLI3C
gCyZGdmkxvTbM3rFSeqmi0LuQvcx95xzxbkrUvHMkcuVk8aVcLJSreNqpFYk
+P8gD7ePyGQuOJxkpx21Xf1ytEra4k/N4Y4oUSkpdrJ4gjJJy7KAN5qSVGYZ
2BbMB9uAKTPD8VbG2IlfGPhXuI8VfNcdw53y8RWfuGCuiUHNSSk9iRrjZtOh
fJ/7U+52KHJ9bQ64nAxnoG0ygySPtcY3w0EwGACI9EVXWYQ1GVjEbL+kVsgj
TVNd2WG0IrR7M9OndXXYVokdLhhdRmm9yEOT7Y7ocCT6uEA/UWjBLYkdkruj
15Vciy8zuRP7q7ued8Jez0N/ZO9u139uqyHrfX3d/2DojHuXbwyducMJaPN9
tXNuoARtlOa0AIXM+8G+LISZ1Gm03SSxFoS1LzKDE91YC8qWthWlUWrzsM3R
3kHwu8EQ+m455N/v54cf81s7/BcQeHeSdeYhCHDOzhGCeeDwbFyYsT+qyp/S
lFMXFGfjprWbvucQuW71a8la6K3OCx+CUAoVBAAA
====
あ、lib/time.rbのほうは不要だった。
502 :
デフォルトの名無しさん :03/04/24 14:07
初歩的なことですが、どなたか教えて下さい。 実行結果、「123aaa456789」を期待していたのですが、 「123aaa789」となってしまいました。ファイルの途 中に追加書き込みするには、どうしたらよいのですか。 f = open("text","w") f.print("123456789") f.close f = open("text", "r+") f.seek(3, IO::SEEK_SET) f.print("aaa") f.close
>>502 直接的な手段はない。
ファイルの途中に直接挿入はできないので、
挿入したい位置から先を後ろへずらす必要がある。
>>502 ファイルがそれほど大きくなければ
f = open("text", "r+")
img = f.read # 全部読んで
img[3,0] = "aaa" # ファイルイメージを文字列として編集して
f.truncate(0) # ファイルを切り詰めて
f << img # 書き出すのが頭を使わなくて楽
f.close
OS依存というのは知りませんでした。
>>497 はWindows2000のcygwin環境です。
>>500 どうもありがとうございます。
>>505 そのTZフォーマットの典拠を明示できるなら、
bugs-jaにでも投げといてくれるとありがたい。
>>503 ,504
どうもありがとうございます。
ファイルが大きく、編集箇所も多いので、
結局、以下のようにしました。
f_read = open("text1","w+")
f_read.print("123456789")
f_read.rewind
f_write = open("text2", "w")
f_write.print f_read.read(3)
f_write.print ("aaa")
f_write.puts f_read.gets
f_read.close
>>508 (0..n-1).sort_by{rand}
(0..n-1).sort{rand<=>0.5}
確率的な違いをどう表現したらいい?
>>509 (0..n-1).sort_by{rand} が以下と等価かどうかすら分からん
def perm(a, k=0, v = [])
n = (a = a.to_a).size-1
n == k ? v<<a : (k..n).each{|i| perm((b=a.dup;b[k],b[i]=b[i],b[k];b),k+1,v)}
v
end
perm(0..n-1)[rand((1..n).inject(1){|v,x|v*x})]
qsortが平均n・log(n)っていうときの平均ってどれ?
>>511 どれ?と聞く以上は選択肢を出していただきたい。
>>512 qsortの平均コスト評価で想定している分布って
(1) (0..n-1).sort_by{rand} # n個の一様乱数の順序
(2) (0..n-1).sort{rand<=>0.5} # ランダムな2分割による入れ換え?
(3)
>>510 # 順列上の一様分布
(4) 上記以外
のどれ?
>>513 それは (3) だが (1) や (2) が (3) と等価なのかは知らん。
RubyUnit で自動テストを cron 等で行い、テスト結果を html で出力したいのですが、 そいういったことをしてくれるツールが検索しても見当たりませんでした。 こんなツールがあるよといった情報や、他の Ruby 用 Unit Test ツールでは実装 されているという情報がありましたら、教えてください。
>>515 cronの方はどうとでもなるとして、htmlのそれっぽい出力はないんじゃないかな。
ui/gtk/やui/fox/のtestrunner.rbを参考に書いてみては?
>>515 RubyUnitはTest::Unitに統合されてるのでそっちを使ったほうがいいかも。
HTMLでの出力というのがどういうものを求めてるのかよく分からんが、
test/unit/ui/html/testrunner.rbを他のtestrunnerを参考に書いてくれると
嬉しい人が増えると思われ。
ちゃんと
>>516 が書いてるじゃん。なんで見落とすかな。
519 :
デフォルトの名無しさん :03/04/30 23:23
rubyのスコープがわかりません スクリプトファイルはじまり #!/ruby if なんとか i = 10 #ここではじめてiが出てくる end print "#{i}\n" # 10 おわり ifの中で初めて使う変数が、ifの外でも使えます。 これってあり!?
a=Hash.new([]) b=a["3"] b[4] = b[4].to_i + 1 で、a["3"][4] が1になって欲しいんですがならないのはどーして?
>522 ほんとだ、a["3"][4]は1を返しますね。 でも、 a.inspect => {} となってしまいます。 a.each do |key,val| とかなにも返って来ませんし、、、 Ruby 1.6.7 です。
>>523 調べればあちこちに書いてあると思うけど、
Hash.new(obj) の引数 obj は Hash#default の値として保持され、
このオブジェクトは存在しないキーへの参照があったときに返される。
h = Hash.new("Go Fish")
h["a"] = 100
h["b"] = 200
h["a"] #=> 100
h["c"] #=> "Go Fish"
h.default #=> "Go Fish"
h["c"] << "pond"
h["c"] #=> "Go Fishpond"
h.default #=> "Go Fishpond"
h["c"] = 300
h["c"] #=> 300
h.default #=> "Go Fishpond"
h["d"] #=> "Go Fishpond"
>>522 のリンクの説明、「デフォルト値」っていう表現が良くない気がする。
「デフォルトオブジェクト」とかにすれば勘違いしづらいかも。
そう思ったら直せばいい。
528 :
デフォルトの名無しさん :03/05/01 19:22
乾いて候
「クラスのインスタンス変数」って何に使うんですか? クラスのインスタンス変数をインスタンスのインスタンス変数として使っちゃだめ?
クラスのインスタンスのインスタンス変数してなら使えるけど?
>>532 では、クラスのインスタンスのインスタンス変数として使っちゃ駄目?
つまり「クラスのインスタンス変数」と「そのクラスのインスタンスのインスタンス変数」
の使い分けを教えて欲しいのれす。
テンプレ
JaMing/Ruby って面白そうね。
>>533 それは全然違うと思うけど。
クラスのインスタンス変数は、継承したくなくて(クラス変数じゃ駄目)、
公開もしたくない(定数も駄目)が、クラスに所属させたい名前じゃないかな。
例えば特異メソッドで使う値とか。
この結果を見ると、どうもクラスに所属してない気がしてしまうのですが、なぜこうなるのでしょう。 --(コード)-- class Person @name def initialize(name) @name = name; end def say p @name end end p1 = Person.new("foo"); p2 = Person.new("bar"); p1.say(); p2.say(); --(結果)-- "foo" "bar" -- 両方とも "bar" ってなってほしかったのですが、、
@name じゃなくて @@name
>>537 > class Person
> @name
この@nameと
> def initialize(name)
> @name = name;
この@nameは別物。
前者はPersonというClassオブジェクトのインスタンス変数。
後者はPersonクラスのオブジェクトの持つインスタンス変数。
ありがちなクラスのインスタンス変数の使い方 class C @n = 0 def self.n() @n end def self.new() @n += 1; super end end class S<C @n = 0 end S.new; C.new; C.new; C.new; S.new; p [C.n, S.n] #=> [3, 2]
>>427 ファイル無しでimage instance作りたいってこと? フツーに new すりゃいいし
クラス変数使いこなしてるってひといますか? イマイチどんなつかいでがあるのかわかんない。 サブクラスでの変更がスーパークラスへ反映されなければいいのに、 と思うことが多い。
543 :
デフォルトの名無しさん :03/05/02 08:13
>>542 つかってるよ。例えばなんかのデフォルト値とか。
サブクラスでも同じデフォルト値を使いたいからね。
定数でもいいんだけど、デフォルト値を変更したいときもあるから。
目的に応じて、クラス変数とクラスインスタンス変数を
つかいわければいいんじゃない?
サブクラスでの変更を親クラスへ反映させたければクラス変数、
させたくなければクラスインスタンス変数。
>>543 おお、クラスインスタンス変数ってのがあるんですね (←節穴野郎) 。
>>540 みたいに使うのか。
なんか漏れにもうまいこと使い分けれそうです。ども。
あのーすみません。なんか呼び名がごちゃごちゃしているのですけど、 正しい読み方ってどういう風に呼ぶのでしょうか??? > @、@@ クラスのインスタンスが持つ変数を「インスタンス変数」 クラスが持つ変数を「クラス変数」 という風に覚えていたのですけど、違ったのですか???
はうっ。 sage間違えた‥
>>545 あってる
@instance_variable オブジェクト毎
@@class_variable クラス毎
クラスはそれ自身がオブジェクトでもあるので両方持てる
548 :
デフォルトの名無しさん :03/05/04 04:32
gdbm.dllを.soにリネーム
ぐわっ、こんな簡単なことだったなんて。 ありがとうございました。
windowsの.dll=*nix系の.so って事を知らない人、結構いるね。 この板だと話が通じない事多い。
同じだったの?ELFとCOFFとかって違わないの?
同じと思っててイイヨ
この板だと
>>553 みたいに
話が通じない事多い。
ウゼェェェェェエエェェェーーーーーーェェーェーェ>>>>>>>>>>>
>>555 しらなかったんだよシラネーよ知って根ーよシラララララララネネネネネネネシラネー
ヨヨヨヨヨヨヨヨヨヨヨヨヨヨヨヨ
ブァベブチャグチャグハアァァアアアアァァブァァアアァアアウアウアアウアウウウウウアウウアウウアあうアウアアウアウガアアアアアウゥァウガアカカカガ゙カクククセゼグギ
http://jarp.jin.gr.jp/win32/gdbm-1.8.3-1-mswin32.zip をダウンロードし、
\bin\gdbm.dll 21,504 03/04/22
を、gdbm.soとリネームし、
require 'gdbm' したところ、
\hage.rb:1:in `require': 127: 指定されたプロシージャが見つかりません。 - Init_gdbm (LoadError)
./gdbm.so
が出てしまいました。
ruby 1.6.8 (2002-12-24) [i586-mswin32] です。
嘘を嘘と見抜けない人は……(ry まあ、元の聞き方が悪いから仕方がないけど。 それはrubyから(gdbmモジュールを通して)使うgdbmライブラリ本体だよ。 それくらいzipファイルの中身を見て見当つけなさい。
つーか、jarpのwin32ディレクトリの存在を知ってるのにその意味を知らない というのはいかがなものか。
Ruby のスレで嘘を付かれるなんて、信じていたのにッ。
>558 後学のためにどう聞けば良かったか教えてください。
>>561 558じゃないけど。
Makefileがどう妙なの?
どうやってMakefileを作ったの?
rubyのバージョンは?(557に書いてあるけど)
あたりは最低限必要かと。
それがわかれば、もうちょっとましな質疑応答になると思われ。
ちなみに、今回の場合は、550が嘘で552は本当だけどミスリーディング。
RDってHTMLと比べて何が嬉しいんですか?
生でも読みやすいところ? unix板の情報整理スレでも「メモはRDで書いてる」ってのが 何度か挙げられていたから、良いモノなのかも。
タグが少ないからうちやすい
RD って plain2 と比べて何が嬉しいんですか?
>>567 UTF-8は現nkfでは扱えない(nkf自体Unicode制定前のものだから当然だが)ので、
uconv,iconv,unkfあたりを使う。在処は
uconv: RAA
iconv: 1.8では標準、1.6ならshim
unkf: rough
できました。 unkfをインストールして、 require "cgi" require "unkf" q="%93%FA%96%7B%8C%EA" NKF.nkf("-e", CGI.unescape(q)) で、EUCの文字列が取得できました。 どうもありがとうございます。
571 :
デフォルトの名無しさん :03/05/08 21:30
print nil とすると、nilと表示されてしまうのですが、これを何も表示されないようにしたい。 class NilClass def to_s '' end end としても、 def nil.to_s '' end としても、nilと出力されてしまう。 どうすればよいか、知恵を拝借したい。 printを再定義しないとだめ?
inspect を再定義。 つか、print 対象に nil がこないようなロジックにすべきじゃないかと。
>>571 諦めてprintを再定義してくれ。
>>572 inspectをどれだけ変えても無駄では?
なにしろ、printのソースが
case T_NIL:
rb_io_write(out, rb_str_new2("nil"));
だ。
575 :
デフォルトの名無しさん :03/05/08 21:51
>>573 まじで?ソースコード埋め込みだったのか。
質問の背景を説明すると、RubyでCGIを作成してて、
cgi = CGI.new
user, = cgi['user']
mail, = cgi['mail']
print user, "<br/>\n"
print mail, "<br/>\n"
としてるんだけど、このときuserやmailがnilと表示されるので
どうにかしたかった。いちいち
user ||= ''
mail ||= ''
とするのもうざったいし。
こんなとき、みんなはどうしてるの?
>>575 もっといい方法がありそうだが、
user = cgi['user'].first || ''
なんてのはどうだろう。一行で書けるし。
print "#{user}<br/>\n" print "#{mail}<br/>\n"
>>575 576+577で脳内idiom化済み。
579 :
デフォルトの名無しさん :03/05/08 22:28
#{} は String 以外は to_s で String に変換するから。 もちろん明示的に print user.to_s, "<br/>\n" としても望み通りになる。
>>580 うー、そういうことか。
def nil.to_s() とか class NilClass; def to_s() ... とか
していたおれはアホやね。すでにそうなっていたのか。
さんきうです。
そもそも、CGIの入力を無加工で出力するなんて考えられないのだが。
だって、質問のためのサンプルだもん。 現実のコードが複雑なら、質問するときは本質部分だけをとりだした 簡単なものを示すのが普通では?
>>583 その「簡単なもの」が571だというならそれはそれで納得なんだけど。
575のようにCGIの入力を無加工でprintに渡すわけはないので、
それまでに別のところでnil問題に遭遇するだろう、ということだよ。
なので、575でいう「こんなとき」はありえない。
585 :
デフォルトの名無しさん :03/05/09 14:58
Cygwinにpackage: ruby-1.6.8-1が出たわけだけど、 ソース取ってきて自分でビルドするのと比較して何が嬉しいの?
ソース取ってきて自分でビルドしなくてもいい
ruby捨てるのが簡単に
>>585 ソース取ってくるほど熱心でないユーザも使う可能性が増える。
そしてリリースがますます慎重に
cygwinのバイナリをビルドした設定って後から参照できるように記録されているの? だとしたら、使ったバイナリをビルドした設定を記録するのがちょっとは楽になるかな。
>>590 ???
今いち言いたいことが分からないけど、Un*x と変わらないよ?
Cygwin 環境だと configure につけるオプションって --enable-shared くらいじゃ。
593 :
デフォルトの名無しさん :03/05/10 19:13
yamlインポートage
インポート?
addだな。いやそういうことはどうでもいいんだが。
YAML.rb って Racc で真面目にフル実装しようとしてるせいか、かなり重くないですか? 機能限定でいいから軽い YAML 実装ってないですかね? 無きゃ自分で書くしかないんだけど・・・
>>585 Cygwin入れてない環境でも、Cygwin DLLさえあれば使える。
…mswin32版との具体的な差が気になるところではあるけれども。
プログラミング自体初心者なんだけど、 「これは見とけ」とか言うサイトや本ある? もう、馬鹿でも分かるような。
ruby本で? 「たのしいruby」あたりはどうかね。
ありがとうございます。 Rubyのオフィシャルサイトはもちろん見ましたよー。 でもRubyって、どのサイトも 「プログラミングそこそこ理解できる」が前提みたいな感じで、 まるっきりの初心者対象にしたようなページはあまり見つからないんですよね。 その点で多少敷居が高いと感じたり…。
やっぱり「たのしいruby」とか「Rubyプログラミング入門」くらいしか思い浮 かばんなぁ。 ところで、「プログラミング初心者」であっても「コンピュータの初心者」じゃ あないよな?
結局 YAML.rb 使わないことにしますた。 しかし、-ryaml するだけで重いんですよね。 そもそも Racc 自体が重いのかしら・・・?
1.8に入ったsyckはracc使ってないと思う。
高橋 麻奈で「やさしいRuby」か 結城 浩で「Ruby言語プログラミングレッスン」キボン いや、Rubyはプログラミング初心者にはやさしいつくりではあるが、 解説書で初心者(他言語経験者を除く)にやさしいのはっていうとちょっと?だったりする。 他言語のいい初心者本からRubyにきたほうがいいかもって、本末転倒。 ひと頃と比べるとRuby本の出るペースも落ちてきてちょっとさびしい。
>>605 どうもです。ちょうどさっき Syck の存在を知って調べ始めたところでつ。
# 1.6 ユーザなので流行に乗り遅れてますね・・・
Syck でつが、コメントの扱いとかダメダメな悪寒。 ほかにも気になるところが沢山あるのですぐには使えないな・・・ もうちょっと調べてみよう。
>>608 詳しくレポートきぼん。
量が多ければruby-bugsかruby-devへ。
>>603 どのくらいの知識と経験を積めば「コンピュータの初心者」から脱出できるのか
分からないので何とも言えませんが、少なくとも、
PCを昨日今日買ってきたというレベルではありません。
以前、まつもとゆきひろ氏の「Rubyプログラミング入門」を入門書として購入しましたが
余計な注釈や、読みづらい本文で(゚Д゚)ポカーン
この本では「楽しいRuby」は無理だと感じました。
「Rubyプログラミング入門」は原先生のはずだが。 注釈云々からすると「オブジェクト指向スクリプト言語Ruby」(通称Ruby本)じゃ ないかと思うが、あれはまったく初心者向けじゃないよ。
Rubyの初心者向けであって、(オブジェクト指向)プログラミングの初心者向けじゃない。 つーことね。
>>610 個人的経験からいうと、初心者向けのサイトを作ると覚えるよ。
>>611 スマソ、今見直したら
「原信一郎 著 まつもとゆきひろ 監修」と書かれてますた。
「著 まつもとゆきひろ」部分だけ見て激しく勘違い。
本の名は間違い無く「Rubyプログラミング入門」。
>>599 目的がないからおぼえないんだよきっと。tdiaryとか導入していま流行の
bloggerになってみれば?tdiaryのpluginをかくためにrubyを覚えたひと
もいるよ。
オレも「たのしいRuby 」に一票。
>>609 syck-0.15 とかいうのだとダメだったんで、
CVS 最新を取り寄せて試してみたところ、問題なさそうでした。
また何か問題が見つかったら適宜報告するようにします。
つーか、 Syck は全然重くないっすね。快適快適。 YAML もっと普及するといいなぁ。
結城 浩(の本)に−1票
Perlをちょっとやったことあるなら「Rubyプログラミング入門」がいいね。 これ読むまで、 オブジェクト?はぁ?クラス?はぁ?インスタンス?はぁ? って感じの漏れだったが、これ読んだら概念がちょこっとわかったよ。 ちなみに「たのしいRuby」を読んでもオブジェクト指向がなんなのか 全然理解できなかった。これを読んだあとも オブジェクト?はぁ?クラス?はぁ?インスタンス?はぁ? の状態に変わりはなかった。 けど、超基礎から説明してるので、 プログラム自体が初心者の人は「たのしい」から読むべきだろうね。 「Rubyプログラミング入門」はUNIXの基礎とか、プログラムの基礎とか知らないと、 わけの分からん用語の連続になっちゃうよ。
621 :
デフォルトの名無しさん :03/05/15 05:34
プログラムスーパー初心者です。 Rubyに興味を持ち、先日初めてオフィシャルページを みてきました。Rubyはvariable declarationがいら ないようなんですが、そこで質問です。 functionがinteger valueにreturnするときなんか はどうなるのでしょう?例えばc++で int function(int i, int j) { return i+j; } これをRubyでかくと、どうなるのでしょうか? 簡単すぎる質問ですみません。
関数(とは言わない?)の書き方くらいマニュアルや初心者本でも載っているんじゃなかろうか。
>>622 すみません。海外在住なのです。
日本の本が手に入らない僻地にいるので、webだけが
たよりなのですが、なかなか簡単なサンプルがないの
で、ここで聞きました。
>>621 def function(i,j)
return i+j;
end
とも書けるけど、大半のヤシは
def function(i,j)
i+j
end
と書くだろう。
>>597 YAMLは、現在開発中の新バージョンは拡張ライブラリになって
おり、これはとっても速いらしい。まだα状態だろうけど。
>>621 def function(i,j) i+j end
p function(1,2) #=> 3
p function("foo"+"bar") #=> "foobar"
型を指定するための方法というのはない
どうしても検査したければ obj が Klass のインスタンスであることを
obj.is_a? Klass によって検査することはできるがあまり使わない
>>627 > p function("foo"+"bar") #=> "foobar"
p function("foo","bar") #=> "foobar"
マトリックスを観てきて、今帰ってきました。
夜12時のshowだったのですが、すごい混雑ぶりでした。
>>625 , 627
どうもありがとうございます。
本当に型がないのですね。(笑) javaとC++しかしらな
い私にとっては、とても不思議です。
>>629 > 本当に型がないのですね。
変数にはない。オブジェクトが型を持っている。
632 :
デフォルトの名無しさん :03/05/15 21:36
>>597 開発中のYAML次期バージョンは拡張ライブラリとして実装
されているため、とても速いらしい。
633 :
( ´w`) :03/05/15 21:52
>>634 藻前
konnnakotobadukaisuruyatuniiwaretakunaiyona.
>>597 開発中の次期バージョンの Ruby は拡張ライブラリとして
現在とても速いα実装をしており、とても YAML らしい。
人工無能のテスト中なのか…?
Array を shuffle したいのですが、スマートな方法はありますか?
試しに自分でも書いてみた。非破壊的バージョン。でもいまいちだよなぁ。 class Array def shuffle src, dst = self.dup, [] while not src.empty? dst << src.delete_at(rand(src.size)) end dst end end
古いのが出て来た。 class Array def shuffle! size.downto(2) do |i| j = rand(i) self[i], self[j] = self[j], self[i] unless (i -= 1) == j end self end def shuffle dup.shuffle! end end
class Array def shuffle! size.downto(1){|i| push delete_at(rand(i)) } self end end
rand(1)は常に0だから1までdowntoするのは無駄。 それと、delete_atはそれ以降を全部ずらすから、大きいArrayに対しては効率 が落ちる。
要素数がトランプの枚数くらいだったら
>>641 のが速い(Ruby1.6.8)…が、それくらいならそもそも速度気にしない罠
おまけ(実用性はたぶんない)
class Array
def shuffle!
sort!{
rand - 0.5
}
end
end
sort{ rand - 0.5 } がランダムな入れ替えになるというのがいまだによく分からない。 いや、もちろんなんだかぐちゃぐちゃになりそうだなってのは分かるけど ちゃんとn!通りの並びの全てが等確率で出るのかどうかよく分からない。
しかも終わらなさそーだし。
>>645 ソートのアルゴリズムも知らない中学生ですか?
>>646 試してみるとわかると思うが、終わらない。
>>647 % ruby -e 'class Array; def shuffle!() sort!{ rand - 0.5 } end end ; a=[0
,1,2,3,4,5,6,7,8,9]; a.shuffle!; p a'
[1, 7, 9, 3, 5, 0, 8, 6, 2, 4]
%
終わるけど?
class Array def shuffle!(&block) if block 1.upto(size-1){|i| j = block[i+1] ; self[i],self[j] = self[j],self[i]} else 1.upto(size-1){|i| j = rand(i+1) ; self[i],self[j] = self[j],self[i]} end self end end 上の方法だとrand(n)かblock[n]が0,…,n-1を等確率で返すことを仮定すれば すべての要素が異なるときにそれぞれの順列が等確率になることを証明できるが 他の方法はどう?
>>643 の場合を、quick sortで考えてみる。
中央値はランダムに決定されることは自明だと思うので省略。
残りの要素はランダムに振り分けられるので、左右どちらに行くかは等確率。
これを再帰的に繰り返せば全体も等確率と考えていいんじゃないかな。
ただ、最後はselection sortを使ってるんで、これは等確率じゃないような気がする。
n個の要素から最小値を選び出す場合、最初に比較された要素が選ばれる確率は
2**(1-n)だけど、最後に比較されたものが選ばれる確率は1/2。
おまけ
def tossup
rand(2)*2-1
end
for i := 0 to length(arr)-1 do swap(arr[i], arr(rand(length(arr))));
>>644 ダメポ
def hist(n,k)
a, h = 1..n, Hash.new(0)
(a.inject{|i,j|i*j}*k).times{ h[yield(a)]+=1 } ; h
end
n, k = (ARGV[0]||3).to_i, (ARGV[1]||100).to_i
h = hist(n,k){|a|a.sort{rand-0.5}}
h.sort_by{|i,j| [j*10/k,i]}.each{|i| p i}
>>650 スマン、最後はselection sortってどういうこと?
それは抜きにしても左右に振られるのがランダムであることから
等確率であることをいうのは飛躍が大きいと思われ。
ary.sort_by { rand }
Enumeration#sort_by の実装の話?
Enumerable の typo だとしても、何を言いたいか分からない。
>>652 >
>>650 スマン、最後はselection sortってどういうこと?
勘違い。ruby_qsort()は切替えたりしてないな。
> それは抜きにしても左右に振られるのがランダムであることから
> 等確率であることをいうのは飛躍が大きいと思われ。
というか、順次比較して行くから等確率じゃないな。
>>645 の意図が分かった気がする。
>>643 の場合、停止確率は1だが停止しない場合もあると言いたかったんだろう。
それならば正しい。
しかし
>>647 は間違いだな。確率0の事象を実際にみることはないに等しい。
>>657 >>643 については正しいが、確率1だからといって見ることができるとは限らないので
「確率0の事象を実際にみることはないに等しい」は言い過ぎかと。
class Array
def shuffle!()_=self;1.upto(size-1){|i|j=rand(i+1);_[i],_[j]=_[j],_[i]};_ end
def shuffle() o = dup ; o.shuffle! ; o end
def sorted?() empty? or !! inject{|i,j| i <= j ? j : break} end
def bogosort!() until sorted? do shuffle! end ; self end
def bogosort() o = dup ; o.bogosort! ; o end
end
100.times do |i|
STDERR.printf("%2d: ", i)
a = (1..i).to_a.shuffle ; t0 = Time.now ; b = a.bogosort ; t1 = Time.now
STDERR.printf("%f sec [%s] --> [%s]\n", t1-t0, a.join(","), b.join(","))
end
>>656 > というか、順次比較して行くから等確率じゃないな。
それも明らかじゃないと思う。難しい。
>>653 って何かおかしい? スマートな実装だと思ったんだけど……。
つーか、
>>508 あたりから既出なのか。スマソ。
[ruby-dev:20209] からのスレッドを見ると、
>>491 のような疑問は尤なような。
rdoc なんだけど、ここ
ttp://rrr.jin.gr.jp/doc/http-access2/ の rdoc の出力は、rdoc-0.9.0 の標準 (Squeak のクラスブラウザみたいに、上半分に
クラス階層やメンバが表示されているやつ) とは違って、左半分にクラス階層やメンバが
表示されているんだけど、
これって rdoc の CVS 版使うとこうなるのかな?誰か知っている人いますか?
665 :
デフォルトの名無しさん :03/05/20 00:40
rubyで、文字列が'aaa', 'bbb', 'ccc'のどれかであれば真、 それ以外では偽という条件を書くとき、 if str=='aaa' || str=='bbb' || str=='ccc' then ... end としているのですが、もっとうまい書き方はありますか? case str when 'aaa', 'bbb', 'ccc' ... end でもよかったんだけど、if修飾子としても使いたいので できればif文での書き方を希望。
>>665 if %(aaa bbb ccc).include?(str)
うおお、ミスった。 if %w(aaa bbb ccc).include?(str)
>>668 なるほど、配列の要素として含むかどうかで判断するのね。
ちなみにこれ、実行するたびに配列が作成されるのかな?
erubyやmod_rubyで使用すると、実行するたびにオブジェクトが
増えてしまう?
(仕方ないか)
>>669 実行のたびに配列は生成されちゃうだろうね。
それがいやだったら、配列を定数に入れとくとか。
ifの評価が終わったら参照されない配列になるから、
gcされちゃうんで増え続けることはないだろう。
漏れならこっち if /\A(?:aaa|bbb|ccc)\z/ =~ str
どうもありがとう。 いろんなやりかたがあるのね。
>>671 なるほど。正規表現のリテラルだったら毎度同じオブジェクトなのか。
$ ruby -e '2.times do p /hoge/.id end'
538146270
538146270
$ ruby -e '2.times do p ["hoge"].id end'
538146160
538146130
VALUE * を使い回す話とごっちゃになってた。
>>673 > VALUE * を使い回す話とごっちゃになってた。
何それ?
>>674 たぶんC言語レベルでのソースコードの話。
VALUEって型があって、それへのポインタのことでは?
>>673 そうとも限らないんだけどね。
ruby -e '2.times do |i| p /mona/.id end'
ruby -e '2.times do |i| p /#{i}/.id end'
ruby -e '2.times do |i| p /#{i}/o.id end'
真中のは厳密にはリテラルと言わないような気もする。
真中のは言わなくても最後のは言うの?
>>675 それは分かるんだけど、「使い回す」ってのが何の話だかが。
>677 はリテラルとは何か定義してみれ。 # 最近fj.lang.cでフレームになってたような気もするが。
fj.lang.cだと最近じゃないわけだが。
文脈によっては、たとえ100年前でも最近ていうからなぁ。
で、そういう文脈なの?
俺様のニュースサーバで expire されてなければ最近。
で、あなた様のニュースサーバはどこにあるんですか?
∧_∧ ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。 =〔~∪ ̄ ̄〕 = ◎――◎ 山崎渉
687 :
デフォルトの名無しさん :03/05/29 02:33
客観データだとしたらむしろびっくりだ
689 :
デフォルトの名無しさん :03/05/29 07:41
lzhやzipなどの書庫ファイルの中身を Rubyからアクセスしたいのですが、どうしたらいいでしょうか。
list = `"lzh lq #{archive}")`.split(/\n/) list = `"zipinfo #{archive}"`.split(/\n/)[1...-1]
Array#sort が比較関数をブロックで渡せるんだから、 Array#uniq も比較関数をブロックで渡せたら…と思いませんか?
>>691 思わないなぁ。めんどくさいと思うよ。
それなら俺様 uniq を作った方が早いと思う。
>>690 どうも。
書庫内のファイルの中身も見たいので、DLLのAPIヘルプを見ているところです。
>>693 環境はWindowsなのか?
なら「Ruby+統合アーカイバ+DLL」でぐぐるとなんか出てくる。
zlibを使ったRubyZipってのもあったはず。
というか、RAA。
>>694 情報どうもです。いろいろ試してみます。
697 :
デフォルトの名無しさん :03/06/01 14:11
pythonマンセ〜
>>698 ぐぐれ。ちなみに綴りが間違ってる。 Rucheme だ。
綴り間違い失礼。 rucheme003 はまだ遅延評価に対応していないみたいなんです。 もっと新しいのはダウンロードできないんでしょうか?
まつもっちゃんよ・・・ 頼 む か ら ソ ケ ッ ト の g e t c で デ ッ ド ロ ッ ク す る の 直 し て く れ これじゃネットワーク全然使えねーよ
>>701 再現出来る短いコードを書き環境を明示して晒してみたら?
ごめ。スレッド使えばデッドロックにはならないぽい。 でもスレッドは止まる。timeoutも効かん。 再現?簡単だYO! TCPServerとTCPSocketで試してみ。 ソケットオープソ ↓ 接続 ↓ getc (getsでもreadでも何でもいいが) ↓ 受信データを送らない ↓ あぼーん
>>703 だから、再現コードと再現環境を晒せっての。
どんなコードや環境でも再現するようなら
今頃 Ruby なんか使ってる香具師なんかいねえよ。
uwaaaaaaan
書き込めねえよ
でけえとかなげぇとか言うなよ
>>704 スマソ
環境だけ書かせてもらうわ
Ruby1.6.8 無印とCVS版200304全般
mswin32、mingwは全滅。Cygwinは送信だか受信のどっちか×だった。
1.8pre2のLinux版では問題なし。
少なくとも上の環境では無理ぽ
>>706 > mswin32、mingwは全滅。
winsockの呼び出しは中断できないから。
ついでにいっとくと、Windows対応はまつもとさんにいっても無意味。
つか、デッドロックの意味がわかってない悪寒
711 :
デフォルトの名無しさん :03/06/05 20:54
Rubyでcrc32を求める一番無難な方法は何でしょう? それともMD5使っとけばいいんですかね。
単なるブロックをデッドロックと言うのは最近の流行か何かですか?
ネットワークプログラミングをするべきでない人たちが ネットワークプログラミングをするのが流行っているようです。
こうしてRubyは消えていったとさ。 〜〜 完 〜〜
まだ粘着がはりついてるのか(藁
藁って久々に見ました。
717 :
デフォルトの名無しさん :03/06/06 01:20
701 名前: デフォルトの名無しさん [sage] 投稿日: 03/06/05 02:18 まつもっちゃんよ・・・ 頼 む か ら ソ ケ ッ ト の g e t c で デ ッ ド ロ ッ ク す る の 直 し て く れ これじゃネットワーク全然使えねーよ
module ComparisonChainable def self.append_features(mod) mod.module_eval do alias lt < ; def <(x) lt(x) && x end alias gt > ; def >(x) gt(x) && x end #ailas le <= ; def <=(x) le(x) && x end alias ge >= ; def >=(x) ge(x) && x end alias eq == ; def ==(x) eq(x) && x end end end end class FalseClass def <(x)false end; def >(x)false end; def <=(x)false end; def >=(x)false end end [Fixnum, Bignum, Float, String, Module].each do |k| k.class_eval do include ComparisonChainable end end p 1<2<3 p 1<2<2 文法スレ読んでてこういうの考えたんだけど、 コメントアウト外すと parse error になるのはバグ?
ruby 1.6 と 1.8 の両方で動作するプログラムを書こうとしていますが、 Hash#indexes をつかうと 1.8 だと warning がでます。 Hash#values_at をつかうと 1.6 では動きません。 どうすればよいですか?
class Hash alias values_at indexes unless self.instance_methods.include? "values_at" end こう?なんか違ってそう。
method_defined? つーかshim使えよ。
>>718 ailas
ruby-mode.elとか、強調表示できるエディタを使え。
>>721-722 なんかかっこ悪いなあ。1.8 でも indexes で warning を出さないべきだと思うのは
漏れだけ?
warning を出したければ 1.9 以降にして欲しい。
>>727 1.8はまだ出てないじゃん。
次のレスの予想:
ここでそんなこと言っても...
Rubyの質問スレがないようなので,ここに投稿させてもらいます. 10人が受講する科目Aの成績平均を計算するため 「氏名,成績点」をキーボードから入力して, 連想配列に格納する.得られたデータから平均値を算出し, 最後に,氏名,素点,平均からの偏差を画面出力したい. という問題があり dt = ArrayScore.new(10); dt.inputData(); dt.meanCalc(); dt.outputData(); と実行するみたいなんですけどうまくできません. リファレンスマニュアル見ながら作ってみたんですが エラーが直りません.どなたか直してもらえませんか. 次に全文載せます.
class ArrayScore @hash = {}; @num = 0; @mean; def new n @num = n; return self; end def inputData @hash.clear; for i in 1..@num gets; tmp = split(","); @hash.store(tmp[0],Integer(tmp[1])); end end def meanCalc @mean = 0; @hash.keys.each do |key| @mean += @hash[key]; end @mean /= @hash.size; end def outputData @hash.keys.each do |key| p key, ",", @hash[key], ",", @mean - @hash[key]; end end end
dt = ArrayScore.new(10); dt.inputData(); dt.meanCalc(); dt.outputData(); これで全文です.
- def new n + def initialize n
>>732 ありがとうございます
最初のエラーが消えました.
ただ次に
`inputData': undefined method `clear' for nil (NameError)
と出てきてしまいました.
リファレンスマニュアルのHashのところには
たしかメソッドとしてclearがあったと思うんですが
これはどういうことでしょう.
hashを使うのに最初になにか宣言がいるんでしょうか.
頭悪すぎ……。メッセージよく読めよ。
>>728 1.7 で既に出ている warning を 1.8 で出すなとおっしゃるのですか?
>>733 @hash = {}; @num = 0; @mean;
を initialize メソッドの中に。
どのスコープの中にいるかをよく考えてね。
>>735 1.7は開発途上のバージョンだし、最初のほうと今では仕様が違っている点は
いくらでもあるし、別に関係ないんじゃない?
>>736 ありがとうございます.
やっと動きました.
メソッドの中に入れたら
他のメソッドで使えないとか思ってました.
739 :
デフォルトの名無しさん :03/06/09 01:06
Ruby用の、Windowsで使えるおすすめエディタってどんなのがありますか?
740 :
デフォルトの名無しさん :03/06/09 01:12
>>739 なんでんかんでんMeadowでよかとよ。
>>739 とくにおすすめはしないがMeadow。
おれはとても便利に使ってるが、
windowsアプリケーションとして見たら癖ありすぎだもんで。
Emacsみたいなエディタかぁ
Linuxやるときに、CUIでエディタ使えるようになるから一石二鳥。
>>743 emacsのwin版 = Meadow
Ctrlキーに指が届かないからvi使っている。。。
>>742 もしMeadowを使うことに決めたのなら、
rubyのパッケージについてくるruby-mode.elを使うようにしなよ。
これを使わないとMeadowを使う意味が半減だ。
xyzzy用のruby-mode.lもあったよな。
RDEも挙げてみる。使ったことないけど。
自分自身の言動を「〜していたらしい」と書く人がいるが何度見てもキモい
Eclipse はどうなん?
>>746 余談だが・・・
Ctrlキーを指ではなく、手のひら(小指の付け根よりちょっと下)
で押すと良いらしぃ。
窓使いの憂鬱で CapsLock と Ctrl を変えれば。
>>750 昨日ウェブを巡回していたらしいたけ皮膚炎という病気の存在を知った。
>>752 変換/無変換をCtrlに割り当てる。これ最強。
>>756 そのどっちかをshiftに割り当てようよw
>>757 いや、shiftよりCtrlの方が使用頻度高いし。
代わりにカタカナひらがなをshiftに割り当ててみたんで、しばらくこれで試してみよう。
759 :
デフォルトの名無しさん :03/06/09 17:38
あるクラスの中で、 def +=(i) end def -=(i) end def *=(i) end def /=(i) end がsyntax errorになります。 これらの実装はどうやんの?
+=などは+などから自動的に定義されます。 独立して定義することはできません。
>>753 上(ESC)は届くけど、下(Ctrl)はホームポジションから離れないと届かないよぉ ちなみにノートPCのキーボード
++も自動的に定義してくれよ。
++ など必要ではありません。
はっちゃけた!! succ!のaliasにすればいいんだよ>++
実際のところ++があったとしてRubyで使う場面てそんなにないような。 …ってこのての議論はもう飽き飽きw
まつもとさんは確か++を実装しないと言ってたと思った。 だから誰か++を実装したRubyをブランチしなよ。名前はRuby++w
767 :
デフォルトの名無しさん :03/06/09 19:20
Emacs系エディタを使うか使わないかに関わらず, AltIME等でCtrlとCapsLockを入れ替えたほうがなにかと左手小指にやさしいかと。 保存やコピペなど,Ctrlキーを使う機会は多いから。 ついでに"Ctrl+["でESCを押したのと同じだからviユーザにとっても 押しやすいCapsLockの位置にCtrlがあったほうが幸せでしょう。
>>767 Aの隣にCtrlがあったほうがいいか、というとそうでもないらしい。
おれはそっちのほうがいいんでmayuで設定しているが。
一般的な106とか109キーボードのCtrlの位置(左Shiftの手前)に
あったほうが使いやすいという意見もある。
それはそれでうなずける主張だと思うんだな。
CapsLockはCapsLockとして使うよ
770 :
デフォルトの名無しさん :03/06/09 20:43
つまらない話題ですね。
rubyって何に使うの? 車輪の再発明?
>>771 そういう批判をするならばCOBOLでも使ってろw
>>770 この間の読書会ではこれでかなり盛り上がってた。
ルビ基地に逢いたい
マツモト ユキヒロ どっかの店みたい・・・ ハァハァ(°д°;)ハァハァ
>>766 メソッドの実体は実装しなくていいから、せめて演算子として ++ 使わして欲しい。
まだ ruby 初心者だった頃、++演算子はあるもんだと思って ++i とかやって、無限ループになってはまった。
ょぅι゙ょ
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| | 次でボケて! | |_________| ∧∧ || ( ゚д゚) || / づΦ
だれかLL Saturday行く人いる?
郁代。
ょぅι゙ょ
refe.elの最初の補完リストを作るのに失敗するのですがどうすれば いいんですかぁ。 環境が Meadow + ruby 1.6.8 (2002-12-24) [i386-mingw32] なので (refe-call-process t "*") の * を ruby が自前で展開して refeに*が渡らないのが原因だと思うのですが・・・ * を '*' にして展開しないようにしてもだめでした。
>>784 追記
M-x refe して * を指定するとrefeのusageが出て
'*'だとno such class or method: '*'になりまちた。
微妙にスレ違いですけど、どなたか・・・たすけて・・・
>>784 まず、ReFeのバージョンは0.7だよね?
それが大丈夫なら、refe '*[#,]*' でやってみ。
>>786 ReFe 0.71でつ。
M-x refe '*[#,]*'の結果は
not match: '*[##]*'だそうです。
さらに実験。 (defvar refe-program-args '("-e" "puts ARGV")) と書き換えてみると M-x refe * の結果は refe.elをおいてるディレクトリのファイル一覧が出ました(゚Д゚) '*'だと'*'と出ました。 もしかしてワイルドカードの展開ってmeadowさんがやってるの???
>>787 わかった。ruby を経由するのは潔くあきらめよう。
ReFe のデータベースディレクトリに method_document_comp という
ファイルがあるから、それを elisp を使って読み込んでくれ。
構造は中を見れば一瞬でわかるから。
>>784 (refe-call-process t "*")
を
(refe-call-process t "")
にしたらどうなるん?
>>790 あ、そうか。そっちのほうが賢いな。すまん。
ruby foo.rb みたいに直接呼ばれたのか 他のスクリプトから load 'foo.rb' されたのかを, foo.rb の中で見分けるにはどうしたらいいんでしたっけ?
if __FILE__ == $0
Hashの中身を表示する際に 「値」で降順ソートして「キー」と「値」を出力するのに 簡単な方法ありませんか? valuesで全値の配列を返してもらって それをsortメソッドでソートして 次にkeysで全キーの配列を返してもらって そのキーに対応する値を順に見ていって ソートした値の配列の前から順に対応してるのが 見つかったら出力していくって方法しかないでしょうか これは一つ一つのキーで毎回値の配列を 全部確認するので効率悪い気がします 値は重複しているものもあるので index(val)は使えなさそうです
Hash 使うの止めれば。
Hash#to_a
hash.map{|k, v| [v, k]}.sort.reverse_each{|v, k| puts "#{k} => #{v}"} 1.8ならこうもできる。 hash.sort_by{|k, v| v}.reverse_each{|k, v| puts "#{k} => #{v}"}
よくわかんねーけど、こういうこと? hash = {'a' => 3, 'b' => 1, 'c' => 2} p hash.sort {|a,b| b[1] <=> a[1]} ---------------- [["a", 3], ["c", 2], ["b", 1]]
あ、800ゲト
ordered_hashみたいなのって誰か作ってなかったっけ
>>803 う。意味がとおらねえ。
valueに重複がある場合invertして果たしてそれが使い物になるかどうかわからん、
といいたかった。
拡張ライブラリについて質問! Integer から size_t に入れたいときはどうすればよろしいの? NUM2ULONG でいい?
hash.keys.sort {|a, b| hash[a] <=> hash[b]}.each do |key| p hash[key] end
<=> の両辺が反対か。 値でソートしたいならすりゃいいじゃんってこった。
>>808 > hashにmapなんてのがあるんですね
> ここにあるHashのメソッドしか知りませんでした.
漏れもよくはまるんだけど、Array や Hash は Enumerable を include してるので、
そっちのメソッドもチェックしる。
>>809 そうね。Hashに限らず何を継承(include含む)してるか見ないとね。
おれの場合マニュアル見るときFileを見るべきかIOを見るべきか
迷うことがよくあるw
リフレクションかなんか使って オブジェクトが持ってるメソッド全部を 列挙できなかったっけ? まあ列挙しただけじゃ使い方はわからないから 結局リファレンスを見ないとダメか。
>>811 できるしそういうブラウザもある。
でもやっぱり Hash や Array の場合、Enumerable のメソッドもマニュアルに
書いておいたほうが親切だと思うなあ。
irb使ってるか?
815 :
デフォルトの名無しさん :03/06/14 21:59
irbってもっとカッコイイ名前だったらいいのになー。
iRuby?
ょぅι゙ょ
ムーア
伊良部でいいよ
irbと書いて I love Ruby と読む。これ最強。
電卓代わりに使ってる
>>821 電卓代わりならPerlとどっちがいいかな?
俺Perlつかってるけど
電卓代わりだったら、MAXIMAかSciLab、Risa/asirあたり の方が強力だよ。
irb をログインシェルに使ってる香具師の数 →
0だな。
>>823 電卓というにはちとオーバースペックな気もする
俺はちょっとした計算は
emacsの*scratch*バッファでelisp使ってます。
俺はbcだな。
ちょっとした計算なら俺は M-: だな。
俺はexprだな。
俺はRだな。
俺は電卓だな
俺はcalcだな
俺は指だな。
俺は爪楊枝です つまようじ最強
>>835 計算してるときにケガしないように気をつけてね
俺は算木だな
俺はおなーにだな
>>827 elispって、(/ 3 2)が1になっちゃうんですけど、
その程度でいいってこと?
840 :
デフォルトの名無しさん :03/06/15 11:57
晒しあげ。
俺は計算尺だな。
俺は脳内妄想電卓だな。
>>839 rubyって 3/2 が1になっちゃうんですけど(ry
exprって 3 / 2 が1になっちゃうんですけど(ry
俺は gosh だな。
>>843 必要に応じて
require "mathn"
int/int が rational なのは結局Cプログラマが多いせいなんだろうな
間違えた逆だw
100万回ループの所要時間を調べようと思ったのですが starttime = Time.now.to_f for i in 1..1000000;end p [Time.now.to_f - starttime] と、 def bench starttime = Time.now.to_f yield p [Time.now.to_f - starttime] end bench {for i in 1..1000000;end} では 1割くらい前者のほうが速いのですが、何故でしょう?
$ruby -rprofile hoge.rb
Range#each の速度が、トップレベルで使う場合と yield で呼び出された中で使う場合 で、かなり差があるように見えるんだけど、何か勘違いしている?
def forloop for i in 1..1000000;end end starttime = Time.now.to_f forloop p [Time.now.to_f - starttime] だとさらに結果が違うよう。わけわからん。
>>839 847 で答え出てるけど一応教えておく。
C でも 3 / 2 は 1 になるだろ!
小数値がほしかったら (/ 3.0 2.0) にしろや、ボケ。
>>849 後者はiがブロックローカル変数になるから。
>>853 だから、そんな面倒なことしてちゃ、今の時代生き残れないよってこと言いた
かったんよ。
rubyでcalc作ってる。自分用のoptionもたくさんあって、これ最強。
訳の分からないことを言いたがらないでください。
なるほど!伊良部の略だったのか、なるほど。 で、伊良部とrubyのつながりはどこにあるのだろうか? わからない
計算機が欲しければ普通にmaximaとかmupad使うのがいいと思うけど。 お金があるならmathematicaとかmatlabを使えばいいわけで。 分数計算で十分なら irb -m でもいいだろうが変数の入った式は扱えない。
Emacsじゃ(/ 3 2) => 1 かもしれないけど Xyzzyなら (/3 2) => 3/2 だよ。 有理数のまま計算していって、答えを出す手前で + 0.0 して実数に直すと 丸め誤差が少なくてイイ!
/ と 3 がくっついてしまった。 誤: Xyzzyなら (/3 2) => 3/2 だよ。 正: Xyzzyなら (/ 3 2) => 3/2 だよ。
>>854 なるほど。たしかにbench {...} の前に i=nil を入れると速度差は誤差の範囲になりました。
しかしブロックローカルの変数って何で遅いんだろ?
Rubyの勉強にruby-dbiとPostgresを利用してるのですが、 select文で取得したレコードの、日本語の部分が化けてしまうのです。 原因・解決方法など教えてもらえませんか・・・?
化けた文字は テスト \245\306\245\271\245\310 こんなかんじです。
>>866 pの多バイト文字の出力はそんな感じになる。
print/putsあたりを使えば?
>>867 なるほど。print/putsは日本語表示されました。
pはprintの略なのかなぁと思ってました。
ありがとうございあす。
>>864 メソッドスコープのローカル変数は配列になってるのに対して、
ブロックローカルはIDとVALUEのlinked listになってるから、
それをたどる分だけ遅くなる。
>>870 やっぱり Ruby Hacking Guide を読まなきゃならんか。
インスタンス変数へのaccessorは attr_accessor :v1, v2, ... を 使うことで簡単に定義できる。 では、クラスインスタンス変数へのaccessorはどうすればよい? 今は class Foo def self.v1=(v) v1=v end def self.v1 @v1 end end とチマチマ定義している。 これをもっと簡単に定義したい。
>>873 class Foo
class << self
attr_accessor :v1,:v2,:v3
end
end
ようやくwww.cygwin/setup.exeにrubyが標準搭載されたので 次はRuby.netがVS.NETで使えるようにして欲しい。
>>874 ごっつさんくす。
かなーりたすかった。
今度おごるよ。
>>874 この書き方だとRubyスクリプトとしてはまったく問題ないけど、
RDocがうまく解釈してくれないね。惜しい。
(RDocのバージョン:RDoc Vbeta-2: 2002/07/22 21:07:31 (1.67))
>>877 class Foo
class << self
# v1 - Foo's instance variable
attr_accessor :v1
end
# v1 - Foo's attribute
attr_accessor :v1
end
みたくコメントを工夫するしかなさそうだね。
>>878 あれー、それでうまくいった?
試したけど、どちらもインスタンス変数へのアクセッサと
してしか認識されなかったよ。
RDocのバージョンが古いのかな?
win32api の SendInput() を使いたいんですが、誰か書いてませんか。 引数が Struct 使う場合にどうすればいいのかよくわからないんです。
>880 配列をpackした文字列を渡す。
ブロックローカル変数をローカル変数と同様の実装にできないのはなんでだろ
eRubyをはじめて使ってみたんだけど index.rhtml:1:missing end delimiter (ERuby::CompileError) こういうエラーがでてしまう。 何が悪いのだろうと調べて、キーワという文字列を抜くと動く。 日本語を含んだ文を書き出すには、なにか必要なのでしょうか。
よくは分からんがこういうことかな require "kconv" s = "ーワ".toeuc d = "" s.each_byte{|c| d << (c&0x7F)} $KCODE = "n" p s # "\241\274\245\357" p d # "!<%o" $KCODE を変えてみれば動くかも
Proc.new {|a|}.arity => -1 になるのが俺の悪い頭では理解できません。 引数の数だから、1 になるんじゃないかと思うんだけど、 なんで -1 になるのか誰か教えてー。
arityが-Nってのは、N-1個以上の引数を取れるって意味ってとこまではOK? で、ブロック引数は多重代入と同じセマンティクスを持つので、 a = 1, 2, 3 # => a == [1,2,3] と任意の個数の引数を取れるということ。 だったんだが、1.8.0 preview3ではそれは1になる模様。
888 :
デフォルトの名無しさん :03/06/21 20:58
Paint Shop Pro 8のマクロ言語としてPythonが採用されたそうだ。 Rubyが採用された市販アプリって有るのか? まぁ、PSPは米国製だからってのもあるんだろうが。 つか、Rubyを採用しようにも、簡単に組み込めるようなライブラリが 無いよな? Pythonにはそれが有るらしいが(伝聞)。 そのへんどうにゃのよ?
Rubyも組み込むのはそんなに難しくないよ。 最近の俺的には、ネイティブスレッドに対応してないのでRubyは選べないけど。
>>887 さん
わかりやすい説明どうもありがとう。
> で、ブロック引数は多重代入と同じセマンティクスを持つので、
はじめて知りますた。。。
なるほど納得です。
> だったんだが、1.8.0 preview3ではそれは1になる模様。
ふむ!こっちのほうが俺にはわかりやすいです。
ためになる情報ありがとうございました。
>>887 > だったんだが、1.8.0 preview3ではそれは1になる模様。
lambda{|x|}[] とか def f() yield end ; f{|x|} が出来なくなるということ?
>>891 > lambda{|x|}[] とか def f() yield end ; f{|x|} が出来なくなるということ?
できるけど、警告が出る。
$ ruby -ve 'lambda{|x|}[]'
ruby 1.8.0 (2003-06-21) [i686-linux]
-e:1: warning: multiple values for a block parameter (0 for 1)
任意個の引数を取るときには|*x|、一個だけなら|x,|と書けば、1.6以前でも問題ない。
ちょうど同じ話題が出てる
ttp://jarp.jin.gr.jp/diary/200306c.html#200306211
>>888 Becky!用のRuby pluginってのはある。
あとtalkではたびたびアプリケーションに組込むって話がでてるけど、
具体的な製品名は分からない。
Rubyを自作アプリに組み込むHowToマニュアル出して欲しいな。 できれば、Win版とUNIX版両方で。
>>892 ああ、それなら知ってるけど、どうしていまさら後方互換性をなくす方向に
動き出したんだろ。2.0への布石?
>>896 > 動き出したんだろ。2.0への布石?
そんなとこだと思うけど。
arityに関しては、たしかに分かりにくいという声が以前からあったし。
>>894 一時期の出版ラッシュのついでに出しておいてくれれば良かったのに。
>自作アプリへの組み込み Cマガあたりに記事がなかったっけ? Web上でも読めた気がする。
>>899 本じゃないが、erubyなんかはいい例にならないかな。
1.8.0 preview3出ますた。
標準入力ってなんでopenできないの。 >ruby -ve "File.open '-'" ruby 1.6.8 (2002-12-24) [i386-mingw32] -e:1:in `open': No such file or directory - "-" (Errno::ENOENT) from -e:1
- は標準入力ではないです。
標準入力は $stdin
あぁ。すんません。 具体的に質問します。 コマンドラインでファイル名が指定されたらそれを、 指定されなければ標準入力を開くって処理をしたいんです。 Perl だと push(@ARGV, "-") if no @ARGV foreach (my $file @ARGV) { open(F, $file); #ほげほげ } とかできて楽なんですけど、Rubyだとどう書くんですか。 ファイル単位で(ファイル名を意識して)処理したいんで、ARGFは却下です。
>>905 なんかいろいろ間違ってる・・・Perl久しぶりとはいえ・・・欝だ。
ARGV.each do |file| f = (file == '-' ? STDIN : open(file)) begin # ほげほげ ensure f.close unless f == STDIN end end
def reading(file, &block) if file == '-' yield STDIN else open(file, &block) end end ARGV.each do |file| reading(file) do |f| # ほげほげ end end
>>905 >ファイル単位で(ファイル名を意識して)処理
ARGF.file や ARGF.filename 使えば。
なんで場合わけしなきゃいけないの。 tar だって cat だって UnixTool はみんな - が標準入力じゃないか。 なんで STDIN を特別扱いしなきゃいけないだ。 めんどくさいだけじゃないか。 #ほげほげ そうか、いろんな - がありえるんだ - が標準入力じゃなくてもいいんだ。 Perl がやりすぎなんだ・・・ ボクは Ruby が好きなんだ! ボクはここいいたい!! ボクはここにいてもいいんだ!!! ところで amrita って便利ですね。
>>909 > ARGF.file や ARGF.filename 使えば。
うーん。そうなんですけど、なんかうまくいかなくて。
やりたいのはファイル名とファイルの全内容を
もとに処理をしたいのです。
def hogehego(filename, content)
# ほげほげ
end
↑こんな感じ。で・・・
while not ARGF.eof?
puts ARGF.filename
puts ARGF.file.readlines.size
end
こうすると最初のファイルしか処理されなくて、
じゃあ while not ARGV.empty? ってすると
標準入力から読み込んでしまってわけわからん。
ARGFの挙動が理解できないんですけど。
>>911 こうすれば全ファイル処理された。
while not ARGF.eof?
puts ARGF.filename
puts ARGF.file.readlines
ARGF.skip
end
でもファイルを指定しなかった場合の挙動がいや・・・
というか誰か↓を解説してくれ。まじでわかんねぇ。
>ruby -e "puts ARGF.filename" hoge.rb
-
>ruby -e "ARGF.eof?; puts ARGF.filename" hoge.rb
hoge.rb
>>911 $ ruby -e '%w(foo bar).each{|f| File.open(f,"w") << "1\n1\n"}'
$ ruby -ne 'BEGIN{p ARGF.filename}; p ARGF.filename' foo bar
"-"
"foo"
"foo"
"bar"
"bar"
$ awk 'BEGIN{print FILENAME}; {print FILENAME}' foo bar
foo
foo
bar
bar
$
>912 ARGVで指定されたファイルを触るのをぎりぎりまで先送りにしたいからでは? ファイルを開かないことには eof? の真偽を知ることが出来ないから eof? のあとでは指定された名前のファイルの存在も分かる。 しかしfilenameを知るために(詳しくいえばfilenameで返される名前のファイルの 存在を保証するためだけに)ファイルを開くのは許せないとか。 存在を保証するためなら File::readable?(ARGV.first) という手もあるが、 readable? では実際に読みにいったときにファイルがまだあることを保証できない。 もっともこれだけでは最初にSTDINをさしている理由は説明できないがね。
ルビー初めて2週間目の初心者です。 いま、自分で考えているオンラインゲームがありまして それの実現に、Rubyを使ったサーバプログラムを考えているので 第1歩として、多人数向けのチャットサーバを作ろうと思い作り始めたのですが 多人数向けのエコーサーバは「Rubyライブラリ編」を参考に(ほとんどそのまま)で つくり、うまくいったのですが、ある端末から他の端末へ文字を送る方法で 悩んでいます。 配列を使い、TCPServerのインスタンスを配列の中に入れようと考えたのですが どうも、うまくいきません。 先輩方、どうかアドバイスをお願いいたします。
>>915 「どこまでやって、どこでつまづいたか」を具体的に書いた方が
回答を得やすいと思われ。
>916 はい、了解しました。 エコーサーバを改造してこんな風に書いてみたんです。 require "socket" gs = TCPServer.open(8888) online = [] while TRUE ns = gs.accept print(ns, " is accepted\n") Thread.start { s = ns online.push(ns) while str = s.gets x = 1 while x <= online.size do online[x].write(str) x+=1 end end print(s, " is gone\n") s.close } end うまくいけば、接続している人全部にメッセージを送ることが できるはずなんですが、誰にもメッセージが帰ってこないのです。 自分なりに調べたところでは、配列の中身がいつの間にか 無くなっているっぽいのです。
>>917 とりあえず、while str = s.gets ... end の中がよくわかんないんだけど、
こんなんでどう?
online.each do |c|
c.write(str)
end
あとは、s.close のあとで online.delete(s) とか。
>918 うまくいきました、ありがとうございます。 while str = s.gets ... end の中が間違っていたってことなんですよね どこが良くなかったのだろ? でも、online.each使ったほうが簡潔で解りやすいですね。 またお世話になるかもしれません。そのときは皆様よろしくお願いいたします。
>>919 クライアントが一つだけ接続に来たとき、そのソケットは online[0] のはずだが、
x = 1 から始まるので online[1] を参照にいき、online[1] == nil であるから、
nil.write(str) が実行される。この時点でそのスレッドは死ぬが、
デフォルトでは Thread 内で例外が起こっても黙っているので分かりにくい。
ruby -d server.rb のように -d つきで実行すると上の状況が分かるだろう。
>>917 もう見てないかも知れんが、
> Thread.start {
> s = ns
> online.push(ns)
もし online.push(ns) する前にメインスレッドに切り替わって
ns = gs.accept が成立すると、ns は予期しないものになっている。
よってこうした方が良い
Thread.start(ns) { |s|
online.push(s)
あるいはロジックは少し変わるがこれでも良い
online.push(ns)
Thread.start(ns) { |s|
>920 配列は、0からはじまるのですか。 だからnilを参照してたのですね。 自分の間違えが、わかりすっきりしました。 >921 了解しました。 仰るとおりに、タイミングしだいではnsは 不定になります。 下のほうが、より確実っぽい気がするので これでいってみたいと思います。 みなさま、ありがとうございました
def f0 aa = 111 #0 return binding end def f1(bb, a_bind) #1 cc = 222 #2 eval "p aa, bb, cc", a_bind #3 end f1(333, f0) 上のスクリプトで、#3 の eval のとき、aa(#0), bb(#1), cc(#2) の指すオブジェクトを eval に評価させる式の中でいっしょに使い たいのですが、よい方法はあるでしょうか? この場合の結果は 111 333 222 が欲しいということになります。 質問の意図がわかりにくいかと思いますが、誰か教えてくれるとうれしい。
これじゃあかん? def f0 aa = 111 #0 return binding end def f1(bb, a_bind) #1 aa = eval("aa", a_bind) cc = 222 #2 eval "p aa, bb, cc" #, a_bind #3 end f1(333, f0)
>>924 解答ありがとう。でもそれではだめなんです。923で説明が足りなくてスマソ。
f1の定義の時点で a_bind のコンテキストに存在する変数aaについては知らんのです。
#3 のところでやりたいことは、a_bindにメソッドf1の定義で出てきたローカル変数を
追加したコンテキストで #3 の行の評価をする、ということです。以下のスクリプト
の方が923のより多少は意図が伝わりやすいかも…
def f0
aa = 111 #0
return binding
end
def f1(bb, expr, a_bind) #1
cc = 222 #2
eval expr, a_bind #3
end
f1(333, "p aa, bb, cc", f0) #4
923のスクリプトは、私のやりたいことの意図を正確にあらわして いませんでした、すまそ。以下のスクリプトみたいな方法で、とり あえず問題は解決できそうです。 class Data attr_accessor :aa end def hoge(bb, expr, bind) data = eval("self", bind) cc = 111 data.instance_eval(expr) end d = Data.new d.aa = 222 bind = d.instance_eval { binding } hoge(333, "p aa, bb, cc", bind)
なにー!せっかく考えたから送る def empty_binding binding end def marged_binding(*bindings) dst = empty_binding bindings.each do |src| eval("local_variables",src).each do |var| id = eval(var, src).id eval("#{var} = ObjectSpace._id2ref(#{id})", dst) end end dst end def f0 aa = 111 #0 return binding end def f1(bb, expr, a_bind) #1 cc = 222 #2 eval expr, marged_binding(binding, a_bind) end f1(333, "p aa, bb, cc", f0) #4
>>927 なんかすげー。理解するのにちょっと時間がかかりそうだけど、使えそうな予感。
ありがとう!
>>926 Dataは標準の組込みクラスで、new(1.6)やallocate(1.8)は定義されてない。
Data って Ruby API だけ使ってる人は知らない罠
>>930 まぁそうだろうな。
ともあれDataのインスタンスは作れないし、拡張ライブラリ使うならDataはい
じらんほうが身のため。
そりゃそうなんだけどDataってそれほど存在が知られてない割に 名前が一般的過ぎてよくないよね。
なんか、知らずに Data ってクラス作って(使って)ハマりそう・・・ つか、漏れは obj.id とか obj.hash とかでハマったことあり・・・
>>933 idははまったなあ。hashは知ってたんで、はまったことないけど。
Kernel#idは廃止予定。 __id__かobject_idならかぶらんだろ。
Data -> ExternalData とかに変更してほしい
937 :
デフォルトの名無しさん :03/06/27 11:56
まずは、二つのプログラム 1. while $in = STDIN.gets $in.chomp! print $in + "\n" end 2. while $in = "11" print $in + "\n" end なぜ1のプログラムは動いて、2のプログラムは 動かないのでしょうか? 僕が考えると、1が動く方が不思議なんですが。 というのも、while文というのがwhileのうしろが trueの時に処理を行なっているのなら、 上のプログラムのように、whileの後で代入をおこなっている(つまり、なにも値を返していない) ような場合は、ともにエラーがでると思います。 どう考えればいいのでしょうか?
ありゃ、Dataってクラスは作れないのか。初めて知った。 とは言え、Dataという名前のクラスは作りそうで作らない気がする。
さて、まず
>>937 が釣か否かが問題となるわけだが
「
>>937 は釣りである」の値はtrueとなるので問題ないと思います。
釣りでないです。 プログラミング自体、畑違いなので 聞ける人がまわりにいません。 教えてください。お願いします。
943 :
デフォルトの名無しさん :03/06/27 13:11
↓↓↓釣りにマジレス
>>937 次の二点を確認して、放課後までに職員室に来なさい。
・代入は値を返さない?
・偽はfalseとnil。では真は?
945 :
デフォルトの名無しさん :03/06/27 13:22
C言語の関数で、rintとlogに成り代わる関数ってなんでしょう?
946 :
デフォルトの名無しさん :03/06/27 13:27
まず日本語の勉強を・・・
ライブラリ同士の名前空間の重複を回避したいのです、例えば、 hoge1.rb: class Hoge def hoge "ほげ1" end end hoge2.rb: class Hoge def hoge "ほげ2" end end があるとき、自前でファイルを開いて require 'hoge1' module A; end File.open("./hoge2.rb"){|f| A.module_eval f.read } p Hoge.new.hoge #=>"ほげ1" p A::Hoge.new.hoge #=>"ほげ2" のようにやっているのです、もっとシンプルにTop Levelではなくユーザの導入した名前空間への requireやloadのようなことを行う方法はありますか?
>>948 私の発言のなにが解らないのか教えてもらえますか?
「C言語の関数で、」なら答えはC言語の関数でなければならないのだが… もしも「C の rint と log に相当するのはRubyでは何?」ってことなら、 log(x) は Math::log(x) で rint(x) は x.round ちなみに rint は C の標準関数じゃないよ。
>>949 今んとこ、ない。loadの第二引数にModuleを使えるように、という話はtalkで
ちょっとだけ出てるようだ。
>>938 作れないわけじゃないよ。
消しちゃうなり、Object以外を継承させれば別物になる。
class Object;remove_const(:Data);end
class Data < NilClass;end
伝わっていることが解って安心しました。 > log(x) は Math::log(x) で rint(x) は x.round ご教示ありがとうございます。
> C言語の関数で、rintとlogに成り代わる関数ってなんでしょう? 1.CのrintとlogにあたるものはRubyではどんな関数なんでしょう? 2.CではRubyのrintとlogにあたるものはどんな関数なんでしょう? 1だろうか、と思いきや2だったか。
rintがRubyにはないことから推理。まあCにもないわけだが。
推理してまで答える必要なし
959 :
デフォルトの名無しさん :03/06/28 01:12
質問!OSXでTk使えるようになりませんか? require "tk"とすると見つからないようです。 /usr/lib/ruby/1.6/tk.rb:7:in `require': No such file to load -- tcltklib (LoadError) from /usr/lib/ruby/1.6/tk.rb:7 from ./btn:3:in `require' from ./btn:3
man rint (snip) 準拠 rint() 関数は BSD 4.3 に準拠する。その他の関数は C99 から導入された。 (snip) 失礼しました。
man rint (snip) HISTORY A rint() function appeared in Version 6 AT&T UNIX. (snip) 失礼こきます
962 :
デフォルトの名無しさん :03/06/28 13:23
[A,B0,B1,C0,C1,D]を foo.a #->A foo.b[0] #->B0 foo.b[1] #->B1 foo.c[0] #->C0 ・ ・ と代入する方法を教えてください
競馬のデータ(固定長レコード形式)から構造体を作成するときに躓いてしまいました 言葉足らずなところもあると思いますが、よろしくお願いします。
>>962 foo.a = A
foo.b[0] = B0
foo.b[1] = B1
foo.c[0] = C0
・
・
foo.a, foo.b[0], foo.b[1], foo.c[0] = [A,B0,B1,C0,C1,D]
>>960-961 ハイハイ、とりあえず、rintはPOSIXやC99にはない環境依存な関数だってことはわかったからね。
967 :
デフォルトの名無しさん :03/06/28 19:39
Rubyの本はもう出ないんですか? 最近さびしいので。
どんな本がいい?
walrus
rubyでOSを作る本
972 :
デフォルトの名無しさん :03/06/28 22:25
rubyでrubyを作る本
973 :
デフォルトの名無しさん :03/06/28 22:28
RUNIX
rubyが必要なくなる本
>>949 モジュールを名前空間独立に書くっていつでもできるの?
例えば、以下の状況で A#bar() がこの A::foo() を
呼ぶことを保証できるんだろうか?
module A
def A::foo() end
def bar() A::foo() end
end
>>975 > module A
> def A::foo() end
> def bar() A::foo() end
> end
この後でA.fooを再定義されたら、当然「この A::foo()」が呼ばれることはないけど、
クラス/モジュールやメソッドの定義時の名前空間のネストは実行時に再現される。
dlopen関係を使って、動的にsoライブラリの関数を呼び出す方法ってありませんか?
RHGの第二版が欲しい。
Riteが出てからじゃないか?
でいいかな? RD風味。
りょーかい。「その他」でOK?
乙であります。
>>966 C99 は BSD 4.3 より新しいんだから
>>960 からは「rint がC99 にない」と
いう結論は出ないと思うんだが。
というかrintはC99にあるよ。(7.12.9.4)
ルビー世水楽ね?
ああ、次スレあるのね じゃあ埋めるわ
996
a
書くことがない
まいいや
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。