またすいません。メールCGIで、
sendmail.sendto( "
[email protected] " )
と書く部分なんですが、
address =
[email protected] sendmail.sendto( "address" )
と書くと、作動しません。
address = "
[email protected] "
sendmail.sendto(address)
ならOKなんですが、メアドは外部ファイルからの取り込みなので、これはできません。
sendmail.sendto( "address" ) のaddressを、
文字列ではなく、変数として認識させる方法を教えてください。
外部ファイルからの取り込みだとできないってのがわからん まあよくわからんが、eval使えば?
「作動しません」とか「動きません」とか禁止
spam屋だな 変数内容確認の方法も知らずに永遠にさ迷っとれ
ものすごく大きな勘違いをしてるようだが、、プログラムはRubyが初めて? 説明すんの面倒だな・・・ とにかくいろいろ試してみ、単純な形で解決すると思うよ
yahooのメアドに一日100件送りつけて来るのはこいつか
なんだ、スパマーだったのか
ってもしかしてクオートの中に変数入れられる変なスクリプト言語からきてる勘違いか・・・
色々根は深い 口頭で説明するのは割に合わん
> ってもしかしてクオートの中に変数入れられる変なスクリプト言語からきてる勘違いか・・・ $foo = 'bar' print "#$foo"
"#{foo}" は変だと思わんが、"$foo"は変だろ
リストに関数を適応するにはrubyではどうやってやればいいのですか? mapcarにあたるものです。
会社でrailsの案件をやることになった。俺以外rubyはつかえない。 んで、参考書を会社で買うことになったわけだが俺はネットで勉強したからどの本がいいのかわからん。 参考書も無駄に種類がでてやがって立ち読みするのも疲れた。 初心者〜上級者(になってもらわんと困る)におすすめな参考書を2,3冊教えてください。
>>817 リスト.map{|v| 関数(v) }
でリストの各要素に関数を適用した結果が返るかと
mapの代わりに map! を使うと
結果を返す代わりに直接、元リストの内容を変更する
>>819 ありがとうございます。なるほど、mapがあったのですね。
lispのmapcarやpythonのmapのように関数を渡すのとはちょっと違ってますね。
>818 とりあえず Ruby on Rails入門―優しいRailsの育て方 が上級でもリファレンスになっていいらしい が、中級以上向けな気がする 手取り足取りな入門本は、俺も欲しい
>>821 thx。リファレンスになるってのは結構でかいですね。
とりあえずrails本+入門書を何セットか買おうと思ってます。
優しい本は変なAA使ってて気持ち悪いのがいやだなあ。 ああいうのがあるからRubyが変な目で観られる。やめてほしいよ。
最初の19ページまでだよ つか2chに出入りしといて言うなよw
でかけたついでに立ち読み再会してきま
網羅的なのはAWDwR。 入門ぽいのは「はじめよう〜」 最初から上級向けがマイッハ〜 「ライドオン〜」も入門パート少なめであとあと使える印象が。
827 :
デフォルトの名無しさん :2007/06/16(土) 18:30:38
828 :
デフォルトの名無しさん :2007/06/16(土) 18:36:36
win32版の irb.bat がすごく使いにくいのですが、なんとかならいなでしょうか? 左右移動や、上下での履歴が効きません。 仕方なく、cygwin入れて、cygwin版rubyを入れて irb を使っているのですが、 そうすると、メインで使っているwin32版を更新すると (例えば、バージョンアップしたり、gem入れたりすると) cygwin版も更新しないといけなくなります。 これは仕方がないことなのでしょうか?
>左右移動や、上下での履歴が効きません。 ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32] でおもいっきりできてるが。
830 :
デフォルトの名無しさん :2007/06/16(土) 18:52:47
>>829 マジスカッ!
ところで、どこのバイナリでしょうか?
うちのは、OneClickInstallerで入れたのですが
って、
>ruby -v
ruby 1.8.5 (2006-08-25) [i386-mswin32]
古かたので、新しいのいれてきまつ
831 :
デフォルトの名無しさん :2007/06/16(土) 19:13:38
げ、One Click Installer って上書きインストールできないのか・・・ mswin32版で上書きでいいのかな・・・
832 :
デフォルトの名無しさん :2007/06/16(土) 19:24:57
>>829 アプデトしましたが、駄目でした orz
irb(main):003:0> dir%%%''''%%%%%'
みたいに、変な文字が入力されます。
WindowsXP SP2 のコマンドプロンプトです。
ruby -v は、
ruby 1.8.6 (2007-06-07 patchlevel 36) [i386-mswin32]
です。
833 :
デフォルトの名無しさん :2007/06/16(土) 19:25:31
ほほう >ruby -v ruby 1.8.1 (2003-12-25) [i386-mswin32] 古ッ!
>>824 3xページにもあるよ。あと全般的に口調もキモい。
こういうクセのある書き方はそれだけで読者が逃げること
なんで気づかないかなあ・・・・
>834 まあ、くノ一が主人公であんな技やこんな技を 継承しないだけでもよしとしようや
>832 思いつきだがコマンドプロンプトから > ruby -rreadline -e0 ってしたらどうなる?
837 :
デフォルトの名無しさん :2007/06/16(土) 22:04:45
>>836 >ruby -rreadline -e0
>
なーんも表示されません
>837 何も出なくておk つか、それでエラーが出るんじゃないかなと思ってたが外したかorz もしかしてだがWindowsの環境変数(cygwin環境外)で cygwinのディレクトリ配下にPATH通してない?
840 :
デフォルトの名無しさん :2007/06/17(日) 10:05:34
>>838 あ、通してます。
コマンドプロンプトでも、cygwinを使えるように、
c:\cygwin\bin
みたいに通してます。
これが原因だったりするんでしょうか?
841 :
デフォルトの名無しさん :2007/06/17(日) 13:22:01
ご質問です wikiを作っているのですが,cgi上ではファイル書き込みができません. ローカルでは動くのですが. 何か特別な操作が必要なのでしょうか? お願いします. OS:Redhat ruby -v:1.8.5
842 :
デフォルトの名無しさん :2007/06/17(日) 13:24:36
>>841 ディレクトリに書き込み権限は与えていますか?
apacheがsuExecで動いていいない場合は、
オーナー以外のその他に人にも実行権限を与える必要があるかもです。
707とか
843 :
デフォルトの名無しさん :2007/06/17(日) 13:33:46
>>842 ありがとうございます
書き込み実行直前に権限を与えて,
終わったら権限を奪うというのがよさそうですが
可能でしょうか?
>>843 書き込み権限を与える権限があるなら苦労しないと思う・・・
845 :
デフォルトの名無しさん :2007/06/17(日) 13:46:42
>>844 あ,そうですね・・・
権限がなかったんだ(汗
ということは前もって与えておくしかないのか・・・
846 :
デフォルトの名無しさん :2007/06/17(日) 13:52:24
セキュリティ上どうのという場合は、書き込み用のディレクトリを作ってそこだけ、書き込み許可するのがよいです。
847 :
デフォルトの名無しさん :2007/06/17(日) 13:53:15
>>846 は、 あ、あらかじめ、作っておいて、あらかじめ書き込み権限を与えておくという意味です。
848 :
デフォルトの名無しさん :2007/06/17(日) 13:57:43
849 :
デフォルトの名無しさん :2007/06/17(日) 15:07:53
>>849 Exerbを使って、dllごとgame.exeに固められている
あと、きちんとsageて欲しい
851 :
デフォルトの名無しさん :2007/06/17(日) 17:14:11
>>850 おいおい。game.exeが、60KBしかないぞ・・・・
最低でも、RubyのDLLは500Kはあったと思う。
exerb40.dllに入っているが、これはどういう技術なんだ絽
852 :
850 :2007/06/17(日) 17:37:22
ごめんよ、思いっきりウソ教えるところだった exerbではランタイム別にできるの忘れてた
>840 ちとOS入れ直してからcygwin入れてなくて、しかも使ってるRubyはASR版という状況で 検証ができんでスマンのだがorz とりあえずいっぺん、cygwin関係PATHから外してirb起動して味噌 Ruby-mswin32のreadline.soがcygwinのreadline.dllを読みに行ってる悪寒
そんな欠陥OSは捨ててLinuxをいれれば全て解決
すみません、質問させてください。 あるインスタンスから、そのインスタンスのクラスを取り出すのはどうすれば良いんでしょうか? インスタンスからクラスメソッドを実行したいのですが。
object.class
>>855 object.class.クラスメソッド
858 :
855 :2007/06/17(日) 23:46:27
>>856 ,857
できました〜
すばやい返事ありがとうございます!!
質問です。 バイナリファイルに数値を書き込むにはどうすればよいでしょうか? 例えば以下のようにファイルを作っても文字として書かれてしまいます。 num = 1 file = File.open("test.bin", "wb") file.write(num) file.close
num.to_s
file.write([num].pack("i"))
この前のyahooスパマーではないのですが、net/pop net/smtpについての質問です。 Gmailアカウントを使用し、ローカルから送信するために、 Net::POP3.auth_only()を呼んでから、Net::SMTP.start(){sendmail()}を 実行しているのですがうまくいきません。 エラーメッセージは"execution expired (Timeout::Error)"です。 他になにか処理を追加しなければならないのでしょうか?
Gmailって外からメールの送信できたっけ?
gmailってMUAで読みたいだけなのにその時点で既に設定めんどくさいんだよな 普通の対応メーラーで読み書きできるのならそのプロトコルとポートをエミュレートすればいいんじゃね SSLとか要るんだっけ?
普通のPOPが使えるはず。 確か、Gmail側でウェブから設定するのが必要だよ。
require 'open-uri'
open("
http://www.ruby-lang.org/ja/ ", :proxy => nil) {|f|
f.each_line {|line| p line}
}
上のプログラムを実行すると下のようなエラーが出ます。
ネットで調べたらProxyが怪しいのですが、Proxyのない環境で実行しています。
他に原因が分からないのでどなたか教えてください。
C:/ruby/lib/ruby/1.8/net/http.rb:560:in `initialize': Bad file descriptor - connect(2) (Errno::EBADF)
from C:/ruby/lib/ruby/1.8/net/http.rb:560:in `open'
from C:/ruby/lib/ruby/1.8/net/http.rb:560:in `connect'
from C:/ruby/lib/ruby/1.8/timeout.rb:48:in `timeout'
from C:/ruby/lib/ruby/1.8/timeout.rb:76:in `timeout'
from C:/ruby/lib/ruby/1.8/net/http.rb:560:in `connect'
from C:/ruby/lib/ruby/1.8/net/http.rb:553:in `do_start'
from C:/ruby/lib/ruby/1.8/net/http.rb:542:in `start'
from C:/ruby/lib/ruby/1.8/open-uri.rb:242:in `open_http'
from C:/ruby/lib/ruby/1.8/open-uri.rb:626:in `buffer_open'
from C:/ruby/lib/ruby/1.8/open-uri.rb:164:in `open_loop'
from C:/ruby/lib/ruby/1.8/open-uri.rb:162:in `catch'
from C:/ruby/lib/ruby/1.8/open-uri.rb:162:in `open_loop'
from C:/ruby/lib/ruby/1.8/open-uri.rb:132:in `open_uri'
from C:/ruby/lib/ruby/1.8/open-uri.rb:528:in `open'
from C:/ruby/lib/ruby/1.8/open-uri.rb:30:in `open'
from D:/My Documents/NetBeansProjects/test/lib/main.rb:2
ホントにproxy無い? telnet www.ruby-lang.org 80 って打って接続できる?
接続中と出た後止まります。 ということはproxyがあるということでしょうか? FireFoxのプロキシ設定では「インターネットに直接接続する」を選んでいます。 また、http_proxy, no_proxy環境変数は設定していません。 参考になるかどうか分かりませんが、診断くんで調べてみた結果を書いておきます。 ntoska6桁の数字.oska.nt.ftth.ppp.infoweb.ne.jp 判定:(未判定) 漏れ判定:(未判定) 総合評価:?(A 以上 or 生 IP。下記参照) 疑惑 〜20%:proxy の可能性もわずかにあります。
ローカルでファイヤーウオールが邪魔してたりしない?
ウイルスセキュリティのファイアウォールを無効にしたら無事つながりました。 ありがとうございました。 できればファイアウォールを有効にしたまま使いたいので、プログラムからの接続を許可したいのですが、ruby.exeを許可にしてもだめでした。どのプログラムからの接続を許可にすればいいのでしょうか? ファイアウォールの履歴を見ると以下のようになっています。 ユーザー:SYSTEM 方向:送信 アクセス:拒否 説明:ルール不明 プロトコル:TCP(6) 送信元ポート:1047 リモートポート:80
871 :
1/2 :2007/06/19(火) 13:46:06
rdicという辞書引きプログラムを、某所にあった方法で サーバー化したのですが、 クライアントプログラムで失敗しています。 telnetでは、rdicが動作しています。 下のプログラムでも、単語をtelnetに渡して、rdicが動いているようなのですが、 rdic-client:10:in `gets': Interrupt ← n=s.gets.to_iの行 from ./rdic-client:10 rdicの仕様で、xtermの一文字目がクルクル回転するのですが、 それが邪魔をしているのかもしれません。 どのようにしたら、telnetから結果をとりだせるでしょうか。 アドバイス、よろしくおねがいします。
872 :
2/2 :2007/06/19(火) 13:57:17
>>871 つづき
(このプログラムはGPLと明言されていなかったので、
著作権についてなにか支障があったら削除します)
(telnetでポートをオープンして、ファイルハンドラsとする、ARGV[0]が検索する単語)
s.puts(ARGV[0])
n=s.gets.to_i
for i in 0...n
s.gets
$_.chomp!
puts $_
end
STDOUT.flush
s.close
pukiwikiの#contentsみたいに .htm解析して<h1>〜<h6>の見出しのリンク作成するフィルタってないですか?
874 :
デフォルトの名無しさん :2007/06/19(火) 15:19:45
>>853 「これが原因なんでしょうか?」っていう前に試せ馬鹿!っていう気がします。ごめんなさい。
試してきます。
cygwinのパスの前に、rubyのパスとおしてるけど、cygwinのパスの方を読みに行っちゃうものなんですかねえ・・・
875 :
デフォルトの名無しさん :2007/06/19(火) 15:28:16
>>853 結局、ダメぽでした orz
cygwinのほかに、perlとか、pythonとかのPATHもはずしてみたのですが、
だめぽ・・・
うちと職場二つの環境で発生するので何か法則があるはずなのですが・・・
パスを通すって環境変数PATHのこと? $LOAD_PATH のほうかな
セッション管理してるサイトから情報を得ようとしてるのですが、 w3mでヘッダ情報を見たときに Set-Cookie: FOO=a,iueo; domain=example.com; path=/ Set-Cookie: BAR={kakikukeko}; domain=example.com; path=/ Set-Cookie: BAZ=sasisuseso; domain=example.com; path=/ と複数送られているときに net/httpのレスポンスをres['set-cookie']とすると ["FOO=a,iueo", "domain=example.com", "path=/, BAR={kakikukeko}", "domain=example.com", "path=/, BAZ=sasisuseso", "domain=example.com", "path=/"] と、適切に分離されてないようです。','でsplitするのは、FOOの中にも ','が含まれるので使えません。 どのようにするのがいいでしょうか。
>>873 #contents専用のライブラリはたぶんない
HTMLを解析するライブラリを使ってスクリプト書いた方が早いよ
Hpricotかhtmlsplitあたりが便利
879 :
877 :2007/06/19(火) 19:29:11
get_fields('Set-Cookie')使えばよかったんですね。すつれいしました。
犯罪者御用達言語
>>820 亀だが、&付けて手続きオブジェクト(正確にはto_procを実装したオブジェクト)を渡すことによって
Pythonと同じようなこともできる
a = [5, 10, 15, 20, 25, 30]
p a.map(&lambda {|x| x + 1 }) => [6, 11, 16, 21, 26, 31]
Pythonのmap関数のように関数func(x)を渡して各要素をxとして処理することは標準ではできないが
ActiveSupportを入れれば Symbol#to_proc を使って
require 'active_support'
a = [5, 10, 15, 20, 25, 30]
p a.map(&:succ) => [6, 11, 16, 21, 26, 31]
とできる
>>881 > p a.map(&:succ) => [6, 11, 16, 21, 26, 31]
1.9だと標準。
なんだかんだいって、Rubyでもいろんなやりかたが増えつつあるな。 といってもPerlのそれほどではないが。
884 :
デフォルトの名無しさん :2007/06/20(水) 17:44:27
アクセッサを作りたいのですが、 class Sample attr_accessor :val def initialize(str) @val = str end end s = Sample.new(2) s.val(1) puts "val is #{s.val}" `val': wrong number of arguments (1 for 0) (ArgumentError) writeができないようです。 attr_accessorの使いかたは間違ってないと思うんですが 何がいけないんでしょ?
attr_accessorが定義するのは Sample#valとSample#val=です。
>886 俺の理解がいかんかったってことですね。 val=が解らないので炒ってきます。
s.val = 1
>>885 Perlだと、そんな感じのアクセサを定義することがあるな。
引数なしだと値を返して与えると変更みたいな。
けどRubyのアクセサは普通
def val()
def val=(v)
の2つ。当然 attr_accessor もコレに準じてる。
その例だと write が失敗してるのではなく
s.val(1) が失敗してる。
引数なしの val に引数与えてるから
「引数の数がおかしい」というエラー。
>888,889 やっと解りました。 Java歴の影響か、val=はインスタンス変数を 直接変更するようなちょっと違和感がありまして 使ったことなかった
>>890 Rubyではインスタンス変数を直接変更することは出来ない。
必ずメソッドを経由してアクセスしなければならない。
attr_accessor はそのメソッドを楽に書く方法ってだけ。
俺もruby初心者だけど役に立ったぜ!
>891 val=をメソッドと言われてもちょっと見た目が
まあねえ。普段はメソッドのようには使わないしねえ。 凝った利用する段になっていきなり「こいつは実はメソッドなんでこう書いてください」とか言われてもって感じはする。 ------------- Ruby では arr[1] = 'B' とかいう代入表記自体が既にシンタックスシュガーで、実際は irb> arr = ['a', 'b', 'c'] => ["a", "b", "c"] irb> arr.[]=(1,'B') => "B" irb> arr => ["a", "B", "c"] こういうことをしてるわけで、arr.[]=(1,'B') と書けば、obj.method(param) の形に見えんでもない。 これは hoge.hoo=10 なんかのときも同様。 実際は hoge.hoo=( 10 ) で、hoge で示されるオブジェクトの hoo= メソッドに引数 10 を渡してる。 初心者スレなのでツッコミ希望
カッコを省略できる、っていうのがRuby文法の肝なんだね。
ときとして、ピリオドも省略できる…のもね。 a=3; p a.*(4) アクセッサのセマンティックスの話も含めて、こういうRubyの変態性は 初学者にはどういうタイミングで学んでもらえばいいのだろう。
やっぱ、クラス書き出すときじゃね
「標準」よりもカッコやドットを省略してトクした経験はないんだが
括弧の省略し過ぎには注意が要るけどな。 Perl ではよく↓みたいな書き方をするが print sprintf "%f\n", rand; このPerlコードをそのまま ruby 1.8.5 に読ませると test01:1: warning: parenthesize argument(s) for future version てな感じで警告される。 この場合、最初の print と、引数の無い rand くらいは省略できるが sprintf の括弧は省略すべきじゃない。
>>894 > 実際は hoge.hoo=( 10 ) で、hoge で示されるオブジェクトの hoo= メソッドに引数 10 を渡してる。
それは10が括弧に入ってるだけで、文法的には hoge.hoo = (10) とまったく等価なんで、
例としては不適切だろう。
hoge = class Hoge; def hoo=(x) self end; new end
p hoge.hoo=( 10 )
p hoge.send(:hoo=, 10)
902 :
デフォルトの名無しさん :2007/06/22(金) 21:32:23
privateであるinitialize()をサブクラスのsuperで呼べるのは何故なんだぜ?
Rubyのprivateは、同じインスタンスからしか呼べないという意味だから。
privateはもう名前変えたほうがいいよな
>>897 何言ってるんだお前。
別に、a * 4 はピリオドを省略してるわけじゃねーよ。
ピリオドを省略してる記法だとするなら、
a + b * 10
が説明できないだろうが?
a + b * 10 → a.+(b.*(10)) b * 10 + a → b.*(10).+(a)
>>906 右結合と左結合を混合しちゃった時点でダメと気付けよ…
C++も a.operator*(4) と書けるけど、これを 「C++はときとして、ピリオドとoperatorと括弧も省略できる…のもね。」 とか言ったらアホだよね。
C++ならどんな変態記法も思いのまま。
>>905 kwsk
それでは、a * 4 はどうなってるの?
if文もピリオドが省略されてるとか言いだすんだろうか
>>910 a * 4はピリオドを省略した書き方なわけじゃないってことになってるの。
Windows上で簡単にRubyからシリアルポートを使いたいのですが 何か良い方法があったら教えてください
>>912 ほとんどの演算子は特別な形式のメソッド呼び出しです
>>913 open("com$", "rb+")
>>914 それはそうだよ?
でも、a * 4はピリオドを省略してるわけじゃない。分かる?
ピリオドの省略どうこうは、あんまり拘るところでもないと思うんだ メソッド呼び出しのシンタックスシュガーだってことが分かってれば十分だろ
>>916 たしかに。
def (obj = Object.new).+; end
しても obj +() とは呼べないもんね。obj.+() じゃないと。
つまり、2 + 3 と 2.+(3) は別物。
a * b + c と a .* b .+ c で実行結果違うしな
921 :
デフォルトの名無しさん :2007/06/24(日) 05:50:11
関数の実行に優先順位があるんです!と言いたそうな勢い
rubyで、あるクラスからメソッドを取り除くようなことはできますか。 class Foo def f(); end; end とあったときに、f()を無効化するようなことがしたいです。
>>922 class Foo
undef f
end
924 :
デフォルトの名無しさん :2007/06/24(日) 15:58:19
TCPserverとTCPSocketを使って サーバー&クライアントのプログラムserver.rb, client.rbを作りました。 サーバーのserver.rbをバックグラウンドで常駐させていないと、 client.rbで、当然Connection refused になります。 しかし、なんとかサーバープログラムを常駐させなくてもよい、 rubyプログラミングの方法はないでしょうか。 xinetdで、たとえばport番号55555にserver.rbを設定したのですが、 それでは、client.rbからserver.rbを使えませんでした。 よろしくお願いいたします。
927 :
924 :2007/06/24(日) 17:00:36
>>926 xinetdのログは↓です。
07/6/24@16:48:50: START: rubyserver pid=4529 from=127.0.0.1
inetdから起動されたプログラムは標準入出力がソケットにつながっていて、
標準入出力を相手にしてやりとりするだけでネットワーク通信が行えます。
Rubyで言うなら、STDINから入力して、STDOUTに出力すればよいのです。
ということなので、server.rbでTCPserverをつかわずにただのプログラムにし、
client.rbで、server.rbのポートをたたき、
STDOUTでserver.rbの出力を受け取ればいいのでしょうか?
clientは変える必要ない。 clientとserverの間にTCPserverがはさまって、 ソケットの入出力をserver.rbのSTDIN, STDOUTに変換してるだけだから。
930 :
924 :2007/06/24(日) 20:01:37
>>929 おっしゃる通りで、
はじめは、そのようにTCPserverをつかったサーバープログラムを組んでいたのですが、
サーバープログラムを常に立ちあげておくのも勿体無いので、
スーパーデーモンのxinetdを利用することにしました。
xinetd経由でたたくプログラムをprog.rb内で、
a=[]
a<<ごにょごにょ
print(a.size)
a.each do |l|
print(l)
end
client.rbで、
s = TCPSocket.open('localhost','rubyserver')
n=s.gets.to_i
for i in 0...n
s.gets
$_.chomp!
puts $_
end
これだと、配列aの一番最後の1要素しか出力せず、そこにひっかかっています。
どこかお気づきになるところはないでしょうか。
> print(a.size) > n=s.gets.to_i サーバとクライアントでプロトコル認識にずれがあるようだが
932 :
924 :2007/06/24(日) 20:55:48
>>931 xinetdをつかうとソケットと標準入出力をつないでくれるとあったので、
そうしたのですが、まちがっていますか?
一応、client.rb 内で p n をすると nの値は正しく渡せています。
自分が質問の意図を理解していない可能性が高いので、その点もご指摘ください。
933 :
デフォルトの名無しさん :2007/06/24(日) 21:50:31
>>924 printだと改行コードが送られないので次の行と結合してしまう。
client.rbでgetsしているのだからprog.rbからはputsする必要がある
ということなんでない?
935 :
924 :2007/06/24(日) 22:06:31
>>934 ご丁寧にありがとうございます。
prog.rbのprintをputsに変えたところ、
client.rbで配列aのすべての要素を標準出力にだせました。
改行コードのことを知らなかったので、勉強になりました。
rubyがどこにインストールされているかは調べた? /usr/bin/rubyだったり/usr/local/bin/rubyだったりで違ってるのかもよ。 パーミッションは755にするって書いてあるから合わせておいたほうがいいね。 cgi-binフォルダがあるならそこに配置しないと駄目ということもありえるね。 急がば回れで、一旦rubyから離れてPerlでHello Worldが動くか確かめてから Rubyで動かすように書き換えたほうが確実じゃないかな?
937 :
933 :2007/06/24(日) 22:32:52
>>936 ありがとうございます。
サポートしないとあるので、問い合わせはしていないのですが、
RubyはFAQにてインストール済みとあるので、
/usr/bin/rubyと/usr/local/bin/rubyは試しました。
パーミッションも、775と755を試しました。
ファイル名をtest211.cgiにしたり、test211.rbにしたりしましたが、
前者は真っ白な画面で、ソースを表示すると、<BODY><PRE></PRE></BODY></HTML>な状態で、
後者は#!/usr/local/bin/ruby print "Content-type: text/html\n\n" print "Hello World" と1行で。
Perlとかわからないのですが、Perlを先に試してみるべきでしょうか。
938 :
933 :2007/06/24(日) 22:40:32
>>936 すみません!出来ました!
>/usr/bin/rubyと/usr/local/bin/rubyは試しました。
といっていましたが、前者は/usr/local/rubyでやっていました。
/usr/bin/rubyで試してみたら、出来るようになりました。
本当に初歩的なミスで、しかも間違った報告をしてすみませんでした。
本当にありがとうございます。
939 :
925 :2007/06/24(日) 22:45:26
>>928 そっちにありましたか。ありがとうございます。
ちなみに undef は構文で、undef_method はメソッドという理解であってますか。
940 :
429 :2007/06/25(月) 06:27:24
>>430 思いついて、$stdout = File.open("xxxx.txt", "w")のwをa+にしたら解決しました(´・ω・`)
毎回閉じていたのかw
改行が複数含まれた文字列に対して、 「3行目から10行目まで取得」、「最終行から50行文取得」 というような関数を作ろうとしています。 まず、str.each_lineのブロックの中でインクリで行数を取得してから その後再びブロックで回し、if 指定した行数ならreturn文字列に結合 というような流れで作るつもりなのです。 もっとスマート方法をどなかたお願いします。
split(/\r?\n/,-1)でArrayにしてからアクセスしたほうがいいんじゃない?
String#to_aの方がいいんじゃね?
head,tailをpopen。
readlines もおわすれなく
データ全部読んでからおもむろに分割、という手順を取るものばっかなので 巨大ファイルを連続起動の場合はコストに注意
each_lineでカウントしつつ、ファイルポインタの位置をメモっておいて シーク&必要サイズを読むとか。 富豪的にやるほうが普通な気がする
そんなとこにRuby使っておいてそこに文句言うなアホ、で片付けられる例の分野だな
そしてユーザーはハイパフォーマンスなPHPへ以降と
Rubyで5〜20までの間だったら、みたいな条件文はどのように書くとエレガントでしょうか? Cとかであれば x >=5 && x <= 20 だと思うんですが、Rubyぽくない気がします (5..20).include? x だとなんか重そうです 皆さんはどうやってますか?
俺は (5..20).include? x を使うなぁ。 ついでながら、比較で書くなら 5 <= x && x <= 20 と書く。
>>951 「なんか重そう」で簡潔な書き方を控えるのは良くないよ
たいてい気にするほどの差はつかない
俺の場合は
case x
when 5..20
end
で基本的に統一してる
includeは語の順番が好きじゃないし、条件が増えると厄介
あとは between? とか。
if x in 5..20 って書けるようにして
>>955 Object#in?を定義すれば解決するぜ
標準で欲しいとは思うが
Range の include? はまさに境界値との不等号の計算しかしていない。 つまり (5..20).include? x は x >= 5 && x <= 20 と同じ意味。 下手に Ruby レベルの処理に戻ってこないぶん、 include? の方が速かったりするかもしれないよ(検証してないけど)
str = File.read_lines(5..20) ができればいいのにね
959 :
デフォルトの名無しさん :2007/06/26(火) 13:16:12
デフォルトのrequireのパスってどこに記述してあるんですか? 追加したいんです。
デフォルトの$LOAD_PATHを追加するなら環境変数RUBYLIB を設定する
>>962 レスが遅れましたが、うまくいきました。ありがとうございました。
964 :
951 :2007/06/26(火) 18:05:38
色々なご回答ありがとうございました Object#in?が一番Rubyっぽいですね Range#include?だと本来操作するべきオブジェクトが逆?というかCっぽいというか。。 速度的にも問題ないようですし、些事で標準から外れるのもアレなのでRange#include?でいきたいと思います
Base64エンコード/デコードを試してみているのですが、
ttp://ddo-jp.ddo.jp/download.php?no=6420 (DL pass "rb")
これだとテストに使ったJPEGは復号されずに壊れたものが出来上がります。
変換はpack/unpackに突っ込むだけなのでIO周りでわかっていないことが
あるのかと思っていますが…。
どこがまずいでしょうか。指摘していただけると幸いです。
見ないで言うがbinmode
>>966 $stdin、$stdoutはbinmodeしました…って言おうとして、
ARGFに触ってないことに気づきました orz
で、ARGF.binmodeする一行を付け加えたら
よくわからんエラーが出ました…
base64.rb:33:in `syswrite': Not enough space (Errno::ENOMEM)
from base64.rb:33
>>965 素直にARGVの内容を見て、open(path, 'rb')するべき
ARGFの動作はよく分からんが、バイナリだと途中で内容が切れてしまうので
バイナリファイルを読むのに使うべきではない
あと、質問の内容とは関係ないけど
・syswriteを使うのはなぜ?
・mode_tblは不要なのではないか(proc_tblだけで十分では)
・ハッシュのキーがSymbolなのはなぜ?
という点が気にかかる
>>968 syswriteは試行錯誤の名残です。
つまりIO#printに責任転嫁してみたりしてたんです。
HashのキーがSymbolなのって珍しいんですか?
わりとそんな例を見かけるもんで…
あとせこい高速化を期待して
modes_tblはif文を簡単に書きたかったっていう不精です
あとは、caseでencode, decode, none全部捕まえるよりも
Hashのリテラルのほうがパッと見でどういうモードがあるか
判りやすいかな、とかいう目算と、これまたせこい高速化を期待してです。
>>968 ARGVをeachで回して、ひとつずつ開けても
base64.rb:33:in `write': Not enough space (Errno::ENOMEM)
from base64.rb:33
from base64.rb:32
from base64.rb:31
と、$stdoutにprintするところで叱られました。出力を止めて変換だけを
するとふつうに動くので、出力が原因っぽいのですが…
RubyのErrnoはCのerrno.hのラップだと思っていたのですが、出力で
メモリが足りなくなる状況がよくわからず、解決策が浮かばないです。
どなたか知恵を貸してください… orz
>>970 自己解決しました。StringIOに突っ込んで
少ないバイトずつ取ってきてはprintしたら上手くいきました。
レスしてくれた方、ありがとうございます。
euc-jpな標準出力をだすプログラムを変更して、 jisx0213な文字を数値実体参照にして、utf-8で出力したいのですが、 ヒントになるようなモジュールを教えてください。 iconvだけでは足りませんよね? はじめ、perlで作ろうかと考え、perl質問スレで尋ねたのですが、 元々のプログラムがrubyだったので、不案内ながら、 そのrubyプログラム自体を改造しようと思いました。 マルチレスになるのでしたら、控えます。 よろしくお願いします。
JIS X 0213な文字というのは2面のこと? str.gsub(/\x8f[\xa1-\xfe][\xa1-\xfe]/n) {|x| ... } とかで最初に置換しちゃうとか。 UTF-8で出力するのに数値実体参照にする意味あるんですか? XML全般だとしたら要素名は数値実体参照に置換できないとか制限あった気が。
>>969 細かい突っ込みになるけど
>キーがSymbol
そのスクリプトの場合だと、わざわざinternするの面倒くさくないか?
>modes_tbl
proc_tbl.keysで代用した方がいいと思う
>>970 俺の方でも試してみたけど、2MB超のJpeg食わせてもENOMEMは出なかった
PCのメモリの差だろうか?
>わざわざintern まぁ二箇所ですし…。Stringより軽い…とか言いながら 実際は染み付いた性癖に近いような。 >>modes_tbl >proc_tbl.keysで代用した方がいいと思う 思いつかなかった… そうですね、確かにその通りです orz RAMは512MBっす。 45KBのBMPでも落ちました。ショボ。
メモリ破損じゃねーの? リアルに。
977 :
972 :2007/06/28(木) 01:10:25
具体的には、æ & a e l i g ; のような発音記号です。 utf-8での数値実体参照は & # 2 3 0 ; や & # x E 6 ; になります。 euc-jp では \xa9\xdc です。 数値実体参照以外に、utf-8でæを表示する術を知らないので、 やむを得ずというところです。 エディタはutf-8なemacsなのですが、 発音記号をだそうとするとjisx0213のフォントをもってきてしまうのです。 じぶんでもよくわからないので、説明になっていなくてすみません。 教えていただいた >str.gsub(/\x8f[\xa1-\xfe][\xa1-\xfe]/n) {|x| ... } を参考に、がんばってみます。 \x8f が、JIS X 0212ということなのですね。
>>977 ae1 = Iconv.conv('UTF-8','EUC-JISX0213',"\xa9\xdc")
ae2 = [0xe6].pack('U')
ae3 = 'æ'
ae4 = 'æ'
このUTF-8なæをIE7,Firefoxで表示させてみたら、全部同じように表示されました。
Firefoxからxyzzyにコピペするとæと表示されます。
IE7からだと"a"=="\x61"に化けてしまいますが^^;
iconvで指定するencodingは'EUC-JP'ではなく'EUC-JISX0213'にしないと
Iconv::IllegalSequenceが発生しました。
> \x8f が、JIS X 0212ということなのですね。
単にJIS X 0213の2面という印ですので、1面に追加された文字については個別で
判定しないと駄目ですね。
http://x0213.org/codetable/ にある対応表が参考になるのかな?
[2000]とか[2004]と書いてある文字は注意が必要みたいですね。
utf8にするんだったら わざわざ数値ナンタラにする必要あんの? とはいえ、どっかでそんなライブラリ?を見たな
Rubyってvariantっぽい型ないの? いちいち(...).to_iばら撒くのマンドクセ
ume
array0 = array1.map_with_index{ |x,i| x*i } みたいなことって綺麗にできますか?
>>982 arr1 = [10, 9, 8, 7, 6, 5]
arr0 = []
arr1.each_with_index{|val, index| arr0 << val * index }
すぐに思い付くのはこれくらいかなぁ。
array0 = (0...array1.size).map{|i| array1[i] * i} array0 = array1.enum_for(:each_with_index).map{|v,i| v * i}
>>982 (0..array0.size-1).zip(array0).map{ |i,x| i*x }
mapってのは(順番のない)集合から集合への写像のことだから with_indexってのが最初から無理があるよね
>>982 array0 = array1.each_index{ |i| i * array1[i] }
988 :
デフォルトの名無しさん :2007/06/29(金) 07:52:47
system("gnuplot xxx.gp") ってするとなんか実行出来ない。Cなら実行出来るのに
そうですか
>>983 , 984, 985
ありがと。984さん勉強になりました。enum_forを使います!
早くThread.newするんだ
つーか今のこのスレって初心者スレというより、質問スレって感じじゃない?
梅
throw :さじ
自演乙
rubiestはコードゴルフに熱中しすぎて開発効率が悪いの法則
うめ〜
1000ということで
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。