1 :
730 :
2008/09/15(月) 17:25:21 プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
【Ruby1.9 は不安定な開発版であり初心者には全く向きません】
【最新安定版の Ruby1.8.7 の使用をお勧めします】
※1.8.7 は1.8 と 1.9 の橋渡しをするためのリリースです。
1.9 の新機能の一部が利用可能なので初学者にお勧めです。
※ただし十分安定しているとは言えないので
プロダクション環境での利用にはお勧めしません。
関連スレやURLは
>>2-8 あたりを見てください。Ruby on Railsの質問は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を読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
2 :
730 :2008/09/15(月) 17:27:18
3 :
730 :2008/09/15(月) 17:31:36
4 :
730 :2008/09/15(月) 17:33:59
5 :
730 :2008/09/15(月) 17:35:01
6 :
730 :2008/09/15(月) 17:36:20
7 :
730 :2008/09/15(月) 17:40:14
1乙 ただいま
スレ立て乙です いきなり質問していいですか? プロパティファイルの扱いのようにメッセージや設定を管理したい場合の 実装について一般的にどうするのかが知りたいです 定数クラスを作るべきかなと考えたんですが パラメータを渡して組み合わせたものをメッセージとして表示させる場合に 警告が出て気になります。みなさんはこういう場合どう実装していますか?
>>9 >定数クラスを作るべきかなと考えたんですが
それでいいと思うけど。Configクラスとか。
>パラメータを渡して組み合わせたものをメッセージとして表示させる場合に
>警告が出て気になります。みなさんはこういう場合どう実装していますか?
どんな警告?
>>10 ああ、それで良かったんですか
警告は定数の値を変更しようとすると出るアレです
>パラメータを渡して組み合わせたものをメッセージとして表示させる場合に と >警告は定数の値を変更しようとすると出る との間に1万光年の距離がある。
>>9 class Config
attr_accessor :host, :user, :password
end
CONFIG = Config.new
と定義しておき、user-config.rb とかなんとかで
CONFIG.host = 'localhost;
CONFIG.user = 'root'
CONFIG.password = 'naisyo'
とかすればいいんじゃね?知らんけど。
最近はYAMLがいいんじゃないかね。
open-uri
open-uriのブロックはわりと無意味
19 :
730 :2008/09/16(火) 15:00:47
質問です ActiveRecordってスレッドセーフなんですか?
>>19 多分違うけど、2.2からはthread safeになるかもしれない
ただRuby1.8だとthread safeにしてもあんまりうれしくない
今、RubyでiPhone用Webメーラーを作りたいんだけど #!/usr/local/bin/ruby require 'net/imap' HOST = "imap.softbank.jp" USERID = "takeshi_h" PASSWORD = "take924" imap = Net::IMAP.new(HOST) imap.login(USERID, PASSWORD) imap.select("INBOX") まで書いてみたもののその先が分からず挫折中・・・ ここからsubjectだけ抜き出すにはどうすればいいのか詳しい人いたら教えてくださいorz
なあ、マシン名、ユーザーID、パスワードはマジなのか? ここまで露骨だと釣りっぽい気もするが。
すみません、書き込んだ瞬間気付いてパス変えました;; 誰かのサンプルを参考にしちゃろうとググってみても全くヒットしないですね・・・ もしかするとRubyでimapっていうのがあまりお勧めできないのかしら 公式マニュアルだけでは何とも理解に時間がかかるので、書籍を買った方が良さそうですね
本なんて買うだけ無駄
IMAPについての知識はあるんだよね
rubyって自分のパスワード2ちゃんに 書くようなマヌケが多いの?
Rubyなんて使ってるとアホになるよ
30 :
デフォルトの名無しさん :2008/09/17(水) 12:42:52
自動プロクシ設定スクリプト環境でのrubygemsの使い方を教えて下さい
パソコンのハードディスクに 「a.txt」 ってファイルを作る。 ↑これってできる?
>>31 File.open("a.txt", "w"){|f|
# ここでゆっくり好きな処理していってね!
}
ruby -rfileutils -e "FileUtils.touch('a.txt')"
ruby -e "(/mswin32|mingw|cygwin/===RUBY_PLATFORM)? `echo off > a.txt` : `touch a.txt`"
手続きに手続きを渡して実行させたいです。 具体的には def funcall(fun,x) return fun(x) end def inc(x) return x+1 end >> funcall(inc,4) #=>5 というような結果が欲しいです。 lambdaやProcで包んで.callすればできるというのはわかるのですが、 もっと簡単に行う方法ってないものでしょうか。
send(:symbol, args...)じゃ簡単にしたことにならないん?
>>33-35 どれが正しいの?
なんでコードだけ張って
日本語の解説が無いの?
どれも正しい、
>>35 はちょっとイタダケナイけど
日本語の解説はリファレンスマニュアルでも読んどけ
>>36 Ruby的には
def funcall(x)
return yield(x)
end
x = 10
funcall(x) { x + 1 }
なんだよね。
でも関数合成的に使うには向いてないかも。
Enumerable#all? と Enumerable#any? について質問です。 要素が空の場合はどういう結果になるのでしょうか? 手元のrubyでは all? が true 、any? が false を返すようですが マニュアルには要素が空の場合については書かれていないので 要素が空の場合は処理を分けた方が無難でしょうか?
>>42 数学的にはその挙動であってるはずだから、マニュアルに書いてなくても、その挙動を信じていいと思うよ
あ、これはマニュアルの不備だね 論理的な動作ではなく、Enumerable の内部処理に依存してる って 1.8 でそれかよ
rubyの勉強をはじめてみたいのですが、 まず、なにとなにとなにを ダウンロードしてインストールすればいいでしょうか? OSはWindowsです
「ruby windows インストール」でぐぐるといいとおもうよ
47 :
sage :2008/09/18(木) 23:41:06
1.8.7にしたら [BUG] object allocation during garbage collection phase などというものがでるようになってしもうた。 GC と win32ole あたりに原因がありそうなんだけど 再現するコンパクトなコードがつくれませんの。
スレッド使ってるとよく出ますな
>43-44 ありがとうございます。そのまま行きます。
FAQだったらすみませんが、質問です。 Rubyのprivateメソッドやインスタンス変数は、Java や C++ のような完全な 隠蔽ではないようです。親クラスのprivateメソッドやインスタンス変数を、 子クラスで知らずに上書きしてしまう可能性があります。 この上書きを避けるには、どのようにしたら良いのでしょうか?親クラスの privateなメソッドやインスタンス変数の名前をすべて把握する以外にないの でしょうか? 特に、トップレベルで関数を定義することが、Objectクラスにメソッドを追加 することと同じなので、気づかずに既存のメソッドを上書きしてしまいそうで 不安です。
開発者同士でしっかり話し合う
52 :
50 :2008/09/19(金) 04:18:50
Rubyの言語仕様や、コーディングの定石による対処法をお願いします。 特に不慣れなフレームワークを使っているときなどに、既存の関数の誤った上 書きによってトラブルが起こるのを避けたいのです。
適当に思いついたのを書いてみる インスタンス変数の上書きは継承ではなく委譲を使うことで回避 フレームワークの都合等で継承せざるを得ない場合は、できるだけ 特殊な変数名を使う > @HOGE @___hoge___ @projNo_hoge ... これらの変数もHashや構造体等で入れ子にする事で定義数を減らす > @projVar[:item] @projVar.item ... メソッドの上書きはデバッグモード(ruby -d)の出力を確認 独自クラス定義前と定義後のclass#methods(等)の結果を比較
Win2000でrubyをはじめたいんだけど、 なんでパッケージが6つもあるの? どれを入れたらいいのか、 わからないじゃん
言語仕様が無いのでいろんなものができてしまいました。
rubyでCGIゲーム作るって イバラの道?
てか
>>50 のやり方はスクリプトの書き方(ライブラリの利用の仕方)としてなんか間違ってね?という気はするんだが
>>56 どんなゲーム作りたいかにもよるが、CGIべったりなPHPとかで作るよりはめんどくさい
>>58 だとしたらCGIゲーム部分(ブラウザで見る部分)はPHPで作って、
専用ブラウザはruby(RPGツクールVX)ってしたほうがいいかな。
でもそれだと2つの言語を覚えないといけないんだよね。
60 :
50 :2008/09/19(金) 11:05:33
>>53 丁寧なご説明、ありがとうございます。ですが、結局「気をつける」以外に無
いようで、少々残念です。
アンダースコアで始まるなどの特殊な変数名は、逆にフレームワーク側も衝突
回避を意図して多用している可能性があり、結局、変数名にプロジェクトごと
のprefixをつけたり、 instance_variables でこまめに確認したりするしかな
いように見えます。
しかしこれでは、グローバル変数しかなかった時代と変わらないと思います。
むしろ、メタプログラミングによって変数名やメソッド名がgrep検索できなく
なったRubyコードでは、名前の衝突の危険性は増しているとすら思います。
PHP5には完全なprivateがあり、Pythonにはマングリングという仕組みがあり
ます。Rubyにそれに類するものがないのは意外でした。
しかしRuby1.9でも変更される予定は無いようなので、実用的にはさほど困ら
ないものなのかもしれません。
ruby -d は知りませんでした。活用させていただきます。
>>57 53さんもおっしゃるとおり、フレームワークに継承を強制される場合をお考え
ください。
http://www.gesource.jp/weblog/archives/2007/06/rubyprotectedjavac.html > フレームワークを使っていると、知らないうちに基底クラスのメソッドをオー
> バーライドしてしまい、予期せぬバグに悩まされたりします。
rubyインストールしてみた。 ActiveRuby1.8.7いれてみた。 次、エディタは何使えばいい?
ActiveRubyっていうのをいれたんだけど、 本当はOne-Click Rubyっていうのもあったの? どっちがよかったの? なんで統一しないの? なんでインストーラーがいっぱいあるの??
One-Click RubyのほうがPATHもセットしてくれるからいいと思う
1.9は大きな変更しないってことになったから
>>63 ActiveScriptRubyは元々の目的が違うからじゃないかな
そもそも、本来は初心者向けのセットじゃないし
>>62 RDEいれてみた。abcって表示できた。
これでいいのかな。
70 :
50 :2008/09/19(金) 12:27:01
>>65 ありがとうございます。なるほど、問題視はされているのですね。
私自身はRailsを業務で半年ほど使った経験があるのですが、クラス継承にお
いて名前空間が独立していないことを途中で知って、たいへん怖くなりました。
自分の書いてきたコードが安全かどうか、確証がないと思ったからです。
しかし、「初めてのRuby」にはこのことは何も書いてありませんでした。ネッ
トでもそれほど多くの声は見つかりません。Ruby コミュニティでこれはあま
り重大な問題だとは考えられていないということなのでしょうか?
しかし、
>>53 さんのおっしゃるようなことに絶えず注意し続けなければならな
いなら、コーディングに手間がかかって大変だと思うのですが。
ほかにも、クラスが通常はオープンで、requireによってどんどん書き換えら
れていくなど、Rubyは名前空間についてはきわめて楽観的な言語だという印象
があります。できる限り名前空間を独立させるPythonとは、まったく逆の方針
に見えて興味深いです。
>>69 そのテキストエリアで右クリック - [設定] - [フォント]を適当にいじる
大きくするなり、変えるなり
>>71 Rubyの数学モジュールは存在が適当
マトモな人は使わない
>>70 実行時にほぼ全てをevalで改変できるのはRubyの特徴
だからこそ、初期モックアップに向いていて、大規模開発に向かない
「○○ができる」という長所と、「○○ができてしまう」という短所に関しては、 どうしても共存していく以外無いものなぁ。
>>74 だよなあ
まあ、制御できたら用途によっては便利だろうなとは思う
というより、そういうのは単にそのフレームワークが行儀悪くてマニュアル不足で邪悪なだけなのでは…
「普通」は、トップレベルにメソッドを定義したりしないし、自身を継承させることを是としない
>自身を継承させることを是としない どんなアホ設計だよ
>>76 > 自身を継承させることを是としない
あ、やっぱそうだよね、「カスタマイズは継承で」っていうモジュール設計はよくないよな
>>73 実用性の面ではそんな雰囲気を感じるけど、
まあ検討材料としてはw
c++のほうがまともだな
>>73 別に誰も損しないんだから、もうちょっと良くなってもいいのにね、あれ
rubyをインストールして、 エディタも動くようになったんで、 初心者向けのWEB上の入門サイトを 読みたいんだけど、どれを読めばいい?
RDEで「こんにちは」って打ったら、 めちゃめちゃに文字化けするんですけど?? それでいて、実行すると、ちゃんと表示されるんですけど??
RDEってもしかしてPerlでも使えるの?
>>87-88 聞くよりもまず自分で模索するようにしてください
文字化けはたぶんエディタのフォント設定のせい。perlでも一応使える
>>89 perlで使うときは、perlのexeはどこに設定するの?
もしかして、rubyのexeのところにいれるの?
キモー
長い行で改行入っちゃうときはどうしたらいいの? print "a";
RGSS2なんですけど、requireが使えなくて、 必ず、 Kernel.require("C:\\1.rb") とかって書かないといけないんです。それで、 open-uri.rbを開くと、その中で、また require uri とかって書いてあるじゃないですか。またrequireです。 ここでエラーが出るので(requierは使えないよっていう) すべてのライブラリの中のrequireをKernel.requireに 置き換えないといけないのかな、、、って今思ってますけど、 どう思いますか。
RGSSは内部動作が独自改変されたRubyなので、普通のRubyの知識では太刀打ちできない RGSSのマニュアルなりなんなりを読んでくれ
98 :
21 :2008/09/19(金) 20:33:30
出張のため返信が遅れてしまいすみません
>>25 おお!ありがとうございます!
しかし見てみましたがかなり複雑な感じなんですね・・・
やっぱ色んな状況を想定したり文字コードなんかの処理等でこんなになってしまうんでしょうか
とりあえず俺のような初心者には無理っぽいですのでiPhoneで同じようなこと考えている人がいないか聞いてみることにします
ありがとうございましたおまいら
>>96 def require(file)
Kernel.require file
end
ってしておけばKernelいらないと思う。
あとRGSSなら同人ゲ板のツクール質問スレのほうがよさそう。
100 :
デフォルトの名無しさん :2008/09/19(金) 21:21:47
windowsでrailsをテスト的に使って見ていますが、 "ruby script/generate ..."とか"rake db:migrate ..." とかスクリプトを実行すると、とんでもなく長い間待たされます。 どうしてこんなに遅いんでしょうか? Core2Duoを使っていますが、20秒以上も待たされるので。。。。 何かよい解決策はないでしょうか?
>>100 windowsとrubyの相性が悪いから。
ruby script/generate をすると、
1. 新しいrubyプロセスを起動し、
2. railsと関連ライブラリをすべて読み込んでから
3. scaffoldを実行するから、
そりゃ遅い。とくに 2. が。
>>94 明らかに文が終わらないことが分かる場合、たとえば
開いたカッコがまだ閉じてないとか、二項演算子の第2項をまだ書いてないとか
の場合は語句(トークン)の間で行を変えていい。
そうでない場合(そこまでが文として正当に解釈しうる場合)は
¥ (円記号またはバックスラッシュ)を書いてから改行。
>>98 >>21 のあとに
require 'kconv'
fetch_result = imap.fetch(1..-1, "BODY[HEADER.FIELDS (SUBJECT)]")
print fetch_result[0].attr["BODY[HEADER.FIELDS (SUBJECT)]"].tosjis
ってしたら一通目のメールの件名がSJISで表示された。
公式マニュアル内をsubjectで検索かけたらすぐわかったので
落ち着いてじっくり読めば大抵のことは解決するのでは。
つーかnet/imapの本なんてなくね?
>
>>103 そもそもIMAPについての知識がロクに無いんだろ
IMAPについての知識があるならnet/imapだけでできるはず
そういう場合は「めんどくさいけどどうすればいいですか」という聞き方になる
メール関連は簡単に扱って欲しくないから、これくらいでいいと思う
105 :
デフォルトの名無しさん :2008/09/20(土) 01:17:39
>>101 開発に使っているマシンは圧倒的にwinが多い
そのwinでまともに動かないrailsは、
やはり個人の趣味サイト作りでしか使ないのか?
海外では非常によく利用されているpythonのdjangoは、
winでもストレス無く使える。
運用にwinなんて使わないだろ?
>>105 >開発に使っているマシンは圧倒的にwinが多い
Railsだと、世界的にはMacかもしれんぞ。(要調査)
108 :
デフォルトの名無しさん :2008/09/20(土) 01:59:53
>>107 わざわざRailsを使うためにMacを買うか?
しかも会社ならなおさらだ。
だからRailsは圧倒的に個人しか使わないんだろうー
やはりちょっとしたサイトはPHP、
中規規模以上はJavaに落ち着いているんじゃない。
個人 → rails 数人 → PHP 中規模 → JAVA
>>105 >開発に使っているマシンは圧倒的にwinが多い
Rails使いはMacのほうが多い
RailsConf行ってみな、冗談じゃなくてほぼ全員Macだから。
いまだWindows使っているのはJava屋さんだろう
MacBookとかよくあんな重くて高いマシン持ち歩けるよな・・・ 無印 2.27kg ¥129,800〜¥179,800 ←重すぎ! Air 1.36kg ¥229,800〜¥325,400 ←高すぎ! Pro 2.45kg〜3.08kg ¥249,800〜¥329,800 ←重すぎ高すぎ! もっと実用的なモデル出してくれたら考えるわ
RGSSなんだけど、 ツクールXPがRGSS1で ツクールVXがRGSS2なのね。 そんで、RGSS1はrequire の使用がOKで、 RGSS2はKernel.require って書かないとだめなのね。 そんで、rubyに付属のライブラリ見ると、 中味が全部、require 'uri' こういう形式で書いてあるのね。 そんで、そのままRGSSで書くと、エラーになるの。
require 'uri' ←(1) ↑この形式だとエラーが出る。 require("C:\\uri.rb") ←(2) ↑この形式だとエラーが出ない。 絶対指定だとエラーがでない。 相対指定?だとエラーがでる。 (2)で書いても、その1行だけはエラーにならないけど、 その行で呼び出したライブラリの中味は (1)の形式で書いてあるので、そこでエラーになる。 どうしたらいいかな?
もうプログラミング辞めたほうがいいな
RGSSでのライブラリrequireの方法 $: << File.expand_path(".") require "ファイル名" Game.exeを起動したディレクトリにあるライブラリをロードする "."を相対パスに変更すれば、好きなディレクトリを指定できる ↑あとこれをよくみかけるんだが、 どういうことなんだろう??
>>112 上でも書いている人がいるが、RGSSはRubyを改造したもので、
改造部分に関するエラーは俺たちには全くわからない
エラーが出る理由も、わざわざそうしている理由もわからない
売り物なんだし、改造した人に聞け
RDE 出力をDOSプロンプトにするのってどうやるの?
puts 'abcde ' * 20000 たかがこれだけの出力するのに何秒かかってんだよ perlだったら3秒で出るのに。
Rubyに早さを求めるやつなんて初めて見た
>>119 まあそのへんはコマンドプロンプトに文句言ってくれ
Rubyの処理自体は3秒くらいで終わってる
RDEで出力を下でなくて DOSプロンプトに出すにはどうしたらいいの?
Windowsではirbとかでもイライラするな irbは返り値の表示の設定ができるが
最初からDOSプロンプト立ち上げて、 そこから直接コマンドラインで実行したら 3秒でできた。 でもRDEから実行したいんよ。 どうしたらいいかな? DOSプロンプトに出力する方法ね。
>>110 東京Ruby会議で「主にMac使ってる人」って質問で6〜7割手をあげてたような気が
MacというかMacOSXとUNIX系開発言語(って何?)との親和性の高さはガチ Windowsでもプログラミング環境エディションとか出せばいいのに
まあみんなカッコよく安楽にプログラミングしたいんだよ でなけりゃあどべ使い以外にMacが売れる理由がないし、Emacsが死なない理由がないし、Rubyが支持される理由もない
TextMateだっけ?あれが人気あるらしいね。開発に。 Windowsにも E Text EditorとかIntypeとしてクローン作られてるっぽいけど。
>>128 クローンはどいつもこいつもシェアウェアでな
いや、別にいいんだが、入金めんどい
成功したら安価版とか作ってくれ
日本はベクターにないと買うの面倒でかなわん
str = 'hoge' これを説明するのって、「ローカル変数 str に 文字列 'hoge' を 代 入 す る 」 でいい? 厳密には代入ではなくて他の表現が妥当だとかそういうのはない?
…めんどくさいので代入でOK 最近の議論とか空気とかを元にしてる初めてのRubyではどう書いてある? とりあえず、誰も文句は言わないと思うよ 束縛するとか言う言い方してる奴がいたら鼻糞ほじっとけ
オブジェクトとインスタンスってRubyではどう使い分けますか?
>>134 データと名称の関連付け。なまえをつけること。Naming convention。
Rubyでは初期化宣言と同時に行われるのでちょっとわかりにくい。
というのでどう
なら「名前をつける」って説明の方が通りがいいんじゃねえか、とおもた。
RDEで実行を途中で止めるのってどうすればいいの? ctrl+C押しても止まんないんだけど。
止めるボタンあります
緑△アイコンの実行ボタンの隣に、 □アイコンの強制終了ってあるでしょ
他の言語で代入という概念を知ってるなら代入でいいだろ。 a = Hoge みたいな表現が、名前付けなのは Haskell とかだけど、 そっちとは明らかに違うし。
RDEはうだつが上がらないし RDTは糞重いし もうEmacsしかないじゃないか!
>>133 クラスをインスタンス化したものがインスタンス
NetBeans使えば。
NetBeans以上に重いものなんてこの宇宙に存在するの?
責任,ですかね.
>140 他の言語っつってもCの代入とは明らかに違うだろうに。 Haskellの代入とも違うけどさ。
str = 'hoge' のように代入された状態で str を使うと 'hoge' という情報を取り出せるという点では どの言語もだいたい一緒だわな
Rubyだけしか使えないのはかっこ悪いのでphpを勉強する if strpos('ABCDE', 'ABC'){ echo 'true'; }else{ echo 'false'; }; とか書いてみたんだが、どうやらelse部が実行されるらしい strposは'ABCDE'の中から'ABC'の位置を探して返すんだが、整数の 0 が返ってて、0 はPHPでは偽なんだそうな なんとなくがっかりさんだ というか、Perl4 を勉強してたころは真偽判定ってどう書いてたんだっけ、覚えてないな
…そういうのはチラ裏スレでやれ Ruby は nil や false が返って来ない限り真だからな 真偽判定はどんどん書けて気楽だ
そういやずっと前から思ってたんだけど、Perl とかで整数の 0(や文字の "0")が真偽値の偽とみなされるようになったのってなんで? ヌル文字とかの関係? 関係ないよね?
スクリプト言語の初心者スレっぽくてよろしい
>>150 0 を偽にしなかったら 1 を偽にしなきゃいけなくなるじゃないか(-1 でも可)
さすがRubyスレ 知能が低い
>>150 Cから発想すればふつー0が偽になるんだろう。
CにもPerlにもboolean型は無いしな。
Cで関数のポインタを扱うのとさして変わらない。
>>155 定義された場所のスコープ(Binding)を受け継いでいるところ
157 :
156 :2008/09/21(日) 08:05:56
アンカ間違えだけど、指摘と受け取ってもらっても結構 ×155 ○154
>>154 手続きオブジェクトは原理的にはサブルーチン、雰囲気では関数ポインタでおk
オブジェクトになってしまってるとこと、
>>156 の言うように定義時の環境が保存されてるとこが一般的なものとは違うけど
サブルーチンオブジェクトと呼んでもよかったシロモノで、Rubyではたまたま手続きと呼んでるだけに過ぎない
プロシージャ(Proc-edure)とサブルーチンに決定的な違いがないのと同じ
>>146 > Cの代入とは明らかに違うだろうに。
どう違うの?
rubyのxamppはどこにあるの? rubyのCGIとか、railsとかやってみたいんだけど。
>159 根本的には同じデータのコピーなんだが Rubyは基本的に「オブジェクトへの参照」を扱うため 代入が基本的に「参照のコピー」になるのに対し C/C++は参照というクッションが必ずしも存在せず いきなり「オブジェクトそのもの」を扱うことが出来てしまうため (参照を扱うなら明示的に参照を扱うよう書く必要がある) 代入が「実体のコピー」(Rubyでいうa=b.dupに近い…がこれも同じではないな)になることが普通にある
>>162 構造体(オブジェクト)のコピーが起こること、を問題とするわけね。
変数の実体が値である(C/C++)か、変数の実体が参照である(Ruby/Java/Python...)か、
という点が違いであって、名前に実体を関連付ける、という「代入」で問題ないんじゃないかと。
>>150 >そういやずっと前から思ってたんだけど、Perl とかで整数の 0(や文字の "0")が真偽値の偽とみなされるようになったのってなんで?
>ヌル文字とかの関係? 関係ないよね?
Perlは考え方としてCの延長にあるから、booleanがない(つまりfalseがない)からかわりに 0 を偽としている。
RubyはLispやSmalltalkに影響を受けているから、nilとfalseだけを偽にしている。
nullじゃなくてnilってところがポイント。
0 が選ばれた理由にはなってないな ビットの 0 と 1 で 0 が negative だったから、が答かと
"0" が偽である理由としてはちょい苦しいかもな "0" が 0 に同一視されてると見るか
perlとかphpは型が曖昧だからまあそんな挙動もするでしょう
あっちの言語って型付けが弱いんじゃなかったっけ 自動変換されるという便利だが怖い仕様・・・・・・
170 :
730 :2008/09/21(日) 13:40:32
perlもphpも糞ですよ
>>148 めんどくさいよな
というかRuby(が参考にしたLisp系列)が条件文のこと優先して動作を作ったというのが正しいのかも
0が偽のくせに「真としての0」が返って来る関数があるというのがまあ変といえば変 変態だったら誉め甲斐もあるんだが、ただ変なだけでは…
まあ便利なんだけどねPHP
それは認めるし、普及言語はどれも大なり小なり批判されるものだが この挙動は……
他の言語を学ぶという姿勢は賞賛に値する Rubyしかできないとかマジ生ゴミ
>>174 うん、だから、偽といえるかどうかではなく、そもそも型が同じであるかどうかを一緒にチェックする
PHP の ==(否定は!=) での比較は単に値が等しいことをチェックするが、 === は型も等しいことをチェックする(否定は!==)
>>148 でしたい処理は
if (strpos('ABCDE', 'ABC') !== FALSE){
echo 'matched';
}else{
echo 'unmatched';
};
とか書くのが素直
!= で比較すると 0 が整数であるという情報がチェックに用いられないので常に結果が偽になってしまう
このへんは strpos のマニュアルにもサンプルコードつきで警告として載ってたりする
ttp://jp2.php.net/strpos 個人的には Ruby の gsub の挙動が極悪なのと似たような構造上欠陥じゃないかと思う
あー、gsubも最初に用意されてる引数の構文の挙動が気難しくてブロックが推奨だったな
まぁ値が数値型にも文字列型にもなるのはawkからの伝統だしな
>>163 ありがとう。できたよ。
クッキングなんとかがうごいた。
で、次、これの開発ってどうやればいいの?
railsのIDEは何を使えばいいの?
いい加減、本買うかぐぐるかしようぜ。
おっと質問の仕方が悪かったかな。 数あるIDEの中で、どれを使えばいいのかということ。
機能的にはNetBeandsがかなりがんばってる感じはするがどの程度実用に耐えるかは知らん。
どうせ補間とか望めないからどれ使っても大して変わらん
Emacsのような単なる単語文字列としての略語展開が一番マシという困った結論に…
NBのコード補完はかなり強力。いつまでもema糞なんぞにしがみついてないで一度試してみるといい。
NetBeansの補完は、まあ頑張ってるほうだとは思った 多少いい加減なのは仕方ない
190 :
730 :2008/09/22(月) 11:01:46
関数とかクラスが畳めるエディタが良いな。
>>190 関数って何ですか???
実際上はEclipse+プラグインかNetBeansかEmacs/Vimくらいしかないんだから順に試しとけ
Javaの実行環境入れるのめんどくさい?もんくゆーな
CPUが2Ghz程度しかない前時代のマシンではロクに動作しないので新しいマシン買うこと
193 :
730 :2008/09/22(月) 11:09:54
>>191 > 関数って何ですか???
まだそんなこと言ってるんですかw
関数と言い張りますよ。
別に言い張ってて構わないと思うよ Rubyの用語集にも書いてあるくらいだから
>>193 クラスに関数があるのか?
あれは多くの言語で「いや、これを関数って呼ぶのはなんか違うな」と判断されてメソッドと呼ばれているものだと思うが
仲間外れはC++くらい?
C++はメンバ関数だっけか ともあれ、Ruby学ぶ気ないんだなと思われるのは必定 それによって起こる結果については暴れないことだ
NetBeansとかは最初に何かするときに10秒くらいかかるのが切ない 同じことを2度目にするときは受忍範囲内なんだが
198 :
730 :2008/09/22(月) 11:35:27
わかった。 副作用があるものは関数とは呼べないのは同意だけど、 だとしたらプロシージャと呼ぶべき。 それに、メソッドという呼び方をすることがRubyを学ぶことにつながるとは言えない。 俺はもうRubyの大体のことはわかったし、 実際にRubyを使って新しいWEBサービスを稼働させている。
>>198 なるほど、では君は初心者ではない
このスレから卒業し早々に立ち去りたまえ
ここは純技術的な質問をするスレであって実のところレベルの高低は問わないのさ。
>>197 arr = Array.new
arr.m
ここで「arrはArrayだからArray#mapでmap」という判断をして欲しい所存
>>201 補完試すたびにソース全体をevalしまくりだな
>>195 やっぱりAdaとかSimulaとか、あっちのほうの言語じゃ
メソッドは何が起源なんだろうか。Smaltalkとか?
>>201 え、そういう状況に即した判断をするのがIDEの便利なとこなんじゃないの?
そこで「mのつくメソッド全部から選んでね」と表示するんじゃEmacsと変わらんぞ
205 :
730 :2008/09/22(月) 12:02:49
>>203 アランケイじゃない?
アランケイごときがsmalltalkを考えて、言語をわかりやすく庶民(笑)に伝えるために
オブジェクトにメッセージを送るという考えかたで説明したのが起源じゃないかな。
で、オブジェクトにメッセージを送る「方法」をそのままメソッドと呼んだだけ。
だから、別に「メソッド」は学術的に意味がある言葉ではない。
206 :
730 :2008/09/22(月) 12:12:21
アランケイがもてはやされるようになったのはC++が出てから。 それまでは普通の胡散臭いタイプの学者のおっちゃん。 ただ単に運良くオブジェクト指向が流行ったからアランケイがもてはやされるようになったというだけ。 オブジェクト指向は流行るべくして流行ったというわけでもないから、 本当に運が良かっただけと言うべきだね。 アランケイの言葉を未だに使い続ける理由はそれだけだね。
はいはい初心者スレでつまんない自説自慢はやめてね
アランケイがもてはやされるようになったのはMacが出てから。 それまでは普通の胡散臭いタイプの学者のおっちゃん。 ただ単に運良くGUIが知られてアランケイがもてはやされるようになったというだけ。 SmalltalkタイプのGUIは流行るべくして流行ったというわけでもないから、 (ジョブズがたまたまAltoで動くSmalltalkシステム=暫定Dynabookを見て感動しただけで、 Alto向けにはSmalltalk以外にもStarとかのいろんなタイプのGUIがあったから) 本当に運が良かっただけと言うべきだね。 アランケイの言葉を未だに使い続ける理由はそれだけだね。
209 :
730 :2008/09/22(月) 12:37:54
ともかく、メソッドをプロシージャと呼ぼうが、C言語的な意味で関数と呼ぼうが問題ないわけ。 メソッドと言わないと通じないというわけでもないしね。
>>209 どう呼んでもいいのならメソッドと呼べ
Rubyではそれをメソッドと呼ぶ
うむ、結論が出たな
>>210 どう呼んでも良いことを認めたら、それこそ自由に呼んで良いんじゃないの?w
じゃあ俺は各ソースファイルのことをモジュールと呼ぶことにしよう どう呼んでも問題ないんだよな? …とまあ、そういう話があるので 「Rubyで def や define_method で定義するのは全てメソッド 一部メソッドは関数と呼ばれることがあるが それらも全てメソッドであることをお忘れなく」 程度にしておこうな まあ、モジュールほど紛らわしい単語ではないから 関数と書かれていても解るが
214 :
730 :2008/09/22(月) 18:30:43
うざいから消えてくれないかな
215 :
730 :2008/09/22(月) 18:31:48
おまえがな
これで満足か
自覚してんじゃんwww
netbeansいれてみたんだが。 新規railsプロジェクト、で、 サーバーのところで webrickってのしか選べないんだが、 これってなんなの? WEBサーバーって言ったらアパッチじゃないの?
netbeansいれてみたんだが。 すでにinstantrailsで、railsはインストール済みなのだが、 「railsがインストールされていません」 というメッセージが出てきて、勝手にまたrailsをインストール された。つまり、今パソコンにrailsが2つ入っているわけで 無駄このうえない。どういうこと? instantrailsのrailsと、 netbeansのrailsと、使い分けろってこと?
「実行」ってやったら勝手に ブラウザ起動して、 localhost:3000がアドレスに入って、 サンプルのページが出てきたんだが、 これってもしかして、netbeans起動中は 勝手にWEBサーバーも起動しているということか?
そろそろ解決してる頃だな 自分で調べりゃ早いのに
RadRailsの右下ペインの「Servers」を選択して 「AddressBookServer」を起動します。 ステータスが「Started」になれば、Web サーバの起動は完了です。 ↑こう書いてあるのですが、 ステータスが starting... で10秒たって、 stopped になってしまいます。 なんでサーバーがスタートしないんでしょうか?
うごいたーーーーーーーーーーーーーーー ファイヤーウオールで アプトナの通信をブロックしてたのが 原因だった アプトナの通信を 「すべて許可する」 にしたら、マニュアルの通りに動いたーーーーーーーー ガオーーーーーーーーーーーーーー
なんでwebrickとモングレの2つの サーバーがあるの?
ルービーっておかしいわ まずインストーラーの段階からして3つあるし、 エディターは3つあるし IDEは3つあるし サーバーは3つあるしで、 いいかげんにしろっての。
228 :
50 :2008/09/24(水) 14:12:41
すみません。大変遅くなりました。都合でネットにアクセスできなかったもの
で。もう少しここで話をさせてください。
>>71 > local visibilityとかいう新機能とは違うのかな。
ちょっと調べてみたのですが、2006年ごろで話は止まっているのではないでしょ
うか?
>>74-76 すみませんが、私が問題視しているのはevalではないのです。evalを持つ言語、
オープンクラスを持つ言語に共通する点ではなく、Ruby固有のクラス実装を私
は問題視しています。
具体的には、以下のようなことです。
・あるクラスを継承するときに、親クラス名.methods などを頻繁に実行して、
存在するすべてのメソッドやインスタンス変数の名前を確認して、衝突を避け
なければならない。
・あるクラス内だけで使う、公開しないツールのようなメソッドを作れるよう
な名前空間がどこにもない。
これらを解決する方法が、コーディング規約によるプレフィックスのみという
のは、ずいぶん原始的で、JavaやC++に慣れた人なら不自由を感じると思うの
ですが。しかもRuby の大クラス主義で、既存のプロパティの数は膨大です。
そこで、皆さんがどのように感じておられるのか、お聞きしてみたいと思いま
したが、このスレの反応を見てもやはりあまり問題視されていないようで、こ
れはやはり意外でした。
229 :
50 :2008/09/24(水) 14:13:55
>>76-78 私が言及していた、継承を必要とするフレームワークとは Rails のことです。
継承が危険だとはよく言われますが、、継承を多用しなければ Railsの簡潔さ
はかなり損なわれたことでしょう。
継承そのものが悪という視点には、あまり賛同できません。例えばプロトタイ
プベースの言語なら、委譲でも同様の問題が起こるからです。継承にせよ委譲
にせよ、他のオブジェクトへのプロパティの探索が自動的に行われる仕組みが
ある限り、この問題は必ず起こるでしょう。それは簡潔さとのトレードオフです。
しかしここでは、継承の善悪にはこれ以上踏み入りたくないのです。私は、
Rubyにおいては継承がいっそう危険になっているという点に、話を絞りたいです。
そもそも、継承の良し悪しや好き嫌いにかかわらず、私たちは業務でRailsを使
わざるを得ません。
>>76 トップレベルにメソッド定義というのは、フレームワークが強制するという話
ではなく、初心者プログラマが知らずに作ってしまう危険性を言っています。
トップレベルの関数がObjectクラスのprivateメソッドだというのは確かにう
まい仕組みだと思いますが、これを知っている人は、Ruby利用者の半数以下だ
と思います。これは直感的に予想しづらい、危険な仕様ではないでしょうか?
何も知らないでトップレベルに def object_id; 0 end などと書けば、すべて
のオブジェクトインスタンスのidが0になってしまうのです。そしてこれを書
くことは、プロジェクトに関わるどの人間にも可能なのです。
230 :
50 :2008/09/24(水) 14:15:25
最後に、自分の印象ですが、 C++ ... アクセス、改変してはいけないものには、ユーザがアクセスする方法 が決して存在しない。 Python, Java ... アクセス、改変してはいけないものは、ユーザが意図しな ければアクセス、改変されないが、意図すれば誰もが自由にアクセス、改変できる。 Ruby ... アクセス、改変してはいけないものを保護する方法が乏しく、ユー ザが意図せずにアクセス、改変してしまうことがある。 つまり、私が問題にしているのは、アクセス、改変が可能かどうかではなく、 それを意図していないのに誤ってアクセス、改変してしまう危険についてなの です。 この二者は、Rubyはフレキシブルな言語だという主張によって、しばしば混同 されがちだと思います。フレキシブルなのは結構ですが、自分の足を撃ちたく はないのです。 以上です。長々と失礼しました。
>>230 あなたはC++、Python、Javaを10年くらいやりこんで、
それで今回、rubyに入ってきたような人なの?
かなりプロフェッショナルな印象を受けるが。
>>228-230 主張はだいたい合ってるし、正しい。
ただ、この問題がRubyで簡単に解決できるかというと、たぶん実装の都合で難しいんじゃないかな。
Pythonのmanglingだっけ、あれが欲しいとは思うんだけど、class_evalとかinstance_evalとかあるRubyでPythonと同じように実装可能かと言われると、分かんない。
ただ、manglingは(不細工ではあるけど)手動でできるので、mangling程度の隠蔽でよければ、手動で頑張ればできるということになる。手動だとほんと不細工だけど。
あとは、Rubyに限らずスクリプト系はどれもそうだけど、「問題があったら直せばいい」という精神をもつしかないと思うよ。
たしかにかぶる可能性はあるけど、そんなにしょっちゅうかぶることはないし、かぶったらかぶったで直せばいい。そんな感じ。
質問です。
rubyを始めようと
ttp://rubyforge.org/frs/?group_id=167&release_id=26150 からデスクトップにダウンロードしようとしたところ、99%でなぜか止まってしまいます。
cpuが100%になり、ブラウザが固まってしまいます。
186-26を落とそうとしても止まって「応答なし」の状態になってしまいます。
ダウンロードツールでもツールが固まってしまいました。
試しに他のサイトでダウンロードを試すと出来ました。
ruby186-27_rc.exeが取れません。
ブラウザはsleipnir2.8 OSはxp sp3です。
これは僕のPCの問題なのでしょうか?よろしくお願いします。
RoRってwebrickを作動させておけば アパッチいらないんじゃん。 なんでアパッチインストールさせたのさ?
>>233 exeファイルをダウンロードしたから、それをアンチウィルスソフトがチェックしているんじゃない?
アンチウィルスソフトを一時的に無効にしてみるとか。
>>227 Java の IDE とアプリケーションサーバがいくつあるか調べてから文句言ってくれ。
>>229 以下を守れば大丈夫。
・自分の足を打ちがちな馬鹿にはコードを触らせない
・Railsのフレームワーク部分のコードは一通り読む
「エディターが3つ」の意味がわからない
音声データをデジタル化するときに 周波数16kHzだから ".unpack("s*") をつかって数値化はできたんだけど 数値が25000くらいあって。 その単語は1.3秒くらいなんだけど 単位がわからなくて。わかるひといますか?
> 周波数16kHzだから.unpack("s*") をつかって数値化 日本語でおk てか周波数と整数のBit数ってなんか関係あるん? 書いててなんかありそうな気もしてきたが、たぶん関係ないんじゃね? というかそういうバイナリ扱うのはRubyは不得意なんだが外部プログラム使えないのか
まあこれ完全に専門的な内容だから 知らない人かなり多いのかな。。。
まあRubyをメインにやるような人はふつう知らない 外部プログラム使えというアドバイスはけっこう正しいかと
デジタル化されてんじゃん
このデータをフーリエ変換しないといけないんだけど 単位がわからなくてはね。
246 :
デフォルトの名無しさん :2008/09/24(水) 21:49:30
240はアホすぎて自分が何をやりたいのか説明できてない
音声データから 特徴抽出したい。 これは普通ツールによって行われるが 今自分で作ってる 以上
247のスレで聞くからもういいです。 アホ扱いされるのなら
まあ Ruby はあんま関係ないな そのファイル形式の構造の問題だ
Rubyとは関係ないかもしれないのですが、Rubyで実装しているのでここで質問させてください。 普通、ウェブアプリで検索とかのリクエスト送って、リクエストの結果を 送ったページと同じページに表示させる場合、リクエストを送るのは同じページのメソッドにしたほうがいい? なんか一緒に作ってる人が Aページ⇒Bメソッド⇒Aページのメソッドって感じにしててどうなのかな?って思ったんです なんかわかりにくくてごめん
253 :
50 :2008/09/24(水) 22:58:28
>>231 プロフェッショナルとは恥ずかしくてとても言えませんが、経歴と年数はだい
たい当たっています。
>>232 大変参考になりました。ありがとうございます。
instance_eval等ですか。なるほどこれがあると、マングリングとの両立は難
しい気がします。念のため確認しましたが、Pythonには instance_evalに当た
る機能はないようです。
内部プロパティ名のコーディング規約は、なるほど手動マングリングが、不恰
好ですが現実的ですね。
最後に、名前は早々衝突しないし、もし衝突したなら直すというのが、Rubyコ
ミュニティ(というかスクリプティング界隈)の精神なのですね。すると自動
テストが、推奨というより必須になるわけですね。当たり前のことですが、改
めて目からうろこが落ちました。
質問してよかったです。ありがとうございました。
Rubyとは関係ないかもしれないのですが、Rubyで実装しているのでここで質問させてください。 普通、ウェブアプリで検索とかのリクエスト送って、リクエストの結果を 送ったページと同じページに表示させる場合、リクエストを送るのは同じページのメソッドにしたほうがいい? なんか一緒に作ってる人が Aページ⇒Bメソッド⇒Aページのメソッドって感じにしててどうなのかな?って思ったんです なんかわかりにくくてごめん
2回送ってしまった、スマン
>>254 Ruby関係ないしそもそもそのへんは設計どうでもいいからわかりやすいほうにしろ
メソッドって言葉の使い方間違ってねーか?まあいいや
>>246 どっちかというと基本から何をどうすればいいのか分かっていないのでは。
>>240 音声圧縮についてのことでもなさそうだし、普通のPCMの話だとおもうけど
音声がどのようにしてデジタルに符号化されているのかを理解していれば、
単位が分からんとか言い出すはずがないんだが。
データサイズ[bit] = 量子化ビット数[bit] * サンプリング周波数[Hz] * 時間[s] * チャンネル数
ここまではRubyと何の関係もないのでもう一つ言っとくと、packでの"s"は
その環境のエンディアンに依存しているので、よそでは動かないかもよ。
ちゃんとフォーマットにあわせて"n"とか"v"を使うように。
>>253 >最後に、名前は早々衝突しないし、もし衝突したなら直すというのが、Rubyコ
>ミュニティ(というかスクリプティング界隈)の精神なのですね。すると自動
>テストが、推奨というより必須になるわけですね。当たり前のことですが、改
>めて目からうろこが落ちました。
いちおう補足しておくけど、エラーはテストで見つかるけど、もしコンパイル時に見つかるならそれにこしたことはない。そっちのほうが作業効率いいしね。
ただ、実はコンパイル時の検査は必須ではなく、テストで見つけるというアプローチでも十分実用的というだけ。
いままで「コンパイル時にできるだけエラーを見つけないといけない」「名前の衝突による思わぬバグを防ぐような仕組みを用意してないといけない」と
思いこんでいたんだけど、実はそうでもなかったよ、慣れればなんとかなるよ、という経験をしてほしいなー
というおっさんのひとりごとでした。
>>254 >普通、ウェブアプリで検索とかのリクエスト送って、リクエストの結果を
>送ったページと同じページに表示させる場合、リクエストを送るのは同じページのメソッドにしたほうがいい?
送信先は同じメソッド、ただし中身は別メソッドとかでいいんじゃないの?
def index
if params['q'] # q パラメータがあれば検索結果を表示
show_search_result()
else
show_items()
end
end
とか
def index
if ENV['REQUEST_METHOD'] == 'POST' # postメソッドなら検索結果を表示
show_search_result()
else
show_items()
end
end
とか。
しかし日本語下手だな。なんとかしてくれ。
>258 ある程度慣れた人だと、shebang や require 以外で最初に書くのは module になる気がする 要るか判らんが、とりあえず空間切っておくか、みたいな
アホばかりでやんなっちゃうよ
表示端末の文字エンコードを自動判別して変換することはできますか? ファイル内容を puts した瞬間に 「しまったこれShiftJISかようわ矢印キー効かね」 というようなことを大多数の端末で避けたいです
>>263 ENV に情報がなければ無理だろな
Windowsのコマンドプロンプトでは特に情報がないようだ
あー、スクリプト例で文字列を puts とかさせるときちょっと困るね toeuc 決め打ちしておくのも変だし
rubygemで特定のパッケージをupdate対象から外すことはできる? 要はholdしたいんだけど
267 :
デフォルトの名無しさん :2008/09/27(土) 01:13:27
TkcItem.newはrequire 'tk' だけでできるのに TkcItemのサブクラスを作ろうとするとrequire 'tk/canvas'が必要になるのはなぜ?
268 :
デフォルトの名無しさん :2008/09/28(日) 03:56:41
rubyをつかって刑務所からプログラミングしてるんですか?
Rubyでバイナリを16進数文字列に変換するのはどうしたらできますか。 packとかunpackがわかりくすぎて、理解できません
packとか使え packはC参考にしれ
open(ARGV[0], 'rb'){|f| while bin = f.read(16) bin.each_byte{|byte| print '%02X ' % byte } puts end }
class XY attr_reader :x, :y def xy=(x, y=nil) @x = x @y = y || x end end a = XY.new a.xy=(1, 2) というのを実行すると、 SyntaxError: compile error syntax error, unexpected ',', expecting ')' となってしまいます。 普通にメソッド呼んでいるだけなんですが、何が悪いんでしょうか。。 =のつかないメソッド名だと大丈夫なんですが…
RoR動くレンタルサーバーって 高いところしかないの? さくらのライトプランで動かないの? なるべく月500円以下のところを 紹介してほしいんだけど。
500円以下はありえない そもそものRoR動かすこと自体がかなりサーバ負荷の高い行為だから、 収容人数の多い安いレンタルサーバでは実用的な速度ではまず動作しない 専用サーバと呼ばれる、少人数あるいは自分たちだけの買い取りサーバを使うんだね
276 :
272 :2008/09/28(日) 19:02:27
>>273 ありがとうございます。
a.xy=(何か)
という形は単なるメソッド呼び出しだと思っていたのですが、
実際には代入用の特別な呼び出しで、「何か」の部分は代入の右辺に
使えるような式である必要があり、普通のメソッドと同じようには
いかない、ってことなんでしょうか。
結局、調査の末これならできるということがわかりました。。
a.send(:xy=, 1, 2)
実際は ActiveRecord::Base#attributes= なんですが。
a.xy=1, 2とかa.xy=*[1, 2]でもよさそうに思う
278 :
272 :2008/09/28(日) 19:41:41
>>277 それだと @x が [1, 2] になっちゃうんです…
ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin8]
class XY attr_reader :x, :y def xy=(v) @x, @y = v end end a = XY.new a.xy = 1, 2
Rubyで、パイプのようなものを実現するにはどうしたらいいですか input = "aaa¥nbbb¥nccc¥n" output = open("|cat -n", "r+b") do |io| io.write(input) if input io.read end でいけるかなと思ったのですが、io.read()でブロックされるようで、うまくいきません。
>>280 io.close_write()をいれるとできました。
input = "aaa¥nbbb¥nccc¥n"
output = open("|cat -n", "r+b") do |io|
io.write(input) if input
io.close_write() ## 追加
io.read
end
popen
じゃあ俺はreadpartialを推しておく
windows版のrubyが起動に物凄く時間がかかるんですがなぜでしょうか・・・?
rubygems読み込んでるんだろ
ちょっと質問なのですが、Vistorパターンがいまいちわかっていません。 サンプルコードを見ても実際にどんな時につかうのかが? Rubyのライブラリなんかで、Vistorパターンを実際に使っているソースはありませんでしょうか?
>>227 C/C++とか触れそうにないなw
あなたには選択肢が少ない、ひまわりとかDelphiがオススメ
291 :
デフォルトの名無しさん :2008/09/30(火) 00:28:47
Mac OSXにRails環境を作ってみたのですが、プロジェクトを作成すると ファイルの文字コードが全て iso-2022-jp-3で作成されてしまいます。 プロジェクト作成時にutf8でファイル生成するオプションなどはありますか?
railsコマンドが作る初期プロジェクトに使われる文字の範囲では ISO-2022-JP-3(初期ASCIIでスタート)とUTF-8は同じだと思うんだが。
どんなソフトやらでISO-2022-JPでなくISO-2022-JP-3だと判定されたのかはちょっと気になるな cat > hoge.txt とかで作ったファイルも同じ判定ならコンソールか何かの設定の問題か、その判定ソフトの癖だな
RoR のフォームヘルパには Smarty でいう html_options みたいなヤツはないの?
>>294 html_optionsみたいなのがなにかを説明しないと、わかるわけがない
まずは「rails select option」でぐぐろうぜ
うぉーあった。ありがとうございます
>>297 Rails入門(本)には text とか radio は載ってたのにこれは載ってない。
でもないのはおかしいなと思ってた。date_select まであるじゃんかよ…。
299 :
287 :2008/09/30(火) 17:21:04
300 :
デフォルトの名無しさん :2008/09/30(火) 23:36:49
>>292 特に気にする必要はないっていうことですか?
今のところ特に問題はないですが、聞いたことない文字コードだったので
そのうち何か問題がでないかと心配です。
>>293 vimに読み込ませた時の文字コードがiso-2022-jp-3で表示されてます。
linux上で作成したutf8のファイルは、問題なくutf8で表示されていますし
他の文字コードに関しても作成時と同じように表示されてるので
ファイルの認識自体は特に問題ないと思いますが。。。
catで作成したファイルもiso-2022-jp-31で作成されているようですし
FInder上で作成したファイルもiso-2022-jp-3なので、たぶんMacOSXでは
指定がない限り、その文字コードで作成してしまうのではないでしょうか。
なにぶん昨日Macにはじめて触りまして。。。詳しいことが。。。
とりあえずOS側の問題のような気もするので、そっちで聞いてみます。
>>300 とりあえずodなどで問題のテキストをバイナリダンプしてみては?
>>300 文字エンコード自動評価の順が iso-2022-jp-3 が最初なんだろう
vimrcの文字エンコード推測設定がMacOSX向きじゃないんだと思う
きっとどっかのサイトのを意味もわからず丸コピペしたのだと推測
バージョンアップ後のフォローを求めるアホもいるので注意 ちゃんと冒頭に「バージョン○○を対象にします」って書いてあんじゃんよ
>>304 今回の select option に限って言えば、どのバージョンでもあるわな
ruby gemsでdescriptionで検索することってできないのでしょうか? gem search --details --both --all hoge とやっても、名前でしか検索ができません。 説明欄も検索したいのですが・・・
searchは最終的にSourceIndex#searchに処理を委譲してて、 そこでは名前がマッチするモノを探しているだけのようだ。 rubygems/source_index.rbの spec.name =~ gem_pattern and というところ(手元だと272行め)を (spec.name =~ gem_pattern or spec.description =~ gem_pattern) and のように変更すればdescriptionも検索対象にできる。 他にsummaryなども、orで連結して探すようにできるはず。 残念ながら、--detailは出力をkwskするためのオプションだな。
OSはXP Home SP3、Rubyは1.8.6(最終版)です。 以下のプログラムを実行してもうまく動かず、何がいけないのか分からず困っています。 sum =0 puts "点数を入力してください。" a=0 ←なんとなく初期化してみた。あってもなくてもダメ for i in 1..5 print i, "番:" a = gets.chomp sum += a ←ここが鬼門。ためしにforのiにするとちゃんと動く # print a,"\n" # sleep 1 end print "sum=#{sum}" おそらく7行目のsum += aが問題なのですが何がいけないんでしょうか・・・? 助言頂けるとありがたいです。
"うまく動かず"を出し惜しめせずに書けw
sum += a.to_i かな
>>309 コマンドプロンプトだと1つ目の数値を入れたとたん終了・・・
>>310 できた!thx!
getsで入力した数値を文字列だと思ってたのか・・・orz
ほんとありがとう、数値ひとつ入力するのに1時間奮闘してた・・・
312 :
311 :2008/10/02(木) 12:26:45
またすぐに聞きに来てごめんなさい・・・orz aを配列にしたとたん動かなくなりました・・・ 実行しても「点数を入力してください」すら表示されず終わります。 sum =0 puts "点数を入力してください。" a[] ←いらなそうだけど一応宣言 for i in 1..5 print i, "番:" a[i] = gets.chomp sum += a[i].to_i end .to_iの使い方がおかしいのかもと思い、その行をコメント化してみたりしましたがうまくいかず・・・ gets辺りで躓いてると思います。 お手数ですがどなたかアドバイスください。 入力で躓きまくってる私はRuby向いてないのかなぁ・・・orz
sum = 0 ary = [] puts "点数を入力してください" for i in 1..5 print i, "番: " ary[i-1] = gets.chomp.to_i end sum = ary.inject(0) {|a, x| a + x } print "合計: ", sum, "\n"
どういう勉強の仕方をしてるのか気になる。
>>312 「実行」って、コマンドプロンプトから ruby hoge.rb とかしてる?
普通はこうなる
> ruby hoge.rb
点数を入力してください。
hoge.rb:3: undefined local variable or method `a' for main:Object (NameError)
あと入門書嫁
本題に関係ないとはいえ一応書いておくが、Rubyでforはめったに使わない 普通はブロックを使う
317 :
312 :2008/10/02(木) 12:50:02
>>313 おお・・・ちゃんと動く・・・ありがとです。
for文の中でsumに足していかないとは・・・!
sum周りが初見なんで調べないとですね。
ともあれthxです。
>>314 Cは多少やってたのでCの頃に書いた簡単なプログラムをRubyに書き直してみてるところです。
文法がずいぶん違って躓きまくりです・・・
>>315 いや、「.rb」をそのままダブルクリックで実行してます。
だからsleep入れたりしてすぐに消えないようにしてたり・・・
基本はRDEで実行してます。
「たのしいRuby 第2版」を参考にしてますが、必要な所だけ探して読んでるのがいけないかもですね・・・
コマンドライン実行のスクリプトをダブルクリックしてどうする 正常終了でウィンドウ閉じるだろ
最後にsystem('pause')入れたりする
>>317 RDE使ってるなら、プログラムを実行した後
下の出力ウインドウにエラーメッセージとか出てるんじゃないか?
それを貼り付けるべし
出ないようならコンソールから実行
>>318 いやだからsleep入れたりしてるんですが、エラーの時は関係なく終わるんです。
>>319 Rubyの場合はスタンダードライブラリを読み込まなくても使えるんですね。(Rubyには存在しない?
活用させていただきます。
>>320 一応出ますね。以後貼り付けます。
みなさんありがとうございます。またすぐに来そうで心配ですが、その時はよろしくお願いします。
バッチファイルにしてやればエラーが出てもポーズさせるようにできるよ。 ruby -x "%~0" || pause と書けばエラーが出たときに限ってとまる。 test.bat ruby -x "%~0" pause goto :eof #!ruby put "hello"
>>322 横からだがサンクス
これを.rbに関連付けしておけばよいのか・・・
|| でエラー時だけ止まるのかいいな、これ
rdocで#:nodoc:と指定されてる要素も無理矢理ドキュメント化するような オプションとか方法とかってありますか?
>>324 そんなのはないから自分で #:nodoc:を消せばいいじゃん
cp -pr src1 src2
find src2 -type f | xargs perl -pi 's/:nodoc://'
>>325 なるほど
参考にさせていただきます
ありがとうございました
>>325 そこでrubyでもsedでもなくperlかよw
>>327 1 linerでの置換ならrubyよりperlのほうが便利
sedは-pオプションがない
>>329 現在の Ruby は 1.8.7 です
(いろいろとpython側もruby側も追随してないだろうから、やめるのが吉、ってことか...)
>>329 作者に聞くか、自分で試してみるしかない。
つうか、PerlやPHPならまだしも、Pythonから宗旨替えする理由って何?
>>332 借りてるレンタルサーバーでRubyは動くけど
pythonが動かない
railsが便利なら使ってみたい
>>333 Railsを実用的な速度で使うなら、
別プロセスのサービス(MongrelやFastCGI)か
Apache組込のPassengerが必要になる。
レンタルサーバではどちらもできないことが多いので、注意。
Windowsで、text ディレクトリのテキストファイルに対して start コマンドを使おうと require 'shell' sh = Shell.new Dir.glob("text/*.txt").each do |path| path.gsub!(/\//,"\\") sh.system("start", "#{path}") end というスクリプトを作りましたが c:/ruby/lib/ruby/1.8/shell/command-processor.rb:352:in `find_system_command': Command not found(start). (Shell::Error::CommandNotFound) というエラーが出ます。どうしたもんでしょうか。
普通にsystem使ったら?
>>328 sedのデフォルトの動作が -p 指定時のPerlと同じだろ。
おまえさんが言いたいのは -i じゃないのか?
でもこれも GNU sedならあるけどね。
>>335 gsub!の置換後の文字列だけどそれでいいのか?
あと startはcmd.exe の内部コマンドだからそれだとまずいだろう
>>337 >おまえさんが言いたいのは -i じゃないのか?
その通りだ orz
エスパーさんくす
340 :
デフォルトの名無しさん :2008/10/03(金) 23:40:05
>>340 ソース読んでないけど、たぶんその通り
UNIX畑の人間が書いたスクリプトには、バイナリモードを考慮してないものがある
最近だとRackでも見た
nanoc は面白そうだと思ってはいるんだが
>>340 読めませんねえ
module Nanoc::Extra
class AutoCompiler
def serve_file(path)
[
200,
'Content-Type' => mime_type_of(path, 'application/octet-stream') },
[ File.open(path,'rw'){|f| f.read} ]
]
end
end
end
をスクリプトの前に書いて再チャレンジだ
>>341 ある意味とてもカッコ悪いよな
PNGのマジックナンバーに含まれるEOF文字で止まっているようですね。 バイナリモードのopenを使うように書き換えないといかんのかな。
なんか足りなかった module Nanoc::Extra class AutoCompiler def serve_file(path) [ 200, {'Content-Type' => mime_type_of(path, 'application/octet-stream') }, [ File.open(path,'rw'){|f| f.read} ] ] end end end Ruby のモジュールの多くは自前のスクリプトの先頭で書き換えることができる きっとこれから何度もお世話になると思うので覚えておくといい けっこう明確なバグ(で、自前で何とかなるもの)が残ってたりするもんだ
あれ、アクセスフラグrbじゃなくてrwなの?
rb だな
msっていつになったらテキストモードをなくすの?
349 :
340 :2008/10/04(土) 00:48:47
みなさんありがとう。上手くいきました
trap::IO - Rubyリファレンスマニュアル
http://www.sakalab.org/prog-ruby/ruby-man-html-20080121/trap_IO.html > IO.readはファイルを開くときにバイナリモードにしないので、
> バイナリモードの存在する環境でバイナリファイルの読み込みに使うと 内容が壊れることがあります。
これかい!しかし何でこんな罠があるんだ。
罠ってのはバイナリモードじゃなくてIO.readのことだけど。
nanocの作者 mac っぽいし?
-----lib/binary_patch.rb-----
module Nanoc::Extra
class AutoCompiler
def serve_file(path)
# Build response
[
200,
{ 'Content-Type' => mime_type_of(path, 'application/octet-stream') },
[ File.open(path, 'rb'){|f| f.read } ]
]
end
end
end
-------------------
>>344 参考に、これをサイトデータの lib 以下に放り込んでおくとOK的な。
後でさくーしゃにパッチ投げるか……
しかし、grepかけたら、他にも File.read あったり、
File.openでバイナリモードにしてないところがあるから、
直すところがいくつもありそうw
これはホントは標準添付の便利メソッドのフリしてバイナリモードガン無視の File.read が悪いんだよね ライブラリ作者はあんまり悪くない(注意不足なだけ) 2.0 では直ってたりするのかしら
1.9にはIO.binreadというのがあるようだ。 あと、1.9以降はstdioと絶縁したんだっけか?
352 :
デフォルトの名無しさん :2008/10/04(土) 01:48:42
ついでに別の質問があります。
nanoc で nanoc autocompile コマンド時にhttpサーバーと一緒にブラウザも起動したいのだけど、
httpサーバー起動前にブラウザが立ち上がりきってしまって上手くいかない・・・。
gemにあった launchyで起動させているんだけども、httpサーバー(デフォではThin)
起動後かもしくは、数秒後に起動することはできないでしょうか?
当初はこんなコードです。
require 'rubygems'
require 'launchy'
module Nanoc::Extra
class AutoCompiler
alias original_start start # :nodoc:
# Boot web browser before original start
def start(port, handler_name)
port ||= 3000
Launchy.open("
http://localhost:#{port}/ ") if defined?(Launchy)
original_start(port, handler_name)
end
end
end
353 :
デフォルトの名無しさん :2008/10/04(土) 01:51:50
で、Threadを使ってみようとしたんだけどもネイティブスレッドじゃないせいか
上手くいきませんでした。何かよい方法はないものでしょうか?
def start(port, handler_name)
port ||= 3000
t = Thread.new do
Sleep(3)
Launchy.open("
http://localhost:#{port}/ ") if defined?(Launchy)
end
original_start(port, handler_name)
t.join
end
>>352 while (3000ポートに接続できない)
sleep(1) # 1秒待つ
end
>>335 WindowsでRubyならWIN32OLEで一択.
require 'win32ole'
fso = WIN32OLE.new('Scripting.FileSystemObject')
shell = WIN32OLE.new('WScript.Shell')
Dir.glob('text/*.txt').each do |path|
shell.Run(fso.GetAbsolutePathName(path))
end
下記記事も参照すると吉
ttp://jp.rubyist.net/magazine/?0004-Win32OLE
356 :
352 :2008/10/04(土) 02:52:37
>>354 どうも original_start() でキー入力待ちになってしまうのです。
sleepするところだけメインと平行して走らせることができないかな、と思ったしだいです。
gemにあった win32-thread もつかって見ましたが、
> nanoc autocompile
win32 thread mode
(rubyパス)/lib/ruby/gems/1.8/gems/launchy-0.3.2/lib/launchy/b
rowser.rb:25: [BUG] cross-thread violation on rb_thread_schedule()
ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32]
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
とか出るしダメポ……
357 :
デフォルトの名無しさん :2008/10/04(土) 02:53:16
>>355 「全部WSHで書けばいいじゃん」って思うよね?
うん,俺もそう思う.
Jscriptとかも使ってみると意外と便利なんだよなぁ.
358 :
352 :2008/10/04(土) 02:57:28
深夜に何度もすいません。
キー入力待ちでもsleep後に平行してブラウザが起動してくれました。大丈夫でした。
httpdの起動が遅いせいか、どうもタイミングが悪かったようです。
>>354 を実装してみたいと思います。ありがとうございます。
359 :
352 :2008/10/04(土) 03:33:52
# Boot web browser before original start
def start(port, handler_name)
require 'open-uri'
require 'resolv-replace'
require_gem('launchy', true)
port ||= 3000
t = Thread.new do
uri = "
http://localhost:#{port}/ "
loop do
begin
exit_loop = false
open(uri) do |f|
puts "Eureka #{uri} !";
exit_loop = true
end
break if exit_loop
rescue
end
sleep(1)
end
puts "Launching browser..."
Launchy.open(uri) if defined?(Launchy)
end
original_start(port, handler_name)
t.join
end
>>354 をこんな感じで行けました。
もっと短くかければよかったのですが。
テキストモードとか意味不明。 ただこういうバグを生むために存在するとしか考えられん。 まあでもそういうのを考慮する環境がクライアント機では90%以上を占めてるので仕方ないか。。
だからCやれって テキストモードが生まれたわけがわかるから
>>361 Cは平素より使用しているが、どうしてテキストモードなるものが存在する必要があるかは理解できない。
ここで、「ググレ」やリンクを貼る行為ではなく、あなたの言葉での説明希望。
ちゃんとした文責のある文章を拒否して、名無しさんの言葉だけ求めるってw 「知りたい」んじゃなくて「追い込みたい」のが丸わかり。 土曜の早朝から何を厨臭いことを。
隔離スレにお帰り
むしろCのstdioがマシンごとに改行の内部表現が異なることを意識して テキストモードとバイナリモードを用意して抽象性を確保してるんだから UNIX使いもちゃんと使い分けろって話になりはしないの?
>>362 >Cは平素より使用しているが、どうしてテキストモードなるものが存在する必要があるかは理解できない。
たんに、プラットフォームによって改行を表す記号が違うので、それを隠蔽して互換性を確保するモードを用意しただけ。
>ここで、「ググレ」やリンクを貼る行為ではなく、あなたの言葉での説明希望。
ほんとにCやってるなら、このくらい分かるだろ。
まずは「教えてください」という言葉を覚えような。
>>367 >まずは「教えてください」という言葉を覚えような。
お前は文章に「教えてください」って文字列が入ってないと納得できない正規表現脳なのか
>>365 普通UNIX使いは改行記号がが\nのとき、\r\nのとき、\rのときそれぞれを考慮したコードを書きます。
なぜならUnix使いはおそらくwindowsをはじめとする他の環境を触ったことがあり、
それらで改行がどう表現されるかを知っていて、
かつbフラグは無視される環境であることがほとんどだから。
>>367 だからね、それは「テキストモードが必要な理由」にはならないんだよw
なぜなら普通は上に書いたようなことをやるから。
あれば便利かと思って作ったんだろうが、現状むしろあることのほうが害。バグの原因になる。
こんぐらい少し考えればわかるだろwww
>>368 その文字列を探す様子をたとえるのに、正規表現はないだろう。
>>370 >普通UNIX使いは改行記号がが¥nのとき、¥r¥nのとき、¥rのときそれぞれを考慮したコードを書きます。
書かない。ふつうは printf("foo¥n"); としか書かない。printf("foo¥r¥n") なんて書くわけない。
本気でそんな主張をするなら、世の中のUNIX用ツールで改行コードを使い分けているソースの例を挙げて、
それが一般的であることを示してくれ。
>なぜならUnix使いはおそらくwindowsをはじめとする他の環境を触ったことがあり、
触っただけで、自分のコードにそこまでの移植性を考えるわけない。
たとえばUNIXとWindowsではパス区切り文字が違うが、それを考慮しているコードは多くない。
改行コードの違いなんか考えるわけがない。
>それらで改行がどう表現されるかを知っていて、
>かつbフラグは無視される環境であることがほとんどだから。
bフラグを無視するのはUNIX系だけでは? Windowsでは無視されないんだから、「bフラグは無視される環境であることがほとんど」なわけがない。
>>372 お前の存在をズバリ言い当ててるのでは?
>>373 >それが一般的であることを示してくれ。
まあ\rは無視することもあるな、Macだけだし、はっきり言っておかしいから。
出力は、自分の環境で動けばいいから(移植するときに考えればいい)printf("foo\n")でもいい。
外部に出力する場合は規格通りにすればよい。
当たり前だが、問題なのは出力よりも入力。なぜならどのようなデータがくるか分からないから。
ここで注意すべきなのは、ただ単に改行までシークする場合は
\nと\r\nは改行位置を捜すのに両方\nを捜せばいいから問題にならない。
よって、考慮はしているがそれが実際にコード上に現れないことも多い。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
しかし、考えなければならない事もある、たとえばhttpの改行は\r\nである必要があるが、
\nである環境もあるかもしれない。例えば、Httpのヘッダとボディ部を分けるのは
"\n\n"と"\r\n\r\n"の両方の可能性がある。
(規格上は後者のみ正しいが、もしかしたら前者の可能性もあるかもしれない。)
よってその場合には分けた処理が必要になる。実例として、MPlayerの
MPlayer/stream/http.cのhttp_is_header_entire()。
wgetのhttp.cなどを参考にしても、もし改行が\nの場合、\r\nの場合両方とも正しく処理できるように
なっている様がわかる。
でもそれが一般的である証明なんて誰にもできませんよ。もちろん一般的でない証明もできません。
>改行コードの違いなんか考えるわけがない。
考えなければならない時は考えるほうがよいです。考えないとバグの原因になる可能性がありますので。
>「bフラグは無視される環境であることがほとんど」なわけがない。
Unix使いは、って書いあるじゃんwwwww
なんで同じ文の中に書いてあって前提が途中で変わっちゃうのwwwww?
この場合、「一般的であることを示す」のは至難の業だわな。 いったい何百例出せばいいのかと(数例で納得するのは逆におかしい)。 それでいて、いかにも「正当な要求をした俺と、応えられないコイツ」的な構図が 出来上がるから、まぁ、ある種の人間はこの質問をすることを凄く好むんだよね。 「知りたい」んじゃなくて「追い込みたい」のが丸わかり。 土曜の昼に何を厨臭いことを。
>>376 久々に切れのある内容のスレを見た。
尊敬する。
あなたの言うとおり!!
>>376 なに語ってるのか知らんけど、
>普通UNIX使いは改行記号がが¥nのとき、¥r¥nのとき、¥rのときそれぞれを考慮したコードを書きます。
なんておかしなことを書いてあるから、それが「普通」である根拠を示してくれといってるだけ。
答えられないならでしゃばんなよ。
IDの出ないスレは自演が楽だな。
>>375 >wgetのhttp.cなどを参考にしても、もし改行が¥nの場合、¥r¥nの場合両方とも正しく処理できるように
>なっている様がわかる。
wget はネットで使うんだから、どちらにも対処できるようにするのは普通だろ。
それこそunixもwindowsもmacも関係ない話。
これをbフラグの話で持ち出すほうがおかしい。
>>378 > なに語ってるのか知らんけど、
知らんまま反応した当然の結果として、まるで的外れだから、「知る」までは黙ってていいよ。
unixはバイナリモードしかなくても、改行コードがファイル毎にバラバラでも
テキストを問題なく扱えるし、windowsでも当然可能
# 可能にしてるのはライブラリやアプリケーション、だけど問題はそこじゃない
不必要なテキストモードを残しているばかりに
>>340 の様な問題が起こる
appleがOSXでCRを捨てたようにwinもさっさとテキストモードを廃止してほしいもんだ
383 :
340 :2008/10/04(土) 19:03:40
なんか、俺のせいで半荒れ?でスマナイ 俺はネイティブ言語はDelphiくらいしかつかわないけど、 テキストモードとかバイナリモードなんて意識したことない。 File.readのテキストモードとかの区別って結局どこから来てるんですかね?
>>383 Rubyを作るときのCの…えー、WindowsのCライブラリから来ている
結局としては、テキストであるという判断をどの層で誰がやるかという話に過ぎない
385 :
352 :2008/10/04(土) 19:33:12
>>384 そっか、C言語のライブラリのせいなのね・・・
386 :
340 :2008/10/04(土) 19:36:58
ん?レス番残ってた 340です。
1.9はstdioを捨てたと聞いたが、そうするとテキストモードに関する 状況は変化するの?
>>388 > "r"なら、"rt"と"rb"のどちらの扱いになるかはプラットフォーム依存。
> とりあえず、いわゆるUNIXなら"rb"と同様に、mswinやmingwなら"rt"と同様になる。
ちょw 問題解決されてなくないですか?
ああ、違うのかな? 前みたいに適当に"r" だけだとどっちにしろ環境依存になるから、 バイナリかテキストかを意識しなくちゃいけないわけか
テキストだとエンコーディングも意識する必要があるしのう。 文字=バイトで凝り固まった外人どもよりはこのへん日本人は意識しやすいだろうけど。
>>389 本質的に問題なのはテキストモードを区別するという慣習だから、
Rubyだけで解決できる性質の問題じゃない。
Windows全体で「CRLFを使うのはやめよう」という流れにならない
限り解決しようがない。
結局いつものRubyが糞なのが根源的な原因だけど対応するのが面倒だから 個々の環境(というかいつもWindows狙い撃ち)で対応しやがれというお話ですね。
俺の場合、Windows(つかSJIS/CP932)一辺倒の頃は むしろ「LFなんて糞、CR+LFに統一しる」と思ってた 今はそうでもないが、昔の俺以外にもそう思ってる奴は居るかも
ラインをフィードしただけで「行の先頭」に行くUNIXは変 キャリッジをリターンしただけで「次の行」に行く旧Macも変 「カーソルを行頭に戻してから行を送る」というCRLFを具現したWindowsが意味的に妥当 とは思う っていうか電脳化した時点でCRLFという概念作っとけよもう 何が悲しくてコンピュータでタイプライタのエミュレーションなんぞしなければならんのか
SJISが普通に使われるWindowsでは2バイトあった方が誤読しにくい
>>395 それは端末を中心に考えているから。だから「行頭に戻る」と「次の行に移動する」をわけて考えてしまう。
UNIX作ったひとはテキストを扱うことを考えてて、それでテキストの「行末」が欲しかっただけだから、
それを1文字で表現したことは、そんなにおかしな話ではない。
CP/Mの呪縛? EOFとかCR/LFとか
read() より下のレイヤであれこれやる Windows が変、ってことで
>>394 統一しる!までは思わんがw
どっちかというと、UNIXとかの人にバイナリで読む時とかちゃんと、"rb" つけてくれ!頼む!って感じ。
いろんなソースいじっていると本当にそう思うw
なーーんか、そろそろRuby本スレみたいな雰囲気で 初心者さんが質問しにくくなってきている気がするので移動しませんか?w
s = "s = 'abcde'"; p s; eval(s); p s を実行すると↓のようになります。 "s = 'abcde'" "abcde" eval の中の変数をローカルにするには、eval(s) の代わりに eval("def tmpfunc() #{s} end; tmpfunc") などとするしかないでしょうか? 関数持ちだすのもなんかアレな気がして…
sandbox_binding = (class << Object.new; binding() ; end) s = "s = 'abcde'" p s # => "s = 'abcde'" eval(s, sandbox_binding) p s # => "s = 'abcde'" なんか汚してもいいBindingでevalするのはどうでしょう
>>403 > class << Object.new
こんな書き方できるんだ...
「class <<」の右側って任意の式がかけるの?
ただの特異クラス定義だから、任意の式というか、メソッドを追加したいオブジェクトを返すものを1個書く class Hoge < HogeBase は「HogeBaseクラスに以下のメソッドを追加したHogeクラスを作る」という感じなのに対して class Hoge << hoge は「オブジェクトhogeに以下のメソッド動作を一時的に追加して便利に使うぞ」という感じ irb> s = 'nyonyonyo' irb> class << s ; def hello; puts 'hello!'; end; end irb> s.hello hello! irb> s = nil irb> s.hello NoMethodError: undefined method `hello' for nil:NilClass from (irb):5 from :0
gemsのライブラリ見ると、シングルトンでこれ使ってるの多いな module HogeModule class << self; def application @application ||= HogeModule::Application.new @application end def application=(app) @applicaiont = app end end end で、 HogeModule.application.run みたいな感じで使う
> class << self; class << self
初心者の質問じゃないですけど、いいですか? class Foo class << self def hello; puts "hello"; end end end と class Foo def self.hello; puts "hello"; end end は、Foo.hello の挙動はまったく同じですけど、内部での仕組みもまったく同じですか? class << self のほうは、Fooの特異クラスにインスタンスメソッドを追加することで、 def self.hello のほうは、Fooの特異メソッドを定義するという説明になるかと思いますが、 両者はまったく同一のことを行っているという解釈でいいでしょうか。
☆ チン ☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ヽ ___\(\・∀・)< 初心者の質問じゃない質問まだー? \_/⊂ ⊂_)_ \____________ / ̄ ̄ ̄ ̄ ̄ ̄ ̄/| |  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| :| | .|/
いいです
厳密に言うと class Foo class Bar def hello; puts "hello"; end end end と class Foo; end class Foo::Bar def hello; puts "hello"; end end くらいは違う。
両者の違いが問題になるようなクラス設計をしてはいけないな
最近、Rubyの勉強を始めた者です。 先週、RubyのMLに登録し「Welcome to our ruby mailing list」のメールも届いたのですが、 その後メールが1件も届きません。ひょっとしてRubyのMLって、コマンドをサーバーに送って 取得しないといけないのでしょうか?それとも、さらに何か手順を踏まないとメールが 届かないのでしょうか?メールに記載されている説明には、過去の投稿が欲しいなら サーバーにコマンドを送れ、とは書かれているのですが・・・
RubyのML、じゃどれかわからん。 MLによっては単に流量が少ないだけということもある。 本来流れているはずのメールが届いてないというなら、そのWelcomeメールに書いてある問い合わせ先に質問メールを投げればいい。
ruby-ext と ruby-math、非公式の rubyist ML は投稿がないな 正直なとこ、ML は何か発言したい人向けだね 初心者さんはこのスレとかマニュアル独学とかしたほうがいいかも
>>415 ,416
素早いレス、ありがとうございます。
登録したのは「ruby-list」です。単に投稿が少ないだけなのか、
それとも自分が何かミスをしていて、メールが届かないのかが分からなかったもので。
とりあえず、MLの管理者に問い合せてみようと思います。
418 :
デフォルトの名無しさん :2008/10/08(水) 12:27:55
ウインドウズでのrakeの実行が遅すぎる、どうにかならないのか?
>>418 まだCPUが1個なんですか?
Rails開発者はデュアルコアとか普通ですよ?
gem update のメモリ超絶消費問題が長らく直らなかったくらいだしなあ メイン開発者たちのマシンでは一瞬あるいは2秒程度で終わってると考えるのが妥当だな あるいはWindowsのRuby使ってないとか
Windows使ってる人なんてハイスペックが当たり前で気にならないかもしれない
>>418 一応回答すると、WindowsのRubyスクリプトで処理開始までが馬鹿みたいに遅いのはどうにもならない
これを改善する方法を見つけられたらRubyは広まると思うんだがというかWindowsで常用したい
Core2Duo使ってるレベルだったら遅さなんて感じないけどね
>>423 俺の環境はCore2Duoだが、体感できるぐらいには遅い
同じマシンにLinuxとか入れて同じRubyスクリプトを実行するとほぼ一瞬なんだよねえ Cライブラリとかの違いの関係だと思うんだが、残念だな
WindowsでRubyってそんな遅いの? ならJRuby使っても気にならないんじゃね
>>424 そうなってくると、HDDとかにも問題があるんじゃない?
VistaはVistaで遅い
ttp://pc11.2ch.net/test/read.cgi/tech/1215531152/692 @echo off
echo %time%
ruby -e "puts 'hello!'"
echo %time%
ruby -v
echo %PROCESSOR_IDENTIFIER%
を実行して
11:35:25.96
hello!
11:35:26.96
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]
x86 Family 6 Model 8 Stepping 6, GenuineIntel
だそうな
15:03:20.45 hello! 15:03:20.46 ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32] x86 Family 6 Model 15 Stepping 11, GenuineIntel XP SP2でこれだったぞい?
そりゃキャッシュに乗ってるかどうかで全然違うよ
>>429 どうもその人だけみたいな感じだね
いろいろな要素が絡み合って遅くなってるのかな
>>433 424みたいのがいるから、CPUの問題じゃなく、遅くなる何かがあるんじゃないか?
全員が遅いなら、それこそ「WindowsのRubyは遅くて使えねえ」という大合唱になってるはずだしな 大丈夫な人と大丈夫でない人がいる程度には、ポピュラーな別の原因があるんだろう
VistaだったらWindows defenderの影響とか
>>433 うちのK6-2 450MHzだと
17:06:29.07
hello!
17:06:29.16
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mingw32]
x86 Family 5 Model 8 Stepping 12, AuthenticAMD
Ruby 1.8.7 0.09秒
17:09:52.56
hello!
17:09:52.86
ruby 1.9.0 (2008-10-04 revision 19669) [i386-mingw32]
x86 Family 5 Model 8 Stepping 12, AuthenticAMD
Ruby 1.9.0-5 0.30秒
MingwでRuby 1.9.0をビルドすると90分くらいかかる
439 :
424 :2008/10/08(水) 18:47:36
書き忘れてたけど、遅くなるのは基本的に初回起動(キャッシュされてない状態)のとき キャッシュ無しの状態でrake打つと、だいたい3〜5秒ぐらいかかる 二回目以降は0.1秒くらいしかかからない (WindowsXP Core2Duo 1.86GHz メモリ1024MB ruby-mswin32)
rakeとか言われても何も比較できない
K6-2 450Mhz Windows 2000 rakeって使ったこと無いけど Ruby 1.9.0-5 に標準でついてるので 何も無しにrakeすると No Rakefile found で即終了 約2.5秒 (何回実行しても)
442 :
デフォルトの名無しさん :2008/10/09(木) 01:22:27
>>419 Core2Duoでも、めちゃくちゃ遅いぞー
今のままではwin上でrailsは開発できない
443 :
デフォルトの名無しさん :2008/10/09(木) 01:36:48
>>427 >>429 >>430 >>432 >>441 windows上での開発環境のことじゃ。
rake db:migrate reset または ruby script/console
でもしてみな。一日が8時間に感じるほど遅いぞ。
最新のスペックのPCでもだ。win上で開発はできん。
win上でまともに開発できない今のままのrailsでは、
railsバブルははじけるだろうな。もうはじけている予感はあるが...
マーケティング戦略に踊らされたやつの負けー
根本的にいろいろ勘違いしてるな
勘違いしているというより、railsを叩くストーリーを語りたかったんだろう。 「この物語はフィクションです。実在の人物・団体・CPU・プログラミング言語とは 一切関係ありません」
446 :
デフォルトの名無しさん :2008/10/09(木) 08:09:36
Rubyが遅いのはもうすでにだれもが知っている事 耐えられないならJRubyを使えば速くなる
JRubyの方が速いのは事実だが、 RailsをJRubyで動かすとCRubyより遅くなる。
結局Pyhon+Zopeが最強ってことか
449 :
デフォルトの名無しさん :2008/10/09(木) 09:20:44
>>448 Python + Django
だろー
Railsはscaffoldであっと今に雛形が作れるが、
Djangoはもっと強力で管理ページもあっという間に作れる。
450 :
デフォルトの名無しさん :2008/10/09(木) 10:08:18
>>445 客観的に見れない信者のような連中が出てきたらそろそろかな?
前出のように、ウインドウズ上で仕事として開発するのは無理。
LinuxとWinでrake db:migrateの比較をしてみればすぐわかる。
Railsは、初回は金利0その後徐々に金利が上がるローンと似ている。
Railsの「生産性」を叩いてる人はVBAで納品される受注プロダクトもあるということを聞いたら卒倒するんだろうなと思ってる なんでソフトウェアの全部が全部銀行並みの規模でクオリティでなければならんのん?
なんでWindows上でRailsを実行させないといけないのかがそもそも理解できないわけだが。
453 :
デフォルトの名無しさん :2008/10/09(木) 11:14:20
>>452 開発環境の事を言っているんだろ
rakeは本番稼動では使わないからなー
Rails信者はMac信者という事だろう
しかしほとんどは最近Mac信者になったやつらだろうが
Windows → クライアントサイドアプリケーション以外ヘボい PC-UNIX系 → サーバサイドプログラム以外ヘボい MacOSX → どっちも不可もなく見掛けが気持ちよい という単なる選択の収斂の結果に過ぎない WinでPC-UNIX系プログラムがきちんと動けばWindowsを使うって あるいはクライアント環境がもっさりでなければPC-UNIXを常用する WindowsをクライアントにしてUNIX系OSにログインするというのが最強ではあるが、それだとメンテ対象が2つになるんだよね
WindowsやLinuxとかを我慢して使ってる人のほうがよっぽど信者だと思う…
質問だよ 適宜更新される200字くらいの説明文が常に200個くらいあって、 それらに特定の日本語群(更新は稀で候補100個くらい)が含まれてるかどうかチェックしたいんだ スレ全部読み込んで、注目したい語を含むレスがあるかどうか調べて抜き出す、みたいなノリだと思ってくださいな どうするのが速くて妥当かなあ? 検索語100個の正規表現100個を200文全部に適用する? 2万回正規表現起動?
数KBのテキストに100回適用を200回とかはRuby的には屁でもない日強茶飯事だと思うぞ ライブラリの中ではもっとえげつない、力技としか思えない正規表現動作がゴロゴロ… 選択100個入りの正規表現と100個の正規表現をif文で回すのと text.include?(s) とどれが速いかとかそういうのは知らない
458 :
デフォルトの名無しさん :2008/10/09(木) 12:45:02
>>455 会社にあるPCを見て見ろ、Macなんてあるか?
ほとんどないだろう、どこの会社だって同じだ。
Railsが新しい物好きな連中以外に普及するためには、
Winでまともに使えないとだめなんだろうね。
個人的にはRailsのIDEがもっとコード補完が上手になってもらいたい。
結局、
小規模サイト:PHP
大規模サイト:Java
候補や説明文がよほど膨大なら、 Karp-Rabin法も考えられるかもしれんが・・・・・まあその程度なら
yieldはなんだかんだ言って遅いから 語群を|でつなげた正規表現200回起動がよさそうに思う ブロック使わずにif文ずらずら並べるならわからんけど
個人的用途を除くと、イメージ的には Macはデザイン、クリエイター、 Linuxは学術用 UNIXはサーバー Windowsはビジネスその他って感じだな
462 :
デフォルトの名無しさん :2008/10/09(木) 13:10:44
Ruby/Tkで EntryウィジェットやTextウィジェット上でドラッグすると フリーズします。原因として考えられることは何でしょうか?
ドラッグしたときの動作をプログラムしてないからじゃね
語群があまり変わらないという話だから、俺も
>>460 に賛成
>>456 正規表現でやるならRegexp.unionっていうのがあるよー
学術的なウンタラカンタラならともかく、業務サポートかカジュアルな用途だろうしな(いやわからんが)
Regexp#union は p で表示したときの正規表現が自動生成ですって感じでとても不安でイマイチ使う気になれない irb> arr = ['a', 'bb', 'ccc', 'dddd', 'eeeee'] irb> p Regexp.new(arr.join('|')) /a|bb|ccc|dddd|eeeee/ irb> p Regexp.union(*arr.map{|e| Regexp.new(e)}) /(?-mix:a)|(?-mix:bb)|(?-mix:ccc)|(?-mix:dddd)|(?-mix:eeeee)/ きちんと動くのかね、これ
468 :
デフォルトの名無しさん :2008/10/09(木) 13:29:26
はいはい初心者スレだよここは
>>468 Javaを知らないからそんなことになる
Javaを知ってればRoRはJavaで負けたスーツ連中が持ち上げてるだけだと早々に気づけたろうに
いい社会勉強になったことだろう
>>467 動くよそりゃw
inspectがごちゃごちゃするのには確かに同意するが
>>468 みんな、そこはもう大分前にとおりすぎたのだがwww
そもそも ?-mix: って何よマニュアルに書いとけよって感じではある > Regexp.union
>>468 あとZed Shawの記事はネタなので釣られないようにな。
単体の記事で見ると本当にそう思っているのかと思うもんだよ。
よくはてなブックマークとかでたくさんブックマークされている、煽り気味のエントリーとか
他の記事よむとネタじゃんってすぐにわかる、みたいなの
Rubyしか知らないと悲惨なのにはこっそり同意しておく
CとJavaとPerlとPHPとPythonとSchemeはオレオレライブラリを作れる程度には齧っておいたほうがいい …多いな
PerlとPHPは真っ先に除外できるな
>>477 は何もわかってない
キャッチセールに真っ先に引っかかるタイプ
アレな方々が流入してくるとすぐスレがおかしくなるな
PerlやPHPを知らないっていうのは一番悲惨なパターンのRubyユーザーなのでは…
PerlやPHPを生半可に知ってる方が、変にRubyに入れ込んじゃって不幸になる気もする。
Rubyって何に適してる言語なの?
>>482 オブジェクト指向テキスト操作ネット通信言語です
484 :
デフォルトの名無しさん :2008/10/09(木) 17:09:03
>>470 もっともなご意見です。
周りがみんな騒ぐので、こっそりRailsを触って見たが、
scaffoldまでは良かったがIDEが無いのでこつこつとコーディング
をしなければ行けず、こんなんで生産性がいいか?
と思っちゃいましたね。あと遅いし。
会社ではJavaで開発しているが、Eclipseを使った開発は超快適、
Ctl+スペースを打てば自動的にコードを挿入してくれるし、自動的に関数のヘルプも出るしね。
したい事を実現するためのライブラリはほぼ間違いなくのあるし、その数も桁違いに多いし。
Rubyに比べれば見た目のコーディング量は多いが、ほとんどはIDEが自動的に挿入したものだから、
実質は同じ量か下手すれば少ないだろう。
Railsは、一時の流行じゃないかなと思うね。
結局、ビジネスを企んでいるいるやつらに、うまく乗せられたんだよ。
「うそも100回言えば真実となる。」と誰かが言ったが、これが当てはまる気がする。生産性に関して言えば。
>>458 に一部賛同
PHP or Python:小規模
Java:大規模
でしょう。
どうもRails + Macで、私は先端を行くというような事を見せ付けているような感じが嫌いだ。
所詮、他の方の意見どおりwinでまともに使えなければこれ以上流行はしないだろう。
RailsはRubyのヘビーユーザーが適当に活用して小ぶりなアプリケーションを連続生産するのに向いている RailsのためにRubyを学ぶような人や、Railsのソースを読んでも何してるかさっぱりわからんような人が使ってもどうにもならんな という魔術師(志向)の人向けのフレームワークだったはずなんだが、当初からそのはずだったんだが、誰が捻じ曲げたのやら…
すごい初歩的な質問していい? ゲーム作ってみたいと思って、つい最近Ruby始めたんだけど。 講座HPみたいなところで、Ruby/SDLでつくったスクリプトをexeファイルにしても、 Ruby/SDLのdllファイルが全部同じディレクトリにはいってないと動作しないって書いてあったんだけど、 てことは作ったゲーム配布するときはdllファイルも全部つけて配布しなきゃいけないってこと?
>>484 MacOSXでRubyを使うことに決めた人は、もともとPC-UNIX上でRuby使い倒してたような人が多い
そういう人の使うRoRは、その人のプロダクト作成に非常に役立つものになると思うよ
>>486 Exerbでひとつにまとめることが…DLLはできないのかな
というか、DLLは普通実行ファイルと一緒に配布するもんなんじゃね
あとRubyでゲーム作るのはマゾさんのすることなんだけど、あなたはマゾですか?
>>484 Railsを擁護する気は全くないけれど
一応、IDEを使ってRailsの開発することはできるよ(EclipseとAptana)
>>486 その通り
>>487 俺は自分のことをSだと思ってたが、本当はMだったのか
>>487 >>488 回答ありがとうございますm(__)m
一緒に配布するんですか〜。16個くらいあったんでまとめられれば見栄えがいいんだけど。
Rubyはゲームに向いてないですか;
大学の講義でRubyを軽く使うらしいから、ついでにと思って始めたんだけど・・
Rubyはわかりやすいって評判ですけど、Rubyでプログラミングに慣れてからC言語勉強した場合、
共通点が多くてサクサク覚えられますか?それとも違いが大きくて効率悪いですか?
>>490 人によるんじゃないかな
共通してる部分も確かにあるけど
片方をしっかり身に着けない内に他に手を出すと
ごっちゃになって混乱しそう
C言語を使って便利な機能を便利な概念でまとめたのがRubyだ
>>491 >>492 回答ありがとうございます。
ある程度身につくまでRubyで頑張ってみて、限界感じたらC言語勉強することにします〜
C→Rubyは曖昧さを感じて戸惑う Ruby→Cは堅苦しさ、面倒くささを感じる
495 :
デフォルトの名無しさん :2008/10/09(木) 18:07:31
>>490 >>491 >>492 >>493 CとRubyはまったく用途が違うだろう。無理に使う事ができるけどね。
Cを勉強するならC++じゃないか。
Rubyでゲームか? 話にならない。
ゲーム開発している人間に聞いてみな。笑われるだけだ。
後々の資産として、C++を先に勉強したほうが得だと思うよ。
またC++厨が… C++を学ぶのとCを学ぶのでは意義が違うと何度言えば
そろそろスレタイ嫁
498 :
デフォルトの名無しさん :2008/10/09(木) 18:30:38
うぜぇ
こういう香ばしい人って、なんでみんなageるんだろうね
>>484 ,488
業務でAptana使ってるが、コード補完はやはりイマイチ。
候補が無駄に多いうえに欲しいのが出てこなかったりする。
特に、ハッシュで引数与える関数は全滅だ。
この辺はNetBeansも大差ない。
abbrevのあるemacs系の方がまだ使える。
Eclipse + JDT で幸せなJava開発環境を味わってる人には物足りないだろう。
Rubyと共に使うなら純Cだろうね。 C++はそれ単体で使うもの。 ゲーム作りならC++オンリーがパフォーマンス的に一番だろうなあ。 ただ、Rubyでも処理速度がさほど求められないならゲームに一応使えると思うが ゲーム用のライブラリはCかC++だろうしなあ。 一応、RPGツクールはRuby使えるのもある。
>>502 Ruby/SDLでだいたい満足してたから、他のゲーム用ライブラリ触ったことないんだが
CやC++にはそんなに良いライブラリがあるのか?
とりあえず、SDLはC/C++でも普通に使える。
わざわざCからSDL使わなくても、Ruby/SDLでよくね 性能が要求されるなら直接DirectX使うべきだし
ゲームってのはけっこうハイレベルな感じに常時性能が要求されるもんだと思ってたが違うのか?
ゲームによるよ 3Dでエフェクトも激しいアクションゲームなんかは大変だけど そうじゃないゲームもたくさんある
専用スレがあるんだからそっちでやればよくね?
>>508 マジレスするとそうでもない
画像表示してブラーかけてるだけのADVなのにDirect9c対応グラフィックボード要求するとかもうアホかと
「DirectGraphicsの初期化に失敗しました」は昨今けっこう有名なメッセージだと思う
>>510 それはその例がそういうゲームってだけだろ
玉金破裂ゲーム
Arrayを継承したクラスのオブジェクト.find_all{|e| e.cond?} がArrayを継承したクラスのオブジェクトに自動でならないことにほんのりがっかりした
>>515 gem のライブラリで時々見るな、そういう中途半端実装
そこはレシーバのコレクションクラスのオブジェクトを作って返せと…なんのための独自配列なのかと…
>>515 find_all は Array じゃなくて Enumerable のメソッドだから
実際のところ自分のクラスは関係ない
Arrayは継承するな…とcompositionを使えと
Arrayを継承するってどういうシチュエーションなんだ??
なんで継承を毛嫌いするかね
いらんメソッドが付いてくるから
アホすぎて笑えない
継承は怖い
>>520 作るのは簡単だが使うときに面倒
あと作り直すときにも面倒
すごいとこまできてるねRubyistはw
>>515 ハッシュからハッシュを返すselectやmapはたまに欲しくなる
カンペキに活用した継承は非常に強力だが、ほとんどの継承はそうではない っていうか、組み込みクラスは継承しないで委譲しろ、継承は自作クラス間でどんどんやれ
本当にアホばかりで嫌になる
ライブラリを書くくらいに使ってる人がいないってだけ
530 :
デフォルトの名無しさん :2008/10/12(日) 10:56:19
Integerのaとbのobject_idを常に同じにする方法ってありますか? a.object_id = b.object_id みたいなことがやりたいんですが
>>530 object_id を同じにしたい理由が良くわからんが…
普通に代入すれば同じになるでしょ。
今の実装では Fixnum の場合は即値だから必ず同じ値になるんじゃないかな。
>>530 できませんという答が妥当な気がする
>>531 の言うように、Ruby の整数の数値の値とオブジェクトIDは紐付けられてる
整数の 1 のオブジェクト ID は常に一定だ
>530 多分参照を扱いたいんだと思うが そういう場合は配列やオブジェクトにくるんで受け渡しするのがベスト。
534 :
デフォルトの名無しさん :2008/10/12(日) 13:57:54
>>531 ,532,533
ありがとうございます
そのままでは無理でしたか
ちなみに、何故やりたかったかというと(railsの話になりますが)
class A; attr_accessor id; end
class B; attr_accessor a_id; end
と二つclassがあり、AのidとBのa_idを同じにしたかったのです。
今までは
A.transaction do
@a.save!(ここで、a.idに代入される)
@b.a_id = @a.id
@b.save!
end
としていましたが、
@b.a_id.object_id = @a.id.object_id(みたいなことができれば。。)
A.transaction do
@a.save!
@b.save!
end
とできると、updateでもcreateでもtransaction内が共通になるため、2つのclassをまとめたclassが定義しやすいなと
>>534 なぜそうなってしまうのかわからない。
スキーマはどうなってるの?
>>534 ごめん
その話聞いても,idとa_idを同じオブジェクトIDにしたい理由がわかんないわ
それにそもそも代入やFixnumみたいなやつ以外で同じオブジェクトIDになることない気がする
なにか勘違いしてるんじゃ…
そんなことできたらそれはIDって言わないんじゃないの
要するに,例えばaとbっていう変数があったときに b.object_id = a.object_id としておけば a = 10 としたときに,bも自動的に10になってくれませんか? っていう話でしょ object_idはそんな用途に使えません
540 :
デフォルトの名無しさん :2008/10/12(日) 17:54:01
>> 538 その通りです 分かりにくい説明で申し訳ないです 用は参照を使いたかったんですが。。
なんかa_idって名前が気になるな すっげー憶測だけど、Bはインスタンス変数でAを持つのが素直な設計だったりしない? それならB#save!で@a.save!するだけで済むから楽なんだけど
>>538 おまえ、ほんとエスパーだな。
おれはさっぱり読み解けなかった。
>>534 railsというかActiveSupportはそういう関連づけを自動化してくれなかったっけ?
あるいは
>>541 のようにしてB#a_idは@a.idを返すようにするとか。
>540は自分の頭にあるオブジェクトのイメージをER図やクラス図で さらっと描きだせるくらいのレベルになるまでARを封印すべきだ。 もし仕事でやってるなら合掌。
545 :
デフォルトの名無しさん :2008/10/12(日) 21:00:36
プライマリキーの値を変更するな、テーブルの設計からやり直せ
547 :
デフォルトの名無しさん :2008/10/12(日) 23:24:26
>>545 自己レスです
とりあえず、参照は素直にはできないということは分かりました。
ありがとうございました。
もう少し試行錯誤して、無理なら普通のARにしてみます。
>>544 初心者として気になるんだけど
そのレベルになるまではどんな感じやるのが上達する?
>>548 1週間に3日書く
今週はRubyスクリプト書いたり改良の試行錯誤が無かったなあという週が無いという状態にする
制御構造覚えたらマニュアル見つつたまに使う程度のカジュアルさでももちろん一向に構わないが、
その場合はRubyが上達することはないだろうし、上達するほど頑張る理由もそもそも無いことだろう
Rubyのクラス分けやモジュール分けはてきとーで良いということがわかった頃から スクリプト作るの早くなったような気がする 今でも特異メソッドとかわからんが インスタンスメソッドとクラスメソッドしか作ってない Proc はライブラリで要求されないと作らない yield は使う機会が無いのでわけがわからない
yield は each 作ったりしたらすぐ覚える
おれはテストを書く気が全く起こらないんだよなあ… 少しづつでも書けばいいんだろうけど つまらないから全く続かない…
どう考えても テストを書くのに悩む時間 >> 変なバグで悩む時間 なのでテストを書く理由がない俺 他人様に提供するライブラリ書くんじゃない限り要らないもんだと割り切ってる 書き方指南がないということは本当はみんな不要だと思ってる証拠
>>553 書き方指南いろいろあるじゃん
本にもwebページにも
俺も有用であるという自信はないが
テスト書くためのスクリプトでテスト書く説明するだけだしなあ お前そんなスクリプトなんて普段絶対書かないだろ、というのが多々…(特にテスト駆動)
スクリプト序盤から中盤での書き方がよくわからないのがテスト駆動の特徴 というかMockとかあのへんを理解しないと関数的スクリプトのテストしかできん
色々書き方の作法もあるけど、むしろ形式に捕らわれず自由にテスト書くようにしたら それはそれで楽める部分もあると思う。
558 :
デフォルトの名無しさん :2008/10/13(月) 09:42:39
俺はテスト書かなくて困るのってリリース後なんだよなぁ。 デグレ出るたびに書いときゃよかったって思う。
ちゃんとテストが書けるようになったら、もう上級者だよ。 つまり上級者になるためには、テストがきちんと書けるようにならないといけない。 おれはまだうまく書けないんだけどな。 UIのテストなんか、どうしたらいいのかさっぱりだ。
他人様のライブラリのgitのtestディレクトリとか眺めてるとよくわかる 本文コードの追加変更に対してテストが異常に適当というか不足 時間かけてまでして作りたくないかどうすれば網羅するか考えるの面倒なんだろうな
テストなしでロジック修正とかコードの整理(リファクタリング)とか、 怖くてできない体になった。
563 :
デフォルトの名無しさん :2008/10/13(月) 17:14:28
テスト書くとメソッド単位でしか検証できないからめんどくさい あと、GUIアプリのTestってどうやるの?
できない
入力の自動化をすれば出来る。 が、チェック項目をリストにして人力でやったほうがなんぼかマシ。
RubyでGUIつーと、テスト以前に環境が貧弱だからのう。 WebならSeleniumとか。
>>564 自動でマウス動かしてクリックしたりフォーム埋めたりするよプログラムを併用する
稀にどうしても自動化できないところが出てくることがあり、そういうときは漏れのない操作一覧図を書いて手動
>>564 ビューとコントローラを極力分離すれば、ある程度までは機械的にテストできる
GUI自体をテストしたい場合は?
GUI自体のテストって具体的にどんなの?
マウスクリックのタイミングとか
サブネットマスクにマッチするような判定って簡単に出来ますか? 例えば、 "192.168.0.45".in_mask?("192.168.0.0/24") # => true "192.168.0.45".in_mask?("192.168.0.0/29") # => false となってほしいのです。
本質的にサブネットマスクはbitmaskだから ANDしてやればいい
rubyはじめたばかりのものです。 Windowsにて、ワンクリックインストーラでrubyをインストールし、 RMagick(とImageMagick)をインストールしました。 サンプルプログラムを走らせようとすると(ruby sample.rb)、以下のようなエラーメッセージが出ました。 ./RMagick.rb:2: uninitialized constant Magick (NameError) from D:/Programs/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb: 27:in `gem_original_require' from D:/Programs/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb: 27:in `require' from rmagick.rb:1 ファイルの内容は以下です。 require 'RMagick' include Magick img1 = ImageList.new("d:/a.bmp") img2 = img1.blur_image(0,2) img2.write("sample01.bmp") exit 色々と試した結果、上記ファイルがあるディレクトリ(D:\rubyとする)をカレントディレクトリとして、 cmd.exeからruby sample.rbとすると上記のエラーが発生しますが、カレントディレクトリがd:\の 場合は正常に実行されました。どうもカレントディレクトリに*.rbなファイルがあると失敗するようです。 irbでも同様の結果でした。 これを回避する方法はないものでしょうか?
そろそろ解決してる頃だろうか
>>576 require 'hoge' は カレントディレクトリの hoge.rb ファイルを読み込む
rmagick.rb (大文字小文字問わず)という自作ファイルを改名しろ
「hoge ライブラリを試そうとして hoge.rb を作って実行し、次にまた別のスクリプトを作って変なエラーにはまる」というのは
そろそろ FAQ にしてもいいと思う
>>577 ああ、まさにそれでした。
5時間くらい悩んでの書き込みだったので、今はRMagickのマニュアルを読んでました。
有難うございました。
文字列中のすべての"\"を"\\"に、"'"を"\'"に置きかえたいときに gsubってものすごくつかいづらいんですけど、 なんか他にいい方法はありませんか?
str.gsub(/['\\]/){|s|"\\#{s}"} 十分簡潔に思うが、どの辺が使いづらく感じた?
str.gsub(/['"]/) { %Q|¥¥#{$&}| } あたりで手を打たないか?
遅すぎたリロード
ブロック使わずに表現できないの?
str.gsub(/([\\'])/, "\\\\\\1")
・・・うん、ブロックのほうがいい。
>>579-580 後方参照使わずにgsub繰り返すっていう力押しをしてた人が
ハマるパターンだろうね。
>>580 なるほど、ブロックを使えばいいんですね。
>十分簡潔に思うが、どの辺が使いづらく感じた?
perl なら、 s/([\\'])/\\\1/; と、比較的直感的なところを
>>584 のように"\\\\\\1"と書くとバックスラッシュが多くなりすぎて
後で読みにくいと思ったわけです。
おっと、 s/([\\'])/\\\1/g; でした。
str.gsub(/[\\']/, /\\\&/.source)
Windows限定でいいんですけど、OSが32ビット版か64ビット版か調べる方法はあるでしょうか。 ENV["OS"]だと32bit版XPでも64bit版XPでも"Windows_NT"と表示されて区別が付きません。
じゃあruby関係で ruby -e 'p RUBY_PLATFORM' 64bit環境を持ってないのでどんな出力がされるのかは知らんけど
RUBY_PLATFORMはコンパイル時に決まりそう
Fixnumを地道にカウントアップしていってBignumになる境界を見つける -> そこから推定 とかそういうアホを思いついた
64bitのOSで32bitのバイナリ使ってたら無理じゃないか
WIN32 API の GetSystemInfo() とか呼んだら良さそうな気がする。 呼び方はあれ、dl 使うなり何なり工夫してくれと。
Ruby の Web アプリケーションによくでてくる、 class CGI def valid?( param, idx = 0 ) self.params[param] and self.params[param][idx] and self.params[param][idx].length > 0 end end というコードの著作権者、またはライセンスってわかりますか? GPL だとしてもソースを配布する際には著作権表示が必要ですよね。 tDiary や hiki にも登場していますが、特別そういう表示がないので 勝手に使っても差し支えないんでしょうか?
その程度の誰が書いても同じになるコードには 著作権が発生するほどの創作性はないよ。
適当に書き換えればおk if self.params[param] if self.params[param][idx] if not self.params[param][idx].size.zero? return true end end end return false
>>588 64bit の Windows で試していないから動いたらラッキーぐらいで
require 'Win32API'
GetCurrentProcess = Win32API.new('kernel32', 'GetCurrentProcess', 'v', 'i')
hProcess = GetCurrentProcess.call()
isWow64Process = "\0" * 4
is64BitWindows = false
begin
IsWow64Process = Win32API.new('Kernel32', 'IsWow64Process', ['p', 'p'], 'i')
IsWow64Process.call(hProcess, isWow64Process)
is64bitOS = true unless isWow64Process == "\0" * 4
rescue RuntimeError
end
p is64BitWindows
CamelCaseキモすぎる
PascalCaseだね
LCCだろ さりとて、Windows の API にはハイフン区切りは似合わないのも事実
CamelCaseは力強さを感じる
MSは先頭大文字のCamelCase好きだよね クラス名でもないのに何故?と違和感を感じる
クラス名は許せるが、rubyでは_区切りとisPredicateではなくpredicate?を使ってほしい
>>604 >isPredicateではなくpredicate?
変数に?使えたっけ
使えないよ。 けどpredicateってことは多分604はメソッド名のつもりで言ったんだと思う
何気に attr_reader :hoge? って書けないんだよな
@hoge? がだめだからなぁ。 Module#attr_readerが再定義されていればその限りじゃないぜ 意義はないけど。
?付きメソッドを定義したくなるのはよくあることなのに、attrで定義できないのがな・・・ 自分でattr_readerを拡張するか、rubyplusのboolattr使うと便利 つーかActiveSupport辺りにも入ってそうな気がする
?付きメソッドを自分で定義すれば済むだけなので、漏れは必要ないかなあ。
>>610 メソッドごとに一つ一つ?付きを定義していくのって凄く面倒じゃね? 変更に弱くなるし
?末尾のシンボルを渡されたら、メソッド名はそのままに 末尾削った変数にアクセスするっていうのも便利かもしらんね でも真偽値のアクセサが面倒になるほど多いっていうのも 設計見直せる可能性はない?
class Hoge def self.def_predicate(name) attr_accessor name private name private "#{name}=" define_method("#{name}?"){ __send__(name) } public "#{name}?" end def_predicate :hoge end こんなんとか。リフレクションを用いるほど多く使うんじゃなければ ちゃんと書いたほうがいいと思うけど
615 :
611 :2008/10/15(水) 22:43:31
>>612 >>614 4〜5つ程度の?付きメソッドでも、似たような定義を続けて書くことになるからかなり面倒だと俺は思う
この辺は個人の意見もあるとは思うが
attr はあまり使わない メソッドはきちんと定義する
そもそも @hoge? ができないことに疑問を感じるんだが
だから ? つきはメソッドだっつーの述語だっつーの data= っていう変数が作れないのは不自然か? change! っていう変数が作れないのは不自然か?
@is_foo みたいな変数名をどれだけ見かけることか 変数名が述語になれないのはおかしい
@hoge? = 123 まず見た目がきもい そして三項演算子の文法と衝突しそう
変数名が述語になるほうがおかしい飢餓す
@foop か @foo_p でいい
「○○が二者択一のどちらかか、を格納する変数」というのはあまり Ruby っぽくない 二者択一の判断自体をメソッドで参照するのがフツーな気がする
>>620 そんなこと言ったらメソッド foo? がどんなオブジェクトも返すことのできる点もおかしくないかい?
見た目がきもい、ってのはほんとに見たまんま、?で終わる識別子が左辺値にくるのが きもいってことだよ。 別に @hoge? = true ならいいってことじゃない
>>621 変数名とメソッド名の間で、言葉づかいの上でのセマンティックスが違っている「べき」なら、attr 系は廃止すべきってことになるな
>>625 @hoge? = true なら悪くないと思うけど
やだよ。 メソッド名の慣習のせいで、「hogeっすか?」って訊いてるようなイメージがあるじゃん。>@hoge? で、「そうっすよ」とか「違いますよ」とか返事しようとしてるところに値突っ込むってのは変な感じだ。観念的な言い方でアレだが
何も @hoge? があってもそう書かなきゃいけないわけじゃないから、? を使わない自由を奪っているわけではないでしょ。 それよりも、attr 系によって変数名とメソッド名を関連付ける機能が提供されているにもかかわらず、? 付のメソッドだけ特例でそれができないほうが一貫性に欠けて嫌だ。
>変数名とメソッド名を関連付ける機能 単なるメソッド。とあるリフレクションのラップなだけ。 >? 付のメソッドだけ特例でそれができない できないのはそこじゃなくて変数名に?を付けること。 でもってこっちは処理系本体の機能の話。 パーサとかに手を入れて?付き変数を許してまで@hoge?とか書きたいか?
そりゃ現状じゃ @hoge? が書けないようにパースしてるんだから、パーサを変えるしかないわな。 別に難しいことじゃない。 あと、attr_reader が処理系そのものが提供しているかどうかなんて関係ないじゃん。飽くまで意味論の話だし、built-inで入ってるんだから。
だって…再定義できるもの
>>627 メソッドvalueと変数@valueがあったとして、メソッドのほうは「valueは何か?」と問う意味なのに対して@valueはそのままの意味だよね?
同じようにhoge?がメッセージだと解釈されても、@hoge?までメッセージと解釈する必要はないのでは?
変数名だからその通りなんだけど、あくまでイメージというか馴れや先入観の問題だよ。>@hoge?がメッセージっぽい また別の問題として、 変数名に?が付けられて、attr系もそんな名前を受け取るとすると hoge.foo? = true とか hoge.bar! = false とかが出て来る。後者なんて比較の否定と見間違う。 さらにいうと、?や!を許すとして、[]とか[]=とか@-は変数名に許す? 全部メソッド名としては有効なはずだよ。 attr_accessor :foo= -> foo.foo= = 123 こんなことになる
hoge.foo? = true はできてもいいと思う。 hoge.foo! = ってのはまあちょっとヘンだけど、attr系で ! つけたかったことないから、あってもなくてもいいや。 [] や = が「メソッドの一部である」というのは別の側面で筋を通すための論法であって必ずしも名前の一部ではないので (その証拠にメソッド「foo=」は、「foo.foo = 」のようにスペースを入れることができる)、 attr_accessor :foo= 等はなくてもよいかと。
>その証拠にメソッド「foo=」は、「foo.foo = 」のようにスペースを入れることができる いやいや、メソッド名はあくまで「foo=」だよ。__send__(:foo=, 123)とか出来る。 パーサが頑張って「foo.foo = value」を「foo.foo=(value)」と同じような扱いにしてくれているだけで。
隔離スレでやれ
本スレが隔離スレってのも難儀な話だよなあ
RDEのツールバーとコンソール窓の設定などが上手く動作してくれません ツールバーを移動して1段にまとめたりしても、RDEを最起動すると別の位置へ 勝手に移動した状態になってしまいます コンソール窓は、フォントの設定が初期値に戻ってしまうのと、 ctrl+alt+cで開閉したりができません コンソール窓のフォント設定だけは致命的なんで、そこだけでもなんとかできればと
639 :
638 :2008/10/21(火) 07:27:47
一応環境も ActiveScriptRuby 1.8.7(p72) Windows XP SP3 です
ツールバーの問題は俺の環境(XP)では何年も前からあるよ。
てかRDE薦めてるサイトでもあるのか? 俺なら間違ってもRDEなんて使わせないんだが
統合環境使わせるなら EclipseかNetBeansあたりじゃね?
本筋以外での障壁が大きいからねえ… 「我慢して使う」時点で何か間違っとる 素直にエディタとプロンプトをAlt+Tabで切り替えて使うほうがマシ
644 :
638 :2008/10/21(火) 17:13:53
コンソール窓のフォント設定は自分のミスでした
コンソール窓で右クリして「設定」からフォントを設定していたのですが、
直ぐ上に「フォント」というのがありました… 見逃してました
>>640 どもです
ツールバーはしょうがないみたいですね
>>641-643 どもです
winの人がrubyを始めようと思うと、RDEがまず最初に目に入るような気がします
NetBeansはDLしてあったのですが、JAVAが云々…とまたやることが増えそうなので
後回しになってました
とりあえず簡単なプログラムを書いて試したかったので、RDEをという感じで
日常はEmEditorのフリー版(かなり古い)を使っていたので、それでやればよかったのですが
コマンド操作には不慣れなwin人なんで、お手軽(そう)なRDEから初めてみようと思い
初心者〜中級者?への道筋がすっぽり抜けてる感じがしていて先行き不安ですが
書いて直ぐ実行できるのはやっぱり楽しいし勉強になります
RDEはirbと似たような感じでSandBoxとしてしか使わないなぁ。 ファイルに保存はしなきゃならんけど、EmEditorも言語モード別のキー設定と、 外部プログラムのを実行して標準出力を下窓に出す機能が(少なくともVer6からには) 備わってるから、キー1発で実行はできるよ。
RDEはいろいろなところで紹介されてるから、知名度はかなり高いし 動作はけっこう軽くて多機能、日本語対応と利点は多い が、不安定さ(特に文字コード関連)とレジストリ使用がそれらの魅力を帳消しにしている
RDEを普段使ってない人がファーストインプレッションあるいは又聞きで薦めてんじゃないかと思ってる 普段から使っていれば、少なくとも初心者には勧めようとは思えないはずだ 単一言語用だからといってIDE作成が簡単になるわけではない 1種類の言語にしか対応しなくても、10種類の言語に対応してても、IDEとしての作り方は同じだと思う Rubyに特化すればIDEが俺でも作れそうとか最初に思った人は罪深いなと思ってみる
FreeRIDEが日本語や他の文字コードに対応してくれれば無敵なんだが
rubyの表記法の質問なのですが、 Test::Sample のように書かれていたら、TestとSampleはともにクラスでTestがSampleの親クラス という認識で合ってますか? ::という記号は定数やクラス変数なども表すとネットで見たのですが 区別は付くのでしょうか?
:: は 「の」 だ Test::Sample は Test 「の」 Sample だ それ以上の意味はないよ クラスかどうかは普通に識別子で判断する 先頭が大文字なら定数かクラス 先頭が小文字かアンダースコアならメソッド ただ、あからさまに面倒なのでメソッドを :: で繋ぐことはRubyでは意図的にしない (他の言語での書き方をしないと死ぬ人が稀に使う)
651 :
649 :2008/10/22(水) 00:09:42
>>650 ありがとうございます。
そんな曖昧なものだったんですね。メソッドは#でしたっけ?
この業界っていやに自己主張強い人が多いから統一できないのかな
RDEってRubyのサンプルプログラムとして付いているもんだと思ってた・・・
>>651 スクリプト上での表記とマニュアルでの表記は違う
…違ってちゃいけないと思うんだが、まあ、
「○○クラスのインスタンスメソッド××を…」と書く代わりに「○○#××を…」と
「○○クラスのクラスメソッド××を…」と書く代わりに「○○.××を…」と
「○○クラスの定数××を…」と書く代わりに「○○::××を…」と書けたほうが
一度理解してしまえば便利ではある
>>653 > スクリプト上での表記とマニュアルでの表記は違う
>
> …違ってちゃいけないと思うんだが、まあ、
とはいえ、あるクラスのインスタンスメソッドというのは、直接コード上には
現れないから、そもそも同じ表記にはしようがない。
いちいち X.new.m とか書くのもめんどくさいだろ。
>>650 Test::Sample だったら普通はmoduleかclassがネストされてるやつじゃね?
>649 ::で示されるのは主に ・モジュール内クラス ・クラス内クラス ・モジュール内モジュール ・クラス内モジュール ・モジュールの持つ定数 ・クラスの持つ定数 などであって、クラス間の親子関係ではない。 どちらかと言えば所有、もしくは所属の関係。
Windowsなら、既に更新停止状態だがJmEditorでぜんぜんいける。 コマンドライン登録しとけば、キー一発で実行できるし、プロンプト 勝手に閉じてほしくないなら、ruby.exe実行してからpauseするバッチ ファイル登録すればいい。
まさかJmEditor使いが俺の他にもいたとは 動作軽いしUSBで運べるし、便利だよね
irb とかでいっつも忘れるんだけど、NKF.guess の返り値の数字と文字エンコード名の関係ってどっかに書いてないかな?
NKF.constants.map{|s|[NKF.const_get(s),s]} こんな感じで出せばいいんじゃないか?
refeで引いてみたら出てるかと思ったが $ refe NKF.guess require 'nkf' NKF.guess --- guess(str) 文字列 str の漢字コードを判別して返します。 返される値は、NKF モジュールのモジュール定数です(下記参照)。 ruby 1.8.2 より前は現在の NKF.guess1 と同じものです。 ruby 1.8.2 以降では NKF.guess2 と同じものです。 下記参照て言われても、下記がない・・・
.chmもちあるけば解決するお
>>659 あれは inspect で文字列が出るべきだと思う
>>664 キーワード:NKF.guess(str) (nkf)
でとんだページの下に定数が書いてあるけど・・・
> NKF.guess の返り値の数字と文字エンコード名の関係
ああ、そりゃソース嫁としかw
>>656 じゃあクラスの継承はどうやって表すの?
「表しようがない」が正解かと 「XXXを継承したYYY」のように文章で書くしかないな
Win32OLEを使ってエクセルの自動処理をしようと思っているんですがうまくいきません。 require 'rubygems' require "win32/clipboard" require 'win32ole' excel = WIN32OLE.new('Excel.Application') excel.visible = false excel.displayAlerts = false excel.workbooks.open 'filename' => 'foo' workbook = excel.workbooks(1) sheet = workbook.sheets(1) sheet.select excel.Columns("B:B").select excel.selection.copy excel.quit ↓に続く
class Excel end excel = WIN32OLE.new('Excel.Application') WIN32OLE.const_load(excel, Excel) excel.visible = true excel.displayAlerts = true book = excel.workbooks.add('bar') sheet = book.worksheets(1) sheet.Columns("B:B").Insert Shiftt = Excel::XlToRight excel.Range("B1").ColumnWidth=11 #セル幅設定 ←幅や領域が違うっていうエラーが出るのでなんとなく excel.Columns("B:B").select excel.selection.parent.paste book.Save excel.quit エラーメッセージは以下 `method_missing': paste (WIN32OLERuntimeError) OLE error code:800A03EC in Microsoft Office Excel Worksheet クラスの Paste プロパティを取得できません。 HRESULT error code:0x80020009 例外が発生しました pastespecialなんてのも試してみてもダメ、エラーコードでググってもダメ、"ruby excel paste"などもググって見ましたがダメでした。 よろしくお願いします。
>>670-671 Excel.Application ペースト でググるんだ
Win32OLEの情報を探すときはRubyに限定しないほうが良い
俺excel持ってないから動作検証できないけどごめんね
>>672-673 ありがとうございます。解決しました。
原因は貼り付ける際に列で指定していたからダメだったようで、
貼り付ける先頭セルの値をRangeで受け渡したらうまく行きました。
また上のプログラムだとちゃんと保存できないのも注意です。
開き方の問題なのか読み取り専用になっているようです。
名前を付けて保存するようにしたらちゃんと保存されました。
excelのvlookupのようなものをrubyで書きたいのですが 遅いので速くしたいです。(元々excelのものが遅いのが発端です。) アドバイスをいただけないでしょうか。 よろしくお願いします。 ################### 想定する入力データ 1,0.25,2.25 2,0.75,1.76 3,1.24,1.24 4,1.76,0.75 5,2.25,0.25
677 :
676 :2008/10/26(日) 19:34:59
#676の続きです def Vlookup(vs,v) vx=vs.to_f if (vx<v[0][0]) then return -99.9 break elsif (vx>v[v.size-1][0]) then return 99.9 break end for i in 0..(v.size-1) vpre=v[i][0] vpst=v[i+1][0] if (vx>vpre)&&(vx<=vpst) then if (vpre-vx).abs<=(vpst-vx).abs then num=i elsif (vpre-vx).abs>(vpst-vx).abs then num=i+1 end break end end return v[num][1] end
678 :
676 :2008/10/26(日) 19:35:43
#677の続きです。 DAT=[[0.5,5.0,50.0],[1.0,10.0,100.0],[1.5,15.0,150.0],[2.0,20.0,200.0]] lines=Array.new open(ARGV[0],"r") do |f| while line = f.gets line.chomp! lines=line.split(/,/) lines[1]=Vlookup(lines[1],DAT) lines[2]=Vlookup(lines[2],DAT) print lines.join(","),"\n" end end
>>675 いきなり自作CGIをレンタルサーバーで動かすとか正気の沙汰ではないぞ
httpdのエラーログをみよう。
いやその前に、まずは、WindowsならばXAMPPでも入れてローカル環境で試そう、な
>>679 一応ローカルで実験はした。
方法
1.irbを起動する
2.環境変数を設定
3.systemコマンドで実行
結果
とりあえず動いた
だからアップロードしたわけだが。
結論: ・ 馬鹿にCGIを渡すな
>>681 一応Apacheをインストール中
ところで、WindowsのApacheでCGIを動かすとき#!の行はどうすればいい?
家の環境では、ruby.exeをapacheと同じドライブの例えばc:\usr\local\bin\ に放り込んでおけば動いた
パスは通しておいてね
> パスは通しておいてね Ruby本体をインスコしたディレクトリにパスは通しておいてね
687 :
675 :2008/10/26(日) 20:20:11
実験は成功した。普通に動いた。 今度は書き込みを実行したとき何も出力されないバグが出てきたが
>>688 ローカルでは動く。リモートでは動かない
cgi-exceptionをrequireしても(もちろんそのファイルごとアップロード済み)
まったくダメ。
この分だと向こうで拡張ライブラリの一部が欠損しているというオチの可能性が 高そう。標準添付のライブラリ(cgi,nkf)しか使ってないのに…
CGI.unescape(cgi.params['うんこ']) を CGI.unescape(cgi.params['うんこ'][0]) にするとかさ、 NKF,nkf(略) を NKF.nkf(略) にするとかさ、 変数名やGET/POSTパラメタの名前に誤りがないかよく見るとかさ。
環境を疑うよりは、まず自分のスクリプトを徹底的に疑うべき CGI-Exceptionでエラーが出ないなら次はprintfデバッグだ スクリプト中の適当な位置で、テキストファイルにログを書き出していけば たいていエラー箇所を特定できる (スクリプトが全く実行されない場合は、syntax errorかrubyパス絡みの可能性が高い)
693 :
692 :2008/10/26(日) 21:37:21
あ、重要なこと書き忘れてた 初心者は(初心者じゃなくても一緒だけど)まず最小限のCGIスクリプトから書き始めろ 小さなスクリプトが動いてから、徐々に機能追加していかないと ただでさえ特定しづらいCGIのエラーが、余計に特定しづらくなる 少なくとも、そこそこの長さがあって環境変数が関わるような掲示板スクリプトを 一気に書き上げるべきではない
>>691 それにはすでに気づいて直した。直したが治らない。
>>692 syntax errorがらみはありえない(-cオプションで検査済み)
パスもチェック済み(/usr/local/bin/ruby)
>>693 一応ローカルで動作確認済みなので
これはRubyの問題ではない(まだ)
>>694 だからその方法が間違ってると指摘されてるだろう
CGIは「ブラウザでInternalServerErrorが出なくなるまで書き直す」という手法で開発してはいけない
エラーメッセージを確認しない開発手法は糞だ
> 一応ローカルで動作確認済みなので 最小限のCGIスクリプトをサーバー上で動かさないとダメ 「環境変数自分で入れて、systemで実行して動いたから」というのではあまり意味がない
結論: ・ 馬鹿にCGIを渡すな
>>695 とりあえずちょいと方法が思い浮かんだので実験してみる
1.まずは単なるテストスクリプトが動くか確かめる
それすら動かないようならとりあえずこの環境での動作はあきらめたほうがよい
2.次にちょっとした工夫のなされたテストスクリプトを使って実験を行う
3.最後にその結果を見て検証する
RubyでWin32弄くる場合に必要な知識はRubyそのものではないのと同様に RubyでCGIやる場合に必要な知識はRubyそのものではないのだな ライブラリで吸収隠蔽すべきかどうかというのは悩ましいとこだと思う
>>696 Apacheでも動作確認済み
1時間以上前に実験した。
bbs.cgi:57: cgi.params['content']をCGI.unescapeに渡している Arrayが渡ったりしてNoMethodError -> あぼーん bbs:cgi:58: NKF,nkf('-s',content) カンマとドットのtypo とりあえず2つみっけ 動作確認済みとは笑わせるな それともHPのzipからまた弄ってるのか?
>>700 どう動作確認したのかkwsk
俺の環境でApache立ち上げて試してみたが、普通にアクセスしただけでエラーが出る
具体的には
>>701
#!/usr/local/bin/ruby -Ks print "Content-type: text/html\n\n" print "<html><head><title>テスト</title></head><body><p>テスト</p></body></html>" このスクリプトすら動作してないのでもはやお手上げ
> 小出しにするな > 自分で話をまとめられないなら諦めれ に一票 そして離脱
>最小限のCGIスクリプトをサーバー上で動かさないとダメ に対して >Apacheでも動作確認済み >1時間以上前に実験した。 って…明らかに話噛み合ってないな
>>703 自分でApache立ち上げて試すときは、そのパスじゃまず起動しないぞ
#!ruby -Ks
にして試してみ。それでも駄目ならお手上げ
708 :
675 :2008/10/26(日) 22:21:49
>>706 まったくかみ合わない上に、どうやらこちらの問題ではなさそうだと
判明したのでたぶんこれ以上話し合っても結論が出る可能性は0(正確には)
ただ、根本的バグが見つかったのは皆さんのおかげです。
皆さん、ご協力どうもありがとうございました。
>>707 もちろんローカルでやるときはそのためのパスにするわけですけどね。
>>707 Rubyの絶対パスを指定して動いてるので、いえるのは
もはやここでは対処しようのない問題だということです。
とりあえずテストスクリプトすら動かないということは
他のところに持っていったのでこれ以上の深入りは
避けたいと思います。
>>703 ステータスコード書いてないから動かなくて当然
あと\n\nだとサーバが非winのとき困るんじゃないか?
てゆーかbbs.cgi自体も割りと…たぶん2、3個の虫食いじゃないよな、 斜め読みした感じでも
パーミッションの設定してませんでした><
714 :
707 :2008/10/26(日) 23:10:02
>>711 あ、そうか
NPH環境だとステータスコード無しでは動かないのか…
超遅レスだけど
>>656 >>668 >>669 ここら辺の話って本当なんですか?
Rubyのライブラリのレファレンスでクラスの説明とか見るとよく::が使われてるけど
あれは本当は間違いなんですか?
>>656 以外の使い方してるやつなんてあんのか
具体的になんてライブラリのリファレンスのどの部分よ
>>676 「vlookupのようなもの」ってのが、一体どんなのか分からんのだが
vpreとvpstではさんで比較してるってことは、ソート済みだと仮定してもいいの?
良いなら二分探索が使える
コードについて
・Range#eachがあるんだからeachを使う。Rubyでforは(めったに)使わない
・不要なbreakが見られる
・異常入力に対して99.9とかを返すのは、これでいいの?
>715 マニュアル内でのその記述はクラスの親子関係じゃなくて、大抵モジュールの定数のハズ。
例えば、Objectクラス、IOクラス、Fileクラス、File::Statクラスの関係は IO と File::Stat の直接の親は Object クラス File は IO の子クラス File::Stat は File の子クラスではない File::Stat は File 内のクラス Rubyのコードで書くとこんな関係。 class Object end class IO < Object end class File < IO class Stat end end
言うなれば :: でクラス同士を繋いでいたら、それは親子じゃなくて入れ子の関係ってところか。
Railsの質問はここでいいんでしょうっか? Web画面を共有出来るアプリが作りたいので 実験で5分で動くshootingstar使ったchatのテストアプリみたいなのを 動かしたんですけど自分でブラウザを更新しないと表示画面が更新されません。 バージョンは、shooting_star (3.2.7)とrailsは2.1.2でOSはUbuntuなんですけど。。
>>676 >>677-678 の気になる点。
1.vの1列目の値が小さい順で並んでいないと動かない
以後は1列目は昇順ソート済みであるものとする
2.vs == v[0][0], vs < v[1][0] なら (vs>vpre) && (vs<=vpst) は常に偽
forの最終ループでvpstがvの範囲外となりエラーを起こす
vpst = v[v.size][0] => vpst = nil[0]
3.VLOOKUPと検索の仕様が違う
VLOOKUPは完全一致検索または検索値を超えない最大値の検索
こちらは四捨五入もどきというか、小さい側優先の再近接値検索?
(ちなみに四捨五入は中間値切り上げ丸め、つまり大きい側優先)
4.VLOOKUPと違って返値の列が2列目固定
それならMATCH関数にした方がまだ使いやすくない?
>>677 を問題点もそのままで、ちょっとRubyぽく書き直してみた
def Vlookup(vs,v)
vx = vs.to_f
return -99.9 if vx < v[0][0]
return 99.9 if vx > v[-1][0]
v.each_cons(2) do |vpre, vpst|
if vx>vpre[0] && vx<=vpst[0] # *1
return vx-vpre[0] <= vpst[0]-vx ? vpre[1] : vpst[1] # *2
end
end
nil[0] # *3
end
*1 検索対象が昇順なら"vx>vpre[0] && " 部分は不要
というか、ここを削れば問題点2は解消する
*2 3項演算子といってexcelのif関数のようなもの (cond ? retA : retB)
*3 問題点2のエラーを発生させるためのもの。
*1の対策を実施すればこの行には到達しないので削除してよし
高速化とか一切していないので悪しからず。
>>717 の言うとおり、二分検索するのがいいんでない。
適当にコード見て書いただけなんで、バグとか指摘の間違いとかあるやも。
>>711 ほぼ参考書のままです。
とりあえずステータスコードをつけて動くか確かめてみます
結局Content-typeの改行コードを\r\nにしたら動きました
>>727 一応めでたく完成して新しい追加機能2つ(日付表示・連投規制)を
付け加えました。たぶんこれで実運用上、書き込みがぶつからなければ
なんとかなると思います。タグ検索機能はなんか変ですが
おいおい何とかします。
>>727 誤りではないだろう、HTTPの標準改行コードは\r\nだ
出力先がバイナリモードでさえあれば問題はない
>>716 >>718 >>719 Java出身のruby初心者だったものでクラスライブラリはクラスの継承で繋がってると思い込んでました。
なるほど、rubyはモジュールや入れ子のクラスを多用するんですね。
勉強になりました。ありがとうございました。
Javaだってよく使うだろう。
RubyやPerlって一体なにに使う言語なんですか? Htmlに組み込む言語という解釈でいいんですか?
テキスト処理をするのに使う テキスト処理と聞いて何も思いつかない場合はまだスクリプト言語に用がないということなので PerlやRubyのことはすっぱり忘れて別なことを楽しみましょう
rubyはrailsのために使います。 フリーだと現時点で一番効率よく稼げるのrailsです。 3人月の案件で700は固いから月給200万ですよ。
日本語でおk
>>732 >Htmlに組み込む言語
それはPHP
>>737 HTMLがPHPになるんですか?
PHPがHTMLになるんですか?
組み込むってそういうことですよね?
画面分割はどうやればいいんですか? 自動的に隠したり、分割を×ボタンで消したりする機能のパックになったコントロールとかあるんですか?
>>739 Webクライアントの仕組みについて理解してから来なさい。
>>739 えーと…
Rubyの仕事ではないので、GUIに何を使ってるか調べて、それに関するスレなりサイトなりに行くといい
@蠣←これを右クリでコピーする Aスタート→すべてのプログラム→アクセサリ→メモ帳を起動 B編集→貼り付け C編集→すべて選択 D変換キーを押す
743 :
676 :2008/10/28(火) 23:44:49
>>717 説明不足でした。私がやりたいのは、以下のものです。
・1列目にソート済みの数値が入っている
・2列目には1列目の各行に対応する数値が入っている
・ある数値(入力値)が来た時に1列目の中から最も近い値を探し、それに対応する2列目の値を返す
・もし入力値が1列目の数値の上下限から外れていたら、それぞれ99.9か-99.9を返す
です。
>・Range#eachがあるんだからeachを使う。Rubyでforは(めったに)使わない
始めたばかりなもので。。。今後はeachを使います。(ちなみに速度に差はありますか?)
>・不要なbreakが見られる
入力値が上下限から外れていたら、関数の中のif文より後のfor文にいれたくなかったので使いました。これを見てからelseに書き換えました。
(一般的にbreakは多用しない方がよいのですか?)
>・異常入力に対して99.9とかを返すのは、これでいいの?
異常を示す文字列にしようかとしましたが、今、私がやりたいことにおいて99.9で十分なのでこうしました。
744 :
676 :2008/10/28(火) 23:45:30
>>723 >1.
書き忘れていましたが、ご指摘のとおりソート済みを仮定しています。
>2.
ちょうどそのエラーに出くわしていたところでした。。。
>3.
事前に一応調べてはみたのですが、ちゃんと理解できていなかったです。
また数学がよくわかっていないため、2の事態が発生しました。
>4.
MATCH関数を知らなかったので調べてみましたが、どのように適用すればよいかわかりませんでした。もう少し詳しく教えていただけないでしょうか。
>>724 知らない事がありすぎるのですが、みやすくなったので使ってみたいと思います。
速くなるのも教えていただけると助かります。。。
forは内部的にeachを呼び出すそうだから、速度差など無いに等しい。
どうしても気になるなら一億回くらい空ループ回して計ってみるといい。
まぁ、仮に10倍の速度差があったとしても、今は気にする必要ない。
プログラムの高速化はまず何よりもアルゴリズムが最優先。
小手先の最適化に手をつけるのはその後だね。
breakは単に使い方が悪い。
>>677 の最初の2つは先にreturnするので、絶対に到達しない。
最後のはbreak後returnしかしていないので、returnで置き換え可能。
breakせずに抜けるパターンの場合、必ず範囲外アクセスで落ちる。
つまりすべての箇所で何の役にも立っていないというわけ。
異常入力にマジックナンバーを返すのもありだけど、発生頻度が低く
検査箇所が多いようなら例外(Exception)を発生させたほうがいいよ。
コードの見通しがまるで違ってくるから。
VLOOKUPは検査値に対応する行と指定した列が交差するセルの値を
返すのに対し、MATCHは検査値に対応する値の位置を返す。
VLOOKUPでは検索範囲が左端の列で、かつ対応する値の列の高さと
縦位置が完全に一致しなければいけない。
MATCHとINDEXまたはOFFSETとの組み合わせなら、検査列に対応
する値の列が左にあってもよいし、縦にずれていてもよいし、列でなく
行(対応する値が横に並ぶ)でもよい。
その気になれば対応する値をnマスおきに飛び飛びにだってできる。
それに比べると列指定不可のVLOOKUPなんてあまりに不便すぎる。
MATCH関数もどき。 返値は0を起点とする点が異なる。
直近値検索方法は
>>677 と同じ。
def match_liner(val, array) #
>>677 と同等
array[0...-1].each_index do |i|
if val <= array[i+1]
return val-array[i] <= array[i+1]-val ? i : i+1
end
end
array.size - 1
end
def match_recursive(val, array)
case array.size
when 0
nil
when 1
0
when 2
val-array[0] <= array[1]-val ? 0 : 1
else # ↑↓ 不等号に注意のこと
i = array.size / 2
val < array[i] ?
match_recursive(val,array[0..i]) : match_recursive(val,array[i..-1]) + i
end
end
ベンチマーク srand 1.0 * 2008/10/29 * 3*14 * 0xdeadbeaf # 乱数の種を設定 lookup = Array.new(100000){ rand }.sort! data = Array.new(2000) { rand } Benchmark.bm do |x| x.report { data.each do |v| match_liner v, lookup end } x.report { data.each do |v| match_recursive v, lookup end } x.report { data.each do |v| match_loop v, lookup end } end user system total real 221.528000 0.040000 221.568000 (237.392000) # 線形検索 0.501000 0.000000 0.501000 ( 0.550000) # 二分検索(再帰) 0.140000 0.000000 0.140000 ( 0.141000) # 二分検索(ループ)
>>746 の二分検索は再帰で実装してあるけど、ループに展開すると
もうちょっと高速化できる。(ベンチ中のmatch_loopがそれ)
どうやって展開するのかは自分で考えてみてほしい。
うまく書ければ20行かそこらで済むはず。
ついでにおまけ。 (
>>747 続き、 match_なんたらはmatchと定義しておく)
def vlookup(val, range, column) # 指定列は0を起点とする
val = val.to_f
if val < range.first[0] or val > range.last[0]
raise ArgumentError, "value out of range"
end
row = match val, range.map(&:first)
# range[row][column] と同じだが、範囲外では例外を起こす。
range[row].fetch column
end
pairs = lookup.zip(Array.new(lookup.size) { rand 100000 })
data.take(10).each do |v|
puts vlookup(v, pairs, 1)
end
全角空白厨は何を言っても説得力がない
そこが気になるというのは、もしやコードをテストしてみようとしたわけか? 朝早くから実に殊勝な心がけだ。 大変すばらしい。 それだけ向上心があるなら、更なる技術向上のための課題として、全角半角の 変換フィルタでもチャレンジしていただきたい。 (もちろんワンライナーな)
>>750 コードは全く読んでない
全角空白かどうかだけをブラウザ上でチェックした
それで充分
>>749 ,751
俺もコード張るときはwebブラウザとかJaneのこと考えて
全角に変換してから張るんだけど何かまずいの?
書き込む際に見やすいように、という理由でいわゆる全角スペースを使うのは 割とよくあることだと思うんだが、それをどういう切り口で転がすと「厨」になるんだろ。 それこそ「説得力が無い」よ。
全角空白なんて危険なもの使わなくたって があるだろう 初心者がコピペで実行する初心者スレで全角空白みたいなのをコードに混ぜるのはあまりいい気はしない arr.each do |e| puts e end
755 :
752 :2008/10/29(水) 10:31:22
>>754 本人?
よりよい方法がある、という話ならわかるけど、そんなことで厨呼ばわりした上で、
コードなんか見なくても十分とか言ってのけたわけ?
「あまりいい気はしない」とか、なんか急にトーン下がってるけど。
>>756 いや全然
検証のために irb にコピペして全角空白でエラーになってピキッとなったことはないか?
せっかく書き込み前に置換する手間を割いてるのに置換先が全角空白だというのはバカっぽいだろ
なんでわざわざ実行不可能なコードにさせるんだよ
他人が実行するかもしれないことに気が回らない俺スゴイ系の人は 2chでは厨呼ばわりされても仕方ないかな、という気はちょっとだけする
だが、ム板では普通に見かけるけどな。 インデントを全角空白で、ってのは。
ソース見れば普通に半角空白残ってるんだお
置換の手間は割けなくても長文粘着はありなんだよねこういう人ってw
CSV::Writer.generateを使ってCSV出力をしているようなんですが 出力されたCSVを見ると AAA,BBB,CCC,DDD と出力されており1データに改行が含まれている場合に正常に解析できなくなってます。 AAA,BBB,CCC,DD D 本来ですと "AAA","BBB","CCC","DD D" のようにデータが""で囲われてほしいのですが何か方法は無いでしょうか? ソースは↓な感じですです。 def issues_to_csv(issues, project = nil) ic = Iconv.new(l(:general_csv_encoding), 'UTF-8') export = StringIO.new CSV::Writer.generate(export, l(:general_csv_separator)) do |csv| # csv header fields headers = [ "#", l(:my_data1), l(:my_data2), l(:my_data3), ] csv << headers.collect {|c| begin; ic.iconv(c.to_s); rescue; c.to_s; end } end export.rewind export end
投稿者1人が半角スペースなコードをエディタに書く ↓ 書き込み時に全角スペースに置換する ↓ 参照者複数人が各々のコピペ時に全角スペースを置換する ↓ エディタに半角スペースなコードができる まあ、プロトコル的に無駄ではあるな 投稿者が半角スペースを に置換してくれさえすれば参照者はコピペだけでおkなのに 2chブラウザによっては半角スペースを投稿時に に変換してくれるものもあるけどな navi2ch使いあたりはこのへん全く意識しないはず というか、全角スペース混じってると範囲実行のM-|ができなくてイラつく(w いちいち 1 [1,2,3].each do |e| 2 puts e 3 end と行番号つきで書かれるくらいムカつく
Jane Doe Styleで
>>754 をコピーすると
半角スペースの箇所はクリップボードには &#160 (&#は半角)で保存されるぞ
アプリケーション( 2ch 含む)によって文字参照の扱いなんてまちまちなんだから
文字参照に変換してから貼れって主張にはあまり魅力を感じないんだよな
コピペ内容に関して意識してる2chブラウザはそう多くないよね どうレンダリングするかとかはRFCに記述ないんだっけ?
なにやらえらい騒ぎになってしまったな。
全角半角が問題になるのはコピペする人間だけなのだが、実際それをする人間がどれ
ほどいるのか。
他の板ならともかく、いかに初心者スレとはいえここはム板なんだから、一括置換な
んぞ5秒でこなす
くらいの能力は期待できないものなのか。
学校のセンセじゃあるまいし、その程度は勘弁していただきたい。
まぁ、全角を使っているのは書き込みログが読みにくくなるから、というしょーもな
い理由なので、
こちらも置換すれば済む話ではあるし、専ブラで対処できるものなら導入を検討する
よ。
と、ここで新着見たら、そんな簡単な話しでもないのか。
確かに
>>764 は以前くらったことがあるな。
どうしたもんかね。
ノンブレイカブルスペースは \x20 とは別物。常識
おれも つかってたけど、
>>764 と同じことがあって、
結局全角スペースのほうが害がすくないと判断してる。
>>767 そうなんだよね。しかも が半角スペースにならない環境だと、
置換が全角スペースより面倒なんだよな。
まあ2chの仕様がクソということで。
>>762 CSVやめて、FasterCSVを使ってみたらどうでしょうか。
「ruby fastercsv」でぐぐってみてください。
770 :
デフォルトの名無しさん :2008/10/29(水) 17:08:50
>>769 実は先ほどソースはredmineのものなんです
ファイル名app\helpers\issues_helper.rb
なので簡単にFasterCSVに置き換えて大丈夫なものなのか判断しにくいんです。
変更は簡単ですかね?
>>762 CSV::Writer ならエスケープが必要なフィールドだけエスケープされるので、
以下のようになるはずだけど。
AAA,BBB,CCC,"DD
D"
DD\nDだけじゃなくてAAAとかもクォートして欲しいってこと?
>749-768 先頭の空白に関しては、まだRubyは良いほうでしょ Pythonなんて先頭の空白が纏められたら話にならんかと
773 :
デフォルトの名無しさん :2008/10/30(木) 16:17:11
while文の中にif文入れられる?
a = [1, 2, 3] while if n = a.shift n else false end p n end # => 1 # => 2 # => 3
775 :
デフォルトの名無しさん :2008/10/30(木) 18:36:04
msg = "(1+2+3)*2/3" などのように数式の入った変数を プログラムの構文として処理することは可能でしょうか? val = 構文評価(msg) のようなイメージで、 任意の数式をRubyで処理することを期待してるのですが
>>775 手っ取り早いのはeval。
でも数式に限らずなんでも実行できてしまうから
四則演算だけ処理したいならraccとそのサンプルのcalc.yあたりとか。
777 :
775 :2008/10/30(木) 19:31:22
>>776 > 四則演算だけ処理したいならraccとそのサンプルのcalc.yあたりとか。
正規表現で入力を検査してokならevalに渡す方が楽でない?
そのへんは入力元がどのくらい信用できてどのくらい調教可能かによるな
信用できないから検査する。 何によるかというならどれくらい受理する式の文法を限定できるかだろう。 君、バカでしょ。
検査が必要かどうかという話だろ 自分で電卓代わりに使いたいだけなら入力検査は不要 こんなの完璧にやるか全くやらないかの2択なんだから信用度は重要 2//3 で エラー吐いて落ちるのは困るだろうし 1 2 + 3 で エラー吐いて落ちるのは困るだろうし 1/3*3 で 0 が返るのも困るだろうし (1..2) で Range オブジェクトが返るのも困るだろう
>>781 君はバカさ加減の露出癖でもあるのかね。
> こんなの完璧にやるか全くやらないかの2択なんだから信用度は重要
不測の動作をさせないことが保証できればいいんだよ。
エラーはevalのすぐ外で捕捉すりゃいい話。
> (1..2) で Range オブジェクトが返るのも困るだろう
そうならないように検査するんだろうが。
じゃあraccでやれよ
は?
785 :
676 :2008/10/31(金) 00:28:23
786 :
デフォルトの名無しさん :2008/10/31(金) 02:28:31
>>785 コードの端々で妙な書き方してるから、他言語でヘンな癖でもつけて
きたのかと思ってたら、もしかしてプログラミング初心者だった?
Excel VBA使いを想定してたんだが、Excelもサッパリのようだし…
INDEXやOFFSET等、全部大文字で書いたのはExcelの関数。
これらについてはスレ違いなので他でよろしく。
まぁ、とりあえずは基本的な文法・制御構造をまず覚えてくれ。
最低限、分岐・ループ・メソッド呼び出しとそこからの脱出あたり。
勧めといてなんだけど例外は後回しでいいかな。
一度苦労した後の方が有り難みもよく分かるだろうし。
次に組み込みクラスについて調べてみる。
上で使ってるのは、数値(Numeric), 文字列(String), 範囲(Range)
あたりを見れば分かる程度の簡単な使い方してる。
重要なのは配列(Array)とEnumerableの2つ。
制御構造と並んで、こいつらがアルゴリズムを実装する要だ。
(今回は使わなかったが、Hashもいずれ知っておくべき)
クラスライブラリを全部覚えるのは大変だろうけど、どんなことが
できるかくらいはざっと目を通しておくといい。
そうしたらコードを読んでみる。
どれもかなり短いから、読み下すのはそう難しくないとおもう。
行数短縮のために三項演算子を濫用している点は申し訳ない。
コードを読んだだけでは内容を理解するのは難しいだろうから、 短い配列でどのような動きになるか、紙に書いてみるといい。 再帰をループに変更するにはアルゴリズムを十分に理解して いなければならないが、是非がんばって挑戦してほしい。 ケチな高速化など後回しと書いた理由も実感して貰えたと思うが、 もし興味を持ったなら、アルゴリズムも勉強してみてはどうか。 ほんのちょっとの仕組みの違いで速度が千倍とかざらにあるよ。 計算量の考え方だけでも知っておくことをお勧めする。
VB系はreturnに直接相当する命令がないからな。 戻り値と、プロシージャを抜ける構文が別になってるから。 で、そのまま直訳してreturnとbreakに分けた、と。そんな感じだろう。
あるクラスAが別のクラスBのサブクラスかどうかを判定するメソッドってありませんでしたっけ? 今は A.ancestors.include?(B) とやってるんですけど、かっこわるいですよね。
792 :
デフォルトの名無しさん :2008/10/31(金) 17:21:41
どうして?それでよいのでは?
class B;end class A < B; end class C; end p A < B p A > B p A < C
>>793 >> File < IO
=> true
>> Dir < IO
=> nil
なにこれーーー
>> Fixnum < Integer
=> true
>> Array < Enumerable
=> true
module もOKだ
ちょうさんくすです
まさかModule/Class同士の比較ができるとは・・・知らなかった
>>795 伊達に継承の記号が "<" なわけじゃない。
……かどうかは知らないが。
797 :
デフォルトの名無しさん :2008/11/01(土) 06:26:05
VIPから来ますた
VIPから来ますた
799 :
デフォルトの名無しさん :2008/11/01(土) 06:28:45
∧_∧ ( ´・ω・) みなさん、VIPからさし入れのお茶が入りましたよ・・・・。 ( つ旦O と_)_) 旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦
VIPから来ますた
801 :
728 :2008/11/01(土) 08:48:50
検索機能がついに完成しました。 一応私の夢見た掲示板をついに作り終えました。 とはいえまだ課題がいくつか残ってます。 それを今後つぶしていきます。
802 :
デフォルトの名無しさん :2008/11/01(土) 11:00:45
以下のスクリプトで,30行目で,
usr/lib/ruby/1.8/net/http.rb:451:in `initialize': wrong number of arguments (2 for 1) (ArgumentError)
のエラーが出てしまいます。
比較のためにAとBを作ったのですが、29行目ではエラーが出ません。
Net::HTTPを承継したクラスを作って,コンストラクタの部分を
オーバーライドしようとしています。
エラーの原因は何でしょうか
1 #!/usr/bin/ruby
4 require 'net/http'
5 require 'uri'
7 class A
8 def initialize(arg)
9 puts "A initialized", arg
10 end
11 end
13 class B < A
14 def initialize
15 puts "B initialized"
16 end
17 end
19 class C < Net::HTTP
20 Net::HTTP.version_1_2
21 def initialize(url)
22 uri = URI.parse(url)
23 puts "C initialized"
24 super(uri.host, uri.port)
25 end
26 end
28 url = '
http://www.yahoo.co.jp/ '
29 p b = B.new
30 p c = C.new(url)
URIはHTTP専用ってわけじゃないので、ちゃんとプロトコルから書く。 あとNet::HTTPはわりと残念な設計で、サブクラスでinitializeをオーバーライドしても呼ばれない。 委譲したほうがいいかも
>>802 これで我慢すれ
class C < Net::HTTP
def initialize(*args)
args[0].kind_of?(URI) ? super(args[0].host,args[0].port) : super
end
end
そこでhttpclientですね
802 じゃないけど、なんであのエラーが出るのか理屈がわからない…。
>>802 の initialize にダミー引数を渡すと呼ばれるよね。
require 'net/http'
require 'uri'
class C < Net::HTTP
Net::HTTP.version_1_2
def initialize(url, dummy=nil)
uri = URI.parse(url)
puts "C initialized"
super(uri.host, uri.port)
end
end
url = '
http://www.yahoo.co.jp/ '
p c = C.new(url)
Net::HTTP を眺めて同じ挙動を再現しようと思ったけど、できないYO!
class A;end
class << A; alias newobj new; end
class A
def A.new(foo, bar=nil)
a = A.P(foo, bar).newobj(foo, bar)
end
def initialize(foo, bar=nil)
puts "A init."; @foo = foo; @bar = bar
end
def A.P(foo, bar=nil);self;end
end
class B < A
def initialize(foo)#, bar=nil)
puts "B init."; super(1, 2)
end
end
p b = B.new(3)
>>806 × a = A.P(foo, bar).newobj(foo, bar) # in A.new
○ a = self.P(foo, bar).newobj(foo, bar)
808 :
806 :2008/11/03(月) 00:21:05
おおお!!thx
>>807 なんで、A付けちゃったんだろ?
これを色々いじって、マニュアル見ながらよく考えてみる。
も一回ありがとう!
>>807
ディレクトリの中にあるすべてのファイル名を変えるプログラムを作ろうとしたのですが 5分で挫折しました(笑) File.open("D:\\Data") {|f| puts f.to_str() } とりあえずこうやってファイル名を出力しようとしたのですが、 コマンドプロンプトではすべてUNICODEのファイル名で表示されてしまい わけわかめです。 $SCODE = SJISとかやってもダメでした
それファイル名じゃなくdataというファイルの中身を読んでいるように思えるが `dir d:\\data /b`.each { |f| f.chop! puts f }
その場合メソッドパラメタの名前は line とかのほうがいいぞ
メソッドパラメタ → ブロックパラメタ
>>809 そういうときは、致命的な動作になるまでは Dirl.glob を使う
ディレクトリ区切り文字は \ ではなく / なので注意
irb> Dir.glob('c:/*')
["c:/AUTOEXEC.BAT", "c:/boot.ini", "c:/bootfont.bin", "c:/CONFIG.SYS", "c:/Documents and Settings",
"c:/Program Files", "c:/RECYCLER", "c:/ruby", "c:/System Volume Information", "c:/WINNT"]
irb> Dir.glob('c:/*/')
["c:/Documents and Settings/", "c:/Program Files/", "c:/RECYCLER/", "c:/ruby/",
"c:/System Volume Information/", "c:/WINNT/"]
irb> Dir.glob('*.txt')
["001.txt", "002.txt", "003.txt"]
irb> Dir.glob('*.txt').each{|e| FileUtils.mv(e, "#{File.basename(e,'.*')}.bak") }
irb> Dir.glob('*')
["001.bak", "002.bak", "003.bak"]
>>813 今のrubyは\も扱ってくれるよ
と思ってたが、Dir.globは\区切りに対応してないのね……
下のディレクトリの中も再帰的にやるんじゃなかったら Dir.entries(ディレクトリのパス).reject{|d| File.directory? } とか。
rubyでファイルの種類の判断ってできますか? 拡張子で判断するのではなくファイルの中身で、Excelファイルかどうかの判断が したいんです。 よろしくおねがいします。
できますよ
>>816 unix系ならFileMagicだけどwindowsはよう知らん
>>815 Windowsですが
再帰でディレクトリリストが欲しい時もcmdのdirですましちゃう
サブディレクトリ一覧
dir /s /ad /b \ほげほげ\ | ruby -ne "puts $_”
ほげほげ下のサブディレクトリ内の.rbファイル一覧
dir /s /a-d /b \ほげほげ\*.rb | ruby -ne "puts $_"
とか
rubyだけでやるならglobで/**/使って
Dir.glob('/ほげほげ/**/*/'){|e| puts e}
とか
Dir.glob('/ほげほげ/**/*.rb'){|e| puts e}
と、いろいろ試してたら列挙される数が違ったんで、あれっ?と思ったら
globの方は標準ではドットファイルが除外されるのを忘れてた
使用してるのがWindowsオンリーなので、普段ドットファイルなんて意識しないし
Dir.glob('/ほげほげ/**/*.rb',File::FNM_DOTMATCH){|e| puts e}
>>816 エクセル持って無いけど
たぶんファイルの先頭見たら判るんじゃね?とググって見ると
エクセルもワードも BIFFってフォーマット(OLE?)でどっちもファイルの先頭は同じだったorz
さらにぶらぶらと調べてたら、parseexcelっていうライブラリを見つけたので
適当にインターネットからxlsファイルを落としてきて
require 'parseexcel'
workbook = Spreadsheet::ParseExcel.parse('エクセルのサンプルファイル.xls')
で読み込めたけど、えらく遅かったので parseexcel がパース直前にやってることを直に書いてみた
require 'parseexcel'
begin
ole= OLE::Storage.new('エクセルのサンプルファイル.xls')
biff = ole.search_pps([OLE.asc2ucs('Book'),OLE.asc2ucs('Workbook')],true)
if biff.first
puts "エクセルファイル"
else
raise 'NotExcelfile'
end
rescue
puts "エクセルファイルじゃない"
end
エクセルファイルを漏れなく判定できるのかはわかりませんが…
require 'foobar' としたあとで、'foobar.rb' の絶対パスを調べる方法ってありますか。
File.expand_path($LOAD_PATH.map{|d| File.join(d, 'foobar.rb') }.find{|path| File.exist?(path) })
>>823 それは読み込んだファイルであることを保証しない
読み込んだファイルそのものを指定することは1.8ではできないと思った
同名のファイルをファイルパスから探すことはできるけれど
>>823 で問題になる場合というのはなくはないとは思うが非常にレアなような気もする
foobar.rb で File.expand_path(__FILE__) を返すようなメソッドなりなんなりを用意しておくほうが確実なのかな
>>823 の要件に合うとは思えないけど
>>826 require を拡張したほうが妥当と思う
が、どうすればいいのやら
gem の require はどうやってるんだっけ
foobar.rb で File.expand_path(__FILE__) を返すようなメソッドなりなんなりを requireしたあとからくっつければ医院で内科医?
>>823-828 どうもありがとうございます。
ないということなので、以下の方法で済ませることにしました。
lib = "foobar.rb"
dir = $:.find{|path| File.exist?(File.join(path, lib)) }
filepath = dir ? File.join(dir, lib) : nil
ありがとうございました。
拡張子省いてrequireしたとき、.soだったのか.rbだったのかまで知りたくなったら、$LOADED_FEATURESとも突き合わせて比較する必要も出てくる。
突然ごめん。 p array した時の["hoge", "fuga", "boo"]みたいな書式って 変更できたりしない? あと一歩でcsvなので便利に使えそうなんだが。 pのことをググって調べるのは非常にホネが折れる…
inspect
>>832 >>835 その名も「csv」というライブラリが標準で付いてることを忘れないでやってくれ。
>>832 一文字目と最後の文字消せばいいだけじゃね?
なんでもかんでもググるって馬鹿がすることだよね。 賢い人なら知りたいことが見付かりそうな文書はどこにあるのかをまずは考える。
ロックシステムについて相談があるんですが i=0 begin File.open('lockfile',File::WRONLY|File::CREAT|File::EXCL,0666) do |lfile| File.open('hoge','r') do |file| # hogeを使ったいろいろな処理 end end File.unlink('lockfile') rescue SystemCallError if(i>10) then raise i+=1 if(File.stat('lockfile').mtime<Time.new+10) then File.unlink('lockfile') #残骸のロックファイル削除 else sleep(0.1) end retry end どうもi386-mswin32だとEXCLオープンしても例外を投げなくてうまくいかない ようです。他のプラットフォームだとどうなんでしょう?
File#flock() を使う方法しかしらない。 File.open("foobar.txt", "wb") do |f| f.flock(File::LOCK_EX) # 排他ロック f.unlock(); end
なんか既視感がある 組み込みで妥当に動作してるロック機構を再発明しようとするな、というのがアドバイスだったはず
>>840 まずそのサーバーでflockが使えないから無理
>>841 組み込みで現に存在してるのが使えないから問題。
確認したいこと
1.とりあえず方法があっているか。
2.Windowsだとまともに動かないようだが他のプラットフォームだとどうか。
>>839 1.8.6-FreeBSDだけど File::CREAT|File::EXCL で Errno::EEXIST が出る
ただし
>>839 のソースをそのまま実行すると例外が rescue でとらえられて
例外処理でロックファイル削除されてからリトライするから、例外が発生してないように見える
あとrescueの下の二行間違ってるよ
>>839 $ ./ruby.exe -v -e 'open("hoge", File::WRONLY|File::CREAT|File::EXCL,0666)'
ruby 1.8.7 (2008-11-04 revision 20103) [i386-mswin32]
-e:1:in `initialize': File exists - hoge (Errno::EEXIST)
投げるが。
> if(File.stat('lockfile').mtime<Time.new+10) then
未来の時刻と比較してるようだがこれはいいのか?
>>843 確かにおかしいところがあるかもしれないです。
rescue
if(i>10) then
raise
end
i=i+1
if(File.stat('lockfile').mtime<Time.new+10) then
File.unlink('lockfile') #残骸のロックファイル削除
else
sleep(0.1)
end
retry
end
一応rescue節の書き換えはしてみました。これで大丈夫でしょうか。
あと、例外処理でロックファイルが削除されるのはたぶん正しいです。
というのもそのファイルの最終更新時間が10秒以上前なら削除するように
できてますから。
>>844 あ、やばい。そこがおかしい。
どう考えてもおかしい。
if(File.stat('lockfile').mtime+10<Time.new) then
こう直すべきだ
>>844 どこでおかしかったか分からないが治った。thx
>>842 > 組み込みで現に存在してるのが使えないから問題
>>842 > 1.とりあえず方法があっているか。
あってない。突っ込み所満載。
・SystemCallError なんて上がらないんだが。
rescue => e
puts e.class
とでもして、何が上がってるのか確認しろ。
・if文が閉じてねーぞ。
> if(i>10) then raise
1行で書きたきゃ「if(i>10) then raise; end」か「raise if (i>10)」だ。
つか、endの対応が合ってなくてさくっとsyntax errorなんだが……。
・mtimeが「現在+10秒」より過去、って何の冗談だ。
・あるプロセスがunlinkした直後に別のプロセスがstatしたら死ぬんだが。
・あるプロセスがstatしてunlinkするまでの間に別のプロセスがstatしてunlinkしてopenしたら不味いんだが。
> 2.Windowsだとまともに動かないようだが他のプラットフォームだとどうか。
とりあえず適当に修正したら、2プロセス程度の簡単なテストならちゃんと動いた。(@mswin32)
>>849 1.Errno::XXX系統のクラスは全部SystemCallErrorのサブクラスなので
きちんと受け止められる
2.if文問題は修正済み
3.時間問題も修正済み
4.いまだにレースコンディションが解消してない件は最悪またSystemCallErrorで
受け止めてやればいい
修正したソース(rescue節のみ記載)
rescue
if(i>10) then
raise
end
i=i+1
begin
if(File.stat('lockfile').mtime+10<Time.new) then
File.unlink('lockfile') #残骸のロックファイル削除
else
sleep(0.1)
end
rescue SystemCallError
#rescueするけど何もしない
end
retry
end
それでもやっぱり最後のレースコンディションは解消してないのだが、 これ以上この方法にこだわる限り改善の余地はなさそう。
>>842 >まずそのサーバーでflockが使えないから無理
File#flock() が使えない環境ってどんなの?
どこでも使えるもんだと思ってた。
>>850 更新時刻から10秒待つのに、リトライは0.1秒×10回でいいのか、というのはおいといて、ゴミ掃除を別々のプロセスで確実にやるのは無理だと俺は判断してる。
ゴミ掃除専用のプロセスを1個だけ別に動かしとけ。メインの処理に10秒以上かかる可能性がないと言えるなら、それで大丈夫だろ。
どうせ専用のプロセスを立ち上げるなら, druby使ってmutexを共有するという強引な方法を思いついた
普通にO_EXLOCKでシステムのアドバイザリロック機構に頼ればいいんじゃないのか? 下がnfsだったりするとアレだが。
>>853-854 レンタルサーバーでCGIを動かすために使うというのが大前提なので。
プロセスの常駐とかまず無理。
10秒待つのではなく確実を期すために10秒以上前のロックファイルを
削除するといっている。待つ時間は1秒。
flockメソッド(関数)は、言語によって同じ名前でも実装が違ったり 一部のファイルシステムやレンタルサーバ上では使えなかったりしてあまり信用できない かといって自分でロック機構を実装すれば、レースコンディションの危険がある なんかこの辺をさくっと解決してくれるpure rubyなライブラリないかな
>>857 >flockメソッド(関数)は、言語によって同じ名前でも実装が違ったり
Rubyの話してるんだから他の言語は関係ないだろ。
>一部のファイルシステムやレンタルサーバ上では使えなかったりしてあまり信用できない
だからどんなファイルシステムやレンタルサーバ上で使えないの?
具体名をだしてくれ。
どういう場合にflockが使えないのかを、ドキュメントに書いてもらおうぜ。
>>858 NFS上でのロックは不可能。
これはflockシステムコールの実装から来る制約。
fcntlを使えばNFSでロックすることは可能になるがIO.ioctl関数という
可搬性が低いメソッドを用いなければならず(まずWindowsなら実装されていないと
門前払い)かなり面倒。おまけにたいていNFS上でのロックはセキュリティホールに
なるので使えないのが普通。
>>858 レンタルサーバだと、flockが明示的に禁止されているサーバがある。パンドラとか
ただ、現在flockを使えないサーバがどのくらいあるかは分からない
無視できるほど少数かも
861 :
デフォルトの名無しさん :2008/11/08(土) 22:07:38
正規表現の書き方なのですが、、、、
>Sector:</td><td class="yfnc_tabledata1"><a href="
http://biz.yahoo.com/p/7conameu.html ">Services<
こんな文字列があって、前後にも改行以外の文字が色々とくっついているのですが、
Sector:の後のServicesをマッチさせて文字としてとってこようとすると、どう書けば良いでしょうか?
正規表現は書き方を覚えないと駄目 なぜなら、ほんの少し変えようと思っただけで別物になるから コピペでやろうとすると異常に遠回りになる 正規表現自体は他の言語の正規表現とけっこう互換性があるから適当なサイトで勉強すれ
863 :
デフォルトの名無しさん :2008/11/09(日) 00:42:26
>>862 ありがとうございます。
マッチしたい文字列が9種類しかないのが分かったので、こうやりました。
if line =~ /.*Sector:<.*(Basic Materials|Conglomerates|Consumer Goods|Financial|Healthcare|Industrial Goods|Services|Technology|Utilities)/
p $1
end
具体的には… 1.とりあえずwxWindowをインストールした 2.wxRubyをgems経由でインストールした 3.簡単なテストアプリケーションが動くようになった 以上のことがすでに完了してます。
866 :
デフォルトの名無しさん :2008/11/09(日) 12:00:00
文字列変換メソッドを多数持たせたモジュールがあります。呼び出し ごとに正規表現オブジェクトが作成されるのを防ぎたいのですが、 単に/abcde/ の代わりにRegexp.new("abcde")とすればOKですか? それともグローバル変数みたいなものに格納しないとキャッシュと しての効果は出ない?
式展開を含まないならどうでもいい
>>866 irb> class RegData
def reg1; /abc/; end
def reg2; /ABC/; end
def reg3; /123/; end
end
irb> RegData.new.reg1
/abc/
irb> RegData.new.reg1.object_id
537973880
irb> RegData.new.reg1.object_id
537973880
irb> RegData.new.reg1.object_id
537973880
ということで、静的な正規表現は、クラス定義が読み込まれた時点で使いまわしモードに入る
@re_scan = /xxxx.+?(yyy)zzz+/i
のようにクラス変数に正規表現を保管するというようなよくあるテクニックは、
正規表現が静的である場合に限り、コスト上は実は無意味、あるいは参照コストのぶん損だったりする
>>867 の言うように、式展開を含むような「毎回違う可能性のある」正規表現はこの限りではない
>>866 /abc/ なら毎回生成されることはない。
/ab#{var}cd/ や Regexp.new("abcd") なら毎回作成される。
あとは
CACHE_REGEXP = {}
def cache_regexp(str)
CACHE_REGEXP[str] ||= Regexp.new(str)
end
とか。
>>864 公式のチュートリアル。
あとWxWidgetsのサイト全般と公式のAPIドキュメント。
wxに限ったことではなく、既存ライブラリのRubyバインディングは
元ネタのサイト漁るのが一番いいと思う。
>>870 読んでみたんですが、すでに???状態です。
英語ワカンネじゃなくてそもそも読む気力がないのが大問題だったりするわけですがorz
今度気力が回復したらやってみます
わかんなくてもコードコピペしてたら何となく動くし
それでもダメならWxWidgets関連のサイト参考にって
>>870 の2-4行目で
>>872 ええ。一応その段階はある程度OKです。
あとはゆっくり亀のように進んでいけばいいんです。
解決しました。ありがとうございます。
>>864 harukaze wxPython で検索
あと、解説サイトじゃないけど
wxRuby開発者が出してるwxsugarオススメ
876 :
866 :2008/11/09(日) 15:29:30
>>859 >NFS上でのロックは不可能。
ほう、そうなのか。知らなかった。さんくす。
>fcntlを使えばNFSでロックすることは可能になるがIO.ioctl関数という
>可搬性が低いメソッドを用いなければならず(まずWindowsなら実装されていないと
>門前払い)かなり面倒。
Windows上でNFSを使うことはないだろうから、ioctlはUNIX限定でいいんじゃね?
>おまけにたいていNFS上でのロックはセキュリティホールに
>なるので使えないのが普通。
これよくわかんないんだけど、理由は?参考になるURLプリーズ。
>>860 >レンタルサーバだと、flockが明示的に禁止されているサーバがある。パンドラとか
これも理由がわからん。レンタルサーバでNFS使ってるわけじゃないだろうし。なんで?
超絶初心者な質問で申し訳ないんですけど、RubyScript2Exeでexeファイル作りたいんですけど上手くいきません。 使い方は、RubyScript2Exe.rbとexeにしたいファイルを同じフォルダに入れて、 コマンドプロンプトで、「ruby [RubyScript2Exeのパス] [exeにしたいファイル]」 で合っていますか?
>>878 サンクス。あきらかにNFS使ってるね。
そんなサーバがあることに驚いたけど。
つまりflock前提として、最適なロック方法は 「まずIO.ioctlでロックを試みる、エラーが出ればrescueしてflockする」ということか! ・・・面倒だ やっぱり、完全に可搬性のあるファイルシステムロック用のライブラリが欲しいな
「完全に」とか簡単に言っちゃう人って頭悪そう。
不完全or不安定なライブラリがほしいって言うのもなんだと思うが
欲しい欲しい、して欲しい。
本来、ファイルロックみたいにべったり環境依存なものに、完全な可搬性を求める発想が普通は余りないんだよね。 とはいうものの「環境依存だから諦めろ」ってのも古い考えで、こういう操作こそ処理系で環境差異を吸収しろ、っていう意見も、確かに一つの見識だと思う。 というわけで、完全な可搬性を持ったファイルロックの実装をコントリビュートしてくれ。
あんまり気にしたこと無かったけど、makeするあたりで 良きに計らってくれるとよさそうな感じだね
flockが使えるかどうかがファイルシステムに依存する以上、 コンパイル時に判定するのは無意味じゃないか?
>>886 SQLが使えるなら簡単な表を作って、そこに1つだけレコードを追加して、
あとはSELECT FOR UPDATEかSELECT LOCK IN SHARE MODEで終了。
幸いSQL用のライブラリは普通に配布されてる。
SQLが使えない場合はやり方を工夫するしかないわけなんだが。
とりあえずパンドラさんのPerlライブラリを解析するしかなさそうだけど。
>>881 むしろ順番は逆のほうがいい。ioctl関数はどちらかといえば汎用関数。
ioctlが使えないのはほぼ例外なくWindowsで作られてるサーバー。
>>890 この関数の流れは…
1.ロックファイルを固有ファイルに名前を変えようとする。成功したら3へ
2.失敗したらタイムアウトより古いロックファイルがあればロックを取得しようとする。
成功したら3へ
3.1秒待って1へ戻る。ただしtry回試して失敗したら打ち切り
4.ロックを取得できていなければLockError例外を発生させる
5.ブロックをともなって呼び出されていた場合そのブロックを実行する。
そしてロックを解放する
ロックの解除は普通に元のファイル名に変更するだけ。
汎用性はかなり高いと思われる。レースコンディションを検討しても
まずないだろうと考えられる。ファイルのリネームができないサーバーは
まずないだろうからその面でも問題はない。
ただし、このプログラムを使う場合、GPL2が適用されるので それを使ったソースの配布もGPL2を用いなければならず、 そこが唯一の問題だったりする。逆に言えば、GPL2で 配布する予定のプログラムならぜんぜん問題はないといってよい。
アトミックな処理(シンボリックリンクの作成とか)を利用したロック方法は それなりにノウハウが枯れきっている話題だし、自分で実装しちゃえばいい。
すでに存在するディレクトリを指定したときにエラー返らないんだっけ?
ボロボロじゃん。 教科書に載るようなちゃんと知られたアルゴリズムを調べて書いた方がいいと思うよ。
901 :
デフォルトの名無しさん :2008/11/14(金) 00:49:45
drb
マルチは止めること 基本的なものだと発想はごく単純で、 互いが互いのキー入力やイベントを送信しあうだけ 左キーが押された!とかアイテム取った!とか
それじゃダメ。 片方をサーバにするのが一番簡単。
>>899 いい感じだと思うぞ
ただ、読み込みのときにディレクトリ名の生成を
乱数に頼ってるところが怪しい
1秒に10回くらいのリクエストがあると衝突しそう
ロックするのはIO.ioctlじゃなくてIO.fcntlな。
マルチってなんでダメなの?
>>907 「おなかが空いて死にそうなんです…」
「自分ではもうどうすることもできません…」
「お願いです一食分のお金でいいのでめぐんでください…」
といって食事代をめぐんでもらった
場所を変えてまた同じことを繰り返す
人の善意を利用した最低の行為
>907 マルチポストでググって出てくる最初のほうのいくつかを嫁
910 :
デフォルトの名無しさん :2008/11/15(土) 13:29:25
dbに繋げるために、MySQL/Rubyを入れたいんですが $ sudo gem install mysql -- --with-mysql-dir=/usr/lib/mysql と打ち込んだら、下みたいになります。 誰か教えてください。 $ head mkmf.log find_library: checking for mysql_query() in -lmysqlclient... -------------------- no "cc -o conftest -I. -I/usr/lib/ruby/1.8/i486-linux -I. -I/usr/lib/mysql/include -fno-strict-aliasing -g -g -O2 -fPIC conftest.c -L"." -L"/usr/lib" -L"/usr/lib/mysql/lib" -L. -Wl,-Bsymbolic-functions -rdynamic -Wl,-export-dynamic -lruby1.8-static -lmysqlclient -lpthread -ldl -lcrypt -lm -lc" sh: cc: not found checked program was: /* begin */ 1: /*top*/ 2: int main() { return 0; } 3: int t() { void ((*volatile p)()); p = (void ((*)()))mysql_query; return 0; } /* end */
sh: cc: not found コンパイラ入ってるか?
912 :
910 :2008/11/15(土) 13:53:08
>>911 apt-get install gcc
apt-get install make
をやったところ、無事にgem install mysqlが通りました。
ありがとうございます。
Dir.glob("**/*"){|f| p f } ↑だとフォルダもファイルも一緒に表示されてしまいます フォルダのみファイルのみのパスが欲しいんですがどうしたらいいんでしょう
dirs, files = Dir.glob("**/*").partition{|path| File.directory? }
ありがとうございます、今まで長々と書いてたけど短く出来るんじゃないかと思って聞いてみました。 あとコピペしたらエラーになったんで最後にpathを付けたら動きました。 dirs, files = Dir.glob("**/*").partition{|path| File.directory? path}
Dir.glob("**/*/"){|f| p f }
>>916 ありがとうございます、フォルダのみ検索できました
ファイルのみ検索できないか試したけど、拡張子ありファイルならできました
Dir.glob("**/*.*"){|f| p f }
918 :
デフォルトの名無しさん :2008/11/16(日) 01:29:01
なにかが重複していて、テーブルが作成されないのですがいくつか試したものの うまくいきません。誰か助言をお願いします。 $ gem list *** LOCAL GEMS *** actionmailer (2.1.2, 1.3.6) actionpack (2.1.2, 1.13.6) actionwebservice (1.2.6) activerecord (2.1.2, 1.15.6) activeresource (2.1.2) activesupport (2.1.2, 1.4.4) fastercsv (1.4.0) gettext (1.93.0) hoe (1.8.2) mysql (2.7) rails (2.1.2, 1.2.6) rake (0.8.3) rspec (1.1.11) rspec-rails (1.1.11) ruby-openid (2.1.2) rubyforge (1.0.1) rubygems-update (1.3.1) uuidtools (1.0.4) $ rake db:migrate (in /railsApp/scheduler) /railsApp/scheduler/config/boot.rb:20:Warning: Gem::SourceIndex#search support for String patterns is deprecated $
919 :
918 :2008/11/16(日) 02:10:28
試しに、バージョンを指定してdb:migrateを実行してみたところ別のエラーになりました。 根本的な勘違いをしているのでしょうか? $ rake _1.2.6_ db:migrate /usr/local/lib/site_ruby/1.8/rubygems.rb:636:in `report_activate_error': RubyGem version error: rake(0.8.3 not = 1.2.6) (Gem::LoadError) from /usr/local/lib/site_ruby/1.8/rubygems.rb:141:in `activate' from /usr/local/lib/site_ruby/1.8/rubygems.rb:49:in `gem' from /usr/bin/rake:18
>>918 はduplicatedじゃなくてdeprecatedだし、警告だから、
あなたが遭遇している問題とはおそらく関係ないと思う。
モデルは作った? DBは作った? アダプタは何? 最近のデフォルトはsqlite3だぞ。
>>919 でしているのはrakeのバージョン。
rakeは0.8.3しか入ってないんだからそういうエラーになる。
>>920 ありがと。
いろいろ試してエラーメッセージを見てたら気づきました。。。
gemを使って、railsの2.1.2を入れたり消したりしてたら
いつのまにか、インストール済み(2.1.2と1.2.6)のrailsとその関連のパッケージは
アンインストールができなくなりました。
2.1.2は暫く使わないので、一回消したかったのだけど。
hashってキーから値をだすけど、値を指定してキーを取り出すことはできないですよね?
Hash#index
ありがとうございます
>>917 > ファイルのみ検索できないか試したけど、拡張子ありファイルならできました
それはファイルとディレクトリを区別してるわけではなく、
途中に"."を含むパス名を探している。
Dir.glob単独で区別できるのはディレクトリのみ。
Rubyでプログレスバーを更新しながらファイルをダウンロードしているプログラムの例を ご存じありませんか?参考にしたいのですが。
Ruby プログレスバー でぐぐった? あと GUI か CUI かで話が違ってくるかも
>>925 そうですか、フォルダに"."があれば反応しちゃうんですね
929 :
デフォルトの名無しさん :2008/11/16(日) 11:13:18
当方Java使いの業務系システムSEです。
Ruby on Railsが良いらしいと最近知って、
キャッチセールスにハマった奴状態になりました。
よしRubyだ!さっそく勉強だ!と思って、昨日本屋で
「たのしいRuby」「Rubyレシピブック」「Railsレシピブック」
3冊一気に購入しました。
そして今日、このスレを見て……
>>228-230 Rubyのスコープ管理ってそんない甘いの!?
えっ、Windowsでは重すぎてまともに動かないの!?
まともに対応してるIDEは無いの!?
何ソレ!?
・・・・・・でゲッと思っている俺、34歳オッサンのおばかさんです。
本は3冊で合計、\8,610しました……涙目・・・
Ruby…ダメなの?じゃあスレ違い申し訳ないですが、
LLやるとすれば何が良いんでしょうか?
小規模業務系システムに耐えるもので、Javaより小コスト
でライトなもの、って何でしょう?
Python + Django なんですか?よければお教えください。
930 :
デフォルトの名無しさん :2008/11/16(日) 11:18:27
>>929 開発環境を自由に変更できる立場の人が2ちゃんで効かないでください。あなたのチームは終わってます。
931 :
929 :2008/11/16(日) 11:22:39
>>930 いやいや、そんなんじゃないです。ただのへっぽこ零細企業の人間です。
ただこれからの技術の移り変わりに対応する為、あるいは後学のため、
ってだけの理由です。
仕事で使う必然性があるわけではありません。
932 :
デフォルトの名無しさん :2008/11/16(日) 11:33:01
JavaとC++とPHP,Perl知っていれば大抵の業務はこれのいずれかでは?
>まともに対応してるIDEは無いの!? 動的型付けな言語なら補完なんか大してできないのでどれも似たり寄ったりな気が
934 :
929 :2008/11/16(日) 11:40:07
連投スイマセンが、ちと補足を。 当方、ただLLに興味持って、やってみたいと思っただけの 人間です。ただそれにしても将来性とかかんがえちゃうの で、後々自分の仕事で使う機会があるとすれば…?という 発想をしただけです。 決してRuby使いの皆様をくさそうとする意図はありません。 スレ違い、たいへん失礼しました。
935 :
デフォルトの名無しさん :2008/11/16(日) 11:41:11
LLがなにかわからん
>>929 >>228-230 はスコープ管理の話なんかしてないしrubyのスコープ管理は甘くなんか無い
>>228-で言ってるのはrubyはタイプセーフなプログラミングが出来ないって事で
それはその通りだけどテスト駆動な開発をすれば問題無い、と
>>253 までつづいてる
それより本を買ったんなら元を取るつもりで全部読めよ、もったいない
937 :
デフォルトの名無しさん :2008/11/16(日) 11:47:37
しかし,Railsが万能であり,PHPやJavaなど既存の環境をすべて置き換えられるという訳ではない。
Railsの作者であるDavid Heinemeier Hansson氏は元々PHPユーザーであり,いまでも37signalsのページではPHPが使われている。
Railsはしっかりしたモデルを持ったデータベースアプリケーションには向いているが,メールフォームやアンケートなど,
遷移の少ないものでは,その利点をあまり発揮しない。またPHPなどに比べて,メモリーを消費すると言う問題もあり,
資源の少ないサーバーでの運用には注意が必要である。
http://itpro.nikkeibp.co.jp/article/COLUMN/20060424/236113/
926です。
Ruby/GTK+付属のデモで画像を表示するやつ(プログレスバーは出てきませんが)をみながら
自分で書き終えてしまいました。
>>929 「ためにする心配」につられていても仕方がないと思いますよ。
その欠点は本当か、あるいはそれは実際に深刻なものなのか、というのはやってみずに
評価したふりをしてみても仕方がない。
それから、いずれにしても「後々使う機会があるかも……?」という程度では今何を
やったところで実際に使うときにも詳細は陳腐化の可能性が大きいです。
それならば考え方や長所短所を飲み込んでおくために
明らかに一方の代表格であるRailsを学んでみるのは悪くない選択だと思います。
939 :
デフォルトの名無しさん :2008/11/16(日) 12:20:54
929です。
>>936 ,
>>938 おっしゃる事はごもっともです。良く分ります。
さらにちょっと、余談でごめんなさい。なぜRubyに興味を持ったのか?
という話をします。
それは、不況だって事です。安易かもしれませんが、不況だから、今後
業務系大規模システム案件は減少するだろうと思ったわけです。
すると中小規模で小金額の案件が多くなるだろうと。大規模なら当然
Javaなんですが・・・。
それと、Javaでも充分重いって事もあります。だからもっと中小規模
向きで、シンプルで軽く低コストに開発できる技術が流行ってくるだろう、
と。
それでRubyあたりがもっとシェア上げて来るんじゃねえか?などと思った
次第です。日本人が作ったというのも、右派な自分には魅力でした。
まだ自分には結論だせませんが、今後も興味は持ち続けたいと思います。
940 :
デフォルトの名無しさん :2008/11/16(日) 12:26:00
>>939 >>937 >またPHPなどに比べて,メモリーを消費すると言う問題もあり,
>資源の少ないサーバーでの運用には注意が必要である。
941 :
デフォルトの名無しさん :2008/11/16(日) 12:36:30
>>940 つまり軽い技術欲しがる事に対しては、Rubyは軽くない、PHPのほうがマシ、と言いたい?
おいおいPHPに比べて資源を消費するのはRailsの話だろ。 勝手にすり替えてRubxをこき下ろそうとするなよ。
943 :
デフォルトの名無しさん :2008/11/16(日) 13:01:58
>>942 すいませんそのとおりですね。Railsの話でした
>>940 まあ確かにメモリは食うけど共有サーバでCGI実行みたいな環境じゃなく、
普通に2GBくらいメモリ積んでるサーバ使えば問題にならないよ。
データベース用サーバならともかくアプリ用のサーバのメモリをケチっても中小規模の案件(数台〜10数台)なら大した差がないだろ。
945 :
676 :2008/11/16(日) 23:29:31
数週間前に質問した者です。 (excelのvlookupのようなものをrubyで書きたいと質問しました) 二分探索のループで書いたものがやっと(自分の中で)完成しました。 どんな感じでしょうか?コメントをいただきたいです。 よろしくお願いいたします。 def match_loop(val, array) high=array.size-1 low=prek=0 while 0 k=(high+low)/2 if prek!=k then val<array[k] ? high=k : low=k else break end prek=k end return val-array[low]<array[high]-val ? low : high end
946 :
676 :2008/11/16(日) 23:37:22
>>787-789 ちなみに私のプログラム歴ですが
学生時代にperlを12コマと卒研でcを数ヵ月、
社会人になってからこんな感じで少しです。
変なクセは学生時代のどちらかで付いてしまったと思います。
VBは今回のもので少し書きましたが
全然速くならなかったのですぐにあきらめてしまったので
breakの話とかは全く知らないです。
とにかく、ど素人です。
申し訳ありませんが
>>945 の添削よろしくお願い致します。
>945 ぱっと見て目につくのは while 0 かな。 他言語の 0 が偽でRubyが真なのとあいまってすげぇ紛らわしいw Rubyには loop do 〜 end っていう無限ループ用のイテレータがあるからそれを使う。 つか、他言語やってたらな while 1 か while true と書くだフツーw
>>946 アルゴリズム自体に問題は無いと思う・・・・・思うが、実行してないので自信がないw
・スペース。記号間には適宜スペースを入れると見やすくなるとされる。まあこれも流儀があるらしいが
・無限ループ
while文は、条件部分が真の場合にループ部分を実行する
Rubyにおいて真とは、「falseとnil以外の全て」だから、while 0でも一応は無限ループになるが
表記として非常に紛らわしい(言語によっては、0を偽とみなすものもある)
せめてwhile 1、でもRubyには組み込み関数(関数的メソッド)loopがあるので、無限ループには慣用的にこれを使う
・ifの辺り
if〜else breakだと、縦に長くなって終了条件も読み取りづらくなる
さらにifは後置表記ができる
・最後のend手前
メソッドでの最後のreturnは省略でき、その場合は最後の式を評価された値が戻る。今回は省略してみた
あと個人的には、三項演算子の条件部分が複雑で読みづらいので、せめて括弧が欲しい
コーディング規約によっては、「複雑な条件ならif文を使え」ともされているが、今回はまあ良いんじゃなかろうか
def match_loop(val, array)
high = array.size - 1
low = prek = 0
loop do
k = (high + low)/2
break if prek == k
val < array[k] ? high = k : low = k
prek = k
end
(val - array[low] < array[high] - val) ? low : high
end
組み込み開発でC言語しか知らないけど、勉強のためにRubyを勉強しようと思っています。 組込みしか知らない人で同じくRubyを勉強している人いますか? お勧めの書籍や、気をつけるべき点があれば教えてください。
>>946 returnのところで、境界の2値との距離を取って、近い方のインデックスを返すようにされてますが、
これだと、順序はある(大小比較が出来る)けど距離(差)が取れない値の検索が出来ないですよね。
(例えば数値の検索には使えても辞書順に整列された文字列の検索には使えませんよね。)
なので、関数の再利用性を高めるために、
より汎用性の高い「二分検索して境界のインデックスを返す」という関数はそれ単体で作っておいて、
その関数を呼び出して境界の2値との距離を取って近い方のインデックスを返す関数、をmatch_loopとするのが良いと思います。
あと関数の名前がちょっと気になります。検索方法が二分検索ならば配列はソートされていることが前提なので
間違えて変な配列を渡さないように、それが分かるような名前にした方がいいと思います。
例: binary_search、search_sorted_array など
>>949 書籍については
>>2 を参照のこと
組み込みの世界は知らないんだが、Rubyってあるのかなあ・・・・・・?
>>951 そもそも組み込みのところにインタプリタ内蔵できないでしょ
>>949 >組込みしか知らない人で同じくRubyを勉強している人いますか?
>お勧めの書籍や、気をつけるべき点があれば教えてください。
特にない。初心者と同じように勉強すればいい。
ただ組み込みを知っているなら、当然アセンブラやポインタの理解はしているだろうから、
内部の動作を解析した『Rubyハッキングガイド』をいきなり読むのも面白いかも。
>>951 ,952
別に組み込みで使いたいなんて、
>>949 には一言も書いてないんだが
955 :
676 :2008/11/17(月) 22:33:44
>>947 ,948,950
どうもありがとうございました。
やはり私が知らない事をたくさん指摘していただけて勉強になりました。
whileに関しては0と1どっちかなぁ、と初めに0をやったら
無限ループになったから使ったという最低な事をしてました。。。
関数の名前と汎用性は今後勉強していくうちにステップアップしていきたいです。
今は数値の検索にしか使わない、ということと
>>945 の数行を書くのに
いっぱいいっぱいだったので。
今後もよろしくお願いいたします。
hpricotみたいな感じでjavascriptのボタン押す方法ってないですか? watirはwinだしfirewatirはバックグラウンドで起動の方法が分からない。。
>951-954 アドバイスありがとうございました。 組込みの現場で使うと言うのではなく、部長から 「組込みだけでなく、組込み+αを目指せ」 といわれ、部としてRuby技術者を増やすらしいのです。 ですから、あくまでも主体は組込みで、 勉強というか、知識の幅を広げるためのRubyです。 (さすがに知っている知識が、C言語と組込技術のみは狭すぎるから) そのため、現在、UMLを先行して勉強しています (これは業務でも利用できるので) >ただ組み込みを知っているなら、当然アセンブラやポインタの理解はしているだろうから、 そうですね。そのあたりは理解しているつもりです。 (アセンブラの場合、読めますが、書くとなると少しがんばる必要がありますが、RISCの場合とか) とにかく、まずは読んで動かしてぐりぐりとやってみます。
そういえば、東芝がCellの処理能力を利用して、 Ruby使って組み込み開発できるようにするってのは進行してるのかな。
少々出遅れてしまったか。
>>945 お、できたのか、すばらしい。
再帰を読み解けというのはちょっとハードル高かったかもと思ってたんだが、
どこかで二分検索の解説を探してきたかな?
アルゴリズムの実装はちゃんとできてるようだね。
コーディングスタイルについて……は、突っ込み入ってるし、まぁ、いいか。
# そもそも自分が人に偉そうなことをいえる様な書き方してない。
一つだけ言わせてもらうと、break, return の使い方が前回と一緒。
breakで抜けた後はreturnするだけ。 だったら最初からreturnでいいじゃん。
そもそも無限ループにするより、うまいこと終了条件を設定できないかな?
他には返値の近接値判定が
>>677 では下に寄せているのに、
>>945 では
上に寄せている。 [0, 1] で 0.5 を探すと
>>746 は 0
>>945 は 1 を返す。
それからprek に前回の k を保存しているようだけど、意義がよく分からない。
前回の k の値は high か low のどちらかに残るのになぜ必要なのかな。
まとめると、プログラムの進行を、いつ、どういった条件で、どのように分岐
させるのかというあたりの考えがどうにも甘い感じがする。
前回は言わなかったけど、
>>677 なんかがその典型で、if に対する else が
来るべきところに、elsifで真偽値を反転した式を再度評価していたりとか、
絶対に成立する/しない条件式や絶対に通過しないコードがあったりとか。
説教くさいようだけど、値を比較する時に大小関係がよく分からなくなった
からといって安易に絶対値をとってごまかしてみたり、whileに適当に0を
入れたり、なんだかよく分からないけど動いてるみたいだからまぁいいか、
なんてスタンスでいると後々痛い目を見るよ。
一遍くらいは泣きを見た方が却っていいのかもしれんけど。
いろいろ言ったけど、それでも結構よくできてたと思うよ。頑張ったね。
参考までに
>>746 のもの。
>>945 とよく似ているけど、なにが違うかな。
def match_loop(val, array)
return array[0] if array.size <= 1 # 配列が空の時はnilを返す
head = 0
tail = array.size - 1
while tail - head > 1
navel = (head + tail) / 2
if val < array[navel]
tail = navel
else
head = navel
end
end
val-array[head] <= array[tail]-val ? head : tail
end
rand() の戻り値って、0 < rand() < 1 ですよね。 整数値を得たい場合はどうしたらいいですか。 RAND_MAXとかあるかと思いましたが、なさそうです。
整数値で引数を与えると 0 ≦ rand n < n で整数を返すようになる
>964 そりゃRubyのrand()は1万桁の乱数だって平気で返せるからな。 どこかでテキトーに区切りつけれ。
ここで質問していいのか良く分からないのですが、良ければ教えてください。 cygwin上のrubyで最近ircのbotを動かそうとして、riceを使いghotiを動かしています。 ところが発言がNOTICEじゃないので、NOTICEで発言させたいと思っています。 rubyはろくに弄った事が無いので、どの辺弄ったらいいんでしょうか。 あと、発言の学習でurlが含まれるものを排除したいと思っています。 s.gsubでノーマライズしているの部分で消せばよいと考えました。 とりあえず以下のような感じで削除しようと思ったのですが s.gsub!("^.*http.*$","") うまく消えないようです なんか注意点はありますでしょうか?
s.gsub!(/^.*http.*$/, "") じゃなくて?それとこれだとURLだけじゃなくて、その行全部消えるけど大丈夫?
>>967 コード斜め読みしてみた感じ、たぶんrice-0.0.0.2はNOTICEに対応してない。
HEADなら対応してそうだけどライブラリ構造ずいぶん変わってるから
差し替えてそのまま動くかはあやしい。動きそうな気もするけど。
もし差し替えてうまく動いたなら、privmsgしてるところをnoticeに書き換え。
>>968 の言うように
s.gsub!(/^.*http.*$/,"")
と、ちゃんと正規表現として検索パターンを与えないと、文字列そのものとして検索されるよ
s.gsub!("^.*http.*$","") などと検索パターンに文字列を与えると
s.gsub!(Regexp.new(Regexp.escape("^.*http.*$")), "")
と同じ意味になっちゃう
ruby 1.6以前だと、文字列を与えるとそれを正規表現として扱ってましたが
>>959 普通にプログラムが書ける人間なら、ちょっと文法覚えてちょっと組み込みクラスのメソッド群を覚えれば、普通に使えるようになるはず。
もしそうじゃなかったら、「普通にプログラムが書ける人間」じゃないなだけなので、使えるはずのCを真面目に勉強しろ、って感じ。
まあ、書いてることを見る限り、ちょっといじったらすぐわかるようになるよ。
972 :
967 :2008/11/18(火) 18:39:48
>>968-970 ありがとうございます
他のノーマライズ処理部分が一部正規表現ぽく見えたので、/要らないのかと思ってしまいました
あと、NOTICEは対応していないかもしれないんですね
態々コードまで見てもらってありがとうございます
直接埋め込みで何とかなるか調べてみようと思います
>971 待て待て、C言語とRubyだと結構違いも大きいぞ…例えば ・非オブジェクト指向言語のC、オブジェクト指向言語のRuby 例えばCなら「関数」で目的の機能を探すところを Rubyでは「クラス」または「モジュール」単位で探す (ライブラリ単位で探す場合もあるが、そこは共通) ・変数に型があるCと中身に型があるRuby C言語は変数が型を持ち、中身である値は型を持たない Rubyの変数はオブジェクトを指すラベルでしかなく型はない その代わり、参照先のオブジェクトがハッキリと型を持つ この辺りは押さえておきたい
>>965 >整数値で引数を与えると
>0 ≦ rand n < n で整数を返すようになる
なにこれー
ちょーさんくす
> ・非オブジェクト指向言語のC、オブジェクト指向言語のRuby これはでかすぎるだろ・・・別にオブジェクト指向なんて意識しなくても動くけど 個人的には動的な型づけもでかいと思う 普通ってどのくらいのレベルを言うのかイマイチわからん
>>925 > Dir.glob単独で区別できるのはディレクトリのみ。
ほんなら
Dir.glob("**/*") - Dir.glob("**/*/")
でファイル一覧取れるじゃーん、イェーイ、と思ったら予想外の結果になった。
Rubyをこれから勉強しようと思ってます。 OSはUbuntu Linux。で、エディタをEmacs使おうと思ってたのですが、 本には向いてないとか書かれてました。 Aptanaのプラグインとかはちょっと重そうなのと、試してみたらエラー 出たりしたので放置してます。 Linuxユーザの方はどんなエディタ使ってますか?
教祖がEmacs使いなわけですが・・・
普通にEmacs使ってるけど、別に問題はないかと。 その本には「初心者には」向いてないって書いてたんじゃない?
多分Emacsそのものが初心者向きでないという意味だろうな emacs使えるならそれで良いし、もちろんvimでもGNU nanoでも geditでも、プレーンテキストが編集出来るならなんでも良い
983 :
978 :2008/11/18(火) 22:31:41
ありがとうございます。Emacsで問題ないんですね。 Emacs向いてない、って書いてあったのは、「RailsによるアジャイルWebアプリケーション開発」 でした。何ででしょうね。この本には、Macの何とかってエディタがおすすめとなってました。
TextMateか
>983 RubyがMacで流行ったから、それを意識したんだろうな MacOSXのエディタは決定版が少ないから (文字コードに弱かったり、色分けすら無かったり) オススメエディタの紹介もそれなりに需要あるんだよ ちなみに俺はMacでは GNU nano かな Linux畑のRubyには、Linux畑のエディタのが問題起きにくい
MacだとMacVimがいい
↓ 以下、1000まで Mac用vi と Mac用Emacsの宗教戦争
jEditはどう?
JUnitを拡張したDbUnitのような、データベース関係の試験をするための便利なツールはrubyにありますか?
autotestが無限にテストを繰り返してしまうのですけど、どんなことをうたがったらよいでしょうか? lib/app.rb # test.rbをrequire lib/test.rb spec/test_spec.rb などのような基本的なスクリプトなのですが・・・
991 :
990 :2008/11/19(水) 18:05:41
あああ、わかりました。 log/ にログファイルを出力していたのですが、autotestが更新したと思って 無限にテストを繰り返していました。 特定ディレクトリのみ監視外にするにはどうしたらよいのだろう・・・
992 :
990 :2008/11/19(水) 18:24:59
ZenTest/lib/autotest/rails.rbとネットの.autotestを参考に 以下を.autotestとして書いてプロジェクト直下に置いたところ、 無事にlog/以下を監視対象外に指定することができました。 Autotest.add_hook :initialize do |autotest| autotest.instance_eval do add_exception %r%^\./(?:db|doc|log|public|script|tmp|vendor)% end end お騒がせいたしました。 ありがとうございました。
>988 それ、2つのエディタが見つかるんだが、jEのほうだよな? jedit X のほうじゃないよな? …そういやkEditといい、jEditといい、Mac界は紛らわしい名前のエディタも多いんだなw
994 :
676 :2008/11/19(水) 23:12:00
>>961 ,962
まずは
>>746 を紙に書いて動きを考えて
解説はwikipediaのものを見るだけにしました。(カンニングはしてません)
無限ループは終了条件をどうすればよいか考え付かなかったのでprekとして
1つ前のkを保存して強制的に終了させていました。
考えが甘いとの指摘はおっしゃる通りだと思います。
この話は仕事でもよく指摘されています(仕事はプログラミングとは無関係)。
思わぬところで自分が成長できていないを再認識しました。。。
(whileも近接値判定もやって出来なりでokとしてしまいましたが
ちゃんと考えないと抜けがありますね。[0, 1] の 0.5 は乱数では出てきませんでした。)
★自分のと
>>962 の違いについて
・2行目の検査で安全性を確保している
・ループの終了条件が分かりやすい
・
>>961 に書いてありますが、近接値判定のところを前と同じにしてある
・変数名の付け方
そりゃ質問スレで質問者が頭良いか悪いかと言えば悪い方に分類されるのは当たり前だろう
次立ててくる
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。