Ruby 初心者スレッド Part 31at TECH
Ruby 初心者スレッド Part 31 - 暇つぶし2ch50:9
09/09/17 19:45:44
>>48
そこはどうでもいいのですがこんなかっこいい画面でプログラムを作りたいのです


51:9
09/09/17 19:48:37
>>49
xyzzyもいいですね!
これなら初心者も使えるとのことなのでこれでお願いします
インストールから環境設定までおしえてください
よろしくお願いします

52:デフォルトの名無しさん
09/09/17 19:49:33
カエレ

53:デフォルトの名無しさん
09/09/17 19:51:08
>>49
xyzzyも自分でなんとかする人じゃないと相当難儀だぞw

54:デフォルトの名無しさん
09/09/17 19:53:29
やはり教えてばかりでは嫌われますね
こちらはいたって真剣なのですが

55:9
09/09/17 19:54:10
>>54はボクのレスです

56:デフォルトの名無しさん
09/09/17 19:58:39
>>49
xyzzy駄目だろ
まさかvim使えないような奴に最初からgates.l入れさせる気か
着色と自動インデントさえされればなんでもいいはずだ

57:デフォルトの名無しさん
09/09/17 20:02:40
>>54
自分のスレを読み返してごらんよ
Ruby よりエディタへの言及の方が多いよ

58:デフォルトの名無しさん
09/09/17 20:10:31
hello world はgvimで書いたのか?

59:デフォルトの名無しさん
09/09/17 20:11:36
この人に必要なのは、いろんなエディタをインストールして
ひととおり色設定をいじって遊んでみることだと思う。


60:デフォルトの名無しさん
09/09/17 20:12:14
gvimの話はよそでやってくれ、とりあえず。
というか、vimをNGワードにするのが適切だな、こりゃ。

61:9
09/09/17 20:12:56
>>58メモ帳です

62:デフォルトの名無しさん
09/09/17 20:45:34
エディタのことは忘れて、まずは>>36のチュートリアルをやろうぜ。
エディタを語るにはきみはまだ若い。

63:9
09/09/17 21:00:39
>>62
わかりました
質問があります
hello.rbというhello!と表示するプログラムを作ったのですが実行するときに
いちいち保存先までcd \とか入力していかないとエラーが出るので面倒です・・・
どこからでも○○○.rbと入力して実行するようにはできないのでしょうか?

今まで検索していたのですがnotepad++というエディタがありました
画面の色とか文字の色とか適当にいじって変えてます
gvimやxyzyyはまだまだ先のような気がします
かなり上級者向けのようです
でもやはり形だけでもいいのでgvimやxyzyyでやりたいですねえ・・・

64:デフォルトの名無しさん
09/09/17 21:03:13
>>63
> どこからでも○○○.rbと入力して実行するようにはできないのでしょうか?
Ruby関係ないのでコマンドプロンプトの使い方勉強しろ
ディレクトリ移動関連の最低限必要なことは10分もあれば終わる

65:デフォルトの名無しさん
09/09/17 21:16:20
昔話は嫌われるのだが、
UNIXからMSに移植されたツールは、とても多い。
sed,grep,awkとかね。
今でも、とても役に立ちますね。

MS-DOSの始めの頃に、**とか言う名前のフルスクリーンエディターが発売されました。
MS-DOSの環境であれば、同じようにちゃんと動く、ってのが売りです。
(このあたりが?の人は考古学者になったつもりで調査すべし)
結局、これは商業的な成功はなかったみたいですね。
INT21のせいだと思うのですが、とても遅かったのですよ、表示が。

ん、眠くなったので、続く

66:デフォルトの名無しさん
09/09/17 21:21:17
スレ違い。初心者スレですので無用な語りはお避けください。

67:デフォルトの名無しさん
09/09/17 21:33:14
>>63
>質問があります
>hello.rbというhello!と表示するプログラムを作ったのですが実行するときに
>いちいち保存先までcd ¥とか入力していかないとエラーが出るので面倒です・・・
>どこからでも○○○.rbと入力して実行するようにはできないのでしょうか?

質問の意味がわからない。どんなエラーがでるの?

68:デフォルトの名無しさん
09/09/17 21:38:36
>>67
いやそれはそのまんまだろ
コマンドプロンプトの起動時のカレントディレクトリと自作ファイルを置くディレクトリが違うんだ
例はたいていカレントにあるスクリプトを起動しているから、それと同じようにするにはどうしたらいいかという話

つまりはディレクトリの概念と操作の勉強が要る

69:9
09/09/17 21:42:57
>>68
コマンドプロンプトを開いたときは常に自作ファイルをおいているディレクトリから
はじめることはできませんか?
今の環境だといちいち自作ファイルをおいてあるディレクトリまでcdコマンドで移動しないと実行できません

>>68
ruby: No such file or directory -- hello.rb (LoadError)

70:9
09/09/17 21:47:06
Cドライブの下にsrcというフォルダを作成してここに自作ファイルを保存しています
コマンドプロンプトから自作ファイルを実行するときは
ruby ○○○.rb 実行とするだけで動くようにはできませんか?
今の環境でこれをすると
ruby: No such file or directory -- hello.rb (LoadError)
と表示されてしまいます
ruby c:\src\hello.rb 実行とすれば動いてくれるのですが

71:デフォルトの名無しさん
09/09/17 22:09:11
はやくパッチレベル上がらんかな
mingw使いはバイナリを上げられんではないか

72:デフォルトの名無しさん
09/09/17 22:27:10
p0がどんどん広まるよー

73:デフォルトの名無しさん
09/09/17 22:27:36
>>69
そういうことはできるのかな。わかんない。

移動がめんどくさいというだけなら、最初から「C:¥」を指定してコマンドプロンプトを起動するのはどうだろうか。

(1) C:¥Documents and Settings¥ユーザ名¥スタートメニュー¥プログラム¥アクセサリ をエクスプローラで開く
(2) 「コマンドプロンプト」ショートカットをデスクトップにコピー
(3) コピーしたショートカットを右クリックして「プロパティ」を選ぶ
(4) 「ショートカット」タブの「作業フォルダ」を「C:¥src」に指定して、OKボタンを押す
(5) コピーしたショートカットをダブルクリックすると、「C:¥src」に移動していることがわかる

>>68
おまえかしこいな。おれはさっぱりわからんかった。



74:9
09/09/17 22:50:25
>>73ありがとうございます!
らくになりました!


75:デフォルトの名無しさん
09/09/18 04:52:49
>>33
NetBeansオススメだぜ。

俺はRubyでちょっとした使い捨てプログラム書くときはxyzzyのruby-mode、
仕事のプロジェクトはNetBeansと使い分けてる。

>>69
"Command prompt from here"いれろ。ぐぐったらでてくる。
エクスプローラーからフォルダの右クリックで、そのフォルダを作業フォルダにしてコマンドプロンプトを開けるようになる。

76:デフォルトの名無しさん
09/09/18 11:27:41
>>75
すでに解決しております
ありがとうございます
またお願いします

77:見習い ◆YG1xRh8M6Ffb
09/09/18 11:39:09
>>9です
質問することが多いと思いますので名前をつけさせていただきました
よろしくお願いします


78:デフォルトの名無しさん
09/09/18 12:12:53
>>77
コテつけてくれるのはありがたい。



さ、NGにしよっと。

79:デフォルトの名無しさん
09/09/18 12:19:14
無駄にスレをのばさないでください。>>見習い
S/Nが低下し過ぎ。

これがつづくと、だれもこのスレをみなくなって
質問しても答えてくれる人がいなくなってしまう。

80:デフォルトの名無しさん
09/09/18 12:20:16
>>77
まあ気長に頑張れ
>>2 は見たか。多少値がはっても入門書ぐらいはちゃんとしたのを
買った読んで方がいいぞ

81:見習い ◆YG1xRh8M6Ffb
09/09/18 12:23:09
>>78さんw

>>79
気をつけます
すいません
S/Nってなんですか?

>>80
ありがとうございます
入門書は買うつもりです
PCだと目が疲れてくるのでやっぱりじっくり見てやるなら紙のほうがいいです


82:デフォルトの名無しさん
09/09/18 12:25:50
君はググることすらしないのになんでここにいるん

83:見習い ◆YG1xRh8M6Ffb
09/09/18 12:34:55
>>82
ググってますよ

84:デフォルトの名無しさん
09/09/18 12:38:37
>>79
どうして存在を認めて名前で呼ぶの

85:デフォルトの名無しさん
09/09/18 12:55:44
初心者スレだから、いいんじゃね。
むしろ、初心者がどこで躓くのかを俺は知りたい。



86:デフォルトの名無しさん
09/09/18 13:01:55
>>85
それを知りたいならこの板全部読め
全部載っている

87:デフォルトの名無しさん
09/09/18 13:04:19
>>83
S/Nでぐぐった?
人に聞く前に自分で調べようって話

88:見習い ◆YG1xRh8M6Ffb
09/09/18 13:08:30
>>87
ぐぐりましたけどどれも関係なさそうなものばかりですよ


89:デフォルトの名無しさん
09/09/18 13:31:00
rubyで再起処理をしようとすると、undefined method `each' for nil:NilClassと出ますが、再帰処理はできないのですか?

90:デフォルトの名無しさん
09/09/18 13:33:00
>>88
いい加減なことを言うなよ
検索結果の最上位にずらっと並んでいるだろ……

というか、こういう Ruby とは何の関係もないやり取りがまさに N なわけだよ

91:デフォルトの名無しさん
09/09/18 13:35:52
>>89

各オブジェクトがeachを持っているかどうかの判断をする必要があるんじゃないの?


92:デフォルトの名無しさん
09/09/18 13:36:55
>>89
それは書き方間違ってるだけです
エラーの理由がそのまんまです
[1,2,3].each do |e| … と直接書いた場合は [1,2,3] をeach 内から読む手段がないんで
再帰したい場合はご面倒でも arr = [1,2,3] と変数として一度定義してから arr[1..-1] とか呼んでください

93:デフォルトの名無しさん
09/09/18 13:37:14
>>89
意図せず nil に対して each を呼んでいる
コードを張れ

94:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/18 13:49:58
>>94
よくわからないけど停止条件が見当たらないよ

96:デフォルトの名無しさん
09/09/18 13:50:01
原因がわかりました。

再帰したときにrefCellNameがnilになっています
(最初に呼び出された時は正しいデータが入ってました)

再帰したらrefCellNameのデータってnilになるものなんでしょうか?

97:デフォルトの名無しさん
09/09/18 13:51:29
>>95
停止はrefCellName[activeCell]の中が空になったときです

98:デフォルトの名無しさん
09/09/18 13:53:34
>>97
> 停止はrefCellName[activeCell]の中が空になったとき

refCellName[activeCell] が空になったら再帰から抜ける、という部分の
コードが見当たりませんが?

それと、空になるとはどうことだと理解してますか?


99:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/18 13:59:21
>>96
いやそれであのエラーは出ない
nil[:a].each #=> NoMethodError: undefined method `[]' for nil:NilClass

each のレシーバが nil だっていうエラーだから
refCellName[activeCell] が nil のはず

どうしてそれが nil になるのかはよくわからん
refCellName から要素を削除する仕掛けが停止条件兼ねてどっかにあって
それと干渉してるんじゃないの?

101:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/18 14:04:24
うん、再帰使ってるプログラムは
停止条件が関数の頭のほうに書いてあると漏れでも理解できて非常に助かる

103:デフォルトの名無しさん
09/09/18 14:05:54
>>101
「NilClass に each メソッドが定義されていない」と認識するべき
レシーバが nil だからではない

nil.to_s は NilClass#to_s が定義されているからエラーは出ない
空文字列を返す

104:デフォルトの名無しさん
09/09/18 14:08:36
>>103
なるほど

納得しました。クラスごとに定義が必要でnilにはなかったと
ありがとうございました


105:デフォルトの名無しさん
09/09/18 16:25:12
初心者にカリカリしている人が多いようなので、再掲しました。

>>1
>■回答する人へ
>相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
>それができないならこないこと(だって初心者スレだもん)。
> ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
> ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
> ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

ここは初心者がバカな質問をすることを大目に見てあげられるマゾヒストのためのスレです。
初心者にカリカリするような人はこないでね。

106:デフォルトの名無しさん
09/09/18 16:30:37
◆YG1xRh8M6Ffb乙

107:デフォルトの名無しさん
09/09/18 16:40:08
>>105
「Rubyに関する」既出な質問やわけわかな質問なら、いくらでも大目に見る
スレ違いな質問(S/Nとか)はよそに行け

加えて言うと、調べる気がなさそうな人間に対しては
いくらマゾヒストでも親切でも教える気になれんよ
人力検索サイトに行け

108:見習い ◆YG1xRh8M6Ffb
09/09/18 16:52:14
ルビーのショートカットアイコンを変更したいのですが
右クリックしてプロパティから変更しようとしても”アイコンの変更”ボタンが
アクティブ?の状態になっておらず変更できません
どうすればいいですか?
よろしくお願いします

>>106
ちがいますw

109:デフォルトの名無しさん
09/09/18 17:33:05
>>107
>加えて言うと、調べる気がなさそうな人間に対しては
>いくらマゾヒストでも親切でも教える気になれんよ

回答したいやつが回答すればいい。
回答したくないやつは黙って無視しとけばいい。
ここはもともとそういう場所。
調べる気がなさそうな人間がいれば、キーワードを教えてぐぐることを薦めるだけのこと。
その程度でカリカリするなら、こんなスレ見ない方がいいよ。ストレスたまるだけだから。

110:デフォルトの名無しさん
09/09/18 17:33:55
>>108
Windows関連のスレで聞いたほうがいいかも。

111:見習い ◆YG1xRh8M6Ffb
09/09/18 18:02:45
>>110
ありがとうございます
windows板の質問スレッドで回答待ちです


112:デムパゆんゆん
09/09/18 18:11:39
おう、がむばれ!

113:見習い ◆YG1xRh8M6Ffb
09/09/18 19:16:05
スタートメニューのすべてのプログラムのRuby1.8の中にruby consoleがあります
でも作業フォルダにはこれと同じファイルがありません
意味がわからないのですが・・・
どういうことですか?


114:デフォルトの名無しさん
09/09/18 19:19:55
>>113
ruby本体だって作業フォルダにないだろ。それと同じだよ
環境変数PATH、コマンドプロンプトとかでググってみたら

115:見習い ◆YG1xRh8M6Ffb
09/09/18 19:21:22
恐らくボクの言っていることが通じてないとおもいます
ボクの説明が悪いです
すいませんね

116:デムパゆんゆん
09/09/18 19:28:29
どうせならLinuxでやろうぜ。

117:見習い ◆YG1xRh8M6Ffb
09/09/18 19:32:36
もっていません

118:デフォルトの名無しさん
09/09/18 19:34:49
>>115
通じてないと思うのならあやまる前に通じさせる努力をしてくれよw
何がわからなくて何を知りたいのか、回答者が推測しなければならないような
質問はよくない、というかかなり損してるよ

119:見習い ◆YG1xRh8M6Ffb
09/09/18 19:36:36
>>29さんはいませんか?
いらっしゃいましたら方法をおしえてください


120:見習い ◆YG1xRh8M6Ffb
09/09/18 20:01:57
>>118
こんな感じでよろしいでしょうか

OSはwindows xp sp3 32bitです
rubyはActiveScriptRubyの最新版1.8.7をインストールしています
デスクトップのショートカットアイコンを”変更”したいのですがその方法がわかりません
自分なりにいろいろがんばってみたのですが力不足のようです
もし知っている方がいらっしゃいましたらご教授いただければ幸いです
ご指導の程よろしくお願い致します

121:デフォルトの名無しさん
09/09/18 20:17:33
>>120
その話はWindows板で回答待ちじゃないのか?
>>113-114の流れはおかしくないと思うが、直後に>>115,120となる意味が分からん

122:見習い ◆YG1xRh8M6Ffb
09/09/18 20:22:41
もういいです


123:デフォルトの名無しさん
09/09/18 20:23:53
>120
Windows板で回答待ちの質問をこっちに持ってくるなよ
向こうの住人に失礼だぞ

124:見習い ◆YG1xRh8M6Ffb
09/09/18 20:24:29
流れがどうのこうの
聞いてるんだから
可能か不可能かくらいは
こたえてくれても
いいんじゃないの


125:デフォルトの名無しさん
09/09/18 20:27:32
RubyプログラムでWindowsでのショートカットのアイコンを変更したいというんだったら
WIN32APIでも叩けば「可能かもしれない」。
俺はやったこと無いから知らないけど、詳しい人が答えてくれるかもね。

Rubyのショートカットアイコンを変更したいという話だったら「可能」だけど
スレ違いだから出て行けって言われてる。

126:デフォルトの名無しさん
09/09/18 20:29:36
>>113
>スタートメニューのすべてのプログラムのRuby1.8の中にruby consoleがあります
>でも作業フォルダにはこれと同じファイルがありません
>意味がわからないのですが・・・

意味が分からないのはキミの質問のほうだな。
Windowsがないから正確なことはわかんないけど、
「スタートメニュー」> 「すべてのプログラム」>「Ruby 1.8」
の中に「ruby console」というのがある、ということがいいたいのか。
しかし「作業フォルダにはこれと同じファイルがありません」という部分は意味がわからん。
再提出!


127:見習い ◆YG1xRh8M6Ffb
09/09/18 20:29:54
アイコン変えるくらいで
えらいたいそうなことやね
あきらめますわ
ありがとう

128:デフォルトの名無しさん
09/09/18 20:39:34
1. まずruby consoleってのを削除する
2. パスを通す
3. 普通にコマンドプロンプトを使う

129:デフォルトの名無しさん
09/09/18 20:45:02
アイコンとかどうでもいい事にこだわるのはマカ。
ルビー使いたいなら教祖も使ってるデビアン推奨。

130:デフォルトの名無しさん
09/09/18 20:45:18
アイコンを右クリック→プロパティ→カスタマイズ→アイコンの変更→好きなのに換える

131:デフォルトの名無しさん
09/09/18 20:46:54
ショートカットの場合は「カスタマイズ」を「ショートカット」に読み替えてね。

132:デフォルトの名無しさん
09/09/18 20:48:45
あれは許容範囲を超えたダサさだからなあ
GRScript18.dllのリソースを書き変えたらいいんかな
真面目な話、アイコンをartonに送るというのが真の解決法だ

133:デフォルトの名無しさん
09/09/18 21:09:34
初心者さんがだんだんグレて来ててワロタ

134:デフォルトの名無しさん
09/09/18 21:29:21
そろそろ悪態をつくころだね

135:デフォルトの名無しさん
09/09/18 22:20:56
>>130-131
アドバタイズショートカットなめんな

136:デフォルトの名無しさん
09/09/18 23:19:34
ひまなおっさんの釣りなんじゃないかと思えてきた。
日本語がおかしいし、いくら初心者でもこれはないだろ。

あるいはリアルに小学生なのか。

137:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/18 23:29:04
まずはうんざりするくらいまで each 使い倒せ

Enumerable や Array の各メソッド内部でどう each が使われているか推測できるようになれば
いちいち他人に聞かなくても一発で書き下せる
特殊動作のメソッドだけ聞きかじりで使ってても応用できないぞ

139:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/18 23:50:05
>>139,140
非破壊的にやるとすればどうする?

142:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/19 00:01:59
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所

144:デフォルトの名無しさん
09/09/19 00:01:59
arr2 = arr.map{|a| b = a.dup; b[1] *=2; b}

145:デフォルトの名無しさん
09/09/19 00:28:11
>>142,144
なるほど。ありがとう。


146:デフォルトの名無しさん
09/09/19 00:33:02
>>139>>142
方言わらたw

147:デフォルトの名無しさん
09/09/19 00:52:29
>>142
初心者スレではそういうのやってほしくないなあ。冗談を冗談と見抜けないのが初心者なんだから。
しかも冗談としてもつまんないし。

148:デフォルトの名無しさん
09/09/19 06:34:59
Marshalとかw さすうがに冗談も大概にしろよw

149:デフォルトの名無しさん
09/09/19 07:11:56
>>148
君の釣りはつまらない
Marshal.dump+load は dup の shallow copy で済む今回は牛刀だが手段としては妥当だ

150:デフォルトの名無しさん
09/09/19 07:48:50
>>149
なぜ、Marshalを使う必要があるかわからん。dupですむなら、それにこしたことないのではないか

151:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/19 08:17:24
>>151
だったら>>142の段階で簡単な説明をつけましょう。
なぜMarshalを使ったのかという説明がないため、初心者は理解できないし他の人も混乱するだけです。
ここは初心者のための回答が期待されるところであり、初心者が理解できない回答を書いて「Marshal使ってるオレかっこいい」とひたる場所ではありません。
スレの趣旨を理解しましょう。
151が142と別人だったらごめんね。

153:デフォルトの名無しさん
09/09/19 08:32:23
俺もちょっと不思議に思ったからググってああなるほどと思ったクチだが
別に「Marshal使ってるオレかっこいい」じゃないだろw
Ruby本でも書かれるような一般的な小技なんだろ

まあ上でも言われてるが初心者にネタを見抜けってのはきついから
ネタなしかネタだと明らかに分かるよう書いてほしいのはあるが

154:デフォルトの名無しさん
09/09/19 08:37:29
>>152
知らんよ
Marshal.load して dump するというのは「はいれつがこぴーできません」に対する FAQ だ
きちんとマニュアルにも書い…書…注釈に小さく書いてある
URLリンク(www.ruby-lang.org)

知っていることも使用することも問題は特段存在しない
Marshal.dump を知っているレベルで for や定数を使うことが「ありえない」から叩かれてるのだろ

155:デフォルトの名無しさん
09/09/19 08:39:34
Array や Hash の複製が欲しいときにいつも歯がゆく思うんだけど
なんで Object には deep copy のためのメソッドがないのかな?

サブクラス作るたびに適切にオーバーライドする必要が出て面倒だからだろうか

156:デフォルトの名無しさん
09/09/19 08:56:27
>>155
実際にRubyスクリプトとして作るとわかるが循環解決でわけわかめになる
marshal.のソース流用しようとするとT_DATAであっぴゃーになる
dumpしてloadよりも早くてうまくて短い実装があるならMLで発表だ

基本、ディープトラバースして欲しくないらしいぞ
Rubyで提供されてるディープトラバース手段はMarshalだけだ
Marshalできないやつはそもそも複製できんオブジェクトだったということで

157:デフォルトの名無しさん
09/09/19 09:23:29
怖いからYAMLにして戻すってのは?w

158:デフォルトの名無しさん
09/09/19 09:30:36
>>154
>知っていることも使用することも問題は特段存在しない
問題はそこじゃない。初心者への回答という観点を忘れ、ろくに説明もなしにコードだけ書いて満足していることが問題。

159:デフォルトの名無しさん
09/09/19 09:39:28
dump が目的の場合に Marshal ではなく YAML を使うメリットはゼロ

160:デフォルトの名無しさん
09/09/19 09:40:25
>>158
説明はされた

161:デフォルトの名無しさん
09/09/19 09:56:20
説明しなくても分からなきゃ自分で調べるだろ

162:デフォルトの名無しさん
09/09/19 11:16:12
>>160
あとからな。ここでいっているのは、最初の>>142の時点で何の説明もないことだろ。

163:デフォルトの名無しさん
09/09/19 11:26:23
どうしてもMarshalに突っかかってるようにしか見えないが
そこは全く問題ないだろ

forの方を言うならまだわかるが

164:デフォルトの名無しさん
09/09/19 11:33:22
なんか一人顔真っ赤にして頑張ってる姿が目に浮かぶんだが

>>147>>139,142のようなのは初心者に有害だからやってほしくないと真摯に考えるのなら
その場で「Rubyでforは滅多に使わねえよカスeach使え」
「大文字で始まる識別子は定数だからLとかそんな風に使うなボケ」
「巣に帰れ二度と戻ってくるな」といったツッコミをいれるべき

165:デフォルトの名無しさん
09/09/19 11:45:02
Marshal を知らなかったのが悔しくて悔しくて悔しくて悔しくて悔しくてたまらないのだろ自称脱初心者が

166:デフォルトの名無しさん
09/09/19 12:02:02
>>164は、>>142での説明がないのに「説明はされた」とほざいている>>160の必死の答弁でした。
160先生の次回作をお楽しみに。

167:デフォルトの名無しさん
09/09/19 12:05:26
どっちが必死なんだよw

168:デフォルトの名無しさん
09/09/19 12:06:17
マジ顔真っ赤だなあ・・・w
説明がないと思ったなら他の人が説明するもよし
分からなきゃそれを質問するもよし
だろう

169:デフォルトの名無しさん
09/09/19 13:40:16
ごめん、俺がMarshalなんて・・・っていったばっかりに、こんなことに(´・ω・`)
ごめんなさい、ごめんなさい。双方とも頭冷やしてくだしあ

170:デフォルトの名無しさん
09/09/19 13:44:38
いや、Marshalは正しい解答の一つでしょ
あやまるならforとか定数とか変に使ったことをあやまってくれよw

まあ(ちゃんとした)議論になればいろんな情報が出てくるからいいのかもしれんけどね

171:デフォルトの名無しさん
09/09/19 13:58:09
>>142で既にあやまってるなw

172:デフォルトの名無しさん
09/09/19 14:23:19
"[hoge]"とか"{hoge}"みたいな文字列の前後の括弧を取り外すのに

"[hoge]".sub(/\[(.+?)\]/){$1}

なんかじゃなくて、なんかもっとスマートな方法はありませんか?

173:172
09/09/19 14:26:22
できれば
"[hoge]".split(//)[1...-1].join
も無しの方向で。

174:デフォルトの名無しさん
09/09/19 14:28:01
"[hoge]"[1...-1] では駄目と申すか。

175:デフォルトの名無しさん
09/09/19 14:36:42
String[] の動作が期待に添っていて、短いのがスマートだと勘違いしているのなら、>>174
そのまんまの正規表現でマッチした部分を取り出す以上のわかりやすいスマートなものはないかと思われ

str =~ /\A[\(\{\[<](.+?)[\)\]\}>]\Z/; $1

開きカッコの対応を取るライブラリは標準では無いので自作してくれ

176:デフォルトの名無しさん
09/09/19 14:38:04
というかカッコの対応は正規表現では本来書けない。
とCマガで大昔に読んだけど、最近の拡張しまくりのだと可能かもなー。


177:デフォルトの名無しさん
09/09/19 14:48:30
後ろの1文字はchopで毟れるけど、先頭の1文字を毟り取るメソッドっ
てないよな。


178:デフォルトの名無しさん
09/09/19 14:51:08
>>177
その手があったか

"[hoge]".chop.reverse.chop.reverse

179:デフォルトの名無しさん
09/09/19 14:52:59
>>178
ちょwwwwwプwwwww

180:デフォルトの名無しさん
09/09/19 14:54:21
小橋の回転チョップを思い出した

181:デフォルトの名無しさん
09/09/19 17:26:08
右のほうをチョップされたら左のほうを差し出せ

182:デフォルトの名無しさん
09/09/19 20:20:22
×ほう
○ほお

183:デフォルトの名無しさん
09/09/19 20:28:43
>>172
"[hoge]"[/\[(.+?)\]/, 1]
とも書ける。

>>175
Onigurumaならできるはず。

184:デフォルトの名無しさん
09/09/19 21:00:13
すんません。このスレどっからドコまで自作自演なんてしょうか?

185:デフォルトの名無しさん
09/09/19 21:06:16
ココまで俺の自演

186:デフォルトの名無しさん
09/09/20 05:42:36
require ってなんで複数のライブラリ名を受け付けないんでしょうか。
けっこう不便なんですけど。

187:デフォルトの名無しさん
09/09/20 05:58:31
>>186
リファレンスを見たらわかることではないでしょうか?

188:デフォルトの名無しさん
09/09/20 06:35:34
書いてはあるが、意図を読み取るのは不可能だと思う

>>186
require が真偽値を返すメソッドとして作られているから、がいちおうの答
複数受け取ったときは真偽値の配列を返すようにしてもいいんだけど、おおむねキモい

each で回してもいいはずなんだけど、そういう人はなぜか見ないね

189:デフォルトの名無しさん
09/09/20 06:46:28
かなり初期に一瞬だけ実装されたことがあったと記憶
false が返ってきたほうが便利だということでお流れになったんでなかったかな

190:デフォルトの名無しさん
09/09/20 07:50:00
ふとした疑問なのですが、Mechanizeのテストというのはどのように書いたものでしょうか?

191:デフォルトの名無しさん
09/09/20 08:22:58
>>190
FakeWeb 1.2.6 API Documentation
URLリンク(fakeweb.rubyforge.org)

FakeWeb使ったらいけるかも…

192:デフォルトの名無しさん
09/09/20 11:46:12
test

193:デフォルトの名無しさん
09/09/20 11:51:53
>>192
それはRubyで作った2chブラウザのテストですか?

194:デフォルトの名無しさん
09/09/20 12:34:04
186です。

>>188
なるほど!たしかにrequireは戻り値がありますね。でも戻り値を気にする場面っていうのはまれなので、
そういう理由で複数の引数を指定できないのはちょっと勿体ないですね。

Railsとかには require_all というのがあるそうなので、戻り値を気にしなくていいから
引数を複数とれるバージョンのrequireを、requireとは別に用意してほしいなと思いました。

195:デフォルトの名無しさん
09/09/20 12:34:37
yes,we can

196:デフォルトの名無しさん
09/09/20 12:59:39
>>194
なければ自分で作るという選択肢ももとう

197:デフォルトの名無しさん
09/09/20 13:01:42
require を再定義すればいい。


198:デフォルトの名無しさん
09/09/20 16:09:37

..  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄l/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
                 /\(<●>)/\    /\(<●>)/\
                 /\(<●>)/\  /\(<●>)/\
                /\(<●> )/\  \(<●>)/\
             /        \\(<●>)/\
           /   ,ゝ===く   <●>)/\  
           !  γ      `ヾ,_   \
          │ :く(   r,J三;ヾ   )>   \
          l    =; {三●;= }  ,=ニ    l
           ヽ   ゝ≡三=イ       /     <>>1ワロタw
            ヽ       .,,,.    /.|
               ヽ  'ぐ'''''''' /    / ト,
             ヽ.  ヾ''" /  /  |ヽ
             ,./ヽ  `´  /    ./  \、
      -‐ '''"  ̄ /  :| \,,,__,,,, /    /    | `'''‐- 、.._\


199:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/20 17:25:56
>>199
idの所が変になるんじゃなくて、cgi['syashin']以降が変になってるはず
blobとかのバイナリオブジェクトは文字列の連結でSQLを作れない
プリペアードステートメントとかを使え

201:デフォルトの名無しさん
09/09/20 17:56:53
blobじゃなくても普通プリペアードステートメント使うとこだろ

202:デフォルトの名無しさん
09/09/20 18:41:08
何で空配列がかえってくんねん
空文字列ちゃうん?

>> "a".split(/a/)
=> []
>> "aa".split(/a/)
=> []
>> "ab".split(/a/)
=> ["", "b"]


203:デフォルトの名無しさん
09/09/20 18:43:58
空配列に空文字列がつっこまれるべきちゃうん?

[""]

204:デフォルトの名無しさん
09/09/20 18:57:36
>>194
%w(lib0 lib1 lib2).each{|feat| require feat}
でいいじゃん

205:デフォルトの名無しさん
09/09/20 19:12:10
>>202-203
新リファレンスマニュアルから抜粋

> instance method String#split
> split(sep = $/, limit = 0)

> 第 2 引数 limit は以下のいずれかです。

> limit == 0
> 分割個数制限はなしで、配列末尾の空文字列を取り除く
> limit < 0
> 分割個数の制限はなし

「配列末尾の空文字列を」いくつあっても全部「取り除く」ってことなんだろうな多分
それがデフォルトの動作である理由は知らん

206:デフォルトの名無しさん
09/09/20 19:23:06
> 「配列末尾の空文字列を」いくつあっても全部「取り除く」
こんなん知らへんかったがな。おーきに

理由は実装上の都合なんやろなぁ

207:デフォルトの名無しさん
09/09/20 19:33:54
Perlがそうだったから。
Perlがそうだった理由は知らん。

208:デフォルトの名無しさん
09/09/20 22:23:37
>>206
web上では関西弁禁止だよ?知らないな?他の方言ならいいけど


209:デフォルトの名無しさん
09/09/20 22:53:07
>>199
syasinじゃなくてphotoとかpictureつかえ

210:デフォルトの名無しさん
09/09/20 23:01:59
1.9からThreadにかわりFiberというのが入ったそうですが、どうやって使うものでしょうか。
ぐぐってみたけど、上級者向けの説明しかなくてさっぱりでした。
例:Fiberはいわゆるコルーチンです。←コルーチンが何かわからないからさっぱり理解できない説明

高校生でもわかるような説明をどなたかお願いできますか。

211:デフォルトの名無しさん
09/09/20 23:13:30
>>200-201
Ruby/MySQLではプリペアードステートメントつかえない?

MySQL/Rubyじゃないとだめ?

212:デフォルトの名無しさん
09/09/20 23:17:15
>>210
Threadなくなったわけじゃないし、上級者(地雷踏み?)向けの機能だから忘れていいよ
否定的なこと言われてるし
URLリンク(blade.nagaokaut.ac.jp)

213:デフォルトの名無しさん
09/09/20 23:58:30
>>211
こんなのもある
URLリンク(d.hatena.ne.jp)

214:デフォルトの名無しさん
09/09/21 00:21:13
>>211
出来るみたいだけど使ってないんで確認はしてない
URLリンク(planet.mysql.com)
stmt = my.prepare("select ?,?")
stmt.execute 123, "abc"
stmt.fetch # => [123, "abc"]

215:デフォルトの名無しさん
09/09/21 00:43:01
refe2簡単に入れたいけどパッケージとかある?

216:デフォルトの名無しさん
09/09/21 00:58:24
そんなに面倒なことはない気がするんだが

217:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/21 03:42:41
MySQLの本でも買えよ・・・またはRails使うか

219:デフォルトの名無しさん
09/09/21 04:02:16
>>217
エラーメッセージの意味はわかる?
SQL文を実行したけどresult setが返されなかった、なのに行を読み込もうとしてエラーになっている、という意味。
SQLをみるとupdate文を実行しているよね。だからresult setは返ってこない。なのに st.fetch しようとしているからエラーになっているだけ。
これがselect文だったらfetchできるけど。

220:デフォルトの名無しさん
09/09/21 11:47:02
>>219
SERECTしたらはいってた~~!!
ありがと~~!!!

表示のほうも、相談にのってください
格納したデータを

<img src="data:image/jpg;base64,/9j/4AAQ....中略.....">

って感じには表示できるのですが
これだとIE6では見れない。
エンドユーザにFF入れろとか言えないし
IEでも表示させる方法ありますかね?

221:デフォルトの名無しさん
09/09/21 12:24:04
もはやRuby関係なし

222:デフォルトの名無しさん
09/09/21 12:41:30
どうみてもHTMLの質問です
動的か静的かは用途次第だけど、素直にURL割り当てろって

223:デフォルトの名無しさん
09/09/21 12:54:14
スレリンク(tech板)
スレ立てるまでもない質問はここで 100匹目
スレリンク(tech板)
【漏れは】猫でもわかる質問スレ【猫以下です】

224:デフォルトの名無しさん
09/09/21 13:26:50
>>220
アホだなぁ。
base64デコードして出力すればいいだろが。
Content-Typeヘッダも適切に吐いてね。

あ、スレチだね。

225:デフォルトの名無しさん
09/09/21 13:51:04
>>220
さすがにスレ違いすぎるけど。
src="data:..." は IE6 ではサポートされてない。これはブラウザを変えてもらう以外に方法はない。
だから data: を使わずすなおに画像を別ファイルにしておこう。

あるいは URLリンク(example.com)(base64文字列)....
が画像ファイルを返すようなCGIを用意して、
src="data:..." をすべて src="URLリンク(example.com)" に変換するとか。

226:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/21 18:59:21
アホなりに解決しました。

どうもbase64のコードが長すぎでうまく行かなかったっぽいので
idを指定してDBから画像を引っ張って垂れ流すだけのCGIを作成しました。
idなら長くても50桁とか行かんので、これで解決!!
いろいろ、ご迷惑おかけしました。
ヒント本当に助かりました。ありがとうございます。

228:デフォルトの名無しさん
09/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 || ""))
詳しくは
URLリンク(blog.s21g.com)
をみてくれ。


229:デフォルトの名無しさん
09/09/21 20:00:17
いやいや、というか
そんな巨大なデータをクエリ文字列としてURIで渡すなよ、と。

230:デフォルトの名無しさん
09/09/21 20:02:48
URLの長さ上限は、普及しているブラウザでは、一番短かいIEが
2083バイトだったかね。



231:デフォルトの名無しさん
09/09/21 20:04:53
一発でroot奪取されかねない素敵コードだな

232:デフォルトの名無しさん
09/09/21 21:06:05
なんかワロタw

233:デフォルトの名無しさん
09/09/22 14:17:19
ルヴィーっておもしろいですか?ルヴィー使ってる友達が、開発者が日本人だから誇らしいと言ってました

234:デフォルトの名無しさん
09/09/22 14:23:06
>>233
またお前か。
もういいから自分の巣に帰れ!

235:デフォルトの名無しさん
09/09/22 15:31:24
URIのやり取りでトンネル掘り出すアフォとか出てきそうだな。

236:デフォルトの名無しさん
09/09/22 19:39:02
$0とか__FILE__とかARGFとか・・・
最初から備わってる変数が色々ありますけど、どうしてこんなに表記法に統一性が無いのですか?

237:デフォルトの名無しさん
09/09/22 20:31:24
変数

238:デフォルトの名無しさん
09/09/22 21:03:37
>>236
Larry Wallに聞いてくれ

239:デフォルトの名無しさん
09/09/22 21:08:08
Larryにそんなことを聞いたら
Perlの文法が言語学的にどう優れているのかの講義が始まるぞ
そしてハッシュの頭になぜ%が付くのかを聞いたらPerl信者になること確実だからやめておけ

240:デフォルトの名無しさん
09/09/22 21:28:45
$0はsh
__FILE__はC
ARGFはARGVの発展系、ARGVはCのmain関数の引数argvが元になっている
どれもこれもunix+Cを知ってれば、なじみの物ばかりだ

241:236
09/09/22 22:02:34
ありがとうございます。他言語からの習慣に習って付けてるんですね。
でもARGFはどうして定数なんでしょうか?Cだとargvなんかは変数ですよね。
__FILE__は擬似変数で$0はグローバル変数と全部違うけど、どれもグローバルにアクセスしたいものだから
統一してしまえばいいのに、と思ったのです。
ここら辺の、定数やグローバル変数、擬似変数といった使い分けは実装内部のことが分かるような人じゃないと理解できないのでしょうか。

242:デフォルトの名無しさん
09/09/22 22:06:29
ARGFは大文字で始まる
__FILE__は違う


243:デフォルトの名無しさん
09/09/22 22:08:10
定数だったNILが変数nilになったりしてるから絶対的な境界は無いんだろう
ARGFをグローバル変数にするのはおかしな話だが、何でといわれても説明できん

244:デフォルトの名無しさん
09/09/22 22:23:44
ARGFはARGVの発展系、ARGVが大文字でグローバルなのは多分awkが元
他の言語もそれに習ってるからrubyもそれに習っているんだろう

245:デフォルトの名無しさん
09/09/22 22:27:10
>>241
どこかでMatzが
「特殊変数周りの仕様はPerlから引きずった。今では後悔している」
的なことを書いてたような

いずれにせよ、一貫性がないという意見には同意

246:デフォルトの名無しさん
09/09/22 22:41:46
Perlからの脱却
ってのがRubyの精神じゃなかったっけ…

247:デフォルトの名無しさん
09/09/22 22:44:06
Ruby2.0では特殊変数は一新するんじゃない?

248:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/22 23:43:38
色々と突っ込みたい所はあるが、まずはtmpdirにセッション情報が書き込まれたファイルが存在しているかどうかを確認するんだ。

250:デフォルトの名無しさん
09/09/22 23:48:07
ファイルが作成されているのが確認できました。
リロードするたびに増えていきます。
サーバー側の問題でしょうか?

251:デフォルトの名無しさん
09/09/22 23:58:52
ようし、じゃあ次はFirefoxにFirebugを入れてcookieの受信と送信ができているか確認するんだ。
CGIモジュールの仕様はよく知らんが、きっとセッションIDをクッキーに入れて送ってきてくれているはずだぞ!

252:デフォルトの名無しさん
09/09/23 00:15:52
クッキーのリストが反応しないみたいです、他のサイトだとExpiresの項目にsessionというのが出てきています。

253:デフォルトの名無しさん
09/09/23 00:50:05
で、セッションを発行したときのレスポンスヘッダにSet-Cookieはあったのか?

254:デフォルトの名無しさん
09/09/23 00:58:52
まじキチ…ユダヤが人工地震を起こすぞ

【緊急情報カクサンよろしく】

ついに来ました。

大きい動きです。250nT超えてきました。ほぼ間違いありません。もう一度言います。

友人、知人、親類縁者、あらゆるつながりを駆使して巨大地震がくることを教えて下さい。

四川地震より大きいのが来る可能性があります。
URLリンク(g)<)★253494015/
【大気イオン】e-PISCO Part11【また延長】
スレリンク(eq板)★252991726/

本当に地震が来たら、犯人は特権階級全員だということ2


255:デフォルトの名無しさん
09/09/23 01:01:28
すいませんレスポンスヘッダを確認することができませんでした。
Firefoxのコンソールで確認できるような事を書いてあるサイトを見つけたのですが
うまく確認できませんでした。

256:デフォルトの名無しさん
09/09/23 01:04:36
>>2555
Firebugでの見方がわからんならLive HTTP Headers入れろ。


257:デフォルトの名無しさん
09/09/23 01:17:14
ありがとうございます、インストールしてみました。
レスポンスヘッダにCookieと名前のつく項目はなかったです。

258:デフォルトの名無しさん
09/09/23 01:20:23
じゃあそれが原因だろw

ってかCGIクラスのインスタンスって何度も生成したらバグるんじゃないの?
関数の中でインスタンス作成して、破棄しているあたりからして使い方が間違ってるんじゃないのかと。

259:デフォルトの名無しさん
09/09/23 01:26:40
なるほど、少し簡単なプログラムを作って実験してみます。
rubyは明確なルールが分かりづらくて難しいですね。

ありがとうございました。

260:デフォルトの名無しさん
09/09/23 01:32:05
問題はHTTPの理解のほうじゃないだろうか。


261:デフォルトの名無しさん
09/09/23 01:46:05
>>248
たんにHttpヘッダーを送信してないだけかも。
「ruby cgi session」でぐぐったら、こんなページがあった。
URLリンク(d.hatena.ne.jp)
参考にしてみて。

262:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/23 07:51:45
どうしても分からなければ
ソースをまるごと貼り付けて、アドバイスを求めるという手もある
もちろん自力で解決できるならその方がいいけど

264:デフォルトの名無しさん
09/09/23 08:05:08
2chに投稿するとインデントがなくなってすごく見にくいんだけど、JaneStyleのリンクポップアップで
見るとちゃんとインデントされてる!

それをコピーしたらインデント付きでコピーもできる!
全角スペースや&nbsp;によるインデントを使う必要なし!

265:デフォルトの名無しさん
09/09/23 11:05:48
>>264
書き込み時に置換面倒なんだけど、ソースとリンクを毎回書き込むのが面倒なのだが

266:デフォルトの名無しさん
09/09/23 11:15:02
コードを貼付ける場合、どうせなら
URLリンク(pastie.org)
とか
URLリンク(gist.github.com)
とか使うといいんじゃないかな。
詳しくは URLリンク(journal.mycom.co.jp)


267:デフォルトの名無しさん
09/09/23 11:20:00
長い場合はそのほうが望ましいけど
短い場合はそのまま貼ってくれたほうがいいな

あとインデント類の扱いは2chブラウザごとに全然違うらしいよ

268:デフォルトの名無しさん
09/09/23 11:32:03
rubyのせいにしてるが、http知らないと実装は無理なんじゃ。

269:デフォルトの名無しさん
09/09/23 11:35:06
CGIも知ってないと無理な悪寒

270:デフォルトの名無しさん
09/09/23 11:38:57
アホばっかだな・・・
ソース張ってるんだからrubyが原因って一発で原因わかるだろw

271:デフォルトの名無しさん
09/09/23 11:52:44
正しくrubyをかくための
http,cgiの前提知識が足りないのかもしれん

272:デフォルトの名無しさん
09/09/23 19:47:00
Rubyって、GUIアプリを作れるの?

273:デフォルトの名無しさん
09/09/23 19:56:01
Ruby 自身は GUI 部品を持ってない
GUI 部品を司る他の言語や API を直接呼ぶ

一般論としては、GUI が目的なら Ruby を使う理由は何もない
素直に GUI 部品を提供する他の言語を使え
Windows でウィンドウを表示したけりゃ、そりゃ C# を使えばいいのさ

274:デフォルトの名無しさん
09/09/23 20:03:27
うわ 糞言語じゃん

275:デフォルトの名無しさん
09/09/23 20:05:01
>>274
GUI部品がどういうふうに成り立ってるか理解してないだろ、おまえ。


276:デフォルトの名無しさん
09/09/23 20:11:42
>>274


ま た お ま え か !



277:デフォルトの名無しさん
09/09/23 20:13:41
Ruby/Tkの不遇って本当なんだなあ・・・

278:デフォルトの名無しさん
09/09/23 20:24:45
>>277
Windows環境の俺に言わせると
ActiveTclを別に導入しなければならないあたりが原因
Exerbでまとめて配布できるWxRubyと比べて、いろいろ不便だ

279:デフォルトの名無しさん
09/09/23 20:29:24
Win32API経由なら「ActiveTclを別途インストールしてください」という必要もない
Tclの文法をわざわざ勉強する必要もない
アリモノ全部で賄える

280:デフォルトの名無しさん
09/09/23 20:33:10
One Click InstallerにはRuby/Tk最初から入ってなかったっけ
まあPythonでTkinter使ったら幸せになれそうなケース

281:デフォルトの名無しさん
09/09/23 20:35:56
ruby厨涙拭けよ

282:デフォルトの名無しさん
09/09/23 20:47:46
というかTkってけっこう大きいんだよね

必要な人だけ適当に別途入れて使って、というスタンスにしておいたら
実行環境持ってない人に配布するという場合のサポートがすっこんと抜けた
そこまでRubyでやらなくてもいいじゃん却って不便だろ、と思うんだけれど

283:デフォルトの名無しさん
09/09/23 20:48:31
あれ? どこか涙流すような流れになってたっけ?


284:デフォルトの名無しさん
09/09/23 21:05:57
jruby でいいじゃんじゃん。

285:デフォルトの名無しさん
09/09/23 21:09:32
pythonに標準添付されてるtkをrubyから使う事って出来るん?

286:デフォルトの名無しさん
09/09/23 21:18:26
Linux使ってるけど、Ruby/gtk2が便利。書きやすい。
シグナルまわりの書き方が好きだ。

287:デフォルトの名無しさん
09/09/23 21:36:19
>>279
? どういうこと?
dllファイルを直接呼べばいいってこと?

288:デフォルトの名無しさん
09/09/23 22:15:39
Win32APIでやれることだけでなんとかしろって意味だと思う

289:デフォルトの名無しさん
09/09/23 22:18:29
Win32API向けにヘッダファイルの翻訳やってくれたりするライブラリでもあるの?

290:デフォルトの名無しさん
09/09/24 07:36:30
gemのjsonライブラリって日本語まんま変換できないの?
UTF8で["ほげ"].to_jsonとかすると["\u307b\u3052"]とかなっちゃうんだけど

291:デフォルトの名無しさん
09/09/24 08:05:05
いやそれそのまんまだと思うのだが

irb> puts JSON.parse(["ほげ"].to_json)
ほげ

何か問題ある?

292:デフォルトの名無しさん
09/09/24 08:42:47
javascript内では日本語は直接記述しないとか、そういう話?

293:デフォルトの名無しさん
09/09/24 08:45:26
>>290
JSONの仕様としては変換するのが正しい。
ただ、それが日本人にとって便利かどうかはまた別の話。
ユニコードに変換させないオプションがほしいよね。

294:デフォルトの名無しさん
09/09/24 08:47:18
>>293
ごめん、ウソ書いた。「変換するほうが仕様上正しい」というのは間違い。
JSONでは文字列中に日本語をかけるはずだね。

295:デフォルトの名無しさん
09/09/24 08:49:10
機械が生成した JSON はたいてい Unicode エスケープで日本語が書かれてるぞ
仕様上はエスケープしても構わない(may)のでたいていのライブラリは自動エスケープする
そのほうがめんどくさくないからというのが積極的理由

JSON を生で読むなバカという意図が働いてるという気はせんでもない

296:デフォルトの名無しさん
09/09/24 09:34:48
便乗して質問

JSONやYAMLに変換したとき、日本語をそのまま出力してくれるライブラリって
AnJSONやYa2YAMLぐらいしか知らないんだけれど
他に同じことができるライブラリってないかな

297:デフォルトの名無しさん
09/09/24 09:48:05
Jsonて生で読むなっていうようなものなの?
生で読めるのもいいところの一つだと思ってたんだけど

298:デフォルトの名無しさん
09/09/24 10:45:45
クラス変数が定義されているかどうかを調べる方法ありますか?

299:デフォルトの名無しさん
09/09/24 11:18:24
class_variable_defined?

300:デフォルトの名無しさん
09/09/24 11:26:31
Perlでは複数の返り値(リスト)があって、必要のないものには、以下のようにundefと記述しますが、

my ($second, undef, $hour) = localtime;

Rubyではどのように書くものなのでしょうか?

def meth
return 1, 2, 3
end

a, ??, c = meth

301:デフォルトの名無しさん
09/09/24 11:46:53
>>296
Rubyでは知らない。
PythonのYAMLライブラリは、オプションでユニコードに変換する・しないが選べるんだけど、
同じようなオプションがRubyにも欲しいよね。

>>300
特に用意はされてないと思うので、いらない変数を指定するしかないんじゃないかな。
a, _, c = meth
とか
a, dummy, meth
とか


302:デフォルトの名無しさん
09/09/24 12:00:51
>>301
ダミー変数を使うしかないんですね。
了解しました。

303:デフォルトの名無しさん
09/09/24 12:31:35
>>299
古いオンラインマニュアルでは載ってないclass_variable_defined?!古いオンラインマニュアルでは載ってないclass_variable_defined?!じゃないか!

304:デフォルトの名無しさん
09/09/24 12:34:56
class_variable_defined? が載ってない HTML ヘルプ版マニュアルは持ってる
これでも一応 1.8.6 対応だったはずなんだが
まいっか

305:デフォルトの名無しさん
09/09/24 12:36:10
大事なことなので2回いいました

306:デフォルトの名無しさん
09/09/24 17:08:05
Mix-inが言語的にサポートされていると聞いてRubyに心ひかれてます。
とはいえまだ使ってませんが。普段はC++/Javaを使っています。

Mix-in するモジュールを A、その中で定義されているメソッドを foo
とすると、foo からは A を Mix-in した側のクラス C1 内のメソッドを
使うことができるんですよね?

そのクラス C1 をさらに継承して C2 としたらその C2 で定義した
メソッドも呼び出せるんでしょうか?

C++の仮想関数や仮想関数テーブルとのアナロジーで説明してくれている
ページってありませんか?

307:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/24 17:25:10
C++ の vtbl の仕組みでは説明できません。
Ruby の場合「頼んで答えられれば答える」ただそれだけです。

309:306
09/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
09/09/24 17:35:01
>>307 , >>308
ありがとうございます。分かってきました(気がします)。
RubyというかMix-inという以前に頭が動的型付けの言語に
慣れていないことが原因だったように思います。

>Ruby の include はこの検索順番表(の2番目)に自分を追加するだけのシンプルな機能
>継承もこの検索順番表(の2番目)に継承元クラスを追加するだけのシンプルな概念

その解説ですっきりしました。
ということは >>309 も当然可能で
複数のモジュールを Mix-in したりさらに継承を続けたりして
メソッドの名前が重複する場合には、要注意、
つまり include の順番も依存するということですね。

311:306
09/09/24 17:38:28
ということは言語仕様としてMix-inとしての制約を
課しているという点以外は Python の多重継承と
良く似ているなぁ・・・

どうしても業務が静的型付け・手続き型言語
べったりなんで、まだこっち方面(どっち?)は
指をくわえて見てるだけしたが、そろそろ。

312:デフォルトの名無しさん
09/09/24 17:40:18
Matzは恥ずかしい表紙の本でMix-inは多重継承って言い切ってたな

313:デフォルトの名無しさん
09/09/24 17:44:20
>>311 そんなあなたに Scala をどーぞ。

314:デフォルトの名無しさん
09/09/24 17:47:26
>>312
多重継承の形してないだけで、実際は多重継承だと思う

 ・ 自作以外を include すると地獄
 ・ 自作でも 2つ include するとわけわかめ
 ・ 下手に include せずにクラスメソッドとして単体利用すると異常に楽

とか一緒

315:デフォルトの名無しさん
09/09/24 18:12:17
弱めた多重継承には違いない
実装を共有しつつ、ダイヤモンド継承とか面倒な問題は生じなくなる

まあRubyの場合、今度は変数がぶつかる問題があるけど・・・・・
なんかSchemeの健全なマクロみたいに、
名前の衝突を自動回避できないのかね

316:306
09/09/24 18:26:57
>>315
モジュールのメソッドの中で自由にインスタンス変数作れちゃうんですよね
そうするとたしかに変数名は衝突しますね。

317:デフォルトの名無しさん
09/09/24 20:13:26
ま、>>315の言う通りだね。
多重継承には嫌な問題がたくさんあるけど、あれば便利な場面もある。
そこで、通常の継承は単一継承のみに制限した上で、多重継承したい場面のためにMix-inを用意してある、と。
この辺のバランスの取り方は、まさにRuby的。好き嫌いはあるとは思うが。

318:デフォルトの名無しさん
09/09/24 20:19:22
実際問題として include ってあまりしないよねえ
やろうと思えばできるって感じ
慎重に設計した上で組み込む必要があるから、あまり気軽ではない

あと NameSpace::Application を include NameSpace して使う人はトイレのドア開けた瞬間に漏れろ

319:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/24 20:41:52
Ruby のバージョンだけが問題なんだから RUBY_VERSION で場合分けすべきだよね
defined?(Encoding) は時々見るんだけど、何が目的なのかな

321:デフォルトの名無しさん
09/09/24 20:51:16
defined?(Encoding)って何がまずいの?

322:デフォルトの名無しさん
09/09/24 21:00:52
Encoding という名前のモジュールまたはクラスまたは定数が定義されていること、ということしか調べられないこと
>>319 のような問題が起こるし、Encoding という名前のクラスかモジュールがどこかに存在してさえいればいいとか
Encoding という名前のクラスにならほぼ確実に存在して動作も確定なメソッドがあるという問題でもないわけで

文字列のエンコーディング処理に本当に必要なのはナニかというと Ruby 1.9.1 なわけで、
じゃあ素直に 1.9.1 の存在をチェックしたほうが素直なんじゃね、ということに

323:デフォルトの名無しさん
09/09/24 21:19:57
>文字列のエンコーディング処理に本当に必要なのはナニかというと
つーか例えば>>319の場合ならforce_encodingの存在チェックをするほうがよくね?

324:デフォルトの名無しさん
09/09/24 21:27:53
ダックタイピングとして意味がありゃあな

325:デフォルトの名無しさん
09/09/24 21:38:25
エンコーディングではなさそうだけど:

1.9以降の機能と思ってバージョンでチェックしていたら
1.8.8にバックポートされたでござる、という場合を考慮すると
バージョンで全部OKというわけでもないだろうな。

ケースバイケースとしか。



326:デフォルトの名無しさん
09/09/24 21:43:06
いやそれでもそれはバージョンでチェックすべきだろう
Rubyのバージョン名と機能の関係はそんなにまでも信頼できない魔境ではない
ソース触れる人がアップデートすべきだ

327:デフォルトの名無しさん
09/09/25 09:01:16
ダッチタイピングに空耳した

328:デフォルトの名無しさん
09/09/25 15:43:22
だからRUBY_VERSIONで分岐すんなつってんだろ

Encodingで被るなら::Encodingとか
String.method_defined?(:encoding)とか
使えよ


329:デフォルトの名無しさん
09/09/25 16:03:28
ある機能を備えているかが定数の存在やメソッドの存在でしかわからないのが問題なのかな。
Open Classなのでいくらでも後から定数やメソッドを追加できるわけで。
かといって、Javaのパッケージみたいにドメイン名使って一意にするのも鬱陶しいけれど。

330:デフォルトの名無しさん
09/09/25 16:45:12
RUBY_VERSION 否定派は何も根拠がないのが笑える

331:デフォルトの名無しさん
09/09/25 16:54:42
やはり組み込みと添付は Std モジュールに全部入れておくべきだった

332:デフォルトの名無しさん
09/09/25 17:41:18
>>330
1.9の機能を模倣する外部ライブラリができるかもしれないし
Ruby実装だって今やMRI一択じゃない
それと機能の有無で分岐してくれた方が後で読んだときに意図がつかみやすい

といっても俺自身否定派でもないから好きにすればいいと思うよ
できれば1.9スレや本スレとか然るべき場所でやってくれればなお良い

333:デフォルトの名無しさん
09/09/25 17:47:57
涙拭けよ

334:デフォルトの名無しさん
09/09/25 18:12:41
配列の中にハッシュ作りたいんですけど不可能ですか?

335:デフォルトの名無しさん
09/09/25 18:16:30
irb> foo = [{"a"=>0, "b"=>1}]
=> [{"a"=>0, "b"=>1}]

336:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/25 18:27:42
>>336
それって全部同じ 'key' でも何か意味があるの?
keyは色々なものでってこと?

338:デフォルトの名無しさん
09/09/25 18:54:14
結局、Encoding関連で今まで出た案をまとめると

1. RUBY_VERSIONで分岐
2. defined?(::Encoding)
3. str.respond_to?(:force_encoding)

あたりが現実的な解か

339:デフォルトの名無しさん
09/09/25 21:03:11
>>336みたいなのは
{'title' => 'タイトル', 'author' =>'著者', 'date' => '日付'}
という固定フォーマットのハッシュを、何らかの理由で順番を保持したまま
深く考えずに適当に処理したいというときに時々見る

340:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/25 21:40:37
dataは配列でいいんじゃないか?

342:デフォルトの名無しさん
09/09/25 21:42:22
railsのソースコード読むとハッシュの上手な使い方が理解できるよネー

343:デフォルトの名無しさん
09/09/25 21:48:45
>>341
敢えて全部ハッシュにするという例なんじゃないのか

344:デフォルトの名無しさん
09/09/25 22:25:41
>>339
つまり1.9なら不要の発想ってことでおk?

345:デフォルトの名無しさん
09/09/25 22:32:52
1.9.1 (以降)でしか使わないスクリプトであるなら、ハッシュ入り配列は不要だな
普通にハッシュを each で回せばいい

個人的には Hash の順番保持は 1.9.3 くらいで唐突に無くなりそうな機能だと思ってて
これに依存したスクリプトはあまり作りたくないなあと思ってるんだが

346:デフォルトの名無しさん
09/09/25 22:39:09
え!Hashの順番保持されるようになったのか

347:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/25 22:51:52
どちらかというとネガティブな方向で話題になった気がする
順番記憶したら Hash じゃねえとか Rubyオワタ\(^o^)/ とか

349:デフォルトの名無しさん
09/09/25 22:57:26
確かにHashはあるキーに対応する値を保持するだけのものな気がするな
順番保持したいなら配列にしろ・・・・・
とこんな話もすでにさんざんしたわけか

350:デフォルトの名無しさん
09/09/25 23:13:16
Java風に言うなら単なるLinkedHashMapでしょ
単なるハッシュとして使う分にはそれでもいいし、
追加コストは定数だからRuby的には許容範囲だとの判断があったのだろう

351:デフォルトの名無しさん
09/09/26 00:16:02
標準でOrderedHashクラス作って、Hashの仕様が変更されてもOrderedHashだったら大丈夫って風にしないと
まったく意味ないんじゃないの?

352:デフォルトの名無しさん
09/09/26 00:16:16
ruby をスクリプトエンジンとして使用するフリーソフトを作ったんですが、
Artisticライセンスな windows 版 ruby ってありますか?

353:デフォルトの名無しさん
09/09/26 00:38:34
yugui氏が担当している間は大丈夫そうなイメージがある、なんとなく

最悪OrderedHash < Hashになったとしても
互換性が必要な場面でHash = OrderedHashとかしときゃいいんじゃねw

冗談はともかく、現時点であらかじめこうしてから利用するとか
class OrderedHash < Hash; end
順列が必要な連想配列だというのが明確になるし
obsoになったときの対応も比較的容易なはず

まあ俺はArrayクラスがArrayとQueueとStackに七変化するようなもんだと思うから抵抗はないし
消える心配も今のところしてない

354:デフォルトの名無しさん
09/09/26 00:42:41
Hashでも順番持ってた方が普通に便利なんだが
別に深刻な害があるわけでなし、何が不満なんだがさっぱりわからん

355:デフォルトの名無しさん
09/09/26 00:49:15
>>354
・性能落ちるかもしれない不安
・今後消えるかもしれない不安

だと思う

356:デフォルトの名無しさん
09/09/26 00:52:52
言語処理系としてのruby1.9独自仕様なのか、
それともプログラミング言語Ruby1.9の仕様と解釈していいのか混乱があるのでは
もし前者だとしたら、処理系依存には抵抗がある

ハチドリ本いわく
>Ruby 1.9 では、ハッシュの要素は、実装によっては挿入された順序で反復処理される。
う~ん・・・・・

357:デフォルトの名無しさん
09/09/26 01:19:10
>>355
性能というのが速度のことであれば逆に速くなった。
というか、だからこそ入った。


358:デフォルトの名無しさん
09/09/26 01:22:27
確かに列挙は早そうだな

359:デフォルトの名無しさん
09/09/26 02:14:22
実装依存じゃOrderedHashのつもりで使うのは御法度か

360:デフォルトの名無しさん
09/09/26 02:16:02
rubyの開発グループは本当に人材酷いな。Railsに全部任せちゃえよ

361:デフォルトの名無しさん
09/09/26 02:36:06
いやいやRailsの人たちに任せたら新機能と非互換がTINYごとにどんどん増えるよ。

362:デフォルトの名無しさん
09/09/26 04:38:27
>>360
お前Rails使ってないか、あるいは使い始めたの今月だろ

363:デフォルトの名無しさん
09/09/26 05:31:14
来月には後悔するのか、流動性速すぎだろRails

364:デフォルトの名無しさん
09/09/26 07:24:58
Railsは、こっち推奨になりました→やっぱやめました→ごめん、やっぱこれ
とかバージョンアップのたびにあったりして笑うw
いや、使っている方としてはどっちだよ!とか思うけど

365:デフォルトの名無しさん
09/09/26 11:11:13
前田さんたちに頑張ってもらって、言語仕様で明文化してもらうまでは
Hashのキー順序については昔ながらの意識でいることにする。


366:デフォルトの名無しさん
09/09/26 11:28:47
JISの話なら、1.8ベースだから順序の保証は入らんと思うぞ

367:デフォルトの名無しさん
09/09/26 11:37:01
>>338
>>328のmethod_defined?も。

>>329
ある機能自体がある定数やメソッドで提供されてるんだから、最も自然だろう。

368:デフォルトの名無しさん
09/09/26 19:22:53
defined? や responsed_to? はダックタイピング用の機能であって
モジュール存在判定に使うもんではないと思う

369:デフォルトの名無しさん
09/09/26 19:48:38
むしろモジュールの存在を問わず
メッセージに応答できるか否かだけを問うべきでは?

370:デフォルトの名無しさん
09/09/26 19:54:42
実際に必要なのは処理結果であって返事そのものではないというのが理想と現実の深くて暗い谷間

371:デフォルトの名無しさん
09/09/26 20:01:47
>>368
ダックタイピングならそんな判定はしない


372:デフォルトの名無しさん
09/09/26 20:04:48
ていうかさあ、responed_to? 使ってる奴だって
その名前のメソッドを持っていることを期待してるのではなく
「Ruby 1.9 の」 force_encoding であることを期待しているんだろ
じゃあそれの条件をきちんと書けよ

373:デフォルトの名無しさん
09/09/26 20:08:05
>>372
期待していない不正なメソッドが動作した場合はたいてい例外が発生してプログラムが止まる

374:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/26 20:35:44
プログラムが止まったあと>>373がどう改修するのかにちょっと興味がある

どうせ基本雑談なので次の質問の方気後れせずにどうぞ

376:デフォルトの名無しさん
09/09/27 00:35:12
URLリンク(blog.livedoor.jp)
上のページに掲載されている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:デフォルトの名無しさん
09/09/27 00:49:00
unpackが怪しい気がするから、Base64デコードしたデータのハッシュを、Perlのやつと比べてみたらどうかな?
あと、詳しくないんだけど、そもそもRawDeflateと普通のDeflateって同じものじゃないとか?

378:デフォルトの名無しさん
09/09/27 01:20:21
>>377
まさかと思って調べたところ、RawDeflateと普通のDeflateが違うものでした。
考えが及びませんで、ありがとうございました。
RawDeflateにchecksumなんかが頭についたものがDeflateのようで、以下のようにしたら動きました。
p Zlib::Inflate.new(-Zlib::MAX_WBITS).inflate(data.unpack('m')[0])

379:デフォルトの名無しさん
09/09/27 03:45:29
配列の中にハッシュ入れたんですけど
a = [0, {1 >= 5}, 3]
これの配列データがFixnumかハッシュかどうかで処理を分けたいんですが
is_a?(Fixnum)で分岐させようとしたらエラーが出ました
classで調べたらエラーが出ます
どうすればいいんでしょうか?

380:デフォルトの名無しさん
09/09/27 03:56:08
{1 >= 5} でエラーという落ちじゃないだろうな
ちょっとコードをはってみろ


381:379
09/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
09/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:デフォルトの名無しさん
09/09/27 04:19:58
どの行でそんなエラー出てるんだい

384:379
09/09/27 04:28:48
if MASTERY_ARRAY::HASH_DATA[1][i].is_a?(Fixnum)
ここです
配列のインデックス2のハッシュ読もうとしたら出ます

385:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/27 04:38:30
URLリンク(www.ruby-lang.org) の each と each_index をよく読むといい
って、eachの例がeach_indexの結果と区別つきにくいね…1,2,3じゃない例つかえばいいのに


387:379
09/09/27 04:40:24
あーそういうことですか
インデックス入らないと困るんですが
何かうまい書き方ありますか?
とりあえず考えてみます
あったらお願いします
ありがとうございました

388:デフォルトの名無しさん
09/09/27 04:47:09
each {|要素| ... }
each_index {|インデックス| ... }
each_with_index {|要素, インデックス| ...}


389:デフォルトの名無しさん
09/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
09/09/27 04:58:13
おーすごいさすがプログラム板
each_indexで動きましたありがとうございます
389さんが書いたとおり「要素がハッシュであること」が評価の大筋です
kind_of?(Hash) これは知りませんでした
なんとかいけそうですありがとうございました


391:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/27 13:24:58
Win32で一文字入力してすぐ制御を返すサンプルないですか?

393:デフォルトの名無しさん
09/09/27 13:44:36
Curses.getch は?

394:デフォルトの名無しさん
09/09/27 18:44:37
ありがとう。
Winにもcursesってあるのか。

395:デフォルトの名無しさん
09/09/27 18:53:34
>>394
普通に導入可能だよー

396:デフォルトの名無しさん
09/09/27 21:22:24
rubyでCGIの勉強しようとおもって
lighttpdをインストールしました。

ところが、設定方法がわからず、htmlは表示出来るのですが
cgiが動きません。涙目状態です。あちこちググりました・・・
途方にくれています・・・

397:デフォルトの名無しさん
09/09/27 21:25:08
mongrelをいれるといいよ

398:デフォルトの名無しさん
09/09/27 21:26:57
力になっちゃあげたいけど、スレ違いかな・・・
WebProg板か、どっかにLighttpdのスレがあるから、そこで質問したらいいよ

399:デフォルトの名無しさん
09/09/27 21:28:09
SocketってライブラリがあるからそれでWebサーバ書くのがいいと思うな

というか環境や参考にしたページをどこまで試してどこで詰まったとか
そういうのも無しに答えられるわけないので

400:デフォルトの名無しさん
09/09/27 21:30:33
それが無いこと自体が答だろ
つまり、サーバ立てる知識が無い

401:デフォルトの名無しさん
09/09/27 21:32:26
>>398
lighttpdのスレは先に見ました。最終書き込みが8月、その前が6月くらいと
人の気配が感じられませんでした・・・

402:デフォルトの名無しさん
09/09/27 21:36:43
どう転んでもWebサーバの挙動の知識は必要になるわけなんだし
普通にゼロから勉強したほうが早いんだけどね

403:デフォルトの名無しさん
09/09/27 21:36:52
Linuxなら各ディストリの初心者スレにいけば、誰かが教えてくれそう。

404:デフォルトの名無しさん
09/09/27 21:40:14
>>402
まったくだぬ

「WebサーバやHTTPはお着せとコピペで済ませて本題のRubyの学習をしよう」というのは
CGI関連に限ってはありえん

405:デフォルトの名無しさん
09/09/27 21:44:58
>>404
翻訳しながら、lighttpdの本家のページ見てみます。
mongrelも検討してみます。

apacheの設定よりは、ずいぶん楽そうに見えたんですが。。

406:デフォルトの名無しさん
09/09/27 21:47:26
中途半端にマイナーなサーバソフトウェアだと情報が全くないということはばしばしある
めっちゃメジャーなのを小規模で使うのが結局マシだったりすることは意外と多い

407:デフォルトの名無しさん
09/09/27 21:50:40
自分用WebサーバはApacheを接続数とか1人用に絞って使うのが一番だという結論になった

408:デフォルトの名無しさん
09/09/27 21:50:52
>>396はどう動かないか書いていないから誰も助けようがないよ。
cgiがどう動かないのさ。スクリプトを貼ったりしろよ。

409:デフォルトの名無しさん
09/09/27 22:02:07
Apacheの方が情報多いのに。

410:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/27 22:13:48
ログをまずは見ようぜ。
1.cgiに実行権限がついているかとか1.htmlの読み込み権限とかもチェックしような

412:デフォルトの名無しさん
09/09/27 22:15:53
action=/usr/lib/cgi-bin/1.cgi っておかしいだろ… lighttpd とかにかかわらず
/usr/lib とか公開するとは考えにくいから action=/cgi-bin/1.cgi とかなんじゃないのか
この調子じゃ権限とかもだめそうだな

413:デフォルトの名無しさん
09/09/27 22:31:01
>>396
RubyでCGIの勉強をするなら、lighttpdから始めるのはオススメしない
cgi.rbを使って、WEBrick上 or Apache上で動かしてみるとか
Sinatra使うとかしたほうがいい

414:デフォルトの名無しさん
09/09/27 22:40:09
>>411
chmod 755はしてあります。

>>412
あ、cgi-binでいいんですね。フルパスにしちゃいました。
たしかに公開しないですもんね。

415:デフォルトの名無しさん
09/09/27 22:52:59
ファイルの所有者も確認しような
lighttpdを起動したユーザがownerだよな?

416:デフォルトの名無しさん
09/09/27 22:55:57
式がnil, false, 0なら偽になるif文てないの?

417:デフォルトの名無しさん
09/09/27 23:06:09
>>415
ファイルオーナーが、「root」ですね
lighttpdは、「www-data」が起動してます

sudo cpでファイルを/usr/lib/cgi-binにコピーすると
所有者が、ルートになってしまいます。

ちょっと、apacheや他のを調べてみます。みなさん、スレ違いに付き合って
くださって申し訳ありがとうございまsyた

418:デフォルトの名無しさん
09/09/27 23:18:45
>>416
!x || x== 0

'' や [] や {} も偽にしたいならActiveSupport入れてblank? と present?
を使え。



419:デフォルトの名無しさん
09/09/27 23:23:03
>>418
それだとnil, false, 0で真になるんだけど。偽がほしいんですが無理なんですか?

420:デフォルトの名無しさん
09/09/27 23:29:26
x && x != 0
どんだけ応用力ないのかな…

421:デフォルトの名無しさん
09/09/27 23:33:29
いかにも落とし穴がありそうだと漏れのアンテナが反応しております

422:418
09/09/27 23:35:35
すまん逆転させるのわすれてた。てへ。



423:デフォルトの名無しさん
09/09/27 23:49:22
>>417
ファイルの権限を777にして実行してみな。
それで実行できれば権限関係の設定がおかしかったってことだ
linuxの基礎を勉強私的な。

424:デフォルトの名無しさん
09/09/28 10:48:55
Digest::MD5.digest の値を hexdigest に変換する計算式を教えてください。

convert(Digest::MD5.digest(value)) == Digest::MD5.hexdigest(value)

となるようなconvert()です。
あるいはヒントでもいいのでお願いします。


425:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/28 20:26:36
Dir.foreach('hoge'){|filename|
filename.match(/(aaa)(bbb)/}
print $1
}

この状況で、$1や$2の情報を配列に入れるにはどうすればいいですか?
具体的にはこの後、$1の内容について一つ一つ処理をしていきたいんです。

428:デフォルトの名無しさん
09/09/28 20:39:11
ary = []
Dir.foreach('hoge'){|filename|
filename.match(/(aaa)(bbb)/}
ary << [$1, $2] # もしくは ary << $1 << $2
}
p ary

429:デフォルトの名無しさん
09/09/28 20:47:13
filename.scan(/(aaa)(bbb)/)

430:デフォルトの名無しさん
09/09/28 20:51:17
>>428
「<<」ってこういうところで使うんですね。
勉強になりました。ありがとうございました!


431:デフォルトの名無しさん
09/09/29 00:50:52
rubyを使ってgnuplotで簡単にグラフを書きたいんだけど、
何かお勧めありますか?

432:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/29 12:52:20
エディタから編集中のRubyのスクリプトを独立したウィンドウ、ターミナルで起動したい
エラーがあったらエディタがそれを取り込んでタグジャンプしたい
teeやら別のモジュールをrequireするのはなるべく避けたい
もちろんユーザーはputs/getsを制約なく使いたい

といううまいやり方ってないですか?
ようするにエラーが出たらそれだけをログファイルに書き込んでrubyは終了コード1を返したいです
標準エラーをファイルに書き込むようなファイルをこっそり-rするのが現実的なんですかね

434:デフォルトの名無しさん
09/09/29 13:06:42
>>433
Emacs使え

435:デフォルトの名無しさん
09/09/29 13:10:50
標準の ruby-mode で M-x run-ruby で Emacs 内に irb 開いて
M-x ruby-load-file → Enter すれば irb でファイルが実行されるな

エラー行ジャンプはどうしようか

436:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/29 19:21:13
1万PVのPHPで作られたサイトをRuby(ROR)かScala(Lift)どちらかを使って
バージョンアップしようと計画していますが、どちらがお勧めでしょうか?

TwitterもRubyからScalaへ書き換えたりしていますので...

438:デフォルトの名無しさん
09/09/29 19:28:02
問題ないならPHPのままにしておく

439:デフォルトの名無しさん
09/09/29 19:33:59
scalaって日本でも実績あるの?

440:デフォルトの名無しさん
09/09/29 20:17:30
1万PVって何かを説明してるように見えて、実際はまったく説明してないよなあ。
開設以来10年で1万PVなのか、毎秒1万PVなのか。

441:デフォルトの名無しさん
09/09/29 20:21:10
>>434-435
特定のエディタの話はしてないんだけど…

442:デフォルトの名無しさん
09/09/29 20:22:53
一応、単位としては1日か1ヶ月かのどっちかだな
1日1万PVならコンテンツによってはまあ普通
1ヶ月1万PVなら内容によっては閉鎖したほうがエコ
どっちにしてもPHPで動いてるならPHPで増強したほうがきっと楽だ


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch