Ruby 初心者スレッド Part 29
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/07/03(金) 12:55:05【Ruby1.9.1 は従来版とは異なる部分も多く、書籍や解説やライブラリのサポートがまだありません】
【自力で解決できない壁で悩むことのない最新安定版の Ruby1.8.7 での学習をお勧めします】
※1.8.7 は 1.8 系と 1.9 系の橋渡しをするためのリリースで、1.9 系 の便利新機能の一部が利用可能です
関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・モジュール名やエラーメッセージでググる
・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・エラーメッセージ(自力で訳さずなるべくそのままで)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0002デフォルトの名無しさん
2009/07/03(金) 12:55:47Q:
いちからRubyを始める初心者向けのRuby入門書は何がありますか?
A:
プログラム作成自体の初心者なら
「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
http://www.amazon.co.jp/dp/4797336617/
文法は理解済み(orリファレンスで乗り切る既言語習得者)の場合のRuby様式を知る必携2冊目
「初めてのRuby」
http://www.amazon.co.jp/dp/4873113679/
以下は外れが少ないとされている本です。必ず立ち読みした上で自分の目的とレベルに応じて購入してください
「Rubyレシピブック 第2版 268の技」(初心者向け)
http://www.amazon.co.jp/dp/4797340045/
「プログラミングRuby 第2版 言語編」(初心者向け)
http://www.amazon.co.jp/dp/4274066428/
「Ruby Way 第2版」(脱初心者向け)
http://www.amazon.co.jp/dp/4798115339/
「Rubyクックブック ―エキスパートのための応用レシピ集」(脱初心者向け)
http://www.amazon.co.jp/dp/4873113245
以下の本は言語作者が書いた最新本ですがとりあえず初学者向けではありません
「プログラミング言語 Ruby」(言語として深く知りたい人向け)
http://www.amazon.co.jp/dp/4873113946/
0003デフォルトの名無しさん
2009/07/03(金) 12:56:28Ruby Home Page 【公式、お役立ち度が微妙】
http://www.ruby-lang.org/ja/
Rubyリファレンスマニュアル 【検索機能休止中、Googleなどの併用を】
http://www.ruby-lang.org/ja/man/
http://www.ruby-doc.org/ 【詳しい英語版】
HTMLヘルプ版リファレンスマニュアル配布さん 【Windowsで便利、検索も無論可能】
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
Programming Ruby - The Pragmatic Programmer's Guide 【好評書籍の初版がネットで、ただし英語】
http://www.ruby-doc.org/docs/ProgrammingRuby/
Rubyist Magazine - るびま 【ライブラリ紹介などの読み物、過去のコードレビューは一読の価値あり】
http://jp.rubyist.net/magazine/
逆引きRuby 【やりたいことから探すWiki、最近元気ないので編集者募集】
http://www.namaraii.com/rubytips/
はてなキーワード > Ruby 【うっかりどっさりまとまったリンク集、説明なし】
http://d.hatena.ne.jp/keyword/Ruby
RubyForge 【○○をやりたい管理されたライブラリを探すならここ、英語】
http://www.rubyforge.org/
GitHub 【○○をやりたいコードをとにかく探すならここ、英語】
http://github.com/
日本Rubyの会 【最近はオフライン勉強会の寄り合い場と化しているので近くで勉強会があれば】
http://jp.rubyist.net/
0004デフォルトの名無しさん
2009/07/03(金) 12:57:12Rubyについて Part 36
http://pc12.2ch.net/test/read.cgi/tech/1246174168/
アンチスレ
Rubyについて(アンチ専用) Part003
http://pc11.2ch.net/test/read.cgi/tech/1207233348/
Railsスレ
【Ruby】Ruby on Rails Part7
http://pc11.2ch.net/test/read.cgi/php/1241100447/
Windows用スレ
【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc11.2ch.net/test/read.cgi/tech/1155031689/
Ruby 1.9 系列スレ
魁け! Ruby 1.9.X
http://pc11.2ch.net/test/read.cgi/tech/1201603546/
0005デフォルトの名無しさん
2009/07/03(金) 12:57:56Ruby 初心者スレッド Part 28
http://pc12.2ch.net/test/read.cgi/tech/1242436010/
0006デフォルトの名無しさん
2009/07/03(金) 13:57:32instance_variable_get()
instance_variable_defined?()
はありますが
instance_variable_delete()
はないでしょうか。
あるオブジェクトからインスタンス変数を完全に取り除く方法があれば教えてください。
0007デフォルトの名無しさん
2009/07/03(金) 14:16:180008デフォルトの名無しさん
2009/07/03(金) 14:19:450009デフォルトの名無しさん
2009/07/03(金) 15:13:57remove_instance_variable
ちなみに俺は>>8の意見には反対、使っても全然OK派
0010デフォルトの名無しさん
2009/07/03(金) 15:54:570011デフォルトの名無しさん
2009/07/03(金) 16:18:300012デフォルトの名無しさん
2009/07/03(金) 16:23:58キモッって思った一方これ使ったら綺麗に書けそうなプログラムがあるなあとも思った
0013デフォルトの名無しさん
2009/07/03(金) 16:28:20ふつーに書いたほうがわかりやすいし、多くの場合動作も速い
0014デフォルトの名無しさん
2009/07/03(金) 17:22:37さらに特殊なケースへの対応として、
プログラマがその気になればRubyは大抵の無茶を許してくれる
0015デフォルトの名無しさん
2009/07/03(金) 17:57:24やはりWeb系ですか?
0016デフォルトの名無しさん
2009/07/03(金) 17:58:27仕事でRubyを使うことはないです
強いて言うなら趣味グラマーの用途しかありません
0017デフォルトの名無しさん
2009/07/03(金) 18:14:43サーバは自前で用意するから、という案件が2年でやっと2個
Java, PHP > 量産の壁 >> Perl >> なんかシャレにならない壁 >> Ruby on Rails > Python (激レア)
こんな感じ
「こんなソフト作ってという仕事取ってきたからじゃあRubyで作ろうぜ」というのはまずありえない
言語は伏せるけどシステム作るから買ってーという営業込みでないとお金にならない
Rubyが社内ツールとしての地位を確立してて、
とっても便利に業務進めてる会社に心当たりがこれまた2つあるが、
じゃあこの便利なRubyでシステム作って売ろうぜという話には間違ってもなってないようだ
まあ適材適所って奴だな
Rubyを使えるということを評価する会社はいい会社だと思うが、Rubyしか使えない人を雇う会社は駄目会社
0018デフォルトの名無しさん
2009/07/03(金) 18:26:58なるほど、そうですか。残念ですね。
>>17
やっぱり、Java、PHPなんですね。
まだまだ普及というか認められていないんですね。
趣味でしこしこ勉強します。
0019デフォルトの名無しさん
2009/07/03(金) 18:28:17認めるというか、Rubyにする必要性がないといった感じ
0020デフォルトの名無しさん
2009/07/03(金) 18:43:24そもそも日本でベンチャーを興すのは難しいらしいしな
0021デフォルトの名無しさん
2009/07/03(金) 18:55:04それだと今後も期待薄ですね。
>>20
限られた人らのツールになりそう。
0022デフォルトの名無しさん
2009/07/03(金) 22:01:18>remove_instance_variable
ありがとうございます。これってprivateメソッドだったんですね。
Object.new.methods.grep(/instance/) で探してたので、見つけられませんでした。
精進します。
0023デフォルトの名無しさん
2009/07/03(金) 22:21:11遊んでるくらいしか使ってないなー。
あっ、後初期設定だるいかなー
apacheにfast cgi入れてうんたらかんたらは面倒〜
0024デフォルトの名無しさん
2009/07/03(金) 22:45:14RAA - net-yjwsを持ってない?もしくは配布している所知らない?
http://raa.ruby-lang.org/project/net-yjws/
のファイル配布先であるmoonwolfのサーバが死んでるみたいで手に入らない.
インターネットアーカイブで引っこ抜けるかなと思ったけどそっちでもダメでした.
0025デフォルトの名無しさん
2009/07/03(金) 23:48:07置かれている実tar玉で、生きているようだ。
とりあえずそれで凌げるかどうか試してみては?
002624
2009/07/04(土) 01:06:42そっちもブラウザでやってみたんですけどFirefoxでは
内容符号化 (Content-Encoding) に問題があります
IEとChromeではつながらず。
UnixからwgetではDLできたけど展開できませんでした
0027デフォルトの名無しさん
2009/07/04(土) 01:37:190028デフォルトの名無しさん
2009/07/04(土) 12:42:27$stdoutでファイルを指定し、そこに結果を入れるようにしたのですが、
できたファイルを開くと、結果の頭部分しか入っておらず、困っています
エラーはでていませんし、標準出力の場合や、リダイレクトをした場合は結果の全てがきちんと出力されています
プログラムは以下です
sv = STDOUT.dup
$stdout = File.open("ファイル名", "w")
結果を出力
$stdout = sv
わかる方いましたら教えていただけないでしょうか
OSはLinuxでRubyのバージョンは1.8.5です
0029デフォルトの名無しさん
2009/07/04(土) 12:48:040030デフォルトの名無しさん
2009/07/04(土) 12:52:48・ ファイルに出力するよモードじゃないときは標準出力に出力
・ これを $stdout への代入だけで切り替えたい
という処理をしたいと推測
いちいち>>29するのはコードが面倒になると思うので、
sync=true したファイルIOオブジェクトを $stdout に指定しろ
0031デフォルトの名無しさん
2009/07/04(土) 12:55:32本筋とは関係ないけど、たぶんそれSTDOUTをdupする必要はないな
$stdout = STDOUT
でおk
0032デフォルトの名無しさん
2009/07/04(土) 12:59:17まあどちらにしてもdupは要らんね
0033デフォルトの名無しさん
2009/07/04(土) 13:07:04やってみましたが、結果は同じでした・・
>>30
下手な質問で申し訳ありません;
>・ ファイルに出力するよモードになったときはファイルに出力
>・ ファイルに出力するよモードじゃないときは標準出力に出力
>・ これを $stdout への代入だけで切り替えたい
で合っています
が、やはりできませんでした
すいません・・
>>31
>>32
わかりました
やり直してみます
みなさんありがとうございます
0034デフォルトの名無しさん
2009/07/04(土) 13:29:26f.sync = true
$stdout = f
これでなんとかなんね?
0035デフォルトの名無しさん
2009/07/04(土) 13:42:35できませんね…
自分がLinux初心者のため、出来たファイルを開く際、文字コードに関する不具合(文字化けとか)によって
中身がおかしいのかもしれないです
別の方法でやってみますね
助けてくださってありがとうございました
0036デフォルトの名無しさん
2009/07/04(土) 13:49:260037デフォルトの名無しさん
2009/07/04(土) 13:51:540038デフォルトの名無しさん
2009/07/04(土) 13:53:38おk把握
0039デフォルトの名無しさん
2009/07/04(土) 15:54:40クラスとモジュールの違いがよく理解きないです。
解りやすく教えてほしいです。
0040デフォルトの名無しさん
2009/07/04(土) 16:01:270041デフォルトの名無しさん
2009/07/04(土) 16:05:53普段使うもの
処理を分類したもの(メソッド)を起動するオブジェクトの生成器
基本的にはこれだけで生きていける
モジュール
普段使わない
ガチ初心者のうちは自分から作らなくてもいいというかむしろ忘れろ
initialize できない(そもそも作れない)
クラスAとクラスBに共通メソッド群Mを持たせたいという場合、Mをモジュールにすると楽
クラスMを作って継承しても用が済むことがほとんどだが、モジュールにしたほうが本当はいい
0042デフォルトの名無しさん
2009/07/04(土) 16:07:53つまりクラスはモジュールとしての機能を全て持っていて
その上で、特別にインスタンス化することができる
具体的には、あのnewってのができる
0043デフォルトの名無しさん
2009/07/04(土) 16:09:21継承して使うのがクラス、includeして使うのがモジュール。
Classクラスのインスタンスなのがクラス、Moduleクラスのインスタンスなのがモジュール。
ModuleはClassのスーパークラス。
0044デフォルトの名無しさん
2009/07/04(土) 16:18:15まーあれだ、半年くらいダラダラ使ってればある日突然わかるからあんま心配すんな
日常的には「よくわからんけど○○らしい」程度の理解で充分
0045デフォルトの名無しさん
2009/07/04(土) 17:02:41同じようなことしてるけど、
#最初
$stdout=File.open("filename""w")
出力
#最後
$stdout=STDOUT
ってなってた。
0046デフォルトの名無しさん
2009/07/04(土) 17:35:520047デフォルトの名無しさん
2009/07/04(土) 18:42:42Ruby1.9.1では、BasicObject、Object、Class、Moduleもすべて。
0048デフォルトの名無しさん
2009/07/04(土) 19:01:080049デフォルトの名無しさん
2009/07/04(土) 19:17:11>>47
>すべてはClassクラスのインスタンス
とりあえず
class Foo; end
は暗黙的にObjectを継承するし
obj = Foo.new
のobjはObjectインスタンスの性質も多く含むけど(というかこの場合そのまんま)
あくまでもobjはFooのインスタンスであってObjectのインスタンスとは呼ばない
という前置きをした上で
全てのクラスそのものがClassインスタンスっていうのは正しい
Object.new.class #=> Object
Object.class #=> Class
「インスタンスを生成する役割を持つもの」がClassクラスのインスタンスであり
Rubyではそれを「クラス」と呼ぶ
でもそれによって生成されたインスタンスは「クラス」ではない
もちろんClassのインスタンスという特例は除く
0050デフォルトの名無しさん
2009/07/04(土) 19:39:58Rubyではすべてがオブジェクトであるという文言が
気になった次第です。
>>48
Classクラスのインスタンスはクラスオブジェクト(Object、Fooなど)
ということになるんですね。
クラス(Class)のインスタンスがクラスオブジェクト(Foo)で、
クラスオブジェクトFooもまたインスタンスを生成してと。。
やはり必要時以外は考えないようにします。
005139
2009/07/04(土) 22:06:38けっこう、すっきりしました。
0052デフォルトの名無しさん
2009/07/04(土) 23:11:56プログラミング言語Ruby
凄い濃い本だが確かに初心者にはお勧め出来ない
0053デフォルトの名無しさん
2009/07/04(土) 23:38:46どの言語にも一冊はあるような「しっかりした本」だから・・・・・・
細かい挙動を確かめたくなった時に、手にとればいい
0054デフォルトの名無しさん
2009/07/05(日) 12:18:05def initialize(x, y)
@x = x
@y = y
end
end
インスタンス変数に @x = x と書くのと self.x = x は同じ意味ですか?
0055デフォルトの名無しさん
2009/07/05(日) 12:26:40インスタンスメソッド Widget#x= の内部でインスタンス変数 @x にアクセスしてるかどうかは x= の定義による
0056デフォルトの名無しさん
2009/07/05(日) 12:29:15そのまま x とだけ書くと引数の変数 x にアクセスしてしまうので
それを避けるために明示的にメソッド x を指示したいのだろう
0057デフォルトの名無しさん
2009/07/05(日) 12:39:56def initialize(x)
puts "x は #{x} です"
puts "self.x は #{self.x} です"
end
def x
return "メソッド"
end
end
C.new('引数')
結果
x は 引数 です
self.x は メソッド です
0058デフォルトの名無しさん
2009/07/05(日) 12:44:38>>56
レスありがとうございます。
セッター(x=、attr_writer、attr_accessor) を明示的に定義しなければ、self.x は
def x=(x)
@x = x
end
が実行されたのと等価なので、結果は同じということですよね。
0059デフォルトの名無しさん
2009/07/05(日) 12:49:26レスありがとうございます。
僕はゲッター、セッター
hoge = self.x
self.x = poge
がメソッドだというのを忘れがちです。
006058
2009/07/05(日) 12:51:43セッター(x=、attr_writer、attr_accessor) を明示的に定義しなければ
これはウソでした。
セッターattr_writer、attr_accessor は必要です。
0061デフォルトの名無しさん
2009/07/05(日) 13:19:27あれはただの値を返すメソッドで、attr* はメソッド定義を肩代わりする略記に過ぎない
module AttrReader
def attr_reader(arr)
arr.each do |method_name|
eval("def #{method_name}
return @#{method_name}
end")
end
end
end
class C
include AttrReader
attr_reader([:x])
end
と
class C
attr_reader :x
end
はリクツ上おおむね同じ動作をする
attr* を使う動作上のメリットというのは何もない
メソッド定義書くのがちょっと短縮されるというだけだったりする
0062デフォルトの名無しさん
2009/07/05(日) 13:40:03なるほど。
だからreader、writerと呼ばれるんですかね。
0063デフォルトの名無しさん
2009/07/05(日) 14:36:28なにか障害をもっているの?
0064デフォルトの名無しさん
2009/07/05(日) 14:38:34俺もリアル世界では早口って言われる。
相手が聞き取りやすいようにゆっくり話すように心がけているが ...orz
0065デフォルトの名無しさん
2009/07/05(日) 14:41:45matzのことなら、最低限一般水準程度には普通に、また俺的にはとても知性的にかつ
フレンドリーに喋ったり発信しているように見受けられる
まあコミュニケーションには受け手の問題もあるのは知ってるので、>>63の見解も
頭から否定する気はないが
0066デフォルトの名無しさん
2009/07/05(日) 14:43:16「頭の回転が速すぎて口が追いついてない」
0067デフォルトの名無しさん
2009/07/05(日) 14:48:420068デフォルトの名無しさん
2009/07/05(日) 14:49:370069デフォルトの名無しさん
2009/07/05(日) 14:52:51ttp://pc12.2ch.net/test/read.cgi/tech/1246174168/
0070デフォルトの名無しさん
2009/07/05(日) 14:53:20飼い慣らされると痛い目に遭うから、だと思う。
0071デフォルトの名無しさん
2009/07/05(日) 15:08:55在学中に有名になってしまって、就職する必要がなくなった。
0072デフォルトの名無しさん
2009/07/05(日) 16:48:57??
chainmail?
0073デフォルトの名無しさん
2009/07/05(日) 19:32:270074デフォルトの名無しさん
2009/07/05(日) 19:34:54就職しなくても生きられたから就職しなかったというだけに過ぎない
0075デフォルトの名無しさん
2009/07/05(日) 20:40:040076デフォルトの名無しさん
2009/07/05(日) 20:43:400077デフォルトの名無しさん
2009/07/05(日) 21:30:21対象となるクラスは既に他のクラスを継承してるので、追加メソッド群をクラスにして継承してもらうことはできません。
0078デフォルトの名無しさん
2009/07/05(日) 21:42:39「該当クラス定義を再オープンしてメソッド定義を書き換える」というeval系の何かを適当に実行
0079デフォルトの名無しさん
2009/07/05(日) 21:55:03普通にdefするだけじゃだめなの?
class A < S
end
class A
def extra_method
end
end
もしくは、単にincludeするとか
0080デフォルトの名無しさん
2009/07/05(日) 22:06:15includeでクラスのメソッド定義を上書きできるとは初耳だな
0081デフォルトの名無しさん
2009/07/06(月) 01:01:03superclassよりは優先されるから一応は出来る
自身のメソッド定義は覆せないけどね
「既存のクラス」の名前を決め打ちで利用されてるのではなければ
もう一度継承して(「既存のクラス」をsuperclassにして)からincludeすればいい
決め打ちされてるなら・・・>>79の方法になるんじゃないかなぁ
とてもお勧めできない方法
class Foo; end
class Bar < Foo; end
Foo = Bar
Foo.new.class #=> Bar
0082デフォルトの名無しさん
2009/07/06(月) 01:18:46具体的なコード片とかが無いとどう困ってるのかわからなくて答えにくい
0083デフォルトの名無しさん
2009/07/06(月) 01:24:10module Hoge
def included(c)
c.class_eval do
alias fuga_original fuga
def fuga; (処理) end
end
end
end
とかやったのをincludeすればいけるかもしれない
0084デフォルトの名無しさん
2009/07/06(月) 02:44:40特定のurlで下記のスクリプトがエラーを出力します。
エラー文: `close': closed stream (IOError)
============= ここから ============
require 'open-uri'
require 'zlib'
header = {'accept-encoding' => 'gzip'}
url = 'http://gimpo.2ch.net/bakery/subject.txt' # errorが起きる
url2 = 'http://anchorage.2ch.net/live/subject.txt' # errorが起きない
url3 = 'http://gimpo.2ch.net/salt/subject.txt' # errorが起きる
open(url, header) do |io|
Zlib::GzipReader.wrap(io) do |gz|
puts gz.read # urlの中身が出力されたあとにerrorが起きる
end
end
============= ここまで ============
open-uri, zlib, 2chの鯖のどこに問題があるのでしょうか?
openのブロック付き呼び出しの中でさらに別のIOオブジェクトをブロック付きで呼び出していることが原因なのかと考えたのですが、
特定のurlでのみ起きる理由が分かりません・・・。
0085デフォルトの名無しさん
2009/07/06(月) 02:46:08============= ここから ============
require 'open-uri'
require 'zlib'
header = {'accept-encoding' => 'gzip'}
url = 'http://gimpo.2ch.net/bakery/subject.txt' # errorが起きる
url2 = 'http://anchorage.2ch.net/live/subject.txt' # errorが起きない
url3 = 'http://gimpo.2ch.net/salt/subject.txt' # errorが起きる
open(url, header) do |io|
Zlib::GzipReader.wrap(io).readlines.each do |line|
puts line
end
end
============= ここまで ============
0086デフォルトの名無しさん
2009/07/06(月) 03:27:42Zlib::GzipReader.wrapが自動的にioをcloseし
さらにopenのブロック実行後にioをcloseしようとするから
IOErrorが出るのは正しい動作
url2でエラーが出ない方がおかしいんだけど何故かはわからん
要するにcloseが二回実行されないようにすればいいんだが
それはリファレンスマニュアルでZlib::GzipReader.wrapの所を嫁
0087デフォルトの名無しさん
2009/07/06(月) 04:02:24レスありがとうございます。
解決策のほうも分かりました。
ところで>85の例でエラーが出なかった理由は
Zlib::GzipReader.wrapがcloseされていなかったからioもcloseされず、ioがopenによって正しくcloseされたからという理解でよろしいでしょうか?
IOオブジェクトを用いる場合には
file = IO.open(foo)
begin
<処理>
ensure
file.close
end
IO.open(foo) do |io|
<処理>
end
のどちらかで記述するというのが常識ですが、
IO.open(foo).read のような使い方をするとそのIOオブジェクトはcloseすることができなくなってしまうのでしょうか?
重ね重ねの質問ですが、長らくの疑問で調べても分からなかったのでご回答いただけるとありがたいです。
0088デフォルトの名無しさん
2009/07/06(月) 04:52:41あってる
> IO.open(foo).read ...
これではIOインスタンスへの参照がないからcloseしようがない、開きっぱなし
data = (io = IO.open(foo)).read とすればio.close出来るけど普通はIO.read(foo)とするな
ほっとけばGCが何とかしてくれると聞いたような違ったような?
0089デフォルトの名無しさん
2009/07/06(月) 05:08:25`close': closed stream (IOError) は、おーざっぱには
「閉じようと思ったIOオブジェクトが何者かによって既に閉じられてました姉さん事件です」
エラーだ
Zlib の close は引数の IO オブジェクトごと close する
通常は超親切機能なんだが、引数の IO オブジェクトがブロックつきだった場合、
IO 側のメソッドのブロックの ensure で行われる io.close で「既に閉じられてた」エラーが起こる
Zlib のブロックの最後で明示的に Zlib::GzipFile#finish を呼ぶと、厄介な Zlib::GzipFile#close は起動されない
…というようなことが、Zlib::GzipReader の GzipReader.wrap のマニュアルのとこに書いてあるぞ
ttp://www.ruby-lang.org/ja/man/html/Zlib_GzipReader.html#GzipReader.2ewrap
>>84
require 'open-uri'
require 'zlib'
header = {'accept-encoding' => 'gzip'}
url = 'http://gimpo.2ch.net/bakery/subject.txt'
url2 = 'http://anchorage.2ch.net/live/subject.txt'
url3 = 'http://gimpo.2ch.net/salt/subject.txt'
[url,url2,url3].each do |url|
open(url, header) do |io|
Zlib::GzipReader.wrap(io) do |gz|
p gz.read
gz.finish # ここ!
end
end
end
0090デフォルトの名無しさん
2009/07/06(月) 09:30:36irb> NKF.guess("ねこだいす")
5
irb> NKF.guess("ねこだいすき")
6
irb> NKF.guess("ねこだいすきっ")
5
とかいう結果でちょっとぐんにょりしてるので
0091デフォルトの名無しさん
2009/07/06(月) 09:36:09irb> NKF.guess("ねこ、だ")
6
irb> NKF.guess("ねこ、だい")
6
irb> NKF.guess("ねこ、だいす")
6
irb> NKF.guess("ねこ、だいすき")
6
irb> NKF.guess("ねこ、だいすきっ")
6
irb> NKF.guess("、")
6
ということで、読点入れた文章使え
0092デフォルトの名無しさん
2009/07/06(月) 09:37:46最近ruby-talkでそんな話題があった気がするが。
009392
2009/07/06(月) 09:39:16irb(main):002:0> NKF.guess("ねこだいす")
=> 6
irb(main):003:0> NKF.guess("ねこだいすき")
=> 6
irb(main):004:0> NKF.guess("ねこだいすきっ")
=> 6
0094デフォルトの名無しさん
2009/07/06(月) 09:55:040095デフォルトの名無しさん
2009/07/06(月) 09:58:220096デフォルトの名無しさん
2009/07/06(月) 10:19:410097デフォルトの名無しさん
2009/07/06(月) 10:28:410098デフォルトの名無しさん
2009/07/06(月) 10:52:17ご存じだと思うが、Meadow 2 や Meadow 3は、 UTF-8 のファイルの文字コードを、けっこう間違える。
一方、秀丸はほぼ絶対間違えない。
これらの違いは何だろうかということと、同じような実装をNKF でもできないのかな?と思った。
0099デフォルトの名無しさん
2009/07/06(月) 10:55:06010098
2009/07/06(月) 11:05:55知らなかったよ
0101デフォルトの名無しさん
2009/07/06(月) 11:12:290102デフォルトの名無しさん
2009/07/06(月) 12:04:51HTML だったら charset 読んでみるとか
句読点が改行文字の直前にあったら日本語だと思ってみるとか
東欧辞書にマッチするバイト列が頻出したら Latin-2 だと思ってみるとか
Iconv が guess に該当する機能を一切提供してないのは手抜きじゃなくて必然
多エンコーディングに対応すればするほど指数関数的に推測のコストは上がる
日本語だけ取っても Shift_JIS と CP932 と EUC-JP と EUC-JP-MS の4つを区別するのは至難
っていうか規格をちょっとずつ混ぜるなめんどくさいから
あとケータイ絵文字入り文字列をキャリア情報なし端末情報なしの素で送ってくる奴は即死刑で
0103デフォルトの名無しさん
2009/07/06(月) 12:33:210104デフォルトの名無しさん
2009/07/06(月) 15:37:50incompatible character encodings: UTF-8 and ASCII-8BIT (Encoding::CompatibilityError)
イライラ
0105デフォルトの名無しさん
2009/07/06(月) 15:54:270106デフォルトの名無しさん
2009/07/06(月) 15:56:26Ruby1.9向けテストで「なんかどっか書き間違ってる」時に出るやつだな
具体的にどのへんの行で詰まってるとかヒントぜんぜんなし
かろうじて -v でテストのメソッド名が出るくらい
0107デフォルトの名無しさん
2009/07/06(月) 15:58:00rdoc のファイルと同じエンコーディングを -K とかで指定すればいいんじゃね
0108デフォルトの名無しさん
2009/07/06(月) 16:09:03詳細な解説ありがとうございます。
ためになりました。
>88
>普通はIO.read(foo)とするな
IOオブジェクトを簡単に読み取るにはこの方法を使えばいいんですね。
しかしopen-uriで拡張されたopenには同等のメソッドがありませんね。
URI.parse(foo)がIO.read(foo)と同等のことができますが、
URI.parseはHTTPリクエストのオプションをつけて動かすことができないんですよね。
URI.parse(uri, 'hogehoge' => 'foobar')のように。
アドバイスをいただき>84での問題は解決したのですが次の問題が発生してしまいました。。
0109デフォルトの名無しさん
2009/07/06(月) 16:09:48エラー文: `initialize': buffer error (Zlib::BufError)
困ったことに、通ったり通らなかったりします。
原因はたぶんですが2chのサーバが出力しているgzip圧縮したsubject.txtのほうだと思います。
板内のスレいずれかにカキコミがあればsubject.txtは書き換わるため、通る場合と通らない場合があるのだと予想しています。
しかしエラー文の意味がよく分からず、どのように回避すればよいのかが分かりません。
ちなみに拾ってきたgzip化subject.txtファイルをHDDに書き込んでアーカイバで開くと正しく読み取れています。
============= ここから ============
require 'open-uri'
require 'zlib'
header = {'accept-encoding' => 'gzip'}
url = 'http://gimpo.2ch.net/bakery/subject.txt' # errorが一度も起きていない
url2 = 'http://gimpo.2ch.net/kagu/subject.txt' # errorが起きたり起こらなかったりする
open(url, header) do |io|
Zlib::GzipReader.wrap(io) do |gz|
puts gz.read # urlの中身が出力されたあとにerrorが起きる
end
end
============= ここまで ============
0110デフォルトの名無しさん
2009/07/06(月) 16:19:50原因は一発でわかったが、そろそろあんま話したくない
HTTPの知識のない状態でなに作る気なん?
0111デフォルトの名無しさん
2009/07/06(月) 16:23:31答えるのいやなら他行けば?
0112デフォルトの名無しさん
2009/07/06(月) 16:25:290113デフォルトの名無しさん
2009/07/06(月) 16:29:29このへんがわかんないのはそもそも辛いと思うんだがどう
open-uri で open してテキストを read する以外の事をしようと思うなら、別途勉強がいると思う
0114デフォルトの名無しさん
2009/07/06(月) 16:36:360115デフォルトの名無しさん
2009/07/06(月) 16:43:06open-uriは便利に見えるけどハマると厄介、net/httpの使い方をおぼえろ
res = Net::HTTP.get_response(URI(url))
txt = res.body
if res['content-encoding'] =~ /gzip/
txt = Zlib::GzipReader.wrap(StringIO.new(txt)) {|gz| gz.read }
end
puts txt
>>110
原因を教えてもらえないだろうか?
うちの環境では例外が発生しないので問題がわからない
0116デフォルトの名無しさん
2009/07/06(月) 16:43:45>>109はHTTPレベルの問題じゃないような
0117デフォルトの名無しさん
2009/07/06(月) 16:45:14Zlib::GzipFile::Error: not in gzip format
0118デフォルトの名無しさん
2009/07/06(月) 16:47:520119デフォルトの名無しさん
2009/07/06(月) 16:49:01============= ここから ============
require 'open-uri'
require 'zlib'
header = {'accept-encoding' => 'gzip'}
url = 'http://gimpo.2ch.net/bakery/subject.txt' # errorが一度も起きていない
url2 = 'http://gimpo.2ch.net/kagu/subject.txt' # errorが起きたり起こらなかったりする
open(url, header) do |io|
Zlib::GzipReader.wrap(io) do |gz|
puts gz.read # urlの中身が出力されたあとにerrorが起きる
gz.finish #<= 書き忘れ
end
end
============= ここまで ============
>110
2chのスレのdatを収集するプログラムです。
たまに気がつくとスレが1001になってdat落ちしてしまって、最後に開いた地点までしか読めなくなるのが悲しいので、
過去に開いたことがあるスレを定期的に拾いなおしてくれるプログラムを作りたいと思いまして。
プログラム自体は完成していて意図した通りに動くのですが、
転送量を少しでも削減したくてdatだけではなくsubject.txtを拾うときにgzip化しようと欲を出したらうまくいかなくなりました。
0120デフォルトの名無しさん
2009/07/06(月) 16:54:41>113
一応、DLする度にsleep 1.0 を入れています。
これでは不十分でしょうか?
>114
それは大変失礼しました。
今後は自力解決したいと思います。
>115
datの取得ではnet/httpを使っています。
一つのdomainから複数のファイルを拾うときにはnet/http, 1つのファイルを拾うだけならopen-uriというふうに使い分けていました。
0121115
2009/07/06(月) 17:17:01txt = URI(url).read(header)
if txt.content_encoding.include?('gzip')
:
0122デフォルトの名無しさん
2009/07/07(火) 10:40:42Ruby 1.9.1を使用しているのですが、クラスを生成する時にinitializeメソッドで初期化を行うと思うのですが、ファイルの内容で初期化をしたい時に、そのファイルが存在しない場合、クラスの生成をしないようにするにはどうすればいいのでしょうか?
やはり、newメソッドをオーバーライドするしかないのでしょうか?
0123デフォルトの名無しさん
2009/07/07(火) 10:43:11日本語でおk
0124デフォルトの名無しさん
2009/07/07(火) 10:48:27def initialize
YAML.load_file('config.yaml').each do |k, v|
eval("@#{k} = #{v}")
end
p "Hoge initialized."
end
def self.make
File.exist?('config.yaml') ? self.new : nil
end
end
で、Hoge.make を Hoge.new の代わりに使うようにする
0125デフォルトの名無しさん
2009/07/07(火) 11:01:38ありがとうございます。
0126デフォルトの名無しさん
2009/07/07(火) 11:04:09エスパー乙
エスパー内容から逆に元の質問を読解すると、こうかな。
インスタンスを生成する際、initializeメソッドが実行されるが、
特定の条件によってインスタンスを生成せず、かつ、例外を
送出せずにnilを返したい場合、どのようにすればよいか?
もちろん、一般的には例外発生でいいと思うんだが、それじゃ
なんかまずい? >>122
0127デフォルトの名無しさん
2009/07/07(火) 11:12:49分かりづらい質問の書き方ですいませんでした。
例外発生でも問題ないと思いますが、124さんの回答がしっくりくるので、124さんの回答を参考にさせていただきたいと思います。
0128デフォルトの名無しさん
2009/07/07(火) 13:42:400129デフォルトの名無しさん
2009/07/07(火) 14:07:44なにかRuby固有の機能というのは存在しない
スクリプト言語としてさまざまな現代的機能がまとまった形になっていることが、強いてあげれば最大の機能
0130デフォルトの名無しさん
2009/07/07(火) 14:33:06他は似たりよったり
0131デフォルトの名無しさん
2009/07/07(火) 16:06:190132デフォルトの名無しさん
2009/07/07(火) 16:45:050133デフォルトの名無しさん
2009/07/07(火) 16:47:51信者のウザさ
0134デフォルトの名無しさん
2009/07/07(火) 16:49:09この比較にけっこう興味ある。
0135デフォルトの名無しさん
2009/07/07(火) 17:08:490136デフォルトの名無しさん
2009/07/07(火) 17:15:440137デフォルトの名無しさん
2009/07/07(火) 17:16:590138デフォルトの名無しさん
2009/07/07(火) 17:17:490139デフォルトの名無しさん
2009/07/07(火) 17:18:43強み:日本語環境の充実
弱み:ライブラリの少なさ
Rubyにするメリットがない
0140デフォルトの名無しさん
2009/07/07(火) 17:23:28弱い強いは立ち位置で真逆になるから、あくまで「違い」としてなら、
UNIX的であるか、そうでないか(あえて言えばSmalltalk的か)というのは中でも目立つ違いかもね。
卑近なところでは、OS としての機能を持つか(Smalltalk)、持たないか(Ruby)とか、
IDEや開発ツールを含むか(Smalltalk)、あくまで言語処理系の枠内にとどまるか(Ruby)とか。
あと、ちょっとその Smalltalk 的(ダイナブック的。アラン・ケイ的思想)なこととも関連するけれど、
Ruby処理系は一般的に TATWD = Turtles all the way down ではないこと。加えて、
処理系を含めたプロダクトが「動かしながら変えてゆくこと」を想定してないこと(UNIX的。C言語的)は
Smalltalkを選ぶかRubyを選ぶかの判断基準になるかも。端的には言語使用を利用者が自由にいじれるか的なところ。
これらと遅いことを除けば、RubyにあってSmalltalkに(Smalltalk的視点から)劣るところはほとんどないのでは?
逆にそういうふう(つまり、UNIX的な立ち位置ではSmalltalkに負けないよう)に意識してRubyは作られているはず。
0141デフォルトの名無しさん
2009/07/07(火) 17:52:160142デフォルトの名無しさん
2009/07/07(火) 18:04:36日本語関連で Perl よりなにか抜きん出てる面があるとはあんま思えんな
0143デフォルトの名無しさん
2009/07/07(火) 18:07:020144デフォルトの名無しさん
2009/07/07(火) 18:15:07お前は英語しゃべれたほうがお得だろうかとかわざわざ考えるのか?
0145デフォルトの名無しさん
2009/07/07(火) 18:18:410146デフォルトの名無しさん
2009/07/07(火) 18:21:590147デフォルトの名無しさん
2009/07/07(火) 18:25:13ただし、何か他の言語が使えてなおかつRubyもできるという場合は、
Ruby以外の言語を使えると申告した場合よりもいい会社に目をかけてもらえる確率が結構上がると思われる
0148デフォルトの名無しさん
2009/07/07(火) 18:27:06一つのメソッドに縛られない、より一般的な方法を知らない人は世界が狭いのぅ。
0149デフォルトの名無しさん
2009/07/07(火) 18:31:38RubyとPythonとSchemeをそれなりに勉強してたら
そのままプログラマとして一度も就職できなかったという選択の要領の悪い俺様が通りますよ
まあ派遣で倉庫仕分けじゃどっちみち意味ねーなwwwww
0150デフォルトの名無しさん
2009/07/07(火) 18:32:470151デフォルトの名無しさん
2009/07/07(火) 20:45:04javaみたいに環境で出力合わせてくれる訳でもないし。
0152デフォルトの名無しさん
2009/07/07(火) 21:43:16あんたは半年後の俺
0153デフォルトの名無しさん
2009/07/07(火) 21:51:47おとなしくjavaかC#でもやっときゃいいのに
0154デフォルトの名無しさん
2009/07/07(火) 22:03:110155デフォルトの名無しさん
2009/07/07(火) 22:06:510156デフォルトの名無しさん
2009/07/07(火) 23:35:320157デフォルトの名無しさん
2009/07/08(水) 05:42:05社会人プログラマやってるなら初心者スレなんか要領よく速攻で通過して欲しいもんだが
0158デフォルトの名無しさん
2009/07/08(水) 05:53:14>>153
業務の役には全く立たないんで、趣味でCだのJavaだのC#だのPHPだのやり込んでも無駄
趣味で2年やって学んだことは、会社では1ヶ月で学べてお釣りがくる
ただ、プログラミングに挫折しない性質を持っているという事前証明にはなるが、そんなの上記言語でなくても充分だ
0159デフォルトの名無しさん
2009/07/08(水) 06:12:20無駄ではないだろ。
会社にも糞グラマはいるからな。
0160デフォルトの名無しさん
2009/07/08(水) 16:47:190161デフォルトの名無しさん
2009/07/08(水) 16:56:32家で Ruby, Python など好きなのやればいいんじゃないの。
0162デフォルトの名無しさん
2009/07/08(水) 17:08:440163デフォルトの名無しさん
2009/07/08(水) 17:11:22金融系?
0164デフォルトの名無しさん
2009/07/08(水) 17:17:37「趣味で」という最重要な句をわざわざ外すのはなんで
0165デフォルトの名無しさん
2009/07/08(水) 17:33:5949パーセントくらいの割合で逆に邪魔になるよね
趣味でやってた頃の知識経験が役立ったなんて思ったことねーぞ
0166デフォルトの名無しさん
2009/07/08(水) 17:38:240167デフォルトの名無しさん
2009/07/08(水) 17:41:30どこが重要なの?
「趣味」を「義務」とか他の語に置き換えても
「業務の役には全く立たないんで、(略)無駄」としか読めない
0168デフォルトの名無しさん
2009/07/08(水) 17:46:53どこの職場で何を作っても即戦力になれるよ。
やる内容によるのかもしれない。
0169デフォルトの名無しさん
2009/07/08(水) 17:49:12趣味でも楽しんでせっせと色々作ってる人は有利だと思う。
0170デフォルトの名無しさん
2009/07/08(水) 18:01:49Cを趣味で使ってる人はCでの業務に強いかどうかとか
あまり関係ない気がするが
0171デフォルトの名無しさん
2009/07/08(水) 18:23:540172デフォルトの名無しさん
2009/07/08(水) 18:38:03いじるのが好きなだけというやつは・・・な気がする
0173デフォルトの名無しさん
2009/07/08(水) 19:08:21設計段階で必要な業務知識とかは、そりゃその仕事やらん限り知ることはないわけだけど、設計手法とかはほとんど趣味で学んだことだし。
0174デフォルトの名無しさん
2009/07/08(水) 19:52:22Floatのインスタンスが1.0のようにFixnumの1と同じだったら1に、1.2のようにFixnumで表せない数値だったら1.2のままにする、みたいなメソッドってありませんでしょうか?
教えていただけると幸いです。
0175デフォルトの名無しさん
2009/07/08(水) 20:04:38def f(x)
y = x.to_i
x == y ? y : x
end
名前思いつかなかった
0176デフォルトの名無しさん
2009/07/08(水) 20:17:22ruby facetsあたりに同じ役割のメソッドがあるかもな
0177デフォルトの名無しさん
2009/07/08(水) 20:28:09その例、Fixnumの範囲なら問題ないが、
むちゃくちゃ桁数が大きくなると誤判定が起きるね。
実用上問題ないだろうからどうでもいいか。
0178デフォルトの名無しさん
2009/07/08(水) 20:37:34誤差じゃなくて?
0179デフォルトの名無しさん
2009/07/09(木) 10:58:30Float または Integer を返す、というメソッドは公式メソッドとしてはあんまありえない動作なんで、
ふつーに if で書けふつーに
0180デフォルトの名無しさん
2009/07/09(木) 11:07:50もちろん誤差で。
誤差があるにも拘らず同一とみなされてInteger化されること自体が問題だよね。
0181デフォルトの名無しさん
2009/07/09(木) 11:11:58割り算が割り切れたら整数で、割り切れなかったら小数で返して欲しいというようなマルチな要望は時々見る
10 / 2 => 5
10 / 4 => 2.5
これ、標準ではできないんだよね
10 / 2 => 5
10 / 4 => 2
10.quo 2 => 5.0
10.quo 4 => 2.5
どっちか
0182デフォルトの名無しさん
2009/07/09(木) 12:03:46それはFloatへの理解不足という根本的な問題だと思う
0183デフォルトの名無しさん
2009/07/09(木) 13:06:59そもそも、型が違うものを比較して「同じだったら」とかいう発言が
出てくる時点で理解が根本的に不足してるのは明らかだけどね。
0184デフォルトの名無しさん
2009/07/09(木) 13:32:16というのなら要望としてわかる気がする。
文字列処理的な解決方法でも良いのかも。
0185デフォルトの名無しさん
2009/07/09(木) 16:00:16require 'open-uri'
puts open("http://www.ruby-lang.org/ja/").read.scan(/<title>(.+?)<\/title>/)
というコードをコピペで実行したとして、
「あっ UTF-8 かじゃあやり直し」という簡便な手段でやり直しはできる?
0186デフォルトの名無しさん
2009/07/09(木) 16:04:32irb> require 'open-uri'
=> true
irb> puts open("http://www.ruby-lang.org/ja/").read.scan(/<title>(.+?)<\/title>/)
繧ェ繝悶ず繧ァ繧ッ繝域欠蜷代せ繧ッ繝ェ繝励ヨ險隱・Ruby
=> nil
irb> puts open("http://www.ruby-lang.org/ja/").read.scan(/<title>(.+?)<\/title>/).tosjis
NoMethodError: undefined method `tosjis' for #<Array:0x35a0f84>
from (irb):3
irb> puts open("http://www.ruby-lang.org/ja/").read.scan(/<title>(.+?)<\/title>/).to_s.tosjis
NoMethodError: undefined method `tosjis' for #<String:0x35987e4>
from (irb):4
irb> require 'kconv'
=> true
irb> puts open("http://www.ruby-lang.org/ja/").read.scan(/<title>(.+?)<\/title>/).to_s.tosjis
オブジェクト指向スクリプト言語 Ruby
=> nil
irb>
0187デフォルトの名無しさん
2009/07/09(木) 16:17:24イプシロンを使った浮動小数点の同値判定
ttp://d.hatena.ne.jp/tociyuki/20090620/1245503707
これで適当にメソッド作ればいいんじゃね?
0188174
2009/07/10(金) 00:05:36うーんやっぱり公式のメソッドはないんですね。
勉強になりました。
0189デフォルトの名無しさん
2009/07/11(土) 10:36:11実数と虚数を比べるようなものだし。
0190デフォルトの名無しさん
2009/07/11(土) 10:38:35真に別であるなら変換などできない
一応何らかの規則で変換できてしまう以上、別だと表現するほどのもんでもない
0191デフォルトの名無しさん
2009/07/11(土) 15:41:48ruby -Ku script/server
して文字コード指定しても立ち上がる mongrel 1.1.5のエラーメッセージがSJISになってしまうのですが、
これ何故なんでしょうか?
0192デフォルトの名無しさん
2009/07/11(土) 15:42:280193デフォルトの名無しさん
2009/07/11(土) 15:55:09出力する文字列の文字コードを変えるスクリプトは滅多にない
基本的にはrubyの文字列処理方法へのヒント
http://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFCAD1BFF4.html#a.24KCODE
0194デフォルトの名無しさん
2009/07/11(土) 17:59:040195デフォルトの名無しさん
2009/07/11(土) 18:14:21浮動小数点がメインだから組み込み、固定小数点はサブだから BigDecimal で擬似的になんとかする
固定小数点数が組み込みで選べる言語ってそう多くないと思うんだけど
0196デフォルトの名無しさん
2009/07/11(土) 18:29:130197デフォルトの名無しさん
2009/07/11(土) 19:21:23この手のネタは本スレでお願いします
http://pc12.2ch.net/test/read.cgi/tech/1246174168/
0198デフォルトの名無しさん
2009/07/11(土) 19:39:35情報処理試験の本でも紹介しとけ
0199デフォルトの名無しさん
2009/07/11(土) 20:10:31Common Lispに有理数型があったような
0200デフォルトの名無しさん
2009/07/11(土) 20:24:130201デフォルトの名無しさん
2009/07/11(土) 21:27:04細か〜いとこでハマってたんですが
華麗にスルーできましたよ
これで1.9系をメインで使っていけそうです
いやぁいい本に出合えました
0202デフォルトの名無しさん
2009/07/11(土) 23:29:59信号処理屋が二進数の固定小数点数で演算するのは良く見るが。
非力なプロセッサでリアルタイム処理するのに。
つーか浮動小数点数なんぞ無かった……
0203デフォルトの名無しさん
2009/07/12(日) 00:08:57ネットでみれるから買わない
0204デフォルトの名無しさん
2009/07/12(日) 00:13:59宣伝乙
0205デフォルトの名無しさん
2009/07/12(日) 01:36:39まあ今どき業務でもなければ1.8系なんて使ってたのは>>201だけだったかもな
0207デフォルトの名無しさん
2009/07/12(日) 03:29:05やたら特定の本を勧める香具師がいるな
著者か出版社の自演としか思えん
0208デフォルトの名無しさん
2009/07/12(日) 03:40:11何にせよ粘着されてるのは不幸なことだ
0209デフォルトの名無しさん
2009/07/12(日) 04:07:362chっぽい素敵なレスに大満足です
ま、本は店頭で手にとって選べるんで
某大作RPG9のような悲劇は起きないから
いいじゃないですか
1.9で文字コード周りでハマってたのが
解決したのですよ
ちょいとコツつかむと一気に先に進める感じ
ほんとRubyは楽しいですわ
あ、ちなみに思いっきり業務で〜す
量が多いだけのシンプルな仕事ですけどね
0210デフォルトの名無しさん
2009/07/12(日) 04:23:31多分、何に使うかっていう問題になると思うんですけども。
文字数カウントする位だったらどれ選びます?sqliteが手軽そうかなと思ったんですけど
0211デフォルトの名無しさん
2009/07/12(日) 04:25:150212デフォルトの名無しさん
2009/07/12(日) 04:25:520213デフォルトの名無しさん
2009/07/12(日) 07:29:36あと、複数のスクリプトが「同時」にアクセスする可能性があるのでない限り、永続化は pstore でいい
0214デフォルトの名無しさん
2009/07/12(日) 07:37:200215デフォルトの名無しさん
2009/07/12(日) 07:47:38テキストファイルとして読む機会がないのにYAMLやJSONベースで保存する意味なんてなくね
割り切ってるPSTOREのほうがまだマシと思う
0216デフォルトの名無しさん
2009/07/12(日) 08:09:060217デフォルトの名無しさん
2009/07/12(日) 08:11:50だってPStoreだとバージョンが古くなったときに読めないし
0218デフォルトの名無しさん
2009/07/12(日) 08:15:180219217
2009/07/12(日) 08:22:07デバッグ中にデータファイルの中身を見たくなることが往々にしてあるため
そうした場合に見るのが面倒だという点でも、PStoreはあまりおすすめできない
0220デフォルトの名無しさん
2009/07/12(日) 10:40:00これは何度でも言うが、Marshal の仕様が変わったのだとしたらそもそも大改修が必要だ
そんなときのために普段便利な PStore を諦めるより、
そのときになって旧 Marchal から新 Marshal へのコンバータ書いたほうがきっと早い
0221デフォルトの名無しさん
2009/07/12(日) 11:13:02レポジトリや公式を見ても見つからないのです
0222デフォルトの名無しさん
2009/07/12(日) 13:20:21yaml/store.rb見て単純さにびっくりしたw
0223217
2009/07/12(日) 13:50:16>普段便利な PStore
便利も何もYAMLと比べたときに特に便利な点がないよね、って話だよ
それまでにPStoreで蓄積したデータがあるのならともかく、今から新しく使い始める人に
PStoreを勧めるべき理由はほとんどない
(ファイルの小ささやdumpの早さはあるけど、それを気にするぐらいなら別のDBを使うべき)
それと何度でも言うが、Marshal.dumpで出力したデータは
Marshalのバージョンが古いと読み書きできなくなる
http://www.ruby-lang.org/ja/man/html/Marshal.html
0224デフォルトの名無しさん
2009/07/12(日) 14:39:28>それと何度でも言うが、Marshal.dumpで出力したデータは
>Marshalのバージョンが古いと読み書きできなくなる
これはその通りだけど、それが実際に発生する可能性がどれだけあるのやら。
これを心配するなら、YAMLライブラリの互換性のほうがよっぽど心配。
PStoreのデータが読めなくなったことは過去数年ないけど、YAMLは1.8.3前後で
dumpの仕様が変わって困ったことになった。
まあ、あまり起こりもしないことを大げさに宣伝することはないんじゃない?
0225デフォルトの名無しさん
2009/07/12(日) 14:40:450226デフォルトの名無しさん
2009/07/12(日) 14:46:57その考え方じゃ仕事にありつけんぞ
0227デフォルトの名無しさん
2009/07/12(日) 14:49:550228デフォルトの名無しさん
2009/07/12(日) 14:56:32> Marshalのバージョンが古いと読み書きできなくなる
これってYAMLだって同じじゃねーの
> 普通にDB使えよ。
そうそう、DBMとかな
0229デフォルトの名無しさん
2009/07/12(日) 15:11:34PHPが早々にエンジンごと標準添付にしたのはGJだったと思うんだ。
0230デフォルトの名無しさん
2009/07/12(日) 15:15:540231デフォルトの名無しさん
2009/07/12(日) 15:20:270232デフォルトの名無しさん
2009/07/12(日) 15:42:01> まあ今どき業務でもなければ1.8系なんて使ってたのは>>201だけだったかもな
えー、そうなのか
今調べたら、1.8.5 だった。
上げるの面倒だな、おかしくなったらやだし。
0233デフォルトの名無しさん
2009/07/12(日) 15:46:13常に最新版/安定板追っかけてくれる保証も無いし。
0234デフォルトの名無しさん
2009/07/12(日) 15:54:10Marshal,YAMLはrubyのインスタンスをそのまま保存できる
open('my.db','w') {|f| f.write(Marshal.dump(hash)) }
hash = Marsha.load(File.read('my.db'))
一度でも使った事があれば>>210程度の用途にSQL系DBなんか勧めない
0235デフォルトの名無しさん
2009/07/12(日) 16:09:28自分のマシンでやる機会があるならこんなん日常用途に絶対選ばんぞ
0236デフォルトの名無しさん
2009/07/12(日) 16:14:160237デフォルトの名無しさん
2009/07/12(日) 16:26:05「だから」って何?理由を書いてよ。10行くらいまでなら読んであげる。
あ、初心者スレだからわかりやすくお願いね(ハート)
0238デフォルトの名無しさん
2009/07/12(日) 16:26:19あなたが何歳なのかは知りませんが、おっさんどもは
ゆとり君たちに負けないように、自分の技術にさらに磨きをかけるよう頑張ってください。
0239デフォルトの名無しさん
2009/07/12(日) 17:41:020240デフォルトの名無しさん
2009/07/12(日) 17:53:06適材適所という言葉がありまして
>>228
少なくともYAMLのバージョンはMarshalほど頻繁には変わらない
もちろん>>224のような例もあるから、どっちもどっちという印象ではあるが
0241日記 ◆wSaCDPDEl2
2009/07/12(日) 19:29:06今日から、勉強を始める。
「たのしいRuby」
43ページ 2.3 正規表現まで投了
0242デフォルトの名無しさん
2009/07/12(日) 19:31:16入れ替えで上手くいかなくて被ってしまいます、どうしたらいいのでしょうか?
b=0
a=[1,2,3,4,5]
while b <= 4
srand
puts a[rand(a.length)]
c=a[rand(a.length)]
a[rand(a.length)]=a[rand(a.last)]
a[rand(a.last)]=c
J=a.pop
b+=1
end
0243デフォルトの名無しさん
2009/07/12(日) 19:40:38「投了」って降参してどうする
0245デフォルトの名無しさん
2009/07/12(日) 20:03:43配列の中での入れ替えをやらない方が良い
delete_atで指定した位置の要素をとってこれるから、そっちを使うべき
あとwhileよりは、eachやtimesを使うのがオススメ
一例
list = [1,2,3,4,5]
poped = []
4.times do
sliced_index = list[rand(list.size)]
poped << list.delete_at(sliced_index)
end
0246デフォルトの名無しさん
2009/07/12(日) 20:09:02a.shuffle[0..3]
0247デフォルトの名無しさん
2009/07/12(日) 20:39:28ありがとうございます
これから、参考にやってみます
0248デフォルトの名無しさん
2009/07/12(日) 23:01:010249デフォルトの名無しさん
2009/07/13(月) 02:10:18みんな我が強いからでつか?
0250468
2009/07/13(月) 02:52:52ttp://www.ruby-lang.org/ja/man/html/Ruby_A5EAA5D5A5A1A5ECA5F3A5B9A5DEA5CBA5E5A5A2A5EB.html
0251デフォルトの名無しさん
2009/07/13(月) 05:19:333481
という数字(4桁/0含む)が与えられたとき
0 = 3 + 4 - 8 + 1
1 = 3 + 4 - 8 * -1
2 = -(3 + 4 - 8 - 1)
3 = 3 * 4 - 8 - 1
4 = (3 / (4 + 8))^-1
...
のように加減乗除のみで整数を順に造っていってください
0252デフォルトの名無しさん
2009/07/13(月) 07:52:21いやです
宿題スレへどうぞ
0253デフォルトの名無しさん
2009/07/13(月) 09:48:020254デフォルトの名無しさん
2009/07/13(月) 09:53:400255デフォルトの名無しさん
2009/07/13(月) 10:47:02>少なくともYAMLのバージョンはMarshalほど頻繁には変わらない
いや、YAMLは変わる。すくなくとも1.8.4までは頻繁に変わってた。
Marshalって変わったか?具体的にどのバージョンでどう変わった?
0256デフォルトの名無しさん
2009/07/13(月) 11:06:06redMine の何を聞きたいのかわからないけど、
webprog 板の Rails スレのほうが、いろいろ答えが得られると思う
0257デフォルトの名無しさん
2009/07/13(月) 13:13:23この板ではBTSスレで扱ってる。
0258デフォルトの名無しさん
2009/07/13(月) 19:02:53英語のメーリングリストのぞいた方が早い
0259日記 ◆wSaCDPDEl2
2009/07/13(月) 19:19:58今日は、Arrayクラスを学んだ。
Array.new
%w
to_a
split
%wはとても便利だ。
indexに-1を指定すると最後の要素を指せる事を始めて知った。
0260デフォルトの名無しさん
2009/07/13(月) 19:39:05http://pc12.2ch.net/test/read.cgi/tech/1169756560/
0262240
2009/07/13(月) 20:13:28ruby 1.6.0 => 4.4
ruby 1.8.x => 4.8
ruby 1.9.x => 4.8
なるほど、確かにマイナーバージョンも1.8.0以降は変わってなかった
すまんかった
ところでYAMLの非互換ってのは、具体的にどんな変更があったんだ?
0263デフォルトの名無しさん
2009/07/13(月) 21:39:22ruby -e "def hoge(n); p n; hoge(n + 1); end; hoge(0)"
でどこまでいく?うちは3920
0264デフォルトの名無しさん
2009/07/13(月) 22:01:071148 で落ちた。
c:\> ruby -v
ruby 1.8.5 (2006-08-25) [i386-mswin32]
CoreDuo T2500(2Ghz)、MEM 3GB、Win XP Pro(32bit)
メモリが3GBもあるからもっと行くかと思ったんだけど・・・
Java でもそうだけど、スタックはヒープとは違う領域だから、
メモリがいくつあってもスタック領域も増やさないとダメなのかな?
Ruby でも、Java の VM オプションみたいにいろいろ指定できるのですか?
ちなみに >>263 の環境を教えてほしい
0265デフォルトの名無しさん
2009/07/13(月) 22:25:22-e:1:in `hoge': stack level too deep (SystemStackError)
from -e:1:in `hoge'
from -e:1
スペック低いはずだが…
0266デフォルトの名無しさん
2009/07/13(月) 22:33:270
:
6295
-e:1:in `hoge': stack level too deep (SystemStackError)
ruby 1.9.1p129 (2009-05-12 revision 23412) [i386-darwin9.7.0]
0
:
8186
-e:1:in `hoge': stack level too deep (SystemStackError)
0267デフォルトの名無しさん
2009/07/13(月) 22:34:33ruby 1.8.5 (2006-08-25) [i386-mswin32]
mswin32ってことなら、スタックサイズはヒープとは別個に決まってる。
たぶん、PEヘッダーをいじるツールで変更できるけど
rubyの起動時に指定とかはできないと思う。
0268263
2009/07/13(月) 22:46:21ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
Core2Duo CPU E8500 3.16GHz
メモリは4GBで3GB認識
OSはUbuntu9.04
ちょっと,
ttp://doruby.kbmj.com/akio0911_on_rails/20081212/Mechanize__Hpricot__MeCab__
ここのいじって13KB位のテキストファイル開いて上のURLみたいに出現頻度調べて遊んでたら
main.rb:12:in `each': stack level too deep (SystemStackError)
from main.rb:13:in `each'
っていうエラーが.
def each(&b)
b[self]
self.next.each(&b) if self.next
end
の所なんだけど,どうすればいいかわかる?
0269デフォルトの名無しさん
2009/07/14(火) 00:07:101GB
1.8.5
XP home
少ない
0271デフォルトの名無しさん
2009/07/14(火) 01:59:32あぁ、ホールふさがれた奴あったなと思ってtar.gz落としてきてそっちでやると6900
でも、require 'rubygems'が使えなくなった。
自分でmakeした時にgem周辺でPATH通さないといけない所ってどこ?
0272デフォルトの名無しさん
2009/07/14(火) 02:10:3768804
0273デフォルトの名無しさん
2009/07/14(火) 02:28:03ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-freebsd7]
AthlonXP3000+(2.16GHz)
Mem1GB
>>268
mecabを使って無いから確かな事は言えないが元のソースが間違ってる気がする
def each(&b)
node = self
while node
b[node]
node = node.next
end
end
0274デフォルトの名無しさん
2009/07/14(火) 05:06:02class MeCab::Tagger
def parseToNodes(*args)
arr,node = [],self.parseToNode(*args)
while node
arr << node
node = node.next
end
arr
end
end
− nodes = m.parseToNode(text)
+ nodes = m.parseToNodes(text)
0275264
2009/07/14(火) 10:52:29>>264 と >>269 で、搭載メモリ量は違うのに
結果が同じということは、スタックサイズは Ruby のバージョンで決まってしまう
(搭載物理メモリ量は関係ない)ということですね。
>>267
Java だと -Xss などの VM オプションを与えることで、実行時に
メモリ割当量を変えることが出来ますが、Ruby の場合は、
以下のような理解であってますか?
・そういうオプションは用意されていない
・Ruby は C で書かれているが、C をコンパイルするときに、ヘッダファイル等で
スタックサイズ等はハードコーディングされている
・「PEヘッダーをいじるツール」(これがよくわかりませんが)をつかうことで、
その固定値を変えることが出来る
0276デフォルトの名無しさん
2009/07/14(火) 12:29:11だいたい理解はあってる。
厳密に言うと、mswin32版のスタックサイズはwin32/Makefile.subで指定されていて、リンク時に確定される。
デフォルトではスタックサイズは2MBなので、Makefileに例えば
STACK=0x400000
とか書いてビルドすれば4MBにできる。
このリンク時に指定されたスタックサイズは実行ファイルのPEヘッダに格納されているので、それを何らかの手段で書き換えれば、いちいち自前でビルドしなくてもスタックサイズの変更は可能。
0277デフォルトの名無しさん
2009/07/14(火) 13:07:510278デフォルトの名無しさん
2009/07/14(火) 13:09:18>Java だと -Xss などの VM オプションを与えることで、実行時に
>メモリ割当量を変えることが出来ますが、
これいいよねー
メモリサイズだけじゃなくてGCまわりとか、上級者用オプションとして
Rubyでも用意してほしい
0279デフォルトの名無しさん
2009/07/14(火) 13:22:57describeをネストするか、shared exampleを使う。
0280264
2009/07/14(火) 13:43:57どうもありがとう、理解できました。
ようするにコンパイル結果のバイナリをいじっちゃえってことか。
>>278
そこで JRuby ですよ(笑)
Java のいいところは、言語仕様の比較はここでは避けるが、VM としては
-Xmx でメモリサイズも変えられるし、GC の挙動、アルゴリズムも変えられる。GCログも出力できる。
Ruby もそうなっていくといいな。
Ruby Enterprise Edition だけでもそういうのを実装していくとか。
0281デフォルトの名無しさん
2009/07/14(火) 13:48:210282デフォルトの名無しさん
2009/07/14(火) 14:29:39まるで的外れ
0283デフォルトの名無しさん
2009/07/14(火) 14:50:40完全に的外れ
0284デフォルトの名無しさん
2009/07/14(火) 14:56:280285デフォルトの名無しさん
2009/07/14(火) 16:36:29正解
0286デフォルトの名無しさん
2009/07/14(火) 20:14:11実際、rubyもデビアン前提で、ウィンドウズはさっぱりだったりするし。
0287デフォルトの名無しさん
2009/07/14(火) 20:19:02普通にrequireしたんじゃだめなの?
0288デフォルトの名無しさん
2009/07/14(火) 23:39:34VMのオプションでメモリサイズやGCログを指定できることと、Write once Run Anywhere はまるで関係ない。
まさに的外れ。
0289デフォルトの名無しさん
2009/07/15(水) 01:11:20ulimit -s unlimited
でやってみたらどこまでも伸びていってHDにスワップにいっちゃったから
切った。
0290デフォルトの名無しさん
2009/07/15(水) 13:55:480291デフォルトの名無しさん
2009/07/16(木) 12:45:56例えばこんな動作を期待しています。
[0,1,2].each do |x|
each_return x if x = 1
end
#=> 1
0292デフォルトの名無しさん
2009/07/16(木) 13:04:030293デフォルトの名無しさん
2009/07/16(木) 13:21:080294デフォルトの名無しさん
2009/07/16(木) 13:29:22# => "11111"
0295デフォルトの名無しさん
2009/07/16(木) 14:04:440296デフォルトの名無しさん
2009/07/16(木) 14:07:10each([0,1,2]) {|x| if x == 1 then x.to_s * 5; break; end}
0297デフォルトの名無しさん
2009/07/16(木) 14:14:460298デフォルトの名無しさん
2009/07/16(木) 14:15:17eachをレシーバ依存の一般メソッドにするか予約語関数的メソッドにするかは作者の頭の中でひと悶着あったと思う
0299デフォルトの名無しさん
2009/07/16(木) 14:20:33each だけなら別にそれでもいいが、each_with_index とか each_pair とかあのへんどうするんだよ
0300デフォルトの名無しさん
2009/07/16(木) 14:21:380301デフォルトの名無しさん
2009/07/16(木) 14:22:060302デフォルトの名無しさん
2009/07/16(木) 14:31:19現在の print に引数渡すときと同じことだ
あれは自前で文字列にして渡すだろ
つまり、引数に渡す時点で自前で必要な配列にする
つまり、こうだ
arr = ['one', 'two', 'three']
each(arr.zip([1, 2, 3])){|e, i|
puts "#{i} 番目は #{e} です"
}
イエスジャスティス
0303デフォルトの名無しさん
2009/07/16(木) 14:33:450304デフォルトの名無しさん
2009/07/16(木) 14:44:38いえす。
Perlのは何由来だったかな。ラクダ本に載ってた気がしたんだが。
0305デフォルトの名無しさん
2009/07/16(木) 14:47:560306デフォルトの名無しさん
2009/07/16(木) 15:20:17みたいのないなそういや
0307デフォルトの名無しさん
2009/07/16(木) 15:30:290308長文失礼します
2009/07/16(木) 21:24:58Rubyそのものの記述ミスじゃないのかな?と思い始めてきましたが
解決方法が見つけ出せないでいます。
当該ファイルとエラーログなどをまとめました。
http://www.dotup.org/uploda/www.dotup.org244140.zip.html
・環境
CentOSのバージョン CentOS release 5.3 (Final)
rubyのバージョン 1.8.5 (2006-08-25) [i386-linux]
httpdのバージョン Server version: Apache/2.2.3
・詳しい内容
open-uri.rb を使ったプログラムがサーバーを通すと動きません。
LAN内の別のパソコンからhttp://192.168.x.x/test.cgiで実行すると
画面に何も表示されません。
プログラムの内容は、下記のアドレスの一番上のプログラムです。
http://www.ruby-lang.org/ja/man/html/open_uri.html
0309長文失礼します
2009/07/16(木) 21:25:52または、CGIファイルとして ./test.cgi
として実行した場合は、目的の出力が画面(GNOME端末上)に現れます。
また、print("hello,Ruby\n")のプログラムはサーバーを通して実行できます。
LAN内の別のパソコンからhttp://192.168.x.x/test.cgiで実行すると
画面に何も表示されません。
・エラーメッセージ
/var/log/httpd/error.log を見ると
過去ログ(part12)の866と似たようなエラーがでています。
http://www.bookshelf.jp/2ch/tech/1178167650.html
過去ログの相違点としては、'initialize'の後ろが下のようになっています。
:
getaddrinfo: Temporary failure in name resolution
(
SocketError
)
0310長文失礼します
2009/07/16(木) 21:26:52ネットワーク・プロキシの設定 では インターネットに直接接続する になっています
セキュリティレベルの設定 では ファイアーウォールが有効になっていて
SSHとHTTPにチェックを入れています。
telnet www.ruby-lang.org 80 の結果は下のようになりました。
Trying 221.186.184.68...
Connected to www.ruby-lang.org (221.186.184.68).
Escape character is '^]'.
・最終的にやりたいこと
http://○○/test.cgi へのアクセスでhtmlコードが表示されるようにしたい
よろしくお願いします。
0311デフォルトの名無しさん
2009/07/16(木) 21:49:42> プログラムの内容は、下記のアドレスの一番上のプログラムです。
嘘だ
それは「そのままでは動かない」
その4行のほかに書いてあることがあるはず
0312デフォルトの名無しさん
2009/07/16(木) 21:52:11すみません。cgiはこのようになっています。
#!/usr/bin/ruby
require 'open-uri'
print("Content-Type: text/html; charset=utf-8 \n\n")
open("http://www.ruby-lang.org/") {|f|
f.each_line {|line| p line}
}
0313デフォルトの名無しさん
2009/07/16(木) 21:54:02横から見てコピペしてみたら、普通にそのまま動きましたが何か
0314デフォルトの名無しさん
2009/07/16(木) 22:15:54#!/bin/sh
echo "Content-Type: text/plain\n\n"
ping -c 1 www.ruby-lang.org
たぶんこれでも似たようなエラーが出るはず
ApacheがDNS関係の設定か何かを読んでないのだろう
0315デフォルトの名無しさん
2009/07/16(木) 22:27:25ワロタw
SELinuxの機能をオンにしてる(よな?たぶん・・・)時点でおれはダメ
SELinux登場以前のノウハウが通用しなくてきつすぎる
とりあえずオフにしてくれなきゃ原因となりうるものが多すぎ
オフにしたら動いたりしてな
0316デフォルトの名無しさん
2009/07/16(木) 22:33:55すみません。私の説明不足でした。
>>314
面倒なものに助言をくださりありがとうございます。
シェルスクリプトをcgiとして取り扱うのは初めてなので
方法が合っているか分かりませんが拡張子を.cgiとしてchmodで755を与えて
サーバーを通してみてみました。
error.logは
[error] ping: unknown host www.ruby-lang.org
[error] Premature end of script headers: test3.cgi
[error] File does not exist: /var/www/html/favicon.ico
となりました。 DNS関係の設定ですね 調べてみます。ありがとうございます。
0317デフォルトの名無しさん
2009/07/16(木) 22:41:04SELinuxの設定を確認したら、Enforcingモードになっていました。
今、無効化して再起動をしたところ実行できましたorz
本当にありがとうございました!!
スレ汚しごめんなさい。
0318デフォルトの名無しさん
2009/07/16(木) 22:46:450319デフォルトの名無しさん
2009/07/16(木) 22:58:10他にまっとうな方法があるならそちらを使うべきなんだよね。
俺もSE以前の知識で止まってるので皆目わからんが。
0320デフォルトの名無しさん
2009/07/16(木) 23:42:590321デフォルトの名無しさん
2009/07/16(木) 23:44:38勘どころがまったくわからない
これは少数派ではないと勝手に思ってる
0322デフォルトの名無しさん
2009/07/17(金) 00:49:04自分も悪い事態の中で動かしてるんじゃないのか?
0323デフォルトの名無しさん
2009/07/17(金) 01:19:16SELinux を無効にすることだろうが
0324デフォルトの名無しさん
2009/07/17(金) 02:40:170325デフォルトの名無しさん
2009/07/17(金) 05:48:22たいていの人にとっては「なぜかついてきた邪魔な機能」でしかない
0326デフォルトの名無しさん
2009/07/17(金) 08:46:41他にまっとうな方法があるならそちらを使うべきなんだよね。
俺もSE以前の知識で止まってるので皆目わからんが。
そう、本当は何も解決してないどころか事態はより悪くなっている
SELinuxってなんであんなに寄せ付けない感があるんだろ
勘どころがまったくわからない
これは少数派ではないと勝手に思ってる
まっとうな方法をアドバイスできない時点で
自分も悪い事態の中で動かしてるんじゃないのか?
CentOS インストールするときに最初にやることは
SELinux を無効にすることだろうが
CentOS使ってるいみなくね
SELinuxが必要でCentOSを使ってる人は少数
たいていの人にとっては「なぜかついてきた邪魔な機能」でしかない
0327デフォルトの名無しさん
2009/07/17(金) 11:15:130328デフォルトの名無しさん
2009/07/17(金) 13:48:47セキュリティは、そこら辺にあるマニュアル通りでおk
どこがの事業で大規模に人が集まってくるようなら考える。
専門家に任せたりd(^-^) ね!
0329デフォルトの名無しさん
2009/07/17(金) 17:39:41Cの何十倍くらい電力効率悪いんだろう。
0330デフォルトの名無しさん
2009/07/17(金) 17:46:290331デフォルトの名無しさん
2009/07/17(金) 17:52:120332デフォルトの名無しさん
2009/07/17(金) 18:19:41マシン、CPUはそうだが、
作る時間を大幅節約できるので、その分の食費、クーラー代、通勤費、残業代
コストを減らせる。
0333デフォルトの名無しさん
2009/07/17(金) 18:34:27アセンブラの何十倍くらい電力効率悪いんだろう。
0334デフォルトの名無しさん
2009/07/17(金) 18:46:410335デフォルトの名無しさん
2009/07/17(金) 19:51:58長く使うプログラムならCで元が取れる
0336デフォルトの名無しさん
2009/07/18(土) 00:20:400337デフォルトの名無しさん
2009/07/18(土) 03:29:280338デフォルトの名無しさん
2009/07/18(土) 05:23:58完璧な絶望が存在しないようにね。やれやれ。
0339デフォルトの名無しさん
2009/07/18(土) 12:31:240340デフォルトの名無しさん
2009/07/18(土) 17:41:03なんでもかんでもRubyで書こうと思うのが間違ってるんだ
適材適所って言うじゃない
無論、エコを語るならどれだけ長く使えば元が取れるのかは正確に計算する必要があるけど。
0341デフォルトの名無しさん
2009/07/18(土) 17:42:13そんな奴はいない
0342デフォルトの名無しさん
2009/07/18(土) 17:53:49それはない
0343デフォルトの名無しさん
2009/07/19(日) 01:54:500344デフォルトの名無しさん
2009/07/19(日) 10:18:390345デフォルトの名無しさん
2009/07/19(日) 16:37:43春樹乙
0346デフォルトの名無しさん
2009/07/19(日) 18:30:36http://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-list/41847?41795-42004
> > msvcおよびmingw版ruby,で1000バイト以上をパイプに書き込むとwriteがブロックしてしまうのですが、これは仕様でしょうか?
> 1.8における仕様ということにさせてください。
にあるような問題が発生してしまうので困ってる。
書き込み側は #write, #close
読み込み側は read, eof? あたりに反応してくれれば十分なんだけど…
0347デフォルトの名無しさん
2009/07/19(日) 18:51:36rake使うときにshでコマンドを実行すると、パラメータが途中で切れてたのはそれか……ひどい仕様だ
0348デフォルトの名無しさん
2009/07/19(日) 21:09:42繰り返す。
WindowsでRubyを使う奴は情弱
情報強者のプログラマはWindowsなんてゴミを使っちゃだめ
あれはお年寄りと子供用のOSだ。
0349デフォルトの名無しさん
2009/07/19(日) 21:25:080350デフォルトの名無しさん
2009/07/19(日) 21:29:09あらゆることに大人の修行を求める>>348さんパネェっす
妥協せず全て全力で学び全力で研究する修羅の世界を行くの流石っす
0351デフォルトの名無しさん
2009/07/19(日) 21:36:45大学で初めてUnixさわった子が言いそうな発言だなぁ
0352デフォルトの名無しさん
2009/07/19(日) 21:40:06OSなんて適当でいいんだよな
自動車がATで充分な場合が多いのと一緒
世の中のあらゆることにプロフェッショナルではいられない以上、
世の中のほとんどに対しては「年寄りか子供」程度のアプローチしかできん
0353デフォルトの名無しさん
2009/07/19(日) 21:42:48ただ、努力をすることを忘れた瞬間から人は堕落する。
せいぜい適当な態度で適当な仕事を適当にやって適当な給料もらってりゃいい。
俺はそれじゃ我慢できない。給料もらってる以上、仕事は本気でやりたい。
0354デフォルトの名無しさん
2009/07/19(日) 21:44:030355デフォルトの名無しさん
2009/07/19(日) 21:45:450356デフォルトの名無しさん
2009/07/19(日) 21:47:15妄想はいいから
仕事を探せよ
http://www.hellowork.go.jp/
0357デフォルトの名無しさん
2009/07/19(日) 21:48:29とてもじゃないがプログラマの視点とは思えないわw
0358デフォルトの名無しさん
2009/07/19(日) 21:49:24OSなんて自分が使いやすい物を使えばいいだろ。
結果さえ出れば、道具は何を使っても構わないと思うがな。
0359デフォルトの名無しさん
2009/07/19(日) 21:51:200360デフォルトの名無しさん
2009/07/19(日) 21:54:43( ´,_ゝ`)プッ
0361デフォルトの名無しさん
2009/07/19(日) 21:54:500362デフォルトの名無しさん
2009/07/19(日) 22:02:420363デフォルトの名無しさん
2009/07/19(日) 22:11:420364デフォルトの名無しさん
2009/07/19(日) 22:19:020365デフォルトの名無しさん
2009/07/19(日) 22:24:130366デフォルトの名無しさん
2009/07/19(日) 22:25:440367デフォルトの名無しさん
2009/07/19(日) 22:39:34RubyみたいなUNIXコマンドラインツールをWindowsで使うのが
価値半減というのはわかるけどね。正式なサポートもないし。
0368デフォルトの名無しさん
2009/07/19(日) 22:57:13コマンドプロンプトは機能が貧弱だからな…
かと言ってPowerShellはシェルとしては微妙に使いにくい気がするし(慣れだろうけど)
0369デフォルトの名無しさん
2009/07/19(日) 23:22:250370デフォルトの名無しさん
2009/07/20(月) 00:02:41Microsoft Windows Services for UNIX (SFU)
0371デフォルトの名無しさん
2009/07/20(月) 00:07:370372デフォルトの名無しさん
2009/07/20(月) 01:40:36そのスレの内容を見たか?
0373デフォルトの名無しさん
2009/07/20(月) 06:56:38プロフェッショナルである必要があるんじゃないかな。
仕事だからWindowsはダメとかそういう話ではなくて。
とりあえず仕事でRubyはアリエナイと言っておく。
0374デフォルトの名無しさん
2009/07/20(月) 07:04:22どうせそんなにシビアなバッチ書かないし
0375デフォルトの名無しさん
2009/07/20(月) 07:53:25>とりあえず仕事でRubyはアリエナイと言っておく。
ここは同意できないというか、どうしてRubyはありえないのか根拠を詳しく聞かせてほしいな。
自分は、実際に仕事でWebサイトの構築をRuby(Rails)で3年くらいやっているけど、問題になったことはないので。
2日目のRubykaigiにも行って来たけど、楽天、リクルート、ニフティなどの大手サイトでの実績を聞くことができたよ。
月間6000万PVのサイトでもRailsで対応できているって事だったけど。
0376デフォルトの名無しさん
2009/07/20(月) 08:03:04多くの場合は実行環境がすでに固定されてるし、リプレースにもあんまし向かんが
メンテナンス人員が派遣屋で即購入できることが重要である案件も結構あるしな
0377375
2009/07/20(月) 08:09:27(本番環境がRedHatだからなるべく近い環境にしている)
PCのOSがWindowsなのは、会社の方針。
USBメモリを使えなくしたり、WindowsUpdate、ウイルスチェックの強制実行などを中央サーバから指示できるなど管理上の理由。
数百台以上あるPCを管理するには、Windowsのほうが便利だよね。
普通の会社だと、個人でOSを自由に選べるという事は少ないと思うんだけど、どうなんだろうか?
0378375
2009/07/20(月) 08:20:58そういう話なら、納得できます。
自分もRuby(Rails)で仕事をさせてもらう場合、常に実行環境のサーバごとの提供ができる時だけなので。
あるいは、root権限を一時的に使わせてもらえて、使用するミドルウェアの選定を任せてもらえる時とか。
実行環境がすでに固定されている場合、リプレースには向かないというのは同意。
0379デフォルトの名無しさん
2009/07/20(月) 11:02:510380デフォルトの名無しさん
2009/07/20(月) 11:13:080381デフォルトの名無しさん
2009/07/20(月) 12:15:47だから誰かが作ったレール利用したプログラミング人生送りたいならJava選べJava
めちゃくちゃ安定だから
何血迷ってるのよ
0382デフォルトの名無しさん
2009/07/20(月) 12:38:50がんばります
>>381
Java嫌いです
0383デフォルトの名無しさん
2009/07/20(月) 13:43:39スペースに変換するにはどう書けばいいですか?
"foo\nbar\nhoge" => "foo\nbar hoge" とやりたいです。
split("\n") で分割してから
array[0] + "\n" + array[1, array.size-2].join(" ")
でできるのですが
正規表現とgsub でもっと簡単にできないでしょうか?
0384デフォルトの名無しさん
2009/07/20(月) 13:47:59ご要望とは違うが、文字数を減らして書いてみた。
(ar = str.split("\n")).shift + "\n" + ar.join(" ")
0385デフォルトの名無しさん
2009/07/20(月) 13:58:311 while s.gsub!(/(¥n.+)¥n/m) { |m| "#{$1} " }
# 破壊的なので必要ならdup
1.9だと
s.gsub(/(?<=¥n)(.*?)¥n/) { "#{$1} " }
0386385
2009/07/20(月) 14:00:010387385
2009/07/20(月) 14:00:550388デフォルトの名無しさん
2009/07/20(月) 14:01:59内容に全く関係ないが、なぜわざわざ \(バックスラッシュ) を ¥(¥) で記述するw
なんか2chで変換がかかるのかな?
0389デフォルトの名無しさん
2009/07/20(月) 14:07:192chは特に何もしない
0390デフォルトの名無しさん
2009/07/20(月) 14:10:31いやいやw それは少し変だろ
\って書いてあるんならわからんでもないが
0391385
2009/07/20(月) 14:12:24ペーストしただけなのだが、0x5Cではなく0xA5になってる?
0392デフォルトの名無しさん
2009/07/20(月) 14:15:41うちのMacbookはデフォルトが円なせいでよく打ち間違えるのがやっかい
0393デフォルトの名無しさん
2009/07/20(月) 14:17:56うん。というより、HTMLなので ¥ になってる。
単純に書き込みに使うブラウザのマッピングの問題なんだろうか。
0394デフォルトの名無しさん
2009/07/20(月) 14:20:16>>385は円記号になるもの(¥)
バックスラッシュをU+00A5に内部変換するコピペシステムはあって欲しくないんで、
たぶん2ch専用ブラウザがなにかお節介を焼いたのだろう
0395デフォルトの名無しさん
2009/07/20(月) 14:25:40素直に Yen Sign でクォートしたらエラーになったでござるの巻
0396デフォルトの名無しさん
2009/07/20(月) 14:33:38$ echo <バックスラッシュ><バックスラッシュ> > x.txt
$ cat x.txt
<バックスラッシュ>
$ open x.txt # 関連付けされたテキストエディット(Macの「メモ帳」)で開く。
名前を付けて保存→y.txtで保存。
$ cat y.txt
<円記号>
ちょwwwwwwwwww
0397デフォルトの名無しさん
2009/07/20(月) 14:50:13テキストエディットはなにもしなければMacLatinかMacJapaneseで保存する
0398デフォルトの名無しさん
2009/07/20(月) 16:58:31ご指摘のとおり。
早速UTF-8保存をデフォにしますた。
0399デフォルトの名無しさん
2009/07/20(月) 17:37:26自分のサイトのRubyで書かれたCGIページにリクエストが要求されると、自動的にtwitterに発言を投稿してくれるプログラムを書きたいと思っています。
twitter関係のRubyアプリを調べたところ、twitter4Rというものがあるらしく、使ってみたのですがうまくいきません。
ローカルで実験してみると、どうやらRubygemsというものがなければ動かない(?)ようだということがわかりました(dllをbin配下に追加したら、ローカルからはtwitterに投稿できました)。
ですが、自分のサイトが置いてあるレンタルサーバでは、権限がないためRubygemsがインストールできません(問い合わせたところ、導入予定もないとのことです)。
レンタルサーバのRubyバージョンは1.8.2です。
レンタルサーバ上でtwitterに投稿できるような、解決策はありませんでしょうか?
0400デフォルトの名無しさん
2009/07/20(月) 17:39:370401デフォルトの名無しさん
2009/07/20(月) 17:42:09最悪、
system("perl post_to_twitter.pl #{message}")
とでもしてRubyスクリプトの中でPerlスクリプト呼べば普通にできる
0402デフォルトの名無しさん
2009/07/20(月) 17:45:28コマンドライン twitter 投稿アプリケーションを別途起動する、というのが素直な解決策だと思う
0403デフォルトの名無しさん
2009/07/20(月) 17:46:05カレント以外なら$LOAD_PATHの配列ににパス追加してからrequire
でもtwitter apiぐらいnet/httpで叩けばいいと思う
0404デフォルトの名無しさん
2009/07/20(月) 17:51:35回答ありがとうございます。
Rubyはかなり初心者なので、Net:HTTPはちょっときつそうです。
WEB探してもNet:HTTPからtwitterAPI呼んでるものが見つからないので(ほとんどみんなgems使ってる例)・・・・。
もうcgi自体はRubyで作ってしまってるので、>>401さんのやり方でやってみようかな。
Perlの書き方調べつつがんばってみます。
0405デフォルトの名無しさん
2009/07/20(月) 17:51:530406デフォルトの名無しさん
2009/07/20(月) 17:57:01危なすぎるだろ
なぜ>>403のレスの内容をスルーしてるのか分からん
ちなみにおれは>>403じゃないぞ
0407399
2009/07/20(月) 18:01:18libを適当につくって、
$LOAD_PATH << "libのパス"
require "Rubygems"
でいいのかな?
0408デフォルトの名無しさん
2009/07/20(月) 18:04:30net/httpの範囲そのまんま
ttp://apiwiki.twitter.com/Twitter-REST-API-Method%3A-statuses%C2%A0update
あとgemはもう忘れろ
0409デフォルトの名無しさん
2009/07/20(月) 18:47:08libの中身を取り出すのなら、もうrubygemsは関係ないよ
だからrequire "rubygems"は必要ない
あと、Twitter4rはjsonに依存しているようなので
jsonのlibも必要になると思われる
0410デフォルトの名無しさん
2009/07/20(月) 18:51:08とりあえずrubygemsのlibをカレントにぶちこんで、require 'twitter'してみたところ、また失敗してしまったようなので、
>>409さんの言うjsonってやつを探してみます。
0411デフォルトの名無しさん
2009/07/20(月) 18:55:50require "twitter"はtwitter.rbを$LOAD_PATHそれぞれのパスに探しに行くから
./twitter.rbは見つけられても./lib/twitter.rbは見つけられない
だからパスを追加するか、カレントにtwitter.rbが来るように配置しなおす
$LOAD_PATH << "./lib"
0412399
2009/07/20(月) 19:03:16フォルダ構成は、
twitterフォルダ(twitter.rbの依存)
rubygemsフォルダ
rbconfigフォルダ
insert.cgi(twitter.rbをrequireしたいcgi)
twitter.rb
rubygems.rbなど(他にubygems.rbなど)
json関連(object.rbなど)
となっています。
これでもtwitter.rbをrequireすると失敗しているようです(コメントアウトすると正常終了するが、しないと真っ白の画面が表示される)。
0413399
2009/07/20(月) 19:06:080414デフォルトの名無しさん
2009/07/20(月) 19:07:59/tmpに書き出すなり)を実行してみれ。
0415デフォルトの名無しさん
2009/07/20(月) 19:10:500416デフォルトの名無しさん
2009/07/20(月) 19:11:56たぶんtwitter.rbは読めているが、読んでいる途中にエラーがあるんだろうな
$LOAD_PATHより前に、まずエラー内容を表示するところからだ
insert.cgi全体をbegin〜rescue Exception〜endで囲んで
エラー内容を表示できるようにしておいた方が良いよ。cgi_exceptionを使っても
ttp://cgi-exception.rubyforge.org/
0417デフォルトの名無しさん
2009/07/20(月) 19:12:17> messageなるものをそのままコマンドの引数に渡すのかよ
> 危なすぎるだろ
なんで?
ただの文字列という情報しかないのにそんなに怯えるのはなぜ?
0418399
2009/07/20(月) 19:13:27$LOAD_PATH.each {|a|
print a
print "<br>"
}
これが実行結果です。
/usr/local/lib/ruby/site_ruby/1.8
/usr/local/lib/ruby/site_ruby/1.8/i686-linux
/usr/local/lib/ruby/site_ruby
/usr/local/lib/ruby/vendor_ruby/1.8
/usr/local/lib/ruby/vendor_ruby/1.8/i686-linux
/usr/local/lib/ruby/vendor_ruby
/usr/local/lib/ruby/1.8
/usr/local/lib/ruby/1.8/i686-linux
0420デフォルトの名無しさん
2009/07/20(月) 19:15:110421デフォルトの名無しさん
2009/07/20(月) 19:18:12もっとゆっくり食べなよ・・・
0422デフォルトの名無しさん
2009/07/20(月) 19:21:32いちばん簡単な「自力でAPI経由でPOSTする」「外部プログラムに直接委託する」の2つを封じられたら
あとは汎用性のないグダグダしかないぞ
0423デフォルトの名無しさん
2009/07/20(月) 19:23:590424399
2009/07/20(月) 19:25:52.
が抜けていました。
Dir.pwdは以下です。
/home/sites/lolipop.jp/users/lolipop.jp-dp44048366/web/s
0425399
2009/07/20(月) 19:33:46Status: 500 Internal Error Content-Type: text/html X-CGI-Exception: 0.3.0
./rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- json (LoadError)
from ./rubygems/custom_require.rb:31:in `require'
from ./twitter.rb:23
from insert.cgi:11:in `require'
from insert.cgi:11
該当箇所:
def require(path) # :doc:
gem_original_require path #31行目
rescue LoadError => load_error
0426399
2009/07/20(月) 19:35:59array.rb
lexer.rb
object.rb
util.rb
をいれてたのですが足りないっぽいのでgem_original_requireってやつ探してみます。。
0427デフォルトの名無しさん
2009/07/20(月) 19:45:02require "json"
なんだからjson.rbがないと
それにしてもライブラリがgemsをrequireしてるのは行儀わるいような
0428399
2009/07/20(月) 19:55:09http://sourceforge.jp/projects/freshmeat_ruby-json/resources/
これ解凍してもjson.rbはないんですけど・・・・。
0429デフォルトの名無しさん
2009/07/20(月) 20:00:190430デフォルトの名無しさん
2009/07/20(月) 20:00:47http://json.rubyforge.org
ここの入れて。
0431399
2009/07/20(月) 20:07:59>>430のjson.rbをいれてみたら新しいエラーが・・・・。
いれたのはjson-1.1.7のlib配下、json.rbとjsonフォルダです。
Status: 500 Internal Error Content-Type: text/html X-CGI-Exception: 0.3.0
./json/pure.rb:13: uninitialized constant JSON::Iconv (NameError)
from ./rubygems/custom_require.rb:31:in `gem_original_require'
from ./rubygems/custom_require.rb:31:in `require'
from ./json.rb:8
from ./rubygems/custom_require.rb:31:in `gem_original_require'
from ./rubygems/custom_require.rb:31:in `require'
from ./twitter.rb:23
from insert.cgi:11:in `require'
from insert.cgi:11
0432399
2009/07/20(月) 20:13:06require 'json/common'
module JSON
require 'json/version'
begin
require 'json/ext'
rescue LoadError
require 'json/pure' # 8行目
end
end
こうなってるんだけど、'json/ext'フォルダは存在してるけど空っぽ。
これは問題ありませんか?
0433デフォルトの名無しさん
2009/07/20(月) 20:13:580434デフォルトの名無しさん
2009/07/20(月) 20:15:46それは自分で考えてみて
別に難しい話じゃないから
0435399
2009/07/20(月) 20:19:46またどーーーーーしてもわからないエラーにぶち当たったら持ってきます。
長時間すみませぬ。
0436デフォルトの名無しさん
2009/07/20(月) 20:21:09extなしですませる方法も載ってるよ。
0437436
2009/07/20(月) 20:26:540438デフォルトの名無しさん
2009/07/20(月) 20:30:47もう素直にTwitter4rを諦めて、自力で(Net::HTTPで)何とかした方が早い気する
0439デフォルトの名無しさん
2009/07/20(月) 20:35:236行め:begin
7行め: require 'iconv'
13行め: rescue Errno::EINVAL, Iconv::InvalidEncoding
54行め: LoadError
となってる。
iconvがロードできなければ54行めで捕捉することを期待してるんだろうけど、
それ以前の rescue をチェックするタイミングで定数 Iconv が必要になって
こういうエラーになっているようだな。
該当 rescue 節の順序を逆にすれば作者の期待するエラーになる、はず。
0440399
2009/07/20(月) 20:46:070441デフォルトの名無しさん
2009/07/20(月) 20:46:56いや難しくないと言ったのは>>432の部分だけで(>>432自身に問題ない理由まで記されている)
>>431>>433>>439のiconvのほうは少々厄介
rubyのiconvバインディング自体は標準添付だけど
たぶんサーバに大元のiconv本体が存在しない
require 'iconv'
と書いただけのスクリプトでエラーでるなら諦め
0442デフォルトの名無しさん
2009/07/20(月) 20:53:00が、元の質問の解決には結局関係なかったな。
既に言われているように、素直に Net::HTTP を使う方向で考えたほうがよさそう。
0443399
2009/07/20(月) 20:54:420444デフォルトの名無しさん
2009/07/20(月) 20:59:090445デフォルトの名無しさん
2009/07/20(月) 21:08:51>>443
むり。レンタルサーバーで何とかするのは絶望的
twitter4rは諦めた方がいい
0446399
2009/07/20(月) 21:10:29長時間どうもでしたー。
自力でチャレンジしてみまする。
0447デフォルトの名無しさん
2009/07/20(月) 21:19:10クロスサイトスクリプティングもSQLインジェクションも
攻撃の手段はただの文字列だよな。それと同じ。
コマンドインジェクションってかなり基本なのだが。
0448デフォルトの名無しさん
2009/07/20(月) 21:23:160449デフォルトの名無しさん
2009/07/20(月) 21:25:25初心者スレで安全側に立ってレスすることは悪くないと思う。
0450デフォルトの名無しさん
2009/07/20(月) 21:26:180451デフォルトの名無しさん
2009/07/20(月) 21:27:39素人が自力でHTTPやるなんて愚の骨頂
0452デフォルトの名無しさん
2009/07/20(月) 21:32:270453デフォルトの名無しさん
2009/07/20(月) 21:33:47それは屁理屈にもなっていない
おまえは外部から入力された文字列をブラウザで表示させるとき、
内容によってサニタイジングしたりしなかったりするのか?
もしそうならそれはやめた方がいい。
0454デフォルトの名無しさん
2009/07/20(月) 21:40:350455デフォルトの名無しさん
2009/07/20(月) 21:44:20横だが、わざわざしてないと考えるほうがおかしいとは思わないのか?
0456デフォルトの名無しさん
2009/07/20(月) 21:45:40これに文句いわないだろ
0457デフォルトの名無しさん
2009/07/20(月) 21:51:48そもそも大前提が、>>399 の
> 自分のサイトのRubyで書かれたCGIページにリクエストが要求されると、
> 自動的にtwitterに発言を投稿してくれるプログラムを書きたいと思っています。
これじゃないのか?
それなら、
puts "ほげほげ"
ではなく、
cgi = new CGI
puts cgi['hogehoge']
などを想定するのもそれほどずれてはいないし、確認するのもお節介とはいえおかしくはない
0458デフォルトの名無しさん
2009/07/20(月) 21:54:270459デフォルトの名無しさん
2009/07/20(月) 22:02:23system('cmd', 'opt', 'args')
の配列形式を使えばややマシ
やや
0460デフォルトの名無しさん
2009/07/20(月) 23:24:43このあたりはWeb開発目的で作られただけあって
PHPをやってるエンジニアの方が強いだろうな
0462デフォルトの名無しさん
2009/07/21(火) 11:00:24コマンドラインなプログラムにも重宝するのに。
0463デフォルトの名無しさん
2009/07/21(火) 11:35:26完全無敵な自動エスケープは存在しないんだからさ
0464デフォルトの名無しさん
2009/07/21(火) 11:47:280465デフォルトの名無しさん
2009/07/21(火) 11:49:350466デフォルトの名無しさん
2009/07/21(火) 11:59:34>>464
んじゃ書いてみ
0467デフォルトの名無しさん
2009/07/21(火) 12:14:23たとえばそれを明日、手持ちのキャッシュカードで引き落とせることはまず期待するよな。
それも言ってしまえば確率論による期待にしか過ぎんわけだが、それは理解できるのかな。
また、世の中はそれで十分回るのよ。
0468デフォルトの名無しさん
2009/07/21(火) 12:19:35プログラミング上は、信用できない入力を扱った時点で愚の骨頂
0469デフォルトの名無しさん
2009/07/21(火) 12:25:440470デフォルトの名無しさん
2009/07/21(火) 12:47:370471デフォルトの名無しさん
2009/07/21(火) 16:05:47db =SQLite3::Database.new("data.db")
sql =<<SQL
create table the_table(
name varchar(10),
age interger,
sex varchar(1)
);
SQL
db.execute(sql)
supername = ["God",1000,"n"]
db.execute("insert into the_table values("#{supername}")")
p db.execute("select * from the_table")
db.close
ってやってもエラー
式展開使えないですかね?
0472デフォルトの名無しさん
2009/07/21(火) 16:16:48覚えるの簡単な方法としては \ でエスケープする
db.execute("insert into the_table values(\"#{supername}\")")
0473デフォルトの名無しさん
2009/07/21(火) 16:17:170474デフォルトの名無しさん
2009/07/21(火) 16:23:38パラメタバインディング機能があるだろうからそっち使ったほうがいいかと
0475デフォルトの名無しさん
2009/07/21(火) 16:30:040476471
2009/07/21(火) 16:41:08おぉ!ほんとですね。Rubyあんまり関係なかったですね。
SQLを使ったのがruby-sqlite3が始めてだったんでそんなもんかと思ってました。
ありがとうございます
0477デフォルトの名無しさん
2009/07/21(火) 17:35:24ネットワークプログラミングもXMLやJsonもファイルシステムもDBも
Rubyとは一切関係ありません
0478デフォルトの名無しさん
2009/07/21(火) 17:43:410479デフォルトの名無しさん
2009/07/22(水) 13:57:140480デフォルトの名無しさん
2009/07/22(水) 14:20:000481デフォルトの名無しさん
2009/07/22(水) 14:35:06to(String), to(Array) じゃダメだったの?
0482デフォルトの名無しさん
2009/07/22(水) 14:36:490483デフォルトの名無しさん
2009/07/22(水) 14:44:17def to(klass)
case klass
when String then self.data.to(String) # 旧来の to_s
when Array then self.data # 旧来の to_a
end
end
end
こんな処理をしてもいいんじゃね、という話だと思う
0484デフォルトの名無しさん
2009/07/22(水) 15:51:47メソッドオーバーロードのある言語ならいざ知らず
rubyではtoの変換候補が増える度にメソッドの上書きが酷い事になる
こんな方法考えたけどto_*を定義するより無駄が多いと感じる
def to(klass) ; send("to#{klass}") ; end
0485デフォルトの名無しさん
2009/07/22(水) 15:57:55それだとクラスを1つ作る度に組み込みクラスを拡張することになるね
0486デフォルトの名無しさん
2009/07/22(水) 16:09:35・・・・・Rubyには立派なオブジェクトシステムがあるのに
何でわざわざディスパッチテーブルを
自前で書かねばならんのかとは思うけど
0487デフォルトの名無しさん
2009/07/22(水) 22:50:580488デフォルトの名無しさん
2009/07/22(水) 22:52:090489デフォルトの名無しさん
2009/07/22(水) 22:56:47pure rubyでhtmlパースできるものがあればもっと最強なんだが
0490デフォルトの名無しさん
2009/07/22(水) 23:17:57HpricotはUTF-8に変換したHTMLを渡さないとどうにもならん
0491デフォルトの名無しさん
2009/07/22(水) 23:36:07Nokogiri は、内部で libxml を使っているとのことだけど、
Windows 版はどうなるの? セッション中でも、あるいは下記を見ても
Windows の Ruby でも nokogiri は使えるとのことですが、
http://d.hatena.ne.jp/kitamomonga/20090615/ruby_nokogiri_with_latest_libxml2_by_hand
windows の ruby で gem install nokogiri すると、dll とかが自動的にインストールされるのでしょうか?
関連して、Linux 等で外部のライブラリを使おうとする gem を、jruby 環境でインストールすると、どうなるの?
たとえば今回の nokogiri とか
0492デフォルトの名無しさん
2009/07/22(水) 23:38:09>HpricotはUTF-8に変換したHTMLを渡さないとどうにもならん
まじ?普通にEUC-JP渡してたんだが。
0493デフォルトの名無しさん
2009/07/22(水) 23:54:41Windows環境があるなら試せばいいじゃんそんなん
ちなみに gems\1.8\gems\nokogiri-1.3.1-x86-mswin32\ext\nokogiri\ ディレクトリに
iconv と libxml2 と libxslt と libexslt と zlib1 の dll が置かれて使用される
コミコミなのである意味バージョン差異問題とか一番めんどくさくないのがWindows
Linux とかのほうが実は面倒だったりする
0494デフォルトの名無しさん
2009/07/23(木) 00:22:45require 'rubygems'
require 'hpricot'
require 'kconv'
html = '<html><title>にほんご タイトル</title></html>'.toeuc
doc = Hpricot.parse(html)
p doc.at('title').inner_text == 'にほんご タイトル'.toeuc
p doc.at('title').inner_text == 'にほんご タイトル'.toutf8
p doc.at('title').inner_text == "にほんご#{Hpricot.uxs(' ')}タイトル".toeuc
p doc.at('title').inner_text == 'にほんご'.toeuc+ Hpricot.uxs(' ') +'タイトル'.toeuc
最後だけ true
つまり、文字参照のとこだけが強制的に UTF-8 の文字で挿入される
これはリクツ上仕方ないんだけれども、日本語 HTML にはなかなか厳しい
Hpricot のいいところはバイトの並びが保存されて文字コードが不変とみなせるとこなんだが、
ここであっさり綻びてる
古いバージョンの ? で置換されてたころのほうがまだマシだったという悲しいオチが
0495デフォルトの名無しさん
2009/07/23(木) 00:40:26#!ruby1.9
# -*- coding: utf-8 -*-
require 'rubygems'
require 'nokogiri'
require 'kconv'
html = '<html>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<title>日本語!</title></html>'.tosjis
doc = Nokogiri::HTML.parse(html)
p Marshal.dump(doc.at('title').inner_text)
p Marshal.dump('日本語!'.toutf8)
これが
"\x04\bI\"\x11\xE6\x97\xA5\xE6\x9C\xAC\xE8\xAA\x9E\xEF\xBC\x81\x06:\rencoding\"\x0EShift_JIS"
"\x04\bI\"\x11\xE6\x97\xA5\xE6\x9C\xAC\xE8\xAA\x9E\xEF\xBC\x81\x06:\rencoding\"\nUTF-8"
となるのを直したバージョンを早く公開して欲しい
0496デフォルトの名無しさん
2009/07/23(木) 01:06:361.9初期によくあったエンコーディング関連の勘違いのコードがまだ残ってるのかな
0497491
2009/07/23(木) 10:36:46レスどうもありがとうございました。
Windows 環境でやってみたところ、dll がダウンロードできました。
これは便利だ。
○本番環境は Linux で開発は Windows の場合、
本番の Linux のディストリビューションの libxml のバージョンはいくつか?
Windows 版で入るのはいくつか?
本番のアプリケーションではどのバージョンで使いたいか?
それを決めたら、それぞれの環境をそれに合わせる
といったことが必要そうですね。
JRuby ではこれからやってみます。
0498デフォルトの名無しさん
2009/07/23(木) 11:01:18それを読むようにnokogiri.soを作るようにする以外の選択肢はないと思う
システムのlibxml2を最新版にできるなら問題はないんだが
libxmlは「何かバグがあったからバージョンを上げる」の典型なんで
古いバージョンは必ずバグ持ちだぞ
0499デフォルトの名無しさん
2009/07/23(木) 13:30:39もうちょっと精査してからリリースすれば良いのに。
0500デフォルトの名無しさん
2009/07/23(木) 14:02:11& や < を全部切り落とすとか意味不明仕様
ユーザー全員が自前でアプリケーション側を書き換えて対処したという逸話が
ttp://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=libxml2+WordPress&num=50
0501デフォルトの名無しさん
2009/07/23(木) 14:03:450502デフォルトの名無しさん
2009/07/23(木) 14:25:39GCCを思い出してみると。
(?.x.y が x < y になるまで待てとか言われなくなったのがそのころ)
0503デフォルトの名無しさん
2009/07/23(木) 16:47:40それ最新でも?
0504デフォルトの名無しさん
2009/07/23(木) 16:58:52これで困るのは非 ASCII 文字圏ユーザーだけだから、
これまで誰も気にしなかったのと同様に案外誰も気づいてないかもしれないな
0505デフォルトの名無しさん
2009/07/23(木) 17:03:150506デフォルトの名無しさん
2009/07/23(木) 17:11:04逆に自作公開モチベーションが上がるんじゃないかと思われるということにするのはどう
0507デフォルトの名無しさん
2009/07/23(木) 17:25:59ある程度「できた」ライブラリを自分用に普段使いしたいんですが、
git 管理の lib ディレクトリをそのまま gem ライブラリのディレクトリの lib ディレクトリとして cp する方法しか思いつきません
なんかもうちょっとうまい方法ありませんか?
0508デフォルトの名無しさん
2009/07/23(木) 20:21:19自分でgemパッケージを再生成してインストールするというのはだめなん?
たぶんRakefileがあるはずだから、インストールも簡単だとおもうけど。
0509デフォルトの名無しさん
2009/07/23(木) 21:14:08class A
class B; end
class C; end
end
というでっかいクラスがあって、これを継承したクラス K を作ります
class K < A
end
もともとの A::B のメソッドの中で A::C.new と書いてあった場合、
K で同じメソッドを呼んだら空気を読んで K::C.new が呼ばれたりしますか?
呼ばれない場合、もともとの A のクラスを書く人が
「A が継承される可能性」を考慮してクラス関係を記述する必要があったりしますか?
A::C.new と書く代わりに eval("#{self.class}::C").new と書く、みたいな
0510デフォルトの名無しさん
2009/07/23(木) 21:16:270511デフォルトの名無しさん
2009/07/23(木) 21:22:26> もともとの A::B のメソッドの中で A::C.new と書いてあった場合、
> K で同じメソッドを呼んだら空気を読んで K::C.new が呼ばれたりしますか?
Aと明示してるのにKが参照されたらバグだろ
> 呼ばれない場合、もともとの A のクラスを書く人が
> 「A が継承される可能性」を考慮してクラス関係を記述する必要があったりしますか?
ある
> A::C.new と書く代わりに eval("#{self.class}::C").new と書く、みたいな
が、evalはいらない
self.class::C.new
0512デフォルトの名無しさん
2009/07/23(木) 21:39:39class A
class B; end
class C
class D
def initialize; B.new; end
end
end
end
A::C::D.new
これがエラーにならないのはおかしいと思う
D が知ってるのは A と C の2つと、D と同じ「深さ」に定義されてるクラスだけだと思うんだが
D から B は A::B という経路でしかアクセスできないのが当たり前に見える
0513デフォルトの名無しさん
2009/07/23(木) 21:48:07class A
ConstA = "A"
class B
ConstB = 'B'
class C
ConstC = 'C'
def initialize; p ConstA, ConstB, ConstC; end
end
end
end
A::B::C.new
これが問題なく A,B,C を表示できるのに納得してもらえたなら話は早いんだけれど
知ってるクラスの定数はそのまま利用できるのがRubyの定数スコープ
0514デフォルトの名無しさん
2009/07/23(木) 22:00:18class A
class C
def msg; 'fine'; end
end
class B
class C
def msg; 'polluted'; end
end
p C.new.msg
end
end
"polluted"
0515デフォルトの名無しさん
2009/07/23(木) 22:19:13puts "日本語"
と書かれたものを
cygwinコンソール(Shift_Jis)で文字化けせずに表示ってできますか?
0516デフォルトの名無しさん
2009/07/23(木) 22:23:11自動ではできません
puts するたびに tosjis などで変換するか、
ruby というシェルスクリプトを作ってそれを呼ぶかしてください
0517デフォルトの名無しさん
2009/07/23(木) 22:45:24なるほど、わかりました
ありがとうございます
0518491, 497
2009/07/24(金) 02:22:57Windows Xp / jdk 1.6.0 u12 / JRuby 1.3.1
JRuby をインストールして c:\Ruby\jruby-1.3.1\bin にパスを通した後、
c:\> jruby -S gem install nokogiri
で入った。
c:> nokogiri http://www.ruby-lang.org
c:/Ruby/jruby-1.3.1/bin/../lib/ruby/1.8/ffi/library.rb:18:in `ffi_lib': Could not open any of [xml2, xslt, exslt] (LoadError)
from C:/Ruby/jruby-1.3.1/lib/ruby/gems/1.8/gems/nokogiri-1.3.2-java/lib/nokogiri/ffi/libxml.rb:5
from C:/Ruby/jruby-1.3.1/lib/ruby/gems/1.8/gems/nokogiri-1.3.2-java/lib/nokogiri/ffi/libxml.rb:31:in `require'
from c:/Ruby/jruby-1.3.1/bin/../lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from C:/Ruby/jruby-1.3.1/lib/ruby/gems/1.8/gems/nokogiri-1.3.2-java/lib/nokogiri.rb:10
from C:/Ruby/jruby-1.3.1/lib/ruby/gems/1.8/gems/nokogiri-1.3.2-java/lib/nokogiri.rb:31:in `require'
from c:/Ruby/jruby-1.3.1/bin/../lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from C:/Ruby/jruby-1.3.1/lib/ruby/gems/1.8/gems/nokogiri-1.3.2-java/bin/nokogiri:7
from C:/Ruby/jruby-1.3.1/lib/ruby/gems/1.8/gems/nokogiri-1.3.2-java/bin/nokogiri:19:in `load'
from c:\Ruby\jruby-1.3.1\bin\nokogiri:19
ruby 本体の ffi でエラーになっている。
JRuby で gem で nokogiri をインストールすると、>>493 さんのいうような libxml2 の dll などは
もちろんインストールされない。
でも ffi は JRuby でも有効だそうなので(ググってみたところ)、JRuby に Java で実装した
libxml2 のライブラリを自分で作って(作れないけど)含めれば、JRuby で nokogiri も動くかも、ということなのだろう。
0519デフォルトの名無しさん
2009/07/24(金) 04:54:07たまに起こる文字化けそれかー。
じゃあ
html = '<html><title>にほんご タイトル</title></html>'.toutf8
doc = Hpricot.parse(html)
p doc.at('title').inner_text.toeuc
ってやればいいってことだよね。
toeucとtoutf8の2回やると精度落ちそうだな・・・
0520デフォルトの名無しさん
2009/07/24(金) 05:38:09「 に対応する文字が Unicode の No-Break Space(U+00A0、C2A0) にマッピングされてる」
「日本語文字コードには該当文字が存在しない」
の2つ
だいたいの用途においては
「 を通常のホワイトスペースと混用して利用されても構わない」
「ただし、 の存在が完全に取り除かれるのは困る」
だと思われるので、
ttp://d.hatena.ne.jp/kitamomonga/20090610/ruby_hpricot_enables_char_entity
にあるように、
Hpricot::NamedCharacters['nbsp'] = 32
として の置換文字データをふつうのホワイトスペースに設定しなおすというのが次善
  とか   とか数値実体参照で書かれてる場合には無力だけど、
大部分はこれでなんとかなるだろう
下手に返り値を toeuc とかすると、 EUC-JP や Shift_JIS にない文字である C2A0 は取り除かれるぞ
irb>p "にほんご\302\240タイトル".toeuc == 'にほんごタイトル'.toeuc
true
0521デフォルトの名無しさん
2009/07/24(金) 06:14:16解決
0522デフォルトの名無しさん
2009/07/24(金) 06:24:300523デフォルトの名無しさん
2009/07/24(金) 06:44:33SHIFT_JIS の HTML をパースすれば、それの inner_text は(上記例外がなければ)必ず SHIFT_JIS 文字列
パースの時点で失われる文字はたぶん無い
Nokogiri は libxml2 の仕様で、HTML の文字コードがなんであっても inner_text は UTF-8 で返ってくる
内部では iconv を使ってるので、引数指定した or meta で見つけた charset で存在し得ない文字が
HTML に含まれてるとエラーを(無言で)出してその文字だけすっ飛ばしてパース処理される
「も」ではなく、UTF-8 で返ってくるのは Nokogiri だけ
0524デフォルトの名無しさん
2009/07/24(金) 09:56:31じゃあ定数は旧来のグローバル変数の被りと同じような問題持ってるじゃん
0525デフォルトの名無しさん
2009/07/24(金) 11:00:19> A::C と A::B::C の C は同一だってことだけどな
違うだろ。
> p C.new.msg
> end
C.new.msg #=> "fine"
> end
0526デフォルトの名無しさん
2009/07/24(金) 12:26:52きちんとコピペしたか?
0527デフォルトの名無しさん
2009/07/24(金) 12:34:29ls test/test_*.rb | while read line do ruby $line done みたいにすれば動作はしますが、
毎回 ruby を起動しててなんか遅いし気持ち悪いです
0528デフォルトの名無しさん
2009/07/24(金) 12:56:25$ /usr/bin/ruby -v -e 'class A; class C; end; class B; class C; p ancestors; end; end; end'
ruby 1.8.6 (2008-08-11 patchlevel 287) [universal-darwin9.0]
[A::B::C, Object, Kernel]
$ /usr/local/bin/ruby18 -v -e 'class A; class C; end; class B; class C; p ancestors; end; end; end'
ruby 1.8.8dev (2009-06-16 ruby_1_8 23704) [x86_64-darwin9.0]
[A::B::C, Object, Kernel]
$ /usr/local/bin/ruby19 -v -e 'class A; class C; end; class B; class C; p ancestors; end; end; end'
ruby 1.9.2dev (2009-07-24 trunk 24260) [universal.x86_64-darwin9.0]
[A::B::C, Object, Kernel, BasicObject]
0529デフォルトの名無しさん
2009/07/24(金) 12:58:42testrb test
0530デフォルトの名無しさん
2009/07/24(金) 13:06:50setup で作れないような内部オブジェクトのメソッドで sleep されるので、
setup で作った @obj に特異メソッド sleep を追加して横取りという手は使えなさそうな気がします
0531デフォルトの名無しさん
2009/07/24(金) 14:25:19$ ls test/test_*.rb | xargs -n1 ruby
でもいいし、Rubyインストールしたらtestrbというコマンドもついてくるはずなので
$ testrb test
でもいいかも
0532デフォルトの名無しさん
2009/07/24(金) 14:29:28$ ruby -e 'Dir.glob("test/**/test_*.rb").each {|f| load(f)}'
0533デフォルトの名無しさん
2009/07/24(金) 14:32:03「sleep できたかどうか」ってどう判断するわけ?
Kernel#sleepは例外で中断されない限りは失敗しないし、中断されれば例外はtest/unitで捕捉されるだろ。
0534デフォルトの名無しさん
2009/07/24(金) 14:35:23「sleep の前後のメソッドが動作した」
「sleep に渡す時間の値が妥当だった」
の2点調べれば用が済むような気もする
0535デフォルトの名無しさん
2009/07/24(金) 15:03:30たとえば
/usr/bin/ruby foo.rb
なら /usr/bin/ruby を起動し、
/usr/local/ruby1.9/bin/fuby foo.rb
なら /usr/local/ruby1.9/bin/fuby を起動するようなスクリプトを考えています。
0536デフォルトの名無しさん
2009/07/24(金) 15:12:23たぶん
require 'rbconfig'
File.join(RbConfig::CONFIG.values_at('bindir', 'ruby_install_name'))
0537デフォルトの名無しさん
2009/07/24(金) 15:17:35プロセス一覧とカレントディレクトリを総合的に考えて引くしかなさそう
特殊な起動したときに外してもいいのなら、
>>536のようにシステムにインストールされてる ruby を調べる方法がある
0538デフォルトの名無しさん
2009/07/24(金) 15:18:33環境依存でよければ File.readlink("/proc/#{$$}/exe") とか。
0539デフォルトの名無しさん
2009/07/24(金) 19:30:54ありがとうございます。
536の方法をベースに、RbConfigがあればそれを使い、なければ 'ruby' を使うことにします。
0540デフォルトの名無しさん
2009/07/24(金) 20:43:45を開くと
「もしあなたがプログラミングの初心者で、他の言語の経験がなければ、最初にチュートリアル を読むとよいでしょう。」
って書いてあったのでそのリンクをクリックすると
Not Found
The requested URL /~shin/tutorial/index.rb was not found on this server.
でした。本当にありがとうございました。
rubyかpythonかで迷っていたんですが、迷わずpythonを選ぶことができました。
pythonのチュートリアルページは大変面白くて分かりやすいです。
0541デフォルトの名無しさん
2009/07/24(金) 21:03:03追随できなくても仕方がない
0542デフォルトの名無しさん
2009/07/24(金) 21:06:03│●│
└─┤
_ ∩
( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘ おっぱい!おっぱい!
0543デフォルトの名無しさん
2009/07/24(金) 21:21:540544デフォルトの名無しさん
2009/07/24(金) 21:40:22ですらときどき見えなくなるんだが
0545デフォルトの名無しさん
2009/07/24(金) 21:44:430546デフォルトの名無しさん
2009/07/24(金) 21:49:36変な自動生成しても二度手間だし
0547デフォルトの名無しさん
2009/07/25(土) 19:32:01必要なのはこの四つだけかな?
ttp://web.archive.org/web/20070817084823/www1.tf.chiba-u.jp/~shin/tutorial/index.rb?ShowTutorialCode=true
ttp://web.archive.org/web/20070418180423/www1.tf.chiba-u.jp/~shin/tutorial/tutorial.css
ttp://web.archive.org/web/20070210170023/www1.tf.chiba-u.jp/~shin/tutorial/favicon.ico
ttp://web.archive.org/web/20070212074603/www1.tf.chiba-u.jp/~shin/tutorial/PoweredByRuby.png
0548デフォルトの名無しさん
2009/07/25(土) 19:36:31ttp://gist.github.com/154667
たぶん次のリリースでは直るだろ
0549デフォルトの名無しさん
2009/07/26(日) 02:27:17GUIではnetbeans入れてみたのですが、emacsかviどちらがいいでうか?
どっちもまだ触ったばかりです。
0550デフォルトの名無しさん
2009/07/26(日) 03:56:51http://pc11.2ch.net/test/read.cgi/prog/1113759389
0551デフォルトの名無しさん
2009/07/26(日) 04:22:49emacsもviもクセのあるエディタだから、どちらが自分の好みかを先に決めた方がいい
>>550のスレって読んでわかるか?
0552デフォルトの名無しさん
2009/07/26(日) 04:25:59[a,b,c]
[1,2,3]
]
のA,a,1だけを取得する時はどうすればいい?
0553デフォルトの名無しさん
2009/07/26(日) 04:29:52data = [[A,B,C], [a,b,c], [1,2,3]]
result = Array.new
data.each do |a|
result << a[0]
end
p result
または
data = [[A,B,C], [a,b,c], [1,2,3]]
p data.map{|a| a[0]}
0554デフォルトの名無しさん
2009/07/26(日) 04:34:43そう聞くということは Emacs も vim も使えない状態だと思うのでひとまずは Emacs
理由は、Ruby スクリプト書くことにしか労力をつぎ込めないから
vim はキー操作が邪魔にならなくなるまでがとりあえず面倒だし、
NetBeans/Eclipse は「使わない」機能がてんこもりだ
Ruby の学習書レベルは、着色程度以外特に何の補助もないエディタで書くことを想定してる
0555デフォルトの名無しさん
2009/07/26(日) 04:36:58新しく作ってそこに毎回プッシュするか、mapで毎回おいておくかですね。
ありがとうございます。
0556デフォルトの名無しさん
2009/07/26(日) 04:43:33ちょうど、EmacsやVimで文章やスクリプトを書いてた人がruby-modeを求めて使うのに近い
0557デフォルトの名無しさん
2009/07/26(日) 14:37:25富豪的でもよければ data.transpose[0]
0558デフォルトの名無しさん
2009/07/26(日) 14:41:080559デフォルトの名無しさん
2009/07/26(日) 18:51:02Windows2000とXPを判別したいのですが。
0560デフォルトの名無しさん
2009/07/26(日) 19:00:58GetVersionExとかGetProductInfoを呼べばいいんじゃない?
0561デフォルトの名無しさん
2009/07/26(日) 19:06:59最後に gem の Rakefile を rake したときに初めて大量の警告に気づくとかもう嫌です
0562デフォルトの名無しさん
2009/07/26(日) 23:57:35お手軽にcmd.exe の内部コマンドのverを呼んでみるとか
puts `ver`.strip
で
Microsoft Windows 2000 [Version 5.00.2195]
とか
Microsoft Windows XP [Version 5.1.2600]
とか得られる
手元に 2000とXPしかないんで Vistaとか7はどうなるのかは知らない
0563デフォルトの名無しさん
2009/07/27(月) 00:13:39Ruby本体はx64でビルドできたけど
mongrelとかが色々エラー出て
Rubyはx64、mongrelはx86とかって大丈夫なんでしょうか?
両方x86にしたほうがよい?
0564デフォルトの名無しさん
2009/07/27(月) 00:16:480565デフォルトの名無しさん
2009/07/27(月) 03:19:46なるほど。良い方法ですね。ありがとうございます。
0566デフォルトの名無しさん
2009/07/27(月) 03:24:460567デフォルトの名無しさん
2009/07/27(月) 08:28:53ライブラリがあれば良いんだけどね>(制作希望)
0568デフォルトの名無しさん
2009/07/27(月) 08:53:480569デフォルトの名無しさん
2009/07/27(月) 09:52:10どうせWindows api使うんじゃないの
0570デフォルトの名無しさん
2009/07/27(月) 09:58:18僕にとっては大事な情報源です。
たまにはボロクソ言われることもあるけど、みんな親切に教えてくれる。
いつもありがたいと思ってる。
0571デフォルトの名無しさん
2009/07/27(月) 10:15:290572デフォルトの名無しさん
2009/07/27(月) 10:16:42>>562
0573デフォルトの名無しさん
2009/07/27(月) 11:48:18数行ですぐできるんじゃないかなとやってみたけど
OSVERSIONINFO構造体作るのがめんどくさかった
APIコール用の構造体を作るのに便利な方法ってある?
0574デフォルトの名無しさん
2009/07/27(月) 11:51:560575デフォルトの名無しさん
2009/07/27(月) 13:30:51どこを縦読みするんですか。2行目ですか。
「くにまつ」
国松さんですか。
0576デフォルトの名無しさん
2009/07/27(月) 14:04:120577デフォルトの名無しさん
2009/07/27(月) 21:54:47嫌われているつーか
Windows上でRuby使うのは色々と余計な苦労が多いし
0578デフォルトの名無しさん
2009/07/27(月) 21:59:330579デフォルトの名無しさん
2009/07/27(月) 22:00:48ライブラリもWinに特別なロジック与えているし。
システムプログラミングもやってらんね、って感じだな。
0580デフォルトの名無しさん
2009/07/27(月) 22:22:490581デフォルトの名無しさん
2009/07/27(月) 23:36:000582デフォルトの名無しさん
2009/07/27(月) 23:40:550583デフォルトの名無しさん
2009/07/27(月) 23:56:240584デフォルトの名無しさん
2009/07/27(月) 23:56:550585デフォルトの名無しさん
2009/07/28(火) 05:30:11Windows標準の構造体や手続きを集約させて、ruby的に利用できる形にしたような物。
あとは、適当にそこから派生させて、ファンクションコールを書いていけば、割と簡単な気がする。
0586デフォルトの名無しさん
2009/07/28(火) 07:04:27それがMS的にMFCだったのだろ?
0587デフォルトの名無しさん
2009/07/28(火) 07:22:25Visuaruby
0588デフォルトの名無しさん
2009/07/28(火) 09:20:21数が膨大なので「集約」が辛すぎる。
0589デフォルトの名無しさん
2009/07/28(火) 09:27:490590デフォルトの名無しさん
2009/07/28(火) 09:30:15http://ponte.s206.xrea.com/typedef/
0591デフォルトの名無しさん
2009/07/28(火) 09:31:250592デフォルトの名無しさん
2009/07/28(火) 10:03:19じゃあ、MFRだなw
0593デフォルトの名無しさん
2009/07/28(火) 10:05:390594デフォルトの名無しさん
2009/07/28(火) 10:07:47うはw
吐き気がしたw
0595デフォルトの名無しさん
2009/07/28(火) 10:28:51エレガントじゃないコードを、豊富な財源と大量の人員投入という力業で成してるのがWindowsなのか・・・
0596デフォルトの名無しさん
2009/07/28(火) 11:00:35Linux上でbashシェルスクリプトをRubyに移植しているのですが、外部コマンド
実行後のコマンド終了ステータスを調べる方法がわかりません。具体的な外部
コマンドはzenityというコマンドですが、シェルスクリプトでは
zenity --question
echo $?
とすると、ダイアログが出て[OK]を押すと$?に0が返ってきて[キャンセル]を押
すと1が返ってくるので、そのまま判定できるのですが、rubyだとirbで見たところ
rb(main):001:0> msg=`zenity --question`
=> ""
irb(main):002:0> p msg
""
=> nil
irb(main):003:0> $?
=> #<Process::Status: pid=17975,exited(1)>
$?には返ってきているみたいですが、どう判定に利用したらいいのかわかりません。
こういう時はどうすればいいのでしょうか?
0597デフォルトの名無しさん
2009/07/28(火) 11:17:13$?.exitstatusとか
0598デフォルトの名無しさん
2009/07/28(火) 11:20:45puts "hogeはありません" unless $?.exitstatus.zero?
0599デフォルトの名無しさん
2009/07/28(火) 13:37:41unless system('ls hoge')
puts "hogeはありません"
end
systemはコマンドが成功(EXIT_SUCCESSで終了)したときtrue、
それ以外でfalse
0600デフォルトの名無しさん
2009/07/28(火) 13:46:320601デフォルトの名無しさん
2009/07/28(火) 13:52:13>>596読め
systemメソッドかどうかで使い道が違うようではイカン
0602デフォルトの名無しさん
2009/07/28(火) 14:08:50> シェルスクリプトでは
> zenity --question
> echo $?
と書いてるのでzenityの出力をとりたいんではないと思うんだが。
つまり>>596のやりたいことはこうではないかと。
if system("zenity", "--question")
puts "OK"
else
puts "Cancel"
end
0603デフォルトの名無しさん
2009/07/28(火) 14:13:19「OK / キャンセル等の各種コモンダイアログを表示し、どのボタン等がマウスで押されたかを整数で返す」
という、組み合わせで超便利になる Gnome コマンドだ!
よって今回必要なのは終了コードだけだな
0604デフォルトの名無しさん
2009/07/28(火) 14:34:21XとかKDEみたいにGDialogとかじゃいけなかったんだろうか
0605デフォルトの名無しさん
2009/07/28(火) 14:40:39case system('zenity', '--question', '--text 押してくだし')
when 0 then
puts 'OKが押されました'
when 1 then
puts 'キャンセルが押されました'
else raise 'UnknownError'
end
0606デフォルトの名無しさん
2009/07/28(火) 15:11:54お前通信簿に「人の話を聞かない」ってよく書かれてたろ
0607デフォルトの名無しさん
2009/07/28(火) 15:37:49終了ステータス 0 以外は任意なのよ
1 が異常終了と決まったわけでもない
zenity はあくまでメッセージとして 0 と 1 を送信してるんだろうから、case 分岐がたぶん妥当だと思われ
0608デフォルトの名無しさん
2009/07/28(火) 15:41:410609デフォルトの名無しさん
2009/07/28(火) 16:11:510610デフォルトの名無しさん
2009/07/28(火) 17:19:05セグメントエラーでるのって直しようない?
0611デフォルトの名無しさん
2009/07/28(火) 17:28:260612デフォルトの名無しさん
2009/07/28(火) 17:51:32バイト数が違うけどこれじゃないのか?
ttp://chasen.aist-nara.ac.jp/chasen/faq.html.ja#B-1
0613デフォルトの名無しさん
2009/07/28(火) 18:07:17puts str.size
Chasen.sparse(str)
でセグメントフォルトでるまでやると40000までいって落ちる
‘chasen file_name‘だと落ちない
>>611
パール勉強するか・・・
0614デフォルトの名無しさん
2009/07/28(火) 18:58:53仕事での過去の駄目マネージャたちを思い出して参加する気が萎える。
0615デフォルトの名無しさん
2009/07/28(火) 19:02:38本スレにお帰りください
0616デフォルトの名無しさん
2009/07/28(火) 19:05:490617デフォルトの名無しさん
2009/07/29(水) 00:12:55でいちいち\エスケープしないで済む表記ってないの?
0618デフォルトの名無しさん
2009/07/29(水) 00:21:14""のかわりに''で囲めば、'と"に付けたエスケープだけが解釈される。
0619デフォルトの名無しさん
2009/07/29(水) 00:23:080620デフォルトの名無しさん
2009/07/29(水) 01:12:10''は\\を解釈するもんだと思ってたけどそれに加えて\単体でもいいのか。
文字列リテラル読み返したら確かにそう言ってるな。微妙に勘違いしてた。
0621デフォルトの名無しさん
2009/07/29(水) 01:20:410622デフォルトの名無しさん
2009/07/29(水) 02:15:440623デフォルトの名無しさん
2009/07/29(水) 10:02:43で、
xxx.rb
----
begin
raise Exception, "xxx"
rescue
puts "exception!!!"
puts $!
end
----
というファイルをrequireすると、例外が補足出来ないですが、回避方法ありますか?
↓結果
C:\home\temp>irb
irb(main):001:0> require 'xxx'
./xxx.rb:4: xxx (Exception)
from C:/home/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'
from C:/home/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
from (irb):1:in `irb_binding'
from C:/home/ruby/lib/ruby/1.8/irb/workspace.rb:52:in `irb_binding'
from C:/home/ruby/lib/ruby/1.8/irb/workspace.rb:52
0624デフォルトの名無しさん
2009/07/29(水) 10:04:20ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
ちなみに、上記のバージョンでもエラーメッセージは多少違いますが、同様の挙動です。
ついでに言うと、JRuby 1.3.1でも同様です。
$ irb
irb(main):001:0> require 'xxx'
Exception: xxx
from ./xxx.rb:2
from (irb):1:in `require'
from (irb):1
0625デフォルトの名無しさん
2009/07/29(水) 10:19:26http://www.ruby-lang.org/ja/man/html/_C0A9B8E6B9BDC2A4.html#begin
だからrescue Exception・・・にするよりは投げる例外をStandardErrorなどにしたほうがいい
0626デフォルトの名無しさん
2009/07/29(水) 10:32:020627デフォルトの名無しさん
2009/07/29(水) 10:35:28引数で Exception クラス自体を指定する人は久しぶりに見た
あと irb で自作スクリプト読ませて実行したいときは require じゃなく load 使うといいぞ
0628デフォルトの名無しさん
2009/07/29(水) 11:57:50バージョンが1.9.1とすごく上がっているのですが、今PCに入っている1.8.6からバージョンアップした
ほうがいいのでしょうか?
スキルは初心者を少し抜けたぐらいだと思います。
1.9.1を入れたほうがいいとした場合、お薦めの書籍を教えてください。
0629デフォルトの名無しさん
2009/07/29(水) 12:02:13>>1よく読んでくれ
0630デフォルトの名無しさん
2009/07/29(水) 12:13:43�dです。
1.8.7がいいとのことですね。
了解。
0631デフォルトの名無しさん
2009/07/29(水) 12:32:34今年になって出てる書籍は1.9対応の方が多いと思うが、
このテンプレおかしくないか?
0632デフォルトの名無しさん
2009/07/29(水) 12:48:201.8 がメインで 1.9 がコラムとしてくっついてるという程度ではまだ駄目
今の俺らが 1.6 系列や 1.8.2 時代の情報を無いものとして扱ってるのと同程度になってるもの
「Rubyの文字列は文字列データ本体とエンコーディング情報がペアになっています」
というカンジの、1.8 を切り捨てた説明の書籍やサイトがどんどん出れば消してもいいと思うけど…
0633デフォルトの名無しさん
2009/07/29(水) 13:03:541.9のほうが便利だからもう移って欲しいって書いてあったぞ
0634デフォルトの名無しさん
2009/07/29(水) 13:04:55スレタイ200回くらい嫁
0635デフォルトの名無しさん
2009/07/29(水) 13:25:29ttp://www.atmarkit.co.jp/news/200907/24/ruby.html
0636デフォルトの名無しさん
2009/07/29(水) 13:28:21今は起動ぐらいはするんだけど、ちょっと突っ込んだことをやろうとすると
やっぱりダメだし
0637デフォルトの名無しさん
2009/07/29(水) 13:30:410638デフォルトの名無しさん
2009/07/29(水) 13:33:36やってみ
本質的でない情報不足で詰まること請け合い
情報不足で詰まりかねない 1.9.1 を初学者に使わせるくらいなら、
俺は情報たっぷりで「誰もまだやってない」分野が上記よりはぐっと少ない 1.8.7 を強く推す
0639デフォルトの名無しさん
2009/07/29(水) 13:35:44一般ユーザーに移行を促したこのタイミングはないだろ
0640デフォルトの名無しさん
2009/07/29(水) 13:38:07MicroSoftなら当然Vistaを推すよね
0641デフォルトの名無しさん
2009/07/29(水) 13:40:27寿命があと2ヶ月だとかそういうのならRubyなんて忘れて親孝行とかしろ
0642デフォルトの名無しさん
2009/07/29(水) 13:48:58・ エッジな人
・ 活発な人
・ 初学者・利用オンリーユーザー
の3種類がいる
エッジな人は1.9.0時代から使い倒してて、地雷とか踏み抜いて今は1.9.2preで遊んでる
活発な人は1.9.1を使うべきで、それなりに試行錯誤しつつ自作ライブラリやらを踏み固める
初学者や利用者は素直に1.8.7を使うべき
次(か、その次)のフェーズでは、初学者や利用者にも1.9.xが適するようになっていることだろう
0643デフォルトの名無しさん
2009/07/29(水) 14:12:31次の質問の方どうぞ
0644デフォルトの名無しさん
2009/07/29(水) 14:27:00初学者は1.9.1じゃないの?
使い方が分かってきたころに覚えなおしとか、まぞい。
0645デフォルトの名無しさん
2009/07/29(水) 14:27:04>>631と言いたくなる気持ちはわかるし、語弊は減らしておかない?
【Ruby1.9.1 は従来版とは異なる部分も多く、書籍や解説やライブラリのサポートがまだ不十分です】
0646デフォルトの名無しさん
2009/07/29(水) 14:27:13lib/aaa/hoge222.rb
lib/aaa/hoge333.rb
という AAA::Hoge111 クラス等があります
hoge 関係が多くなったので、
lib/aaa/hoge/hoge111.rb
lib/aaa/hoge/hoge222.rb
lib/aaa/hoge/hoge333.rb
というようにディレクトリ掘って整理しました
この場合、他からこんな経緯はわからないわけで、
やっぱり AAA::Hoge::Hoge111 というように、ディレクトリに対応してクラスもネストさせるべきでしょうか?
0647デフォルトの名無しさん
2009/07/29(水) 14:29:07だからやってみろって
1.9.1オンリーで
「使い方がわかった」というところまで行かないから
0648デフォルトの名無しさん
2009/07/29(水) 14:29:26急がば回れって言うだろ?
0649デフォルトの名無しさん
2009/07/29(水) 14:29:56いや、それはそんなにマゾくないと思うぞ。
基本が解ってれば追加情報だけで良いんだから。
初心者にはその基本が解るまでの間が一番マゾいワケで
そんな間に検索しても解らないような問題にブチ当たるのが一番マゾいかと。
0650デフォルトの名無しさん
2009/07/29(水) 14:35:00はい
サブディレクトリ構造はクラスネスト構造に対応「しているべき」
hoge 関連だからって AAA::HogeLoader を hoge ディレクトリにまとめてはいけない
めんどくさいけどね
0651デフォルトの名無しさん
2009/07/29(水) 14:36:57そもそも名付け方が迷走してる気がするw
AAA::Hoge::Fooとかにはできないの?
0652デフォルトの名無しさん
2009/07/29(水) 14:41:36別にそうでなくても構わない。。
lib/aaa/hoge/111.rb
lib/aaa/hoge/222.rb
lib/aaa/hoge/333.rb
あと、名前規則はこうであってほしい
0653デフォルトの名無しさん
2009/07/29(水) 14:44:360654デフォルトの名無しさん
2009/07/29(水) 14:51:230655デフォルトの名無しさん
2009/07/29(水) 14:57:5511111Error
を
Error::11111
にしたら座り悪いことこの上ないな
ユーザーがまず参照しないようなファイルであるなら、ちょっとくらい変な構造でも問題ないと思う
0656デフォルトの名無しさん
2009/07/29(水) 15:03:24Errorごときでそんなにファイル作るなよw
それにHoge::Hoge111はイヤだけど
Hoge::111Hogeならそんなに悪くもない
0657デフォルトの名無しさん
2009/07/29(水) 15:16:29require 'aaa/hoge/111'
だけで、単独で使えるようなクラスにしてほしい
0658デフォルトの名無しさん
2009/07/29(水) 15:19:320659デフォルトの名無しさん
2009/07/29(水) 15:30:400660デフォルトの名無しさん
2009/07/29(水) 15:51:23利用者が自分だけならもう何やってもいいよ
0661デフォルトの名無しさん
2009/07/29(水) 17:40:08しなくていいと思うよ
そもそもクラスとファイル構造を、完全に対応させる必要はない
(ライブラリなら話はまた変わってくるが)
0662デフォルトの名無しさん
2009/07/29(水) 17:47:51Ruby関連の本をろくに読んでないことは分かった
0663デフォルトの名無しさん
2009/07/29(水) 17:59:46パスが lib で始まってるのはたいていライブラリだ
勉強になったな
0664デフォルトの名無しさん
2009/07/29(水) 19:38:46>やっぱり AAA::Hoge::Hoge111 というように、ディレクトリに対応してクラスもネストさせるべきでしょうか?
クラス構造とディレクトリ構造が対応していたほうがわかりやすいけど、
絶対そうすべきだというほどでもない。
そのライブラリのユーザとしては、「使う人」と「(ソースを)読む人」が考えられると思うけど、
まずは「使う人」の都合を最大限に優先し、その邪魔をしない範囲で「読む人」のことを考えればいいんじゃないかなあ。
0665デフォルトの名無しさん
2009/07/29(水) 19:43:37ほとんどなくなるまでは初心者には1.8推奨。
0666デフォルトの名無しさん
2009/07/29(水) 20:03:08スレの推奨ってわけじゃないから「おれ推奨」とかにしてくれよ
スコープは明確にしてくれ
0667デフォルトの名無しさん
2009/07/29(水) 20:09:34俺でも何かできたという夏の思い出作りは他所でやってくれ
0668デフォルトの名無しさん
2009/07/29(水) 20:14:36まあ何か気持ち悪いしどうでもいいや・・・
0669デフォルトの名無しさん
2009/07/29(水) 20:17:100670デフォルトの名無しさん
2009/07/29(水) 20:18:55ダウト
たとえばaaaという名前のアプリケーションであれば
lib/aaa/ 以下にアプリケーションのコードを入れることがある
この場合、「ライブラリである」とは言えない
0671デフォルトの名無しさん
2009/07/29(水) 20:19:55他言語が絡まなくても、動かない拡張ライブラリがあまりにも多いからなー
どう考えても初心者に1.9.xを推奨できる段階ではない
0672デフォルトの名無しさん
2009/07/29(水) 20:23:440673デフォルトの名無しさん
2009/07/29(水) 20:27:250674デフォルトの名無しさん
2009/07/29(水) 20:38:02まあどこのスレもたぶんそんなもんだw
0675デフォルトの名無しさん
2009/07/29(水) 20:50:45現時点でnokogiriが動かないんですが何か
0676デフォルトの名無しさん
2009/07/29(水) 21:07:590677デフォルトの名無しさん
2009/07/29(水) 21:09:200678デフォルトの名無しさん
2009/07/29(水) 21:19:37http://www.h4.dion.ne.jp/~acetone/display%20kotonoha.html
0679デフォルトの名無しさん
2009/07/29(水) 21:44:53ちなみにgithub(のgemレポジトリ)はデフォルト設定じゃないので除外
Nokogiri 1.2.3:Segmentation Fault
Mechanize 0.9.3:Nokogiri使ってるので無理
Hpricot 0.6.164:Segmentation Fault
WxRuby 2.0.0:Segmentation Fault
SQLite3-ruby 1.2.5:動く
予想以上にひどい状況だった
0680デフォルトの名無しさん
2009/07/29(水) 21:49:480681デフォルトの名無しさん
2009/07/29(水) 21:51:260682デフォルトの名無しさん
2009/07/29(水) 22:04:38昔のバージョン引っ張り出して文句言うのはおかしいと思わないのか?
0683デフォルトの名無しさん
2009/07/29(水) 22:39:35まず落ち着いてスレタイを読み直すんだ
0684デフォルトの名無しさん
2009/07/29(水) 22:52:29動くようになるまで、「初心者」に1.9系を勧める必要はないだろう。
@ITの記事でも、既にrubyアプリケーション資産を持っている人に対して、
1.9が当たり前になってから移行したんじゃ遅いから、そろそろ移行を
開始しろ、と言ってるだけなので、逆に言えばまだ1.9は当たり前じゃない
ことを認めている。
イノベーターは既に移行済み、アーリーアダプターは移行を始めている。
今から動き始めないとアーリーマジョリティーにもなれないよ、という
それだけの話。
今現在初心者な奴はそんな前の連中に倣う必要も意味もない。
0685デフォルトの名無しさん
2009/07/29(水) 23:10:050686デフォルトの名無しさん
2009/07/29(水) 23:31:55実際、初心者が最新版(Hpricot0.7以降とか)を見つけられないのは不便だ
0687デフォルトの名無しさん
2009/07/30(木) 01:10:15RubyGems1.3.5が動かない。
0688デフォルトの名無しさん
2009/07/30(木) 02:00:54まあ1.8.7もそう変わらないけど
one-click ruby installerが1.9対応してからが本番かもしれない
0689デフォルトの名無しさん
2009/07/30(木) 02:30:23更新が止まってるんじゃなかったか?実は>>684だったりしてな
1.9.2もプレビューが出てるし、ワンクリックなんて待ってられん
0690デフォルトの名無しさん
2009/07/30(木) 04:25:31Ruby初心者だからってコンピュータ初心者だと限ったものでもないだろ
最新版ソースダウンロードして自分のVCでコンパイルするだけだ
簡単じゃん
0691デフォルトの名無しさん
2009/07/30(木) 05:34:54そーゆーのは開発者やテスト部隊のする事だ
初心者には安定版を提供しておけば良い
0692デフォルトの名無しさん
2009/07/30(木) 05:36:56http://pc12.2ch.net/test/read.cgi/tech/1246174168/
0693デフォルトの名無しさん
2009/07/30(木) 09:10:52a. いくつかの言語を習得していて、Rubyをさわり始めたばかりの人
b. プログラミング言語自体が初めての人
これらによってだいぶ話が変わってくると思うが。
0694デフォルトの名無しさん
2009/07/30(木) 09:21:28他言語も制御構造触った程度の人を脳内想定
組み込みCとJava案件抱えてるけどRubyにも興味あったからマニュアル読んで始めて半月とか
そういうような人はあんま想定してないと思う
0695デフォルトの名無しさん
2009/07/30(木) 09:36:59なるほど、こういう人たちがいるがために今の状況があるわけか
0696デフォルトの名無しさん
2009/07/30(木) 09:38:59やっぱり初心者スレにもいるんだ
0697デフォルトの名無しさん
2009/07/30(木) 10:18:39「初心者はまず1.9.xから使い始めるべき」と言えるようになると嬉しい
0698デフォルトの名無しさん
2009/07/30(木) 10:38:09外部ライブラリを対応させまくるしかないねえ
これは「初心者向け 1.9.1 解説が足りない」というレベルの話ではない
それ以前
新人さんを迎えるためにおおわらわで大掃除とか椅子並べとかしてる状態
0699デフォルトの名無しさん
2009/07/30(木) 10:39:48怒ってるから更新が止まってるのかどうかは知らないけど、
なぜかftpサイトに最新リリースのバイナリはあるね。
ftp://ftp.ruby-lang.org/pub/ruby/binaries/mswin32/
0700デフォルトの名無しさん
2009/07/30(木) 10:41:28「非・完全初心者」か「完全初心者以外」のどっちかでよろしこ
自分の利用してるライブラリで testrb1.9 test/ してエラーが出たらちょっと頑張ってみるとか
や、Debian 系列以外で testrb1.9 が用意されてるの見たことないが
0701デフォルトの名無しさん
2009/07/30(木) 10:50:34@@hoge の値による挙動の違いを Test::Unit でテストしたいです
もしかして、テスト中にクラス変数を変更したら「リセット」できなかったりしますか?
0702デフォルトの名無しさん
2009/07/30(木) 12:36:18「リセット」というのがどういった動作を指すのか良く分からん
@@hoge を初期化した時の値に戻って欲しいのであれば
Test::Unit::TestCase#setup 等でその値を再代入するしかない
class Hoge
def hoge=(h) ; @@hoge = h ; end
end
class TestHoge < Test::Unit::TestCase
def setup
@hage = Hoge.new
@hage.hoge = :Hoge
end
:
0703デフォルトの名無しさん
2009/07/30(木) 14:14:09テキストファイルの特定の行の次の行を読み込むにはどうすればいい?
0704デフォルトの名無しさん
2009/07/30(木) 14:20:080705デフォルトの名無しさん
2009/07/30(木) 14:36:410706デフォルトの名無しさん
2009/07/30(木) 14:41:21Enumerable#findと組み合わせるとか。
if f.find{|line| line が 「特定の行」 かどうか }
target_line = f.gets
end
0708デフォルトの名無しさん
2009/07/30(木) 15:51:39以下のサイトのrubyの回答で、injectを使って、ディレクトリ表記の文字列からなる配列を、木構造を模したHashにしています。
http://ja.doukaku.org/102/nested/
関係有る部分だけ、コピペします。
path_list = %w(
abc\\def
abc\\def\\gh
abc\\def\\ij
abc\\jk\\lm
de
)
h = {}
path_list.each{|path|
path.split(/\\/).inject(h){|k,v|
k[v] ||= {}
}
}
その結果が、(これは、僕のところで動かした結果)
h # => {"de"=>{}, "abc"=>{"jk"=>{"lm"=>{}}, "def"=>{"ij"=>{}, "gh"=>{}}}}
injectへの初期値に指定した変数(この場合 h) #その前に宣言されていてinjectの取るブロックの外にスコ−プがある。
は、どのように変更されているのでしょうか?
injectでのブロック変数(この場合、k,v)は、
kの方は最初に初期値が入り、その後、ブロックで最終的に評価された値が入る。
vはレシ−バの各要素が順次、代入されるということは理解しているつもりです。
今まで、初期値(h)は、その値が、最初にブロック変数(k)に代入されて、それ以降に、なにかの影響を受けてるのでしょうか?
0709デフォルトの名無しさん
2009/07/30(木) 16:00:03ブロック内で初期値として与えられたオブジェクトがどう使われるかなんじゃね
破壊的に使われるなら破壊されるだけだし、今回のように破壊されてないなら(アクセス方法があるなら)ずっと残る
0710デフォルトの名無しさん
2009/07/30(木) 16:06:15Socket通信で、受け取った情報をテキストファイル化できず困っています。
tcpSocket = TCPserver.open("localhost",60001)
tcpSocket_ac = tcpSocket.accept # 接続を受け付ける
として
puts(tcpSocket_ac.read) # これは表示される
File.open('ReplyaData.txt', 'w') {|f|
f.write tcpSocket_ac.read # ファイルに書き込む
}
としてReplyaData.txtが生成されましたが、中身が空っぽです。
受け取った情報自体は puts(tcpSocket_ac.read) で表示されるのですが・・・
アドバイス願います。
0711デフォルトの名無しさん
2009/07/30(木) 16:15:34putsの行でreadしてしまってるのが原因
試しに
File.open("example.txt"){|f|
p f.read
p f.read
}
ってやってみ
IOクラスやその派生っていうのはただの文字列とは違って
「どこまで読んだ」という情報も持ってる
0712デフォルトの名無しさん
2009/07/30(木) 16:18:330713デフォルトの名無しさん
2009/07/30(木) 16:19:46ひとつ前の結果に v が登録されていなければ空のハッシュを v 名義で登録し、
登録したその新規ハッシュを次の処理に使う
v が登録されていれば登録されているハッシュを使う
という処理を繰り返す
と
abc の場合
{ }
{ 'a' => {} }
{ 'a' => { 'b' => {} } }
{ 'a' => { 'b' => { 'c' => {} } } }
abccd の場合
{ }
{ 'a' => {} }
{ 'a' => { 'b' => {} } }
{ 'a' => { 'b' => { 'c' => {} } } }
{ 'a' => { 'b' => { 'c' => {} } } }
{ 'a' => { 'b' => { 'c' => { 'd' => {} } } } }
abc abd の場合
{ }
{ 'a' => {} }
{ 'a' => { 'b' => {} } }
{ 'a' => { 'b' => { 'c' => {} } } }
{ 'a' => { 'b' => { 'c' => {} } } }
{ 'a' => { 'b' => { 'c' => {} } } }
{ 'a' => { 'b' => { 'c' => {}, 'd' => {} } } }
0714710
2009/07/30(木) 17:30:51さんきゅうです。712さんの'wb'を使って
replyData= tcpSocket_ac.read と一旦格納し、
puts replyData
File.open('ReplyData.txt', 'wb') {|f|
f.write replyData
}
とすれば、Txtファイルの中身が出来ました。
(711さんの記述を実行するとsyntaxエラーになります)
しかし受け取ったデータには本来改行3箇所があり、DOSでは
その改行が反映されていたのですが、ReplyData.txtでは改行が
無視され1行になってしまっています。
どうしたら良いでしょうか?(バイナリの性ですか?)
0715デフォルトの名無しさん
2009/07/30(木) 17:36:250716デフォルトの名無しさん
2009/07/30(木) 17:37:072chにコードを書き込むときはインデントに全角スペース使われることあるから
コピペするときには注意
テキストにbフラグはいらない
0717デフォルトの名無しさん
2009/07/30(木) 18:59:13f = f1
f("a")
という感じで関数(メソッド?)を変数に入れておいてあとで呼びだしたいのですが、
f = f1 は wrong number of arguments になってしまいます
ruby ではどうすればいいのでしょうか?
0718デフォルトの名無しさん
2009/07/30(木) 19:07:53f = method(:f1) # または 'f1'
f.call("a")
# スコープに注意
0719デフォルトの名無しさん
2009/07/30(木) 19:26:39文法の一覧テストみたいなの作ってるのでない限りたいていはもっといい方法がある
0720デフォルトの名無しさん
2009/07/30(木) 20:42:060721デフォルトの名無しさん
2009/07/30(木) 22:31:55f.call("a")
0722デフォルトの名無しさん
2009/07/30(木) 22:32:490723デフォルトの名無しさん
2009/07/30(木) 22:47:270724708
2009/07/30(木) 23:50:59>> 709,713さん、ありがとうございます。
713さんの例も見ながら、考えてました。
で、
injectについて、質問したのですが、理解していなかったのは、Hashのところでした。(injectを覚え立てで、意識がそっちにいってしましました。)
hとkのつながりが見えてなかった。
h = {}
path.split(/\\/).inject(h){|k,v|
k[v] ||= {}
}
まず、k = hが行われ、 k, h が同じ場所を見るようになる。
k[v] ||= {}
k[v]を評価、nilなので、k["abc"] = {}が行われる(k = {"abc" => {}となる)。hも同じ所を見てるので、h = {"abc" => {}}となる。
また、この k[v] ||= {} という(条件+代入)式は、k[v]の値( {} )を返し、
injectなので、これが次回のiterationでの kになる。 さらに、その値 {}は hである、{"abc" => {} }の {}部分も kになる。
なので、イテレ−トの二回目は、
k = {}
h = {"abc" => k}
と、hのなかに、kへの参照?が残り、hにハッシュの要素が追加されていくようになる。
自分の中では、もう少しというところまで、理解が来たのですが、説明が、ぐちゃぐちゃになってしまいました。
変な文章で、スレの流れを止めて申し訳ありません。
0725デフォルトの名無しさん
2009/07/31(金) 11:08:52比較の固定値 == 変数
と書くのと
変数 == 比較の固定値
と書くのとどっちが好ましいですか?
0726デフォルトの名無しさん
2009/07/31(金) 11:19:22ここでの == は「左辺」のオブジェクトのインスタンスメソッドです。
・ 既知のオブジェクトが == などの比較用メソッドを持っていることは確定
・ 比較の変数のオブジェクトの == メソッドなどが比較用に実装されてるとは必ずしも限らないと考える
ということで、
既知のオブジェクト == 比較変数
と書くようにするとスマートです。
従来の言語の if 文の
if 変数 == 値 then …
とは逆に見えるというかはっきり逆なので違和感バリバリですが、一応この順が正しいということになってます。
「代入と書き間違えないように if 0 == val と書くんだぜー」という姑息なバッドノウハウにも
予防線張る的な意味でよく似てる感じもしますが無関係です。
ただ、ぶっちゃけ、比較が動作しない場合はどっちに何を書いててもそもそも動作しないんで、
あんまり神経質になる必要はありません。
0727デフォルトの名無しさん
2009/07/31(金) 11:52:080728デフォルトの名無しさん
2009/07/31(金) 12:00:43/正規表現/ =~ 文字列
が正しいね
文字列 =~ /正規表現/
を動作させるためにわざわざ
def =~(re)
re =~ self
end
というような動作をする String#=~ を作ったくらいだが
0729デフォルトの名無しさん
2009/07/31(金) 12:00:56ライブラリ等でそういうのも想定するなら細工が要るけど
想定外の変なオブジェクトは半端に通すよりはいっそ転けた方がよさそう
0730デフォルトの名無しさん
2009/07/31(金) 12:04:23ただ==に対してそれを日頃から意識する必要はないんじゃないかということ
=~は==と違ってObjectのメソッドじゃないし
0731デフォルトの名無しさん
2009/07/31(金) 12:05:250732デフォルトの名無しさん
2009/07/31(金) 14:20:15分からないので教えてくださいm(__)m
お願いします((+_+))
A
1.ユークリッドの互除法を用いて6696と3906の最大公約数を求めなさい。
2.自然数の配列に対して、全要素の最大公約数を返す関数array_gcd()を定義しなさい。
例)array_gcd([72,42,66,90])=>6,array_gcd([35])=>35
B
符号なしの自然数の3乗を要素に持つ配列の表示を受理するオートマトンを書きなさい。
受理例)[355,134,0,94],[12] 不受理例)[53,][04,32],[],[8,21]
0733デフォルトの名無しさん
2009/07/31(金) 14:22:31http://pc12.2ch.net/test/read.cgi/tech/1200175247/
0735デフォルトの名無しさん
2009/07/31(金) 18:38:25知りたいことを探す方法がない。なにあれ。
0736デフォルトの名無しさん
2009/07/31(金) 18:46:40作ってる最中に作ってる人が使わなくなってグダグダしてしまってる
0737デフォルトの名無しさん
2009/07/31(金) 18:48:25> webのRubyリファレンスマニュアルが使いにくすぎる。
> 知りたいことを探す方法がない。なにあれ。
Rubyリファレンスマニュアル刷新計画
http://doc.loveruby.net/wiki/FrontPage.html
まあ、泣いても自動的に改善されるわけではないから、手を動かすしか
ないんでね。
0738デフォルトの名無しさん
2009/07/31(金) 18:50:04そっちが使いにくいという話ではないのか
0739デフォルトの名無しさん
2009/07/31(金) 19:17:41その時点で判断を誤ってると思う
0740デフォルトの名無しさん
2009/07/31(金) 19:52:40>>735が何を使いにくいと言ってるのか知らんが
いずれにせよ、声を上げるか手を動かすかしないとどうにもならん
0741デフォルトの名無しさん
2009/07/31(金) 20:05:46今の刷新計画は、マニュアル本体の管理にはWiki使ってないぞ。
0742デフォルトの名無しさん
2009/07/31(金) 23:12:38loop { |i| ... }
のように記述すると,エラーになってしまうのですが,
loopメソッドでは,timesメソッドのように,繰り返し回数を
変数に代入できないのでしょうか。
0743デフォルトの名無しさん
2009/07/31(金) 23:49:01loopにはそれがないからカウンタを省いているんじゃないかな
ユーザーが必要とするかもわからないし、必要なら自分で i = i + 1 すれば済むわけだから
0744デフォルトの名無しさん
2009/07/31(金) 23:51:31出来ません。
無限ループでカウントを数えるには
0.upto(0/0.0) {|i| }
とかどうだろう?
0745デフォルトの名無しさん
2009/07/31(金) 23:54:39素直に i += 1 した方が可読性が高いと思う。
まさにRubyの悪い使い方に見える。
0746デフォルトの名無しさん
2009/08/01(土) 00:01:30きもすぎw
というか、処理系依存にならないのそれ?
将来動かなくなりそうで怖いんだけどそういうコード
0747デフォルトの名無しさん
2009/08/01(土) 00:09:331/0.0ならマシかというとそうでもないけど。
これも処理系依存?
0748デフォルトの名無しさん
2009/08/01(土) 00:25:23ユーザーがいらないと判断したなら、ブロック引数を省略すればいいだけの話では?
初期値どうすんだって問題が残るけど、まあ引数で与えることにして
こんなのじゃダメなんだろうか
def loop(n = 0)
i = n
while true
yield i
i += 1
end
end
0749デフォルトの名無しさん
2009/08/01(土) 00:37:43きめえ。
0750デフォルトの名無しさん
2009/08/01(土) 00:43:010751デフォルトの名無しさん
2009/08/01(土) 02:29:52引数が省略されたらカウントもしないぐらいやってくれるなら反対はないんじゃないかなぁ
たぶん意見を言う人のなかに、loopがカウントまでしてくれたほうが嬉しいと
考える人がいなかっただけじゃないかと想像
def loop(n = 0, &block)
if block.arity == 1
i = n
while true
yield i
i += 1
end
else
while true
yield
end
end
end
でも初期値を引数にするのはどこか直観的とは言い難いし
timesとの対称性を考えて、カウンタを備えるのはIntegerのメソッドとするほうがよさそう
1.loop{|i| print i} #=> 1, 2, 3, ・・・
今度は名前が微妙かw
0752デフォルトの名無しさん
2009/08/01(土) 02:32:400753デフォルトの名無しさん
2009/08/01(土) 03:24:261.8に対応して無くても、本に掲載されているプログラムや文法は機能しますよね?
0754デフォルトの名無しさん
2009/08/01(土) 03:58:18何箇所かメソッド変わって動かなくて、それをどっかにメモしたんだが、どこだったか
0755デフォルトの名無しさん
2009/08/01(土) 05:01:54別にいいけど、それ激烈に処理遅いよ
user system total real
loop 5.450000 0.340000 5.790000 ( 5.786291)
int 4.980000 0.700000 5.680000 ( 5.680568)
0/0.0 14.300000 1.530000 15.830000 (15.829079)
require 'benchmark'
max = 10000000
Benchmark.bmbm{|x|
x.report("loop") do
n1 = 0
loop{ break if n1 == max; n1+=1}
end
x.report("int") do
0.upto(max){|n2| break if n2 == max}
end
x.report("0/0.0") do
n = 0
0.upto(0/0.0){|n3| break if n3 == max}
end
}
0756デフォルトの名無しさん
2009/08/01(土) 05:06:05さすがフィボナッチ数列最適化された1.9さん汚いサンプルスクリプト全力実行汚い
user system total real
loop 1.040000 0.000000 1.040000 ( 1.035370)
int 0.930000 0.010000 0.940000 ( 0.939556)
0/0.0 2.330000 0.000000 2.330000 ( 2.326159)
0757デフォルトの名無しさん
2009/08/01(土) 06:08:110758デフォルトの名無しさん
2009/08/01(土) 09:19:12arr.find{|e| e.mes === val}
arr.find_all{|e| e.mes === val}
の結果を返す hoge(:mes, val) や hoge_all のような hoge メソッドって無い?
0759デフォルトの名無しさん
2009/08/01(土) 09:53:27それじゃあまだあったら購入します。
最悪、CD-ROMのRubyでも勉強できますし。
0760742
2009/08/01(土) 11:34:12ループにカウンタがいるのかいらないのかという議論もあるのかもしれませんが,
それ以前に,文法的に,loopがブロック付きメソッド(イテレータ)にもかかわらず,
loop { |i| ... }
という記法ができないのは少し気持ちが悪いというか,
loopが組み込みのブロック付きメソッドなら,文法の一貫性を保つためにも,
上記の表現は可能にすべきじゃないかと思ったのですが,どうなのでしょう。
loopは例外といえばそれまでなのですが…。
ブロック付きメソッド呼び出し
http://www.ruby-lang.org/ja/man/html/_A5E1A5BDA5C3A5C9B8C6A4D3BDD0A4B7.html#a.a5.d6.a5.ed.a5.c3.a5.af.c9.d5.a4.ad.a5.e1.a5.bd.a5.c3.a5.c9.b8.c6.a4.d3.bd.d0.a4.b7
0761デフォルトの名無しさん
2009/08/01(土) 11:49:49必然性があるわけ?
i = 0
loop{
...
i += 1
...
}
これじゃどうしてもダメという理由がある?
0762デフォルトの名無しさん
2009/08/01(土) 11:49:54def foo(i); end
foo # ArgumentError: wrong number of arguments (0 for 1)
これがエラーになることと一貫してる
0763デフォルトの名無しさん
2009/08/01(土) 12:00:10loop を仮引数なしのブロックつきメソッドにしたのはそのへんが理由だろう
明示的無限ループの制御部なんて速いに越したことはない
gem のどっかで loop_with_index とか作ってそうだが無さそうだ
0764デフォルトの名無しさん
2009/08/01(土) 12:08:25存在するべきではないのでデフォルトでは非対応にした
カウンタ欲しけりゃ自前で実装しとけ
がたぶん答だ
0765デフォルトの名無しさん
2009/08/01(土) 12:10:06loopが返さないのは一貫性に欠けると思う
ループカウンタ付きの無限ループは、ただの無限ループとしての機能を含むし
かといって、代わりに何かを犠牲するわけでもない
あと、2行増えるのが気に食わないw
0766デフォルトの名無しさん
2009/08/01(土) 12:13:460767デフォルトの名無しさん
2009/08/01(土) 12:14:06timesとの一貫性ならIntergerにカウンタ付きのメソッドを用意すればいい
と>>751で言った
0768デフォルトの名無しさん
2009/08/01(土) 12:17:24その指摘は的外れだ
Rubyではメソッドの引数は勝手に省略できないが、イテレータに渡すブロックの仮引数は省略できる
def test_iterator
yield(1, 2, 3)
end
test_iterator do
end
test iterator do |a, b, c|
end
0769デフォルトの名無しさん
2009/08/01(土) 12:25:35>それ以前に,文法的に,loopがブロック付きメソッド(イテレータ)にもかかわらず,
>loop { |i| ... }
>という記法ができないのは少し気持ちが悪いというか,
エスパーしてみると、ブロックには必ず引数をつけなきゃいけないと勘違いしてるっぽいな。
loop { ... } は単に while true do ... end と同じようななもんだから、
while で自動的にカウンタがつかないのと同じだよ。
0770デフォルトの名無しさん
2009/08/01(土) 12:37:57それで、増やしていいの?
0771デフォルトの名無しさん
2009/08/01(土) 12:41:58> 機能が似ているInteger#times
似てねえよ!
どこが似てるんだよ!
0772デフォルトの名無しさん
2009/08/01(土) 12:45:16増やしてもエラーにはならないし、本題はそこではない
0773742
2009/08/01(土) 13:23:26> エスパーしてみると、ブロックには必ず引数をつけなきゃいけないと勘違いしてるっぽいな。
loopに仮引数を付けた表現を可能にしてもよいのではないかと思っただけです。
仮引数を省略した表現が可能であることはもちろん前提です。
> loop { ... } は単に while true do ... end と同じようななもんだから、
> while で自動的にカウンタがつかないのと同じだよ。
whileはイテレータではないですよね。
組み込みのイテレータであるなら,どのイテレータでも仮引数をとれるようにした方が
表現上,一貫性があるのではないかと思ったのです。
ましてや,times(有限回のループ)で仮引数をとれるのなら,
loop(無限回のループ)でも仮引数をとれるようにした方が自然なように思います。
>>767
timesとの一貫性を保つのなら,カウンタの初期値は 0 になるので,
int.loop とする必要はないのではないかと思います。
0774デフォルトの名無しさん
2009/08/01(土) 13:31:420775デフォルトの名無しさん
2009/08/01(土) 13:31:55だから仮引数はレシーバから取られるだろ
Kernel なんかもらっても嬉しくねえよ
0776デフォルトの名無しさん
2009/08/01(土) 13:43:21回数が必要ならtimesでいいじゃないか
0777デフォルトの名無しさん
2009/08/01(土) 13:46:13loopにはむしろwhileやuntilのような、制御構造に近いものを感じるから
loopがブロック引数を持つと猛烈な違和感がある
きっとMatzも同じ判断をして、loopを今の仕様にしたのではないか
あれ、ここ何のスレだっけ
0778デフォルトの名無しさん
2009/08/01(土) 14:15:48よくわかってないが速度は犠牲にならんの?
0779742
2009/08/01(土) 14:34:11有限の時間内にプログラムは終了しないといけないので,
つまり,loopはいつかは終わるので,
実際に無限まで数えることはないと思います。
>>775
すみません,もう少し分かりやすく説明していただけないでしょうか。
>>776
数値計算なんかで,20カウントごとに解を出力して,
ある範囲に解が収まったらループを抜ける,なんてことは,
timesよりもloopの方が適していると思います。
(もちろん普通はwhileを使うのでしょうが,ここでは別の話です。)
機能的にloopに仮引数が必要か否かもありますが,
イテレータの表現上の一貫性からも,
loopに仮引数をとれた方が良いのではないかと思った次第です。
0780デフォルトの名無しさん
2009/08/01(土) 14:38:39有限の時間内にプログラムは終了しないといけないので…と言うのは計算機上の話じゃないのか
loop{}自体が意味するのは無限ループだよ
一貫性って何だよ
timesとloopはそもそも出自が全く違うものであって、全く別のものに一貫性も何もないと思うぞ
0781デフォルトの名無しさん
2009/08/01(土) 15:02:18って思うのがそもそもよくわからん
0782デフォルトの名無しさん
2009/08/01(土) 15:25:340783デフォルトの名無しさん
2009/08/01(土) 15:51:091.upto(Inf)でもInf.timesでも。javascriptは確かあったよな。
0784デフォルトの名無しさん
2009/08/01(土) 15:58:21Float を Integer の 0 で割ると無限大を返すようになってる
irb> p 100.0 / 0
Infinity
0785デフォルトの名無しさん
2009/08/01(土) 16:09:090.0/0 は NaN(Not a Number)を返す
Ruby では 1.0/0 という計算を無限大を得る通例として使う
ttp://www.google.com/search?hl=ja&safe=off&num=50&q=%221.0%2F0%22+Ruby+Infinity&lr=lang_ja
大昔は Float("INF") が Infinity だったんだが、この機能はなくなった
負の方向の無限大は -1.0/0 とでもしてくれ
0786デフォルトの名無しさん
2009/08/01(土) 16:15:12うほ、知らなかった。
それをわざわざ計算しなくても使えるように定数にしてほしいな。
でもtimesは使えないのね。Floatの仲間だからか。
0787デフォルトの名無しさん
2009/08/01(土) 16:59:08こういうのRuby処理系依存じゃないの?
ゼロ除算例外が発生してほしいって人もいるだろうし。
ちゃんとリテラルで±Infが欲しい
0788デフォルトの名無しさん
2009/08/01(土) 17:37:42> こういうのRuby処理系依存じゃないの?
現在はいいえ
というか Float("INF") を取り除くときに意図的にそうしたはず
1.0/0.0 も Infinity 返すぞ
0.0 は例によって「世界で一番 0 に近い正の浮動小数」だから、
これで素直に割ると正の極限に吹っ飛ぶという理解でひとつ
0789デフォルトの名無しさん
2009/08/01(土) 17:38:43というか実際いらんだろ
0790デフォルトの名無しさん
2009/08/01(土) 17:55:35何かどうなればそういう結論に辿り着くの
0791デフォルトの名無しさん
2009/08/01(土) 17:55:44ブロックパラメータはブロックつきメソッドのレシーバから何らかの条件で取るのが普通
loop は Kernel というか Object というかそのへんのメソッドなので、
関数的メソッド loop においては「ブロックパラメータは取りたくても取れない」とするのが、整合性上いちばん自然
Integer#times は レシーバの基底値つまり 0 を初期値として succ して レシーバの値まで繰り返すというメソッド
ブロックパラメータは普通にレシーバから 0 が使われて、これが増える
問題なくね
実際問題としてブロックパラメータは省略しても動作する
irb> 3.times{ puts "Rubyはうんこ"}
Rubyはうんこ
Rubyはうんこ
Rubyはうんこ
0792デフォルトの名無しさん
2009/08/01(土) 18:48:560793デフォルトの名無しさん
2009/08/01(土) 20:48:09何回目というのが一応取れるようになってるが、実際は省略することのほうが多い気がする
カウンタが欲しいなら俺は素直にRange.each使うほうが多い
0794742
2009/08/02(日) 03:09:30詳しく説明していただいてありがとうございます。
loopにブロックパラメータがない理由が納得できました。
メソッド1つとってもなかなか奥が深いですね。
0795デフォルトの名無しさん
2009/08/02(日) 05:47:14よくわかんねー
0796デフォルトの名無しさん
2009/08/02(日) 07:37:25貴方のお陰で、なんで職場で私が疎んじられるかがわかった気がする。些細なところまで自分が納得しないと気が済まないっていう人を説得するのは、疲れる。
0797デフォルトの名無しさん
2009/08/02(日) 08:36:10とかの理由にならない水掛け論しかされてないようにみえたな
で、ちゃんと理由付きの791に納得
普通の反応だろうよ
0798デフォルトの名無しさん
2009/08/02(日) 08:56:06>組み込みのイテレータであるなら,どのイテレータでも仮引数をとれるようにした方が
>表現上,一貫性があるのではないかと思ったのです。
それが思い込み・勘違いだっつーの。
>ましてや,times(有限回のループ)で仮引数をとれるのなら,
>loop(無限回のループ)でも仮引数をとれるようにした方が自然なように思います。
なんでそれが自然なんだよ!
>whileはイテレータではないですよね。
だからどうした? イテレータであるかどうかは今の話に関係ないだろ。
0799デフォルトの名無しさん
2009/08/02(日) 09:25:08典型的な水掛け論レス!
しかもレス先が古すぎて・・・
0800デフォルトの名無しさん
2009/08/02(日) 10:41:57まぁ2倍といっても、言い掛かり度と語気が2倍になるだけでレベルは逆にもっと下がるんだけど。
0801デフォルトの名無しさん
2009/08/02(日) 10:54:47>それ以前に,文法的に,loopがブロック付きメソッド(イテレータ)にもかかわらず,
>loop { |i| ... }
>という記法ができないのは少し気持ちが悪いというか,
>loopが組み込みのブロック付きメソッドなら,文法の一貫性を保つためにも,
>上記の表現は可能にすべきじゃないかと思ったのですが,どうなのでしょう。
loop {|i| p i } って今でも普通に動くぞ。
>>791
>ブロックパラメータはブロックつきメソッドのレシーバから何らかの条件で取るのが普通
そんな「普通」はない。
Kernel#open とか Array#each_index とかいくらでも例外がある
0802デフォルトの名無しさん
2009/08/02(日) 10:57:340803デフォルトの名無しさん
2009/08/02(日) 11:03:02すまん、「例外がある」という言い方で誤解されたか。
こんな慣習は存在しない。
完全な誤解 or デマだから初心者はだまされないように。
0804デフォルトの名無しさん
2009/08/02(日) 11:03:12ワラタ
0805デフォルトの名無しさん
2009/08/02(日) 11:10:25という表記があったら、普通 e は obj の何かだと思うんだが
そりゃメソッド作成時にどう作っても構わないが、そう動作するのが期待されてはいるだろ
0806デフォルトの名無しさん
2009/08/02(日) 11:12:26まあこれだって規定があるわけじゃないから>>803は「そんな慣習はない」と言うだろうけどな
0807デフォルトの名無しさん
2009/08/02(日) 11:18:27IO.open
IO.popen
IO.pipe
IO.foreach
Dir.open
Dir#each
Dir.chdir
Regexp#match
String#unpack
ObjectSpace.each_object
Kernel#open
Kernel#callcc
まだ続ける?
0808802
2009/08/02(日) 11:24:51関係ないから」なんて理由じゃないということだけわかってもらえれば。
実際の理由は今までそういう提案がなかっただけだろう。
走らせっぱなしにするプログラムで loop をとても長く実行する場合、
2**30 回を越えると Bignum が大量に生成されてしまうのは嫌だな。
0809デフォルトの名無しさん
2009/08/02(日) 11:25:220810デフォルトの名無しさん
2009/08/02(日) 11:31:38君はこっち
ttp://pc12.2ch.net/test/read.cgi/tech/1248487404/
0811デフォルトの名無しさん
2009/08/02(日) 11:32:080812デフォルトの名無しさん
2009/08/02(日) 11:39:500813デフォルトの名無しさん
2009/08/02(日) 11:41:420814デフォルトの名無しさん
2009/08/02(日) 11:58:48それは>>801が1.9.1ユーザーだからだよ
1.8.7では警告が出る
a.rb:2: warning: multiple values for a block parameter (0 for 1)
from a.rb:2
0815デフォルトの名無しさん
2009/08/02(日) 12:06:18じゃあ >>742 に必要だったのは $VERBOSE = nil かな
0816デフォルトの名無しさん
2009/08/02(日) 13:05:27>走らせっぱなしにするプログラムで loop をとても長く実行する場合、
>2**30 回を越えると Bignum が大量に生成されてしまうのは嫌だな。
{hoge} のときはカウントせずに
{|i| hoge} のときだけカウントすればいい
0817デフォルトの名無しさん
2009/08/02(日) 13:35:33loop {|i| p i }
を走らせると、nilが延々と出力されるけど、
1.9.1だと何が出力されるの?
0818デフォルトの名無しさん
2009/08/02(日) 13:38:330819デフォルトの名無しさん
2009/08/02(日) 13:42:400820デフォルトの名無しさん
2009/08/02(日) 13:47:18警告を切ればいい、というものでもないと思う
0821デフォルトの名無しさん
2009/08/02(日) 14:25:18> {hoge} のときはカウントせずに
> {|i| hoge} のときだけカウントすればいい
まず、arity の数によって挙動を変える API というのは前例がない。
ML で提案してみるといいけど、i = 0; loop { ...; i += 1 } で済む
程度のことなのでおそらく通らないだろうね。
あと、C レベルでは block と Proc は別なんだよね。
arity を見るには Proc にしないといけないが、block を Proc に
変換するのは結構遅い処理なんだ。
つーわけで、それをやろうとすると従来の loop が遅くなる。
0822デフォルトの名無しさん
2009/08/02(日) 14:30:00文法エラーは一切関係ないといいたいだけなんだが。
def foo; yield; end; foo {|x| p x } ってやってみろ、と言えばいい?
0823デフォルトの名無しさん
2009/08/02(日) 16:01:09で拡張子前のスペースを取り除けたんだけど
puts "aaa .rb".gsub(/(\s*)\..*?$/, '')
といった感じで取り除きたいものを括弧でくくって除去する書き方ってないですか。
この書き方だと/〜/が置換対象になる為か"aaa"になってしまいます。
0824デフォルトの名無しさん
2009/08/02(日) 16:24:16puts "aaa .rb".sub(/\s+(?=\..*$)/, "")
aaa .bbb .rb が aaa.bbb .rb になるのが嫌なら
puts "aaa .rb".sub(/\s+(?=\.[\.]*$)/, "")
0825デフォルトの名無しさん
2009/08/02(日) 16:25:26単語末は $ よりも \Z 推奨(\Z で用が済む場合のみ)
> 取り除きたいものを括弧でくくって除去
puts "aaa .rb".gsub(/(\s*)(?=\..*?$)/){''}
0826742
2009/08/02(日) 21:37:08みなさん,いろいろありがとうございました。
>>801
どのブロック付きメソッドでも obj.method { |i| ... } を実行できるが,
i に何が入るか定義されていないときには nil が入る。
で,loopの場合には i に何が入るか定義されていないので,nil が入る。
結局,loop { |i| ... } は文法的には誤りではないと。
>>807-808
> loop がカウンタを yield しないのは「Kernel#loop のレシーバと
> 関係ないから」なんて理由じゃないということだけわかってもらえれば。
そういう縛りはないということなのですかね。
当初,loopにカウンタがあれば嬉しいなと思ったのですが,それも難しいということで,
少し残念な気もしますが,そんなもんだと思っておきます。
お騒がせしました。
0827デフォルトの名無しさん
2009/08/03(月) 03:04:18Webサーバーにあるテキストファイル読み込み、追加編集ってできますか?
0828デフォルトの名無しさん
2009/08/03(月) 04:19:20物凄く一般的には、
「得点ファイルを受け取って全体ランキングを返すCGIをサーバに置く」
「URLは一発でバレて原理的に隠せないので、不正防止のために
それを送れるのはハッシュの作り方を知ってるゲーム本人だと確信できるような
複雑でランダムなハッシュをゲームに作成させる」
「ゲームからのファイル送受信はとりあえずopen-uriあたりを使う」
あたりになると思う
0829デフォルトの名無しさん
2009/08/03(月) 05:50:46サーバ側にCGIプログラムとかを用意して、サーバ側でテキストファイルを読み書きしたほうがいい。
サーバにあるテキストファイルをとってきて、クライアント側で書き換えてサーバ側に送信するようにすると、いくらでも不正行為ができるからね。
だから、まずCGIプログラムの作り方(やRailsの使い方)を勉強したらいいんじゃないかな。
0830デフォルトの名無しさん
2009/08/03(月) 05:58:26別に間違った事を言ってる訳じゃないけどさ(Rails以外は)
0831デフォルトの名無しさん
2009/08/03(月) 06:03:38そりゃUDPと特定デーモンで用は足りるが、プロトコルデータ総量とセッション負荷を問題にすべき場所ではない
0832デフォルトの名無しさん
2009/08/03(月) 10:30:29作るなら、php辺りで作ったほうが良いよwww
0833デフォルトの名無しさん
2009/08/03(月) 14:02:13素直に読むなら多くても通常のサイトのカウンタCGI程度だと思えるが
0834デフォルトの名無しさん
2009/08/03(月) 14:57:150835デフォルトの名無しさん
2009/08/03(月) 17:01:01>1分につき何回のアクセスを想定してるかにもよるな
ネットランキングを作りたいって言っているんだから、大した負荷にはならんだろ。
0836デフォルトの名無しさん
2009/08/03(月) 17:04:19超リアルタイムランキングを作りたいとかいう奴のいる世界を舐めたらいかん
0837デフォルトの名無しさん
2009/08/03(月) 19:44:240838デフォルトの名無しさん
2009/08/03(月) 19:45:260839デフォルトの名無しさん
2009/08/04(火) 00:09:590840デフォルトの名無しさん
2009/08/04(火) 00:40:440841デフォルトの名無しさん
2009/08/04(火) 01:52:04プロセスみたら割り込み不可やら停止中とかになるんだけど、原因わかるひといます?
0842デフォルトの名無しさん
2009/08/04(火) 02:22:56・ そもそも外付けは原理的に内蔵よりずっと遅い(我慢)
・ USB1.1に繋いでいる(買い替え)
・ USBコネクタがHDD転送向きでないへぼい安物(別なコネクタに繋ぐと直る)
・ 細かいファイルの読み書きは基本遅いのでスクリプトのライブラリを置くのは自殺行為
好きなの選べ
0843デフォルトの名無しさん
2009/08/04(火) 02:48:19/dev/sda1:
Timing cached reads: 13724 MB in 1.99 seconds = 6879.94 MB/sec
Timing buffered disk reads: 256 MB in 3.00 seconds = 85.24 MB/sec
/dev/sdb1:
Timing cached reads: 13840 MB in 1.99 seconds = 6938.85 MB/sec
Timing buffered disk reads: 362 MB in 3.01 seconds = 120.08 MB/sec
sdaにOS入れているんですが、sdbにデータ保存用としているのですが・・・。
0844デフォルトの名無しさん
2009/08/04(火) 06:00:40イテレータ(古い呼び方ですが)の中で値の代入はできないのでしょうか。
例えば 配列 t があって for 文を使えば
t=["aaa","bbb","b"]
len = array.length-1
for i in 0..len
array[i]="ok"
end
で全ての配列の要素にokを代入できますが
イテレータでこれをやろうとしてもできませんでした。
array.each{|seg|
seg="ok"
}
array
仕様的にイテレータ内では代入ができないのでしょうか。
それとも何か方法があるのでしょうか。教えてください
0845デフォルトの名無しさん
2009/08/04(火) 06:21:58seg = arr[0]
seg = "ok"
seg = arr[1]
seg = "ok"
seg = arr[2]
seg = "ok"
これで array が ["ok", "ok", "ok"] になるかと言えば、やっぱならねーだろ
それと同程度の理屈
配列要素を書き換えたいときは map (と map!)を使うことが多い
array = ["one", "two", "three"]
array.map!{|e| "ok"}
p array
["ok", "ok", "ok"]
ブロック内部で代入された変数から array を書き換えることはしない
何らかの手段で配列に直接アクセスするのが無難
array = ["one", "two", "three"]
[0, 1, 2].each{|n| array[n] == "ok"}
p array
["ok", "ok", "ok"]
0846デフォルトの名無しさん
2009/08/04(火) 06:29:29array = ["one", "two", "three"]
[0, 1, 2].each{|n| array[n] = "ok"}
p array
arr.each{|e| e = "ok"} は「ぱっと見は動作しそうなんだけどよく考えたら動作しないもの」のひとつ
0847デフォルトの名無しさん
2009/08/04(火) 06:31:470848デフォルトの名無しさん
2009/08/04(火) 08:39:33array の長さが変わったらどうするつもりなんだろうこのひとは
0849デフォルトの名無しさん
2009/08/04(火) 08:49:270850デフォルトの名無しさん
2009/08/04(火) 10:02:50オレも内蔵のHDDつなげてソフトRAID1を導入してみたらめちゃくちゃ遅かった思い出がある。
0851デフォルトの名無しさん
2009/08/04(火) 13:02:390852デフォルトの名無しさん
2009/08/04(火) 15:20:33s
end
a = "Aaa"
b = getstr(a)
b.gsub!(/aa/, "bb")
p a
上の様なパターンで文字列の参照書き換えちゃってたびたびバグを出すんだけど
メソッドの文字列は s.dup して返すみたいなルールを決めるべきなのかな。
def getstr(s)
if /A/ =~ s
s
else
'A' + s
end
end
になるとますます状況が混沌としてくる。
このあたりのRubyのお作法はどうなってるんだろう。
0853デフォルトの名無しさん
2009/08/04(火) 15:24:38わるいこといわんから早い方で動かしとき。
でも、データ保存(?)の方が読み書き早いのに実行が遅いのは気持ちが悪いな
0854デフォルトの名無しさん
2009/08/04(火) 15:26:54StringBuilderのように使うときだけは別扱いで。
0855デフォルトの名無しさん
2009/08/04(火) 15:27:05def getstr(s)
s
end
a = "Aaa"
b = getstr(a).gsub(/aa/, "bb")
p a
0856デフォルトの名無しさん
2009/08/04(火) 15:29:41逆じゃないか
0857デフォルトの名無しさん
2009/08/04(火) 15:41:590858デフォルトの名無しさん
2009/08/04(火) 15:46:16a = 超でっかい文字列
a.gsub!
としたときの超でっかい文字列がメモリから消えるタイミングと
a = 超でっかい文字列
b = a.gsub
# 以後のスクリプトに a は出てこない
としたときの超でっかい文字列がメモリから消えるタイミングの予測値ってたいして変わらないよな
0859デフォルトの名無しさん
2009/08/04(火) 15:58:53標準ライブラリからdupやfreezeしてるのを探したけどあんまり無かった
他の言語だとこの辺り煩いけどRubyだとどうするんだろうね
class Foo
def initialize(s); @s = s; end
attr_accessor :s
end
s = 'hoge'
f = Foo.new(s)
s[1] = 'a'
f.s #=> "hage"
0860デフォルトの名無しさん
2009/08/04(火) 16:06:11String だって「selfを変更してselfを返す」というメソッドより「新しい文字列を作成して返す」というメソッドのほうが多い
0861デフォルトの名無しさん
2009/08/04(火) 16:10:36これが意図的に行われるのは引数がデータハッシュとかデータ配列とか
そういうのな時だと思う
0862デフォルトの名無しさん
2009/08/04(火) 16:22:16面倒なら頭で s=s.dup しちゃうとか。
メソッドの仕様だと言い張って呼び出し側でdup的な事をさせるのはさすがに論外な気がしてきた。
参考になる意見ありがとうございました。
0864デフォルトの名無しさん
2009/08/04(火) 16:38:16どうやって設定してますか?
0865デフォルトの名無しさん
2009/08/04(火) 16:44:20うむ
「環境変数を設定してrubyスクリプトを起動するというシェルスクリプトをcronで動かす」
「crontab で環境変数が設定できるので RUBYLIB とか適当に設定する」
のどっちかを主に使う
あとあとめんどくさくないので、cron用起動シェルスクリプトを作るのお勧め
0866デフォルトの名無しさん
2009/08/04(火) 17:02:09ということは、ruby起動用のテンプレートを作った方が良いのでしょうか。
コマンドライン引数を渡して、シェルスクリプトのような形でも利用したいので。
例えば以下のようなコードで。
#!/bin/sh
RUBYOPT='-Ke -rkconv'
export RUBYOPT
RUBYLIB=$HOME/ruby/lib:/opt/ruby/lib
export RUBYLIB
ruby test.rb $*
0867デフォルトの名無しさん
2009/08/04(火) 17:08:07<test>
#!/bin/sh
rubyset
ruby test.rb $*
<rubyset>
#!/bin/sh
RUBYOPT='-Ke -rkconv'
export RUBYOPT
RUBYLIB=$HOME/ruby/lib:/opt/ruby/lib
export RUBYLIB
の様な形にした方が良いでしょうか。
野暮ったい感じなので、もっと良い方法があれば教えてください。
0868デフォルトの名無しさん
2009/08/04(火) 17:09:31gsub! を使わないようにするのがいいと思う。
Ruby では gsub! は本当に必要なとき以外は使わない方がいい。
0869デフォルトの名無しさん
2009/08/04(火) 17:13:27crontab にはファイル名しか書かないというのが一応俺ポリシーなので
俺の場合は対象cronごとにシェルスクリプトを作る
複雑な起動オプションとか全部シェルスクリプトに(意図解説つきで)押し込める
マシンが変わっても crontab -r してしまってもなんとかなるようにしておく
そんだけ
0870デフォルトの名無しさん
2009/08/04(火) 17:22:58=============================
$ ruby hoge.rb
hoge.rb:3: unknown type of %string
s = "これは、テストメールです。\n\n届いているかな?\n"
^
hoge.rb:3: syntax error
s = "これは、テストメールです。\n\n届いているかな?\n"
^
$ cat !$
cat hoge.rb
#!/usr/bin/ruby -Ke
s = "これは、テストメールです。\n\n届いているかな?\n"
=============================
"unknown type of %string" で調べてもいい情報が見付かりません。
すみませんが原因をご教授いただけると助かりますm(_ _)m
0871デフォルトの名無しさん
2009/08/04(火) 17:27:22異なるユーザーでスクリプトやライブラリを共有したいので、
なるべく簡単で不具合の少ない方法があれば良いと思ったので。
クラスを共有したり、コマンドラインを共通化したりしたら便利ですから。
この方法だと、ユーザー毎のPATHの違いで止まるのが難点です。
上手く回避できる方法があれば良いなと。
0872デフォルトの名無しさん
2009/08/04(火) 17:45:47まず「¥n」をとりのぞいてみる。それでokなら「¥n」があやしい。
そうでなければ日本語関連の問題かな。
0873デフォルトの名無しさん
2009/08/04(火) 17:52:44>メソッドの仕様だと言い張って呼び出し側でdup的な事をさせるのはさすがに論外
どっちもどっちな気がするけどね
例えばクラス側でdupするのが当然ならattr_readerが破綻する
class C
attr_reader :name
def initialize(name); @name = name.dup; end
end
obj = C.new("Hoge")
obj.name[1] = "a"
p obj.name #=> "Hage"
引数として渡したことのある値も、余所から得た返値も(Stringのメソッドのように保証されてる場合を除いて)
共有物だと見なして破壊的な操作は避けるのが作法だと思う
はっきりと私物だって分かってるなら破壊的に操作していいんだけどね
0874デフォルトの名無しさん
2009/08/04(火) 17:55:12s = "、"
で
"Invalid char `\033' in expression"
となりました。
ダブルクォートでなくシングルクォートで囲めばいけるんですが、、、
"ruby -Ke" とやっていても日本語関連の解決にはならないのでしょうか。
0875デフォルトの名無しさん
2009/08/04(火) 17:55:57とりあえずdupする理由もさっぱりわからない
0876870
2009/08/04(火) 18:01:41LANG=ja_JP.eucJP なので油断してました。
スレ汚し失礼しましたm(_ _)m
0877デフォルトの名無しさん
2009/08/04(火) 20:21:34usr@host:~/$ kizapi-kwic 春
/usr/lib/ruby/1.8/rss/rss.rb:803:in `install_ns': RSS::OverlappedPrefixError (RSS::OverlappedPrefixError)
from /usr/lib/ruby/gems/1.8/gems/kizapi-0.3.0/lib/kizapi.rb:9
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from /usr/lib/ruby/gems/1.8/gems/kizapi-0.3.0/bin/kizapi-kwic:5
from /usr/bin/kizapi-kwic:19:in `load'
from /usr/bin/kizapi-kwic:19
となるんだけども誰か使っている人います?wrapperとして古くなったのかね
0878デフォルトの名無しさん
2009/08/05(水) 01:40:52map のサンプルを調べて無事できるようになりました。
ありがとうございます。
0879デフォルトの名無しさん
2009/08/05(水) 04:31:49nilだけを削除する Edit
a = [nil, nil, 123].compact
p a #=> [123]
破壊的なやつもある
a = [nil, nil, 123]
a.compact!
p a #=> [123]
破壊的って意味がよくわかりません。
mergeしたときは強制的に一緒になるみたいなイメージだったのですが、
ここでの破壊的とは何でしょうか?
0880デフォルトの名無しさん
2009/08/05(水) 04:45:28比較してみて
a1 = [nil, nil, 123]
a1.compact #=> [123]
a1 #=> [nil, nil, 123]
a2 = [nil, nil, 123]
a2.compact! #=> [123]
a2 #=> [123]
0881デフォルトの名無しさん
2009/08/05(水) 11:51:040882デフォルトの名無しさん
2009/08/05(水) 13:13:54破壊的という言葉だけ取り出すと不自然
0883デフォルトの名無しさん
2009/08/05(水) 13:30:170884デフォルトの名無しさん
2009/08/05(水) 13:34:300885デフォルトの名無しさん
2009/08/05(水) 13:47:030886デフォルトの名無しさん
2009/08/05(水) 16:01:21数値の配列にした方が良いんでしょうか?
0887デフォルトの名無しさん
2009/08/05(水) 16:14:21String
1.9は知らん
0888デフォルトの名無しさん
2009/08/05(水) 16:25:380889デフォルトの名無しさん
2009/08/05(水) 16:27:350890デフォルトの名無しさん
2009/08/05(水) 18:28:071.9でやっとマトモな文字列クラスになった
0891272
2009/08/05(水) 19:01:30クラスのメンバー変数に@をつけるのが気持ち悪いのですが何とかならないでしょうか?
0892デフォルトの名無しさん
2009/08/05(水) 19:03:22selfやthisを付けたりm_みたいな接頭辞をつけたりで
あれこれ揉める言語を学んでくると気持ち悪くなくなるぞ
0893デフォルトの名無しさん
2009/08/05(水) 19:17:10attr_accessor(:hoge) して
h = self.hoge
self.hoge = h
すれば書かなくて済むけど、こんなマネするならrubyを止めた方がいい
0894デフォルトの名無しさん
2009/08/05(水) 19:20:58自分で手突っ込んで吐きまくれば気持ち悪くなくなるのと一緒ですね、わかります
0895デフォルトの名無しさん
2009/08/05(水) 19:45:56privateにしてやるならそれもありだと思う
0896デフォルトの名無しさん
2009/08/05(水) 19:52:16Rubyスクリプトを着色してくれる適当なエディタ使え
インスタンス変数が見やすいと感じるようになるから
>>893
それは常にアクセサメソッドを経由するようにするという別な意味を持つので濫用禁止
0897デフォルトの名無しさん
2009/08/05(水) 19:53:23>>895は忘れてください
0898デフォルトの名無しさん
2009/08/05(水) 19:54:38何十何百といった変数を扱うようになった時に
見た目、形状だけで変数がどこに属しているのかが
すぐに分かる事のありがたさに気付くだろう。
0899デフォルトの名無しさん
2009/08/05(水) 20:09:28でもまあ慣れるよ、うん
@がつかなかったらメソッド返り値かローカル変数で、
@がついたらメソッド間を渡り歩くインスタンス変数で、
大文字(多くの場合、慣習的に全部大文字)だったらなにかの定数
着色のエディタに強く依存するけどな
俺の普段の頭の中では「インスタンス変数はなんか黄色のグローバルな変数」というイメージしかないぞ
0900デフォルトの名無しさん
2009/08/05(水) 20:24:410901デフォルトの名無しさん
2009/08/05(水) 20:31:37実は本人も記号が好きでないらしい。
不必要にインスタンス変数やクラス変数を使いまくるのは良くないのだが、
そういう良くないプログラムを書くと「@」だらけになってすぐにわかるようにした、
ということだった。本当かどうか知らんがオレは納得して割と基準にしてる。
最初は「@」が嫌いだったが、意味がわかるとこのルールが好きになった。
0902デフォルトの名無しさん
2009/08/05(水) 20:39:540903デフォルトの名無しさん
2009/08/05(水) 21:03:14似たような話をどっかで読んだなあ……見つかった。『Beautiful Code』のエッセイ
メリットがある一方で、濫用は戒める効果を狙っているということだろうか
>このような命名法はプログラムが簡潔になるばかりでなく、
ひとめで変数の種別が分かるのでプログラムが読みやすくなる、
グローバル変数を多用するとプログラムで「$」ばかりで醜くなる
(ので、グローバル変数を使いたくなくなる)などの、すぐれた「副作用」もあります
0904デフォルトの名無しさん
2009/08/05(水) 23:39:19Internal Server Error
0905デフォルトの名無しさん
2009/08/05(水) 23:57:18学生が就職してrubyへの愛情を失ってしまったんだよ
0906デフォルトの名無しさん
2009/08/06(木) 01:51:03ruby使ってるって言ったら、あぁ、RubyOnRailsってRailsひとくくりにされてしまう。
rails使わない分野もあるんだよ。
0907デフォルトの名無しさん
2009/08/06(木) 01:52:480908デフォルトの名無しさん
2009/08/06(木) 02:39:060909デフォルトの名無しさん
2009/08/06(木) 03:31:120910デフォルトの名無しさん
2009/08/06(木) 04:17:05サーバ(1.8.5が入ったcentos)に持っていくと、
dbmをrequireしようとした行で、dbmがないというエラーが出ます。
どうすれば使えるようになるのでしょうか?
rpmには以下が入っています。
ruby-rdoc-1.8.5-5.el5_3.7
ruby-libs-1.8.5-5.el5_3.7
ruby-irb-1.8.5-5.el5_3.7
eruby-libs-1.0.5-6.1
ruby-devel-1.8.5-5.el5_3.7
ruby-1.8.5-5.el5_3.7
eruby-1.0.5-6.1
0911デフォルトの名無しさん
2009/08/06(木) 04:30:27/usr/lib/ruby/1.8/i386-linux/
配下に、dbm.soが入っていないようです・・何故?
0912デフォルトの名無しさん
2009/08/06(木) 06:28:55よく知られてるパス以外に置かれてるdbm関連を読まないというバグは1.8.6で直ったような気がする
0913デフォルトの名無しさん
2009/08/06(木) 06:39:11この環境で許可されてるかどうかかなり微妙だけど…
0914デフォルトの名無しさん
2009/08/06(木) 10:16:40end
と
if ARGV[0] == ""
end
で挙動が異なる場合があるのですが、nilと""って意味が違うんですか?
上のnilの書き方だと想定通りに動かないことがあります。
0915デフォルトの名無しさん
2009/08/06(木) 10:39:13ARGV に空文字列が入ることは基本的にないはず
0916デフォルトの名無しさん
2009/08/06(木) 10:43:39nil と "" をチェックするのであった
0917デフォルトの名無しさん
2009/08/06(木) 10:56:54後者は引数が渡されたがその内容が "" だった
だから意味的にも違うしそもそも nil != "" でしょ
0918デフォルトの名無しさん
2009/08/06(木) 10:59:04p ARGV[0]
をスクリプトに入れてみたら
""
が表示されました。
相手のプログラムが""をARGV[0]に代入しているらしいことがわかりました。
これは特殊なケースだと思います。
自分でスクリプトを引数なしで起動するとnilが表示されるので、
やはり""とnilは違うんですね。
0919デフォルトの名無しさん
2009/08/06(木) 11:00:21それ以前に、 ARGV[0] をnilかどうかチェックするぐらいなら ARGV.empty? を使うわ
0920デフォルトの名無しさん
2009/08/06(木) 11:02:59% irb
irb(main):001:0> nil == false
=> false
irb(main):002:0> nil == 0
=> false
irb(main):003:0> nil == ""
=> false
irb(main):004:0> nil == []
=> false
irb(main):005:0> nil == {}
=> false
0921デフォルトの名無しさん
2009/08/06(木) 11:03:22引数のひと連なりの文字列を空白等で siplit & parse した結果の配列だぞ
空文字列ってなんだよ
0922デフォルトの名無しさん
2009/08/06(木) 11:04:210923デフォルトの名無しさん
2009/08/06(木) 11:13:51myscript.rb aaa bbb ''
この場合 ARGV[2] の中身は何になりますか?
0924デフォルトの名無しさん
2009/08/06(木) 11:22:19command not found
0925デフォルトの名無しさん
2009/08/06(木) 11:22:440926デフォルトの名無しさん
2009/08/06(木) 11:27:06>>914
細かいけど、わざわざ==で比較するよりは
if ARGV[0]
end
と書くのをお勧めする
0927デフォルトの名無しさん
2009/08/06(木) 11:30:350928デフォルトの名無しさん
2009/08/06(木) 11:32:260929デフォルトの名無しさん
2009/08/06(木) 12:33:460930デフォルトの名無しさん
2009/08/06(木) 12:50:160931デフォルトの名無しさん
2009/08/06(木) 13:12:250932デフォルトの名無しさん
2009/08/06(木) 13:30:030933デフォルトの名無しさん
2009/08/06(木) 14:06:030934デフォルトの名無しさん
2009/08/06(木) 18:15:180935デフォルトの名無しさん
2009/08/06(木) 18:45:300936デフォルトの名無しさん
2009/08/06(木) 18:50:42いや、したくないのだが
0937デフォルトの名無しさん
2009/08/06(木) 18:53:10それでは用が済まない厳密用途のために「あとから」 === が導入された
最初から == と === が定義されて使い分けられていたわけではない
0938デフォルトの名無しさん
2009/08/06(木) 18:59:45文字列を == や === で比較してるのを見るともやもやする
そりゃたまたま動作することのほうが多いけどさあ
0939デフォルトの名無しさん
2009/08/06(木) 19:22:55┏┳┳┓ ハイ. ┏┳┳┓
┏┫┃┃┃多言語の話題わ┃┃┃┣┓
┃┃┃┃┣┓ ここまで ┏┫┃┃┃┃
┃ ┃┃┏━━━┓┃┃ ┃
┃多言語 ┣┫ . ・∀・ ┣┫. STOP!┃
┗━━━━┛┗┳━┳┛┗━━━━┛
┏┻┓┃
┏━┛ ┣┻┓
┗━━━┫ ┗━┓
. ┗━━━┛
0940デフォルトの名無しさん
2009/08/06(木) 19:49:320941デフォルトの名無しさん
2009/08/06(木) 19:55:140942デフォルトの名無しさん
2009/08/06(木) 20:03:080943941
2009/08/06(木) 20:12:59が、数学が嫌いな大部分の ぷろぐらま にとってはそれなりの値が返ってくるのが自然と感じるのは仕方ないとも思います。
0944デフォルトの名無しさん
2009/08/06(木) 20:24:48だ(600行くらい削除)
0945デフォルトの名無しさん
2009/08/06(木) 20:40:560946デフォルトの名無しさん
2009/08/06(木) 20:59:11to_sが返すものが文字列で無くてもいいのは何故?
0947デフォルトの名無しさん
2009/08/06(木) 21:06:13ああ、そういう意味に取られたか…
to_sが返すものは文字列であるべき。ただ、過去に議論になったのは
nil.to_s => "nil" か => "" かって話だろ?だからそのどっちかというのは俺は結論付け難いって言いたかった
0948デフォルトの名無しさん
2009/08/06(木) 21:17:40数学がそんなにえらいのか!クソ野郎!!
0949デフォルトの名無しさん
2009/08/06(木) 21:21:00C#から来たが挫折しそう
0950デフォルトの名無しさん
2009/08/06(木) 21:33:23数学は偉いよ
0951デフォルトの名無しさん
2009/08/06(木) 21:37:07ただ、数学が偉いということとはなんの関係もないが
0952デフォルトの名無しさん
2009/08/06(木) 21:41:30まあ、適当にお茶濁しておいてくれ。
0953デフォルトの名無しさん
2009/08/07(金) 00:50:49もっと言うと、押尾学の方が偉いよ。
0954デフォルトの名無しさん
2009/08/07(金) 04:51:57to_jst("2009/08/06 7:33:36") → 日本時間がほしい
GMT周りの扱い等何か参考になる、メソッドはないでしょうか?
0955954
2009/08/07(金) 05:05:26irb(main):016:0> require 'time'
=> true
irb(main):019:0> Time.parse "2009/08/06 7:33:36 +0000"
=> Thu Aug 06 16:33:36 +0900 2009
irb(main):021:0> Time.parse("2009/08/06 7:33:36 UTC").getlocal
=> Thu Aug 06 16:33:36 +0900 2009
おさわがせしました。
ありがとうございました。
0956デフォルトの名無しさん
2009/08/07(金) 14:49:27某sixamo.rbを実行すると
*****@*****-laptop:~/sixamo$ ruby sixamo.rb -im data_directory
簡易対話モード [exit,quit,空行で終了]
> てすてす
sixamo.rb:740:in `split_into_terms': undefined method `[]' for nil:NilClass (NoMethodError)
from sixamo.rb:522:in `split_into_terms'
from sixamo.rb:512:in `split_into_keywords'
from sixamo.rb:235:in `talk'
from sixamo.rb:233:in `each'
from sixamo.rb:233:in `talk'
from sixamo.rb:819
とエラーを吐き終了します。
どうしてあげればいいんでしょうか?><
0957デフォルトの名無しさん
2009/08/07(金) 15:04:04それがしししゃも?
冗談はさておいて、1.8系にしてからまたおいで
0958デフォルトの名無しさん
2009/08/07(金) 15:04:44Dir.foreach(path) do |v|
next if v == "." or v == ".."
if path =~ /\/$/
v = path + v
else
v = path + "/" + v
end
p v
if FileTest.directory?(v)
recursive_dir(v) #再帰呼び出し Recursive Call
end
end
end
というメソッドがあり、その出力内容に対して while などで処理を行いたいのですが
while file = recursive_dir(dir)
などではうまく動きません。
こういう場合はどんな方法が考えられますでしょうか?
0959デフォルトの名無しさん
2009/08/07(金) 15:05:40>>956
1.9には対応してないので諦めるのが一番早い
0960デフォルトの名無しさん
2009/08/07(金) 15:07:19def recursive_dir(path)
Dir.foreach(path) do |v|
next if v == "." or v == ".."
if path =~ /\/$/
v = path + v
else
v = path + "/" + v
end
p v
if FileTest.directory?(v)
recursive_dir(v) #再帰呼び出し Recursive Call
end
end
end
0961デフォルトの名無しさん
2009/08/07(金) 15:07:42やっぱりそこですか。。
ありがとうございました;;
0962デフォルトの名無しさん
2009/08/07(金) 15:08:22def recursive_dir(path)
Dir.foreach(path) do |v|
next if v == "." or v == ".."
if path =~ /\/$/
v = path + v
else
v = path + "/" + v
end
p v
if FileTest.directory?(v)
recursive_dir(v) #再帰呼び出し Recursive Call
end
end
end
0963デフォルトの名無しさん
2009/08/07(金) 15:10:11p はデバッグ用の画面表示
メソッド間で値を渡すのに使うことはできない
0964デフォルトの名無しさん
2009/08/07(金) 15:32:21Dir.glob(path + '/**/*').each do |v|
whileで実行したい処理
end
再帰を使いたいなら v を配列に保存それをメソッドの返り値にする、
recursive_dir にブロックを渡して yield v する等々
0965956
2009/08/07(金) 15:33:15sixamo.rb:809:in `require': no such file to load -- readline (LoadError)
from sixamo.rb:809
とでます。
文字入力も受け付けてくれません。
Rubyインスコに問題ありなんでしょうか・・?
0966デフォルトの名無しさん
2009/08/07(金) 15:42:050967デフォルトの名無しさん
2009/08/07(金) 15:51:11>>964
ありがとうございます!勉強になりました。。。
もっと勉強します。
0968デフォルトの名無しさん
2009/08/07(金) 15:53:55エラーメッセージ読めよ……
0969デフォルトの名無しさん
2009/08/07(金) 15:58:31readline と言われて何が悪かったのかわかるような人はこんなスレにいちいち来ねえよ
>>965
パッケージで 1.8 をインストールしたなら libreadline-ruby1.8 とかなんかそんなような感じの入れろ
自力でコンパイルしたなら libreadline-dev とか libreadline5-dev とか libreadline-devel とかなんかそんなやつ入れてからコンパイルしれ
0970デフォルトの名無しさん
2009/08/07(金) 16:03:13ありがとうございます。。
やってみます><
Ruby触ったのは今日が初めてでちんぷんかんぷんなのです。。
0971デフォルトの名無しさん
2009/08/07(金) 16:47:15elsif opt[:i]
require 'readline' ←809行目
sixamo = Sixamo.new(ARGV[0])
puts "簡易対話モード [exit,quit,空行で終了]"
諦めたほうがいいですかね・・?
0972デフォルトの名無しさん
2009/08/07(金) 16:53:140973デフォルトの名無しさん
2009/08/07(金) 16:56:13お昼前からずっといじってますが、お手上げです。。
こっちがシシャモになりそうです><
0974デフォルトの名無しさん
2009/08/07(金) 16:56:33Linuxなのかmswin32なのか、Linuxにしても自分でコンパイルしたのかAPTで入れたのか
その辺が分からないことにはアドバイスする方も困る
0975デフォルトの名無しさん
2009/08/07(金) 17:02:30Rubyはapt-get installでインスコしますた。
他パッケージはdebをおとしますた。
ttp://d.hatena.ne.jp/lagos_on/20090705/1246751141
↑このページを見ながら作業しました。
最初のapt-get後アンインストールして1.8xを自分でコンパイルしてインスコしました。
0976デフォルトの名無しさん
2009/08/07(金) 17:15:41ttp://dirk.net/2009/04/05/no-such-file-to-load-readline-loaderror-when-running-scriptconsole/
まず libreadline をインストール
sudo apt-get install libncurses5-dev
sudo apt-get install libreadline5-dev
そのあと ruby のソースで、readline 拡張ライブラリをコンパイル&インストール
cd /usr/src/ruby-1.8.7-p72/ext/readline
ruby extconf.rb
make
sudo make install
これを試してみて。
0977デフォルトの名無しさん
2009/08/07(金) 17:15:49自分でコンパイルした方を削除して、apt-getでインストールした方が良い
readlineの問題だけならたぶんapt側で何とかなる
0978デフォルトの名無しさん
2009/08/07(金) 18:13:18簡易対話モード [exit,quit,空行で終了]
> test
sixamo.rb:112:in `gsub!': premature end of regular expression: /『 \200(RegexpError)
from sixamo.rb:112:in `message_normalize'
from sixamo.rb:301:in `message_markov'
from sixamo.rb:249:in `talk'
from sixamo.rb:819
一応少し動きました・・。
まだエラーでますがグーグル先生に聞いたりして頑張ってみます><
ありがとうございました
0979デフォルトの名無しさん
2009/08/07(金) 18:16:18かしこさが3あがった。
0980デフォルトの名無しさん
2009/08/07(金) 21:34:10@array_time = time.split( ":" )
return @array_time[0].to_i * 24 + @array_time[1].to_i * 60 + @array_time[2].to_i
end
もっとかっこいいやり方(あるいは既にある関数)があれば教えてくださいm(_ _)m
0981デフォルトの名無しさん
2009/08/07(金) 21:38:490982デフォルトの名無しさん
2009/08/07(金) 21:45:39要らないですね。。。
他に直せる場所はありませんか?
0983デフォルトの名無しさん
2009/08/07(金) 22:05:58if /(\d+):(\d+):(\d+)/ =~ str
return $1.to_i*3600+$2.to_i*60+$3.to_i
else
raise "unknown format: #{str.inspect}"
end
end
0984デフォルトの名無しさん
2009/08/07(金) 22:08:42けど、どうしても"hh:mm:ss"の形式を扱わなければならないなら
俺なら983と同じで、正規表現使うかな
def time_to_sec(time) #time: "hh:mm:ss"
if time =~ /(\d\d?)\:(\d\d?)\:(\d\d)/ then
return $1.to_i * 60 * 60 + $2.to_i * 60 + $3.to_i
else
(エラー処理)
end
end
0985デフォルトの名無しさん
2009/08/07(金) 22:11:37これはないだろ{}を使えよ
0986デフォルトの名無しさん
2009/08/07(金) 22:15:04ほんとすみません出直してきます
0987デフォルトの名無しさん
2009/08/07(金) 22:17:49>>984
そんな形で後方参照できるんですね!
ありがとうございます!
0988デフォルトの名無しさん
2009/08/07(金) 22:22:36いやそうでもない。
0989デフォルトの名無しさん
2009/08/07(金) 22:43:31/([01]?[0-9]|2[0-3])\:([0-5]?[0-9])\:([0-5]?[0-9]|60)/
0990デフォルトの名無しさん
2009/08/07(金) 22:53:00/([01]?[0-9]|2[0-3])\:([0-5]?[0-9])\:(60|[0-5]?[0-9])/
0991デフォルトの名無しさん
2009/08/07(金) 22:54:020992デフォルトの名無しさん
2009/08/07(金) 23:09:230993デフォルトの名無しさん
2009/08/07(金) 23:10:53どっかで誰かが読み込んだファイルが組み込みクラスの動作を改変していても気づく方法はないし
標準クラスと同じ名前のクラスを作っても下手したら永遠に気づかない可能性もある
0994デフォルトの名無しさん
2009/08/07(金) 23:19:07で。
ありがとうございました。
0995デフォルトの名無しさん
2009/08/08(土) 00:14:39def time_to_sec(time)
time.split(":").inject(0){|r,e| r=r*60+e.to_i}
end
0996デフォルトの名無しさん
2009/08/08(土) 01:38:50injectを使うのか。面白いな。
こんなのはどうか。入力のチェックは省略。
def time_to_sec(time_str) #time: "hh:mm:ss"
hh, mm, ss = time_str.split(/:/)
return hh.to_i*60*60 + mm.to_i*60 + ss.to_i
end
0997デフォルトの名無しさん
2009/08/08(土) 02:54:08なんだかお手本的だw
せっかくだからライブラリに頼ってみる
Time.parseが使えそうだったけど厳密すぎた
require 'parsedate'
def time_to_sec(time_str) #time: "hh:mm:ss"
ary = ParseDate.parsedate time_str
return ary[3] * 60 * 60 + ary[4] * 60 + ary[5]
end
0998デフォルトの名無しさん
2009/08/08(土) 02:55:54hh, mm, ss = ParseDate.parsedate(time_str)[3..5]
0999デフォルトの名無しさん
2009/08/08(土) 05:29:52あっても便利かな、と思うことは時々ある
1000デフォルトの名無しさん
2009/08/08(土) 05:39:26なんでも屋に安価に売ってることに気づきました
・ 投資を続ければ安い杖から高い杖までずらっと並ぶ
・ 投資を続けるとミドルクラスから高価な杖がメインに並ぶ
どっちになるんでしょう
後者の場合は、安い杖が欲しい場合は「あえて投資しない店」を作る必要がありますよね
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。