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を読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0048デフォルトの名無しさん
2010/12/13(月) 11:40:22と思ったがそういう話ではなかった
マス目という意味でのマトリックスなのね
newになにもないならnewの引数にするのが普通だと思う
0050デフォルトの名無しさん
2010/12/13(月) 11:52:42MyMatrixとやらの中でデータがどう扱われているかによるだろ、そりゃ
>>48の一行目で結論にならなかったことからして配列の配列が入ってるデータではないんだろうけど
ふつうは「この配列は何のデータか」を考えて、
データ配列ごと引数で指定する方法なのならそれの名前をもつ writer なメソッドにすると思う
mydata.nanika = [16桁]
みたいな
0051デフォルトの名無しさん
2010/12/13(月) 11:57:43005247
2010/12/13(月) 12:37:23MyMatrixのように「何とか」が自明でないときは、どうすればいいかという話です。
例えで出しただけなのでrowとかcolumnとか言われても困る。
0053デフォルトの名無しさん
2010/12/13(月) 12:57:26MyMatrix という名称や配列代入という行為は一般的過ぎて何も想起されないと思っている人 >>47
という差のような気もする
0054デフォルトの名無しさん
2010/12/13(月) 13:00:15たぶんインスタンス変数名をどうすればいいですかという質問になりそうな気もするな
既存のデータ系のクラスと同じような動作にしておいて、同じ名前のメソッド使うというのはどう
0055デフォルトの名無しさん
2010/12/13(月) 13:04:22005647
2010/12/13(月) 15:25:47ありがとうございました。
0057デフォルトの名無しさん
2010/12/13(月) 17:11:08捨て台詞吐いて逃亡か。最悪だな。
0058デフォルトの名無しさん
2010/12/13(月) 18:31:010059デフォルトの名無しさん
2010/12/13(月) 21:14:33ActiveRecordのgem名は「activerecord」だから、ちがうんじゃない?
それからそのサイトの説明だと
> If you're adding functionality to another gem use a dash.
とあるから、既存のgemに機能をつけたす場合にダッシュ(ハイフン)を使えとあるから、そう説明しようよ。
0060デフォルトの名無しさん
2010/12/13(月) 21:43:530061デフォルトの名無しさん
2010/12/13(月) 21:47:54とくにないです
自分の使い慣れた統計システムのRubyバインディングとか探してください
0062デフォルトの名無しさん
2010/12/13(月) 22:24:59なるほど、バインディングですか
これから始めるため使い慣れた統計システムは特に無いので
R使ってやってみます。ありがとう
0063デフォルトの名無しさん
2010/12/14(火) 00:26:20d = Derived.new
d.hello
で基底クラスの方のhelloを呼びたい。
0064デフォルトの名無しさん
2010/12/14(火) 01:00:42class Derived
alias base_hello hello
def hello; end
end
Derived.new.base_hello
あと、Derivedなんていう用語を使うのはC++くらいじゃね?
0065デフォルトの名無しさん
2010/12/14(火) 01:03:24Base.instance_method(:hello).bind(d)[]
とか?
006663
2010/12/14(火) 01:31:01d->Base:: hello ();
d->Derived:: hello ();
どうするか考えます。
0067デフォルトの名無しさん
2010/12/14(火) 10:46:01puts "Foo = " + foo
が、 TypeError: can't convert Foo into String になるのはなぜ。
Stringに変換するために必要なメソッドは?
0068デフォルトの名無しさん
2010/12/14(火) 10:54:36to_sを明示的に呼ぶ
Rubyは原則として暗黙の型変換のような振る舞いはしない
puts "Foo = " + foo.to_s
0069デフォルトの名無しさん
2010/12/14(火) 10:59:45puts "Foo = " + foo
は
"Foo = " + foo
したものの返り値を puts メソッドに渡してる
"Foo = " + foo
の時点でエラーになるはず
一応、 String#+(other) は other#to_str を呼んでいるので
Foo#to_str を Foo#to_s のエイリアスにでもしておけばいいんだが、
より現実的には>>68だと思う
0070デフォルトの名無しさん
2010/12/14(火) 11:04:25>>67は Foo クラスに to_s と to_str の 2つのメソッドを要求してるのだな
irb> class Foo; def to_s; "FOO!"; end; end
irb> puts "Foo.new is #{Foo.new}"
Foo.new is FOO!
007167
2010/12/14(火) 11:17:32理解しました。to_sとto_strの2つのメソッドを定義しないといけなかったのですね。
似たような名前の関数を2つ提供するのは微妙だからto_sだけにしておきます。
0072デフォルトの名無しさん
2010/12/14(火) 11:42:35to_s は「このオブジェクトを文字列で表現するとこうなります」の意味
不用意に to_str を定義してはならない
to_str の部分でエラーが出ない = このオブジェクトは String 互換
という風に判断されるから
obj.kind_of?(String) && obj.to_s のようなもんだと思ってくれ
0073デフォルトの名無しさん
2010/12/14(火) 12:34:040074デフォルトの名無しさん
2010/12/14(火) 13:02:57あのへんはいろいろ揉めたらしいね
to_str 自体が「既存の標準ライブラリに迎合する動作」としての使われ方をしてたから
0075デフォルトの名無しさん
2010/12/14(火) 15:37:02Ajax アプリケーションを作成中で、サーバーサイドで Ruby 1.8.7 を使用しています。
クライアントサイドから Get で 〜〜.rb に引数つきでアクセスしようとしています。
(たとえば「〜〜.rb?No=〜&Name=〜」のようなかんじで)
しかし、Ruby 側でその引数(No=〜&Name=〜)を取得する方法も、
クライアントサイドに値を返す方法(クライアントで .responseText で取得するやつ)もわかりません。
どうやったらよろしいでしょうか?
馬鹿馬鹿しい質問なのだとは思いますが、教えてください。お願いします。
0076デフォルトの名無しさん
2010/12/14(火) 16:15:14そもそも現状の Ajax アプリケーションは Web アプリケーションの最終進化形態のひとつだ
(まあ、いろんな意味で)
サーバサイドとクライアントサイドと通信手段の基礎となる知識をすべて吸収した上で応用するという形になる
CGI 作ったことがないなら、たぶん無理だと思う
素直に Ajax 連携に定評のある他の言語使ったほうがいいんじゃないかな
0077デフォルトの名無しさん
2010/12/14(火) 16:42:310078デフォルトの名無しさん
2010/12/14(火) 16:54:00そうですか…そんなにハードルの高いことだったのですね…。
かなり軽く考えていたかも知れません…。
しかし、心からの親切心でそう言っていただいていると思うので
大変恐縮なのですが、私にも事情があり、どうしても諦めるわけにはいかないのです。
ほんとうにありがとうございます。
>>77
そうなんですね。
しかし今から全く未経験の Rails に手を出す余裕は無いのです。
どうもありがとうございます。
0079デフォルトの名無しさん
2010/12/14(火) 17:14:350080デフォルトの名無しさん
2010/12/14(火) 17:34:50誤解させてすみません。
どうしても Ruby を使わなければならないのです。
自分もできたら他言語でやりたいっす…。
0081デフォルトの名無しさん
2010/12/14(火) 17:42:540082デフォルトの名無しさん
2010/12/14(火) 17:44:59迷える子羊のために三択を用意した
1. Ruby標準添付のCGIモジュールについて調べる
でもってローカルにApacheでも立ててクエリ文字列とPOSTの内容と
環境変数をダンプできるCGIを作って動作するところまで頑張る
そこまでいければなんとかなる
2. 諦める
さあ選んでくれ
0083デフォルトの名無しさん
2010/12/14(火) 18:03:400084デフォルトの名無しさん
2010/12/14(火) 18:10:400085子羊
2010/12/14(火) 19:01:23「1.」の一択でお願いします。早速学習を始めます。
いちおう Apache はローカルにインストールしてますが、Apache に関する知識は皆無です。
環境が Windows でブラウザで
「http://コンピュータ名/htdocsフォルダに置いてあるファイル名」という
アドレスにアクセスすることでそのサイトにアクセスできる状態にしています。
それで参考にお聞きしておきたいのですが、
「クエリ文字列とPOSTの内容と〜〜動作するところまで頑張る」という部分は
CGI モジュールについて学習すれば理解・実現できる内容ですか?
それとも Apache に関する書籍なども購入して学習する必要がありますか?
ほんとうにありがとうございます、救われた思いです。
とりあえず CGI モジュールについて学習します。一生懸命頑張ります。
0086デフォルトの名無しさん
2010/12/14(火) 19:33:190087デフォルトの名無しさん
2010/12/14(火) 19:53:41ていうかプログラミングに対する知識と経験が絶望的に足りないと思われ
「ふつう」の知識と経験があるなら>>75の場所では詰まらないと思うの
Ajax とは、みたいな説明や適当な Ajax の解説やサンプルを読んである程度理解したなら
Ajax として目新しいところとそうでないところの判断くらいはついて欲しい
つまりはこの人「何も作ったことがない」んだと思うよ
運転経験ない人に長距離夜行トラックでの運送なんて任せられるかw
素直に単純な CGI とかの日曜の自家用車ドライブからはじめろw
0088デフォルトの名無しさん
2010/12/14(火) 19:55:26CGIの勉強をする(Rubyで)
HTTPの勉強をする
JavaScriptの勉強をする
Ajaxの勉強をする(Rubyで)
こんな順番?
0089デフォルトの名無しさん
2010/12/14(火) 20:01:38CGI 無関係な Ruby の勉強をする
Apache の基本的な使い方を学ぶ
CGI の勉強をする(Ruby で)
HTTP の勉強をする
JavaScript の勉強をする
Ajax の勉強をする(Ruby で)
こうだろ
…なんかめんどくさいな、どうせ表示するデータの取り扱いでも挫折するんだろうし、最初から Rails にするか
なんか、動作が遅いですとか言われそうな気もするが
でも、Rails が本番サーバで動作するかどうかのチェックも要るな
安価なレンタルサーバだとまともに動かなかったりするし
0090デフォルトの名無しさん
2010/12/14(火) 20:45:550091デフォルトの名無しさん
2010/12/14(火) 20:45:570092デフォルトの名無しさん
2010/12/14(火) 20:50:42HTMLに関しては何がわかってないの?この人
0093デフォルトの名無しさん
2010/12/14(火) 20:53:32単に要素を列記しただけだと思うぞ
>>90
そもそも「カンタンにWebアプリを作成!」というのが幻想というか妄想なので…
情報商材みたいなもん
0094デフォルトの名無しさん
2010/12/14(火) 21:07:51* クエリ文字列の取得
* XMLHttpRequest#responseTextの取得
これだけなのになんでここまで盛り上がれるのん
後者はRuby関係ないからスルーとして
前者はcgi.params, cgi.query_string, ENV['QUERY_STRING']
その他フレームワークの類似機能を使用する、で終了じゃない
0095デフォルトの名無しさん
2010/12/14(火) 21:13:340096デフォルトの名無しさん
2010/12/14(火) 22:10:21ほかの人のアドバイスと被る部分もあるが
まずは、Rubyで簡単なCGIスクリプトを作るといい
内容はHelloWorldレベル(簡単なメッセージ表示くらい)で十分だ
作り方は検索したらいくらでも出てくるし、>>94のアドバイスも参考になる
ブラウザ上からそのCGIスクリプトにアクセスして、画面表示ができたら
AjaxでそのCGIスクリプトにアクセスして
CGIの出力を持ってくる(JavaScript側で出力を受け取る)ところまでやる
ここまでできれば、後は応用でなんとかなると思う
0097デフォルトの名無しさん
2010/12/14(火) 23:47:25あとrails勉強した方が結果的には最短距離かと
0098デフォルトの名無しさん
2010/12/15(水) 00:40:41最近(っても古いか)の騒ぎ立てでRails使わないのにRubyやってんの?ってのが嫌。
0099デフォルトの名無しさん
2010/12/15(水) 01:08:38CGI部分もあまり出来が良くないって聞くよね
素直にPHPでやったほうがいいのかな
0100デフォルトの名無しさん
2010/12/15(水) 01:11:32と話をややこしくしてみる
0101デフォルトの名無しさん
2010/12/15(水) 01:42:53Rubyで書けます
これがメリットだと感じないならRubyでWebアプリケーション作るのやめたほうがよい
いやかなりマジで
0102デフォルトの名無しさん
2010/12/15(水) 01:44:35にはSinatraに一票入れたいところだが、次に>>75は
レンタルサーバーでSinatraが動きません
(もしくはめちゃめちゃ遅いです、使い物になりません)
と言ってくるので、cgi.rbでよいと思う。
0104デフォルトの名無しさん
2010/12/15(水) 02:25:23rbreadline.rbを使っているRuby使っている人かもしれない。
readlineがライセンスの問題があるためRubyでreadlineを実装しようとしているもののようだけど、
Windowsでは日本語が入力できなかったり、行を編集しようとすると遅かったりどうにかすると落ちたりするなこれは
pikでRuby 1.9を入れるとrbreadlineが標準添付されたRubyが入るのだが、これだと実質irbが使えないな
0105デフォルトの名無しさん
2010/12/15(水) 03:00:26irb上で上下カーソルの入力履歴がでなくなりました。
これないとめっちゃ不便なんだけど、どしたらよいの?
0106デフォルトの名無しさん
2010/12/15(水) 03:09:470107デフォルトの名無しさん
2010/12/15(水) 06:17:24あなたが神か?
0108デフォルトの名無しさん
2010/12/15(水) 08:20:47ありがとうございます。
これは大変良さげなのですが、Windows用バイナリは何処に?
cygwin入れてコンパイルするしかないかな。
0109デフォルトの名無しさん
2010/12/15(水) 08:23:530110デフォルトの名無しさん
2010/12/15(水) 09:53:19ttp://www.cymric.jp/maxima/maxima-winxp.html
のサイトでこっそりと
cygwin-rlwrap-0.30.zip
っていうファイルがあるみたい
0111デフォルトの名無しさん
2010/12/15(水) 10:25:33デプロイだけならHerokuは簡単
ただし動作環境にクセがある。
動作環境が満たされるなら遊びのちょっとしたものなら無料の範囲で作れるし、
そうでないなら金払えるなら、サーバー管理の手間かからないしいいんじゃね?
Google App Engineもデプロイだけは簡単だけど死ぬ
VPSでの動作ならRails並に簡単、いつもの慣れた環境をつくってデプロイできる。
え?・・・このレスに有益な情報がないって?
0112デフォルトの名無しさん
2010/12/15(水) 10:52:13みなさん、たくさんの親切なアドバイス、ほんとうにありがとうございます。
みなさまからいただいたアドバイスを参考に学習・開発を進めてまいります。
>>87
おおむね、おっしゃるとおりでございます。
Web アプリケーションの作成は今回が初めてでわからないことだらけです。
>>96 も仰ってあったとおりまずは素直に単純なところから始めようと思います。
ご親切にありがとうございます。
>>88 >>89
参考になります。>>93 のおっしゃるとおり、
その中からわかってない部分を適宜拾い集めて学習させていただきます。
ありがとうございます。
>>94
ありがとうございます。
お陰さまで何とかなりそうな気がしてきました。
参考にして調べてみます。
>>96
まず単純なことから試してみます。
基本ですよね、視野が狭くなって忘れていました。
親切なアドバイスが身にしみました、ありがとうございます。
0113デフォルトの名無しさん
2010/12/15(水) 12:58:490114デフォルトの名無しさん
2010/12/15(水) 14:04:34Rubyならどうやって書くの?
<WebBrowser Source="http:..."/>
0115デフォルトの名無しさん
2010/12/15(水) 14:11:50重複
ttp://hibari.2ch.net/test/read.cgi/tech/1287623173/882
0116デフォルトの名無しさん
2010/12/15(水) 14:13:24回答がないし、スレ落ちてるから質問しているんだが
それがだめな理由でもあるのか?
0117デフォルトの名無しさん
2010/12/15(水) 14:20:13あきらめれ
0118デフォルトの名無しさん
2010/12/15(水) 14:23:52回路図示して、Rubyで炊飯器のタイマー起動するにはどうすればいいですかみたいな話に近い
0119デフォルトの名無しさん
2010/12/15(水) 14:25:140120デフォルトの名無しさん
2010/12/15(水) 14:26:57WEBに強いんでしょ?
0121デフォルトの名無しさん
2010/12/15(水) 14:48:430122デフォルトの名無しさん
2010/12/15(水) 14:50:11嫌われるといいと思います。
0123デフォルトの名無しさん
2010/12/15(水) 14:57:58世田谷区民会館ぐらいなら埋まりそうなカードだな
0124デフォルトの名無しさん
2010/12/15(水) 15:19:59勝手にWEBに強いことにしないで欲しいな。
0125デフォルトの名無しさん
2010/12/15(水) 15:26:28<Button/>
たったこの1行でボタンが配置できますが
Rubyだとどうするんですか?
0126デフォルトの名無しさん
2010/12/15(水) 15:30:38InternetExplorerが公式にRubyをサポートしてからまたおいで
あなたはクライアントとサーバサイドの区別がついていない
0127デフォルトの名無しさん
2010/12/15(水) 15:32:220128デフォルトの名無しさん
2010/12/15(水) 15:33:31見てて微笑ましかったのだが
0129デフォルトの名無しさん
2010/12/15(水) 15:33:59再現してみるからLinuxで動くコードちょうだい
0130デフォルトの名無しさん
2010/12/15(水) 16:04:08どうにかしてRubyを馬鹿にして悦に浸って苦しい日常生活から現実逃避したい低レベルなプログラマさん
kill myselfをお勧めします
0131デフォルトの名無しさん
2010/12/15(水) 16:17:370132デフォルトの名無しさん
2010/12/15(水) 16:22:480133デフォルトの名無しさん
2010/12/15(水) 16:25:360134デフォルトの名無しさん
2010/12/15(水) 16:53:00print "<Button/>"
でいいんじゃないの?
0135デフォルトの名無しさん
2010/12/15(水) 17:51:21>>125はおそらくHTMLじゃないぞ
0136デフォルトの名無しさん
2010/12/15(水) 18:03:48静的にコンパイルするとb = Button.newみたいなコードが得られる
動的にロードするのならIronRubyでも出きるだろう
0137デフォルトの名無しさん
2010/12/15(水) 18:15:33kill myself
0138デフォルトの名無しさん
2010/12/15(水) 18:24:41Array.ForEach(files,f=>Console.WriteLine(f));
0139デフォルトの名無しさん
2010/12/15(水) 18:27:01できてないって言って追っ払っちゃおうか
面倒だし
0140デフォルトの名無しさん
2010/12/15(水) 18:28:100141デフォルトの名無しさん
2010/12/15(水) 18:29:11できません
あなたの勝ちです
では他の人次の質問どうぞ
0142デフォルトの名無しさん
2010/12/15(水) 18:55:17その値に force_encoding して返してくれるぞ、という話を前スレでしようと思ってたらスレが終わってた
irb1.9> p open("http://www.2ch.net/").read.encoding
#<Encoding:ASCII-8BIT>
irb1.9> p open("http://www.2ch.net/", 'r:Windows-31J').read.encoding
#<Encoding:Windows-31J>
0143デフォルトの名無しさん
2010/12/15(水) 19:04:190144デフォルトの名無しさん
2010/12/15(水) 19:19:140145デフォルトの名無しさん
2010/12/15(水) 19:28:540146デフォルトの名無しさん
2010/12/15(水) 19:45:19> それは Net::HTTP の仕事ではないというかそんな根底部分で余計なことすんなということらしい
> open-uri ならヘッダの Content-Type を読んで force_encoding で設定してくれるが、
>
> irb1.9> require 'open-uri'
> irb1.9> p open("http://dailynews.yahoo.co.jp/").read.encoding
> #<Encoding:EUC-JP>
> irb1.9> p open("http://sankei.jp.msn.com/").read.encoding
> #<Encoding:Shift_JIS>
> irb1.9> p RUBY_VERSION
> "1.9.2"
>
> レスポンスヘッダの Content-Type ほど信用ならないものもないのでまあ掛け捨て保険程度
0147デフォルトの名無しさん
2010/12/15(水) 20:00:13例えば2次元画像の特定の領域(x,y,width,height)を指定するのに
こう書くのは問題ですか。他にもっといい書き方があれば教えてください。
image.pixels[x,y,width,height] = pixels
■ このスレッドは過去ログ倉庫に格納されています