Ruby 初心者スレッド Part 30
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/08/08(土) 08:21:23★注意★ Ruby 1.9.1 は初心者には時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
(理由:現時点では多くの有名ライブラリやアプリが 1.9.1 に未対応であるためです。)
なお 1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 で勉強すれば将来スムーズに 1.9 系に移行できるでしょう。
関連スレや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を読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0438436
2009/08/26(水) 19:24:51すいません。全角空白は私の不注意でした。
しかし、これを削っても同じエラーが出てしまいます。
ちなみに、xmpfilterを通さなければtest.rbはきちんと実行することが出来ます。
0439デフォルトの名無しさん
2009/08/26(水) 19:34:46もしかして cygwin か?
0440436
2009/08/26(水) 19:51:21いえ、cygwinではなくコマンドプロンプトです。
rcodetoolsが自動生成するファイルがどこにあるのか分からないのですが、
どこに作成するのか教えて頂けないでしょうか?
0441デフォルトの名無しさん
2009/08/26(水) 20:29:59gem contents GEM名
あとバージョンはruby -v結果のコピペで
それとたぶんOneClickInstallerだと思うんだけどそれも明記するとありがたい
0442デフォルトの名無しさん
2009/08/26(水) 21:03:14申し訳ありません。gem contents rcodetoolsとするとファイル構成は出てくるのですが
そこからどこに一時ファイルが作られるのか私には分かりませんでした。
rubyのバージョンは
ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-mswin32] です。
http://www.garbagecollect.jp/ruby/mswin32/ja/download/release.html
↑からダウンロードしてきました。
0443デフォルトの名無しさん
2009/08/26(水) 23:59:430444デフォルトの名無しさん
2009/08/27(木) 00:02:080445436
2009/08/27(木) 00:08:38ruby 1.8.7 , ruby1.9.1 とverを上げてxmpfilterを実行してみたところ無事に実行出来ました。
お騒がせして申し訳ありませんでした。
返信をして下さった方、どうもありがとうございました。
0446デフォルトの名無しさん
2009/08/27(木) 21:17:22ハッシュがベストですか?
list["a"] = true
if list["a"] then ...
で動くんですけどtrueってデータもペアで格納されるのがなんとなく無駄な飢餓
0447デフォルトの名無しさん
2009/08/27(木) 21:50:35Hash で問題がある場合にのみ他のめんどくさい手段を検討する
あと true はいつどこで呼んでもオブジェクト ID が 2 で固定なので無駄も何もねえよ
0448デフォルトの名無しさん
2009/08/28(金) 09:53:51標準添付のSet(集合)なんてHashで実装されてるし。
0449デフォルトの名無しさん
2009/08/28(金) 11:52:17if point > 0
result['WIN'] += 1
elsif point < 0
result['LOSE]' += 1
else
result['DRAW'] += 1
end
こっち↓
win_or_lose = point > 0 ? 'WIN' \
: point < 0 ? 'LOSE' \
: 'DRAW'
result[win_or_lose] += 1
どちらがいいと思いますか?
0450デフォルトの名無しさん
2009/08/28(金) 11:54:52前者。
0451デフォルトの名無しさん
2009/08/28(金) 12:10:04�d
0452デフォルトの名無しさん
2009/08/28(金) 12:17:21result = if flag then true else false end
どうしても一行で書きたい時にこれよりはマシって程度
0453デフォルトの名無しさん
2009/08/28(金) 12:35:54case
when point > 0 then result['WIN'] += 1
when point == 0 then result['DRAW'] += 1
when point < 0 then result['LOSE'] += 1
end
0454デフォルトの名無しさん
2009/08/28(金) 12:42:10そして、どんどん書き換えろ
条件演算子の中で整頓改行したり ( ) でネストしたり ; つけたりするのは禁止
条件演算子の状態に固執するのはただのアホ
条件演算子の 9 割は最終的には長い条件分岐に書き換えられてしまう
だったらプロトタイプは早くてうまくてやっすいのにしたほうがいいってもんだ
0455デフォルトの名無しさん
2009/08/28(金) 12:48:240456デフォルトの名無しさん
2009/08/28(金) 12:49:23可読性もそのほうが高いと思わない?
0457デフォルトの名無しさん
2009/08/28(金) 12:52:28条件演算子のほうがわかりやすそうな気がするときの
2つがあるような気がする
極めて単純な見栄えの問題
他の言語では三項演算子だけが値を返すから入れ替えが効かないけど
Rubyは動作自体は結局一緒だから
(パースの受け方は違うかもしれない)
0458デフォルトの名無しさん
2009/08/28(金) 12:55:17case文も使えるんだ。
なるほど。
0459デフォルトの名無しさん
2009/08/28(金) 13:03:540460デフォルトの名無しさん
2009/08/28(金) 13:08:40else raise の余地がないのがやや弱いがわかりやすかろう
0461デフォルトの名無しさん
2009/08/28(金) 13:13:410462デフォルトの名無しさん
2009/08/28(金) 13:16:27when point > 0 then 'WIN'
when point == 0 then 'DRAW'
when point < 0 then 'LOSE'
end ] += 1
だろJK
0463デフォルトの名無しさん
2009/08/28(金) 13:17:36その空case自体に疑問
条件に重複する部分がないのを暗示してる、みたいなニュアンス?
0464デフォルトの名無しさん
2009/08/28(金) 15:30:390465デフォルトの名無しさん
2009/08/28(金) 16:12:320466デフォルトの名無しさん
2009/08/28(金) 16:24:100467466
2009/08/28(金) 16:25:200468デフォルトの名無しさん
2009/08/28(金) 16:25:420469デフォルトの名無しさん
2009/08/28(金) 16:30:160470デフォルトの名無しさん
2009/08/28(金) 18:07:31簡単な方法はないでしょうか?
[1,2,3,4,5,6,3]であれば3が知りたいです
重複は1種類が1回だけしていると仮定してかまいません
0471デフォルトの名無しさん
2009/08/28(金) 18:30:43重複は全部消去するのが基本
「配列の構成要素を uniq で決定し、それと同じ値を持つ最初の場所を探してその要素を配列から消す」
という手順でやるとこうなる
arr = [1, 2, 3, 4, 5, 6, 3]
arr.uniq.each{|e| arr.delete_at(arr.index(e))}
p arr
[3]
これだと arr が失われてしまうので他の人の案待つか事前に複製でもしとけ
0472デフォルトの名無しさん
2009/08/28(金) 19:17:38a2 = a1.uniq
i = 0
a1.find_all {|v|
if v.eql? a2[i]
i += 1
false
else
true
end
}
またselectかと言われそうだけどこのスレでは三回目
0473デフォルトの名無しさん
2009/08/28(金) 19:28:17p aryfind {|a| h[a] || !(h[a] = true)}
0474デフォルトの名無しさん
2009/08/28(金) 19:30:140475デフォルトの名無しさん
2009/08/28(金) 21:12:35arr = [1,2,3,4,5,6,3]
hash = {}
hash.default = 0
arr.each {|x| hash[x] += 1 }
p hash.keys.select {|k| hash[k] > 1 }
0476470
2009/08/28(金) 21:24:24参考にさせてもらいます!
0477デフォルトの名無しさん
2009/08/29(土) 07:31:27RUBYOPT=-rubygems
だかを環境変数に設定するというような余計な(親切な)ことをしてくれるわけですが、
これって、
require "rubygems"
する必要がなくなるわけですよね?
他の環境などで同じようなこと(RUBYOPT=-rubygems) している人っていますか?
やっぱり、require "rubygems"をソース内に書いた方がいいものですかね?
0478デフォルトの名無しさん
2009/08/29(土) 09:13:38俺が RUBYOPT を嫌いな理由の一つ
わざわざ可搬性下げて何をしたいのか
0479デフォルトの名無しさん
2009/08/29(土) 09:45:310480デフォルトの名無しさん
2009/08/29(土) 09:51:04RUBYOPT=-rubygems に関してはもう無用の長物だな
0481デフォルトの名無しさん
2009/08/29(土) 10:20:24ary.group_by{|e|e}.to_a.select{|e|e[1].size>1}.map(&:first)
とか
ary.sort.each_cons(2).select{|x,y|x==y}.map(&:first).uniq
とか
0482デフォルトの名無しさん
2009/08/29(土) 10:55:34selectするならto_aはいらん
と思ったが、multiple values for a block parameter (2 for 1)とい
う警告が何度も出るのか
ary.group_by{|e|e}.select{|e,l|l.size>1}.map(&:first)
0483デフォルトの名無しさん
2009/08/29(土) 10:56:49> 俺が RUBYOPT を嫌いな理由の一つ
「江戸の仇を長崎で討つ」ってやつか
0484デフォルトの名無しさん
2009/08/29(土) 11:15:110485sage
2009/08/30(日) 00:10:43データベースの内容を比較したいです。
どちらのデータベースもSQLiteのファイルです。
ActiveRecordというのを使うのが簡単そうなのですが、
可能なのでしょうか?
というのは調べてみるとActiveRecordでは、
データベースへの接続(ActiveRecord::Base.establish_connection)とか、
レコードの検索を、クラスメソッドで操作しています。
となると、上記のように同一クラスから
別々のデータベースへ接続するインスタンスを作成して、
インスタンス経由で操作するという使い方はできないように見えます。
0486デフォルトの名無しさん
2009/08/30(日) 01:08:00SQLite3::Database.new(file)で両方のデータベース開いて
テーブル毎にレコードの比較した方が楽な気がする
0487sage
2009/08/30(日) 01:38:36回答ありがとうございます。
SQL書かずにActiveRecordでできたら楽勝!
と思っていたのでなんとかならないかなーと。
0488名無しさん@そうだ選挙に行こう
2009/08/30(日) 07:42:50質問です。
今やってるプロジェクトが、以前、rubyのMVCフレームワークによって書かれました。
その開発した方が、/public_html/.htaccessで何らかの設定をしました。
今回、/public_html/manage/配下にphpのMVCフレームワークを使用して開発することに
なったのですが、/manage/.htaccessで設定しても親ディレクトリの.htaccessの影響を受けて
/manage/配下のファイルにアクセスしても、404になってしまいます。
/public_html/.htaccessの内容も分からず、なるだけ触りたくないのですが、
サブディレクトリの.htaccessで、親ディレクトリの.htaccessの影響を全く受けないようにすることは可能でしょうか。
お忙しいところ、すみません。
よろしくお願いします。
0489名無しさん@そうだ選挙に行こう
2009/08/30(日) 08:28:56.htaccess の書式勉強しろ
0490名無しさん@そうだ選挙に行こう
2009/08/30(日) 08:36:08> .htaccessの内容も分からず、なるだけ触りたくないのですが、
それを晒さないと。というより、せめて自分で読んでみないと。
0491488
2009/08/30(日) 10:00:38サーバーを見てみたのですが、
/public_html/には、.htaccessがありませんでした。
ただ、404の設定がしてあるので、どこかでそのような設定がなされているものと思います。
/public_html/配下には、rubyのRailsで開発してあるようです。
/public_html/manage/には、今回のPHP開発に必要なcakephpのMVCフレームワークが設定してあります。
その.htaccessは、
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>
となっています。
例えば、http://domain.com/manage/css/layout.cssにアクセスした場合は、
/public_html/manage/app/webroot/css/layout.cssのファイルが読み込まれる設定にしてあります。
外のサーバー(public_htmlにrubyで設計したファイルが置いてないもの)で試したらちゃんと読み込まれていたので、/public_html/manage/配下は正しく設定してあるはずです。
しかし、http://domain.com/manage/css/layout.cssにアクセスすると、404が返ってきます。
/public_html/には、rubyのMVCフレームワークで設計されたファイルがたくさんあり、
私はrubyを知らないので、何かしらの設定がなっているはずなのですが、どこでどうなっているのか分かりません。
たぶん、http://domain.com/manage/css/layout.cssにアクセスしても、
cakephpのシステムは読み込まれず、元々のRuby Railsのシステムで処理されていると思います。
本来、http://domain.com/manage/ooo/xxx/ にアクセスすると処理されるのですが、
これも404に行きます。
でも、http://domain.com/manage/index.php/ooo/xxx/ とアクセスすると処理されます。
もし何かご存知でしたら、教えて頂けないでしょうか。
よろしくお願い致します。
0492名無しさん@そうだ選挙に行こう
2009/08/30(日) 11:01:020493名無しさん@そうだ選挙に行こう
2009/08/30(日) 11:05:08<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule manage\/$ manage/app/webroot/ [L]
RewriteRule manage\/(.*) manage/app/webroot/$1 [L]
</IfModule>
0494名無しさん@そうだ選挙に行こう
2009/08/30(日) 11:12:580495名無しさん@そうだ選挙に行こう
2009/08/30(日) 12:43:36自分で正しいことをしていると思っているイタイタイプ
周りでは陰で嫌われているのに気づかないタイプ
0496名無しさん@そうだ選挙に行こう
2009/08/30(日) 12:45:400497sage
2009/08/30(日) 12:54:11ActiveRecordで、ひとつのモデルで
複数のデータベースに接続するという
使い方ができるか、あきらめきれずにさらにググったところ、
magic_multi_connectionsというgemが見つかりました。
Magic-MultiConnections:
http://magicmodels.rubyforge.org/magic_multi_connections/
とはいえ、ActiveRecordが当初想定している使い方
ではないということがはっきりしました。
他にちょうどいいO/Rマッパってないですか?
0498名無しさん@そうだ選挙に行こう
2009/08/30(日) 12:59:580499名無しさん@そうだ選挙に行こう
2009/08/30(日) 13:02:53自作のORe真っ裸ならあるけど
0500名無しさん@そうだ選挙に行こう
2009/08/30(日) 15:59:01すげーなー。
そのhtaccessファイルの中身の何がおかしいのかもわからない・調べられないのに、
Webアプリケーションを開発しようなんて。
恐ろしくて使いたくないぜ。
0501名無しさん@そうだ選挙に行こう
2009/08/30(日) 16:29:07テーブルの差異を調べるプログラム位、数十分で書けるだろ
二度と使わないかもしれないORMの調査に無駄な時間を費すの?
dbs = [file1,file2].map {|fn| SQLite3::Database.new(fn) }
dbs[0].tables.each do |table| # tablesなんてメソッドがあるとして
results = dbs.map {|db| db.execute("select * from #{table}") }
# results を比較
:
end
0502名無しさん@そうだ選挙に行こう
2009/08/30(日) 16:37:20書けないの間違いだろうな。。
0503名無しさん@そうだ選挙に行こう
2009/08/30(日) 16:42:220504名無しさん@そうだ選挙に行こう
2009/08/30(日) 16:43:44ユーザーがSQLを直接発行するだなんて悪手中の悪手じゃないか
適当にうまくやるよボタンを押すだけで内部でSQLが組み立てられて
結果のデータのみがユーザーに返ってくるというのが正しいありかただろう
0505名無しさん@そうだ選挙に行こう
2009/08/30(日) 16:48:36そうなんだよねえ
結局SQLを書かせなければならないことになって深く絶望したわ
なんとかならんもんかね
0506名無しさん@そうだ選挙に行こう
2009/08/30(日) 16:52:28> テーブル毎にレコードの比較した方が楽な気がする
答えでてるじゃん。
終了
0507名無しさん@そうだ選挙に行こう
2009/08/30(日) 17:05:530508デフォルトの名無しさん
2009/08/30(日) 21:07:16>>501を信じてそのままドンってやって、ガツンと応答不能になり得たりしそうなこの不安感。
初心者スレでこれはありなんだろうか。
>>501の論旨からいうならもうちょっと、丁寧に逐次的に例を出す文脈ではなかろうか。
0510sage
2009/08/30(日) 22:44:10ActiveRecordではなくてSequelというのが
良さそうというのがわかりました。
Sequel:
http://sequel.rubyforge.org/
こんな感じで書けます。
DBLeft = Sequel.sqlite("./left.sqlite")
left_table_foo = DBLeft[:table_foo]
DBRight = Sequel.sqlite("./right.sqlite")
right_table_foo = DBRight[:table_foo]
left_table_foo.each do |left_rec|
# right_tableのレコードと比較する
end
なんかしつこく質問してしまったみたいですみません。
でも回答してくれて助かりました。では。
0511デフォルトの名無しさん
2009/08/31(月) 01:39:52文字列を16進ダンプしたものの中に、2バイト文字が含まれているか
どうかを判定するにはどうしたら良いでしょうか?
変換コードは下記の通りです。
arr0 = dataStr.unpack("H*")[0].scan(/[0-9a-f]{2}/)
arr1= arr0.to_s + "\n"
対象のdataStrが Rec の場合 arr1 が 52,65,63 になりますが、
Rク では 52,83,4e です。この場合、真ん中の16進数の83を元に
判定するのでしょうか?
0512デフォルトの名無しさん
2009/08/31(月) 01:47:10文字コード決めないと「2バイト文字」を定義できなくないか?
0513デフォルトの名無しさん
2009/08/31(月) 02:29:10ク で 83,4e です
0514デフォルトの名無しさん
2009/08/31(月) 02:36:12arr0.each do |c|
if c>128 do
zenkaku=true
end
end
0515デフォルトの名無しさん
2009/08/31(月) 03:04:38NKF.guess
0516デフォルトの名無しさん
2009/08/31(月) 03:32:360517デフォルトの名無しさん
2009/08/31(月) 05:32:460518デフォルトの名無しさん
2009/08/31(月) 06:20:02いい加減、政権交代の様に入れ替えるべき。
0519デフォルトの名無しさん
2009/08/31(月) 06:29:170520デフォルトの名無しさん
2009/08/31(月) 08:48:25ヒント:安定した候補者がいない
0521デフォルトの名無しさん
2009/08/31(月) 09:06:31WEBrickのcgiライブラリのことなんだけど。
0522デフォルトの名無しさん
2009/08/31(月) 09:14:120523デフォルトの名無しさん
2009/08/31(月) 09:19:35作るということとメンテナンスを引き受けるということとは全く違う
スレ違いだが
0524デフォルトの名無しさん
2009/08/31(月) 09:22:23>作るだけなら立候補は何人もいるしいくつも作品があるんだよ
いくつもあるとは知らなかった。
ぜひ紹介してくれ。
0525デフォルトの名無しさん
2009/08/31(月) 09:24:01バージョン0.3まで行かずに放置されるのばっかじゃん
0526デフォルトの名無しさん
2009/08/31(月) 09:43:34CGIで動かすと落ちるバグがあり、しかもなかなか修正リリースが出ないというオチ
0527デフォルトの名無しさん
2009/08/31(月) 09:48:250528デフォルトの名無しさん
2009/08/31(月) 10:01:210529デフォルトの名無しさん
2009/08/31(月) 10:11:30書きっぱで後は知らん、というような人はどの世界でもノーサンキューだ
0530デフォルトの名無しさん
2009/08/31(月) 12:13:020531デフォルトの名無しさん
2009/08/31(月) 12:16:14みんな忙しい。
みんな忙しい。
0533デフォルトの名無しさん
2009/08/31(月) 13:20:400534デフォルトの名無しさん
2009/08/31(月) 13:52:180535デフォルトの名無しさん
2009/08/31(月) 14:36:410536デフォルトの名無しさん
2009/08/31(月) 14:46:39CGI.rb ができましたー
新しいスクリプトが欲しいんじゃなくて、スクリプトを継続的にメンテナンスできる人材が欲しいのよ
新機能をガンガン盛り込む人材ってのはとりあえずはコア近辺には要らないんだ
0537デフォルトの名無しさん
2009/08/31(月) 15:00:06■ このスレッドは過去ログ倉庫に格納されています