Ruby 初心者スレッド Part 17
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/01/16(水) 17:41:27関連スレやURLは>>2-7あたりを見てください。Ruby on Railsの質問はWebProg板のRailsスレで。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・ぐぐる
・マニュアルで探す http://www.ruby-lang.org/ja/man/
・FAQを読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・エラーメッセージ(なるべくそのままで)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0002デフォルトの名無しさん
2008/01/16(水) 17:42:03一からRubyをはじめる初心者向けのRuby入門書は何がお薦めでしょうか?
A: プログラ自体の初心者だったら「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
他の言語経験があるんだったら「プログラミングRuby 第2版 言語編」
0003デフォルトの名無しさん
2008/01/16(水) 17:45:20Ruby 初心者スレッド Part 16
http://pc11.2ch.net/test/read.cgi/tech/1197120980/
■関連スレ
Rubyについて Part 30
http://pc11.2ch.net/test/read.cgi/tech/1200106073/
Rubyの宿題教えてください。
http://pc11.2ch.net/test/read.cgi/tech/1106572657/
http://pc11.2ch.net/test/read.cgi/tech/1200175247/
【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc11.2ch.net/test/read.cgi/tech/1155031689/
Ruby on Rails
http://pc11.2ch.net/test/read.cgi/tech/1191381506/
Rubyについて(アンチ専用) Part002
http://pc11.2ch.net/test/read.cgi/tech/1200210768/
0004デフォルトの名無しさん
2008/01/16(水) 17:47:27Ruby Home Page
http://www.ruby-lang.org/ja/
Rubyリファレンス(よくサーバーエラーになります)
http://www.ruby-lang.org/ja/man/
http://www.ruby-doc.org/ (英語)
リファレンスのHTMLヘルプ版配布
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
# Windowsで便利
Ruby FAQ
http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
Programming Ruby - The Pragmatic Programmer's Guide
http://www.ruby-doc.org/docs/ProgrammingRuby/
# 好評書籍をWebで公開中、ただし英語
逆引きRuby
http://www.namaraii.com/rubytips/
0005デフォルトの名無しさん
2008/01/16(水) 17:53:42http://raa.ruby-lang.org/
RubyForge
http://www.rubyforge.org/
# Rubyのアプリやライブラリが検索できる
日本Rubyの会 公式Wiki
http://jp.rubyist.net/
# メニューに表示されていない埋もれた情報ページ多数
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
# コードレビューが好評
Matzにっき(Ruby作者の日記)
http://www.rubyist.net/~matz/
Ruby hotlinks 五月雨版(日記やblogのアンテナ)
http://www.rubyist.net/~kazu/samidare/
Rubyの本一覧
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Ruby%A4%CB%B4%D8%A4%B9%A4%EB%BD%F1%C0%D2
<rubyXML/>
http://www.rubyxml.com/
0006デフォルトの名無しさん
2008/01/16(水) 17:54:46Ruby 初心者スレッド Hiki
http://starlet.s145.xrea.com/ruby/hiki/
Ruby Portal
http://ruby.morphball.net/portal/
0007デフォルトの名無しさん
2008/01/16(水) 18:02:44未だバグが多く、不安定です。
正式な日本語ドキュメントも出ていません。初心者は手を出さないように。
安定版リリースの1.8.xを使いましょう。
Changes in Ruby 1.9(英語)
http://eigenclass.org/hiki.rb?Changes+in+Ruby+1.9
0008デフォルトの名無しさん
2008/01/16(水) 18:08:10間違いとか重要なのに入ってないURLとかあればよろしく
0009デフォルトの名無しさん
2008/01/16(水) 18:27:060010デフォルトの名無しさん
2008/01/16(水) 20:03:390011デフォルトの名無しさん
2008/01/16(水) 20:05:11:デフォルトの名無しさん:2008/01/16(水) 15:05:44
質問です。2つの文字のコマンドラインで入力された2つの文字列のレーベンシュタイン距離(編集距離)を求めたいです。
ただし、kakasiとtakasaは通常なら距離が2になるのですが、3にしたいです。
要するに母音に対して変換が行われたときのみ距離を2倍にしたいです。
できれば〜倍かはコマンドラインから指定できるとなお良いです。
扱う文字はaiuなどではなく、kakisuなど子音を含むものとします。nnやnya等も考えません。
つまり配列にいれるなら奇数のとこに必ず母音が入るというものです。
通常の距離を求めるコードは以下にソースはっておくので、どなたか改造、アドバイスお願いします。
0012デフォルトの名無しさん
2008/01/16(水) 20:05:37:デフォルトの名無しさん:2008/01/16(水) 15:07:31
class String
def levenstein(other, ins=1, del=1, sub=1)
# ins,del,subは重みつきコスト
return nil if self.nil?
return nil if other.nil?
dm = [] # 距離行列
# 最初の行の値を初期化する
dm[0] = (0..self.length).collect { |i| i * ins }
fill = [0] * (self.length - 1)
0013デフォルトの名無しさん
2008/01/16(水) 20:09:32:http://pc11.2ch.net/test/read.cgi/tech/1197120980/988:2008/01/16(水) 17:33:21
続きです。
#重要な比較
dm[i][j] = [
dm[i-1][j-1] + (self[j-1] == other[i-1] ? 0 : sub),
dm[i][j-1] + ins,
dm[i-1][j] + del].min
end
end
#行列の最後の値が文字列間のレーベンシュタイン距離となる
dm[other.length][self.length]
end
u1 = gets
u2 = gets
yyy = u1.levenstein(u2)
puts yyy
#yyyが距離になります。
end
よろしくお願いします。
0014デフォルトの名無しさん
2008/01/17(木) 00:15:570015デフォルトの名無しさん
2008/01/17(木) 00:36:05マルチスレッドを使用して非同期のP2P形式チャットプログラムを作りたいのですが、
クライアント側から送信しないとサーバ側で送信できません(同期通信になってる)
非同期にする方法がイマイチわからないので、できればサンプル等を用いてご指導お願いします。
最終的に作りたいものは、ユーザ1がユーザ2に接続し、任意のタイミングで文字列を送受信する
プログラム(メッセンジャーみたいな感じ)です。よろしくお願いします。
Windows XP(mswin32)/1.6.8
0016デフォルトの名無しさん
2008/01/17(木) 00:43:110017デフォルトの名無しさん
2008/01/17(木) 00:43:43こんなのがある。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/123789
short codingになってて読みにくいので、自力でわかりやすく整形してくれ。
0018デフォルトの名無しさん
2008/01/17(木) 02:00:33それら全てを(正常)終了させる、といったコードはどうなりますか?
0019デフォルトの名無しさん
2008/01/17(木) 02:13:180020デフォルトの名無しさん
2008/01/17(木) 07:04:04実行環境:
ruby: 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
OS: Windows XP Professional Version2002 SP2
サーバ:
002120
2008/01/17(木) 07:10:21実行環境:
ruby: 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
OS: Windows XP Professional Version2002 SP2
サーバ:Apache2
内容:
特定のURIから画像をひっぱてきて表示したいのですが、
うまくいかない場合があります。
うまくいくURI
requri = "http://www.google.co.jp/intl/ja_jp/images/logo.gif"
うまくいかないURI
requri = "http://mt1.google.com/mt?v=ap.66&x=3&y=2&n=404&s=Gal&zoom=15"
上記URIに対し下記の処理を実行して画像を表示します。
require 'open-uri'
uri = URI.parse(requri)
str = uri.read
print 'Content-type: '+ str.content_type + "\n\n"
STDOUT.binmode #これやらないと画像などのバイナリ系が勝手に文字列エンコードされました。
print str
うまくいくURIの場合はCGIとして呼び出すと画が表示されますが、
うまくいかないURIの場合、 str = uri.read のところで
c:/ruby/lib/ruby/1.8/open-uri.rb:287:in `open_http': 403 Forbidden (OpenURI::HTTPError)
とエラーが返ってきます。
ブラウザのアドレス欄に うまくいかないURIを直接入力してジャンプした場合はFobiddenになりません。
cgi経由だとうまくいかないようです。
以上です。よろしくおねがいします。
0022デフォルトの名無しさん
2008/01/17(木) 07:49:360023デフォルトの名無しさん
2008/01/17(木) 08:07:21ttp://www.studyinghttp.net/status_code
0024デフォルトの名無しさん
2008/01/17(木) 08:40:40>from a computer virus or spyware application.
恐らくヘッダが足りないと見た
0025デフォルトの名無しさん
2008/01/17(木) 09:05:59あんまRuby関係ないな
HTTPステータスコードと「サーバから拒否される理由」を勉強するべき
アクセルとブレーキを物理的に踏めるからといって交通標識を知らずに車を公道で運転することはできない
0026デフォルトの名無しさん
2008/01/17(木) 09:14:500027デフォルトの名無しさん
2008/01/17(木) 09:21:02小手先の迂回方法だけ教えてもゴミ増やすだけだ。ステータスコードとその意味を知らないなんて致命的。
どうせどっかで学ばないといけないんだし早いほうがいい。
0028デフォルトの名無しさん
2008/01/17(木) 09:48:43別にRFC2616見たからって、そこからヘッダが足りない、
という答えを導き出すことはまず不可能だと思うがね。
RFC的にはクエリ自体は合法なわけだし。
0029デフォルトの名無しさん
2008/01/17(木) 10:00:330030デフォルトの名無しさん
2008/01/17(木) 10:01:240031デフォルトの名無しさん
2008/01/17(木) 10:22:13RFCを出すまでもなく、おまえは話の本質が分かってないわけだがw
0032デフォルトの名無しさん
2008/01/17(木) 10:38:110033デフォルトの名無しさん
2008/01/17(木) 12:28:440034デフォルトの名無しさん
2008/01/17(木) 12:33:52何しに来たんだこいつは?
0035デフォルトの名無しさん
2008/01/17(木) 12:34:50あんな風になる。
0036デフォルトの名無しさん
2008/01/17(木) 12:57:41たしかに >>25 >>27 あたりは本当に酷いな
0037デフォルトの名無しさん
2008/01/17(木) 12:58:580038デフォルトの名無しさん
2008/01/17(木) 13:12:550039デフォルトの名無しさん
2008/01/17(木) 13:14:580040デフォルトの名無しさん
2008/01/17(木) 13:15:130041デフォルトの名無しさん
2008/01/17(木) 13:16:250042デフォルトの名無しさん
2008/01/17(木) 13:34:44ただ困ったことに、程度の低い罵り合いの多くは
「本人達は自分のレスが賢さの反映だと思っているから」続くんだよね。
俺は頭が良くて性格が悪い人間なんだ、そんな俺のレスは馬鹿の目から見れば
程度が低い罵りに見えるのだろう、でも本当は賢いから俺は言葉を巧みに操れるんだ俺にはわかる、ってね。
0043デフォルトの名無しさん
2008/01/17(木) 13:43:37日本語で書き直してもらえませんか?
0044デフォルトの名無しさん
2008/01/17(木) 13:53:56都合の悪いものを避けようとする君の本能は、いま凄く正しく動いた。
0045デフォルトの名無しさん
2008/01/17(木) 13:55:21が
>>42の例
0046デフォルトの名無しさん
2008/01/17(木) 13:57:040047デフォルトの名無しさん
2008/01/17(木) 13:57:130048デフォルトの名無しさん
2008/01/17(木) 14:02:150049デフォルトの名無しさん
2008/01/17(木) 14:17:580050デフォルトの名無しさん
2008/01/17(木) 14:21:370051デフォルトの名無しさん
2008/01/17(木) 14:24:02そういうことを考えないとrubyを覚えることはできないのでしょうか?
難しそうで残念です。
0052デフォルトの名無しさん
2008/01/17(木) 14:31:54最後の行が特に意味不明だ…
俺は…できる、俺にはわかる。って、自分のことが自分でわかるってなにそれw
0053デフォルトの名無しさん
2008/01/17(木) 14:41:06おまえみたいなサル程度の脳じゃ理解できないんだろ
0054デフォルトの名無しさん
2008/01/17(木) 14:44:13--yydebug というオプションをつけると、構文解析の過程が表示されます。
0055デフォルトの名無しさん
2008/01/17(木) 14:47:23馬鹿が見ればこうなんだろうが実際はこうなんだ、という構図が、俺にはわかる、ってことだろ。
そもそも下の2行は、自分で一方的に自分の賢さを認めて完結しちゃってる自称おりこうさんの思考を
書いてるんだから、基本的に自己完結であるのは当然だ。
0056デフォルトの名無しさん
2008/01/17(木) 15:23:06おまえがキモイのは分かったからw
0057デフォルトの名無しさん
2008/01/17(木) 15:45:27S/N悪くなるだけで。
本気で言い争いしてるんだったら氏んでくれ。
煽り合いで退屈を紛らわしているんだったら他の場所へ行かないかな。
0058デフォルトの名無しさん
2008/01/17(木) 16:00:33そういうこと言うからいつまでも続くし、やめてもらえませんか?
0059デフォルトの名無しさん
2008/01/17(木) 16:14:080061デフォルトの名無しさん
2008/01/17(木) 16:37:18kwsk
0062前スレ988現11
2008/01/17(木) 16:38:04すいません。
# 最初の列の値を初期化する
for i in 1..other.length
dm[i] = [i * del, fill.flatten]
end
# 行列に値を入れる
for i in 1..other.length
for j in 1..self.length
0063デフォルトの名無しさん
2008/01/17(木) 16:48:040064デフォルトの名無しさん
2008/01/17(木) 18:16:28大学の授業とかで専門的に学ぶような事柄だから
そもそも知らないって人が見ただけで理解できなくても桶
0065デフォルトの名無しさん
2008/01/17(木) 18:19:560066デフォルトの名無しさん
2008/01/17(木) 18:23:53たったひとつの専門タームが理解出来ないために
文章全体が意味不明のように感じるのはよくあること
0067デフォルトの名無しさん
2008/01/17(木) 18:26:210068デフォルトの名無しさん
2008/01/17(木) 18:26:392
$ hoge takasu clinic
6
っていう結果が欲しいだけだろ
0069前スレ988現11
2008/01/17(木) 19:44:41その通りに近いでございます。sagu sageだったら”1”ってゆー結果が得られますが”2”ってゆー結果にしたいです。
この場合だとeを置換してuにしますが、母音を扱うため2になるということです。
母音は必ず偶数文字目に出るとします。(sasasaはありえるが、asaはありえない)
おそらく僕がゆとり世代だからというのがすべての原因です。。。すいません。
0070前スレ936
2008/01/18(金) 00:00:43>Ruby関係なく、リソース開放などの処理するときはGCに依存しちゃダメだろwww
>明示的に書かないと・・・
>C#とかJavaとかでもそうだぜ?
>C#で言えば、Disposeみたいなの
すまん、おれがアホすぎる理由を教えてくれ。
Dispose なんか使わん。IDisposable 実装して、 usingでRAII だろ常考ということ?
0071デフォルトの名無しさん
2008/01/18(金) 04:48:18某サーバにアップして実行すると、時々20桁になってしまいます。。。
ちなみにローカルとアップ先のサーバのRubyバージョンは1.8.5で同じです。
何故でしょうか?
cgi = CGI.new
cgi.out{sprintf("%010u", Time.now.to_s.hash)}
0072デフォルトの名無しさん
2008/01/18(金) 04:56:24オブジェクトIDは10桁でなければならないって決まってるわけでもないし
007371
2008/01/18(金) 04:56:52これが原因でしょうか??
0074デフォルトの名無しさん
2008/01/18(金) 05:08:08007571
2008/01/18(金) 05:35:31とりあえず、無理やりこんな感じで解決した事はしたのですが…
sprintf("%010u", [Time.now.to_s.hash].pack('L').unpack('L')[0])
0076デフォルトの名無しさん
2008/01/18(金) 07:12:170077デフォルトの名無しさん
2008/01/18(金) 08:35:000078デフォルトの名無しさん
2008/01/18(金) 12:06:59007971
2008/01/18(金) 18:04:42う〜ん、二回実行されている事はないと思うのですが…
>>77
とりあえず、>>75の方法で解決出来たので、これでやってみます。
>>78
そういうのがあるんですか。
もしそうならそれが原因でしょうね。
0080デフォルトの名無しさん
2008/01/18(金) 18:23:17sprintf("%010u", Time.now.to_s.hash % 10000000000)
のようにすれば一応は収まるような気がする。
0081デフォルトの名無しさん
2008/01/18(金) 19:12:19正規表現スレかプログラム初心者で問う事かもしれないと、
思ったんですが特定の書籍の記述についての質問なので
こちらでさせてくだされ。
「オブジェクト指向スクリプト言語Ruby(まつもと氏/石塚氏 共著)」の
78ページと81ページにある
/\w\w\w+,?\s*(\w\w\w)\s*[\d:]+\s*(\d{4})/
最初の英数字三文字の一回以上の繰り返しのあとにカンマがあります。
これはメタ文字ですか?
それとも「+と?」と「+?」を書き分けるためのものですか?
0082デフォルトの名無しさん
2008/01/18(金) 19:32:52メタ文字関係ない。まごうかたなき "," という文字。
メールヘッダなんかに使われる時刻文字列にマッチする正規表現だね。
"Fri, 18 Jan 2008 19:30:43 +0900"
みたいな文字列で、最初の部分に曜日があるんだけど、そこにマッチする。
0083デフォルトの名無しさん
2008/01/18(金) 20:14:230084デフォルトの名無しさん
2008/01/18(金) 20:21:56つかえが取れました。感謝!
0085デフォルトの名無しさん
2008/01/18(金) 23:05:33008611
2008/01/19(土) 00:47:43class String
def levenstein(other, ins=1, del=1, sub=1)
# ins,del,subは重みつきコスト
return nil if self.nil?
return nil if other.nil?
dm = [] # 距離行列
# 最初の行の値を初期化する
dm[0] = (0..self.length).collect { |i| i * ins }
fill = [0] * (self.length - 1)
# 最初の列の値を初期化する
for i in 1..other.length
dm[i] = [i * del, fill.flatten]
end
# 行列に値を入れる
for i in 1..other.length
for j in 1..self.length
008711
2008/01/19(土) 00:48:21dm[i-1][j-1] + (self[j-1] == other[i-1] ? 0 : sub),
dm[i][j-1] + ins,
dm[i-1][j] + del].min
end
end
#行列の最後の値が文字列間のレーベンシュタイン距離となる
dm[other.length][self.length]
end
u1 = gets
u2 = gets
yyy = u1.levenstein(u2)
puts yyy
#yyyが距離になります。
end
よろしくお願いします。
0088デフォルトの名無しさん
2008/01/19(土) 18:39:10そのcgiを、htmlと同一サーバ内に置いてhtmlにアクセスした場合は
問題なくクッキーが設定されるのですが
cgiを別サーバに置いて、外部呼出しにした場合
Mozilla系のブラウザでは問題ないのですが、IEの場合クッキーが設定されません…
以下がクッキーを設定するコードです。
Cgi = CGI.new
cookie = CGI::Cookie::new({'name' => 'TEST', 'expires' => Time.now + 200})
Cgi.out("cookie" => cookie){''}
0089デフォルトの名無しさん
2008/01/19(土) 19:00:55dm[i-1][j-1] + (self[j-1] == other[i-1] ? 0 : sub),
の行をどうにかすればいいような気がする
009011
2008/01/19(土) 19:09:21dm[i-1][j-1] + (self[j-1] == other[i-1] ? 0 : sub),
dm[i][j-1] + ins,
dm[i-1][j] + del
のところをいじれば良い・・・
多分sub.ins.delそれぞれがij行列の奇数要素で行われた場合
sub * g1
gi = gets
みたいにできればいいかなって思うんですが、、、
うまくかけません。。。
0091デフォルトの名無しさん
2008/01/19(土) 23:53:36Mozillaがセキュリティぶっちぎってるだけのような……
てゆーかXSSじみたことをさせようとしてるように見えるんだが
cgiを別サーバに置く理由は? 負荷とか実行権限ないとか?
0092デフォルトの名無しさん
2008/01/20(日) 00:08:33www.example.comとhoge.example.comならできるけど、www.example.comとwww.example.jpではダメ
前者でIEが動作しないってのはIEのクッキー設定で厳しくなってるだけのような気もするが
0093デフォルトの名無しさん
2008/01/20(日) 00:17:100094デフォルトの名無しさん
2008/01/20(日) 00:29:08009593
2008/01/20(日) 00:42:18う〜ん、そうですか。
やっぱり機種依存文字を含んでる時点でもうよろしくないですよね。
なにかしらの回避策を考えてみます。どうもです。
0096デフォルトの名無しさん
2008/01/20(日) 00:53:34009788
2008/01/20(日) 01:38:05いや、別に悪意のある事をしようとはしてないです。
cgiを別サーバに置く理由は、ちょっと負荷が気になるので
メインのhtmlがあるサーバに置きたくないだけなんです。
>>92
一応、問題なく外部呼出しからクッキーが設定出来たFirefoxで見ると
クッキーのpathはcgiがあるサーバのものになってます。
もし下の様な場合
http://www.main.com/ck.html ←imgタグでcgiの呼び出しを記述した観覧用のhtmlがるURL
http://www.cgi.com/ck.cgi ←クッキーを設定するcgiのURL
"http://www.main.com/ck.html" にアクセスすると
Firefoxのクッキーのパスは "http://www.cgi.com/" になってました。
0098デフォルトの名無しさん
2008/01/20(日) 01:56:55Mozzilaは他のドメインのクッキー上書きできるのか?w
0099デフォルトの名無しさん
2008/01/20(日) 07:08:35「アクセスしたサイトからのクッキーのみ許可」が出来るブラウザって
結構あるし、自分はそれが出来るブラウザでは必ず設定してるけど、
そーゆー事する人には提供しなくてもいいサービスなの?
0100デフォルトの名無しさん
2008/01/20(日) 12:37:48スクリプトをutf8で書いているため出力がutf8です。
スクリプト自体に変更を加えず、つまりruby.exeへの変数を弄くって出力を
utf8からShift_JISにすることは出来ないでしょうか?
宜しくお願いします _ _
0101デフォルトの名無しさん
2008/01/20(日) 13:04:42default_externalがうまいこと変更されるんじゃないかな。
■ このスレッドは過去ログ倉庫に格納されています