Ruby 初心者スレッド Part 40
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/12/11(土) 15:46:15★注意★ Ruby 1.9.2 は初心者には若干時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
文字エンコーディング等の外部基礎知識が必要な上、不完全対応の第三者ライブラリでの問題の切り分けが手間です。
迷う点の少ない1.8.7に習熟→おもむろに1.9.2の変更点のみ重点学習、とすればスムーズに移行できるでしょう。
関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・エラーメッセージの共通そうな部分やエラーの出るモジュール名でググる
・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
・エラーメッセージ(自力で訳さずなるべくそのままで)
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0611デフォルトの名無しさん
2011/01/17(月) 02:49:33それはどういうことが分からないんだ?
・回答A
ClassはModuleを継承している。
でもModuleもClassのインスタンスであり、すべての親であるObjectだってClassのインスタンス。
こういった基本的なクラスは相互に依存し合っていて、どこかが欠けると成立しない。
卵が先でも鶏が先でもない。両方あるからこそ成り立つ。
だからこそ、言語本体に組み込まれて存在している。
・回答B
後者の式は「Moduleクラス」や「Classクラス」のクラスを得る式。
クラスのクラスを得るのだから、当然返ってくるのはClassに決まっている。
Moduleクラスそのものを得たいなら
Module.class
なんて書くのは完全に蛇足で、単に
Module
と書く。
0612デフォルトの名無しさん
2011/01/17(月) 06:55:42どういうことって言われても。。
>Class.superclass
>=> Module
Classの親クラスはModuleってだけのこと。
>Module.class
>=> Class
ModuleはClassクラスのインスタンスオブジェクトだってだけのこと。
ModuleもClassもStringもObjectも、Classクラスのインスタンスオブジェクト。
0613デフォルトの名無しさん
2011/01/17(月) 09:36:380614デフォルトの名無しさん
2011/01/17(月) 09:52:340615デフォルトの名無しさん
2011/01/17(月) 09:56:350616デフォルトの名無しさん
2011/01/17(月) 13:33:29そんなのわかってんだろうけど、
つながりとして考えたとき驚いたってことだろ。
得意になって断片的な説明して笑えるw
0617デフォルトの名無しさん
2011/01/17(月) 14:45:560618デフォルトの名無しさん
2011/01/17(月) 14:51:540619デフォルトの名無しさん
2011/01/17(月) 15:59:44結局断片的な説明しかできないじゃん。
それを得意になって笑えるとか、そんなん悪趣味な釣りとしか思えんよ。
0620デフォルトの名無しさん
2011/01/17(月) 16:13:480621デフォルトの名無しさん
2011/01/17(月) 16:16:44そう考えるようにした方がいい。まだ間に合う
0622デフォルトの名無しさん
2011/01/17(月) 18:12:14>>611
>Moduleクラスそのものを得たいなら
>
>Module.class
>
>なんて書くのは完全に蛇足で、単に
>
>Module
>
>と書く。
Module.class で返されるのは Class であって Module ではない。
0623デフォルトの名無しさん
2011/01/17(月) 18:31:10>>611 の指摘はそれほど外してない気がする。
>>610 は Ruby のクラス階層の is-a has-a の構造で混乱しているんじゃないかな。
0624デフォルトの名無しさん
2011/01/17(月) 18:35:440625デフォルトの名無しさん
2011/01/17(月) 20:06:37>>>610 は Ruby のクラス階層の is-a has-a の構造で混乱しているんじゃないかな。
混乱しているのはおまえのほう。has-a関係ない。
>>624
誰も気づいてないようだからつっこんでやるけど、だれがうまいこといえと
0626デフォルトの名無しさん
2011/01/17(月) 20:57:22superclass は Class のメソッド
並べると確かに変だな。
0627610
2011/01/18(火) 02:56:26意図していたことは>>611さんの回答Aで言っていることそのままでした。
Class.superclass
=> Module
ClassはModuleの性質を受け継いでいるのに
Module.class
=> Class
Moduleの元になるクラスはClassである。
という関係が直感的に意味不だったので。。
0628デフォルトの名無しさん
2011/01/18(火) 08:16:30Class⇔Module
サブクラス⇔スーパークラス
Module⇔Class
別の概念である。同じ「class」という単語が使われているが間違えないように。
0629デフォルトの名無しさん
2011/01/18(火) 14:28:00リリース時に処理系の環境がGPLなのは不可な案件か?
RubyGemsでもGPLなものもあるから気を付けろよ
それはそうとissueはこのあたりと関連チケットだな
1.8にポーティングは可能なのだろうか
その前にwin32は人が足りていないような気もするし
Ruby 1.9 - Bug #1685: Some windows unicode path issues remain - Ruby Issue Tracking System
http://redmine.ruby-lang.org/issues/show/1685
Ruby 1.9 - Bug #1771: system()/popen()/popen3() & windows & unicode is not working - Ruby Issue Tracking System
http://redmine.ruby-lang.org/issues/show/1771
0630tom
2011/01/18(火) 15:16:12req.set_form_data("aaa=bbb&ccc=ddd")
としてば場合、&、=をurlエンコードしない方法ってありますか?
0631デフォルトの名無しさん
2011/01/18(火) 19:23:17set_form_data は Hash を引数に期待する
req.set_form_data({'aaa' => 'bbb', 'ccc' => 'ddd'})
と書けば、キーと値は適切に application/x-www-form-urlencoded でエンコードされ、= と & による連結がふつーに行われる
下手に String#map が動作するもんだからエラーにならんのよね、文字列書いても
送信すべき処置済み巨大文字列が既に手元にあって、再エンコードとか何もして欲しくないという場合は、
適切な Content-Type を指定した上でふつうに post しれ
req.body = 'aaa=bbb&ccc=ddd'
req.content_type = 'application/x-www-form-urlencoded'
0632デフォルトの名無しさん
2011/01/19(水) 21:07:11JVN#30414126: Ruby Version Manager におけるエスケープシーケンスインジェクションの脆弱性
http://jvn.jp/jp/JVN30414126/
0633デフォルトの名無しさん
2011/01/20(木) 05:05:22まず、
a=[[aa],[x]],[[bb],[y]],[[aa],[z]],[[cc],[y]]
この配列があって、更にそれぞれの要素に対して
a[0]=[[ee],[y]],[[ff],[y]],[[ee],[x]],[[gg],[x]]
a[2]=[[hh],[y]],[[ii],[y]],[[hh],[x]],[[jj],[x]]
となる配列が有るのですが、
このとき " aa " にだけ着目して("x"にだけ着目するパターンもあります)
a[0]とa[2]の要素を抽出し、このうちのどれか1つの要素(例えば[[jj],[x]])
を選んで"ans"に代入するプログラムを作りたいのですが、良い方法は無いでしょうか?
ans = array[rand(a[0].size)]
ans = array[rand(a[[aa],[x]].size)]
では片方しか出せないし、
ans = array[rand(a[[aa],[.+]].size)]
とか出来たらうれしいのですが。
よろしくお願いします。
0634デフォルトの名無しさん
2011/01/20(木) 06:55:230635デフォルトの名無しさん
2011/01/20(木) 07:04:260636デフォルトの名無しさん
2011/01/20(木) 07:49:03というか要素が一つの配列を作るのはなぜ?
変数名だかメソッド名だか知らんが全部が全部抽象化されてるからまるで意味が伝わらん
0637デフォルトの名無しさん
2011/01/20(木) 07:50:480638デフォルトの名無しさん
2011/01/20(木) 08:10:14a[0] = [aa]
a[2] = [bb]
とその下のa[0]・a[2]の関係がわからなくなった時点で読むのをやめた。
0639デフォルトの名無しさん
2011/01/20(木) 08:30:450640デフォルトの名無しさん
2011/01/20(木) 12:40:09そういう言語じゃねぇから!
ちゃんとクラス分けしたほうがいい。
後は連想配列が使えないか考えろ。
それ以上はレスの内容だけだと何とも言えない。どんなデータが合ってそこから最終的に何を出したいのか書いてくれないと。
0641デフォルトの名無しさん
2011/01/20(木) 14:26:060642デフォルトの名無しさん
2011/01/20(木) 14:28:360643デフォルトの名無しさん
2011/01/20(木) 15:11:480644633
2011/01/20(木) 16:19:48aはハッシュで、値とキーが2重配列と配列になっています。
マルコフモデルの会話BOTを作りたいのですが、
詳しい説明文作っていたら一つ思い付いたので、
明日試してきます。
0645デフォルトの名無しさん
2011/01/20(木) 16:22:450646デフォルトの名無しさん
2011/01/20(木) 16:40:28面白そう
読んだことないけど「恋するプログラム―Rubyでつくる人工無脳」で
紹介されてるような事をやりたいのかな
0647デフォルトの名無しさん
2011/01/20(木) 18:03:46御意、自然言語能力も足りないよね
0648デフォルトの名無しさん
2011/01/21(金) 01:32:23メールの送信元に「本庄」を指定して送信すると文字化けするが、これを本庄で送りたい。
fromはメールアドレスだけではなく、"本庄 <[email protected]>"といった感じで差出人名を指定。
また、名前に「刈」を指定すると、from自体が消えてしまう。
環境
ruby 1.8.7
rails 2.3.8
プラグインは
ActionmailerJa
actionmailer_sender_patch
jpmobile
mbmail
という布陣
fromに本庄を指定して送信すると、こんな感じのメールが送られて、文字化けする。
From: =?iso-2022-jp?B?GyRCSz4xGyhC?= <[email protected]>
To: [email protected]
Subject: =?iso-2022-jp?B?GyRCTDVCahsoQg==?=
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary=mimepart_4d3862eeda92e_6904..fdba898d62b4
Message-Id: <20110120162934.DF71D2CB41@smxxxxxxxxxxxxxxx>
刈という文字が入っていると、そもそもfrom自体が消えてしまう。
0649デフォルトの名無しさん
2011/01/21(金) 02:17:56Rubyに合った作り方学べるしいいと思うよ。
マルコフ連鎖するだけならそんなに難しくないし
0650デフォルトの名無しさん
2011/01/21(金) 12:44:28おれのことだけどな
それにそのライブラリがRubyに合った作り方をしてる保証はないだろ
0651デフォルトの名無しさん
2011/01/21(金) 13:15:570652デフォルトの名無しさん
2011/01/21(金) 13:51:45替えという点でもいくらでもきくね。
だから「ヒューマンスキル」みたいな言葉を必要以上に叫んだりするんだろうけど。
0653デフォルトの名無しさん
2011/01/21(金) 14:47:33よいコードを借りてくる
0654デフォルトの名無しさん
2011/01/21(金) 15:16:152. よいコードを借りてくる→偉大なプログラマ
1は成り立つが、2は必ずしも成り立たつわけではない
勘違いするな
0655デフォルトの名無しさん
2011/01/21(金) 15:26:320656デフォルトの名無しさん
2011/01/21(金) 15:27:460657デフォルトの名無しさん
2011/01/21(金) 15:29:21誰がコーディングするの?
0658デフォルトの名無しさん
2011/01/21(金) 16:41:210659デフォルトの名無しさん
2011/01/21(金) 17:01:09「偉大なプログラマは利用できるものは利用する」ということだろ。
利用するものがなきゃお手上げなのは、なんちゃってプログラマ。
0660デフォルトの名無しさん
2011/01/21(金) 19:59:272chに張り付きすぎなんじゃね
ネタもないのに無理して書きこむこともないのに
0661デフォルトの名無しさん
2011/01/21(金) 20:34:35っていう人は信用ならない。
ライブラリ叩くだけで終わるような書き捨てコードしか書いた経験のない輩。
0662デフォルトの名無しさん
2011/01/21(金) 20:36:43自分でライブラリ書いたりした経験が無いんだろうね
0663デフォルトの名無しさん
2011/01/21(金) 21:39:060664デフォルトの名無しさん
2011/01/21(金) 23:14:07Ruby使えば一行で済むよって言ってる奴と変わらん
0665デフォルトの名無しさん
2011/01/22(土) 09:03:040666デフォルトの名無しさん
2011/01/22(土) 17:33:37そもそもRubyのような高級言語を使うなよ
Cとかアセンブラ使え
いや言語から作れよ
つーかOSから作れ
0667デフォルトの名無しさん
2011/01/22(土) 17:38:000668デフォルトの名無しさん
2011/01/22(土) 18:54:550669デフォルトの名無しさん
2011/01/22(土) 19:05:18> Head First Railsを購入した。Railsのインストール方法については記述なし、Rails2.1-2.3に対応しているそうだ。内容はぼちぼち読むことに。
0670デフォルトの名無しさん
2011/01/22(土) 19:28:05昔、B-TRONのフリープロジェクトみたいなのあったけど
どうなったんだろ?
0671デフォルトの名無しさん
2011/01/23(日) 10:22:05グーグルの広告でもよくでてたじゃん?グーグルが1からつくったとかいうやつ
0672デフォルトの名無しさん
2011/01/23(日) 10:44:090673デフォルトの名無しさん
2011/01/23(日) 11:47:560674デフォルトの名無しさん
2011/01/23(日) 13:31:040675デフォルトの名無しさん
2011/01/23(日) 14:42:37序数の「0th」って未だに違和感あるな
0676デフォルトの名無しさん
2011/01/23(日) 15:43:330677デフォルトの名無しさん
2011/01/23(日) 17:08:09require 'cgi/session/pstore'
で、セッションを使いたいのだが
セッションファイルの保存されている場所とか、
セッションファイルの状態を確認するにはどうしたらいいのです?
0678デフォルトの名無しさん
2011/01/23(日) 17:14:300679デフォルトの名無しさん
2011/01/23(日) 17:47:410680デフォルトの名無しさん
2011/01/23(日) 19:44:01リファレンスならるりまで検索無料です
検索欄に CGI::Session::PStore いれて検索
Rubyリファレンスマニュアル全文検索 | るりまサーチ
http://rurema.clear-code.com/
↓
CGI::SessionかCGI::Session.newがあやしい
singleton method CGI::Session::PStore.new
http://rurema.clear-code.com/1.8.7/method/CGI=3a=3aSession=3a=3aPStore/s/new.html
↓
> [PARAM] option:
> ハッシュを指定します。
>
> 以下の文字列をキーとして指定することができます。
>
> tmpdir
>
> セッションデータを作成するディレクトリの名前を指定します。デフォルトは Dir.tmpdir です。
↓
実際に確認
ruby -rtmpdir -e "p Dir.tmpdir"
環境によって結果は変わるので略
あとはCGI::SessionかCGI::Session.newのtmpdirを再起動しても永続化するパスに変更すればいいんじゃないのか
0681デフォルトの名無しさん
2011/01/23(日) 19:44:44o CGI::Session::PStoreかCGI::Session::PStore.new
0682デフォルトの名無しさん
2011/01/23(日) 19:46:00x あとはCGI::SessionかCGI::Session.newのtmpdirを再起動しても永続化するパスに変更すればいいんじゃないのか
o あとはCGI::Session::PStore.newのtmpdirを再起動しても永続化するパスに変更すればいいんじゃないのか
0683デフォルトの名無しさん
2011/01/24(月) 18:24:47で作ったセッション変数sessをsess.deleteで消すと、/tmpからは
8fff8fcf432c382b
のようなファイルがちゃんと消えるのだが、
# apache restart
をかますと、
8fff8fcf432c382b
8fff8fcf432c382b.lock
のように復活してくるのだが、なぜだ?
ブラウザのクッキーは消えてるので、もちろん再利用はできない。
session_expiresで設定した期限を過ぎても残ってる。
0684デフォルトの名無しさん
2011/01/24(月) 18:28:17Session::PStore
でも同様にsess.deleteをした後に/tmpを見ると該当ファイルは消えるが、
アパッチを再起動すると、ファイルのパーミッションが
-rw-------8fff8fcf432c382b
だったものが
-rw-r--r--8fff8fcf432c382b
になって復活してる。.lockは生成されないようだ。謎だ。
0685デフォルトの名無しさん
2011/01/24(月) 18:41:57FileStoreではcloseでupdateを実行しているから、このときまた書かれて
るのかな。
0686デフォルトの名無しさん
2011/01/24(月) 19:26:26今、「たのしいRuby 第3版」で勉強しているんですが、本にのってるコードがエラーになってしまいます。
なにがだめなのかおねがいします。
ソース↓
require "net/http"
require "uri"
url = URI.parse("http://www.ruby-lan.org/ja/")
http = Net::HTTP.start(url.host, url.port)
doc = http.get(url.path)
puts doc
ここからエラーメッセージ↓
/usr/lib/ruby/1.8/net/http.rb:560:in `initialize': getaddrinfo: Name or service not known (SocketError)
from /usr/lib/ruby/1.8/net/http.rb:560:in `open'
from /usr/lib/ruby/1.8/net/http.rb:560:in `connect'
from /usr/lib/ruby/1.8/timeout.rb:53:in `timeout'
from /usr/lib/ruby/1.8/timeout.rb:101:in `timeout'
from /usr/lib/ruby/1.8/net/http.rb:560:in `connect'
from /usr/lib/ruby/1.8/net/http.rb:553:in `do_start'
from /usr/lib/ruby/1.8/net/http.rb:548:in `start'
from /usr/lib/ruby/1.8/net/http.rb:440:in `start'
from http_get.rb:6
よろしくお願いします。
0687デフォルトの名無しさん
2011/01/24(月) 19:27:420688デフォルトの名無しさん
2011/01/24(月) 19:30:44さんくす!
おいらの3日を1分で解決したあなたに脱帽です。
ありがとうございました!
0689デフォルトの名無しさん
2011/01/24(月) 19:45:350690デフォルトの名無しさん
2011/01/24(月) 20:02:520691デフォルトの名無しさん
2011/01/24(月) 20:04:160692デフォルトの名無しさん
2011/01/24(月) 20:12:070693デフォルトの名無しさん
2011/01/24(月) 20:22:50報告がない以上、例外メッセージのどこに手がかりがあるかも気付いて
いなかった可能性が高いが。
0694デフォルトの名無しさん
2011/01/24(月) 20:36:500695683
2011/01/24(月) 20:43:02# reboot
0696デフォルトの名無しさん
2011/01/24(月) 20:48:09>>694
おかしいな、俺の手元の「たのしいRuby 第3版」(第1刷)の149ページではURLはあってるんだが
0697デフォルトの名無しさん
2011/01/24(月) 20:52:10www.ruby-lan.orgもエイリアスにしておくべき。
0698デフォルトの名無しさん
2011/01/24(月) 21:16:230699デフォルトの名無しさん
2011/01/25(火) 07:21:040700デフォルトの名無しさん
2011/01/25(火) 13:26:140701デフォルトの名無しさん
2011/01/25(火) 13:47:240702デフォルトの名無しさん
2011/01/26(水) 13:10:03Ruby で HTTP リクエストの PUT と DELETE を実装したいのですが、
net/http でやろうとしたらうまくいかないうえに、
推奨されていません的な警告が出てるような気がします。
このようなことが起こる理由としてなにか考えられることはありますか?
また、みなさんはこのようなとき、どのようなやり方で実装なさるのでしょうか?
教えてください。
0703デフォルトの名無しさん
2011/01/26(水) 14:59:59何したら何が返ってきたか書いて。
405 Method Not Allowed が返ってきてるだけだったりしないよね?
0704デフォルトの名無しさん
2011/01/26(水) 15:08:00>>1くらい読んでくれよ。
> 質問には以下を書くこと。へたくそな質問は再提出を要求される。
> ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
> ・エラーメッセージ(自力で訳さずなるべくそのままで)
> ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
> ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
0705デフォルトの名無しさん
2011/01/26(水) 15:26:58お手数おかけして申し訳ないです…。
以後、このようなことがないようにします。
>>703
Net::HTTP::Put ってのを使って、他サーバに XML の文字列を渡しているのですが、
data = '<?xml version=〜' ってとこで
warning: Object#type is deprecated; use Object#class
と出ます。
わかる人からしたら「まんまじゃねーか」と言われるのであろうことは
察しがついたのですが、申しわけありません。よろしくお願いします。
0706デフォルトの名無しさん
2011/01/26(水) 16:34:51本当にそのエラーが出るのか?
肝心のNet::HTTP::Putをどう使ってるのかさっぱりわからんし。
0707デフォルトの名無しさん
2011/01/26(水) 17:09:20作りかけなので VERIFY_NONE になってたりはしますが、こんなかんじです。
GET と POST も似たようなかんじでやってて、そっちはうまくいってるのですが…。
Net::HTTP.version_1_2
req = Net::HTTP::Put.new(putUrl)
req.basic_auth(name, pass)
https = Net::HTTP.new(サーバー名, 443)
https.use_ssl = true
https.ca_file = 'c:/openssl/ssl/cert.pem'
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
https.verify_depth = 5
https.start{|http|
data = '<?xml version="1.0" encoding="UTF-8"?>〜'
req["content-type"] = "application/xml"
req["content-length"] = data.length.to_s
response = http.request(req, data)
$putRespXML = response.body
}
0708デフォルトの名無しさん
2011/01/26(水) 23:00:160709デフォルトの名無しさん
2011/01/26(水) 23:59:48ここまで聞いた限りでは原因不明
dataに代入してる文字列は、あくまでシングルクォート括りの文字列であって
「実際にはダブルクォート区切りの文字列で式展開(#{〜})してる」とか
そういうこともないんだよね?
だとすると、エラーの原因がさっぱりわからない
疑ってみるとすれば、警告の起こってる行が本当にそこなのかどうか、というぐらいか
0710デフォルトの名無しさん
2011/01/27(木) 00:04:34Railsアプリを作ってPUTリクエストを投げてみたけど普通に文句も言わず
更新できてるなぁ。(認証入れてないけど)
とりあえず怪しい箇所のアタリをつけて、1行ごとに
$stderr.puts '%s:%d' % [__FILE__,__LINE__]
を挟んで誰がウォーニングを出しているか見てみるくらいしか思いつかない。
Object#type が obsolete になったのはかなーり過去の話だが、
どっかのライブラリに残ってるんだろうかねぇ。
あるいはローカル変数のtypeがself.typeだと解釈されて…これはないか。
■ このスレッドは過去ログ倉庫に格納されています