1 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 17:31:07 ] プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 ★注意★ 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つをすること。ここで回答を待つよりそのほうが早い。 ・モジュール名やエラーメッセージでググる ・マニュアルで引っかかったクラスの記述を探す www.ruby-lang.org/ja/man/ ・FAQを一応読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ 質問には以下を書くこと。へたくそな質問は再提出を要求される。 ・詳しい内容(「動きません」「うまくできません」では回答しようがない) ・エラーメッセージ(自力で訳さずなるべくそのままで) ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる)) ・最終的にやりたいこと(もっとよい方法がある場合が多いので) 回答してくれた人には「ありがとう」のひとことをいってあげて。 ■回答する人へ 相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。 それができないならこないこと(だって初心者スレだもん)。 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
330 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 16:45:12 ] RUBY_VERSION 否定派は何も根拠がないのが笑える
331 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 16:54:42 ] やはり組み込みと添付は Std モジュールに全部入れておくべきだった
332 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 17:41:18 ] >>330 1.9の機能を模倣する外部ライブラリができるかもしれないし Ruby実装だって今やMRI一択じゃない それと機能の有無で分岐してくれた方が後で読んだときに意図がつかみやすい といっても俺自身否定派でもないから好きにすればいいと思うよ できれば1.9スレや本スレとか然るべき場所でやってくれればなお良い
333 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 17:47:57 ] 涙拭けよ
334 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 18:12:41 ] 配列の中にハッシュ作りたいんですけど不可能ですか?
335 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 18:16:30 ] irb> foo = [{"a"=>0, "b"=>1}] => [{"a"=>0, "b"=>1}]
336 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 18:17:59 ] >>334 入れ子にすることは普通にできる [{'key1' => 'val1'}] 以下のようなことはできそうだができない ['key1' => 'val1', 'key2' => 'val2'] 以下のような使い方は一見無駄で遅いっぽい上に実際無駄だが、 Ruby ではけっこう普通にやってるのでどんどん使え arr = [{'key' => 'val1'}, {'key' => 'val2'}, {'key' => 'val3'}] arr.each do |h| p h['key'] end
337 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 18:27:42 ] >>336 それって全部同じ 'key' でも何か意味があるの? keyは色々なものでってこと?
338 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 18:54:14 ] 結局、Encoding関連で今まで出た案をまとめると 1. RUBY_VERSIONで分岐 2. defined?(::Encoding) 3. str.respond_to?(:force_encoding) あたりが現実的な解か
339 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 21:03:11 ] >>336 みたいなのは {'title' => 'タイトル', 'author' =>'著者', 'date' => '日付'} という固定フォーマットのハッシュを、何らかの理由で順番を保持したまま 深く考えずに適当に処理したいというときに時々見る
340 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 21:30:24 ] data = { 1 => {'title' => 'タイトル1', 'author' =>'著者1', 'date' => '日付1'}, 2 => {'title' => 'タイトル2', 'author' =>'著者2', 'date' => '日付2'}, 3 => {'title' => 'タイトル3', 'author' =>'著者3', 'date' => '日付3'}} 0.upto(data.keys.size).each do |i| p data[i]['title'] end イエス超解決 data を作るときにキーのためにわざわざ整数をカウントしないといけないのが不便
341 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 21:40:37 ] dataは配列でいいんじゃないか?
342 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 21:42:22 ] railsのソースコード読むとハッシュの上手な使い方が理解できるよネー
343 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 21:48:45 ] >>341 敢えて全部ハッシュにするという例なんじゃないのか
344 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 22:25:41 ] >>339 つまり1.9なら不要の発想ってことでおk?
345 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 22:32:52 ] 1.9.1 (以降)でしか使わないスクリプトであるなら、ハッシュ入り配列は不要だな 普通にハッシュを each で回せばいい 個人的には Hash の順番保持は 1.9.3 くらいで唐突に無くなりそうな機能だと思ってて これに依存したスクリプトはあまり作りたくないなあと思ってるんだが
346 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 22:39:09 ] え!Hashの順番保持されるようになったのか
347 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 22:46:43 ] えー 1.9.1 でめちゃくちゃ話題になったじゃん $ irb1.9 irb> h = {2 => 'two', 3 => 'three', 1 => 'one'} irb> h.each_pair{|k, v| puts "#{k} => #{v}"} 2 => two 3 => three 1 => one $ irb irb> h = {2 => 'two', 3 => 'three', 1 => 'one'} irb> h.each_pair{|k, v| puts "#{k} => #{v}"} 1 => one 2 => two 3 => three
348 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 22:51:52 ] どちらかというとネガティブな方向で話題になった気がする 順番記憶したら Hash じゃねえとか Rubyオワタ\(^o^)/ とか
349 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 22:57:26 ] 確かにHashはあるキーに対応する値を保持するだけのものな気がするな 順番保持したいなら配列にしろ・・・・・ とこんな話もすでにさんざんしたわけか
350 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 23:13:16 ] Java風に言うなら単なるLinkedHashMapでしょ 単なるハッシュとして使う分にはそれでもいいし、 追加コストは定数だからRuby的には許容範囲だとの判断があったのだろう
351 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 00:16:02 ] 標準でOrderedHashクラス作って、Hashの仕様が変更されてもOrderedHashだったら大丈夫って風にしないと まったく意味ないんじゃないの?
352 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 00:16:16 ] ruby をスクリプトエンジンとして使用するフリーソフトを作ったんですが、 Artisticライセンスな windows 版 ruby ってありますか?
353 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 00:38:34 ] yugui氏が担当している間は大丈夫そうなイメージがある、なんとなく 最悪OrderedHash < Hashになったとしても 互換性が必要な場面でHash = OrderedHashとかしときゃいいんじゃねw 冗談はともかく、現時点であらかじめこうしてから利用するとか class OrderedHash < Hash; end 順列が必要な連想配列だというのが明確になるし obsoになったときの対応も比較的容易なはず まあ俺はArrayクラスがArrayとQueueとStackに七変化するようなもんだと思うから抵抗はないし 消える心配も今のところしてない
354 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 00:42:41 ] Hashでも順番持ってた方が普通に便利なんだが 別に深刻な害があるわけでなし、何が不満なんだがさっぱりわからん
355 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 00:49:15 ] >>354 ・性能落ちるかもしれない不安 ・今後消えるかもしれない不安 だと思う
356 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 00:52:52 ] 言語処理系としてのruby1.9独自仕様なのか、 それともプログラミング言語Ruby1.9の仕様と解釈していいのか混乱があるのでは もし前者だとしたら、処理系依存には抵抗がある ハチドリ本いわく >Ruby 1.9 では、ハッシュの要素は、実装によっては挿入された順序で反復処理される。 う〜ん・・・・・
357 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 01:19:10 ] >>355 性能というのが速度のことであれば逆に速くなった。 というか、だからこそ入った。
358 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 01:22:27 ] 確かに列挙は早そうだな
359 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 02:14:22 ] 実装依存じゃOrderedHashのつもりで使うのは御法度か
360 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 02:16:02 ] rubyの開発グループは本当に人材酷いな。Railsに全部任せちゃえよ
361 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 02:36:06 ] いやいやRailsの人たちに任せたら新機能と非互換がTINYごとにどんどん増えるよ。
362 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 04:38:27 ] >>360 お前Rails使ってないか、あるいは使い始めたの今月だろ
363 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 05:31:14 ] 来月には後悔するのか、流動性速すぎだろRails
364 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 07:24:58 ] Railsは、こっち推奨になりました→やっぱやめました→ごめん、やっぱこれ とかバージョンアップのたびにあったりして笑うw いや、使っている方としてはどっちだよ!とか思うけど
365 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 11:11:13 ] 前田さんたちに頑張ってもらって、言語仕様で明文化してもらうまでは Hashのキー順序については昔ながらの意識でいることにする。
366 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 11:28:47 ] JISの話なら、1.8ベースだから順序の保証は入らんと思うぞ
367 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 11:37:01 ] >>338 >>328 のmethod_defined?も。 >>329 ある機能自体がある定数やメソッドで提供されてるんだから、最も自然だろう。
368 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 19:22:53 ] defined? や responsed_to? はダックタイピング用の機能であって モジュール存在判定に使うもんではないと思う
369 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 19:48:38 ] むしろモジュールの存在を問わず メッセージに応答できるか否かだけを問うべきでは?
370 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 19:54:42 ] 実際に必要なのは処理結果であって返事そのものではないというのが理想と現実の深くて暗い谷間
371 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 20:01:47 ] >>368 ダックタイピングならそんな判定はしない
372 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 20:04:48 ] ていうかさあ、responed_to? 使ってる奴だって その名前のメソッドを持っていることを期待してるのではなく 「Ruby 1.9 の」 force_encoding であることを期待しているんだろ じゃあそれの条件をきちんと書けよ
373 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 20:08:05 ] >>372 期待していない不正なメソッドが動作した場合はたいてい例外が発生してプログラムが止まる
374 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 20:26:09 ] if str.respond_to?(:force_encoding) && defined?(::Encoding::ASCII_8BIT) && str.respond_to?(:encode) && str.respond_to?(:encoding) && defined?(::Encoding::UTF_8) && str.class.new.encode(::Encoding::UTF_8).encoding == ::Encoding::UTF_8 && (_ = str.class.new.encode(::Encoding::UTF_8).force_encoding(::Encoding::ASCII_8BIT); _.encoding == ::Encoding::ASCII_8BIT) then str.force_encoding(::Encoding::ASCII_8BIT) end
375 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 20:35:44 ] プログラムが止まったあと>>373 がどう改修するのかにちょっと興味がある どうせ基本雑談なので次の質問の方気後れせずにどうぞ
376 名前:デフォルトの名無しさん [2009/09/27(日) 00:35:12 ] blog.livedoor.jp/dankogai/archives/51183588.html 上のページに掲載されているjavascriptを使って、ブラウザ上で文字列にRaw Deflateにかけた上で Base64 encodeしたデータをサーバへ送信し、 サーバ側ではrubyでBase 64 decode、標準のzlibライブラリを用いてRaw Inflateしたいのですが、 「Zlib::DataError: incorrect header check」が発生しうまく圧縮データを伸張できません。 サーバ側のrubyは以下のようなコードです。 #!/usr/bin/ruby require 'zlib' data = "(javascriptで生成した圧縮データ)" p Zlib::Inflate.inflate(data.unpack('m')[0]) ちなみに、perlだと同じように標準的なライブラリを使って以下のようなコードで圧縮データを伸張できましたので、このjavascriptのコードが特殊なことをやっているというわけではないのかな?と思います。 #!/usr/bin/perl use IO::Uncompress::RawInflate ':all'; use MIME::Base64; $data = "(javascriptで生成した圧縮データ)"; $decoded = decode_base64($data); rawinflate(\$decoded => \$inflated); print $inflated; このJavascriptライブラリ特有の問題なのか、rubyの問題なのか切り分けができておらず微妙かと思ったのですが、 perlで動いたので一度ruby界隈で聞いてみようと思い書き込みしています。 何か分かりましたらご教授いただけないでしょうか。
377 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 00:49:00 ] unpackが怪しい気がするから、Base64デコードしたデータのハッシュを、Perlのやつと比べてみたらどうかな? あと、詳しくないんだけど、そもそもRawDeflateと普通のDeflateって同じものじゃないとか?
378 名前:デフォルトの名無しさん [2009/09/27(日) 01:20:21 ] >>377 まさかと思って調べたところ、RawDeflateと普通のDeflateが違うものでした。 考えが及びませんで、ありがとうございました。 RawDeflateにchecksumなんかが頭についたものがDeflateのようで、以下のようにしたら動きました。 p Zlib::Inflate.new(-Zlib::MAX_WBITS).inflate(data.unpack('m')[0])
379 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 03:45:29 ] 配列の中にハッシュ入れたんですけど a = [0, {1 >= 5}, 3] これの配列データがFixnumかハッシュかどうかで処理を分けたいんですが is_a?(Fixnum)で分岐させようとしたらエラーが出ました classで調べたらエラーが出ます どうすればいいんでしょうか?
380 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 03:56:08 ] {1 >= 5} でエラーという落ちじゃないだろうな ちょっとコードをはってみろ
381 名前:379 mailto:sage [2009/09/27(日) 04:07:10 ] class hogehoge def mastery_open_flag MASTERY_ARRAY::HASH_DATA[1].each{|i| open_flag = true if MASTERY_ARRAY::HASH_DATA[1][i].is_a?(Fixnum) MASTERY_ARRAY::HASH_DATA[1][i].each{|index, level| unless @actor.mastery_level_data[index] >= level open_flag = false end } if open_flag @actor.mastery_open_data[i] = true end end } end end エラーはTypeErrorで cannot convert Hash into Integerと出ます
382 名前:379 mailto:sage [2009/09/27(日) 04:08:30 ] module MASTERY_ARRAY HASH_DATA[1] = [ 0, 0, {0 => 5, 1 => 3}, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ] end モジュールの配列です。
383 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 04:19:58 ] どの行でそんなエラー出てるんだい
384 名前:379 mailto:sage [2009/09/27(日) 04:28:48 ] if MASTERY_ARRAY::HASH_DATA[1][i].is_a?(Fixnum) ここです 配列のインデックス2のハッシュ読もうとしたら出ます
385 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 04:35:08 ] mastery_open_flag の MASTERY_ARRAY::HASH_DATA[1].each{|i| ... } の i に hash が きてるからだろう。 i = {0 => 5, 1 => 3} if MASTERY_ARRAY::HASH_DATA[1][i].is_a?(Fixnum) 状態で配列のインデックスにハッシュをブチ込んで、 整数に変換できないよエラーになってる。eachの i にインデックスが入ると勘違いしてない?
386 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 04:38:30 ] www.ruby-lang.org/ja/man/html/Array.html の each と each_index をよく読むといい って、eachの例がeach_indexの結果と区別つきにくいね…1,2,3じゃない例つかえばいいのに
387 名前:379 mailto:sage [2009/09/27(日) 04:40:24 ] あーそういうことですか インデックス入らないと困るんですが 何かうまい書き方ありますか? とりあえず考えてみます あったらお願いします ありがとうございました
388 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 04:47:09 ] each {|要素| ... } each_index {|インデックス| ... } each_with_index {|要素, インデックス| ...}
389 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 04:49:28 ] 用件は「要素が整数であること」なんだろうか 「要素がハッシュであること」なんじゃなかろうか MASTERY_ARRAY::HASH_DATA[1].each{|e| open_flag = true if e.kind_of?(Hash) e.each_pair{|index, level| open_flag = false unless @actor.mastery_level_data[index] >= level } end @actor.mastery_open_data[e] = true if open_flag end
390 名前:379 mailto:sage [2009/09/27(日) 04:58:13 ] おーすごいさすがプログラム板 each_indexで動きましたありがとうございます 389さんが書いたとおり「要素がハッシュであること」が評価の大筋です kind_of?(Hash) これは知りませんでした なんとかいけそうですありがとうございました
391 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 05:02:31 ] >>389 @actor.mastery_open_data[e] = true の e は each_with_index の i だと思う 要はナントカデータは全部要素数 100の配列なんだろう マス目みたいに決まっててアクセス手段がインデックスしかないんだ MASTERY_ARRAY::HASH_DATA[1].each_with_index{|e, i| open_flag = true e.each_pair{|index, level| open_flag = false unless @actor.mastery_level_data[index] >= level } if e.kind_of?(Hash) @actor.mastery_open_data[i] = true if open_flag }
392 名前:デフォルトの名無しさん [2009/09/27(日) 13:24:58 ] Win32で一文字入力してすぐ制御を返すサンプルないですか?
393 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 13:44:36 ] Curses.getch は?
394 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 18:44:37 ] ありがとう。 Winにもcursesってあるのか。
395 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 18:53:34 ] >>394 普通に導入可能だよー
396 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:22:24 ] rubyでCGIの勉強しようとおもって lighttpdをインストールしました。 ところが、設定方法がわからず、htmlは表示出来るのですが cgiが動きません。涙目状態です。あちこちググりました・・・ 途方にくれています・・・
397 名前:デフォルトの名無しさん [2009/09/27(日) 21:25:08 ] mongrelをいれるといいよ
398 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:26:57 ] 力になっちゃあげたいけど、スレ違いかな・・・ WebProg板か、どっかにLighttpdのスレがあるから、そこで質問したらいいよ
399 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:28:09 ] SocketってライブラリがあるからそれでWebサーバ書くのがいいと思うな というか環境や参考にしたページをどこまで試してどこで詰まったとか そういうのも無しに答えられるわけないので
400 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:30:33 ] それが無いこと自体が答だろ つまり、サーバ立てる知識が無い
401 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:32:26 ] >>398 lighttpdのスレは先に見ました。最終書き込みが8月、その前が6月くらいと 人の気配が感じられませんでした・・・
402 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:36:43 ] どう転んでもWebサーバの挙動の知識は必要になるわけなんだし 普通にゼロから勉強したほうが早いんだけどね
403 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:36:52 ] Linuxなら各ディストリの初心者スレにいけば、誰かが教えてくれそう。
404 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:40:14 ] >>402 まったくだぬ 「WebサーバやHTTPはお着せとコピペで済ませて本題のRubyの学習をしよう」というのは CGI関連に限ってはありえん
405 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:44:58 ] >>404 翻訳しながら、lighttpdの本家のページ見てみます。 mongrelも検討してみます。 apacheの設定よりは、ずいぶん楽そうに見えたんですが。。
406 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:47:26 ] 中途半端にマイナーなサーバソフトウェアだと情報が全くないということはばしばしある めっちゃメジャーなのを小規模で使うのが結局マシだったりすることは意外と多い
407 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:50:40 ] 自分用WebサーバはApacheを接続数とか1人用に絞って使うのが一番だという結論になった
408 名前:デフォルトの名無しさん [2009/09/27(日) 21:50:52 ] >>396 はどう動かないか書いていないから誰も助けようがないよ。 cgiがどう動かないのさ。スクリプトを貼ったりしろよ。
409 名前:デフォルトの名無しさん [2009/09/27(日) 22:02:07 ] Apacheの方が情報多いのに。
410 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 22:03:40 ] >>408 /var/wwwがドキュメントルートディレクトリで、ここに1.html /usr/lib/cgi-binがcgiディレクトリに、1.cgi 1.htmlで、action=/usr/lib/cgi-bin/1.cgiと記述。 ブラウザで、localhost/1.htmlを表示。ボタンを押すと 404 not foundとなります。 lighttpd.confでのcgiディレクトリ指定が間違ってるんかなぁと・・
411 名前:デフォルトの名無しさん [2009/09/27(日) 22:13:48 ] ログをまずは見ようぜ。 1.cgiに実行権限がついているかとか1.htmlの読み込み権限とかもチェックしような
412 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 22:15:53 ] action=/usr/lib/cgi-bin/1.cgi っておかしいだろ… lighttpd とかにかかわらず /usr/lib とか公開するとは考えにくいから action=/cgi-bin/1.cgi とかなんじゃないのか この調子じゃ権限とかもだめそうだな
413 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 22:31:01 ] >>396 RubyでCGIの勉強をするなら、lighttpdから始めるのはオススメしない cgi.rbを使って、WEBrick上 or Apache上で動かしてみるとか Sinatra使うとかしたほうがいい
414 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 22:40:09 ] >>411 chmod 755はしてあります。 >>412 あ、cgi-binでいいんですね。フルパスにしちゃいました。 たしかに公開しないですもんね。
415 名前:デフォルトの名無しさん [2009/09/27(日) 22:52:59 ] ファイルの所有者も確認しような lighttpdを起動したユーザがownerだよな?
416 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 22:55:57 ] 式がnil, false, 0なら偽になるif文てないの?
417 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 23:06:09 ] >>415 ファイルオーナーが、「root」ですね lighttpdは、「www-data」が起動してます sudo cpでファイルを/usr/lib/cgi-binにコピーすると 所有者が、ルートになってしまいます。 ちょっと、apacheや他のを調べてみます。みなさん、スレ違いに付き合って くださって申し訳ありがとうございまsyた
418 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 23:18:45 ] >>416 !x || x== 0 '' や [] や {} も偽にしたいならActiveSupport入れてblank? と present? を使え。
419 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 23:23:03 ] >>418 それだとnil, false, 0で真になるんだけど。偽がほしいんですが無理なんですか?
420 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 23:29:26 ] x && x != 0 どんだけ応用力ないのかな…
421 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 23:33:29 ] いかにも落とし穴がありそうだと漏れのアンテナが反応しております
422 名前:418 mailto:sage [2009/09/27(日) 23:35:35 ] すまん逆転させるのわすれてた。てへ。
423 名前:デフォルトの名無しさん [2009/09/27(日) 23:49:22 ] >>417 ファイルの権限を777にして実行してみな。 それで実行できれば権限関係の設定がおかしかったってことだ linuxの基礎を勉強私的な。
424 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 10:48:55 ] Digest::MD5.digest の値を hexdigest に変換する計算式を教えてください。 convert(Digest::MD5.digest(value)) == Digest::MD5.hexdigest(value) となるようなconvert()です。 あるいはヒントでもいいのでお願いします。
425 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 10:59:18 ] そのへんはさすがにマニュアルにも書いてあるだろ > 与えられた文字列に対するハッシュ値を、ASCIIコードを使って 16進数の列を示す文字列にエンコードして返す。 ということで irb> p Digest::MD5.digest('12345') "\202|\313\016\352\212plL4\241h\221\370N{" irb> p Digest::MD5.hexdigest('12345') "827ccb0eea8a706c4c34a16891f84e7b" irb> p Digest::MD5.digest('12345').unpack("H*")[0] "827ccb0eea8a706c4c34a16891f84e7b"
426 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 11:12:25 ] >>425 ありがとうございます。 1バイトずつ16進数に変換するということなので、こう理解しました。 irb> Digest::MD5.hexdigest('foo') => "acbd18db4cc2f85cedef654fccc4a4d8" irb> Digest::MD5.digest('foo') => "¥254¥275¥030¥333L¥302¥370¥¥¥355¥357eO¥314¥304¥244¥330" irb> Digest::MD5.digest('foo').unpack('C*') # 1バイトずつに分解 => [172, 189, 24, 219, 76, 194, 248, 92, 237, 239, 101, 79, 204, 196, 164, 216] irb> Digest::MD5.digest('foo').unpack('C*').collect{|c| '%x' % c } # 16進数に変換 => ["ac", "bd", "18", "db", "4c", "c2", "f8", "5c", "ed", "ef", "65", "4f", "cc", "c4", "a4", "d8"] irb> Digest::MD5.digest('foo').unpack('C*').collect{|c| '%x' % c }.join == Digest::MD5.hexdigest('foo') => true なるほどー。 どうもでした。
427 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 20:26:36 ] Dir.foreach('hoge'){|filename| filename.match(/(aaa)(bbb)/} print $1 } この状況で、$1や$2の情報を配列に入れるにはどうすればいいですか? 具体的にはこの後、$1の内容について一つ一つ処理をしていきたいんです。
428 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 20:39:11 ] ary = [] Dir.foreach('hoge'){|filename| filename.match(/(aaa)(bbb)/} ary << [$1, $2] # もしくは ary << $1 << $2 } p ary
429 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 20:47:13 ] filename.scan(/(aaa)(bbb)/)
430 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 20:51:17 ] >>428 「<<」ってこういうところで使うんですね。 勉強になりました。ありがとうございました!