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を読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
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:060538デフォルトの名無しさん
2009/08/31(月) 15:13:23>新しいスクリプトが欲しいんじゃなくて、スクリプトを継続的にメンテナンスできる人材が欲しいのよ
それどうやって判断するの?人材がいたとして、そいつがおまえのいう条件を満たしているかどうかって、だれがどうやって判断するのさ?
だいたい、CGI.rbなんてtDiaryでもHikiでもつかってるんだろうが。それだけユーザ数が多いのに担当できるだけの人材がいない/いなかったのかよ?
ほんとうに人材が欲しいなら、公式にアナウンスしろよ。このライブラリのメンテな求めてます、条件はこうこうです、と公式サイトに載せればいいだろ。
ろくに求人活動もせずに人がいないだの条件はどうのこうの、言い訳がましいわ。
0539デフォルトの名無しさん
2009/08/31(月) 15:16:54他でやってね
0540デフォルトの名無しさん
2009/08/31(月) 15:28:35じゃあお前やれよ。
0541デフォルトの名無しさん
2009/08/31(月) 17:45:00>>514 c>128 -> c>=128
0542デフォルトの名無しさん
2009/08/31(月) 17:47:00oreoreCGIなら作ったけど
0543デフォルトの名無しさん
2009/08/31(月) 17:58:11あんまりよくないと思う
Rackの修正リリースが出て、標準添付になれば一番いい
0544デフォルトの名無しさん
2009/09/01(火) 17:55:47・・・やってくれるメソッドなかったっけ?
0545デフォルトの名無しさん
2009/09/01(火) 18:06:46Array#transposeのこと?
0546デフォルトの名無しさん
2009/09/01(火) 18:16:27p [[1,2],
[3,4],
[5,6]].transpose
# => [[1, 3, 5], [2, 4, 6]]
これが下のようになってくれたら期待通りなのです。
# => [[1, 3, 5], [1, 3, 6], [1, 4, 5], [1, 4, 6], [2, 3, 5], [2, 3, 6], [2, 4, 5], [2, 4, 6]]
0547デフォルトの名無しさん
2009/09/01(火) 18:27:24p data[0].product(*data[1..-1])
0548デフォルトの名無しさん
2009/09/01(火) 18:38:41小手先だけだと詰まるぞ
0549デフォルトの名無しさん
2009/09/01(火) 18:58:34そうかproductか!1.8.7から入ったんですね。それっぽいキーワードで
ググってもなかなか見つからなかった。どうもです。
0550デフォルトの名無しさん
2009/09/01(火) 19:11:53行列的操作関連はeach使ったほうがややこしくなりそうな気がする
転置行列は転置行列でしかないわけだし
0551デフォルトの名無しさん
2009/09/01(火) 19:40:28それにしてもdata.productって書けそうで書けないのかw
>>548
eachで実装した方法を提示するならともかく
初心者に書かせるレベルにならないと思うぞ
0552デフォルトの名無しさん
2009/09/02(水) 01:25:47>eachで実装した方法を提示するならともかく
>初心者に書かせるレベルにならないと思うぞ
+1
0553デフォルトの名無しさん
2009/09/02(水) 02:34:28raise if data.size < 2
data.inject([[]]) do |product, items|
product.inject([]) do |r, elem|
r += items.map {|i| elem + [i] }
end
end
end
0554488
2009/09/03(木) 05:40:09自分なりに色々調べた結果、Passenger/mod_railsを使っているため、
/manage/の.htaccessが、それによって上書きされているようです。
/public_html/フォルダはRuby railsで開発されており、
今回、/public_html/manage/にPHPで開発することになりました。
私は、Rubyを全く知らない&.htaccess初心者なので、このような事態に陥っています。
RailsAllowModRewrite On
を使えば、なおるようなのですが、
/manage/.htaccessでそのように設定しても、/manage/.htaccessに設定してあることが
有効になりません。
どなたか知っていたら教えて頂けないでしょうか。
よろしくお願いします。
0555デフォルトの名無しさん
2009/09/03(木) 06:29:57板違い
http://pc11.2ch.net/test/read.cgi/php/1241100447/
0556デフォルトの名無しさん
2009/09/03(木) 06:37:340557デフォルトの名無しさん
2009/09/03(木) 07:42:35おまえがRailsを分かってないだけだろ
0558デフォルトの名無しさん
2009/09/03(木) 11:00:02自己紹介乙
0559newbie
2009/09/03(木) 12:46:12count = Hash.new(0)
...カウントにkeyとvalueを設定する処理(省略
count.sort{|a,b|
a[1] <=> b[2]
}.each{|key,value|
print "#{key}: #{value}¥n"
}
とあったとして、「<=>」という演算子が左右のオブジェクトを比較して、
<は-1
=は0
>は1
と返してくるのはわかったのだが、どうやってソート処理されているの謎。
内部のsortメソッドでイテレータが並び替えのアルゴリズムで処理してるのでしょうか。
詳しい解説求む。
ちなみに今まで並び替えのアルゴリズムには目をつぶって生きてきたので、
何種類かあってそれぞれに特徴と効率があるというぐらいしか、あまりよくわかってない。
0560デフォルトの名無しさん
2009/09/03(木) 12:56:51「今持ってるものが挿入先と比べて大きいか小さいか同じか」を調べてるだけ
手に持ってるものが大きかったら“上”に置いて、小さかったら“下”に置いて、同じだったら“横”に置く
普通にリアルに手元で何かを大きさ順に手動で並べ替えるのと同じ処理をしている
実際はもちろん事前グループ分けとか処理順とかにテクニックがあって単純ではないが、
並べ替えの行為そのものに着目した場合、理屈自体は「大きいか小さいか同じか」と一緒
0561デフォルトの名無しさん
2009/09/03(木) 13:07:55人間に天秤を与えれば重さの大小になるし、ものさしを与えれば長さの大小になるようなもの
その判断基準を元に実際に並べ替えるのはsortメソッドの内部で行われる
sortメソッドは少量のデータを手軽にソートしたいような
ソート手段にこだわる必要のない場合に向いている(大抵は事足りる)
もし速度的に不足するような場合はアルゴリズムを選ぶ必要があるし
それを自分で実装するかライブラリを使う必要がある
0563newbie
2009/09/03(木) 13:12:40なるほど、判断基準を渡しているってことか。
イテレータの章で判断基準を渡すってのが書いてあった。
「メソッドがどういう比較処理をおこなうかを渡して欲しい場合がある」と。
その処理がブロックで囲まれた a <=> b ってことか。
謎とけたー。気がする。
0564デフォルトの名無しさん
2009/09/03(木) 13:13:43sort{|a, b| a <=> b }
の
{|a, b| a <=> b } ってなんだよ! いきなり b とか出てくんじゃねえよ!
というとこですな
0565デフォルトの名無しさん
2009/09/03(木) 13:17:54"a:5, b:3"
"a:3, b:1"
"a:4, b:3"
"a:2, b:3"
"a:4, b:5"
"a:1, b:2"
[1, 2, 3, 4, 5]
0566デフォルトの名無しさん
2009/09/03(木) 13:45:19なんでもいいなら、-1,nil,1 でよかったんじゃないのか
0567デフォルトの名無しさん
2009/09/03(木) 13:46:07作っておいて、その関数(のポインタ)を引数として渡すような造りになっている。
Strategyパターンですかな。
0568デフォルトの名無しさん
2009/09/03(木) 13:50:31人間配列.sort{|a,b| a.身長 <=> b.身長}だとか、体重に変えてみるとか、逆順にソートしてみるとか。
0569デフォルトの名無しさん
2009/09/03(木) 14:18:53(a.身長 <=> b.身長).nonzero? or (a.体重 <=> b.体重)
0570デフォルトの名無しさん
2009/09/03(木) 14:43:53無効値は偽であってほしいけど、正常値を数値や文字列で返す関数などは
0や""も正常値として扱うケースが多い。なので、これらが偽だと、戻り値をそのままブール式につかえない
Perlなんかだと、0も""も偽だから、これらも正常値として返す関数の戻り値をチェックするときは、
die "エラ〜" unless defined get_string()
とかやって、""のケースを除外しなくちゃならない。|| とか && も有効活用できないし
0571デフォルトの名無しさん
2009/09/03(木) 14:51:51//演算子じゃダメなの?
0572デフォルトの名無しさん
2009/09/03(木) 14:57:24それって身長が不一致のときにtrueが返らない?
・・・返値はselfかnilなのか、よくできてるなぁ
0573デフォルトの名無しさん
2009/09/03(木) 15:00:24■ このスレッドは過去ログ倉庫に格納されています