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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
63 名前:9 mailto:sage [2009/09/17(木) 21:00:39 ] >>62 わかりました 質問があります hello.rbというhello!と表示するプログラムを作ったのですが実行するときに いちいち保存先までcd \とか入力していかないとエラーが出るので面倒です・・・ どこからでも○○○.rbと入力して実行するようにはできないのでしょうか? 今まで検索していたのですがnotepad++というエディタがありました 画面の色とか文字の色とか適当にいじって変えてます gvimやxyzyyはまだまだ先のような気がします かなり上級者向けのようです でもやはり形だけでもいいのでgvimやxyzyyでやりたいですねえ・・・
64 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 21:03:13 ] >>63 > どこからでも○○○.rbと入力して実行するようにはできないのでしょうか? Ruby関係ないのでコマンドプロンプトの使い方勉強しろ ディレクトリ移動関連の最低限必要なことは10分もあれば終わる
65 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 21:16:20 ] 昔話は嫌われるのだが、 UNIXからMSに移植されたツールは、とても多い。 sed,grep,awkとかね。 今でも、とても役に立ちますね。 MS-DOSの始めの頃に、**とか言う名前のフルスクリーンエディターが発売されました。 MS-DOSの環境であれば、同じようにちゃんと動く、ってのが売りです。 (このあたりが?の人は考古学者になったつもりで調査すべし) 結局、これは商業的な成功はなかったみたいですね。 INT21のせいだと思うのですが、とても遅かったのですよ、表示が。 ん、眠くなったので、続く
66 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 21:21:17 ] スレ違い。初心者スレですので無用な語りはお避けください。
67 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 21:33:14 ] >>63 >質問があります >hello.rbというhello!と表示するプログラムを作ったのですが実行するときに >いちいち保存先までcd ¥とか入力していかないとエラーが出るので面倒です・・・ >どこからでも○○○.rbと入力して実行するようにはできないのでしょうか? 質問の意味がわからない。どんなエラーがでるの?
68 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 21:38:36 ] >>67 いやそれはそのまんまだろ コマンドプロンプトの起動時のカレントディレクトリと自作ファイルを置くディレクトリが違うんだ 例はたいていカレントにあるスクリプトを起動しているから、それと同じようにするにはどうしたらいいかという話 つまりはディレクトリの概念と操作の勉強が要る
69 名前:9 mailto:sage [2009/09/17(木) 21:42:57 ] >>68 コマンドプロンプトを開いたときは常に自作ファイルをおいているディレクトリから はじめることはできませんか? 今の環境だといちいち自作ファイルをおいてあるディレクトリまでcdコマンドで移動しないと実行できません >>68 ruby: No such file or directory -- hello.rb (LoadError)
70 名前:9 mailto:sage [2009/09/17(木) 21:47:06 ] Cドライブの下にsrcというフォルダを作成してここに自作ファイルを保存しています コマンドプロンプトから自作ファイルを実行するときは ruby ○○○.rb 実行とするだけで動くようにはできませんか? 今の環境でこれをすると ruby: No such file or directory -- hello.rb (LoadError) と表示されてしまいます ruby c:\src\hello.rb 実行とすれば動いてくれるのですが
71 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 22:09:11 ] はやくパッチレベル上がらんかな mingw使いはバイナリを上げられんではないか
72 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 22:27:10 ] p0がどんどん広まるよー
73 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 22:27:36 ] >>69 そういうことはできるのかな。わかんない。 移動がめんどくさいというだけなら、最初から「C:¥」を指定してコマンドプロンプトを起動するのはどうだろうか。 (1) C:¥Documents and Settings¥ユーザ名¥スタートメニュー¥プログラム¥アクセサリ をエクスプローラで開く (2) 「コマンドプロンプト」ショートカットをデスクトップにコピー (3) コピーしたショートカットを右クリックして「プロパティ」を選ぶ (4) 「ショートカット」タブの「作業フォルダ」を「C:¥src」に指定して、OKボタンを押す (5) コピーしたショートカットをダブルクリックすると、「C:¥src」に移動していることがわかる >>68 おまえかしこいな。おれはさっぱりわからんかった。
74 名前:9 mailto:sage [2009/09/17(木) 22:50:25 ] >>73 ありがとうございます! らくになりました!
75 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 04:52:49 ] >>33 NetBeansオススメだぜ。 俺はRubyでちょっとした使い捨てプログラム書くときはxyzzyのruby-mode、 仕事のプロジェクトはNetBeansと使い分けてる。 >>69 "Command prompt from here"いれろ。ぐぐったらでてくる。 エクスプローラーからフォルダの右クリックで、そのフォルダを作業フォルダにしてコマンドプロンプトを開けるようになる。
76 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 11:27:41 ] >>75 すでに解決しております ありがとうございます またお願いします
77 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 11:39:09 ] >>9 です 質問することが多いと思いますので名前をつけさせていただきました よろしくお願いします
78 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 12:12:53 ] >>77 コテつけてくれるのはありがたい。 さ、NGにしよっと。
79 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 12:19:14 ] 無駄にスレをのばさないでください。>>見習い S/Nが低下し過ぎ。 これがつづくと、だれもこのスレをみなくなって 質問しても答えてくれる人がいなくなってしまう。
80 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 12:20:16 ] >>77 まあ気長に頑張れ >>2 は見たか。多少値がはっても入門書ぐらいはちゃんとしたのを 買った読んで方がいいぞ
81 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 12:23:09 ] >>78 さんw >>79 気をつけます すいません S/Nってなんですか? >>80 ありがとうございます 入門書は買うつもりです PCだと目が疲れてくるのでやっぱりじっくり見てやるなら紙のほうがいいです
82 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 12:25:50 ] 君はググることすらしないのになんでここにいるん
83 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 12:34:55 ] >>82 ググってますよ
84 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 12:38:37 ] >>79 どうして存在を認めて名前で呼ぶの
85 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 12:55:44 ] 初心者スレだから、いいんじゃね。 むしろ、初心者がどこで躓くのかを俺は知りたい。
86 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:01:55 ] >>85 それを知りたいならこの板全部読め 全部載っている
87 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:04:19 ] >>83 S/Nでぐぐった? 人に聞く前に自分で調べようって話
88 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 13:08:30 ] >>87 ぐぐりましたけどどれも関係なさそうなものばかりですよ
89 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:31:00 ] rubyで再起処理をしようとすると、undefined method `each' for nil:NilClassと出ますが、再帰処理はできないのですか?
90 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:33:00 ] >>88 いい加減なことを言うなよ 検索結果の最上位にずらっと並んでいるだろ…… というか、こういう Ruby とは何の関係もないやり取りがまさに N なわけだよ
91 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:35:52 ] >>89 各オブジェクトがeachを持っているかどうかの判断をする必要があるんじゃないの?
92 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:36:55 ] >>89 それは書き方間違ってるだけです エラーの理由がそのまんまです [1,2,3].each do |e| … と直接書いた場合は [1,2,3] をeach 内から読む手段がないんで 再帰したい場合はご面倒でも arr = [1,2,3] と変数として一度定義してから arr[1..-1] とか呼んでください
93 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:37:14 ] >>89 意図せず nil に対して each を呼んでいる コードを張れ
94 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:39:53 ] >>91 オブジェクトにeachを持ってるか判断がいるのですか? ちなみに下記コードで出ました def treeRecur(activeCell,tree,hier,refCellName) hier+=1 refCellName[activeCell].each{|activeRefCell| tree << [activeCell , hier , activeRefCell] treeRecur(activeRefCell , tree , hier , refCellName) ##再帰的に呼び出し } hier-=1 end activeCellはString treeは配列 hierは数値 refCellNameハッシュになってます。 それで:87:in `treeRecur'となってるのでtreeRecurが再帰できないのかと思ったのですが
95 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:49:58 ] >>94 よくわからないけど停止条件が見当たらないよ
96 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:50:01 ] 原因がわかりました。 再帰したときにrefCellNameがnilになっています (最初に呼び出された時は正しいデータが入ってました) 再帰したらrefCellNameのデータってnilになるものなんでしょうか?
97 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:51:29 ] >>95 停止はrefCellName[activeCell]の中が空になったときです
98 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:53:34 ] >>97 > 停止はrefCellName[activeCell]の中が空になったとき refCellName[activeCell] が空になったら再帰から抜ける、という部分の コードが見当たりませんが? それと、空になるとはどうことだと理解してますか?
99 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:54:14 ] each の中で再帰するなめんどくさいから あと LCC は氏ね 空のハッシュに特定のキーを指定した場合の返り値は nil だ とりあえず停止条件は明記しろ def treeRecur(activeCell,tree,hier,refCellName) hier+=1 refCellName[activeCell] && refCellName[activeCell].each{|activeRefCell| tree << [activeCell , hier , activeRefCell] treeRecur(activeRefCell , tree , hier , refCellName) ##再帰的に呼び出し } hier-=1 end
100 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:59:21 ] >>96 いやそれであのエラーは出ない nil[:a].each #=> NoMethodError: undefined method `[]' for nil:NilClass each のレシーバが nil だっていうエラーだから refCellName[activeCell] が nil のはず どうしてそれが nil になるのかはよくわからん refCellName から要素を削除する仕掛けが停止条件兼ねてどっかにあって それと干渉してるんじゃないの?
101 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 14:00:19 ] >>98-99 わかりました。 eachはnilはエラーを返すのですか def treeRecur(activeCell,tree,hier,refCellName) hier+=1 if refCellName[activeCell] == nil return end refCellName[activeCell] && refCellName[activeCell].each{|activeRefCell| tree << [activeCell , hier , activeRefCell] treeRecur(activeRefCell , tree , hier , refCellName) ##再帰的に呼び出し } hier-=1 end こうしたら動きました。2日前までperl中でして,perlはこれでも動くからできるかと思ってました。
102 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 14:04:24 ] うん、再帰使ってるプログラムは 停止条件が関数の頭のほうに書いてあると漏れでも理解できて非常に助かる
103 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 14:05:54 ] >>101 「NilClass に each メソッドが定義されていない」と認識するべき レシーバが nil だからではない nil.to_s は NilClass#to_s が定義されているからエラーは出ない 空文字列を返す
104 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 14:08:36 ] >>103 なるほど 納得しました。クラスごとに定義が必要でnilにはなかったと ありがとうございました
105 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 16:25:12 ] 初心者にカリカリしている人が多いようなので、再掲しました。 >>1 >■回答する人へ >相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。 >それができないならこないこと(だって初心者スレだもん)。 > ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。 > ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 > ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。 ここは初心者がバカな質問をすることを大目に見てあげられるマゾヒストのためのスレです。 初心者にカリカリするような人はこないでね。
106 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 16:30:37 ] ◆YG1xRh8M6Ffb乙
107 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 16:40:08 ] >>105 「Rubyに関する」既出な質問やわけわかな質問なら、いくらでも大目に見る スレ違いな質問(S/Nとか)はよそに行け 加えて言うと、調べる気がなさそうな人間に対しては いくらマゾヒストでも親切でも教える気になれんよ 人力検索サイトに行け
108 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 16:52:14 ] ルビーのショートカットアイコンを変更したいのですが 右クリックしてプロパティから変更しようとしても”アイコンの変更”ボタンが アクティブ?の状態になっておらず変更できません どうすればいいですか? よろしくお願いします >>106 ちがいますw
109 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 17:33:05 ] >>107 >加えて言うと、調べる気がなさそうな人間に対しては >いくらマゾヒストでも親切でも教える気になれんよ 回答したいやつが回答すればいい。 回答したくないやつは黙って無視しとけばいい。
ここはもともとそういう場所。 調べる気がなさそうな人間がいれば、キーワードを教えてぐぐることを薦めるだけのこと。 その程度でカリカリするなら、こんなスレ見ない方がいいよ。ストレスたまるだけだから。
110 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 17:33:55 ] >>108 Windows関連のスレで聞いたほうがいいかも。
111 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 18:02:45 ] >>110 ありがとうございます windows板の質問スレッドで回答待ちです
112 名前:デムパゆんゆん [2009/09/18(金) 18:11:39 ] おう、がむばれ!
113 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 19:16:05 ] スタートメニューのすべてのプログラムのRuby1.8の中にruby consoleがあります でも作業フォルダにはこれと同じファイルがありません 意味がわからないのですが・・・ どういうことですか?
114 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 19:19:55 ] >>113 ruby本体だって作業フォルダにないだろ。それと同じだよ 環境変数PATH、コマンドプロンプトとかでググってみたら
115 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 19:21:22 ] 恐らくボクの言っていることが通じてないとおもいます ボクの説明が悪いです すいませんね
116 名前:デムパゆんゆん [2009/09/18(金) 19:28:29 ] どうせならLinuxでやろうぜ。
117 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 19:32:36 ] もっていません
118 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 19:34:49 ] >>115 通じてないと思うのならあやまる前に通じさせる努力をしてくれよw 何がわからなくて何を知りたいのか、回答者が推測しなければならないような 質問はよくない、というかかなり損してるよ
119 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 19:36:36 ] >>29 さんはいませんか? いらっしゃいましたら方法をおしえてください
120 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 20:01:57 ] >>118 こんな感じでよろしいでしょうか OSはwindows xp sp3 32bitです rubyはActiveScriptRubyの最新版1.8.7をインストールしています デスクトップのショートカットアイコンを”変更”したいのですがその方法がわかりません 自分なりにいろいろがんばってみたのですが力不足のようです もし知っている方がいらっしゃいましたらご教授いただければ幸いです ご指導の程よろしくお願い致します
121 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 20:17:33 ] >>120 その話はWindows板で回答待ちじゃないのか? >>113-114 の流れはおかしくないと思うが、直後に>>115 ,120となる意味が分からん
122 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 20:22:41 ] もういいです
123 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 20:23:53 ] >120 Windows板で回答待ちの質問をこっちに持ってくるなよ 向こうの住人に失礼だぞ
124 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 20:24:29 ] 流れがどうのこうの 聞いてるんだから 可能か不可能かくらいは こたえてくれても いいんじゃないの
125 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 20:27:32 ] RubyプログラムでWindowsでのショートカットのアイコンを変更したいというんだったら WIN32APIでも叩けば「可能かもしれない」。 俺はやったこと無いから知らないけど、詳しい人が答えてくれるかもね。 Rubyのショートカットアイコンを変更したいという話だったら「可能」だけど スレ違いだから出て行けって言われてる。
126 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 20:29:36 ] >>113 >スタートメニューのすべてのプログラムのRuby1.8の中にruby consoleがあります >でも作業フォルダにはこれと同じファイルがありません >意味がわからないのですが・・・ 意味が分からないのはキミの質問のほうだな。 Windowsがないから正確なことはわかんないけど、 「スタートメニュー」> 「すべてのプログラム」>「Ruby 1.8」 の中に「ruby console」というのがある、ということがいいたいのか。 しかし「作業フォルダにはこれと同じファイルがありません」という部分は意味がわからん。 再提出!
127 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 20:29:54 ] アイコン変えるくらいで えらいたいそうなことやね あきらめますわ ありがとう
128 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 20:39:34 ] 1. まずruby consoleってのを削除する 2. パスを通す 3. 普通にコマンドプロンプトを使う
129 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 20:45:02 ] アイコンとかどうでもいい事にこだわるのはマカ。 ルビー使いたいなら教祖も使ってるデビアン推奨。
130 名前:デフォルトの名無しさん [2009/09/18(金) 20:45:18 ] アイコンを右クリック→プロパティ→カスタマイズ→アイコンの変更→好きなのに換える
131 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 20:46:54 ] ショートカットの場合は「カスタマイズ」を「ショートカット」に読み替えてね。
132 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 20:48:45 ] あれは許容範囲を超えたダサさだからなあ GRScript18.dllのリソースを書き変えたらいいんかな 真面目な話、アイコンをartonに送るというのが真の解決法だ
133 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 21:09:34 ] 初心者さんがだんだんグレて来ててワロタ
134 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 21:29:21 ] そろそろ悪態をつくころだね
135 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 22:20:56 ] >>130-131 アドバタイズショートカットなめんな
136 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 23:19:34 ] ひまなおっさんの釣りなんじゃないかと思えてきた。 日本語がおかしいし、いくら初心者でもこれはないだろ。 あるいはリアルに小学生なのか。
137 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 23:25:08 ] [ [1,2,3],[4,5,6],[7,8,9] ] → [ [1,4,3],[4,10,6],[7,16,9] ] ↑のように、配列の配列の2番目の要素だけ2倍にしたい ときはどのように描けば短くかけますか?
138 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 23:29:04 ] まずはうんざりするくらいまで each 使い倒せ Enumerable や Array の各メソッド内部でどう each が使われているか推測できるようになれば いちいち他人に聞かなくても一発で書き下せる 特殊動作のメソッドだけ聞きかじりで使ってても応用できないぞ
139 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 23:36:38 ] >>137 とてもRubyらしく書くとこうなる L = [ [1,2,3],[4,5,6],[7,8,9] ] for e in L do e[1] = e[1] * 2 end
140 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 23:38:18 ] Array と String と Enumerable と Hash の4つはメソッド一覧をどっかに書き出しておくといい この 4つのクラスのメソッドの動作が頭に思い浮かべられるようになると、 Ruby スクリプトを書くのにかかる時間が一気に半分以下になる てか、それこそ each じゃ駄目なん? めっちゃ短いと思うんだけど arr = [ [1,2,3],[4,5,6],[7,8,9] ] arr.each{|a| a[1] *=2} p arr
141 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 23:50:05 ] >>139 ,140 非破壊的にやるとすればどうする?
142 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 00:01:54 ] >>141 L1 = [ [1,2,3],[4,5,6],[7,8,9] ] L2 = Marshal.load(Marshal.dump(L1)) for e in L2 do e[1] *= 2 end >>139 ともども本当にごめんなさい
143 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 00:01:59 ] このスレッドは天才チンパンジー「アイちゃん」が 言語訓練のために立てたものです。 アイと研究員とのやり取りに利用するスレッドなので、 関係者以外は書きこまないで下さい。 京都大学霊長類研究所
144 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 00:01:59 ] arr2 = arr.map{|a| b = a.dup; b[1] *=2; b}
145 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 00:28:11 ] >>142 ,144 なるほど。ありがとう。
146 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 00:33:02 ] >>139 >>142 方言わらたw
147 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 00:52:29 ] >>142 初心者スレではそういうのやってほしくないなあ。冗談を冗談と見抜けないのが初心者なんだから。 しかも冗談としてもつまんないし。
148 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 06:34:59 ] Marshalとかw さすうがに冗談も大概にしろよw
149 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 07:11:56 ] >>148 君の釣りはつまらない Marshal.dump+load は dup の shallow copy で済む今回は牛刀だが手段としては妥当だ
150 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 07:48:50 ] >>149 なぜ、Marshalを使う必要があるかわからん。dupですむなら、それにこしたことないのではないか
151 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 08:07:50 ] dup では「済まない」から>>144 ではわざわざ1つネストした map の中で dup してるのだろ dup で済むというのは arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] arr2 = arr.dup arr2.each{|a| a[1] *=2} p arr これが [[1, 2, 3], [4, 5, 6], [7, 8, 9]] を表示するようなことを言う ネストした配列のような参照だらけのオブジェクトの完全な複製を作る手段は プリミティブなオブジェクトを見つけるまで深く潜って dup することだが これをほぼどんなオブジェクトに対しても自動で(結果として)行う一般的な手法が dump して load 事前情報(配列の配列の要素がプリミティブである)を利用して決め打ちで手動で行ったのが>>144 そんだけ どちらも特段変ではない 初心者向けでないとして突っ込みが入ったのは for と定数のほうだな
152 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 08:17:24 ] >>151 だったら>>142 の段階で簡単な説明をつけましょう。 なぜMarshalを使ったのかという説明がないため、初心者は理解できないし他の人も混乱するだけです。 ここは初心者のための回答が期待されるところであり、初心者が理解できない回答を書いて「Marshal使ってるオレかっこいい」とひたる場所ではありません。 スレの趣旨を理解しましょう。 151が142と別人だったらごめんね。
153 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 08:32:23 ] 俺もちょっと不思議に思ったからググってああなるほどと思ったクチだが 別に「Marshal使ってるオレかっこいい」じゃないだろw Ruby本でも書かれるような一般的な小技なんだろ まあ上でも言われてるが初心者にネタを見抜けってのはきついから ネタなしかネタだと明らかに分かるよう書いてほしいのはあるが
154 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 08:37:29 ] >>152 知らんよ Marshal.load して dump するというのは「はいれつがこぴーできません」に対する FAQ だ きちんとマニュアルにも書い…書…注釈に小さく書いてある ttp://www.ruby-lang.org/ja/man/html/Object.html#footnote-1 知っていることも使用することも問題は特段存在しない Marshal.dump を知っているレベルで for や定数を使うことが「ありえない」から叩かれてるのだろ
155 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 08:39:34 ] Array や Hash の複製が欲しいときにいつも歯がゆく思うんだけど なんで Object には deep copy のためのメソッドがないのかな? サブクラス作るたびに適切にオーバーライドする必要が出て面倒だからだろうか
156 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 08:56:27 ] >>155 実際にRubyスクリプトとして作るとわかるが循環解決でわけわかめになる marshal.のソース流用しようとするとT_DATAであっぴゃーになる dumpしてloadよりも早くてうまくて短い実装があるならMLで発表だ 基本、ディープトラバースして欲しくないらしいぞ Rubyで提供されてるディープトラバース手段はMarshalだけだ Marshalできないやつはそもそも複製できんオブジェクトだったということで
157 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 09:23:29 ] 怖いからYAMLにして戻すってのは?w
158 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 09:30:36 ] >>154 >知っていることも使用することも問題は特段存在しない 問題はそこじゃない。初心者への回答という観点を忘れ、ろくに説明もなしにコードだけ書いて満足していることが問題。
159 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 09:39:28 ] dump が目的の場合に Marshal ではなく YAML を使うメリットはゼロ
160 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 09:40:25 ] >>158 説明はされた
161 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 09:56:20 ] 説明しなくても分からなきゃ自分で調べるだろ
162 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 11:16:12 ] >>160 あとからな。ここでいっているのは、最初の>>142 の時点で何の説明もないことだろ。
163 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 11:26:23 ] どうしてもMarshalに突っかかってるようにしか見えないが そこは全く問題ないだろ forの方を言うならまだわかるが
164 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 11:33:22 ] なんか一人顔真っ赤にして頑張ってる姿が目に浮かぶんだが >>147 が>>139 ,142のようなのは初心者に有害だからやってほしくないと真摯に考えるのなら その場で「Rubyでforは滅多に使わねえよカスeach使え」 「大文字で始まる識別子は定数だからLとかそんな風に使うなボケ」 「巣に帰れ二度と戻ってくるな」といったツッコミをいれるべき
165 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 11:45:02 ] Marshal を知らなかったのが悔しくて悔しくて悔しくて悔しくて悔しくてたまらないのだろ自称脱初心者が
166 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 12:02:02 ] >>164 は、>>142 での説明がないのに「説明はされた」とほざいている>>160 の必死の答弁でした。 160先生の次回作をお楽しみに。
167 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 12:05:26 ] どっちが必死なんだよw
168 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 12:06:17 ] マジ顔真っ赤だなあ・・・w 説明がないと思ったなら他の人が説明するもよし 分からなきゃそれを質問するもよし だろう
169 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 13:40:16 ] ごめん、俺がMarshalなんて・・・っていったばっかりに、こんなことに(´・ω・`) ごめんなさい、ごめんなさい。双方とも頭冷やしてくだしあ
170 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 13:44:38 ] いや、Marshalは正しい解答の一つでしょ あやまるならforとか定数とか変に使ったことをあやまってくれよw まあ(ちゃんとした)議論になればいろんな情報が出てくるからいいのかもしれんけどね
171 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 13:58:09 ] >>142 で既にあやまってるなw
172 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 14:23:19 ] "[hoge]"とか"{hoge}"みたいな文字列の前後の括弧を取り外すのに "[hoge]".sub(/\[(.+?)\]/){$1} なんかじゃなくて、なんかもっとスマートな方法はありませんか?
173 名前:172 mailto:sage [2009/09/19(土) 14:26:22 ] できれば "[hoge]".split(//)[1...-1].join も無しの方向で。
174 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 14:28:01 ] "[hoge]"[1...-1] では駄目と申すか。
175 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 14:36:42 ] String[] の動作が期待に添っていて、短いのがスマートだと勘違いしているのなら、>>174 そのまんまの正規表現でマッチした部分を取り出す以上のわかりやすいスマートなものはないかと思われ str =~ /\A[\(\{\[<](.+?)[\)\]\}>]\Z/; $1 開きカッコの対応を取るライブラリは標準では無いので自作してくれ
176 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 14:38:04 ] というかカッコの対応は正規表現では本来書けない。 とCマガで大昔に読んだけど、最近の拡張しまくりのだと可能かもなー。
177 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 14:48:30 ] 後ろの1文字はchopで毟れるけど、先頭の1文字を毟り取るメソッドっ てないよな。
178 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 14:51:08 ] >>177 その手があったか "[hoge]".chop.reverse.chop.reverse
179 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 14:52:59 ] >>178 ちょwwwwwプwwwww
180 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 14:54:21 ] 小橋の回転チョップを思い出した
181 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 17:26:08 ] 右のほうをチョップされたら左のほうを差し出せ
182 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 20:20:22 ] ×ほう ○ほお
183 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 20:28:43 ] >>172 "[hoge]"[/\[(.+?)\]/, 1] とも書ける。 >>175 Onigurumaならできるはず。
184 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 21:00:13 ] すんません。このスレどっからドコまで自作自演なんてしょうか?
185 名前:デフォルトの名無しさん [2009/09/19(土) 21:06:16 ] ココまで俺の自演
186 名前:デフォルトの名無しさん [2009/09/20(日) 05:42:36 ] require ってなんで複数のライブラリ名を受け付けないんでしょうか。 けっこう不便なんですけど。
187 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 05:58:31 ] >>186 リファレンスを見たらわかることではないでしょうか?
188 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 06:35:34 ] 書いてはあるが、意図を読み取るのは不可能だと思う >>186 require が真偽値を返すメソッドとして作られているから、がいちおうの答 複数受け取ったときは真偽値の配列を返すようにしてもいいんだけど、おおむねキモい each で回してもいいはずなんだけど、そういう人はなぜか見ないね
189 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 06:46:28 ] かなり初期に一瞬だけ実装されたことがあったと記憶 false が返ってきたほうが便利だということでお流れになったんでなかったかな
190 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 07:50:00 ] ふとした疑問なのですが、Mechanizeのテストというのはどのように書いたものでしょうか?
191 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 08:22:58 ] >>190 FakeWeb 1.2.6 API Documentation fakeweb.rubyforge.org/ FakeWeb使ったらいけるかも…
192 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 11:46:12 ] test
193 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 11:51:53 ] >>192 それはRubyで作った2chブラウザのテストですか?
194 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 12:34:04 ] 186です。 >>188 なるほど!たしかにrequireは戻り値がありますね。でも戻り値を気にする場面っていうのはまれなので、 そういう理由で複数の引数を指定できないのはちょっと勿体ないですね。 Railsとかには require_all というのがあるそうなので、戻り値を気にしなくていいから 引数を複数とれるバージョンのrequireを、requireとは別に用意してほしいなと思いました。
195 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 12:34:37 ] yes,we can
196 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 12:59:39 ] >>194 なければ自分で作るという選択肢ももとう
197 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 13:01:42 ] require を再定義すればいい。
198 名前:デフォルトの名無しさん [2009/09/20(日) 16:09:37 ] \ ..  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄l/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ /\(<●>)/\ /\(<●>)/\ /\(<●>)/\ /\(<●>)/\ /\(<●> )/\ \(<●>)/\ / \\(<●>)/\ / ,ゝ===く <●>)/\ ! γ `ヾ,_ \ │ :く( r,J三;ヾ )> \ l =; {三●;= } ,=ニ l ヽ ゝ≡三=イ / <>>1 ワロタw ヽ .,,,. /.| ヽ 'ぐ'''''''' / / ト, ヽ. ヾ''" / / |ヽ ,./ヽ `´ / ./ \、 -‐ '''"  ̄ / :| \,,,__,,,, / / | `'''‐- 、.._\
199 名前:デフォルトの名無しさん [2009/09/20(日) 16:17:33 ] eRubyとMySQLをつかって、DBに写真のアップをしたいのだけど <form action="syasinhenkou.rhtml" method="post" enctype="multipart/form-data"> <input type="file" name="syasin" size="30" maxlength="100"> <input type="hidden" name="id" value="<%= cgi["id"] %>"> <input type="submit" value="登録"> </form> ってかんじで、ファイルを登録用のページにおくりたい sql = "UPDATE rireki SET" sql += " syasin = '" + cgi["syasin"] + "'" sql += " WHERE id = '" + cgi["id"] + "'" sql += ";" my.query(sql) 受け側はこんな感じで書いてみた。 IDのところに変な文字列が入ってアップデートされないいのだけど enctype="multipart/form-data"のオプションのせいだよね。 ファイルを送るときは、このオプションがいるみたいだけど どうしたらいいかな? DB側のidがキーで文字列、syasinがBLOB型でやってる これでDBにファイルが送れるのかもよくわからんのだけど 教えてくれるとありがたいです。
200 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 17:25:56 ] >>199 idの所が変になるんじゃなくて、cgi['syashin']以降が変になってるはず blobとかのバイナリオブジェクトは文字列の連結でSQLを作れない プリペアードステートメントとかを使え
201 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 17:56:53 ] blobじゃなくても普通プリペアードステートメント使うとこだろ
202 名前:デフォルトの名無しさん [2009/09/20(日) 18:41:08 ] 何で空配列がかえってくんねん 空文字列ちゃうん? >> "a".split(/a/) => [] >> "aa".split(/a/) => [] >> "ab".split(/a/) => ["", "b"]
203 名前:デフォルトの名無しさん [2009/09/20(日) 18:43:58 ] 空配列に空文字列がつっこまれるべきちゃうん? [""]
204 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 18:57:36 ] >>194 %w(lib0 lib1 lib2).each{|feat| require feat} でいいじゃん
205 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 19:12:10 ] >>202-203 新リファレンスマニュアルから抜粋 > instance method String#split > split(sep = $/, limit = 0) > 第 2 引数 limit は以下のいずれかです。 > limit == 0 > 分割個数制限はなしで、配列末尾の空文字列を取り除く > limit < 0 > 分割個数の制限はなし 「配列末尾の空文字列を」いくつあっても全部「取り除く」ってことなんだろうな多分 それがデフォルトの動作である理由は知らん
206 名前:デフォルトの名無しさん [2009/09/20(日) 19:23:06 ] > 「配列末尾の空文字列を」いくつあっても全部「取り除く」 こんなん知らへんかったがな。おーきに 理由は実装上の都合なんやろなぁ
207 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 19:33:54 ] Perlがそうだったから。 Perlがそうだった理由は知らん。
208 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 22:23:37 ] >>206 web上では関西弁禁止だよ?知らないな?他の方言ならいいけど
209 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 22:53:07 ] >>199 syasinじゃなくてphotoとかpictureつかえ
210 名前:デフォルトの名無しさん [2009/09/20(日) 23:01:59 ] 1.9からThreadにかわりFiberというのが入ったそうですが、どうやって使うものでしょうか。 ぐぐってみたけど、上級者向けの説明しかなくてさっぱりでした。 例:Fiberはいわゆるコルーチンです。←コルーチンが何かわからないからさっぱり理解できない説明 高校生でもわかるような説明をどなたかお願いできますか。
211 名前:デフォルトの名無しさん [2009/09/20(日) 23:13:30 ] >>200-201 Ruby/MySQLではプリペアードステートメントつかえない? MySQL/Rubyじゃないとだめ?
212 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 23:17:15 ] >>210 Threadなくなったわけじゃないし、上級者(地雷踏み?)向けの機能だから忘れていいよ 否定的なこと言われてるし ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/31601
213 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 23:58:30 ] >>211 こんなのもある d.hatena.ne.jp/tmtms/20090729/1249183003
214 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 00:21:13 ] >>211 出来るみたいだけど使ってないんで確認はしてない ttp://planet.mysql.com/entry/?id=18088 stmt = my.prepare("select ?,?") stmt.execute 123, "abc" stmt.fetch # => [123, "abc"]
215 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 00:43:01 ] refe2簡単に入れたいけどパッケージとかある?
216 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 00:58:24 ] そんなに面倒なことはない気がするんだが
217 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 01:37:34 ] >>213-214 プリペアードステートメントは MySQL/Rubyをいれて解決した あとは、ファイルのアップだけど st = my.prepare("UPDATE rireki SET syasin = ? WHERE id = ?") st.execute(cgi["syasin"].read,cgi["id"].read) res = st.fetch って書いてみたところ、MySQLのほうから 2053 Attempt to read a row while there is no result set associated with the statement って怒られた・・・・BLOBだとだめなんか? こんなところで詰まってるようだと、表示にもてまどりそう っていうか、表示できるのか?
218 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 03:42:41 ] MySQLの本でも買えよ・・・またはRails使うか
219 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 04:02:16 ] >>217 エラーメッセージの意味はわかる? SQL文を実行したけどresult setが返されなかった、なのに行を読み込もうとしてエラーになっている、という意味。 SQLをみるとupdate文を実行しているよね。だからresult setは返ってこない。なのに st.fetch しようとしているからエラーになっているだけ。 これがselect文だったらfetchできるけど。
220 名前:デフォルトの名無しさん [2009/09/21(月) 11:47:02 ] >>219 SERECTしたらはいってた〜〜!! ありがと〜〜!!! 表示のほうも、相談にのってください 格納したデータを <img src="data:image/jpg;base64,/9j/4AAQ....中略....."> って感じには表示できるのですが これだとIE6では見れない。 エンドユーザにFF入れろとか言えないし IEでも表示させる方法ありますかね?
221 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 12:24:04 ] もはやRuby関係なし
222 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 12:41:30 ] どうみてもHTMLの質問です 動的か静的かは用途次第だけど、素直にURL割り当てろって
223 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 12:54:14 ] pc12.2ch.net/test/read.cgi/tech/1251609039/ スレ立てるまでもない質問はここで 100匹目 pc12.2ch.net/test/read.cgi/tech/1054813207/ 【漏れは】猫でもわかる質問スレ【猫以下です】
224 名前:デフォルトの名無しさん [2009/09/21(月) 13:26:50 ] >>220 アホだなぁ。 base64デコードして出力すればいいだろが。 Content-Typeヘッダも適切に吐いてね。 あ、スレチだね。
225 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 13:51:04 ] >>220 さすがにスレ違いすぎるけど。 src="data:..." は IE6 ではサポートされてない。これはブラウザを変えてもらう以外に方法はない。 だから data: を使わずすなおに画像を別ファイルにしておこう。 あるいは example.com/cgi/jpg.cgi?base64=..... (base64文字列).... が画像ファイルを返すようなCGIを用意して、 src="data:..." をすべて src="example.com/cgi/jpg.cgi?base64=.... " に変換するとか。
226 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 18:26:18 ] アホです。すんません。 >>224-225 URLの?以降の文字列はENV['QUERY_STRING']で受け取れるはず そいつをデコードして元に戻すって考えて #!/usr/local/bin/ruby require 'base64' file = ENV['QUERY_STRING'] out = decode64(file) print "Content-Disposition: filename=\"syasin.jpg\"\n" print "Content-type:image/jpge\n\n" print out って言う具合に組んでみた。 700バイトとかの小さいファイルだとうまく行くんだけど、 8kぐらいのファイルになると表示できなくなるな そもそも、CGI呼べてないっぽい これもRubyのはなじしゃないよね(涙
227 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 18:59:21 ] アホなりに解決しました。 どうもbase64のコードが長すぎでうまく行かなかったっぽいので idを指定してDBから画像を引っ張って垂れ流すだけのCGIを作成しました。 idなら長くても50桁とか行かんので、これで解決!! いろいろ、ご迷惑おかけしました。 ヒント本当に助かりました。ありがとうございます。
228 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 19:05:28 ] >>226 >700バイトとかの小さいファイルだとうまく行くんだけど、 >8kぐらいのファイルになると表示できなくなるな ENV['QUERY_STRING'] をそのままつかってるのが問題なんじゃないかな。 (つまりENV['QUERY_STRING']に %2F や %2B が含まれているんだろう。) URLエンコードされているからデコードしないと。 require 'cgi'
qstr = ENV['QUERY_STRING'] out = decode64(CGI.unescape(qstr || "")) 詳しくは ttp://blog.s21g.com/articles/319 をみてくれ。
229 名前:デフォルトの名無しさん [2009/09/21(月) 20:00:17 ] いやいや、というか そんな巨大なデータをクエリ文字列としてURIで渡すなよ、と。
230 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 20:02:48 ] URLの長さ上限は、普及しているブラウザでは、一番短かいIEが 2083バイトだったかね。
231 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 20:04:53 ] 一発でroot奪取されかねない素敵コードだな
232 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 21:06:05 ] なんかワロタw
233 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 14:17:19 ] ルヴィーっておもしろいですか?ルヴィー使ってる友達が、開発者が日本人だから誇らしいと言ってました
234 名前:デフォルトの名無しさん [2009/09/22(火) 14:23:06 ] >>233 またお前か。 もういいから自分の巣に帰れ!
235 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 15:31:24 ] URIのやり取りでトンネル掘り出すアフォとか出てきそうだな。
236 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 19:39:02 ] $0とか__FILE__とかARGFとか・・・ 最初から備わってる変数が色々ありますけど、どうしてこんなに表記法に統一性が無いのですか?
237 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 20:31:24 ] 変数
238 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 21:03:37 ] >>236 Larry Wallに聞いてくれ
239 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 21:08:08 ] Larryにそんなことを聞いたら Perlの文法が言語学的にどう優れているのかの講義が始まるぞ そしてハッシュの頭になぜ%が付くのかを聞いたらPerl信者になること確実だからやめておけ
240 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 21:28:45 ] $0はsh __FILE__はC ARGFはARGVの発展系、ARGVはCのmain関数の引数argvが元になっている どれもこれもunix+Cを知ってれば、なじみの物ばかりだ
241 名前:236 mailto:sage [2009/09/22(火) 22:02:34 ] ありがとうございます。他言語からの習慣に習って付けてるんですね。 でもARGFはどうして定数なんでしょうか?Cだとargvなんかは変数ですよね。 __FILE__は擬似変数で$0はグローバル変数と全部違うけど、どれもグローバルにアクセスしたいものだから 統一してしまえばいいのに、と思ったのです。 ここら辺の、定数やグローバル変数、擬似変数といった使い分けは実装内部のことが分かるような人じゃないと理解できないのでしょうか。
242 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 22:06:29 ] ARGFは大文字で始まる __FILE__は違う
243 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 22:08:10 ] 定数だったNILが変数nilになったりしてるから絶対的な境界は無いんだろう ARGFをグローバル変数にするのはおかしな話だが、何でといわれても説明できん
244 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 22:23:44 ] ARGFはARGVの発展系、ARGVが大文字でグローバルなのは多分awkが元 他の言語もそれに習ってるからrubyもそれに習っているんだろう
245 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 22:27:10 ] >>241 どこかでMatzが 「特殊変数周りの仕様はPerlから引きずった。今では後悔している」 的なことを書いてたような いずれにせよ、一貫性がないという意見には同意
246 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 22:41:46 ] Perlからの脱却 ってのがRubyの精神じゃなかったっけ…
247 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 22:44:06 ] Ruby2.0では特殊変数は一新するんじゃない?
248 名前:デフォルトの名無しさん [2009/09/22(火) 23:22:18 ] 以下のような感じでセッションにアクセスしているのですが リロードするたびにセッションIDが変わってしまいうまく数値を取り出せないです。 どなたか助言をよろしくおねがいします。 def GetSession() cgi = CGI.new session_option = {"tmpdir" => "./"} session = CGI::Session.new(cgi, session_option) return session end
249 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 23:43:38 ] 色々と突っ込みたい所はあるが、まずはtmpdirにセッション情報が書き込まれたファイルが存在しているかどうかを確認するんだ。
250 名前:デフォルトの名無しさん [2009/09/22(火) 23:48:07 ] ファイルが作成されているのが確認できました。 リロードするたびに増えていきます。 サーバー側の問題でしょうか?
251 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 23:58:52 ] ようし、じゃあ次はFirefoxにFirebugを入れてcookieの受信と送信ができているか確認するんだ。 CGIモジュールの仕様はよく知らんが、きっとセッションIDをクッキーに入れて送ってきてくれているはずだぞ!
252 名前:デフォルトの名無しさん [2009/09/23(水) 00:15:52 ] クッキーのリストが反応しないみたいです、他のサイトだとExpiresの項目にsessionというのが出てきています。
253 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 00:50:05 ] で、セッションを発行したときのレスポンスヘッダにSet-Cookieはあったのか?
254 名前:デフォルトの名無しさん [2009/09/23(水) 00:58:52 ] まじキチ…ユダヤが人工地震を起こすぞ 【緊急情報カクサンよろしく】 ついに来ました。 大きい動きです。250nT超えてきました。ほぼ間違いありません。もう一度言います。 友人、知人、親類縁者、あらゆるつながりを駆使して巨大地震がくることを教えて下さい。 四川地震より大きいのが来る可能性があります。 g ★olde★ntam★atama.b★lo★g84.fc2.c★om/ ★★★★★危険度MAX★★★★★ ★★★★★★★★★★★★★★★★ ★千葉、静岡、東京、関東で大地震が起きる可能性が非常に高くなっています★★★ ★千葉、静岡、東京、関東で大地震が起きる可能性が非常に高くなっています★★★ ★千葉、静岡、東京、関東で大地震が起きる可能性が非常に高くなっています★★★ ★千葉、静岡、東京、関東で大地震が起きる可能性が非常に高くなっています★★★ ★★★★★★★★★★★★★★★★ ★★★★★危険度MAX★★★★★ 警告!連休中の21、22、23日が危ない!かも2 live24.2ch.net/test/read.cgi/eq/1 ★253494015/ 【大気イオン】e-PISCO Part11【また延長】 live24.2ch.net/test/read.cgi/eq/1 ★252991726/ 本当に地震が来たら、犯人は特権階級全員だということ2
255 名前:デフォルトの名無しさん [2009/09/23(水) 01:01:28 ] すいませんレスポンスヘッダを確認することができませんでした。 Firefoxのコンソールで確認できるような事を書いてあるサイトを見つけたのですが うまく確認できませんでした。
256 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 01:04:36 ] >>2555 Firebugでの見方がわからんならLive HTTP Headers入れろ。
257 名前:デフォルトの名無しさん [2009/09/23(水) 01:17:14 ] ありがとうございます、インストールしてみました。 レスポンスヘッダにCookieと名前のつく項目はなかったです。
258 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 01:20:23 ] じゃあそれが原因だろw ってかCGIクラスのインスタンスって何度も生成したらバグるんじゃないの? 関数の中でインスタンス作成して、破棄しているあたりからして使い方が間違ってるんじゃないのかと。
259 名前:デフォルトの名無しさん [2009/09/23(水) 01:26:40 ] なるほど、少し簡単なプログラムを作って実験してみます。 rubyは明確なルールが分かりづらくて難しいですね。 ありがとうございました。
260 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 01:32:05 ] 問題はHTTPの理解のほうじゃないだろうか。
261 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 01:46:05 ] >>248 たんにHttpヘッダーを送信してないだけかも。 「ruby cgi session」でぐぐったら、こんなページがあった。 ttp://d.hatena.ne.jp/tilfin/20080229/1204360284 参考にしてみて。
262 名前:デフォルトの名無しさん [2009/09/23(水) 02:23:35 ] ありがとうございます、確認してみたらヘッダーはERBを処理した後に追加しているので問題なさそうでした。 erb = File.open(path) { |f| ERB.new(f.read) } print cgi.header + erb.result(binding) 以下のようなtest.rbというのを作成して実験してみたところうまくいきましたが 本番用のソースだとうまくいかないようです>< #!/usr/local/bin/ruby require 'cgi' require 'cgi/session' cgi = CGI.new session = CGI::Session.new(cgi) print cgi.header print "session test'#{session.session_id}'\n" まだ解決していませんがデバック方法やアドバイスなど、とても勉強になりました。 本当にありがとうございました。 もう少し自分なりにrubyやhtmlの勉強を行ってみます。
263 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 07:51:45 ] どうしても分からなければ ソースをまるごと貼り付けて、アドバイスを求めるという手もある もちろん自力で解決できるならその方がいいけど
264 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 08:05:08 ] 2chに投稿するとインデントがなくなってすごく見にくいんだけど、JaneStyleのリンクポップアップで 見るとちゃんとインデントされてる! それをコピーしたらインデント付きでコピーもできる! 全角スペースや によるインデントを使う必要なし!
265 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 11:05:48 ] >>264 書き込み時に置換面倒なんだけど、ソースとリンクを毎回書き込むのが面倒なのだが
266 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 11:15:02 ] コードを貼付ける場合、どうせなら ttp://pastie.org/ とか ttp://gist.github.com/ とか使うといいんじゃないかな。 詳しくは ttp://journal.mycom.co.jp/news/2009/02/09/014/index.html
267 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 11:20:00 ] 長い場合はそのほうが望ましいけど 短い場合はそのまま貼ってくれたほうがいいな あとインデント類の扱いは2chブラウザごとに全然違うらしいよ
268 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 11:32:03 ] rubyのせいにしてるが、http知らないと実装は無理なんじゃ。
269 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 11:35:06 ] CGIも知ってないと無理な悪寒
270 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 11:38:57 ] アホばっかだな・・・ ソース張ってるんだからrubyが原因って一発で原因わかるだろw
271 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 11:52:44 ] 正しくrubyをかくための http,cgiの前提知識が足りないのかもしれん
272 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 19:47:00 ] Rubyって、GUIアプリを作れるの?
273 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 19:56:01 ] Ruby 自身は GUI 部品を持ってない GUI 部品を司る他の言語や API を直接呼ぶ 一般論としては、GUI が目的なら Ruby を使う理由は何もない 素直に GUI 部品を提供する他の言語を使え Windows でウィンドウを表示したけりゃ、そりゃ C# を使えばいいのさ
274 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 20:03:27 ] うわ 糞言語じゃん
275 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 20:05:01 ] >>274 GUI部品がどういうふうに成り立ってるか理解してないだろ、おまえ。
276 名前:デフォルトの名無しさん [2009/09/23(水) 20:11:42 ] >>274 ま た お ま え か !
277 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 20:13:41 ] Ruby/Tkの不遇って本当なんだなあ・・・
278 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 20:24:45 ] >>277 Windows環境の俺に言わせると ActiveTclを別に導入しなければならないあたりが原因 Exerbでまとめて配布できるWxRubyと比べて、いろいろ不便だ
279 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 20:29:24 ] Win32API経由なら「ActiveTclを別途インストールしてください」という必要もない Tclの文法をわざわざ勉強する必要もない アリモノ全部で賄える
280 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 20:33:10 ] One Click InstallerにはRuby/Tk最初から入ってなかったっけ まあPythonでTkinter使ったら幸せになれそうなケース
281 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 20:35:56 ] ruby厨涙拭けよ
282 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 20:47:46 ] というかTkってけっこう大きいんだよね 必要な人だけ適当に別途入れて使って、というスタンスにしておいたら 実行環境持ってない人に配布するという場合のサポートがすっこんと抜けた そこまでRubyでやらなくてもいいじゃん却って不便だろ、と思うんだけれど
283 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 20:48:31 ] あれ? どこか涙流すような流れになってたっけ?
284 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 21:05:57 ] jruby でいいじゃんじゃん。
285 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 21:09:32 ] pythonに標準添付されてるtkをrubyから使う事って出来るん?
286 名前:デフォルトの名無しさん [2009/09/23(水) 21:18:26 ] Linux使ってるけど、Ruby/gtk2が便利。書きやすい。 シグナルまわりの書き方が好きだ。
287 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 21:36:19 ] >>279 ? どういうこと? dllファイルを直接呼べばいいってこと?
288 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 22:15:39 ] Win32APIでやれることだけでなんとかしろって意味だと思う
289 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 22:18:29 ] Win32API向けにヘッダファイルの翻訳やってくれたりするライブラリでもあるの?
290 名前:デフォルトの名無しさん [2009/09/24(木) 07:36:30 ] gemのjsonライブラリって日本語まんま変換できないの? UTF8で["ほげ"].to_jsonとかすると["\u307b\u3052"]とかなっちゃうんだけど
291 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 08:05:05 ] いやそれそのまんまだと思うのだが irb> puts JSON.parse(["ほげ"].to_json) ほげ 何か問題ある?
292 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 08:42:47 ] javascript内では日本語は直接記述しないとか、そういう話?
293 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 08:45:26 ] >>290 JSONの仕様としては変換するのが正しい。 ただ、それが日本人にとって便利かどうかはまた別の話。 ユニコードに変換させないオプションがほしいよね。
294 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 08:47:18 ] >>293 ごめん、ウソ書いた。「変換するほうが仕様上正しい」というのは間違い。 JSONでは文字列中に日本語をかけるはずだね。
295 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 08:49:10 ] 機械が生成した JSON はたいてい Unicode エスケープで日本語が書かれてるぞ 仕様上はエスケープしても構わない(may)のでたいていのライブラリは自動エスケープする そのほうがめんどくさくないからというのが積極的理由 JSON を生で読むなバカという意図が働いてるという気はせんでもない
296 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 09:34:48 ] 便乗して質問 JSONやYAMLに変換したとき、日本語をそのまま出力してくれるライブラリって AnJSONやYa2YAMLぐらいしか知らないんだけれど 他に同じことができるライブラリってないかな
297 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 09:48:05 ] Jsonて生で読むなっていうようなものなの? 生で読めるのもいいところの一つだと思ってたんだけど
298 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 10:45:45 ] クラス変数が定義されているかどうかを調べる方法ありますか?
299 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 11:18:24 ] class_variable_defined?
300 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 11:26:31 ] Perlでは複数の返り値(リスト)があって、必要のないものには、以下のようにundefと記述しますが、 my ($second, undef, $hour) = localtime; Rubyではどのように書くものなのでしょうか? def meth return 1, 2, 3 end a, ??, c = meth
301 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 11:46:53 ] >>296 Rubyでは知らない。 PythonのYAMLライブラリは、オプションでユニコードに変換する・しないが選べるんだけど、 同じようなオプションがRubyにも欲しいよね。 >>300 特に用意はされてないと思うので、いらない変数を指定するしかないんじゃないかな。 a, _, c = meth とか a, dummy, meth とか
302 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 12:00:51 ] >>301 ダミー変数を使うしかないんですね。 了解しました。
303 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 12:31:35 ] >>299 古いオンラインマニュアルでは載ってないclass_variable_defined?!古いオンラインマニュアルでは載ってないclass_variable_defined?!じゃないか!
304 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 12:34:56 ] class_variable_defined? が載ってない HTML ヘルプ版マニュアルは持ってる これでも一応 1.8.6 対応だったはずなんだが まいっか
305 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 12:36:10 ] 大事なことなので2回いいました
306 名前:デフォルトの名無しさん [2009/09/24(木) 17:08:05 ] Mix-inが言語的にサポートされていると聞いてRubyに心ひかれてます。 とはいえまだ使ってませんが。普段はC++/Javaを使っています。 Mix-in するモジュールを A、その中で定義されているメソッドを foo とすると、foo からは A を Mix-in した側のクラス C1 内のメソッドを 使うことができるんですよね? そのクラス C1 をさらに継承して C2 としたらその C2 で定義した メソッドも呼び出せるんでしょうか? C++の仮想関数や仮想関数テーブルとのアナロジーで説明してくれている ページってありませんか?
307 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 17:23:53 ] これ貼ると人によってはなぜか大変がっかりされるんだけど >>306 irb> module A; def foo; 'foo!'; end; end irb> class C1; end irb> p C1.ancestors [C1, Object, Kernel] irb> class C2 < C1; end irb> p C2.ancestors [C2, C1, Object, Kernel] irb> class C1; include A; end irb> p C1.ancestors [C1, A, Object, Kernel] irb> p C2.ancestors [C2, C1, A, Object, Kernel] irb> p C2.new.foo "foo!" こうなる Ruby のクラスは再オープン可能でそれが日常であることに注意のこと Ruby は ancestors に含まれている「前のほうのクラスやモジュール」からメソッドなどを探す C2 は [C2, C1, A, Object, Kernel] になっているが、 これだと C2 を探して C1 を探して A を探して Object を探す もし C2 に foo が定義されていれば、 順番表の下にある A の foo は呼ばれない もし C1 に foo が定義されていれば、 順番表の下にある A の foo はやっぱり呼ばれない Ruby の include はこの検索順番表(の2番目)に自分を追加するだけのシンプルな機能 継承もこの検索順番表(の2番目)に継承元クラスを追加するだけのシンプルな概念 irb> module B; end irb> class C2; include B; end irb> p C2.ancestors [C2, B, C1, A, Object, Kernel]
308 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 17:25:10 ] C++ の vtbl の仕組みでは説明できません。 Ruby の場合「頼んで答えられれば答える」ただそれだけです。
309 名前:306 [2009/09/24(木) 17:26:45 ] もう一つの疑問です。 二つのMix-inモジュール A, B をクラス C でMix-inしたとき、 AのメソッドからBのメソッドを呼び出すこともできるのでしょうか? つまり A のメソッド foo を書くにあたって、foo の中で 呼び出す bar というメソッドを呼び出したいけど、 それはまぁどこかで実装されてるんだろうと思って 書いて構わないですよね? その bar の実装は A を Mix-in するクラス C に書くべきなのか ほかの Mix-in で bar の実装を提供することができるのか、 という質問です。
310 名前:306 [2009/09/24(木) 17:35:01 ] >>307 , >>308 ありがとうございます。分かってきました(気がします)。 RubyというかMix-inという以前に頭が動的型付けの言語に 慣れていないことが原因だったように思います。 >Ruby の include はこの検索順番表(の2番目)に自分を追加するだけのシンプルな機能 >継承もこの検索順番表(の2番目)に継承元クラスを追加するだけのシンプルな概念 その解説ですっきりしました。 ということは >>309 も当然可能で 複数のモジュールを Mix-in したりさらに継承を続けたりして メソッドの名前が重複する場合には、要注意、 つまり include の順番も依存するということですね。
311 名前:306 [2009/09/24(木) 17:38:28 ] ということは言語仕様としてMix-inとしての制約を 課しているという点以外は Python の多重継承と 良く似ているなぁ・・・ どうしても業務が静的型付け・手続き型言語 べったりなんで、まだこっち方面(どっち?)は 指をくわえて見てるだけしたが、そろそろ。
312 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 17:40:18 ] Matzは恥ずかしい表紙の本でMix-inは多重継承って言い切ってたな
313 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 17:44:20 ] >>311 そんなあなたに Scala をどーぞ。
314 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 17:47:26 ] >>312 多重継承の形してないだけで、実際は多重継承だと思う ・ 自作以外を include すると地獄 ・ 自作でも 2つ include するとわけわかめ ・ 下手に include せずにクラスメソッドとして単体利用すると異常に楽 とか一緒
315 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 18:12:17 ] 弱めた多重継承には違いない 実装を共有しつつ、ダイヤモンド継承とか面倒な問題は生じなくなる まあRubyの場合、今度は変数がぶつかる問題があるけど・・・・・ なんかSchemeの健全なマクロみたいに、 名前の衝突を自動回避できないのかね
316 名前:306 mailto:sage [2009/09/24(木) 18:26:57 ] >>315 モジュールのメソッドの中で自由にインスタンス変数作れちゃうんですよね そうするとたしかに変数名は衝突しますね。
317 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 20:13:26 ] ま、>>315 の言う通りだね。 多重継承には嫌な問題がたくさんあるけど、あれば便利な場面もある。 そこで、通常の継承は単一継承のみに制限した上で、多重継承したい場面のためにMix-inを用意してある、と。 この辺のバランスの取り方は、まさにRuby的。好き嫌いはあるとは思うが。
318 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 20:19:22 ] 実際問題として include ってあまりしないよねえ やろうと思えばできるって感じ 慎重に設計した上で組み込む必要があるから、あまり気軽ではない あと NameSpace::Application を include NameSpace して使う人はトイレのドア開けた瞬間に漏れろ
319 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 20:36:13 ] Ruby1.8 で include REXML したときの defined?(Encoding) の誤爆なんとかしろとか言ってた奴もうんこ漏れろ なんでもかんでも include するんじゃねえ include は「クラスパス」を短くするために使うもんじゃねえ irb> require 'rexml/document' irb> "s".force_encoding('BINARY') if defined?(Encoding) nil irb> include REXML irb> "s".force_encoding('BINARY') if defined?(Encoding) NoMethodError: undefined method `force_encoding' for "s":String from (irb):4 from /usr/lib/ruby/1.8/rexml/namespace.rb:37 これ関連で Ruby1.9 の文字列処理の場合分けを defined?(Encoding) でやってる奴も漏れなくうんこ漏れろ
320 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 20:41:52 ] Ruby のバージョンだけが問題なんだから RUBY_VERSION で場合分けすべきだよね defined?(Encoding) は時々見るんだけど、何が目的なのかな
321 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 20:51:16 ] defined?(Encoding)って何がまずいの?
322 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 21:00:52 ] Encoding という名前のモジュールまたはクラスまたは定数が定義されていること、ということしか調べられないこと >>319 のような問題が起こるし、Encoding という名前のクラスかモジュールがどこかに存在してさえいればいいとか Encoding という名前のクラスにならほぼ確実に存在して動作も確定なメソッドがあるという問題でもないわけで 文字列のエンコーディング処理に本当に必要なのはナニかというと Ruby 1.9.1 なわけで、 じゃあ素直に 1.9.1 の存在をチェックしたほうが素直なんじゃね、ということに
323 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 21:19:57 ] >文字列のエンコーディング処理に本当に必要なのはナニかというと つーか例えば>>319 の場合ならforce_encodingの存在チェックをするほうがよくね?
324 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 21:27:53 ] ダックタイピングとして意味がありゃあな
325 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 21:38:25 ] エンコーディングではなさそうだけど: 1.9以降の機能と思ってバージョンでチェックしていたら 1.8.8にバックポートされたでござる、という場合を考慮すると バージョンで全部OKというわけでもないだろうな。 ケースバイケースとしか。
326 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 21:43:06 ] いやそれでもそれはバージョンでチェックすべきだろう Rubyのバージョン名と機能の関係はそんなにまでも信頼できない魔境ではない ソース触れる人がアップデートすべきだ
327 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 09:01:16 ] ダッチタイピングに空耳した
328 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 15:43:22 ] だからRUBY_VERSIONで分岐すんなつってんだろ Encodingで被るなら::Encodingとか String.method_defined?(:encoding)とか 使えよ
329 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 16:03:28 ] ある機能を備えているかが定数の存在やメソッドの存在でしかわからないのが問題なのかな。 Open Classなのでいくらでも後から定数やメソッドを追加できるわけで。 かといって、Javaのパッケージみたいにドメイン名使って一意にするのも鬱陶しいけれど。
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 「<<」ってこういうところで使うんですね。 勉強になりました。ありがとうございました!
431 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 00:50:52 ] rubyを使ってgnuplotで簡単にグラフを書きたいんだけど、 何かお勧めありますか?
432 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 08:15:40 ] h = YAML.load_file(path) @username ||= h[:user]||h[:username]||h[:id]||h['user']||h['username']||h['id'] @password ||= h[:pass]||h[:password]||h['pass']||h['password'] イライラ
433 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 12:52:20 ] エディタから編集中のRubyのスクリプトを独立したウィンドウ、ターミナルで起動したい エラーがあったらエディタがそれを取り込んでタグジャンプしたい teeやら別のモジュールをrequireするのはなるべく避けたい もちろんユーザーはputs/getsを制約なく使いたい といううまいやり方ってないですか? ようするにエラーが出たらそれだけをログファイルに書き込んでrubyは終了コード1を返したいです 標準エラーをファイルに書き込むようなファイルをこっそり-rするのが現実的なんですかね
434 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 13:06:42 ] >>433 Emacs使え
435 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 13:10:50 ] 標準の ruby-mode で M-x run-ruby で Emacs 内に irb 開いて M-x ruby-load-file → Enter すれば irb でファイルが実行されるな エラー行ジャンプはどうしようか
436 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 14:56:39 ] >>432 >h = YAML.load_file(path) >@username ||= h[:user]||h[:username]||h[:id]||h['user']||h['username']||h['id'] >@password ||= h[:pass]||h[:password]||h['pass']||h['password'] YAML使ってるなら、キーは文字列になるだろうから、Symbolは考えなくていいんじゃないかな。 YAMLでわざわざSymbolをキーに使うとは考えにくい。 @username ||= h['user'] || h['username'] || h['id']
437 名前:デフォルトの名無しさん [2009/09/29(火) 19:21:13 ] 1万PVのPHPで作られたサイトをRuby(ROR)かScala(Lift)どちらかを使って バージョンアップしようと計画していますが、どちらがお勧めでしょうか? TwitterもRubyからScalaへ書き換えたりしていますので...
438 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 19:28:02 ] 問題ないならPHPのままにしておく
439 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 19:33:59 ] scalaって日本でも実績あるの?
440 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:17:30 ] 1万PVって何かを説明してるように見えて、実際はまったく説明してないよなあ。 開設以来10年で1万PVなのか、毎秒1万PVなのか。
441 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:21:10 ] >>434-435 特定のエディタの話はしてないんだけど…
442 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:22:53 ] 一応、単位としては1日か1ヶ月かのどっちかだな 1日1万PVならコンテンツによってはまあ普通 1ヶ月1万PVなら内容によっては閉鎖したほうがエコ どっちにしてもPHPで動いてるならPHPで増強したほうがきっと楽だ
443 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:24:12 ] >>441 だからEmacs使えって どうせ使いもしないで脳内で考えてるんだろ
444 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:28:12 ] エディタの布教は余所でやれ。
445 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:32:33 ] 求めること全部できるんだから仕方あんめえ エディタとして動作するものではEmacs以外ではgvimかPeggyくらいしか心当たりがない どう動作するのが効率いいかの研究もEmacsの動作見れば丸分かりだ
446 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:35:49 ] 特定のエディタじゃなくて何を求めてるんだ どんなエディタでも連携して動く万能スクリプトが欲しいのか
447 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:38:44 ] >>446 たぶんそうだと思う エディタ内でシェルを起動するのでなければ emacsclient みたいなシステムがないと無理だと思うんだけどね というか、できないからこそ数十年かけて Emacs が M-x compile を進化させてきたのではないんかのう
448 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:43:52 ] うん、Emacsのとか使ってれば「Rubyは特に関係ない」ということにすぐ気づけたはずなのに コンパイラ等が異常終了コードをシェルに返してエラー行を標準出力などに表示さえしてくれれば用は済む
449 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:45:04 ] $stderr.reopen($0 + ".errorlog")
450 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:54:21 ] >>442 単純にPVって言ったら普通に日単位だろ 何この馬鹿
451 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 23:38:21 ] >>437 >1万PVのPHPで作られたサイトをRuby(ROR)かScala(Lift)どちらかを使って >バージョンアップしようと計画していますが、どちらがお勧めでしょうか?
どういう理由でバージョンアップしようとしているのかがわからないので、答えられる人はいないでしょう。 パフォーマンスが理由ならRoRはイバラの道だし、開発効率が理由ならLiftはイバラの道。 どちらの道を選んでもイバラの道だと思うので、PHPのまま改善することをお勧めします。 あるいはPythonを使ってGoogleAppEngineにするとか。これもイバラだな。
452 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 23:47:46 ] railsは慣れてしまえば今までの開発が馬鹿に思えるぐらい楽になる
453 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 23:49:40 ] 日に1万PV程度なら、サーバ丸1台あればRoRでも余裕だよ。 下手するとキャッシュなしでもいけるくらい。
454 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 00:35:22 ] そりゃ1日8万秒以上あるんだから言われなくても分かる
455 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 06:13:47 ] 結局ピーク性能が足りるかどうかだよな。
456 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 08:24:47 ] そして既存のPHP+サーバではおそらく足りてるわけであって、 現時点で言えることは「じゃあPHPでやっとけ」にしかならんという
457 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 10:56:30 ] でも結局ピーク性能が足りるかどうかだよ。
458 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 11:42:46 ] おいちょっと待てよ、ピーク性能が足りてるかどうかが問題だろ
459 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 11:46:40 ] WebProg板に帰れ
460 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 12:24:24 ] 1ヵ月1万PVwww
461 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 12:57:50 ] いや、ここはピーク性能が足りるかどうかが肝だろ。
462 名前:デフォルトの名無しさん [2009/09/30(水) 18:46:43 ] 全角の数字を半角にしようと下記のフィルタつくったんだけど 変換されないで、元の値が戻ってくる。 何が間違ってるか教えてください。 使う文字コードはUTF-8です。 #全角数字を半角数字に変換するフィルタ def zen_to_han_int(str) outstr = str.gsub(/0/,"0") outstr.gsub!(/1/,"1") outstr.gsub!(/2/,"2") outstr.gsub!(/3/,"3") outstr.gsub!(/4/,"4") outstr.gsub!(/5/,"5") outstr.gsub!(/6/,"6") outstr.gsub!(/7/,"7") outstr.gsub!(/8/,"8") outstr.gsub!(/9/,"9") return outstr end
463 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 18:52:32 ] >>462 str とスクリプトファイルの文字コードが合ってない ごく一般的には str とスクリプトの正規表現リテラルの文字コードは同一にする …あーつまりスクリプトのファイルが UTF-8 じゃないか str が UTF-8 じゃないか あるいは ruby -Ku のような実行指定をしてないかどれか
464 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 18:53:19 ] 今はじめて気がついたけどメイリオって数字が全角と半角全く同じに見える。きめぇw
465 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 18:54:43 ] def zen_to_han_int(str) p "yes!" if /0/ =~ str end これで 0 を含む文字列渡したときに "yes!" と表示されなければ>>463
466 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 20:10:23 ] むしろ、メイリオになってから、半角全角混同さんが気にならなくなりました ^p^
467 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 20:12:28 ] やっとWindowsに標準添付された真の意味での表示用のフォントだからな 表示されるぶんには全角半角の区別がある意味は何もないわけで つまり区別が必要な人は使ったら駄目よ
468 名前:デフォルトの名無しさん [2009/09/30(水) 20:25:22 ] >>463-465 見直したら、スクリプトがS-JISでかかれてました。 $JCODE = "UTF-8" ってやってもだめなのね もうひとつ、お願いします。 #数字に変換できるか def intrger_string?(str) begin Integer(str) return true rescue ArgumentError return false end end Rubyレシピブックのまるぱくりなのですが 3桁の先頭に0を含む文字列を渡すとfalseになる場合があります。 例えば078から099までのあいだとか これも原因が良くわかりません。 どなたか教えてください。
469 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 20:30:25 ] >>468 8進数
470 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 20:30:28 ] 該当メソッドのマニュアルくらい読め ttp://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html#Integer マニュアル読んだ上でここがわからんとかそういう質問してくれ どうせマニュアル読んで調べてる時間のほうが長いんだから、マニュアルの見方を勉強したほうが結局は得だ
471 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 21:18:02 ] >>468 $JCODEってなんやねん
472 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 21:21:37 ] >>468 0x1234 とかも渡してみろ。
473 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 21:47:46 ] >>468 正規表現じゃだめなん? del integer_string?(str) return str =~ /¥A¥d+¥z/ end
474 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 22:25:26 ] >>469-470 お恥ずかしいです 下記のように書き直しました def intrger_string?(str) if str.gsub(/\d/,"").size == 0 then return true else return false end end >>471 $KCODEの間違えです(´Д⊂
475 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 22:32:57 ] >>473 それだと2/8/16進表記に対応してないから>>468 とは別物になるぞ
476 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 22:56:18 ] >>474 メソッド本体だが、ifの条件式が 成立したら(=false, nil以外を返ったら)true 成立しなかったら(=falseかnilが返ったら)false を返すだけなので、その条件判定式だけでruby的には十分。 ところで str == '' のときはtrue/falseどっちになって欲しいのだろう?
477 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 08:49:38 ] >>475 十進だけにしたいんだろ /\A\d+\z/ =~ str が最善だと思う
478 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 11:28:02 ] hoge= メソッドと hoge メソッドって、どっちが先に定義されてると自然? reader があってから wiriter があるとわかりやすいよね?
479 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 14:25:42 ] attr_reader :hoge def hoge=(value) でやるのが俺の定番 でも両方書くなら書きやすさ的にライタ側から書くかなあ
480 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 16:38:52 ] ここの真ん中辺のコードなんですが ttp://www.aoky.net/articles/why_poignant_guide_to_ruby/chapter-4.html wordlist.rb code_words = { 'スターモンキー' => '新帝国の神経質な閣僚のフィルとピート', 'カタパルト' => 'chuckyゴーゴー', '火炎瓶' => '暖房つきのリビング', 'ナイジェリア' => "Ny and Jerry'sドライクリーニング(ドーナッツ付き)", 'とどめをさす' => 'コンセントをさす' } require 'wordlist' # 邪悪なアイデアを取ってコードワードと入れ替える print "新しいアイデアを入力してください: " idea = gets code_words.each do |real, code| idea.gsub!( real, code ) end メソッドdoのブロック引数で、real, codeの二つが出てきます。 これはなんですか?意味がわからないです。。。 コピペで、rbファイルを2つ作って、下のコードをruby hoge.rbとして実行しても 想定通り動きませんし・・・
481 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 16:53:16 ] >>480 こゆこと これなんぞと思ったら出力して中身を見れ code_words.each do |key, value| puts "#{key} -> #{value}" end ナイジェリア -> Ny and Jerry'sドライクリーニング(ドーナッツ付き) カタパルト -> chuckyゴーゴー スターモンキー -> 新帝国の神経質な閣僚のフィルとピート 火炎瓶 -> 暖房つきのリビング とどめをさす -> コンセントをさす
482 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 16:54:10 ] だからそういう文法というか基本クラスのメソッドの使い方っぽいのは マニュアルを一応眺めてから「ここの部分がさっぱりわからんおまえら親切に教えろ」とか言ってくれ 親切かどうかはともかくおおむね解説なりツッコミなりが入るからさ ttp://www.ruby-lang.org/ja/man/html/Hash.html#each > key と value を引数としてブロックを評価します。 self を返します。 {:a=>1, :b=>2}.each_pair {|k, v| p [k, v]} # => [:a, 1] [:b, 2]
483 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 16:54:20 ] doはメソッドではない。ではdoでなければメソッドは何でしょう?
484 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 16:59:00 ] >>482 それはマニュアルを読むだけの力があるのに 手抜きして読まない人向けのお言葉
485 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:00:29 ] >>483 do はブロック開始の(予約)文字列 メソッドに引数を渡すときの ( と ) それそのものがメソッドではないのとおおむね同じ理屈 文字列だからたまたま読めるだけで、別に <<<<<< >>>>>> でもよかった
486 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:06:57 ] >>481 eachメソッドがハッシュに対して使われたときは、その引数は |key,value|という形になるわけですね。 >>482 申し訳ないです。 >>483 481の結果からすると、each(すべての要素にたいして)do以下を行えという ことだと思いますが、メソッドでないならdoはなんだろう。
487 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:14:30 ] >>481 実行してみました。 undefined local variable or method `code_words' for main:Object (NameError) というエラーが出ました。code_wordsが定義されていない?
488 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:20:19 ] 初心者が最初にwhyの感動的rubyガイドで勉強するのは 不適切だったりしますか?
489 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:44:46 ] >>488 こっちのが無難 www1.tf.chiba-u.jp/~shin/tutorial/index.rb
490 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:56:55 ] >>486 だから、doは予約語だってば。 ifがメソッドでないのと同じ。
491 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:12:37 ] > >>483 > 481の結果からすると、each(すべての要素にたいして)do以下を行えという > ことだと思いますが、メソッドでないならdoはなんだろう。 そのeachはなんですか? すべての要素にたいして、というおまじないか何かですか? プログラミング言語はそういうふわふわとしたものではないです。
492 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:21:35 ] おまいら、ここは初心者スレだ。 初心者っつーのはとんでもない思い込みや勘違いをしていることも多いんだから あたたかい目でみてください。 >>486 >メソッドでないならdoはなんだろう。 すでに指摘があるように、doは構文を表す予約語のひとつです。 while i < 10 do print i end では、whileやdoやendが予約語です。なおこの場合ならdoは省略可能。 [1, 2, 3].each do |x| puts x end なら、each や puts はメソッド名、do と end は構文を表す予約語。
493 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:39:54 ] do が何だかわかりませんレベルの人には来て欲しくないな 質問するなら最低限、言語の基礎は身に付けておいて欲しい これくらいは自力で学習、調査しておくのが質問する側のマナーだろう
494 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:42:28 ] そもそも、動作としては arr.each(ブロック) なんだよ オブジェクト arr の インスタンスメソッド each に引数でブロックを与えている ただ、便利なブロックがこのままだとたいそう使いにくいので [1,2,3].each(do |e| p e endのブロック、ただし実行できるならこのブロックを要素ごとに実行すること) といちいちテクニカルにする代わりに [1,2,3].each do |e| p e end と平易に書くように Ruby を作ったのだ このへんの動作が気になるなら my_block = lambda do |e| p e end [1,2,3].each(&my_block) とでも書いてみるといい
495 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:58:26 ] >>493 思考過程の筋が見えるなら特に問題はないと思われ まあ、つまりは「勝手に省略せず詳しく書け」ということでしかないわけだが 若干のエスパー能力が要るから万人には勧められない
496 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 19:29:15 ] 理解としては>>486 でまったく問題ないのになんでこんなことになってるんだ
497 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 20:58:03 ] 申し訳ありません。whyのrubyガイドが 最初の方は、とてもわかりやすかったのです。 読み進めていると、コードが出てきて、ruby ファイル.rbと実行しても エラーが出たりするようになり、僕はアホなのだろうかと思って質問しました。 初心者向けとして適当でないようなので、もうすこし文法を押さえながら 読んでみようと思います。ありがとうございました。
498 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 23:29:17 ] >>493 >do が何だかわかりませんレベルの人には来て欲しくないな おまえは>>1 を声に出して10回よめ。 この程度が我慢できないやつはこのスレくるな。
499 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 23:41:55 ] でも>>493 程度が我慢できない人は2chに来るべきじゃないよね。
500 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 23:45:19 ] せめてネタ系のスレで頑張ってもらえるとありがたいんだけど そうもいかないんだろうね
501 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 00:48:12 ] rubyに限らず初心者スレッドは全てを受け入れる糞溜だと思ってる
502 名前:デフォルトの名無しさん [2009/10/02(金) 05:22:34 ] 日本語の文字抽出でうまい方法が分からず困っています。 抽出元のサンプルは下記の通り 11 ○ × abcDefghIjkLmnoPqrsTu 00:00:59 abs この、文字列を抽出したいんdesu. 09/10/02 00:16:55 69 上記サンプルのうち、「この、文字列を抽出したいんdesu.」の部分を抽出したいんです。 抽出対象:日本語、句読点、日本語文字列に付随する半角英数字、半角記号("テスト."等。空白類を挟んだら不要対象とする) 不要対象:半角英数字、半角記号、空白、"○"、"×"等 現在のコードは下記の通り while line=gets if /\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*/ =~ line if $1 != " " print "日本語抽出:", $1, $2, $3,$4,$5,$6,"\n" end end end 実行結果↓ 日本語抽出:○ × ::この&カ字列を抽盾オたいん (続きます)
503 名前:デフォルトの名無しさん [2009/10/02(金) 05:25:20 ] (続き) if文の条件が大変なことになっているのは if /(\W+)/ =~ line としてしまうと最初の"○ ×"のみ抽出して終わってしまうためです。 プログラムとして力技で美しくないのは分かっています。 また、日本語が文字化けしてしまっています・・・文字コードの問題だろうとソース先頭に#!ruby -Ksを足してみましたが、 空白類の扱いが変わった?のと記号以外の文字類が表示されなくなりました。 抽出部分を綺麗にするにはイテレータで回せば良いかなと思っています。 →一文字ずつチェックしようと思いましたが、String#each_byteが全半角を問題なく捌けるのか問題が・・・ 問題をまとめると 1:文字列の中から上記抽出対象のみ抽出したいが、力技で汎用性がないので改善したい 2:文字化けしてしまうが原因、対策が分からない となります。 OSはWindows XP SP3でRubyのバージョンは1.8.6です。 長文乱文で分かりにくい質問となってしまい申し訳ありませんが、よろしくお願いします。
504 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 05:32:32 ] まあrubyはメゾットの様なものが多いのも事実だけどな。 そこらの統一性の無さは、原理追求派よりも教祖信仰派のほうが多いってだけじゃないかと。 メゾットだからこうって寄りも、教祖がこう使う様に教えたから深く考えずに同じ様に使うのほうが、良いruby信者に成れる気がする。
505 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 05:36:40 ] irb> s = "11 ○ × abcDefghIjkLmnoPqrsTu 00:00:59 abs この、文字列を抽出したいんdesu. 09/10/02 00:16:55 69" irb> puts s.split[6] この、文字列を抽出したいんdesu. 空白で区切られた7フィールド目という意味ならこれでいいのでは フィールド内に半角空白が混じっても構わないという条件だととたんに面倒になるが
506 名前:503 [2009/10/02(金) 06:02:35 ] >>505 レスありがとうございます。 すみません、確かにサンプルに限定すればそれで解決ですね。 ただ、やりたいのは日本語部分(日本語文字列に付随する記号類、英数字は抽出対象とする)の抽出なのです。 質問の書き方が悪かったのですが、おっしゃる通り、日本語列の中の空白、記号、英数字、 もしくは日本語列の先頭・末尾の半角英数字、記号類は抽出したいんです。 (日本語列と結合していない日本語以外(英数字、記号、空白類)は除外)
507 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 06:13:51 ] 結合ってなんだ?
508 名前:503 mailto:sage [2009/10/02(金) 06:21:11 ] >>507 付随と同義です。ややこしくてすみません。 文字列の結ご・・・連結ですね。すみません。
509 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 06:46:02 ] >>507 おそらく、セパレータとフィールドという概念がないんだと思う だから、元データを作った人の意図を読むことができないし、説明もできてないから俺らもどうにもできん たとえば、俺らは>>502 を見たときに 「番号、マルバツ、マルバツ、英数字、時分秒、英数字、日本語入り文字列、年月日、時分秒、数字」 という空白で区切られた固定の何らかの意味を持った10項目(または年月日+時分秒の9項目)と読むが、 >>503 にとってはおそらくそうではないのだろう ひょっとしたら例示のために出しためちゃくちゃな文字の集まりなのかもしれない 空白の数には全く意味がなく、 形態素解析のように「空白で区切られた、日本語文字を含む文字の連なり」が欲しいのなら split.find_all{|e| <eがShift_JISの日本語文字を含むということ> } とすればよい Shift_JIS (というかたぶん CP932)の日本語文字を含む条件を表す正確な正規表現はどっかから拾え irb> s = "11 ○ × abcDefghIjkLmnoPqrsTu 00:00:59 abs この、文字列を抽出したいんdesu. 09/10/02 00:16:55 69" irb> puts s.split.find_all{|e| /[\xa1-\xdf]|[\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc]/n =~ e}.delete_if{|e| /\A[○|×|△]\Z/s =~ e} この、文字列を抽出したいんdesu.
510 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 10:01:18 ] >>503 >>509 のようにsplitで配列にしてからfind_allでもいいし 文字列に繰り返し正規表現をしたいのならscanてのもある Array,String,Hash,Enumerableあたりのメソッドは軽くリファレンスに目を通しておくといいよ へぇこんなのあるんだっていう程度でも使う時に思い出せる
511 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 10:02:44 ] -Ksを指定するとShift_jis全角文字も\wでマッチするようになる
512 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 10:18:29 ] >>511 「も」では駄目だろ 英数字記号だけの場合はマッチしてはいけない irb> /\w/ =~ "あういえ".tosjis nil irb> $KCODE = 's' irb> /\w/ =~ "あういえ".tosjis 0 irb> /\w/ =~ "a" 0 全角文字(と場合によっては半角カタカナ)にのみマッチする正規表現か、 英数字記号だけにマッチして全角区域に誤爆しないという正規表現が必要
513 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 10:32:08 ] >>512 ああすまん-Ksにして結果が変わった原因ってことで書いただけなんだ
514 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 11:09:04 ] ruby って、ライブラリやクラスメソッドの使い方を 覚える言語ってことですか?
515 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 11:10:33 ] オブジェクト指向言語は大体そんなもんだ
516 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 11:26:59 ] 大抵のプログラミング言語において、文法なんて数時間で全部理解し終えるもんだからなあ。 後は当然ライブラリの使いこなしってことになるだろう。
517 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 11:32:04 ] クラスメソッドよりもインスタンスメソッドのほうが多いよ! とかそんな話を 別に覚えなくてもいいけど、その場合はライブラリに相当するものを全部自力で作ることになる どっちか気に入ったほう選んでくれ
518 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:13:39 ] Windows版のRubyって、OpenSSLも使えるんでしょうか。 知っている人がいたら教えてください。
519 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:22:50 ] パッケージ次第だった気もするけど、基本的に使える
520 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:24:35 ] >>518 推奨されてるパッケージでインストールする限りは使えるはず 他の人のWindows版でも絶対に使えるとは限らないのは他のOS版のRubyと同じ
521 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:42:25 ] ありがとうございます。 RSAの仕組みを勉強するのにRubyを使うことにします。
522 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 14:40:48 ] rubyでは、値がすべてオブジェクトということは 1という数値や"太陽パクパク"という文字列や、それらを代入した number,sun_eaterといった変数もオブジェクトということですか? number = 1 sun_eater = "太陽パクパク"
523 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 14:59:20 ] >>522 整数とかはさすがに高速処理するように小細工を施してはありますが、 それらも含めオブジェクトは全部クラスのインスタンス(=オブジェクト)です irb> p 1.class Integer irb> p "太陽パクパク".class String 変数はオブジェクトについたラベルです ラベル名 → オブジェクトID というような対応表を Ruby が管理していて、 該当ラベルの変数が呼ばれたときにはその表の対応を参照して該当オブジェクトが使われます 変数というハコが入れ物オブジェクトとして存在するわけではありません irb> p 1.object_id 3 irb> p "太陽パクパク".object_id -605838888
524 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:06:21 ] >>522 >rubyでは、値がすべてオブジェクトということは >1という数値や"太陽パクパク"という文字列や、それらを代入した >number,sun_eaterといった変数もオブジェクトということですか? 数値や文字列もオブジェクト。 ただし、「変数」はそれらオブジェクトを格納するもの(あるいはオブジェクトとひもづけるもの)であって、オブジェクトそのものではない。 そのへんは他の言語でも同じ。
525 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:08:38 ] >>523 変数はオブジェクトじゃなくラベル。 あやうく、間違った認識で通り過ぎるところでした。 ありがとうございます。
526 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:10:25 ] >>524 他の言語でも同じなんですね。ありがとうございます。
527 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:50:19 ] C++、Perlでは宣言された変数自体がオブジェクトの実体であるケースもあるけどね と、話をややこしくしてみる
528 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 17:55:56 ] 他言語がどうであれ、Rubyにおいて変数は箱ではなくラベルなのは間違い無い 沢山あるオブジェクトの中のいくつかに名前を付けるのが変数 1つのオブジェクトに複数の名前があることも珍しくないし 無名のまま役割を終えるオブジェクトも存在する
529 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 17:58:09 ] だいなみっくえいりあしんぐ
530 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:04:25 ] 2chまとめエディターを作っているのですがどうにもこうにもならなくなってしまったのでヒントをください。 やろうとしていることは DATの中身をコピペで入力 ↓ 下ごしらえの置換 アンカー順に並べ替える チェックボッックスによるdivのclassの追加(文字色を変えたり大きくしたりするため) ↓ ソースを出力 というものです。 ひとまずここまでひとりでつくりました。 tomiya.bne.jp/cgi-bin/upup/src/myg_l2344.zip.html やっていることは 簡単な置換とレスに1〜1001までの番号をハッシュとして付ける ことまでです。 教えて欲しいことは アンカー順に並べ替える方法 本文をスキャンして「>>○○」を抽出しハッシュのkeyに代入? チェックしたレスのみ出力する方法 チェックボックスでdivのclassを追加 <div class="res">を<div class="res aka">や<div class="res aka deka">などに置換? です、見当がつきそうな方はどうかご教授ください。
531 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:26:40 ] オブジェクトについて、もうひとつ質問です。 class Gohan def caree print "今日のご飯はラーメンだ\n" end def natto print "朝飯は納豆だ\n" end end yuhan = Gohan.new yuhan.caree asamesi = Gohan.new asamesi.natto この場合、yuhanやasamesiがオブジェクトになるのでしょうか?
532 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:29:10 ] ARGVで漢字のフォルダ名が展開できず困っています。 英字だと >ruby -e "p ARGV" hon/* ["hon/新規テキスト ドキュメント.txt"] となってうまくいきますが、漢字だと >ruby -e "p ARGV" 本/* ["本/*"] となってしまい、フォルダ内の新規テキスト ドキュメント.txtが展開されません。 どうすれば展開できるかご教示ください。 OSはWindows XP SP3です。 >ruby -v ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32]
533 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:31:30 ] Ruby標準のCGIクラスって、どれぐらいの大きさのデータを受け取れるのでしょうかね? DBの内容をWeb上からバックアップ(DL)したり、復帰させたり(UP)するシステムを考えてるのですが バックアップするときは、ストリーミングで流せばいいような気がするけど 復帰させるときは、大量のデータが一度メモリに溜め込まれる気がします たとえば、サーバの実メモリを超えるようなデータを受け取ったときに処理できるのか?っていうのが疑問です。 また、なにか回避策が有るのでしたら、教えてください。
534 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:35:45 ] ワイルドカードの展開ってシェルの役割じゃ・・・? と思ったらWinではやってくれないのか
535 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:39:19 ] >>531 >>523
536 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:42:14 ] >>532 ARGV の処理は環境依存 コマンドプロンプトで DIR 本/* とやって、望みの出力が得られなければ ARGV では無理というかコマンドプロンプトの使い方の知識が足りない
537 名前:532 mailto:sage [2009/10/02(金) 18:50:17 ] >>536 それはうまくいきます。/の代わりに\ですが。 >dir 本\* ドライブ D のボリューム ラベルは以下略 >ruby -e "p ARGV" hon\* ["hon/新規テキスト ドキュメント.txt"] 英字は/でも\でもok >ruby -e "p ARGV" 本\* ["本\\*"] 漢字はどっともだめ
538 名前:532 mailto:sage [2009/10/02(金) 18:55:24 ] 書き忘れ >ruby -e "p ARGV" */* ["hon/新規テキスト ドキュメント.txt", "本/新規テキスト ドキュメント.txt"]
539 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:56:09 ] >>530 #!/usr/local/bin/ruby -Ks class Ch2Thread def initialize(file) @dat = file parse end attr_reader :data, :title, :size def [](v); @data[v]; end def parse @data = Array.new arr = @dat.to_a arr.each_with_index do |res, i| @data << parse_res(res, i) end @title, @size = arr[0].split(/<>/)[-1], @data.size end def parse_res(res, resno) e = res.split(/<>/) d = e[2].split return {:no => resno + 1, :name => e[0], :mail => e[1], :date => "#{d[0]} #{d[1]}", :id => d[2], :be => d[3], :res => e[3]} end end sure = Ch2Thread.new(File.open('./sample.dat').read) puts "Title => #{sure.title}" sure[0..3].each do |res| res.each{|k,v| puts "#{k} => #{v}"} end
540 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:59:22 ] >>532 WinXP SP2 + ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32] だけど展開してくれた。なんなんだろうね
541 名前:540 mailto:sage [2009/10/02(金) 19:02:24 ] SP3だった・・・ あとコマンドプロンプトから動かしてる? 専用エディタとかから走らせたりしてると挙動が違ってくるかも
542 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:03:55 ] >>532 ren 本 書 ruby -e "p ARGV" 書/* 1.9のglob周りは多バイト文字に関しては腐ってるね。
543 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:04:15 ] 1.9.1リファレンスより >標準のシェルがワイルドカードを展開しない環境 (Win32)では、Ruby インタプリタが自前でワイルドカードを展開して Kernel::ARGV に設定します。 らしいからできるはずだと思うけど うち(Vista コマンドプロンプト)でも 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32]だと 本\* 本/* どっちも認識してくれるけど 1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32]だとできなくなってるな
544 名前:532 mailto:sage [2009/10/02(金) 19:11:36 ] ご確認いただきありがとうございます。 うちも1.8.7はokでした。 1.9.1で通る漢字もありました。 >ruby -e "p ARGV" ホン/* ["ホン/新規テキスト ドキュメント.txt"] >ruby -e "p ARGV" 川/* ["川/新規テキスト ドキュメント.txt"] >ruby -e "p ARGV" 山/* ["山/新規テキスト ドキュメント.txt"]
545 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:14:53 ] Ruby Freaks Lounge 第8回 Windows版Ruby 1.9で培う危機回避スキル(前編) gihyo.jp/dev/serial/01/ruby/0008 Rubyで日本語ファイル名と聞いた瞬間に悪寒がする漏れは正しかった
546 名前:539 mailto:sage [2009/10/02(金) 19:16:56 ] とりあえずレスの全データを扱いやすい形に整えないと見通し的にどうにもならないような気がしたので、 たとえばこんなクラスを作る 動作は超適当 変数名も適当 レス本文のHTMLタグとかを消したい場合は parse_res のとこで適当に追加してくれ クラスでなくてもでっかいハッシュや配列を作るのでもいいんだけど面倒だったのでクラスにした
547 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:19:00 ] 日本語とかマジで廃止しろよ 100年前に廃止してくれてれば今頃こんな苦労することも無かった
548 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:23:46 ] >>547 PC/AT互換機使うのいますぐやめろ 元凶はそれだ ずっとNECなら日本語処理は完璧だったのだ
549 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:24:14 ] たいした苦労もしてないくせに
550 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:25:48 ] 悪いのはシフトJISだよ 日本語は悪くないよ EUCばんざーい
551 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:29:40 ] もはや現実逃避しかないのか・・・・・・w
552 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:35:07 ] 松江市さんは、rubyのドキュメントをしっかりしたものに してください。
553 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:40:25 ] >>533 >たとえば、サーバの実メモリを超えるようなデータを受け取ったときに処理できるのか?っていうのが疑問です。 添付ファイルデータなら、cgi.rb が一時ファイルに書き出してくれるので、実メモリを超えても大丈夫なんじゃないかなあ。 >また、なにか回避策が有るのでしたら、教えてください。 そのような場合は、cgi.rbを使わず、自前で$stdinからPOSTデータを読み出したほうがいいと思います。
554 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:58:15 ] >>548 78JISに拘泥して混乱を広げた元凶だということも知らずに呑気な馬鹿だ。
555 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:01:03 ] >>542 で必要最低限のことは全部触れられていそうだな 「本」をShift_JISとして見ると2バイト目が { なので、rubyのglob特殊文字になる。 というわけで、1.9では、2バイト目がrubyのglob特殊文字になる文字列をコマンドライン引数に与えると危ない、と。
556 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:04:04 ] 文字のエンコードが1種だけなら問題ないという話だろ
557 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:14:38 ] 勉強せずにスラスラ英語の文書読めるプログラマと、毎日英語と奮闘してるプログラマ どれだけ差が開くと思う? つまり日本がこの業界でアメリカに勝てないのは必然だ
558 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:20:16 ] 単なるrubyのバグの話でしょ
559 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:24:39 ] Rubyに限らず 引数の文字コードって どんなふうに判別するものなんだろう?
560 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:35:10 ] 引数の文字列自体はWindows-31Jにしてくれてるぞ
561 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 23:35:11 ] インターネット時代なんだしJISで統一すれば何もかもうまく逝ってけどな。 いまからならOSもメールもウェブもUTFで統一。
562 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 23:42:47 ] 文字コードとかごちゃごちゃし過ぎて分からんから指定できるところはとりあえず全てUTF-8にしてる。 特に問題が起きたことはない。
563 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 23:43:48 ] Win32で1.9.2プレビュー1をビルドしようとしたができんw clにminiprelude.cがないぞゴルァって言われる あるしちゃんとインクルードパスにも入ってるのに・・・
564 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 01:45:15 ] >>546 おお、ありがとうございます。 しかしこれからどうしたらいいのか全然アイディアが浮かばないんです。 どういう方向性でいけばいいのでしょうか。
565 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 02:06:27 ] >>564 わかんねーときは、わかる機能だけで作ってみるといいよ ゴールを遠くに設定しすぎてるから方向わからないんだよ、チェックポイント作りまくれ
566 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 05:59:16 ] いきなり無茶し過ぎなんだろ。小さい所から順々にステップアップしないと。
567 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 14:37:28 ] とあるフォルダの中のファイル名をずらーっとデータベースに入れたのは良いんですが、 この後ファイルがそのフォルダに追加されるごとにデータベースも更新したいです。 差分を取る方法を教えてください。
568 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 14:39:12 ] >> [1,2,3]-[1] => [2, 3] ファイルリスト程度ならオンメモリで余裕だろう
569 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 14:49:58 ] データベース自体は Ruby 以外を使うか、pstore に保存して cron とかで毎回読んでくれ
570 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 15:23:49 ] >>565 >>566 なるほど、そういう考えもありますね。 もうちょっとこつこつやるべきでした、ありがとうございます。
571 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 19:30:46 ] requireとかを使って外部のファイルを読み込むときですが main.rb class Main def initialize @foo = Array.new require 'sub.rb' end end main = Main.new [EOF] sub.rb @foo.concat ['hoge'] [EOF] みたいな場合にsub.rbからmain.rbの@fooにアクセスするにはどうしたらいいですか? よろしくお願いします
572 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 19:40:01 ] rquireは、対象コードをその位置に展開するメソッドではない。 中身が何でも気にしないなら eval File.read('sub.rb') とでも。
573 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 19:43:37 ] >>571 require はトップレベルにファイルを「追加」する ファイルを物理的に大きな1枚のファイルにする効果しかない(いや物理的って変だが) メソッドの「奥深く」で require しても、クラス定義の外で普通に require したのと何も変わらない それと、Ruby では、単純な行単位の切り取りを行うことはできない 現在のクラスにメソッド定義内で機能を追加するには、たとえば module の include を使う メソッド単位でしか追加できないので、そこは要領よく機能を分ける # sub.rb module Sub def add_hoge @foo.concat ['hoge'] end end # main.rb require 'sub.rb' class Main include Sub def initialize @foo = Array.new add_hoge end end p Main.new.instance_variable_get('@foo')
574 名前:571 mailto:sage [2009/10/03(土) 19:57:00 ] >>572 ,573 レスありがとうございます。言葉足らずですいません・・・ sub.rbにはclassも書いてあるのでその場に展開されるとエラーになります・・・ sub.rbに書いてあるクラスをsub.rb内で初期化してそのオブジェクトをmain.rbの 方に持ち帰りたいです(プラグインシステムみたいな感じ) グローバル変数を使えば出来るようですがあまりスマートじゃない感じですので もうちょっとすっきりする方法があればと・・・ よろしくお願いします
575 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 20:16:58 ] class Main def initialize(plugin_name) @foo = Array.new require plugin_name plugin_mod = Object.const_get(plugin_name.capitalize) extend plugin_mod do_something end end Main.new('plugin1') # plugin1.rb module Plugin1 def do_something @foo.concat('hoge') end end
576 名前:571 mailto:sage [2009/10/04(日) 15:48:48 ] >>575 extendで何とかなりました ありがとうございました
577 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:06:53 ] ちょっとした質問です。 items.each{ |x| x.destroy } というようなこう全部の要素にたいしてメソッドを呼ぶのを もっと簡単に書く方法があったような気がしたのですが、ご存知ありませんでしょうか? Ruby 1.8.7です。
578 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:09:46 ] &:destroy
579 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:11:34 ] >>578 それだ! items.each(&:destroy) でいけましたありがとうございました。
580 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:21:21 ] 1.8.6 では動かないから配布には注意な
581 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 21:11:40 ] 1.8.6 なんてもう使わない方がいいよ
582 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 22:36:26 ] >>581 なんで?
583 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 22:49:02 ] >>581 さんがサーバソフトウェアのリプレースを行ってくれるそうです
584 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 23:38:28 ] 感謝の印におっぱい見せろ
585 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 23:39:11 ] ごばくった。すまん
586 名前:デフォルトの名無しさん [2009/10/05(月) 23:44:01 ] >>584-585 wwwwww
587 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 06:33:24 ] お礼におっぱいを要求するような人間が使う言語、それがRuby
588 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 10:13:13 ] だがそれがいい
589 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 12:14:57 ] テンプレに追加しといて。 質問する人へ: 回答をいただいたら、ありがとうの言葉とともに、感謝の印としておっぱいを見せましょう。
590 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 08:45:57 ] 教祖もおっぱい成人だったか。
591 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 17:45:26 ] >>573 > require はトップレベルにファイルを「追加」する > ファイルを物理的に大きな1枚のファイルにする効果しかない(いや物理的って変だが) $ cat s.rb a=1 def f; 1; end $ cat c.rb require './s' p defined? a p defined? f $ ruby c.rb nil "method" $ ruby -v ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux] トップレベルでのローカル変数のスコープは require/load を越えないのでしょうか?
592 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:00:48 ] require や load した場合、ローカル変数だけは、ファイルごとにスコープがあります ローカル変数という概念を保護する制限だと思ってくだされ require ではなく Ruby スクリプトファイルとして読み込んで実行することで制限を乗り越えることができますが勧めません ファイルとモジュールの構造を変えることのほうを強く勧めます
593 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:09:36 ] 数字をキーに持つハッシュがあり その中で一番小さい数のキーの値を取り出したいのですが 単純に書くと以下になるんですが 他に何かこれだという方法はないでしょうか? h = {2 => "a", 5 => "b", 7 => "c"} p h[h.keys.sort[0]] => "a" これで問題があるわけではないですが 他に方法がある気がしたので質問させてもらいました
594 名前:デフォルトの名無しさん [2009/10/07(水) 18:12:38 ] hoge = moge.execute print hoge というとき、print hogeの hogeのところで moge.executeが参照され 実行されて得られた結果が、printされるという理解でいいですか?
595 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:15:16 ] >>593 素直に書くなら h[h.keys.min]
596 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:18:42 ] >>594 一行目の時点で >moge.executeが参照され実行されて得られた結果 がhogeに収まる 二行目はすでに収まってるhogeの中身を出力するだけ >>594 の日本語の部分をrubyで書くとこんな感じ? hoge = Proc.new { moge.execute } # moge.executeはまだ実行されない print hoge.call # Procを実行する(moge.executeが実行される)
597 名前:デフォルトの名無しさん [2009/10/07(水) 18:22:48 ] rows = dbh.do("INSERT INTO people (name,height) VALUES('Wanda',62.5),('Robert',75),('Phillip',71.5),('Sarah',68)") printf "%d rows were inserted\n", rows ruby/dbiの使い方ページにあるコードの抜粋なんですが、実行すると 4 rows were insertedと表示されます。 printf "%d " , rowsで、rowsから何かの数字を得ているようなのですが どういう動きをしているんでしょうか?
598 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:24:35 ] そのような目的に使うデータ構造としては、ヒープツリーや優先順位つきキューというものがあり、 Rubyには長らくこれが標準だというような実装がなかった。ので、自分で作るか、 既存のものをさがすかということになります。 以下、最近できたものなので、あるよ、という紹介しかできませんが、 depqという優先順位つきキューのgemがあります(あるはずです)。 ttp://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-dev/39248?39066-39441
599 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:25:21 ] >>598 は>>593 あてね
600 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:25:45 ] >>596 考えていたことと逆でした。ありがとうございます。
601 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:35:10 ] >>597 ttp://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html#printf ttp://www.ruby-lang.org/ja/man/html/sprintf_A5D5A5A9A1BCA5DEA5C3A5C8.html 個人的には Ruby ではないので嫌い to_s で問題の起こらない範囲で puts "#{rows} rows were inserted" と書くべき
602 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:40:22 ] >>601 String#%は?
603 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:42:04 ] >>602 異端審問される恐れがあるので 人前に晒すスクリプトでは使わないように
604 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:44:10 ] スタイルの押しつけうぜぇ
605 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:57:14 ] 個人的にString#%は蛇道
606 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:57:21 ] >>601 どもです。putsに書き換えて実行したところ同じように出ました。 どこから、4という数字を得ているのでしょうか? 上の式だとdbh以下を実行して 4つの要素をDBに登録していますよね。
607 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:57:53 ] >>604 Ruby使うの今すぐやめれ プログラミングスタイル強制要素が無数に散りばめられてるぞ
608 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:58:58 ] >>601 君にはPythonが向くんじゃないかな?性格的に。
609 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:02:23 ] >>608 sprintf は Ruby のものではないということを知らない?
610 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:04:06 ] >>606 そりゃそういうふうに作られてるからだろ do のマニュアル読め わざわざカウントして数値を返してるようなので初心者殺しではある
611 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:10:25 ] sprintf と pack/unpack は「Ruby らしい」糖衣実装が望まれていながら、 ダラダラと旧来の仕様を引きずってきたんだよな オタクが他の言語の知識を流用できて便利というただそれだけの理由で
612 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:14:00 ] >>611 あれは正規表現みたいなサブ言語だと思って諦めるのが吉かと思われます 確かに覚えにくいしなんとかしたほうがいいのは確かなんだけれど あれをまたまとめて別途組み立ててしまうとそれだけで結構な一覧表に
613 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:17:18 ] >>610 どもっす。doのマニュアルを探してきます。
614 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:18:04 ] printf類にrubyらしい実装なんて不要 他の言語と違う動作されたらそれこそ非難の的
615 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:24:33 ] prntf などの「メジャーな関数」をなくせという話ではないように読めるが
616 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:25:25 ] >>611 sprintfは別言語でそれやられて大迷惑 >>612 も言ってるけどいまさら別に覚えるのも嫌だから 今までと同じでいいよ・・・
617 名前:593 mailto:sage [2009/10/07(水) 19:27:45 ] >>595 minですね 探し切れてませんでした ありがとうございます >>598 なるほど、確かに求めてるのはヒープみたいなものでした 参考になりましたありがとうございます
618 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:32:02 ] 別にみんな自由に書けばいいじゃんw Obsoleteでもない限り機能として用意されてるんだから使えばいいし 「個人的に嫌い」な人が大半になればそれを使わないのがデファクトスタンダードになるだけだし
619 名前:591 mailto:sage [2009/10/07(水) 19:37:20 ] どうもありがとうございました >>592 うーん、もうちょっと明示的にスコープの話が書いてあると嬉しいような。 doc.okkez.net/static/187/method/Kernel/m/require.html doc.okkez.net/static/187/method/Kernel/m/load.html
620 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:56:18 ] ruby/dbiの公式に行きまして、classデータベースというページがあり メソッドの説明がしてありました。しかし、記述が少ししかなく。 こういう場合、ソースを読むんでしょうか? とりあえず、今は目的に必要なことだけをやっていこうと思います。
621 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:06:32 ] >>597 >rows = dbh.do("INSERT INTO people (name,height) >VALUES('Wanda',62.5),('Robert',75),('Phillip',71.5),('Sarah',68)") >printf "%d rows were inserted¥n", rows > >ruby/dbiの使い方ページにあるコードの抜粋なんですが、実行すると >4 rows were insertedと表示されます。 > >printf "%d " , rowsで、rowsから何かの数字を得ているようなのですが >どういう動きをしているんでしょうか? 1行目の rows = dbh.do("insert....") で、insertした件数が返されて rows に代入されているだけじゃないかな。 それを printf "%d ", rows で出力している。そんだけ。
622 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:29:41 ] >>620 ググったら公式じゃないけどこんなページがあったよ ttp://www.nslabs.jp/book2-dbi.rhtml
623 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:31:28 ] >>618 選択肢がないという話では
624 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:35:37 ] >>623 >>602-603 がそうはとても見えない
625 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:38:34 ] >>624 sprintf 使ったことある?
626 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:45:18 ] >>625 sprintf系まとめて異端だったの? >>603 は「(sprintfはまだしも)String#%は使うな」と言ってるんだと思ってたけど
627 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:51:44 ] C に由来する sprintf や pack/unpack の書式記号や利用法が Ruby らしくないというツッコミなんじゃ…
628 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:57:52 ] pack系はともかくsprint系に選択肢ないか?
629 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:02:21 ] >>603 はどう考えてもネタです
630 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:04:49 ] pack は map で直接書くというコードの動作的にはある意味わかりやすい代替手段が
631 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:27:58 ] しかしprintfを非難するとはいい度胸だ…これも平成ゆとりが増えたからなのか…
632 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:33:55 ] packにせよprintfにせよ、DSLは不思議と好き嫌いが分かれる気がする
633 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:34:36 ] >>631 「わかりにくい」ことは確か 初心忘れると老害と罵られるぞ
634 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:37:58 ] 反printf派に聞きたいんだけど 今より使いやすい(Rubyっぽい)printf構文ってどんなの?
635 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:39:17 ] とりあえず「詳しくはmanページ読んでね」というのは頂けないな 「正規表現はPerlと同じ物が多いので同じ場合はそちらを」は通用しないのに
636 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:40:14 ] >>633 packは使ったこともないし使う場面もないから構文すら知らない。 rubyでdef endしちゃうから今後も使うことはないだろう。
637 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:40:50 ] $と記号1つのグローバル変数(今となっては排除したいらしいが)も、 「Perlといっしょ」で通じなくなってきてるからな…
638 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:42:04 ] printfを知らないとなると、rubyしか触ったことないってことになるんだがな… webクリエータはたいてい適当だしそんなもんかw
639 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:43:00 ] >>636 バイナリファイルのヘッダパースとかどうやってやってるの?
640 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:43:31 ] >>636 irb1.8> p "ルビー" "\343\203\253\343\203\223\343\203\274" これ日本語に戻してー
641 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:44:32 ] >>638 お前puts使わないだろ
642 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:47:39 ] >>636 1.8でUnicodeEscapeSequence文字列が欲しいです先生
643 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:49:20 ] >>640 evalしろ
644 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:50:35 ] packはまあ・・・・使う時にリファレンスを見てやるしかないな 一方、青木氏はpackで壊れた >まったくpackの意味不明さときたら、 >「packのテンプレートがわからなくたって悔しくなんかないんだからな! バーカバーカ!」 >と幼児退行してみたくなるほどです。
645 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:52:37 ] >>643 こういう文字列をevalしろとな
646 名前:デフォルトの名無しさん [2009/10/07(水) 22:09:18 ] 青木氏って2chねら?
647 名前:デフォルトの名無しさん [2009/10/07(水) 22:27:52 ] ttp://d.hatena.ne.jp/images/keyword/keywordlist_furigana.csv このファイルが開けないのですが、どーすれば良いのでしょうか。
648 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 22:31:52 ] >>647 中身がタブ区切りのtsvだからです っていうかファイルの中身確認することくらいしようぜ
649 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 22:34:21 ] putsすると日本語でも表示されるよね sjis問題で文字化けはするけど
650 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 22:44:34 ] gets, puts ってのはもろにCだと思うんだが・・・
651 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 22:55:35 ] え・・・そうだと思うけどなんか違った・・?
652 名前:デフォルトの名無しさん [2009/10/07(水) 23:28:42 ] visualstudioみたいにボタンとかを貼り付けて入力フォームが作りたいんですが ああいうツールは無いんでしょうか?
653 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:32:42 ] CentOS上でruby1.8.7から1.9にアップデートしたいのですが、 Linuxの知識に乏しいためなかなか手が付けられません。 1.8.7のインストールはネットで調べつつなんとかソースコードから入れました。 一般的にはどのような手段でアップデートするのでしょうか?
654 名前:デフォルトの名無しさん [2009/10/07(水) 23:34:49 ] >>653 このスレ的には Debian にしろって言われると思うが。
655 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:34:51 ] > Linuxの知識に乏しいためなかなか手が付けられません。 じゃあ無理だ 諦めろ あとスレ違い
656 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:39:29 ] こういう奴は何しにこのスレに張り付いてるんだろうか
657 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:41:38 ] >>656 わりと適切だと思うが… Linux使ったことあるか?
658 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:43:45 ] make がなにやってるか理解しないといかんからなー それはこのスレの範囲を超える パッケージがないなら諦めれ
659 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:44:01 ] 貼りついてるw
660 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:44:15 ] もろスレ違いだと思うが。
661 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:44:52 ] Ruby公式ページにインストールガイドってリンクあるからみればいいよ
662 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:48:54 ] 教祖も使っているDebian最強 aptitude install ruby
663 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:49:18 ] Linux上で、しかもLinuxに関する知識がないのなら パッケージ管理システム(aptやyum)を使え、としか
664 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:54:26 ] >>662 1.9.1は存在しない(Sid除く)
665 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:58:14 ] この場合Linuxの知識は無関係だろ
666 名前:デフォルトの名無しさん [2009/10/08(木) 00:38:00 ] >>653 package application で source または archive の site を追加… 大抵は package gpg key は初期の物が使える筈… source package で compile install が出来るので在れば source を拾って来て install.
667 名前:デフォルトの名無しさん [2009/10/08(木) 00:50:15 ] ruby は python を使えれば 使う事ができますか python と ruby の関数で違う物は在るのでしょうか?
668 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 00:54:47 ] フィッシングタイムですか?
669 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 00:58:16 ] 邪魔しないでください >>668
670 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 01:05:11 ] >>667 全体的に大阪弁と東北弁ぐらいの違い
671 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 01:09:16 ] >>667 片方が使えるなら、もう片方もさほど苦労しない
672 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 01:53:24 ] gems.rubyforge.orgにgemでアクセスできなくない?
673 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 15:57:30 ] rubyが司る世界において 数字の1が生まれたら、それは数字クラスに所属していて 数字クラスのメソッドにない動きは出来ないってことですか?
674 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 16:10:39 ] Rubyには、オブジェクト(インスタンス)ごとにメソッドを定義できる、 特異メソッドという仕組みがあるので、たいていのクラスでは、イン スタンスごとに振る舞いを変えることができる。 しかしながら、数(Numericおよびサブクラス)にはこれが定義できない ように制限されている。 なお、数インスタンスが生まれた後に、数クラス自体にインスタンスメ ソッドを追加した場合、既存の数インスタンスでも使える。
675 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 16:21:33 ] irb> module One; def one; "one!"; end; end irb> 1.extend(One) TypeError: can't define singleton from (irb):2:in `extend_object' from (irb):2:in `extend' from (irb):2 from :0 irb> "1".extend(One).one "one!" ああ、わかりやすいエラーだ
676 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 16:26:28 ] >>673 一般的にはそう クラスに定義された動作(メソッド)のみが可能 ただし Ruby はオープンクラスだから、自分でクラスを拡張してメソッドを追加変更することができる ある人の String クラスにあるメソッドが、 別の人の String クラスにもあるとは限らない ある人の作った String のインスタンスが、別の人の作った String のインスタンスと全く同じ動作をする保証はない ただ、組み込みクラスのメソッドやライブラリ標準メソッドの上書きは自己責任なので気にしなくてよい それと整数クラスは>>674 の言うように例示にはちょっと不適
677 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 18:34:07 ] >>675 数字と数の違いか:-p
678 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 11:22:07 ] M1::C1::C2 というネストしたクラスがあります あるオブジェクトが M1 を「ネスト構造上含んで」いるかどうかを調べたいです 文字列として正規表現で比較するしかありませんか? obj.class.to_s =~ /\AM1::/
679 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 11:56:18 ] >>678 どんな場合にも動作するのは文字列としての比較 Module.nesting が使えることも多いが、特定条件で存在できないモジュールオブジェクトを指定できない
680 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 11:58:02 ] C → Java → Ruby と勉強してきましたが、次の言語は何がいいと思いますか? プログラミングは単なる趣味です。
681 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 11:58:52 ] Haskell
682 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 12:08:49 ] Lisp系列が足りないな
683 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 14:20:33 ] >>680 趣味というなら、マイナー言語でもいいよね。 Rubyとは真逆の、静的な関数言語がいいんじゃないかな。 OCamlかHaskellあたり。どちらも日本語での入門書があるし。
684 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:10:41 ] railsで、webアプリを作るのに 必要な知識ってなんですか? ruby rails 正規表現 html,xhtml,xml javascript mysqlなどRDMS apacheなどhttpサーバー こんなもんでしょうか?
685 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:15:04 ] >>684 他の言語でフレームワークべったりでないWebアプリケーションを作ることができれば問題なし なんじゃそりゃって感じだけど、まず間違いない あとRailsは板違いなので 【Ruby】Ruby on Rails Part8 pc11.2ch.net/test/read.cgi/php/1252842574/ こっち池
686 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:15:17 ] >>681-683 サンクス。 OCamlかHaskellあたりがお薦めなんですね。 了解しました。
687 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:20:43 ] >>685 どもっす。半年間精進してダメなら諦めます。
688 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:40:15 ] rspec 版の testrb コマンドってありませんか?
689 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:48:15 ] >>688 spec -fs -c spec/
690 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:54:54 ] >>689 1578 examples, 0 failures っひょー
691 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 16:28:14 ] >>690 おまえすごいな
692 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 16:32:09 ] 個人でもちょっと規模大きければこんなもんだろ
693 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:31:04 ] 俺レベルになるとワンライナーで大企業の基幹システムを作れるようになる
694 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:45:04 ] rspec 使ってるとテストはやたら増える
695 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:08:57 ] 無印のサイトはシェルやワンライナーで作ってる、なんて言ってたけど、 どーりで重いわけだと思ったよ
696 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:44:18 ] 初心者らしい話題 class CArray < Array end a = CArray.new b = CArray.new c = a + b p c.class #=> Array CArrayを返してほしい。 class CString < String end a = CString.new("aaa") b = CString.new("bbb") c = a + b p c.class #=> String CStringを返してほしい。
697 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:17:14 ] CArray というクラス名に吐いた class CArray < Array def +(v); self.class.new(super(v)); end end
698 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:58:05 ] a[0..1]みたいなのはちゃんと元のクラスにやってくれるんだよね
699 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 00:22:00 ] Array や String の(Cで記述した) + メソッドの定義の中で Array.new や String.new がハードコーディングされてるんだろうな 何らかのシステム的理由があるか、いまさら変更できないか、どっちかだろう まあ、バグっちゃバグかもしれん
700 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 01:13:02 ] >>698 むしろそっちのほうの挙動が不思議 Stringクラスの実装はCStringを知らないはずなのに、 どうしてCStringオブジェクトを返せるんだ?
701 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 01:28:37 ] インスタンスがあればクラスわかるから返せるにきまっとるわい
702 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 02:03:22 ] superのnew呼び出しでself.class.newってやるのきもくね?
703 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 02:10:19 ] 継承を前提としたクラスならってところ 組み込みでいえばIOとかNumericあたり というか、otherと絡むときにわざと基本クラス返してる気がするなぁ
704 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 03:07:56 ] レヴェルの低いインターネッツだな
705 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 03:22:09 ] 組み込みのくみこちゃんをdisるのはやめろ
706 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 07:06:39 ] >>703 あらゆるクラスは継承で動作可能「でなければならない」 継承したとたん動作しなくなるライブラリはプギャー
707 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 07:26:07 ] それぞれArrayを継承したFooとBarがあったとして foo + bar がどのクラスを返すべきかとか考えると >>703 の言うようにわざと基本クラスを返すのはありなんじゃないかと思う
708 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 07:31:28 ] >>707 > foo + bar がどのクラスを返すべきか 変換っぽいメソッドでない限り、通常はレシーバのクラスを返すべき つまり、foo のクラスを返すべき
709 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 07:54:09 ] このパッチをあててリビルドすればOK --- a/array.c +++ b/array.c @@ -2657,12 +2657,14 @@ rb_ary_fill(int argc, VALUE *argv, VALUE ary) VALUE rb_ary_plus(VALUE x, VALUE y) { + VALUE klass; VALUE z; long len; y = to_ary(y); len = RARRAY_LEN(x) + RARRAY_LEN(y); - z = rb_ary_new2(len); + klass = rb_obj_class(x); + z = ary_new(klass, len); MEMCPY(RARRAY_PTR(z), RARRAY_PTR(x), VALUE, RARRAY_LEN(x));
710 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 08:07:52 ] 本当にそのほうがいいと思うなら、 redmine.ruby-lang.orgにfeature request投げとけば。 個人的には、両方のクラスが同じときだけにすべきじゃないかと思うが。 あと2chに初出のコードは著作権的に取り込むのは危険なんじゃなかったっけ。
711 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 08:22:54 ] >>710 危険というか取り込み不可能 というか別にそんなことを意図したコードでもあるまい お前空気読めないと周りから言われるか全く何も言われないかどっちかだろ
712 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 08:50:19 ] 無理矢理ねじ込んだ感バリバリの3行目に ドカタのストレスを見た。
713 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 08:56:26 ] 言われるか言われないかのどっちかワロタ
714 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:27:56 ] 質問です;; mvcモデルをつくりたいのですが、下記エラーが出て削除機能が使えません undefined method `destroy' destroyが使えない?? newもfindも使えるのに・・ 解決法知ってる方いたら教えてください
715 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:40:02 ] MVCと直接関係ない質問に見えるけど何の話?
716 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:45:48 ] 要するにdestroyメソッドを使う方法がわからないです
717 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:47:12 ] destroyメソッドってなに?
718 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:49:12 ] すいませんここはrailsは対象外なんですかね・・ 他当たってみます
719 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:51:30 ] >>718 RailsならRailsと言え。 MVCってのはRails固有の概念ではない。 あと、 【Ruby】Ruby on Rails Part8 pc11.2ch.net/test/read.cgi/php/1252842574/
720 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 16:33:54 ] undefined method `destroy'の後が重要だったりするんだよな
721 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 17:12:32 ] >>720 この場合はいいえ
722 名前:714 mailto:sage [2009/10/11(日) 01:00:33 ] >>721 何か知ってる事あったら教えてもらえますか?
723 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 01:07:07 ] うざ
724 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 11:59:17 ] PStore.dump してファイルに保存済みのデータがあったとし a = nil PStore.new(...).transaction do |c| a = c[:data] # Array や Hash がネストしたデータ(shallow copy では完全にコピーできない) end x = a[...][...].XXX[...] というように PStore.transaction の外で読み込んだデータ を使っても問題ないものなのでしょうか。 内部的には Marshal.load しているということなので、問題 ないような気もするのですが、ドキュメントの記述を見ると そういう使い方していないようなかんじなので…。
725 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 12:02:25 ] Marshal.dump は唯一、標準ライブラリで深いコピーを行う
726 名前:724 [2009/10/11(日) 12:16:24 ] なるほど >>725 さん PStore が Marshal 上に実装されているという前提が変わらない限りは PStore#transaction の外にデータを持ち出しても問題ないわけですか これまで無駄に transaction の内部にコード入れていたので書き直そう…。
727 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 12:20:45 ] >>724 PStore#transactionは、 * 同じデータファイルに対する他のPStoreアクセスを禁止している (読んでる間に書き換えられないように) * ブロック処理がabortされなければ、変更の再ダンプを行う。 という感じの仕事をしている。 中で読んだデータはそのままメモリにある。ブロックを出たあと、 誰かがデータファイルを書き換えたとき、それとメモリが一致しな いということを認識した上でなら問題ない。
728 名前:724 mailto:sage [2009/10/11(日) 12:43:24 ] まさにそのあたりが気になっていた(transaction 抜けたら参照している データがメモリ上から消えちゃう可能性があるのかなあ、とか)のです、 明快な説明どうもありがとうございました >>727 さん
729 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 14:19:20 ] きちんとトランザクションって書いてあるだろ トランザクション抜けたからって取得データ本体が消えるなんてことはそもそも …実装としてありそうな気もするな トランザクション有効中に明示的に複製してクダサーイというのはアリではある んで、PStore#transaction は普通は File.open のようにブロック範囲を限定して使う データを取得または保存する瞬間にだけ、トランザクションに入る 何らかの理由で複数回アクセスしたいという場合は、PStore.new のオブジェクト自身を変数で保持する なお、 PStore は、実装の都合上「ファイル全体を最初から最後まで必ず読み込む」ので注意 変更部分に対応したファイルの一部分だけを書き換えるとか、そういう細やかな小細工は通用しない データの大きさと更新頻度によっては複数に分けたほうが負荷的にお得
730 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 14:36:09 ] WinでAutoHotKeyの代わりに使える機能を完備してあるライブラリってない?
731 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 16:56:05 ] 繰り返し処理で正規表現を使う場合 a.each do |b| print "match" if c =~ /hoge/ end よりも reg = Regexp.new("/hoge") a.each do |b| print "match" if c =~ reg end の方がいいでしょうか?
732 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 17:05:15 ] そういうのは正規表現の中に変数を含む場合です
733 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 17:12:35 ] 変数を #{} などで含まない「固定」の正規表現は1回しか生成されない 1.upto(10000).each do /h/ =~ "hoge" end でも re = /h/ 1.upto(10000).each do re =~ "hoge" end でも、Regexp のインスタンス生成は1回だけ つまり、処理速度や負荷的には実質どちらでも構わないし、 厳密にはブロックの外の変数を参照するコストのぶんだけ後者が遅い
734 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 17:34:33 ] >>732-733 なるほど、ありがとうございます
735 名前:724 mailto:sage [2009/10/11(日) 22:15:19 ] RDBを使うほどでもないけどちょっと中間データをファイルとして永続化して おきたい(けどCSVファイルなんかは表現力が弱いので嫌な)ときに、素で Marshal.dump/load するより楽なので PStore を使っていたのですが PStore#transaction でデータ処理全体をブロックする必要があるのかないの か「実装としてありそうな気もする」ので気になっていたので、たいへん勉強 になりました、どうもありがとうございます >>729 さん
736 名前:デフォルトの名無しさん [2009/10/12(月) 19:03:31 ] rand()の範囲を指定したいのですが 10から20の間の数をランダムに発生させたいというばあい rand(10-20)とか直接与えることは出来ますか?
737 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:13:37 ] 0から10の範囲の乱数を発生させて10を加える。
738 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:18:20 ] >>737 が正解
739 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:21:25 ] 俺俺ライブラリに class Range def rand Kernel.rand(last-first+1)+first end end ってやっといて (10..20).rand するとか 標準じゃ無理
740 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:29:25 ] (10..20).to_a.sort_by{rand}.first
741 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:39:58 ] >>740 短いのですがどうもちゃんと動作しないようです。 (1..2**30).to_a.sort_by{rand}.first としましたが、結果がかえってこないのであきらめました。
742 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:07:39 ] >>741 そりゃ単に重すぎるだけだ 要素数が2**30の配列を作ってるんだから そこまで大きな数を扱うのなら、小手先なしでrandした方がいいよ
743 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:08:59 ] だから>>737 以外は実用妥当な乱数にならねえって
744 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:09:56 ] スレタイ100回読んで半年ROMっとけ
745 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:15:49 ] 乱数発生部は組み込みに任すのが完全に正しい姿だな 累乗とか使って結果的に偏らせるのも成長段階には必要という説もあるが
746 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:17:49 ] 最近/.並にゴミで埋まるようになってきたなここ。
747 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:23:23 ] >>746 2chも大差ないだろ
748 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:24:39 ] >>746 斬新な自己紹介ですね
749 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:40:35 ] こういうありきたりなループの終了条件に !=を使うのは普通ですか? count = 1 end_count = 10 while count != end_count puts count count = count + 1 end
750 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:44:09 ] へん
751 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:48:03 ] (1...10).each {|i| puts i} じゃだめなん?
752 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:50:22 ] count が増えるとは限らないのだろ loop do break if count == end_count ... end せめて break して欲しい
753 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:08:18 ] >>752 何でbreakの方を推すの? 横から見てもいまいちわからん 普通ここは、読みやすいuntilを推す流れじゃないかと思うんだけど
754 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:15:49 ] あまり使わないんですね。 気をつけます。ありがとうございます。
755 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:18:26 ] あまり使わないのか? 場合によりけりで特に使う使わないを気にする記述でもないと思うんだけど
756 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:21:14 ] >>740 単に非効率なやり方だろ 他人に教えるようなものじゃない
757 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:29:55 ] C++のSTLのイテレータに慣れてるとそう書きたくなるな。
758 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:33:38 ] 読みやすい until などというものは存在しない と思う