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つをすること。ここで回答を待つよりそのほうが早い。 ・モジュール名やエラーメッセージでググる ・マニュアルで引っかかったクラスの記述を探す www.ruby-lang.org/ja/man/ ・FAQを一応読む 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 ] 【よくあるしつもん】 Q: いちからRubyを始める初心者向けのRuby入門書は何がおすすめでしょうか? A: プログラム作成の初心者だったら 「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」 www.amazon.co.jp/dp/4797336617/ 他の言語経験があるんだったら 「プログラミングRuby 第2版 言語編」 www.amazon.co.jp/dp/4274066428/ 「初めてのRuby」 www.amazon.co.jp/dp/4873113679
3 名前:730 [2008/09/15(月) 17:31:36 ] ■前スレ Ruby 初心者スレッド Part 21 pc11.2ch.net/test/read.cgi/tech/1217952441/ ■関連スレ Rubyについて Part 32 pc11.2ch.net/test/read.cgi/tech/1215531152/ Rubyの宿題教えてください。2限目 pc11.2ch.net/test/read.cgi/tech/1200175247/ RubyCocoa 初心者質問【Leopardバンドル記念】 pc11.2ch.net/test/read.cgi/mac/1193373811/ 【ActiveScript】RubyをWindowsで使うスレ【GUI】 pc11.2ch.net/test/read.cgi/tech/1155031689/ Ruby on Rails のスレ が pc11.2ch.net/test/read.cgi/php/1207425569/ デザパタ + Python/Ruby/Smalltalk part2 pc11.2ch.net/test/read.cgi/tech/1175959706/ 魁け! Ruby 1.9.X pc11.2ch.net/test/read.cgi/tech/1201603546/ Rubyについて(アンチ専用) Part003 pc11.2ch.net/test/read.cgi/tech/1207233348/
4 名前:730 [2008/09/15(月) 17:33:59 ] ■公式/非公式関連リンク Ruby Home Page www.ruby-lang.org/ja/ Rubyリファレンス(よくサーバーエラーになります) www.ruby-lang.org/ja/man/ www.ruby-doc.org/ (英語) リファレンスのHTMLヘルプ版配布 elbereth-hp.hp.infoseek.co.jp/ruby.html # Windowsで便利 Ruby FAQ ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ Programming Ruby - The Pragmatic Programmer's Guide www.ruby-doc.org/docs/ProgrammingRuby/ # 好評書籍をWebで公開中、ただし英語 逆引きRuby www.namaraii.com/rubytips/
5 名前:730 [2008/09/15(月) 17:35:01 ] RAA - Ruby Application Archive raa.ruby-lang.org/ RubyForge www.rubyforge.org/ # Rubyのアプリやライブラリが検索できる GitHub RubyGems gems.github.com/ github.com/ # 最近は RubyForge より GitHub が人気 日本Rubyの会 公式Wiki jp.rubyist.net/ # メニューに表示されていない埋もれた情報ページ多数 Rubyist Magazine - るびま jp.rubyist.net/magazine/ # コードレビューが好評 Ruby hotlinks 五月雨版(日記やblogのアンテナ) www.rubyist.net/~kazu/samidare/ Rubyの本一覧 www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Ruby%A4%CB%B4%D8%A4%B9%A4%EB%BD%F1%C0%D2 <rubyXML/> www.rubyxml.com/ Matzにっき(Ruby作者の日記) www.rubyist.net/~matz/
6 名前:730 [2008/09/15(月) 17:36:20 ] ■最近できたWiki Ruby 初心者スレッド Hiki starlet.s145.xrea.com/ruby/hiki/ Ruby Portal ruby.morphball.net/portal/ ■プレゼンテーション Ruby会議2008 jp.rubyist.net/RubyKaigi2008/ www.nicovideo.jp/tag/rubykaigi2008 Ruby会議2007 jp.rubyist.net/RubyKaigi2007/ www.nicovideo.jp/tag/RubyKaigi2007 日本 Ruby カンファレンス 2006 jp.rubyist.net/RubyKaigi2006/ jp.rubyist.net/RubyKaigi2006/videos.html
7 名前:730 [2008/09/15(月) 17:40:14 ] ■他板の関連スレ 【カルト】Ruby開発者Matz【モルモン】 pc11.2ch.net/test/read.cgi/prog/1148712641/ 【Ruby/SDL他】Rubyでゲーム制作・総合スレッド pc11.2ch.net/test/read.cgi/gamedev/1207069887/ RubyによるWebプログラミングについての質問 pc11.2ch.net/test/read.cgi/php/1219059400/
8 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 21:36:40 ] 1乙 ただいま
9 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 21:40:43 ] スレ立て乙です いきなり質問していいですか? プロパティファイルの扱いのようにメッセージや設定を管理したい場合の 実装について一般的にどうするのかが知りたいです 定数クラスを作るべきかなと考えたんですが パラメータを渡して組み合わせたものをメッセージとして表示させる場合に 警告が出て気になります。みなさんはこういう場合どう実装していますか?
10 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 22:48:07 ] >>9 >定数クラスを作るべきかなと考えたんですが それでいいと思うけど。Configクラスとか。 >パラメータを渡して組み合わせたものをメッセージとして表示させる場合に >警告が出て気になります。みなさんはこういう場合どう実装していますか? どんな警告?
11 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 23:08:38 ] >>10 ああ、それで良かったんですか 警告は定数の値を変更しようとすると出るアレです
12 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 23:16:52 ] >パラメータを渡して組み合わせたものをメッセージとして表示させる場合に と >警告は定数の値を変更しようとすると出る との間に1万光年の距離がある。
13 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 23:21:00 ] >>9 class Config attr_accessor :host, :user, :password end CONFIG = Config.new と定義しておき、user-config.rb とかなんとかで CONFIG.host = 'localhost; CONFIG.user = 'root' CONFIG.password = 'naisyo' とかすればいいんじゃね?知らんけど。
14 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 23:27:51 ] 最近はYAMLがいいんじゃないかね。
15 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 01:32:31 ] ネットのWEB上のテキストから 文字列を取得してきて、 変数aに格納するのってできる? どうやるの? www.abc.com/abc.txt に「あいうえお」って書いてあって、 その「あいうえお」を変数aに入れたい。
16 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 01:46:58 ] open-uri
17 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 02:05:09 ] >>15 require 'open-uri' a = open('www.abc.com/abc.txt ') {|f| f.read } これでいいんだっけ?間違ってたら教えて。
18 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 09:07:25 ] open-uriのブロックはわりと無意味
19 名前:730 mailto:sage [2008/09/16(火) 15:00:47 ] 質問です ActiveRecordってスレッドセーフなんですか?
20 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 19:04:42 ] >>19 多分違うけど、2.2からはthread safeになるかもしれない ただRuby1.8だとthread safeにしてもあんまりうれしくない
21 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 21:37:01 ] 今、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
22 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 23:07:20 ] なあ、マシン名、ユーザーID、パスワードはマジなのか? ここまで露骨だと釣りっぽい気もするが。
23 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 23:41:58 ] すみません、書き込んだ瞬間気付いてパス変えました;; 誰かのサンプルを参考にしちゃろうとググってみても全くヒットしないですね・・・ もしかするとRubyでimapっていうのがあまりお勧めできないのかしら 公式マニュアルだけでは何とも理解に時間がかかるので、書籍を買った方が良さそうですね
24 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 23:44:44 ] 本なんて買うだけ無駄
25 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 23:51:13 ] >>23 ぐぐったらこんなのあったけど。ダメかな。 www.caliban.org/ruby/rit.shtml
26 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 00:15:04 ] use the source >>21
27 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 00:15:52 ] IMAPについての知識はあるんだよね
28 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 02:47:45 ] rubyって自分のパスワード2ちゃんに 書くようなマヌケが多いの?
29 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 07:23:00 ] Rubyなんて使ってるとアホになるよ
30 名前:デフォルトの名無しさん [2008/09/17(水) 12:42:52 ] 自動プロクシ設定スクリプト環境でのrubygemsの使い方を教えて下さい
31 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 13:36:39 ] パソコンのハードディスクに 「a.txt」 ってファイルを作る。 ↑これってできる?
32 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 15:16:56 ] >>31 できる
33 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 16:21:04 ] >>31 File.open("a.txt", "w"){|f| # ここでゆっくり好きな処理していってね! }
34 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 18:00:02 ] ruby -rfileutils -e "FileUtils.touch('a.txt')"
35 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 20:53:08 ] ruby -e "(/mswin32|mingw|cygwin/===RUBY_PLATFORM)? `echo off > a.txt` : `touch a.txt`"
36 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 23:11:17 ] 手続きに手続きを渡して実行させたいです。 具体的には def funcall(fun,x) return fun(x) end def inc(x) return x+1 end >> funcall(inc,4) #=>5 というような結果が欲しいです。 lambdaやProcで包んで.callすればできるというのはわかるのですが、 もっと簡単に行う方法ってないものでしょうか。
37 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 23:14:14 ] send(:symbol, args...)じゃ簡単にしたことにならないん?
38 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 23:25:23 ] >>37 サンクス!!
39 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 08:22:27 ] >>33-35 どれが正しいの? なんでコードだけ張って 日本語の解説が無いの?
40 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 08:34:19 ] どれも正しい、>>35 はちょっとイタダケナイけど 日本語の解説はリファレンスマニュアルでも読んどけ
41 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 10:49:11 ] >>36 Ruby的には def funcall(x) return yield(x) end x = 10 funcall(x) { x + 1 } なんだよね。 でも関数合成的に使うには向いてないかも。
42 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 17:52:57 ] Enumerable#all? と Enumerable#any? について質問です。 要素が空の場合はどういう結果になるのでしょうか? 手元のrubyでは all? が true 、any? が false を返すようですが マニュアルには要素が空の場合については書かれていないので 要素が空の場合は処理を分けた方が無難でしょうか?
43 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 19:14:28 ] >>42 数学的にはその挙動であってるはずだから、マニュアルに書いてなくても、その挙動を信じていいと思うよ
44 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 19:16:10 ] あ、これはマニュアルの不備だね 論理的な動作ではなく、Enumerable の内部処理に依存してる って 1.8 でそれかよ
45 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 22:39:17 ] rubyの勉強をはじめてみたいのですが、 まず、なにとなにとなにを ダウンロードしてインストールすればいいでしょうか? OSはWindowsです
46 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 22:59:48 ] 「ruby windows インストール」でぐぐるといいとおもうよ
47 名前:sage [2008/09/18(木) 23:41:06 ] 1.8.7にしたら [BUG] object allocation during garbage collection phase などというものがでるようになってしもうた。 GC と win32ole あたりに原因がありそうなんだけど 再現するコンパクトなコードがつくれませんの。
48 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 00:04:07 ] スレッド使ってるとよく出ますな
49 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 01:51:19 ] >43-44 ありがとうございます。そのまま行きます。
50 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 03:30:54 ] FAQだったらすみませんが、質問です。 Rubyのprivateメソッドやインスタンス変数は、Java や C++ のような完全な 隠蔽ではないようです。親クラスのprivateメソッドやインスタンス変数を、 子クラスで知らずに上書きしてしまう可能性があります。 この上書きを避けるには、どのようにしたら良いのでしょうか?親クラスの privateなメソッドやインスタンス変数の名前をすべて把握する以外にないの でしょうか? 特に、トップレベルで関数を定義することが、Objectクラスにメソッドを追加 することと同じなので、気づかずに既存のメソッドを上書きしてしまいそうで 不安です。
51 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 03:33:16 ] 開発者同士でしっかり話し合う
52 名前:50 mailto:sage [2008/09/19(金) 04:18:50 ] Rubyの言語仕様や、コーディングの定石による対処法をお願いします。 特に不慣れなフレームワークを使っているときなどに、既存の関数の誤った上 書きによってトラブルが起こるのを避けたいのです。
53 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 08:21:08 ] 適当に思いついたのを書いてみる インスタンス変数の上書きは継承ではなく委譲を使うことで回避 フレームワークの都合等で継承せざるを得ない場合は、できるだけ 特殊な変数名を使う > @HOGE @___hoge___ @projNo_hoge ... これらの変数もHashや構造体等で入れ子にする事で定義数を減らす > @projVar[:item] @projVar.item ... メソッドの上書きはデバッグモード(ruby -d)の出力を確認 独自クラス定義前と定義後のclass#methods(等)の結果を比較
54 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 08:34:32 ] Win2000でrubyをはじめたいんだけど、 なんでパッケージが6つもあるの? どれを入れたらいいのか、 わからないじゃん
55 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 08:45:37 ] 言語仕様が無いのでいろんなものができてしまいました。
56 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 09:10:02 ] rubyでCGIゲーム作るって イバラの道?
57 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 09:18:01 ] てか>>50 のやり方はスクリプトの書き方(ライブラリの利用の仕方)としてなんか間違ってね?という気はするんだが
58 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 09:20:47 ] >>56 どんなゲーム作りたいかにもよるが、CGIべったりなPHPとかで作るよりはめんどくさい
59 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 10:06:20 ] >>58 だとしたらCGIゲーム部分(ブラウザで見る部分)はPHPで作って、 専用ブラウザはruby(RPGツクールVX)ってしたほうがいいかな。 でもそれだと2つの言語を覚えないといけないんだよね。
60 名前:50 mailto:sage [2008/09/19(金) 11:05:33 ] >>53 丁寧なご説明、ありがとうございます。ですが、結局「気をつける」以外に無 いようで、少々残念です。 アンダースコアで始まるなどの特殊な変数名は、逆にフレームワーク側も衝突 回避を意図して多用している可能性があり、結局、変数名にプロジェクトごと のprefixをつけたり、 instance_variables でこまめに確認したりするしかな いように見えます。 しかしこれでは、グローバル変数しかなかった時代と変わらないと思います。 むしろ、メタプログラミングによって変数名やメソッド名がgrep検索できなく なったRubyコードでは、名前の衝突の危険性は増しているとすら思います。 PHP5には完全なprivateがあり、Pythonにはマングリングという仕組みがあり ます。Rubyにそれに類するものがないのは意外でした。 しかしRuby1.9でも変更される予定は無いようなので、実用的にはさほど困ら ないものなのかもしれません。 ruby -d は知りませんでした。活用させていただきます。 >>57 53さんもおっしゃるとおり、フレームワークに継承を強制される場合をお考え ください。 www.gesource.jp/weblog/archives/2007/06/rubyprotectedjavac.html > フレームワークを使っていると、知らないうちに基底クラスのメソッドをオー > バーライドしてしまい、予期せぬバグに悩まされたりします。
61 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 11:05:54 ] rubyインストールしてみた。 ActiveRuby1.8.7いれてみた。 次、エディタは何使えばいい?
62 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 11:16:11 ] >>61 RDE
63 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 11:35:29 ] ActiveRubyっていうのをいれたんだけど、 本当はOne-Click Rubyっていうのもあったの? どっちがよかったの? なんで統一しないの? なんでインストーラーがいっぱいあるの??
64 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 11:41:03 ] One-Click RubyのほうがPATHもセットしてくれるからいいと思う
65 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 11:41:48 ] >>60 不味いよね〜という話にはなっていて、いくつかの解決策も検討されているようだが まだ手が回ってないっぽい ttp://www.rubyist.net/~matz/20060218.html#c05
66 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 11:42:57 ] 1.9は大きな変更しないってことになったから
67 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 11:55:21 ] >>63 ActiveScriptRubyは元々の目的が違うからじゃないかな そもそも、本来は初心者向けのセットじゃないし
68 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 11:55:27 ] >>62 RDEいれてみた。abcって表示できた。 これでいいのかな。
69 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 12:24:08 ] kazato.run.buttobi.net/cgi-bin/material/src/vm002_0328.png RDE 文字が重なるんだけど、どこの設定を見ればいい?
70 名前:50 mailto:sage [2008/09/19(金) 12:27:01 ] >>65 ありがとうございます。なるほど、問題視はされているのですね。 私自身はRailsを業務で半年ほど使った経験があるのですが、クラス継承にお いて名前空間が独立していないことを途中で知って、たいへん怖くなりました。 自分の書いてきたコードが安全かどうか、確証がないと思ったからです。 しかし、「初めてのRuby」にはこのことは何も書いてありませんでした。ネッ トでもそれほど多くの声は見つかりません。Ruby コミュニティでこれはあま り重大な問題だとは考えられていないということなのでしょうか? しかし、>>53 さんのおっしゃるようなことに絶えず注意し続けなければならな いなら、コーディングに手間がかかって大変だと思うのですが。 ほかにも、クラスが通常はオープンで、requireによってどんどん書き換えら れていくなど、Rubyは名前空間についてはきわめて楽観的な言語だという印象 があります。できる限り名前空間を独立させるPythonとは、まったく逆の方針 に見えて興味深いです。
71 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 12:32:55 ] >>50 local visibilityとかいう新機能とは違うのかな。 ぶっちゃけ1.9使ったことないから適当だけど。。 あと、最近気付いた妙な事例。 www.ruby-lang.org/ja/man/html/Matrix.html > Matrix#[i, j] = x > (i,j)要素をxに変更する。 > このメソッドは、matrix.rbに定義されていない。以下に、その定義と使用例を示す。 なんて書いてあるけど、実は svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/matrix.rb?revision=19360&view=markup > alias set_element []= > alias set_component []= > private :[]=, :set_element, :set_component なぜかprivateで定義してあり、、でも使われていなくて、、、みたいな謎が
72 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 12:35:51 ] >>69 そのテキストエリアで右クリック - [設定] - [フォント]を適当にいじる 大きくするなり、変えるなり
73 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 13:08:58 ] >>71 Rubyの数学モジュールは存在が適当 マトモな人は使わない
74 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 13:12:34 ] >>70 実行時にほぼ全てをevalで改変できるのはRubyの特徴 だからこそ、初期モックアップに向いていて、大規模開発に向かない
75 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 13:15:01 ] 「○○ができる」という長所と、「○○ができてしまう」という短所に関しては、 どうしても共存していく以外無いものなぁ。
76 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 13:15:59 ] >>74 だよなあ まあ、制御できたら用途によっては便利だろうなとは思う というより、そういうのは単にそのフレームワークが行儀悪くてマニュアル不足で邪悪なだけなのでは… 「普通」は、トップレベルにメソッドを定義したりしないし、自身を継承させることを是としない
77 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 13:20:28 ] >自身を継承させることを是としない どんなアホ設計だよ
78 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 13:21:18 ] >>76 > 自身を継承させることを是としない あ、やっぱそうだよね、「カスタマイズは継承で」っていうモジュール設計はよくないよな
79 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 13:22:35 ] >>73 実用性の面ではそんな雰囲気を感じるけど、 まあ検討材料としてはw
80 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 13:23:07 ] c++のほうがまともだな
81 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 13:25:02 ] >>73 別に誰も損しないんだから、もうちょっと良くなってもいいのにね、あれ
82 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 13:51:21 ] ちなみにMatrix#[]=云々はこのスレから thread.gmane.org/gmane.comp.lang.ruby.general/267400/focus=267475 > You can't even divide a Vector by a scalar quantity (you have to v*1/a instead. :/). いやまあそれはどうでもいいようなw
83 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 14:21:45 ] >>72 できた。
84 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 14:26:59 ] rubyをインストールして、 エディタも動くようになったんで、 初心者向けのWEB上の入門サイトを 読みたいんだけど、どれを読めばいい?
85 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 14:30:44 ] www1.tf.chiba-u.jp/~shin/tutorial/
86 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 15:24:16 ] kazato.run.buttobi.net/cgi-bin/material/src/vm002_0329.png ここのフォントの大きさを、 最初から大きくしたいのですが、 どこの設定をいじればいいですか? いまは、エディタを起動するたびに 設定しなおしてます。 これを、最初からというか 設定を保存したいのです。 一回ごとに毎回、毎回設定するの めんどいですからね。
87 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 15:33:45 ] RDEで「こんにちは」って打ったら、 めちゃめちゃに文字化けするんですけど?? それでいて、実行すると、ちゃんと表示されるんですけど??
88 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 15:37:13 ] RDEってもしかしてPerlでも使えるの?
89 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 15:47:14 ] >>87-88 聞くよりもまず自分で模索するようにしてください 文字化けはたぶんエディタのフォント設定のせい。perlでも一応使える
90 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 15:48:14 ] >>87 は自分で調べたら解決したのでもういいや
91 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 15:48:55 ] >>89 perlで使うときは、perlのexeはどこに設定するの? もしかして、rubyのexeのところにいれるの? キモー
92 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 16:40:15 ] a = open('www.2ch.net/warn.txt ') {|f| f.read } これが動きません。 ひょっとして、ウチだけ???
93 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 16:41:34 ] require 'open-uri' a = open('www.2ch.net/warn.txt ') {|f| f.read } print a; ↑これで動きました。 マジで感動。
94 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 17:46:17 ] 長い行で改行入っちゃうときはどうしたらいいの? print "a";
95 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 18:06:34 ] >>94 ここはあなたの質問場ではありません
96 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 18:51:05 ] RGSS2なんですけど、requireが使えなくて、 必ず、 Kernel.require("C:\\1.rb") とかって書かないといけないんです。それで、 open-uri.rbを開くと、その中で、また require uri とかって書いてあるじゃないですか。またrequireです。 ここでエラーが出るので(requierは使えないよっていう) すべてのライブラリの中のrequireをKernel.requireに 置き換えないといけないのかな、、、って今思ってますけど、 どう思いますか。
97 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 19:02:19 ] RGSSは内部動作が独自改変されたRubyなので、普通のRubyの知識では太刀打ちできない RGSSのマニュアルなりなんなりを読んでくれ
98 名前:21 mailto:sage [2008/09/19(金) 20:33:30 ] 出張のため返信が遅れてしまいすみません >>25 おお!ありがとうございます! しかし見てみましたがかなり複雑な感じなんですね・・・ やっぱ色んな状況を想定したり文字コードなんかの処理等でこんなになってしまうんでしょうか とりあえず俺のような初心者には無理っぽいですのでiPhoneで同じようなこと考えている人がいないか聞いてみることにします ありがとうございましたおまいら
99 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 20:53:37 ] >>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秒以上も待たされるので。。。。 何かよい解決策はないでしょうか?
101 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 21:42:18 ] >>100 windowsとrubyの相性が悪いから。 ruby script/generate をすると、 1. 新しいrubyプロセスを起動し、 2. railsと関連ライブラリをすべて読み込んでから 3. scaffoldを実行するから、 そりゃ遅い。とくに 2. が。
102 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 21:42:25 ] >>94 明らかに文が終わらないことが分かる場合、たとえば 開いたカッコがまだ閉じてないとか、二項演算子の第2項をまだ書いてないとか の場合は語句(トークン)の間で行を変えていい。 そうでない場合(そこまでが文として正当に解釈しうる場合)は ¥ (円記号またはバックスラッシュ)を書いてから改行。
103 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 21:42:53 ] >>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の本なんてなくね?
104 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 21:48:36 ] >>>103 そもそもIMAPについての知識がロクに無いんだろ IMAPについての知識があるならnet/imapだけでできるはず そういう場合は「めんどくさいけどどうすればいいですか」という聞き方になる メール関連は簡単に扱って欲しくないから、これくらいでいいと思う
105 名前:デフォルトの名無しさん [2008/09/20(土) 01:17:39 ] >>101 開発に使っているマシンは圧倒的にwinが多い そのwinでまともに動かないrailsは、 やはり個人の趣味サイト作りでしか使ないのか? 海外では非常によく利用されているpythonのdjangoは、 winでもストレス無く使える。
106 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 01:38:14 ] 運用にwinなんて使わないだろ?
107 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 01:40:59 ] >>105 >開発に使っているマシンは圧倒的にwinが多い Railsだと、世界的にはMacかもしれんぞ。(要調査)
108 名前:デフォルトの名無しさん [2008/09/20(土) 01:59:53 ] >>107 わざわざRailsを使うためにMacを買うか? しかも会社ならなおさらだ。 だからRailsは圧倒的に個人しか使わないんだろうー やはりちょっとしたサイトはPHP、 中規規模以上はJavaに落ち着いているんじゃない。
109 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 03:35:19 ] 個人 → rails 数人 → PHP 中規模 → JAVA
110 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 07:16:22 ] >>105 >開発に使っているマシンは圧倒的にwinが多い Rails使いはMacのほうが多い RailsConf行ってみな、冗談じゃなくてほぼ全員Macだから。 いまだWindows使っているのはJava屋さんだろう
111 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 07:37:09 ] MacBookとかよくあんな重くて高いマシン持ち歩けるよな・・・ 無印 2.27kg ¥129,800〜¥179,800 ←重すぎ! Air 1.36kg ¥229,800〜¥325,400 ←高すぎ! Pro 2.45kg〜3.08kg ¥249,800〜¥329,800 ←重すぎ高すぎ! もっと実用的なモデル出してくれたら考えるわ
112 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 07:42:08 ] RGSSなんだけど、 ツクールXPがRGSS1で ツクールVXがRGSS2なのね。 そんで、RGSS1はrequire の使用がOKで、 RGSS2はKernel.require って書かないとだめなのね。 そんで、rubyに付属のライブラリ見ると、 中味が全部、require 'uri' こういう形式で書いてあるのね。 そんで、そのままRGSSで書くと、エラーになるの。
113 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 07:44:04 ] require 'uri' ←(1) ↑この形式だとエラーが出る。 require("C:\\uri.rb") ←(2) ↑この形式だとエラーが出ない。 絶対指定だとエラーがでない。 相対指定?だとエラーがでる。 (2)で書いても、その1行だけはエラーにならないけど、 その行で呼び出したライブラリの中味は (1)の形式で書いてあるので、そこでエラーになる。 どうしたらいいかな?
114 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 07:46:14 ] もうプログラミング辞めたほうがいいな
115 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 07:58:10 ] questionbox.jp.msn.com/qa944237.html?StatusCheck=ON 一応ここにも書いてあるけど いったいどうしたらいいかな。
116 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 08:06:06 ] RGSSでのライブラリrequireの方法 $: << File.expand_path(".") require "ファイル名" Game.exeを起動したディレクトリにあるライブラリをロードする "."を相対パスに変更すれば、好きなディレクトリを指定できる ↑あとこれをよくみかけるんだが、 どういうことなんだろう??
117 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 08:16:18 ] >>112 上でも書いている人がいるが、RGSSはRubyを改造したもので、 改造部分に関するエラーは俺たちには全くわからない エラーが出る理由も、わざわざそうしている理由もわからない 売り物なんだし、改造した人に聞け
118 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 08:29:19 ] RDE 出力をDOSプロンプトにするのってどうやるの?
119 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 08:48:23 ] puts 'abcde ' * 20000 たかがこれだけの出力するのに何秒かかってんだよ perlだったら3秒で出るのに。
120 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 08:50:20 ] Rubyに早さを求めるやつなんて初めて見た
121 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 08:50:25 ] >>119 まあそのへんはコマンドプロンプトに文句言ってくれ Rubyの処理自体は3秒くらいで終わってる
122 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 09:05:04 ] RDEで出力を下でなくて DOSプロンプトに出すにはどうしたらいいの?
123 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 09:12:05 ] Windowsではirbとかでもイライラするな irbは返り値の表示の設定ができるが
124 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 09:19:25 ] 最初からDOSプロンプト立ち上げて、 そこから直接コマンドラインで実行したら 3秒でできた。 でもRDEから実行したいんよ。 どうしたらいいかな? DOSプロンプトに出力する方法ね。
125 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 09:33:56 ] >>110 東京Ruby会議で「主にMac使ってる人」って質問で6〜7割手をあげてたような気が
126 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 09:38:12 ] MacというかMacOSXとUNIX系開発言語(って何?)との親和性の高さはガチ Windowsでもプログラミング環境エディションとか出せばいいのに
127 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 09:45:10 ] まあみんなカッコよく安楽にプログラミングしたいんだよ でなけりゃあどべ使い以外にMacが売れる理由がないし、Emacsが死なない理由がないし、Rubyが支持される理由もない
128 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 11:32:09 ] TextMateだっけ?あれが人気あるらしいね。開発に。 Windowsにも E Text EditorとかIntypeとしてクローン作られてるっぽいけど。
129 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 11:56:29 ] >>128 クローンはどいつもこいつもシェアウェアでな いや、別にいいんだが、入金めんどい 成功したら安価版とか作ってくれ
130 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 11:59:26 ] 日本はベクターにないと買うの面倒でかなわん
131 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 13:42:29 ] str = 'hoge' これを説明するのって、「ローカル変数 str に 文字列 'hoge' を 代 入 す る 」 でいい? 厳密には代入ではなくて他の表現が妥当だとかそういうのはない?
132 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 13:48:28 ] …めんどくさいので代入でOK 最近の議論とか空気とかを元にしてる初めてのRubyではどう書いてある? とりあえず、誰も文句は言わないと思うよ 束縛するとか言う言い方してる奴がいたら鼻糞ほじっとけ
133 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 13:51:57 ] オブジェクトとインスタンスってRubyではどう使い分けますか?
134 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 13:59:47 ] >>131 つうか代入ってなによ?
135 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 14:06:38 ] >>134 データと名称の関連付け。なまえをつけること。Naming convention。 Rubyでは初期化宣言と同時に行われるのでちょっとわかりにくい。 というのでどう
136 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 14:23:59 ] なら「名前をつける」って説明の方が通りがいいんじゃねえか、とおもた。
137 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 14:27:35 ] RDEで実行を途中で止めるのってどうすればいいの? ctrl+C押しても止まんないんだけど。
138 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 14:37:30 ] 止めるボタンあります
139 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 14:38:26 ] 緑△アイコンの実行ボタンの隣に、 □アイコンの強制終了ってあるでしょ
140 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 15:22:28 ] 他の言語で代入という概念を知ってるなら代入でいいだろ。 a = Hoge みたいな表現が、名前付けなのは Haskell とかだけど、 そっちとは明らかに違うし。
141 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 16:59:07 ] RDEはうだつが上がらないし RDTは糞重いし もうEmacsしかないじゃないか!
142 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 17:20:29 ] >>133 クラスをインスタンス化したものがインスタンス
143 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 19:22:08 ] NetBeans使えば。
144 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 19:35:57 ] NetBeans以上に重いものなんてこの宇宙に存在するの?
145 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 19:36:51 ] 責任,ですかね.
146 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 20:57:24 ] >140 他の言語っつってもCの代入とは明らかに違うだろうに。 Haskellの代入とも違うけどさ。
147 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 22:32:07 ] str = 'hoge' のように代入された状態で str を使うと 'hoge' という情報を取り出せるという点では どの言語もだいたい一緒だわな
148 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 23:27:20 ] Rubyだけしか使えないのはかっこ悪いのでphpを勉強する if strpos('ABCDE', 'ABC'){ echo 'true'; }else{ echo 'false'; }; とか書いてみたんだが、どうやらelse部が実行されるらしい strposは'ABCDE'の中から'ABC'の位置を探して返すんだが、整数の 0 が返ってて、0 はPHPでは偽なんだそうな なんとなくがっかりさんだ というか、Perl4 を勉強してたころは真偽判定ってどう書いてたんだっけ、覚えてないな
149 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 23:31:42 ] …そういうのはチラ裏スレでやれ Ruby は nil や false が返って来ない限り真だからな 真偽判定はどんどん書けて気楽だ
150 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 23:38:04 ] そういやずっと前から思ってたんだけど、Perl とかで整数の 0(や文字の "0")が真偽値の偽とみなされるようになったのってなんで? ヌル文字とかの関係? 関係ないよね?
151 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 23:48:35 ] スクリプト言語の初心者スレっぽくてよろしい >>150 0 を偽にしなかったら 1 を偽にしなきゃいけなくなるじゃないか(-1 でも可)
152 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 23:49:01 ] さすがRubyスレ 知能が低い
153 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 23:50:28 ] >>150 Cから発想すればふつー0が偽になるんだろう。 CにもPerlにもboolean型は無いしな。
154 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 05:19:55 ] www1.tf.chiba-u.jp/~shin/tutorial/index.rb?Chapter=10 これってサブルーチンと何が違うの?
155 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 07:53:29 ] Cで関数のポインタを扱うのとさして変わらない。
156 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 08:00:34 ] >>155 定義された場所のスコープ(Binding)を受け継いでいるところ
157 名前:156 mailto:sage [2008/09/21(日) 08:05:56 ] アンカ間違えだけど、指摘と受け取ってもらっても結構 ×155 ○154
158 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 08:23:27 ] >>154 手続きオブジェクトは原理的にはサブルーチン、雰囲気では関数ポインタでおk オブジェクトになってしまってるとこと、>>156 の言うように定義時の環境が保存されてるとこが一般的なものとは違うけど サブルーチンオブジェクトと呼んでもよかったシロモノで、Rubyではたまたま手続きと呼んでるだけに過ぎない プロシージャ(Proc-edure)とサブルーチンに決定的な違いがないのと同じ
159 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 09:31:58 ] >>146 > Cの代入とは明らかに違うだろうに。 どう違うの?
160 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 11:17:02 ] >>133 適当。分かりやすい基準はたぶん無い
161 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 11:22:28 ] rubyのxamppはどこにあるの? rubyのCGIとか、railsとかやってみたいんだけど。
162 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 11:39:21 ] >159 根本的には同じデータのコピーなんだが Rubyは基本的に「オブジェクトへの参照」を扱うため 代入が基本的に「参照のコピー」になるのに対し C/C++は参照というクッションが必ずしも存在せず いきなり「オブジェクトそのもの」を扱うことが出来てしまうため (参照を扱うなら明示的に参照を扱うよう書く必要がある) 代入が「実体のコピー」(Rubyでいうa=b.dupに近い…がこれも同じではないな)になることが普通にある
163 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 11:45:01 ] >>161 InstantRails
164 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 12:04:46 ] >>162 構造体(オブジェクト)のコピーが起こること、を問題とするわけね。 変数の実体が値である(C/C++)か、変数の実体が参照である(Ruby/Java/Python...)か、 という点が違いであって、名前に実体を関連付ける、という「代入」で問題ないんじゃないかと。
165 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 12:56:02 ] >>150 >そういやずっと前から思ってたんだけど、Perl とかで整数の 0(や文字の "0")が真偽値の偽とみなされるようになったのってなんで? >ヌル文字とかの関係? 関係ないよね? Perlは考え方としてCの延長にあるから、booleanがない(つまりfalseがない)からかわりに 0 を偽としている。 RubyはLispやSmalltalkに影響を受けているから、nilとfalseだけを偽にしている。 nullじゃなくてnilってところがポイント。
166 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 13:01:01 ] 0 が選ばれた理由にはなってないな ビットの 0 と 1 で 0 が negative だったから、が答かと
167 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 13:30:26 ] "0" が偽である理由としてはちょい苦しいかもな "0" が 0 に同一視されてると見るか
168 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 13:32:33 ] perlとかphpは型が曖昧だからまあそんな挙動もするでしょう
169 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 13:37:26 ] あっちの言語って型付けが弱いんじゃなかったっけ 自動変換されるという便利だが怖い仕様・・・・・・
170 名前:730 mailto:sage [2008/09/21(日) 13:40:32 ] perlもphpも糞ですよ
171 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 13:49:43 ] >>148 めんどくさいよな というかRuby(が参考にしたLisp系列)が条件文のこと優先して動作を作ったというのが正しいのかも
172 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 14:00:41 ] 0が偽のくせに「真としての0」が返って来る関数があるというのがまあ変といえば変 変態だったら誉め甲斐もあるんだが、ただ変なだけでは…
173 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 14:04:12 ] まあ便利なんだけどねPHP
174 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 14:08:33 ] それは認めるし、普及言語はどれも大なり小なり批判されるものだが この挙動は……
175 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 14:09:24 ] 他の言語を学ぶという姿勢は賞賛に値する Rubyしかできないとかマジ生ゴミ
176 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 14:27:08 ] >>174 うん、だから、偽といえるかどうかではなく、そもそも型が同じであるかどうかを一緒にチェックする PHP の ==(否定は!=) での比較は単に値が等しいことをチェックするが、 === は型も等しいことをチェックする(否定は!==) >>148 でしたい処理は if (strpos('ABCDE', 'ABC') !== FALSE){ echo 'matched'; }else{ echo 'unmatched'; }; とか書くのが素直 != で比較すると 0 が整数であるという情報がチェックに用いられないので常に結果が偽になってしまう このへんは strpos のマニュアルにもサンプルコードつきで警告として載ってたりする ttp://jp2.php.net/strpos 個人的には Ruby の gsub の挙動が極悪なのと似たような構造上欠陥じゃないかと思う
177 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 14:31:32 ] あー、gsubも最初に用意されてる引数の構文の挙動が気難しくてブロックが推奨だったな
178 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 15:42:20 ] まぁ値が数値型にも文字列型にもなるのはawkからの伝統だしな
179 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 02:23:34 ] >>163 ありがとう。できたよ。 クッキングなんとかがうごいた。 で、次、これの開発ってどうやればいいの?
180 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 03:37:13 ] railsのIDEは何を使えばいいの?
181 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 07:16:08 ] いい加減、本買うかぐぐるかしようぜ。
182 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 10:27:50 ] おっと質問の仕方が悪かったかな。 数あるIDEの中で、どれを使えばいいのかということ。
183 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 10:32:37 ] >>182 どれも糞
184 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 10:34:30 ] 機能的にはNetBeandsがかなりがんばってる感じはするがどの程度実用に耐えるかは知らん。
185 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 10:38:09 ] >>183 でFA
186 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 10:45:14 ] どうせ補間とか望めないからどれ使っても大して変わらん
187 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 10:48:14 ] Emacsのような単なる単語文字列としての略語展開が一番マシという困った結論に…
188 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 10:52:09 ] NBのコード補完はかなり強力。いつまでもema糞なんぞにしがみついてないで一度試してみるといい。
189 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 10:57:22 ] NetBeansの補完は、まあ頑張ってるほうだとは思った 多少いい加減なのは仕方ない
190 名前:730 mailto:sage [2008/09/22(月) 11:01:46 ] 関数とかクラスが畳めるエディタが良いな。
191 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 11:04:19 ] >>190 関数って何ですか??? 実際上はEclipse+プラグインかNetBeansかEmacs/Vimくらいしかないんだから順に試しとけ Javaの実行環境入れるのめんどくさい?もんくゆーな
192 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 11:07:51 ] CPUが2Ghz程度しかない前時代のマシンではロクに動作しないので新しいマシン買うこと
193 名前:730 mailto:sage [2008/09/22(月) 11:09:54 ] >>191 > 関数って何ですか??? まだそんなこと言ってるんですかw 関数と言い張りますよ。
194 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 11:15:51 ] 別に言い張ってて構わないと思うよ Rubyの用語集にも書いてあるくらいだから
195 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 11:18:09 ] >>193 クラスに関数があるのか? あれは多くの言語で「いや、これを関数って呼ぶのはなんか違うな」と判断されてメソッドと呼ばれているものだと思うが 仲間外れはC++くらい?
196 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 11:22:19 ] C++はメンバ関数だっけか ともあれ、Ruby学ぶ気ないんだなと思われるのは必定 それによって起こる結果については暴れないことだ
197 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 11:31:56 ] NetBeansとかは最初に何かするときに10秒くらいかかるのが切ない 同じことを2度目にするときは受忍範囲内なんだが
198 名前:730 mailto:sage [2008/09/22(月) 11:35:27 ] わかった。 副作用があるものは関数とは呼べないのは同意だけど、 だとしたらプロシージャと呼ぶべき。 それに、メソッドという呼び方をすることがRubyを学ぶことにつながるとは言えない。 俺はもうRubyの大体のことはわかったし、 実際にRubyを使って新しいWEBサービスを稼働させている。
199 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 11:40:45 ] >>198 なるほど、では君は初心者ではない このスレから卒業し早々に立ち去りたまえ
200 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 11:43:59 ] ここは純技術的な質問をするスレであって実のところレベルの高低は問わないのさ。
201 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 11:45:53 ] >>197 arr = Array.new arr.m ここで「arrはArrayだからArray#mapでmap」という判断をして欲しい所存
202 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 11:48:21 ] >>201 補完試すたびにソース全体をevalしまくりだな
203 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 11:51:36 ] >>195 やっぱりAdaとかSimulaとか、あっちのほうの言語じゃ メソッドは何が起源なんだろうか。Smaltalkとか?
204 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 11:59:10 ] >>201 え、そういう状況に即した判断をするのがIDEの便利なとこなんじゃないの? そこで「mのつくメソッド全部から選んでね」と表示するんじゃEmacsと変わらんぞ
205 名前:730 mailto:sage [2008/09/22(月) 12:02:49 ] >>203 アランケイじゃない? アランケイごときがsmalltalkを考えて、言語をわかりやすく庶民(笑)に伝えるために オブジェクトにメッセージを送るという考えかたで説明したのが起源じゃないかな。 で、オブジェクトにメッセージを送る「方法」をそのままメソッドと呼んだだけ。 だから、別に「メソッド」は学術的に意味がある言葉ではない。
206 名前:730 mailto:sage [2008/09/22(月) 12:12:21 ] アランケイがもてはやされるようになったのはC++が出てから。 それまでは普通の胡散臭いタイプの学者のおっちゃん。 ただ単に運良くオブジェクト指向が流行ったからアランケイがもてはやされるようになったというだけ。 オブジェクト指向は流行るべくして流行ったというわけでもないから、 本当に運が良かっただけと言うべきだね。 アランケイの言葉を未だに使い続ける理由はそれだけだね。
207 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 12:26:13 ] はいはい初心者スレでつまんない自説自慢はやめてね
208 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 12:31:01 ] アランケイがもてはやされるようになったのはMacが出てから。 それまでは普通の胡散臭いタイプの学者のおっちゃん。 ただ単に運良くGUIが知られてアランケイがもてはやされるようになったというだけ。 SmalltalkタイプのGUIは流行るべくして流行ったというわけでもないから、 (ジョブズがたまたまAltoで動くSmalltalkシステム=暫定Dynabookを見て感動しただけで、 Alto向けにはSmalltalk以外にもStarとかのいろんなタイプのGUIがあったから) 本当に運が良かっただけと言うべきだね。 アランケイの言葉を未だに使い続ける理由はそれだけだね。
209 名前:730 mailto:sage [2008/09/22(月) 12:37:54 ] ともかく、メソッドをプロシージャと呼ぼうが、C言語的な意味で関数と呼ぼうが問題ないわけ。 メソッドと言わないと通じないというわけでもないしね。
210 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 12:52:54 ] >>209 どう呼んでもいいのならメソッドと呼べ Rubyではそれをメソッドと呼ぶ
211 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 12:58:27 ] うむ、結論が出たな
212 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 14:22:12 ] >>210 どう呼んでも良いことを認めたら、それこそ自由に呼んで良いんじゃないの?w
213 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 17:38:14 ] じゃあ俺は各ソースファイルのことをモジュールと呼ぶことにしよう どう呼んでも問題ないんだよな? …とまあ、そういう話があるので 「Rubyで def や define_method で定義するのは全てメソッド 一部メソッドは関数と呼ばれることがあるが それらも全てメソッドであることをお忘れなく」 程度にしておこうな まあ、モジュールほど紛らわしい単語ではないから 関数と書かれていても解るが
214 名前:730 mailto:sage [2008/09/22(月) 18:30:43 ] うざいから消えてくれないかな
215 名前:730 mailto:sage [2008/09/22(月) 18:31:48 ] おまえがな
216 名前:730 ◆KL6EsW0z.s mailto:sage [2008/09/22(月) 18:32:32 ] これで満足か
217 名前:デフォルトの名無しさん mailto:sage [2008/09/22(月) 18:37:29 ] 自覚してんじゃんwww
218 名前:デフォルトの名無しさん mailto:sage [2008/09/23(火) 18:50:38 ] netbeansいれてみたんだが。 新規railsプロジェクト、で、 サーバーのところで webrickってのしか選べないんだが、 これってなんなの? WEBサーバーって言ったらアパッチじゃないの?
219 名前:デフォルトの名無しさん mailto:sage [2008/09/23(火) 18:52:04 ] netbeansいれてみたんだが。 すでにinstantrailsで、railsはインストール済みなのだが、 「railsがインストールされていません」 というメッセージが出てきて、勝手にまたrailsをインストール された。つまり、今パソコンにrailsが2つ入っているわけで 無駄このうえない。どういうこと? instantrailsのrailsと、 netbeansのrailsと、使い分けろってこと?
220 名前:デフォルトの名無しさん mailto:sage [2008/09/23(火) 19:16:13 ] 「実行」ってやったら勝手に ブラウザ起動して、 localhost:3000がアドレスに入って、 サンプルのページが出てきたんだが、 これってもしかして、netbeans起動中は 勝手にWEBサーバーも起動しているということか?
221 名前:デフォルトの名無しさん mailto:sage [2008/09/23(火) 19:53:18 ] そろそろ解決してる頃だな 自分で調べりゃ早いのに
222 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 09:18:36 ] www.thinkit.co.jp/cert/article/0605/2/2/4.htm このページに書いてあるとおりにやっても うまくいきません
223 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 09:19:45 ] RadRailsの右下ペインの「Servers」を選択して 「AddressBookServer」を起動します。 ステータスが「Started」になれば、Web サーバの起動は完了です。 ↑こう書いてあるのですが、 ステータスが starting... で10秒たって、 stopped になってしまいます。 なんでサーバーがスタートしないんでしょうか?
224 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 12:06:26 ] www.rubylife.jp/rails/erb/index2.html とりあえずここまでできた。 IDEを使わずコマンドラインでやるのが 結局一番早かった。
225 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 12:57:46 ] うごいたーーーーーーーーーーーーーーー ファイヤーウオールで アプトナの通信をブロックしてたのが 原因だった アプトナの通信を 「すべて許可する」 にしたら、マニュアルの通りに動いたーーーーーーーー ガオーーーーーーーーーーーーーー
226 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 13:18:38 ] なんでwebrickとモングレの2つの サーバーがあるの?
227 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 13:19:23 ] ルービーっておかしいわ まずインストーラーの段階からして3つあるし、 エディターは3つあるし IDEは3つあるし サーバーは3つあるしで、 いいかげんにしろっての。
228 名前:50 mailto:sage [2008/09/24(水) 14:12:41 ] すみません。大変遅くなりました。都合でネットにアクセスできなかったもの で。もう少しここで話をさせてください。 >>71 > local visibilityとかいう新機能とは違うのかな。 ちょっと調べてみたのですが、2006年ごろで話は止まっているのではないでしょ うか? >>74-76 すみませんが、私が問題視しているのはevalではないのです。evalを持つ言語、 オープンクラスを持つ言語に共通する点ではなく、Ruby固有のクラス実装を私 は問題視しています。 具体的には、以下のようなことです。 ・あるクラスを継承するときに、親クラス名.methods などを頻繁に実行して、 存在するすべてのメソッドやインスタンス変数の名前を確認して、衝突を避け なければならない。 ・あるクラス内だけで使う、公開しないツールのようなメソッドを作れるよう な名前空間がどこにもない。 これらを解決する方法が、コーディング規約によるプレフィックスのみという のは、ずいぶん原始的で、JavaやC++に慣れた人なら不自由を感じると思うの ですが。しかもRuby の大クラス主義で、既存のプロパティの数は膨大です。 そこで、皆さんがどのように感じておられるのか、お聞きしてみたいと思いま したが、このスレの反応を見てもやはりあまり問題視されていないようで、こ れはやはり意外でした。
229 名前:50 mailto:sage [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 mailto:sage [2008/09/24(水) 14:15:25 ] 最後に、自分の印象ですが、 C++ ... アクセス、改変してはいけないものには、ユーザがアクセスする方法 が決して存在しない。 Python, Java ... アクセス、改変してはいけないものは、ユーザが意図しな ければアクセス、改変されないが、意図すれば誰もが自由にアクセス、改変できる。 Ruby ... アクセス、改変してはいけないものを保護する方法が乏しく、ユー ザが意図せずにアクセス、改変してしまうことがある。 つまり、私が問題にしているのは、アクセス、改変が可能かどうかではなく、 それを意図していないのに誤ってアクセス、改変してしまう危険についてなの です。 この二者は、Rubyはフレキシブルな言語だという主張によって、しばしば混同 されがちだと思います。フレキシブルなのは結構ですが、自分の足を撃ちたく はないのです。 以上です。長々と失礼しました。
231 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 14:28:43 ] >>230 あなたはC++、Python、Javaを10年くらいやりこんで、 それで今回、rubyに入ってきたような人なの? かなりプロフェッショナルな印象を受けるが。
232 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 14:42:40 ] >>228-230 主張はだいたい合ってるし、正しい。 ただ、この問題がRubyで簡単に解決できるかというと、たぶん実装の都合で難しいんじゃないかな。 Pythonのmanglingだっけ、あれが欲しいとは思うんだけど、class_evalとかinstance_evalとかあるRubyでPythonと同じように実装可能かと言われると、分かんない。 ただ、manglingは(不細工ではあるけど)手動でできるので、mangling程度の隠蔽でよければ、手動で頑張ればできるということになる。手動だとほんと不細工だけど。 あとは、Rubyに限らずスクリプト系はどれもそうだけど、「問題があったら直せばいい」という精神をもつしかないと思うよ。 たしかにかぶる可能性はあるけど、そんなにしょっちゅうかぶることはないし、かぶったらかぶったで直せばいい。そんな感じ。
233 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 14:53:42 ] 質問です。 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の問題なのでしょうか?よろしくお願いします。
234 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 15:26:38 ] RoRってwebrickを作動させておけば アパッチいらないんじゃん。 なんでアパッチインストールさせたのさ?
235 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 17:26:47 ] >>233 exeファイルをダウンロードしたから、それをアンチウィルスソフトがチェックしているんじゃない? アンチウィルスソフトを一時的に無効にしてみるとか。
236 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 21:17:17 ] >>227 Java の IDE とアプリケーションサーバがいくつあるか調べてから文句言ってくれ。
237 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 21:21:36 ] >>229 以下を守れば大丈夫。 ・自分の足を打ちがちな馬鹿にはコードを触らせない ・Railsのフレームワーク部分のコードは一通り読む
238 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 21:26:43 ] 「エディターが3つ」の意味がわからない
239 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 21:31:05 ] >>238 エディターズレビューとかあんじゃん
240 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 21:37:20 ] 音声データをデジタル化するときに 周波数16kHzだから ".unpack("s*") をつかって数値化はできたんだけど 数値が25000くらいあって。 その単語は1.3秒くらいなんだけど 単位がわからなくて。わかるひといますか?
241 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 21:41:32 ] > 周波数16kHzだから.unpack("s*") をつかって数値化 日本語でおk てか周波数と整数のBit数ってなんか関係あるん? 書いててなんかありそうな気もしてきたが、たぶん関係ないんじゃね? というかそういうバイナリ扱うのはRubyは不得意なんだが外部プログラム使えないのか
242 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 21:43:38 ] まあこれ完全に専門的な内容だから 知らない人かなり多いのかな。。。
243 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 21:46:22 ] まあRubyをメインにやるような人はふつう知らない 外部プログラム使えというアドバイスはけっこう正しいかと
244 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 21:47:27 ] デジタル化されてんじゃん
245 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 21:48:43 ] このデータをフーリエ変換しないといけないんだけど 単位がわからなくてはね。
246 名前:デフォルトの名無しさん [2008/09/24(水) 21:49:30 ] 240はアホすぎて自分が何をやりたいのか説明できてない
247 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 21:52:22 ] スレ違い サウンドプログラミング4 pc11.2ch.net/test/read.cgi/tech/1185340076/
248 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 21:53:39 ] 音声データから 特徴抽出したい。 これは普通ツールによって行われるが 今自分で作ってる 以上
249 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 21:55:39 ] 247のスレで聞くからもういいです。 アホ扱いされるのなら
250 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 21:56:41 ] RIFFだったら www.kk.iij4u.or.jp/~kondo/wave/ の通りかと。 フォーマットの仕様読んでわからないなら諦めたほうが。
251 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 21:57:16 ] まあ Ruby はあんま関係ないな そのファイル形式の構造の問題だ
252 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 22:58:25 ] Rubyとは関係ないかもしれないのですが、Rubyで実装しているのでここで質問させてください。 普通、ウェブアプリで検索とかのリクエスト送って、リクエストの結果を 送ったページと同じページに表示させる場合、リクエストを送るのは同じページのメソッドにしたほうがいい? なんか一緒に作ってる人が Aページ⇒Bメソッド⇒Aページのメソッドって感じにしててどうなのかな?って思ったんです なんかわかりにくくてごめん
253 名前:50 mailto:sage [2008/09/24(水) 22:58:28 ] >>231 プロフェッショナルとは恥ずかしくてとても言えませんが、経歴と年数はだい たい当たっています。 >>232 大変参考になりました。ありがとうございます。 instance_eval等ですか。なるほどこれがあると、マングリングとの両立は難 しい気がします。念のため確認しましたが、Pythonには instance_evalに当た る機能はないようです。 内部プロパティ名のコーディング規約は、なるほど手動マングリングが、不恰 好ですが現実的ですね。 最後に、名前は早々衝突しないし、もし衝突したなら直すというのが、Rubyコ ミュニティ(というかスクリプティング界隈)の精神なのですね。すると自動 テストが、推奨というより必須になるわけですね。当たり前のことですが、改 めて目からうろこが落ちました。 質問してよかったです。ありがとうございました。
254 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 23:00:29 ] Rubyとは関係ないかもしれないのですが、Rubyで実装しているのでここで質問させてください。 普通、ウェブアプリで検索とかのリクエスト送って、リクエストの結果を 送ったページと同じページに表示させる場合、リクエストを送るのは同じページのメソッドにしたほうがいい? なんか一緒に作ってる人が Aページ⇒Bメソッド⇒Aページのメソッドって感じにしててどうなのかな?って思ったんです なんかわかりにくくてごめん
255 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 23:01:25 ] 2回送ってしまった、スマン
256 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 23:03:32 ] >>254 Ruby関係ないしそもそもそのへんは設計どうでもいいからわかりやすいほうにしろ メソッドって言葉の使い方間違ってねーか?まあいいや
257 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 23:05:17 ] >>246 どっちかというと基本から何をどうすればいいのか分かっていないのでは。 >>240 音声圧縮についてのことでもなさそうだし、普通のPCMの話だとおもうけど 音声がどのようにしてデジタルに符号化されているのかを理解していれば、 単位が分からんとか言い出すはずがないんだが。 データサイズ[bit] = 量子化ビット数[bit] * サンプリング周波数[Hz] * 時間[s] * チャンネル数 ここまではRubyと何の関係もないのでもう一つ言っとくと、packでの"s"は その環境のエンディアンに依存しているので、よそでは動かないかもよ。 ちゃんとフォーマットにあわせて"n"とか"v"を使うように。
258 名前:デフォルトの名無しさん mailto:sage [2008/09/25(木) 00:42:13 ] >>253 >最後に、名前は早々衝突しないし、もし衝突したなら直すというのが、Rubyコ >ミュニティ(というかスクリプティング界隈)の精神なのですね。すると自動 >テストが、推奨というより必須になるわけですね。当たり前のことですが、改 >めて目からうろこが落ちました。 いちおう補足しておくけど、エラーはテストで見つかるけど、もしコンパイル時に見つかるならそれにこしたことはない。そっちのほうが作業効率いいしね。 ただ、実はコンパイル時の検査は必須ではなく、テストで見つけるというアプローチでも十分実用的というだけ。 いままで「コンパイル時にできるだけエラーを見つけないといけない」「名前の衝突による思わぬバグを防ぐような仕組みを用意してないといけない」と 思いこんでいたんだけど、実はそうでもなかったよ、慣れればなんとかなるよ、という経験をしてほしいなー というおっさんのひとりごとでした。
259 名前:デフォルトの名無しさん mailto:sage [2008/09/25(木) 00:46:04 ] >>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 とか。 しかし日本語下手だな。なんとかしてくれ。
260 名前:デフォルトの名無しさん mailto:sage [2008/09/25(木) 00:58:11 ] >>252 PRGってやつ?
261 名前:デフォルトの名無しさん mailto:sage [2008/09/25(木) 07:30:35 ] >258 ある程度慣れた人だと、shebang や require 以外で最初に書くのは module になる気がする 要るか判らんが、とりあえず空間切っておくか、みたいな
262 名前:デフォルトの名無しさん mailto:sage [2008/09/25(木) 09:05:11 ] アホばかりでやんなっちゃうよ
263 名前:デフォルトの名無しさん mailto:sage [2008/09/25(木) 12:11:04 ] 表示端末の文字エンコードを自動判別して変換することはできますか? ファイル内容を puts した瞬間に 「しまったこれShiftJISかようわ矢印キー効かね」 というようなことを大多数の端末で避けたいです
264 名前:デフォルトの名無しさん mailto:sage [2008/09/25(木) 12:21:02 ] >>263 ENV に情報がなければ無理だろな Windowsのコマンドプロンプトでは特に情報がないようだ
265 名前:デフォルトの名無しさん mailto:sage [2008/09/25(木) 15:36:52 ] あー、スクリプト例で文字列を puts とかさせるときちょっと困るね toeuc 決め打ちしておくのも変だし
266 名前:デフォルトの名無しさん mailto:sage [2008/09/25(木) 16:08:59 ] 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をつかって刑務所からプログラミングしてるんですか?
269 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 14:35:51 ] Rubyでバイナリを16進数文字列に変換するのはどうしたらできますか。 packとかunpackがわかりくすぎて、理解できません
270 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 14:55:34 ] packとか使え packはC参考にしれ
271 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 15:22:39 ] open(ARGV[0], 'rb'){|f| while bin = f.read(16) bin.each_byte{|byte| print '%02X ' % byte } puts end }
272 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 15:46:05 ] 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 ')' となってしまいます。 普通にメソッド呼んでいるだけなんですが、何が悪いんでしょうか。。 =のつかないメソッド名だと大丈夫なんですが…
273 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 17:00:00 ] www.ruby-lang.org/ja/man/html/_A5AFA5E9A5B9A1BFA5E1A5BDA5C3A5C9A4CEC4EAB5C1.html#a.b1.e9.bb.bb.bb.d2.bc.b0.a4.ce.c4.ea.b5.c1 リファレンスマニュアルによると、代入演算子は次の形で再定義できるという def foo=(value) # obj.foo = value なので、xy=(x, y=nil) のメソッドを呼ぶには次のようにする a.xy = 式 そのエラーは式の部分が (1,2) なので文法エラーになっているということ。 value = (1, 2) という式はRubyでは解釈できない。 という話だと思う。 たぶん。 信用度 80% くらい。
274 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 18:47:03 ] RoR動くレンタルサーバーって 高いところしかないの? さくらのライトプランで動かないの? なるべく月500円以下のところを 紹介してほしいんだけど。
275 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 18:58:38 ] 500円以下はありえない そもそものRoR動かすこと自体がかなりサーバ負荷の高い行為だから、 収容人数の多い安いレンタルサーバでは実用的な速度ではまず動作しない 専用サーバと呼ばれる、少人数あるいは自分たちだけの買い取りサーバを使うんだね
276 名前:272 mailto:sage [2008/09/28(日) 19:02:27 ] >>273 ありがとうございます。 a.xy=(何か) という形は単なるメソッド呼び出しだと思っていたのですが、 実際には代入用の特別な呼び出しで、「何か」の部分は代入の右辺に 使えるような式である必要があり、普通のメソッドと同じようには いかない、ってことなんでしょうか。 結局、調査の末これならできるということがわかりました。。 a.send(:xy=, 1, 2) 実際は ActiveRecord::Base#attributes= なんですが。
277 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 19:09:56 ] a.xy=1, 2とかa.xy=*[1, 2]でもよさそうに思う
278 名前:272 mailto:sage [2008/09/28(日) 19:41:41 ] >>277 それだと @x が [1, 2] になっちゃうんです… ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin8]
279 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 20:17:45 ] class XY attr_reader :x, :y def xy=(v) @x, @y = v end end a = XY.new a.xy = 1, 2
280 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 20:55:34 ] Rubyで、パイプのようなものを実現するにはどうしたらいいですか input = "aaa¥nbbb¥nccc¥n" output = open("|cat -n", "r+b") do |io| io.write(input) if input io.read end でいけるかなと思ったのですが、io.read()でブロックされるようで、うまくいきません。
281 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 21:06:48 ] >>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
282 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 21:17:08 ] popen
283 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 21:29:15 ] じゃあ俺はreadpartialを推しておく
284 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 21:41:56 ] windows版のrubyが起動に物凄く時間がかかるんですがなぜでしょうか・・・?
285 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 21:57:46 ] rubygems読み込んでるんだろ
286 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 22:18:04 ] >>276 www.ruby-lang.org/ja/man/html/_B1E9BBBBBBD2BCB0.html >プログラミングの利便のために一部のメソッド呼び出しと制御構造は演算子形式をとります。 >ほとんどの演算子は特別な形式のメソッド呼び出しですが、(後略) ということだそうだから、普通のメソッド呼び出しとは違うんだろう。 だいたい2項演算子の引数が複数だったりすると混乱の元にしかならんしな。 f( a + 1, 2) と書いたら、実は f( a+(1, 2) ) でしたとか。
287 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 04:05:45 ] ちょっと質問なのですが、Vistorパターンがいまいちわかっていません。 サンプルコードを見ても実際にどんな時につかうのかが? Rubyのライブラリなんかで、Vistorパターンを実際に使っているソースはありませんでしょうか?
288 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 04:09:01 ] >>274 安いRailsのホスティングサーバー - Core d.hatena.ne.jp/core/20080906/1220715811#c 野ログはノロキュアMaxHeart - SlicehostでそれなりにRailsを使っている感想 , Rails動かす環境が欲しい人必見 cureblack.com/20080909.html#p01 まともに動かすには、VPSぐらいでないと無理くさいです。 レンサバでRamaze動かしている人(CGI駆動でw)はいた。 rubyの軽いWebアプリケーションフレームワークを試してみた - NAT’s Programming Champloo d.hatena.ne.jp/NAT_programming/20080817/1218957113 さくらのレンタルサーバでramazeを動かしてみた - NAT’s Programming Champloo d.hatena.ne.jp/NAT_programming/20080817/1218962624
289 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 04:14:09 ] >>227 C/C++とか触れそうにないなw あなたには選択肢が少ない、ひまわりとかDelphiがオススメ
290 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 08:23:51 ] >>287 Visitorははまるときはピッタリはまるんだけどね。 Visitorパターンの例題として見るだけなら少し大きめだが、RDのパーサとか rubyforge.org/projects/rdtool/
291 名前:デフォルトの名無しさん [2008/09/30(火) 00:28:47 ] Mac OSXにRails環境を作ってみたのですが、プロジェクトを作成すると ファイルの文字コードが全て iso-2022-jp-3で作成されてしまいます。 プロジェクト作成時にutf8でファイル生成するオプションなどはありますか?
292 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 08:23:04 ] railsコマンドが作る初期プロジェクトに使われる文字の範囲では ISO-2022-JP-3(初期ASCIIでスタート)とUTF-8は同じだと思うんだが。
293 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 10:00:53 ] どんなソフトやらでISO-2022-JPでなくISO-2022-JP-3だと判定されたのかはちょっと気になるな cat > hoge.txt とかで作ったファイルも同じ判定ならコンソールか何かの設定の問題か、その判定ソフトの癖だな
294 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 11:52:43 ] RoR のフォームヘルパには Smarty でいう html_options みたいなヤツはないの?
295 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 14:09:23 ] >>294 html_optionsみたいなのがなにかを説明しないと、わかるわけがない
296 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 14:20:57 ] >>295 ttp://www.smarty.net/manual/ja/language.function.html.options.php
297 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 15:39:13 ] まずは「rails select option」でぐぐろうぜ
298 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 17:10:47 ] うぉーあった。ありがとうございます >>297 Rails入門(本)には text とか radio は載ってたのにこれは載ってない。 でもないのはおかしいなと思ってた。date_select まであるじゃんかよ…。
299 名前:287 mailto:sage [2008/09/30(火) 17:21:04 ] >>290 thanx 見てみます。
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側の問題のような気もするので、そっちで聞いてみます。
301 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 08:21:11 ] >>300 とりあえずodなどで問題のテキストをバイナリダンプしてみては?
302 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 11:09:10 ] >>300 文字エンコード自動評価の順が iso-2022-jp-3 が最初なんだろう vimrcの文字エンコード推測設定がMacOSX向きじゃないんだと思う きっとどっかのサイトのを意味もわからず丸コピペしたのだと推測
303 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 12:05:42 ] >>298 書名をさらして著者に改善を要求しよう
304 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 12:13:37 ] バージョンアップ後のフォローを求めるアホもいるので注意 ちゃんと冒頭に「バージョン○○を対象にします」って書いてあんじゃんよ
305 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 15:00:25 ] >>304 今回の select option に限って言えば、どのバージョンでもあるわな
306 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 19:14:46 ] ruby gemsでdescriptionで検索することってできないのでしょうか? gem search --details --both --all hoge とやっても、名前でしか検索ができません。 説明欄も検索したいのですが・・・
307 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:24:06 ] 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するためのオプションだな。
308 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 11:44:41 ] 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が問題なのですが何がいけないんでしょうか・・・? 助言頂けるとありがたいです。
309 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 11:49:49 ] "うまく動かず"を出し惜しめせずに書けw
310 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 11:51:06 ] sum += a.to_i かな
311 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 12:07:40 ] >>309 コマンドプロンプトだと1つ目の数値を入れたとたん終了・・・ >>310 できた!thx! getsで入力した数値を文字列だと思ってたのか・・・orz ほんとありがとう、数値ひとつ入力するのに1時間奮闘してた・・・
312 名前:311 mailto:sage [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
313 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 12:34:11 ] 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"
314 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 12:37:37 ] どういう勉強の仕方をしてるのか気になる。
315 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 12:39:51 ] >>312 「実行」って、コマンドプロンプトから ruby hoge.rb とかしてる? 普通はこうなる > ruby hoge.rb 点数を入力してください。 hoge.rb:3: undefined local variable or method `a' for main:Object (NameError) あと入門書嫁
316 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 12:49:11 ] 本題に関係ないとはいえ一応書いておくが、Rubyでforはめったに使わない 普通はブロックを使う
317 名前:312 mailto:sage [2008/10/02(木) 12:50:02 ] >>313 おお・・・ちゃんと動く・・・ありがとです。 for文の中でsumに足していかないとは・・・! sum周りが初見なんで調べないとですね。 ともあれthxです。 >>314 Cは多少やってたのでCの頃に書いた簡単なプログラムをRubyに書き直してみてるところです。 文法がずいぶん違って躓きまくりです・・・ >>315 いや、「.rb」をそのままダブルクリックで実行してます。 だからsleep入れたりしてすぐに消えないようにしてたり・・・ 基本はRDEで実行してます。 「たのしいRuby 第2版」を参考にしてますが、必要な所だけ探して読んでるのがいけないかもですね・・・
318 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 13:19:11 ] コマンドライン実行のスクリプトをダブルクリックしてどうする 正常終了でウィンドウ閉じるだろ
319 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 13:36:57 ] 最後にsystem('pause')入れたりする
320 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 14:02:52 ] >>317 RDE使ってるなら、プログラムを実行した後 下の出力ウインドウにエラーメッセージとか出てるんじゃないか? それを貼り付けるべし 出ないようならコンソールから実行
321 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 14:22:57 ] >>318 いやだからsleep入れたりしてるんですが、エラーの時は関係なく終わるんです。 >>319 Rubyの場合はスタンダードライブラリを読み込まなくても使えるんですね。(Rubyには存在しない? 活用させていただきます。 >>320 一応出ますね。以後貼り付けます。 みなさんありがとうございます。またすぐに来そうで心配ですが、その時はよろしくお願いします。
322 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:02:43 ] バッチファイルにしてやればエラーが出てもポーズさせるようにできるよ。 ruby -x "%~0" || pause と書けばエラーが出たときに限ってとまる。 test.bat ruby -x "%~0" pause goto :eof #!ruby put "hello"
323 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 19:08:34 ] >>322 横からだがサンクス これを.rbに関連付けしておけばよいのか・・・ || でエラー時だけ止まるのかいいな、これ
324 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 22:15:24 ] rdocで#:nodoc:と指定されてる要素も無理矢理ドキュメント化するような オプションとか方法とかってありますか?
325 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 23:44:42 ] >>324 そんなのはないから自分で #:nodoc:を消せばいいじゃん cp -pr src1 src2 find src2 -type f | xargs perl -pi 's/:nodoc://'
326 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 01:37:13 ] >>325 なるほど 参考にさせていただきます ありがとうございました
327 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 02:38:35 ] >>325 そこでrubyでもsedでもなくperlかよw
328 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 11:54:46 ] >>327 1 linerでの置換ならrubyよりperlのほうが便利 sedは-pオプションがない
329 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 12:52:51 ] www.goto.info.waseda.ac.jp/~fukusima/ruby/python-j.html これ教えてもらってpythonから宗旨替えするのを検討してるんだけど 本当にpythonのモジュールが問題なくつかえるの? ctypes boost.python numpy matplotlib PIL が使えるかが一番問題なんだけど
330 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 13:02:03 ] >>329 現在の Ruby は 1.8.7 です
331 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 13:09:37 ] (いろいろとpython側もruby側も追随してないだろうから、やめるのが吉、ってことか...)
332 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 15:59:38 ] >>329 作者に聞くか、自分で試してみるしかない。 つうか、PerlやPHPならまだしも、Pythonから宗旨替えする理由って何?
333 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:24:32 ] >>332 借りてるレンタルサーバーでRubyは動くけど pythonが動かない railsが便利なら使ってみたい
334 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:30:26 ] >>333 Railsを実用的な速度で使うなら、 別プロセスのサービス(MongrelやFastCGI)か Apache組込のPassengerが必要になる。 レンタルサーバではどちらもできないことが多いので、注意。
335 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 21:35:41 ] 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) というエラーが出ます。どうしたもんでしょうか。
336 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 21:46:08 ] 普通にsystem使ったら?
337 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 22:09:57 ] >>328 sedのデフォルトの動作が -p 指定時のPerlと同じだろ。 おまえさんが言いたいのは -i じゃないのか? でもこれも GNU sedならあるけどね。
338 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 22:12:47 ] >>335 gsub!の置換後の文字列だけどそれでいいのか? あと startはcmd.exe の内部コマンドだからそれだとまずいだろう
339 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 23:13:37 ] >>337 >おまえさんが言いたいのは -i じゃないのか? その通りだ orz エスパーさんくす
340 名前:デフォルトの名無しさん [2008/10/03(金) 23:40:05 ] nanoc: a Ruby CMS that generates static HTML ≫ home nanoc.stoneship.org/ nanocというRuby製のCMSを使ってみています。 nanoc autocompileコマンド時にhttpdサーバーが立ち上がります。 しかし、ブラウザでlocalhost:3000/ というデフォルトのアドレスにアクセスしても 画像が何故か読まれません。 そこで、autocompileコマンドのソースを追って調べていたのですが、 nanoc: lib/nanoc/extra/auto_compiler.rb@55a1480e2719 nanoc.stoneship.org/hg/nanoc/file/55a1480e2719/lib/nanoc/extra/auto_compiler.rb (ちょうど上記ソース)、255行目の File.read(path) ってもしかして、 Window環境だとバイナリ読めなくないですか? irbで試しましたが、pngを読むと、 irb(main):028:0> a = File.read "gradient-nav-white.png" => "\211PNG\n" みたいになってしまいます。
341 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 23:58:19 ] >>340 ソース読んでないけど、たぶんその通り UNIX畑の人間が書いたスクリプトには、バイナリモードを考慮してないものがある 最近だとRackでも見た
342 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 00:00:57 ] 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 ある意味とてもカッコ悪いよな
343 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 00:01:14 ] PNGのマジックナンバーに含まれるEOF文字で止まっているようですね。 バイナリモードのopenを使うように書き換えないといかんのかな。
344 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 00:03:24 ] なんか足りなかった 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 のモジュールの多くは自前のスクリプトの先頭で書き換えることができる きっとこれから何度もお世話になると思うので覚えておくといい けっこう明確なバグ(で、自前で何とかなるもの)が残ってたりするもんだ
345 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 00:07:32 ] あれ、アクセスフラグrbじゃなくてrwなの?
346 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 00:10:45 ] rb だな
347 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 00:16:27 ] msっていつになったらテキストモードをなくすの?
348 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 00:24:32 ] >>347 Cやれ
349 名前:340 [2008/10/04(土) 00:48:47 ] みなさんありがとう。上手くいきました trap::IO - Rubyリファレンスマニュアル 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
350 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 01:18:38 ] これはホントは標準添付の便利メソッドのフリしてバイナリモードガン無視の File.read が悪いんだよね ライブラリ作者はあんまり悪くない(注意不足なだけ) 2.0 では直ってたりするのかしら
351 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 01:29:27 ] 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("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("localhost:#{port}/ ") if defined?(Launchy) end original_start(port, handler_name) t.join end
354 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 02:37:21 ] >>352 while (3000ポートに接続できない) sleep(1) # 1秒待つ end
355 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 02:44:59 ] >>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 mailto:sage [2008/10/04(土) 02:57:28 ] 深夜に何度もすいません。 キー入力待ちでもsleep後に平行してブラウザが起動してくれました。大丈夫でした。 httpdの起動が遅いせいか、どうもタイミングが悪かったようです。 >>354 を実装してみたいと思います。ありがとうございます。
359 名前:352 mailto:sage [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 = "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 をこんな感じで行けました。 もっと短くかければよかったのですが。
360 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 04:06:35 ] テキストモードとか意味不明。 ただこういうバグを生むために存在するとしか考えられん。 まあでもそういうのを考慮する環境がクライアント機では90%以上を占めてるので仕方ないか。。
361 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 04:10:20 ] だからCやれって テキストモードが生まれたわけがわかるから
362 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 04:35:54 ] >>361 Cは平素より使用しているが、どうしてテキストモードなるものが存在する必要があるかは理解できない。 ここで、「ググレ」やリンクを貼る行為ではなく、あなたの言葉での説明希望。
363 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 07:12:40 ] ちゃんとした文責のある文章を拒否して、名無しさんの言葉だけ求めるってw 「知りたい」んじゃなくて「追い込みたい」のが丸わかり。 土曜の早朝から何を厨臭いことを。
364 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 07:17:11 ] 隔離スレにお帰り
365 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 08:31:49 ] むしろCのstdioがマシンごとに改行の内部表現が異なることを意識して テキストモードとバイナリモードを用意して抽象性を確保してるんだから UNIX使いもちゃんと使い分けろって話になりはしないの?
366 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 09:50:05 ] >>363 煽るだけならCスレへお帰りください
367 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 10:23:42 ] >>362 >Cは平素より使用しているが、どうしてテキストモードなるものが存在する必要があるかは理解できない。 たんに、プラットフォームによって改行を表す記号が違うので、それを隠蔽して互換性を確保するモードを用意しただけ。 >ここで、「ググレ」やリンクを貼る行為ではなく、あなたの言葉での説明希望。 ほんとにCやってるなら、このくらい分かるだろ。 まずは「教えてください」という言葉を覚えような。
368 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 11:01:03 ] >>367 >まずは「教えてください」という言葉を覚えような。 お前は文章に「教えてください」って文字列が入ってないと納得できない正規表現脳なのか
369 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 11:10:12 ] デジタルリサーチとAppleのせいってことで終了にしとけ。 ttp://ja.wikipedia.org/wiki/%E6%94%B9%E8%A1%8C%E3%82%B3%E3%83%BC%E3%83%89
370 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 12:46:31 ] >>365 普通UNIX使いは改行記号がが\nのとき、\r\nのとき、\rのときそれぞれを考慮したコードを書きます。 なぜならUnix使いはおそらくwindowsをはじめとする他の環境を触ったことがあり、 それらで改行がどう表現されるかを知っていて、 かつbフラグは無視される環境であることがほとんどだから。 >>367 だからね、それは「テキストモードが必要な理由」にはならないんだよw なぜなら普通は上に書いたようなことをやるから。 あれば便利かと思って作ったんだろうが、現状むしろあることのほうが害。バグの原因になる。 こんぐらい少し考えればわかるだろwww
371 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 12:56:18 ] >>368 その文字列を探す様子をたとえるのに、正規表現はないだろう。
372 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 13:09:55 ] pc11.2ch.net/test/read.cgi/tech/1221967332/87 こいつ何言ってるの?
373 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 13:21:33 ] >>370 >普通UNIX使いは改行記号がが¥nのとき、¥r¥nのとき、¥rのときそれぞれを考慮したコードを書きます。 書かない。ふつうは printf("foo¥n"); としか書かない。printf("foo¥r¥n") なんて書くわけない。 本気でそんな主張をするなら、世の中のUNIX用ツールで改行コードを使い分けているソースの例を挙げて、 それが一般的であることを示してくれ。 >なぜならUnix使いはおそらくwindowsをはじめとする他の環境を触ったことがあり、 触っただけで、自分のコードにそこまでの移植性を考えるわけない。 たとえばUNIXとWindowsではパス区切り文字が違うが、それを考慮しているコードは多くない。 改行コードの違いなんか考えるわけがない。 >それらで改行がどう表現されるかを知っていて、 >かつbフラグは無視される環境であることがほとんどだから。 bフラグを無視するのはUNIX系だけでは? Windowsでは無視されないんだから、「bフラグは無視される環境であることがほとんど」なわけがない。
374 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 13:27:07 ] >>372 お前の存在をズバリ言い当ててるのでは?
375 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 13:50:17 ] >>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 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 14:08:35 ] この場合、「一般的であることを示す」のは至難の業だわな。 いったい何百例出せばいいのかと(数例で納得するのは逆におかしい)。 それでいて、いかにも「正当な要求をした俺と、応えられないコイツ」的な構図が 出来上がるから、まぁ、ある種の人間はこの質問をすることを凄く好むんだよね。 「知りたい」んじゃなくて「追い込みたい」のが丸わかり。 土曜の昼に何を厨臭いことを。
377 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 14:46:13 ] >>376 久々に切れのある内容のスレを見た。 尊敬する。 あなたの言うとおり!!
378 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 16:17:01 ] >>376 なに語ってるのか知らんけど、 >普通UNIX使いは改行記号がが¥nのとき、¥r¥nのとき、¥rのときそれぞれを考慮したコードを書きます。 なんておかしなことを書いてあるから、それが「普通」である根拠を示してくれといってるだけ。 答えられないならでしゃばんなよ。
379 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 16:20:17 ] IDの出ないスレは自演が楽だな。
380 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 16:21:10 ] >>375 >wgetのhttp.cなどを参考にしても、もし改行が¥nの場合、¥r¥nの場合両方とも正しく処理できるように >なっている様がわかる。 wget はネットで使うんだから、どちらにも対処できるようにするのは普通だろ。 それこそunixもwindowsもmacも関係ない話。 これをbフラグの話で持ち出すほうがおかしい。
381 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 16:46:28 ] >>378 > なに語ってるのか知らんけど、 知らんまま反応した当然の結果として、まるで的外れだから、「知る」までは黙ってていいよ。
382 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 18:34:37 ] unixはバイナリモードしかなくても、改行コードがファイル毎にバラバラでも テキストを問題なく扱えるし、windowsでも当然可能 # 可能にしてるのはライブラリやアプリケーション、だけど問題はそこじゃない 不必要なテキストモードを残しているばかりに>>340 の様な問題が起こる appleがOSXでCRを捨てたようにwinもさっさとテキストモードを廃止してほしいもんだ
383 名前:340 mailto:sage [2008/10/04(土) 19:03:40 ] なんか、俺のせいで半荒れ?でスマナイ 俺はネイティブ言語はDelphiくらいしかつかわないけど、 テキストモードとかバイナリモードなんて意識したことない。 File.readのテキストモードとかの区別って結局どこから来てるんですかね?
384 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 19:25:51 ] >>383 Rubyを作るときのCの…えー、WindowsのCライブラリから来ている 結局としては、テキストであるという判断をどの層で誰がやるかという話に過ぎない
385 名前:352 mailto:sage [2008/10/04(土) 19:33:12 ] >>384 そっか、C言語のライブラリのせいなのね・・・
386 名前:340 mailto:sage [2008/10/04(土) 19:36:58 ] ん?レス番残ってた 340です。
387 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 19:42:25 ] 1.9はstdioを捨てたと聞いたが、そうするとテキストモードに関する 状況は変化するの?
388 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 18:24:44 ] >>387 ユニバーサルニューラインが入ってる。 www.garbagecollect.jp/~usa/d/200808c.html#id20080825_P1
389 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 19:15:07 ] >>388 > "r"なら、"rt"と"rb"のどちらの扱いになるかはプラットフォーム依存。 > とりあえず、いわゆるUNIXなら"rb"と同様に、mswinやmingwなら"rt"と同様になる。 ちょw 問題解決されてなくないですか?
390 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 19:17:52 ] ああ、違うのかな? 前みたいに適当に"r" だけだとどっちにしろ環境依存になるから、 バイナリかテキストかを意識しなくちゃいけないわけか
391 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 20:19:17 ] テキストだとエンコーディングも意識する必要があるしのう。 文字=バイトで凝り固まった外人どもよりはこのへん日本人は意識しやすいだろうけど。
392 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 00:31:26 ] >>389 本質的に問題なのはテキストモードを区別するという慣習だから、 Rubyだけで解決できる性質の問題じゃない。 Windows全体で「CRLFを使うのはやめよう」という流れにならない 限り解決しようがない。
393 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 01:51:56 ] 結局いつものRubyが糞なのが根源的な原因だけど対応するのが面倒だから 個々の環境(というかいつもWindows狙い撃ち)で対応しやがれというお話ですね。
394 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 02:00:53 ] 俺の場合、Windows(つかSJIS/CP932)一辺倒の頃は むしろ「LFなんて糞、CR+LFに統一しる」と思ってた 今はそうでもないが、昔の俺以外にもそう思ってる奴は居るかも
395 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 02:31:20 ] ラインをフィードしただけで「行の先頭」に行くUNIXは変 キャリッジをリターンしただけで「次の行」に行く旧Macも変 「カーソルを行頭に戻してから行を送る」というCRLFを具現したWindowsが意味的に妥当 とは思う っていうか電脳化した時点でCRLFという概念作っとけよもう 何が悲しくてコンピュータでタイプライタのエミュレーションなんぞしなければならんのか
396 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 02:38:48 ] SJISが普通に使われるWindowsでは2バイトあった方が誤読しにくい
397 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 08:21:28 ] >>395 それは端末を中心に考えているから。だから「行頭に戻る」と「次の行に移動する」をわけて考えてしまう。 UNIX作ったひとはテキストを扱うことを考えてて、それでテキストの「行末」が欲しかっただけだから、 それを1文字で表現したことは、そんなにおかしな話ではない。
398 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 10:46:45 ] CP/Mの呪縛? EOFとかCR/LFとか
399 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 11:10:10 ] read() より下のレイヤであれこれやる Windows が変、ってことで
400 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 12:31:57 ] >>394 統一しる!までは思わんがw どっちかというと、UNIXとかの人にバイナリで読む時とかちゃんと、"rb" つけてくれ!頼む!って感じ。 いろんなソースいじっていると本当にそう思うw
401 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 12:33:07 ] なーーんか、そろそろRuby本スレみたいな雰囲気で 初心者さんが質問しにくくなってきている気がするので移動しませんか?w
402 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 17:10:17 ] s = "s = 'abcde'"; p s; eval(s); p s を実行すると↓のようになります。 "s = 'abcde'" "abcde" eval の中の変数をローカルにするには、eval(s) の代わりに eval("def tmpfunc() #{s} end; tmpfunc") などとするしかないでしょうか? 関数持ちだすのもなんかアレな気がして…
403 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 17:20:59 ] sandbox_binding = (class << Object.new; binding() ; end) s = "s = 'abcde'" p s # => "s = 'abcde'" eval(s, sandbox_binding) p s # => "s = 'abcde'" なんか汚してもいいBindingでevalするのはどうでしょう
404 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 09:05:04 ] >>403 > class << Object.new こんな書き方できるんだ... 「class <<」の右側って任意の式がかけるの?
405 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 11:37:07 ] ただの特異クラス定義だから、任意の式というか、メソッドを追加したいオブジェクトを返すものを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
406 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 17:43:46 ] gemsのライブラリ見ると、シングルトンでこれ使ってるの多いな module HogeModule class << self; def application @application ||= HogeModule::Application.new @application end def application=(app) @applicaiont = app end end end で、 HogeModule.application.run みたいな感じで使う
407 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 17:44:23 ] > class << self; class << self
408 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 20:29:39 ] 初心者の質問じゃないですけど、いいですか? 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の特異メソッドを定義するという説明になるかと思いますが、 両者はまったく同一のことを行っているという解釈でいいでしょうか。
409 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 20:36:41 ] ☆ チン ☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ヽ ___\(\・∀・)< 初心者の質問じゃない質問まだー? \_/⊂ ⊂_)_ \____________ / ̄ ̄ ̄ ̄ ̄ ̄ ̄/| |  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| :| | .|/
410 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 20:36:43 ] いいです
411 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 21:39:55 ] 厳密に言うと class Foo class Bar def hello; puts "hello"; end end end と class Foo; end class Foo::Bar def hello; puts "hello"; end end くらいは違う。
412 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 22:38:52 ] 両者の違いが問題になるようなクラス設計をしてはいけないな
413 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 02:30:36 ] >>411 の上と下って具体的にどう違うの?
414 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 11:48:06 ] 最近、Rubyの勉強を始めた者です。 先週、RubyのMLに登録し「Welcome to our ruby mailing list」のメールも届いたのですが、 その後メールが1件も届きません。ひょっとしてRubyのMLって、コマンドをサーバーに送って 取得しないといけないのでしょうか?それとも、さらに何か手順を踏まないとメールが 届かないのでしょうか?メールに記載されている説明には、過去の投稿が欲しいなら サーバーにコマンドを送れ、とは書かれているのですが・・・
415 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 11:57:01 ] RubyのML、じゃどれかわからん。 MLによっては単に流量が少ないだけということもある。 本来流れているはずのメールが届いてないというなら、そのWelcomeメールに書いてある問い合わせ先に質問メールを投げればいい。
416 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 12:00:10 ] ruby-ext と ruby-math、非公式の rubyist ML は投稿がないな 正直なとこ、ML は何か発言したい人向けだね 初心者さんはこのスレとかマニュアル独学とかしたほうがいいかも
417 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 12:09:57 ] >>415 ,416 素早いレス、ありがとうございます。 登録したのは「ruby-list」です。単に投稿が少ないだけなのか、 それとも自分が何かミスをしていて、メールが届かないのかが分からなかったもので。 とりあえず、MLの管理者に問い合せてみようと思います。
418 名前:デフォルトの名無しさん [2008/10/08(水) 12:27:55 ] ウインドウズでのrakeの実行が遅すぎる、どうにかならないのか?
419 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 12:42:41 ] >>418 まだCPUが1個なんですか? Rails開発者はデュアルコアとか普通ですよ?
420 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 13:22:04 ] gem update のメモリ超絶消費問題が長らく直らなかったくらいだしなあ メイン開発者たちのマシンでは一瞬あるいは2秒程度で終わってると考えるのが妥当だな あるいはWindowsのRuby使ってないとか
421 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 13:26:07 ] Windows使ってる人なんてハイスペックが当たり前で気にならないかもしれない
422 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 13:51:19 ] >>418 一応回答すると、WindowsのRubyスクリプトで処理開始までが馬鹿みたいに遅いのはどうにもならない これを改善する方法を見つけられたらRubyは広まると思うんだがというかWindowsで常用したい
423 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 13:55:23 ] Core2Duo使ってるレベルだったら遅さなんて感じないけどね
424 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 14:09:02 ] >>423 俺の環境はCore2Duoだが、体感できるぐらいには遅い
425 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 14:09:55 ] 同じマシンにLinuxとか入れて同じRubyスクリプトを実行するとほぼ一瞬なんだよねえ Cライブラリとかの違いの関係だと思うんだが、残念だな
426 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 14:18:53 ] WindowsでRubyってそんな遅いの? ならJRuby使っても気にならないんじゃね
427 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 14:24:38 ] >>424 そうなってくると、HDDとかにも問題があるんじゃない?
428 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 14:27:56 ] VistaはVistaで遅い
429 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 14:46:30 ] 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 だそうな
430 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 15:04:16 ] 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でこれだったぞい?
431 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 15:04:51 ] そりゃキャッシュに乗ってるかどうかで全然違うよ
432 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 15:10:08 ] >>429 どうもその人だけみたいな感じだね いろいろな要素が絡み合って遅くなってるのかな
433 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 15:19:17 ] >>430 それはCPUが充分速い >>429 はPentium3だぞ
434 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 15:22:24 ] >>432 「Windows Ruby 遅い」でぐぐるといくつか症例がある模様 ttp://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=Windows+Ruby+%E9%81%85%E3%81%84&num=50 まあ、2GHzくらいあれば気にならないのだろう あるいは、「CPUが遅い=OSがWin2000とか」だとかいうのの何かが関連してるのかも
435 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 15:26:11 ] >>433 424みたいのがいるから、CPUの問題じゃなく、遅くなる何かがあるんじゃないか?
436 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 15:30:25 ] 全員が遅いなら、それこそ「WindowsのRubyは遅くて使えねえ」という大合唱になってるはずだしな 大丈夫な人と大丈夫でない人がいる程度には、ポピュラーな別の原因があるんだろう
437 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 15:38:24 ] VistaだったらWindows defenderの影響とか
438 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 17:53:12 ] >>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 mailto:sage [2008/10/08(水) 18:47:36 ] 書き忘れてたけど、遅くなるのは基本的に初回起動(キャッシュされてない状態)のとき キャッシュ無しの状態でrake打つと、だいたい3〜5秒ぐらいかかる 二回目以降は0.1秒くらいしかかからない (WindowsXP Core2Duo 1.86GHz メモリ1024MB ruby-mswin32)
440 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 19:24:07 ] rakeとか言われても何も比較できない
441 名前:デフォルトの名無しさん mailto:sage [2008/10/08(水) 21:30:31 ] 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バブルははじけるだろうな。もうはじけている予感はあるが... マーケティング戦略に踊らされたやつの負けー
444 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 01:41:46 ] 根本的にいろいろ勘違いしてるな
445 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 04:54:55 ] 勘違いしているというより、railsを叩くストーリーを語りたかったんだろう。 「この物語はフィクションです。実在の人物・団体・CPU・プログラミング言語とは 一切関係ありません」
446 名前:デフォルトの名無しさん [2008/10/09(木) 08:09:36 ] Rubyが遅いのはもうすでにだれもが知っている事 耐えられないならJRubyを使えば速くなる
447 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 08:28:26 ] JRubyの方が速いのは事実だが、 RailsをJRubyで動かすとCRubyより遅くなる。
448 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 08:32:02 ] 結局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その後徐々に金利が上がるローンと似ている。
451 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 10:29:10 ] Railsの「生産性」を叩いてる人はVBAで納品される受注プロダクトもあるということを聞いたら卒倒するんだろうなと思ってる なんでソフトウェアの全部が全部銀行並みの規模でクオリティでなければならんのん?
452 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 10:59:38 ] なんでWindows上でRailsを実行させないといけないのかがそもそも理解できないわけだが。
453 名前:デフォルトの名無しさん [2008/10/09(木) 11:14:20 ] >>452 開発環境の事を言っているんだろ rakeは本番稼動では使わないからなー Rails信者はMac信者という事だろう しかしほとんどは最近Mac信者になったやつらだろうが
454 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 11:33:24 ] Windows → クライアントサイドアプリケーション以外ヘボい PC-UNIX系 → サーバサイドプログラム以外ヘボい MacOSX → どっちも不可もなく見掛けが気持ちよい という単なる選択の収斂の結果に過ぎない WinでPC-UNIX系プログラムがきちんと動けばWindowsを使うって あるいはクライアント環境がもっさりでなければPC-UNIXを常用する WindowsをクライアントにしてUNIX系OSにログインするというのが最強ではあるが、それだとメンテ対象が2つになるんだよね
455 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 11:50:30 ] WindowsやLinuxとかを我慢して使ってる人のほうがよっぽど信者だと思う…
456 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 12:14:08 ] 質問だよ 適宜更新される200字くらいの説明文が常に200個くらいあって、 それらに特定の日本語群(更新は稀で候補100個くらい)が含まれてるかどうかチェックしたいんだ スレ全部読み込んで、注目したい語を含むレスがあるかどうか調べて抜き出す、みたいなノリだと思ってくださいな どうするのが速くて妥当かなあ? 検索語100個の正規表現100個を200文全部に適用する? 2万回正規表現起動?
457 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 12:20:30 ] 数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
459 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 12:47:53 ] 候補や説明文がよほど膨大なら、 Karp-Rabin法も考えられるかもしれんが・・・・・まあその程度なら
460 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 12:52:25 ] yieldはなんだかんだ言って遅いから 語群を|でつなげた正規表現200回起動がよさそうに思う ブロック使わずにif文ずらずら並べるならわからんけど
461 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 12:53:39 ] 個人的用途を除くと、イメージ的には Macはデザイン、クリエイター、 Linuxは学術用 UNIXはサーバー Windowsはビジネスその他って感じだな
462 名前:デフォルトの名無しさん [2008/10/09(木) 13:10:44 ] Ruby/Tkで EntryウィジェットやTextウィジェット上でドラッグすると フリーズします。原因として考えられることは何でしょうか?
463 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 13:18:57 ] ドラッグしたときの動作をプログラムしてないからじゃね
464 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 13:20:10 ] 語群があまり変わらないという話だから、俺も>>460 に賛成
465 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 13:22:01 ] >>456 正規表現でやるならRegexp.unionっていうのがあるよー
466 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 13:22:15 ] 学術的なウンタラカンタラならともかく、業務サポートかカジュアルな用途だろうしな(いやわからんが)
467 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 13:28:13 ] 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 ] Ruby用の高速HTTPライブラリ/サーバMongrelの作者もあきれているようだ。 ttp://slashdot.jp/articles/08/01/02/0046222.shtml より抜粋 。 Ruby on Railsに関わる人々の技術力の低さや閉鎖性、また「どいつもこいつもRoRでアホなソーシャルネットワークを作って商売にしたがる」風潮に愛想が尽きたとのことで、今後はRubyから手を引き、PythonやFactor、Luaに軸足を移すそうだ。
469 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 13:31:22 ] はいはい初心者スレだよここは
470 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 13:35:36 ] >>468 Javaを知らないからそんなことになる Javaを知ってればRoRはJavaで負けたスーツ連中が持ち上げてるだけだと早々に気づけたろうに いい社会勉強になったことだろう
471 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 13:36:44 ] >>467 動くよそりゃw inspectがごちゃごちゃするのには確かに同意するが
472 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 13:41:02 ] >>468 みんな、そこはもう大分前にとおりすぎたのだがwww
473 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 13:41:51 ] そもそも ?-mix: って何よマニュアルに書いとけよって感じではある > Regexp.union
474 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 13:42:54 ] >>468 あとZed Shawの記事はネタなので釣られないようにな。 単体の記事で見ると本当にそう思っているのかと思うもんだよ。 よくはてなブックマークとかでたくさんブックマークされている、煽り気味のエントリーとか 他の記事よむとネタじゃんってすぐにわかる、みたいなの
475 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 13:43:20 ] Rubyしか知らないと悲惨なのにはこっそり同意しておく
476 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 13:46:23 ] CとJavaとPerlとPHPとPythonとSchemeはオレオレライブラリを作れる程度には齧っておいたほうがいい …多いな
477 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 13:48:55 ] PerlとPHPは真っ先に除外できるな
478 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 13:53:31 ] >>477 は何もわかってない キャッチセールに真っ先に引っかかるタイプ
479 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 13:59:54 ] アレな方々が流入してくるとすぐスレがおかしくなるな
480 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 14:02:47 ] PerlやPHPを知らないっていうのは一番悲惨なパターンのRubyユーザーなのでは…
481 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 16:01:00 ] PerlやPHPを生半可に知ってる方が、変にRubyに入れ込んじゃって不幸になる気もする。
482 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 16:29:26 ] Rubyって何に適してる言語なの?
483 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 16:53:30 ] >>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でまともに使えなければこれ以上流行はしないだろう。
485 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 17:14:11 ] RailsはRubyのヘビーユーザーが適当に活用して小ぶりなアプリケーションを連続生産するのに向いている RailsのためにRubyを学ぶような人や、Railsのソースを読んでも何してるかさっぱりわからんような人が使ってもどうにもならんな という魔術師(志向)の人向けのフレームワークだったはずなんだが、当初からそのはずだったんだが、誰が捻じ曲げたのやら…
486 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 17:14:19 ] すごい初歩的な質問していい? ゲーム作ってみたいと思って、つい最近Ruby始めたんだけど。 講座HPみたいなところで、Ruby/SDLでつくったスクリプトをexeファイルにしても、 Ruby/SDLのdllファイルが全部同じディレクトリにはいってないと動作しないって書いてあったんだけど、 てことは作ったゲーム配布するときはdllファイルも全部つけて配布しなきゃいけないってこと?
487 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 17:19:27 ] >>484 MacOSXでRubyを使うことに決めた人は、もともとPC-UNIX上でRuby使い倒してたような人が多い そういう人の使うRoRは、その人のプロダクト作成に非常に役立つものになると思うよ >>486 Exerbでひとつにまとめることが…DLLはできないのかな というか、DLLは普通実行ファイルと一緒に配布するもんなんじゃね あとRubyでゲーム作るのはマゾさんのすることなんだけど、あなたはマゾですか?
488 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 17:22:03 ] >>484 Railsを擁護する気は全くないけれど 一応、IDEを使ってRailsの開発することはできるよ(EclipseとAptana) >>486 その通り >>487 俺は自分のことをSだと思ってたが、本当はMだったのか
489 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 17:41:03 ] www.domo2.net/search/search.cgi?word=ruby&tnum=50&sort=res+desc
490 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 17:45:19 ] >>487 >>488 回答ありがとうございますm(__)m 一緒に配布するんですか〜。16個くらいあったんでまとめられれば見栄えがいいんだけど。 Rubyはゲームに向いてないですか; 大学の講義でRubyを軽く使うらしいから、ついでにと思って始めたんだけど・・ Rubyはわかりやすいって評判ですけど、Rubyでプログラミングに慣れてからC言語勉強した場合、 共通点が多くてサクサク覚えられますか?それとも違いが大きくて効率悪いですか?
491 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 17:49:36 ] >>490 人によるんじゃないかな 共通してる部分も確かにあるけど 片方をしっかり身に着けない内に他に手を出すと ごっちゃになって混乱しそう
492 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 17:49:46 ] C言語を使って便利な機能を便利な概念でまとめたのがRubyだ
493 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 17:54:36 ] >>491 >>492 回答ありがとうございます。 ある程度身につくまでRubyで頑張ってみて、限界感じたらC言語勉強することにします〜
494 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 18:02:07 ] C→Rubyは曖昧さを感じて戸惑う Ruby→Cは堅苦しさ、面倒くささを感じる
495 名前:デフォルトの名無しさん [2008/10/09(木) 18:07:31 ] >>490 >>491 >>492 >>493 CとRubyはまったく用途が違うだろう。無理に使う事ができるけどね。 Cを勉強するならC++じゃないか。 Rubyでゲームか? 話にならない。 ゲーム開発している人間に聞いてみな。笑われるだけだ。 後々の資産として、C++を先に勉強したほうが得だと思うよ。
496 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 18:24:53 ] またC++厨が… C++を学ぶのとCを学ぶのでは意義が違うと何度言えば
497 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 18:26:11 ] そろそろスレタイ嫁
498 名前:デフォルトの名無しさん [2008/10/09(木) 18:30:38 ] >>496 説明してみぞ
499 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 18:34:39 ] うぜぇ
500 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 18:37:16 ] こういう香ばしい人って、なんでみんなageるんだろうね
501 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 18:45:48 ] >>484 ,488 業務でAptana使ってるが、コード補完はやはりイマイチ。 候補が無駄に多いうえに欲しいのが出てこなかったりする。 特に、ハッシュで引数与える関数は全滅だ。 この辺はNetBeansも大差ない。 abbrevのあるemacs系の方がまだ使える。 Eclipse + JDT で幸せなJava開発環境を味わってる人には物足りないだろう。
502 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 19:29:58 ] Rubyと共に使うなら純Cだろうね。 C++はそれ単体で使うもの。 ゲーム作りならC++オンリーがパフォーマンス的に一番だろうなあ。 ただ、Rubyでも処理速度がさほど求められないならゲームに一応使えると思うが ゲーム用のライブラリはCかC++だろうしなあ。 一応、RPGツクールはRuby使えるのもある。
503 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 20:03:58 ] >>502 Ruby/SDLでだいたい満足してたから、他のゲーム用ライブラリ触ったことないんだが CやC++にはそんなに良いライブラリがあるのか?
504 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 21:45:12 ] とりあえず、SDLはC/C++でも普通に使える。
505 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 10:57:55 ] >>503 SDL
506 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 18:18:11 ] わざわざCからSDL使わなくても、Ruby/SDLでよくね 性能が要求されるなら直接DirectX使うべきだし
507 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 18:27:06 ] ゲームってのはけっこうハイレベルな感じに常時性能が要求されるもんだと思ってたが違うのか?
508 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 18:29:11 ] ゲームによるよ 3Dでエフェクトも激しいアクションゲームなんかは大変だけど そうじゃないゲームもたくさんある
509 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 18:36:43 ] 専用スレがあるんだからそっちでやればよくね?
510 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 18:47:04 ] >>508 マジレスするとそうでもない 画像表示してブラーかけてるだけのADVなのにDirect9c対応グラフィックボード要求するとかもうアホかと
511 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 18:55:54 ] 「DirectGraphicsの初期化に失敗しました」は昨今けっこう有名なメッセージだと思う
512 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 19:29:48 ] 誘導: 【Ruby/SDL他】Rubyでゲーム制作・総合スレッド pc11.2ch.net/test/read.cgi/gamedev/1207069887/
513 名前:デフォルトの名無しさん mailto:sage [2008/10/10(金) 20:31:46 ] >>510 それはその例がそういうゲームってだけだろ
514 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 10:27:03 ] 玉金破裂ゲーム
515 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 15:25:43 ] Arrayを継承したクラスのオブジェクト.find_all{|e| e.cond?} がArrayを継承したクラスのオブジェクトに自動でならないことにほんのりがっかりした
516 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 15:30:32 ] >>515 gem のライブラリで時々見るな、そういう中途半端実装 そこはレシーバのコレクションクラスのオブジェクトを作って返せと…なんのための独自配列なのかと…
517 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 16:00:49 ] >>515 find_all は Array じゃなくて Enumerable のメソッドだから 実際のところ自分のクラスは関係ない
518 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 21:09:09 ] Arrayは継承するな…とcompositionを使えと
519 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 21:59:40 ] Arrayを継承するってどういうシチュエーションなんだ??
520 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 22:08:31 ] なんで継承を毛嫌いするかね
521 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 22:09:37 ] いらんメソッドが付いてくるから
522 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 22:13:23 ] アホすぎて笑えない
523 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 22:13:39 ] 継承は怖い
524 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 22:18:59 ] >>520 作るのは簡単だが使うときに面倒 あと作り直すときにも面倒
525 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 22:20:50 ] すごいとこまできてるねRubyistはw
526 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 22:21:13 ] >>515 ハッシュからハッシュを返すselectやmapはたまに欲しくなる
527 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 22:22:01 ] カンペキに活用した継承は非常に強力だが、ほとんどの継承はそうではない っていうか、組み込みクラスは継承しないで委譲しろ、継承は自作クラス間でどんどんやれ
528 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 22:23:05 ] 本当にアホばかりで嫌になる
529 名前:デフォルトの名無しさん mailto:sage [2008/10/11(土) 22:24:49 ] ライブラリを書くくらいに使ってる人がいないってだけ
530 名前:デフォルトの名無しさん [2008/10/12(日) 10:56:19 ] Integerのaとbのobject_idを常に同じにする方法ってありますか? a.object_id = b.object_id みたいなことがやりたいんですが
531 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 11:51:41 ] >>530 object_id を同じにしたい理由が良くわからんが… 普通に代入すれば同じになるでしょ。 今の実装では Fixnum の場合は即値だから必ず同じ値になるんじゃないかな。
532 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 12:05:34 ] >>530 できませんという答が妥当な気がする >>531 の言うように、Ruby の整数の数値の値とオブジェクトIDは紐付けられてる 整数の 1 のオブジェクト ID は常に一定だ
533 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 13:33:03 ] >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が定義しやすいなと
535 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 15:39:09 ] >>534 なぜそうなってしまうのかわからない。 スキーマはどうなってるの?
536 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 16:27:25 ] >>534 ごめん その話聞いても,idとa_idを同じオブジェクトIDにしたい理由がわかんないわ それにそもそも代入やFixnumみたいなやつ以外で同じオブジェクトIDになることない気がする なにか勘違いしてるんじゃ…
537 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 16:47:40 ] そんなことできたらそれはIDって言わないんじゃないの
538 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 16:56:36 ] 要するに,例えばaとbっていう変数があったときに b.object_id = a.object_id としておけば a = 10 としたときに,bも自動的に10になってくれませんか? っていう話でしょ object_idはそんな用途に使えません
539 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 17:01:37 ] >>538 すげー よく検討ついたな
540 名前:デフォルトの名無しさん [2008/10/12(日) 17:54:01 ] >> 538 その通りです 分かりにくい説明で申し訳ないです 用は参照を使いたかったんですが。。
541 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 18:32:47 ] なんかa_idって名前が気になるな すっげー憶測だけど、Bはインスタンス変数でAを持つのが素直な設計だったりしない? それならB#save!で@a.save!するだけで済むから楽なんだけど
542 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 18:38:16 ] >>538 おまえ、ほんとエスパーだな。 おれはさっぱり読み解けなかった。
543 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 19:03:44 ] >>534 railsというかActiveSupportはそういう関連づけを自動化してくれなかったっけ? あるいは>>541 のようにしてB#a_idは@a.idを返すようにするとか。
544 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 20:48:21 ] >540は自分の頭にあるオブジェクトのイメージをER図やクラス図で さらっと描きだせるくらいのレベルになるまでARを封印すべきだ。 もし仕事でやってるなら合掌。
545 名前:デフォルトの名無しさん [2008/10/12(日) 21:00:36 ] >>541 , 543 確かにModelはそんな感じの設計です。 @a.b = @b で関連付けて、 @a.save! とすればbも入るってことですよね。 ただ、viewに2つのmodelを分けて書くのが面倒だったので、調べているとActivePresenterなるpluginを発見し (ttp://jamesgolick.com/2008/7/28/introducing-activepresenter-the-presenter-library-you-already-know) 利用してみたところ、さきほどの参照のようなことをしたいなと思った次第です。 このpluginは2つのModelを結合してくれるもので、 @ab = AB.new(params[:ab]) @ab.save で、AもBもsaveできちゃうよということでした。 ただ、DBの保存時に決定される@ab.a_idと@ab.b_a_idが関連づかずに困っていたというわけです。 あまり、plugin自体には手を入れてくなかったので、 @ab.a_idと@ab.b_a_idが同じだよということができれば良いなということでした。
546 名前:デフォルトの名無しさん mailto:sage [2008/10/12(日) 23:11:18 ] プライマリキーの値を変更するな、テーブルの設計からやり直せ
547 名前:デフォルトの名無しさん [2008/10/12(日) 23:24:26 ] >>545 自己レスです とりあえず、参照は素直にはできないということは分かりました。 ありがとうございました。 もう少し試行錯誤して、無理なら普通のARにしてみます。
548 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 01:37:23 ] >>544 初心者として気になるんだけど そのレベルになるまではどんな感じやるのが上達する?
549 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 01:44:19 ] >>548 1週間に3日書く 今週はRubyスクリプト書いたり改良の試行錯誤が無かったなあという週が無いという状態にする 制御構造覚えたらマニュアル見つつたまに使う程度のカジュアルさでももちろん一向に構わないが、 その場合はRubyが上達することはないだろうし、上達するほど頑張る理由もそもそも無いことだろう
550 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 01:56:31 ] Rubyのクラス分けやモジュール分けはてきとーで良いということがわかった頃から スクリプト作るの早くなったような気がする 今でも特異メソッドとかわからんが インスタンスメソッドとクラスメソッドしか作ってない Proc はライブラリで要求されないと作らない yield は使う機会が無いのでわけがわからない
551 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 06:21:15 ] yield は each 作ったりしたらすぐ覚える
552 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 06:31:29 ] おれはテストを書く気が全く起こらないんだよなあ… 少しづつでも書けばいいんだろうけど つまらないから全く続かない…
553 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 07:56:06 ] どう考えても テストを書くのに悩む時間 >> 変なバグで悩む時間 なのでテストを書く理由がない俺 他人様に提供するライブラリ書くんじゃない限り要らないもんだと割り切ってる 書き方指南がないということは本当はみんな不要だと思ってる証拠
554 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 08:32:04 ] >>553 書き方指南いろいろあるじゃん 本にもwebページにも 俺も有用であるという自信はないが
555 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 08:43:49 ] テスト書くためのスクリプトでテスト書く説明するだけだしなあ お前そんなスクリプトなんて普段絶対書かないだろ、というのが多々…(特にテスト駆動)
556 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 08:54:11 ] スクリプト序盤から中盤での書き方がよくわからないのがテスト駆動の特徴 というかMockとかあのへんを理解しないと関数的スクリプトのテストしかできん
557 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 09:23:47 ] 色々書き方の作法もあるけど、むしろ形式に捕らわれず自由にテスト書くようにしたら それはそれで楽める部分もあると思う。
558 名前:デフォルトの名無しさん [2008/10/13(月) 09:42:39 ] 俺はテスト書かなくて困るのってリリース後なんだよなぁ。 デグレ出るたびに書いときゃよかったって思う。
559 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 10:07:10 ] ちゃんとテストが書けるようになったら、もう上級者だよ。 つまり上級者になるためには、テストがきちんと書けるようにならないといけない。 おれはまだうまく書けないんだけどな。 UIのテストなんか、どうしたらいいのかさっぱりだ。
560 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 10:36:29 ] 他人様のライブラリのgitのtestディレクトリとか眺めてるとよくわかる 本文コードの追加変更に対してテストが異常に適当というか不足 時間かけてまでして作りたくないかどうすれば網羅するか考えるの面倒なんだろうな
561 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 14:01:54 ] テストなしでロジック修正とかコードの整理(リファクタリング)とか、 怖くてできない体になった。
562 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 15:01:22 ] ZenTest試用中。なかなか良さげ。 ttp://mono.kmc.gr.jp/~yhara/w/?ZenTestMemo ttp://zentest.rubyforge.org/ZenTest/files/README_txt.html gem install ZenTest でインストール。
563 名前:デフォルトの名無しさん [2008/10/13(月) 17:14:28 ] >>561 わかります
564 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 17:30:17 ] テスト書くとメソッド単位でしか検証できないからめんどくさい あと、GUIアプリのTestってどうやるの?
565 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 17:35:59 ] できない
566 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 17:55:46 ] 入力の自動化をすれば出来る。 が、チェック項目をリストにして人力でやったほうがなんぼかマシ。
567 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 18:30:55 ] RubyでGUIつーと、テスト以前に環境が貧弱だからのう。 WebならSeleniumとか。
568 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 18:32:59 ] >>564 自動でマウス動かしてクリックしたりフォーム埋めたりするよプログラムを併用する 稀にどうしても自動化できないところが出てくることがあり、そういうときは漏れのない操作一覧図を書いて手動
569 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 18:58:10 ] >>564 ビューとコントローラを極力分離すれば、ある程度までは機械的にテストできる
570 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 19:02:19 ] GUI自体をテストしたい場合は?
571 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 19:15:36 ] GUI自体のテストって具体的にどんなの?
572 名前:デフォルトの名無しさん mailto:sage [2008/10/13(月) 19:52:47 ] マウスクリックのタイミングとか
573 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 02:10:57 ] サブネットマスクにマッチするような判定って簡単に出来ますか? 例えば、 "192.168.0.45".in_mask?("192.168.0.0/24") # => true "192.168.0.45".in_mask?("192.168.0.0/29") # => false となってほしいのです。
574 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 02:15:25 ] 本質的にサブネットマスクはbitmaskだから ANDしてやればいい
575 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 03:03:18 ] >>573 IPAddr#include?
576 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 07:48:35 ] 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でも同様の結果でした。 これを回避する方法はないものでしょうか?
577 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 09:35:18 ] そろそろ解決してる頃だろうか >>576 require 'hoge' は カレントディレクトリの hoge.rb ファイルを読み込む rmagick.rb (大文字小文字問わず)という自作ファイルを改名しろ 「hoge ライブラリを試そうとして hoge.rb を作って実行し、次にまた別のスクリプトを作って変なエラーにはまる」というのは そろそろ FAQ にしてもいいと思う
578 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 09:46:44 ] >>577 ああ、まさにそれでした。 5時間くらい悩んでの書き込みだったので、今はRMagickのマニュアルを読んでました。 有難うございました。
579 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 20:24:43 ] 文字列中のすべての"\"を"\\"に、"'"を"\'"に置きかえたいときに gsubってものすごくつかいづらいんですけど、 なんか他にいい方法はありませんか?
580 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 21:00:31 ] str.gsub(/['\\]/){|s|"\\#{s}"} 十分簡潔に思うが、どの辺が使いづらく感じた?
581 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 21:19:06 ] str.gsub(/['"]/) { %Q|¥¥#{$&}| } あたりで手を打たないか?
582 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 21:19:40 ] 遅すぎたリロード
583 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 21:42:38 ] ブロック使わずに表現できないの?
584 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 21:45:41 ] str.gsub(/([\\'])/, "\\\\\\1") ・・・うん、ブロックのほうがいい。 >>579-580 後方参照使わずにgsub繰り返すっていう力押しをしてた人が ハマるパターンだろうね。
585 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 22:04:09 ] >>580 なるほど、ブロックを使えばいいんですね。 >十分簡潔に思うが、どの辺が使いづらく感じた? perl なら、 s/([\\'])/\\\1/; と、比較的直感的なところを >>584 のように"\\\\\\1"と書くとバックスラッシュが多くなりすぎて 後で読みにくいと思ったわけです。
586 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 22:06:36 ] おっと、 s/([\\'])/\\\1/g; でした。
587 名前:デフォルトの名無しさん mailto:sage [2008/10/14(火) 23:56:30 ] str.gsub(/[\\']/, /\\\&/.source)
588 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 00:44:09 ] Windows限定でいいんですけど、OSが32ビット版か64ビット版か調べる方法はあるでしょうか。 ENV["OS"]だと32bit版XPでも64bit版XPでも"Windows_NT"と表示されて区別が付きません。
589 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 00:51:21 ] Ruby関係ねえええ ENV['PROCESSOR_ARCHITECTURE'].include?('64') が true なら 64BitなCPUなのできっと 64Bit版Windows ttp://support.microsoft.com/kb/827218/
590 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 01:06:42 ] じゃあruby関係で ruby -e 'p RUBY_PLATFORM' 64bit環境を持ってないのでどんな出力がされるのかは知らんけど
591 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 01:10:11 ] RUBY_PLATFORMはコンパイル時に決まりそう
592 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 01:15:50 ] Fixnumを地道にカウントアップしていってBignumになる境界を見つける -> そこから推定 とかそういうアホを思いついた
593 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 01:21:56 ] 64bitのOSで32bitのバイナリ使ってたら無理じゃないか
594 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 02:22:11 ] WIN32 API の GetSystemInfo() とか呼んだら良さそうな気がする。 呼び方はあれ、dl 使うなり何なり工夫してくれと。
595 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 03:01:15 ] 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 にも登場していますが、特別そういう表示がないので 勝手に使っても差し支えないんでしょうか?
596 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 03:12:41 ] その程度の誰が書いても同じになるコードには 著作権が発生するほどの創作性はないよ。
597 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 06:11:16 ] 適当に書き換えればお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
598 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 06:42:47 ] >>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
599 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 07:08:01 ] CamelCaseキモすぎる
600 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 08:10:27 ] PascalCaseだね
601 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 08:20:52 ] LCCだろ さりとて、Windows の API にはハイフン区切りは似合わないのも事実
602 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 08:25:44 ] CamelCaseは力強さを感じる
603 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 12:36:20 ] MSは先頭大文字のCamelCase好きだよね クラス名でもないのに何故?と違和感を感じる
604 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 14:33:09 ] クラス名は許せるが、rubyでは_区切りとisPredicateではなくpredicate?を使ってほしい
605 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 15:06:15 ] >>604 >isPredicateではなくpredicate? 変数に?使えたっけ
606 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 15:17:48 ] 使えないよ。 けどpredicateってことは多分604はメソッド名のつもりで言ったんだと思う
607 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 17:14:47 ] 何気に attr_reader :hoge? って書けないんだよな
608 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 20:37:53 ] @hoge? がだめだからなぁ。 Module#attr_readerが再定義されていればその限りじゃないぜ 意義はないけど。
609 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 20:39:11 ] ?付きメソッドを定義したくなるのはよくあることなのに、attrで定義できないのがな・・・ 自分でattr_readerを拡張するか、rubyplusのboolattr使うと便利 つーかActiveSupport辺りにも入ってそうな気がする
610 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 21:32:47 ] ?付きメソッドを自分で定義すれば済むだけなので、漏れは必要ないかなあ。
611 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 21:48:34 ] >>610 メソッドごとに一つ一つ?付きを定義していくのって凄く面倒じゃね? 変更に弱くなるし
612 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 21:59:26 ] ?末尾のシンボルを渡されたら、メソッド名はそのままに 末尾削った変数にアクセスするっていうのも便利かもしらんね でも真偽値のアクセサが面倒になるほど多いっていうのも 設計見直せる可能性はない?
613 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:29:30 ] 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 こんなんとか。リフレクションを用いるほど多く使うんじゃなければ ちゃんと書いたほうがいいと思うけど
614 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:40:14 ] >>611 >>612 の言うように?付きメソッドをそんなに定義することあるかな?
615 名前:611 mailto:sage [2008/10/15(水) 22:43:31 ] >>612 >>614 4〜5つ程度の?付きメソッドでも、似たような定義を続けて書くことになるからかなり面倒だと俺は思う この辺は個人の意見もあるとは思うが
616 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 22:51:08 ] attr はあまり使わない メソッドはきちんと定義する
617 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:34:27 ] そもそも @hoge? ができないことに疑問を感じるんだが
618 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:45:48 ] だから ? つきはメソッドだっつーの述語だっつーの data= っていう変数が作れないのは不自然か? change! っていう変数が作れないのは不自然か?
619 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 23:56:18 ] @is_foo みたいな変数名をどれだけ見かけることか 変数名が述語になれないのはおかしい
620 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:08:25 ] @hoge? = 123 まず見た目がきもい そして三項演算子の文法と衝突しそう
621 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:08:33 ] 変数名が述語になるほうがおかしい飢餓す
622 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:12:41 ] @foop か @foo_p でいい
623 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:14:27 ] 「○○が二者択一のどちらかか、を格納する変数」というのはあまり Ruby っぽくない 二者択一の判断自体をメソッドで参照するのがフツーな気がする
624 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:32:23 ] >>620 そんなこと言ったらメソッド foo? がどんなオブジェクトも返すことのできる点もおかしくないかい?
625 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:36:58 ] 見た目がきもい、ってのはほんとに見たまんま、?で終わる識別子が左辺値にくるのが きもいってことだよ。 別に @hoge? = true ならいいってことじゃない
626 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:41:29 ] >>621 変数名とメソッド名の間で、言葉づかいの上でのセマンティックスが違っている「べき」なら、attr 系は廃止すべきってことになるな >>625 @hoge? = true なら悪くないと思うけど
627 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:46:06 ] やだよ。 メソッド名の慣習のせいで、「hogeっすか?」って訊いてるようなイメージがあるじゃん。>@hoge? で、「そうっすよ」とか「違いますよ」とか返事しようとしてるところに値突っ込むってのは変な感じだ。観念的な言い方でアレだが
628 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:50:34 ] 何も @hoge? があってもそう書かなきゃいけないわけじゃないから、? を使わない自由を奪っているわけではないでしょ。 それよりも、attr 系によって変数名とメソッド名を関連付ける機能が提供されているにもかかわらず、? 付のメソッドだけ特例でそれができないほうが一貫性に欠けて嫌だ。
629 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:54:28 ] >変数名とメソッド名を関連付ける機能 単なるメソッド。とあるリフレクションのラップなだけ。 >? 付のメソッドだけ特例でそれができない できないのはそこじゃなくて変数名に?を付けること。 でもってこっちは処理系本体の機能の話。 パーサとかに手を入れて?付き変数を許してまで@hoge?とか書きたいか?
630 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 00:58:26 ] そりゃ現状じゃ @hoge? が書けないようにパースしてるんだから、パーサを変えるしかないわな。 別に難しいことじゃない。 あと、attr_reader が処理系そのものが提供しているかどうかなんて関係ないじゃん。飽くまで意味論の話だし、built-inで入ってるんだから。
631 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 01:02:56 ] だって…再定義できるもの
632 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 01:06:57 ] >>627 メソッドvalueと変数@valueがあったとして、メソッドのほうは「valueは何か?」と問う意味なのに対して@valueはそのままの意味だよね? 同じようにhoge?がメッセージだと解釈されても、@hoge?までメッセージと解釈する必要はないのでは?
633 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 01:20:26 ] 変数名だからその通りなんだけど、あくまでイメージというか馴れや先入観の問題だよ。>@hoge?がメッセージっぽい また別の問題として、 変数名に?が付けられて、attr系もそんな名前を受け取るとすると hoge.foo? = true とか hoge.bar! = false とかが出て来る。後者なんて比較の否定と見間違う。 さらにいうと、?や!を許すとして、[]とか[]=とか@-は変数名に許す? 全部メソッド名としては有効なはずだよ。 attr_accessor :foo= -> foo.foo= = 123 こんなことになる
634 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 01:44:47 ] hoge.foo? = true はできてもいいと思う。 hoge.foo! = ってのはまあちょっとヘンだけど、attr系で ! つけたかったことないから、あってもなくてもいいや。 [] や = が「メソッドの一部である」というのは別の側面で筋を通すための論法であって必ずしも名前の一部ではないので (その証拠にメソッド「foo=」は、「foo.foo = 」のようにスペースを入れることができる)、 attr_accessor :foo= 等はなくてもよいかと。
635 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 01:55:24 ] >その証拠にメソッド「foo=」は、「foo.foo = 」のようにスペースを入れることができる いやいや、メソッド名はあくまで「foo=」だよ。__send__(:foo=, 123)とか出来る。 パーサが頑張って「foo.foo = value」を「foo.foo=(value)」と同じような扱いにしてくれているだけで。
636 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 06:05:11 ] 隔離スレでやれ
637 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 09:41:53 ] 本スレが隔離スレってのも難儀な話だよなあ
638 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 07:15:54 ] RDEのツールバーとコンソール窓の設定などが上手く動作してくれません ツールバーを移動して1段にまとめたりしても、RDEを最起動すると別の位置へ 勝手に移動した状態になってしまいます コンソール窓は、フォントの設定が初期値に戻ってしまうのと、 ctrl+alt+cで開閉したりができません コンソール窓のフォント設定だけは致命的なんで、そこだけでもなんとかできればと
639 名前:638 mailto:sage [2008/10/21(火) 07:27:47 ] 一応環境も ActiveScriptRuby 1.8.7(p72) Windows XP SP3 です
640 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 14:20:14 ] ツールバーの問題は俺の環境(XP)では何年も前からあるよ。
641 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 15:51:59 ] てかRDE薦めてるサイトでもあるのか? 俺なら間違ってもRDEなんて使わせないんだが
642 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 15:56:44 ] 統合環境使わせるなら EclipseかNetBeansあたりじゃね?
643 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 15:58:04 ] 本筋以外での障壁が大きいからねえ… 「我慢して使う」時点で何か間違っとる 素直にエディタとプロンプトをAlt+Tabで切り替えて使うほうがマシ
644 名前:638 mailto:sage [2008/10/21(火) 17:13:53 ] コンソール窓のフォント設定は自分のミスでした コンソール窓で右クリして「設定」からフォントを設定していたのですが、 直ぐ上に「フォント」というのがありました… 見逃してました >>640 どもです ツールバーはしょうがないみたいですね >>641-643 どもです winの人がrubyを始めようと思うと、RDEがまず最初に目に入るような気がします NetBeansはDLしてあったのですが、JAVAが云々…とまたやることが増えそうなので 後回しになってました とりあえず簡単なプログラムを書いて試したかったので、RDEをという感じで 日常はEmEditorのフリー版(かなり古い)を使っていたので、それでやればよかったのですが コマンド操作には不慣れなwin人なんで、お手軽(そう)なRDEから初めてみようと思い 初心者〜中級者?への道筋がすっぽり抜けてる感じがしていて先行き不安ですが 書いて直ぐ実行できるのはやっぱり楽しいし勉強になります
645 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 18:04:59 ] RDEはirbと似たような感じでSandBoxとしてしか使わないなぁ。 ファイルに保存はしなきゃならんけど、EmEditorも言語モード別のキー設定と、 外部プログラムのを実行して標準出力を下窓に出す機能が(少なくともVer6からには) 備わってるから、キー1発で実行はできるよ。
646 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 18:48:59 ] RDEはいろいろなところで紹介されてるから、知名度はかなり高いし 動作はけっこう軽くて多機能、日本語対応と利点は多い が、不安定さ(特に文字コード関連)とレジストリ使用がそれらの魅力を帳消しにしている
647 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 19:42:48 ] RDEを普段使ってない人がファーストインプレッションあるいは又聞きで薦めてんじゃないかと思ってる 普段から使っていれば、少なくとも初心者には勧めようとは思えないはずだ 単一言語用だからといってIDE作成が簡単になるわけではない 1種類の言語にしか対応しなくても、10種類の言語に対応してても、IDEとしての作り方は同じだと思う Rubyに特化すればIDEが俺でも作れそうとか最初に思った人は罪深いなと思ってみる
648 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 19:58:42 ] FreeRIDEが日本語や他の文字コードに対応してくれれば無敵なんだが
649 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 22:52:51 ] rubyの表記法の質問なのですが、 Test::Sample のように書かれていたら、TestとSampleはともにクラスでTestがSampleの親クラス という認識で合ってますか? ::という記号は定数やクラス変数なども表すとネットで見たのですが 区別は付くのでしょうか?
650 名前:デフォルトの名無しさん mailto:sage [2008/10/21(火) 23:13:36 ] :: は 「の」 だ Test::Sample は Test 「の」 Sample だ それ以上の意味はないよ クラスかどうかは普通に識別子で判断する 先頭が大文字なら定数かクラス 先頭が小文字かアンダースコアならメソッド ただ、あからさまに面倒なのでメソッドを :: で繋ぐことはRubyでは意図的にしない (他の言語での書き方をしないと死ぬ人が稀に使う)
651 名前:649 mailto:sage [2008/10/22(水) 00:09:42 ] >>650 ありがとうございます。 そんな曖昧なものだったんですね。メソッドは#でしたっけ? この業界っていやに自己主張強い人が多いから統一できないのかな
652 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 07:50:20 ] RDEってRubyのサンプルプログラムとして付いているもんだと思ってた・・・
653 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 09:30:08 ] >>651 スクリプト上での表記とマニュアルでの表記は違う …違ってちゃいけないと思うんだが、まあ、 「○○クラスのインスタンスメソッド××を…」と書く代わりに「○○#××を…」と 「○○クラスのクラスメソッド××を…」と書く代わりに「○○.××を…」と 「○○クラスの定数××を…」と書く代わりに「○○::××を…」と書けたほうが 一度理解してしまえば便利ではある
654 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 18:04:18 ] >>653 > スクリプト上での表記とマニュアルでの表記は違う > > …違ってちゃいけないと思うんだが、まあ、 とはいえ、あるクラスのインスタンスメソッドというのは、直接コード上には 現れないから、そもそも同じ表記にはしようがない。 いちいち X.new.m とか書くのもめんどくさいだろ。
655 名前:デフォルトの名無しさん mailto:sage [2008/10/22(水) 20:22:05 ] >>650 Test::Sample だったら普通はmoduleかclassがネストされてるやつじゃね?
656 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 09:59:06 ] >649 ::で示されるのは主に ・モジュール内クラス ・クラス内クラス ・モジュール内モジュール ・クラス内モジュール ・モジュールの持つ定数 ・クラスの持つ定数 などであって、クラス間の親子関係ではない。 どちらかと言えば所有、もしくは所属の関係。
657 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 17:43:37 ] Windowsなら、既に更新停止状態だがJmEditorでぜんぜんいける。 コマンドライン登録しとけば、キー一発で実行できるし、プロンプト 勝手に閉じてほしくないなら、ruby.exe実行してからpauseするバッチ ファイル登録すればいい。
658 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 18:56:51 ] まさかJmEditor使いが俺の他にもいたとは 動作軽いしUSBで運べるし、便利だよね
659 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 22:50:55 ] irb とかでいっつも忘れるんだけど、NKF.guess の返り値の数字と文字エンコード名の関係ってどっかに書いてないかな?
660 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 22:57:18 ] NKF.constants.map{|s|[NKF.const_get(s),s]} こんな感じで出せばいいんじゃないか?
661 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 23:42:46 ] refeで引いてみたら出てるかと思ったが $ refe NKF.guess require 'nkf' NKF.guess --- guess(str) 文字列 str の漢字コードを判別して返します。 返される値は、NKF モジュールのモジュール定数です(下記参照)。 ruby 1.8.2 より前は現在の NKF.guess1 と同じものです。 ruby 1.8.2 以降では NKF.guess2 と同じものです。 下記参照て言われても、下記がない・・・
662 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 08:30:26 ] .chmもちあるけば解決するお
663 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 09:07:06 ] >>659 あれは inspect で文字列が出るべきだと思う
664 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 09:07:51 ] >>662 書いてねえって
665 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 10:01:53 ] >>664 キーワード:NKF.guess(str) (nkf) でとんだページの下に定数が書いてあるけど・・・
666 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 11:02:43 ] > NKF.guess の返り値の数字と文字エンコード名の関係
667 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 23:52:29 ] ああ、そりゃソース嫁としかw
668 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 13:34:31 ] >>656 じゃあクラスの継承はどうやって表すの?
669 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 13:55:39 ] 「表しようがない」が正解かと 「XXXを継承したYYY」のように文章で書くしかないな
670 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 23:39:57 ] 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 ↓に続く
671 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 23:40:47 ] 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"などもググって見ましたがダメでした。 よろしくお願いします。
672 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 11:07:36 ] >>670-671 Excel.Application ペースト でググるんだ Win32OLEの情報を探すときはRubyに限定しないほうが良い 俺excel持ってないから動作検証できないけどごめんね
673 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 12:43:20 ] 関係ないけど gemで入れられる excel用のライブラリ見つけたぜ spreadsheet-0.6.1.5 Documentation spreadsheet.rubyforge.org/
674 名前:670-671 mailto:sage [2008/10/26(日) 17:37:00 ] >>672-673 ありがとうございます。解決しました。 原因は貼り付ける際に列で指定していたからダメだったようで、 貼り付ける先頭セルの値をRangeで受け渡したらうまく行きました。 また上のプログラムだとちゃんと保存できないのも注意です。 開き方の問題なのか読み取り専用になっているようです。 名前を付けて保存するようにしたらちゃんと保存されました。
675 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 19:29:35 ] 掲示板スクリプトを作ってるんだけど、動かない。 どこがおかしいのかな。 使っているサーバー @pages (www4サーバー) 一応誘導を受けて来たので誘導元 □規制解除要望□ dion.ne.jp専用 Part727 ex24.2ch.net/test/read.cgi/accuse/1224841217/ スクリプトはここからダウンロードして www4.atpages.jp/mh35jp/bbsmake.html
676 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 19:33:52 ] 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 mailto:sage [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 mailto:sage [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
679 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 19:44:37 ] >>675 いきなり自作CGIをレンタルサーバーで動かすとか正気の沙汰ではないぞ httpdのエラーログをみよう。 いやその前に、まずは、WindowsならばXAMPPでも入れてローカル環境で試そう、な
680 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 19:54:27 ] >>679 一応ローカルで実験はした。 方法 1.irbを起動する 2.環境変数を設定 3.systemコマンドで実行 結果 とりあえず動いた だからアップロードしたわけだが。
681 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 19:58:41 ] 結論: ・ 馬鹿にCGIを渡すな
682 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 20:02:38 ] >>681 一応Apacheをインストール中 ところで、WindowsのApacheでCGIを動かすとき#!の行はどうすればいい?
683 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 20:10:51 ] 家の環境では、ruby.exeをapacheと同じドライブの例えばc:\usr\local\bin\ に放り込んでおけば動いた
684 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 20:12:44 ] パスは通しておいてね
685 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 20:12:47 ] >>682 パス通して#!rubyでいいんじゃね
686 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 20:13:15 ] > パスは通しておいてね Ruby本体をインスコしたディレクトリにパスは通しておいてね
687 名前:675 mailto:sage [2008/10/26(日) 20:20:11 ] 実験は成功した。普通に動いた。 今度は書き込みを実行したとき何も出力されないバグが出てきたが
688 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 20:34:55 ] cgi-exception入れとけ ttp://cgi-exception.rubyforge.org/
689 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:02:28 ] >>688 ローカルでは動く。リモートでは動かない cgi-exceptionをrequireしても(もちろんそのファイルごとアップロード済み) まったくダメ。
690 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:07:27 ] この分だと向こうで拡張ライブラリの一部が欠損しているというオチの可能性が 高そう。標準添付のライブラリ(cgi,nkf)しか使ってないのに…
691 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:24:01 ] CGI.unescape(cgi.params['うんこ']) を CGI.unescape(cgi.params['うんこ'][0]) にするとかさ、 NKF,nkf(略) を NKF.nkf(略) にするとかさ、 変数名やGET/POSTパラメタの名前に誤りがないかよく見るとかさ。
692 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:26:19 ] 環境を疑うよりは、まず自分のスクリプトを徹底的に疑うべき CGI-Exceptionでエラーが出ないなら次はprintfデバッグだ スクリプト中の適当な位置で、テキストファイルにログを書き出していけば たいていエラー箇所を特定できる (スクリプトが全く実行されない場合は、syntax errorかrubyパス絡みの可能性が高い)
693 名前:692 mailto:sage [2008/10/26(日) 21:37:21 ] あ、重要なこと書き忘れてた 初心者は(初心者じゃなくても一緒だけど)まず最小限のCGIスクリプトから書き始めろ 小さなスクリプトが動いてから、徐々に機能追加していかないと ただでさえ特定しづらいCGIのエラーが、余計に特定しづらくなる 少なくとも、そこそこの長さがあって環境変数が関わるような掲示板スクリプトを 一気に書き上げるべきではない
694 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:55:34 ] >>691 それにはすでに気づいて直した。直したが治らない。 >>692 syntax errorがらみはありえない(-cオプションで検査済み) パスもチェック済み(/usr/local/bin/ruby) >>693 一応ローカルで動作確認済みなので
695 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:59:42 ] これはRubyの問題ではない(まだ) >>694 だからその方法が間違ってると指摘されてるだろう CGIは「ブラウザでInternalServerErrorが出なくなるまで書き直す」という手法で開発してはいけない エラーメッセージを確認しない開発手法は糞だ
696 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:02:14 ] > 一応ローカルで動作確認済みなので 最小限のCGIスクリプトをサーバー上で動かさないとダメ 「環境変数自分で入れて、systemで実行して動いたから」というのではあまり意味がない
697 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:03:11 ] 結論: ・ 馬鹿にCGIを渡すな
698 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:04:18 ] >>695 とりあえずちょいと方法が思い浮かんだので実験してみる 1.まずは単なるテストスクリプトが動くか確かめる それすら動かないようならとりあえずこの環境での動作はあきらめたほうがよい 2.次にちょっとした工夫のなされたテストスクリプトを使って実験を行う 3.最後にその結果を見て検証する
699 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:04:55 ] RubyでWin32弄くる場合に必要な知識はRubyそのものではないのと同様に RubyでCGIやる場合に必要な知識はRubyそのものではないのだな ライブラリで吸収隠蔽すべきかどうかというのは悩ましいとこだと思う
700 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:05:14 ] >>696 Apacheでも動作確認済み 1時間以上前に実験した。
701 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:06:11 ] bbs.cgi:57: cgi.params['content']をCGI.unescapeに渡している Arrayが渡ったりしてNoMethodError -> あぼーん bbs:cgi:58: NKF,nkf('-s',content) カンマとドットのtypo とりあえず2つみっけ 動作確認済みとは笑わせるな それともHPのzipからまた弄ってるのか?
702 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:09:26 ] >>700 どう動作確認したのかkwsk 俺の環境でApache立ち上げて試してみたが、普通にアクセスしただけでエラーが出る 具体的には>>701
703 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:09:46 ] #!/usr/local/bin/ruby -Ks print "Content-type: text/html\n\n" print "<html><head><title>テスト</title></head><body><p>テスト</p></body></html>" このスクリプトすら動作してないのでもはやお手上げ
704 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:10:02 ] >>699 だねえ >>700 小出しにするな 自分で話をまとめられないなら諦めれ
705 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:11:17 ] > 小出しにするな > 自分で話をまとめられないなら諦めれ に一票 そして離脱
706 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:17:59 ] >最小限のCGIスクリプトをサーバー上で動かさないとダメ に対して >Apacheでも動作確認済み >1時間以上前に実験した。 って…明らかに話噛み合ってないな
707 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:19:34 ] >>703 自分でApache立ち上げて試すときは、そのパスじゃまず起動しないぞ #!ruby -Ks にして試してみ。それでも駄目ならお手上げ
708 名前:675 mailto:sage [2008/10/26(日) 22:21:49 ] >>706 まったくかみ合わない上に、どうやらこちらの問題ではなさそうだと 判明したのでたぶんこれ以上話し合っても結論が出る可能性は0(正確には) ただ、根本的バグが見つかったのは皆さんのおかげです。 皆さん、ご協力どうもありがとうございました。
709 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:24:45 ] >>707 もちろんローカルでやるときはそのためのパスにするわけですけどね。
710 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:31:12 ] >>707 Rubyの絶対パスを指定して動いてるので、いえるのは もはやここでは対処しようのない問題だということです。 とりあえずテストスクリプトすら動かないということは 他のところに持っていったのでこれ以上の深入りは 避けたいと思います。
711 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:32:04 ] >>703 ステータスコード書いてないから動かなくて当然 あと\n\nだとサーバが非winのとき困るんじゃないか?
712 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:33:31 ] てゆーかbbs.cgi自体も割りと…たぶん2、3個の虫食いじゃないよな、 斜め読みした感じでも
713 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:01:23 ] パーミッションの設定してませんでした><
714 名前:707 mailto:sage [2008/10/26(日) 23:10:02 ] >>711 あ、そうか NPH環境だとステータスコード無しでは動かないのか…
715 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:38:16 ] 超遅レスだけど >>656 >>668 >>669 ここら辺の話って本当なんですか? Rubyのライブラリのレファレンスでクラスの説明とか見るとよく::が使われてるけど あれは本当は間違いなんですか?
716 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:48:43 ] >>656 以外の使い方してるやつなんてあんのか 具体的になんてライブラリのリファレンスのどの部分よ
717 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 00:17:15 ] >>676 「vlookupのようなもの」ってのが、一体どんなのか分からんのだが vpreとvpstではさんで比較してるってことは、ソート済みだと仮定してもいいの? 良いなら二分探索が使える コードについて ・Range#eachがあるんだからeachを使う。Rubyでforは(めったに)使わない ・不要なbreakが見られる ・異常入力に対して99.9とかを返すのは、これでいいの?
718 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 01:26:18 ] >715 マニュアル内でのその記述はクラスの親子関係じゃなくて、大抵モジュールの定数のハズ。
719 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 01:33:20 ] 例えば、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
720 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 01:34:23 ] 言うなれば :: でクラス同士を繋いでいたら、それは親子じゃなくて入れ子の関係ってところか。
721 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 01:47:29 ] Railsの質問はここでいいんでしょうっか? Web画面を共有出来るアプリが作りたいので 実験で5分で動くshootingstar使ったchatのテストアプリみたいなのを 動かしたんですけど自分でブラウザを更新しないと表示画面が更新されません。 バージョンは、shooting_star (3.2.7)とrailsは2.1.2でOSはUbuntuなんですけど。。
722 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 02:10:00 ] WebProg板にRailsスレあるよ 【Ruby】Ruby on Rails Part6 pc11.2ch.net/test/read.cgi/php/1224838013/
723 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 05:38:49 ] >>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関数にした方がまだ使いやすくない?
724 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 05:45:45 ] >>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 の言うとおり、二分検索するのがいいんでない。 適当にコード見て書いただけなんで、バグとか指摘の間違いとかあるやも。
725 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 05:51:25 ] >>711 ほぼ参考書のままです。 とりあえずステータスコードをつけて動くか確かめてみます
726 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 05:59:36 ] 結局Content-typeの改行コードを\r\nにしたら動きました
727 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 06:22:47 ] >>726 それは誤りだ
728 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 07:26:44 ] >>727 一応めでたく完成して新しい追加機能2つ(日付表示・連投規制)を 付け加えました。たぶんこれで実運用上、書き込みがぶつからなければ なんとかなると思います。タグ検索機能はなんか変ですが おいおい何とかします。
729 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 08:20:38 ] >>727 誤りではないだろう、HTTPの標準改行コードは\r\nだ 出力先がバイナリモードでさえあれば問題はない
730 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 21:40:37 ] >>716 >>718 >>719 Java出身のruby初心者だったものでクラスライブラリはクラスの継承で繋がってると思い込んでました。 なるほど、rubyはモジュールや入れ子のクラスを多用するんですね。 勉強になりました。ありがとうございました。
731 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 22:15:18 ] Javaだってよく使うだろう。
732 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 22:25:44 ] RubyやPerlって一体なにに使う言語なんですか? Htmlに組み込む言語という解釈でいいんですか?
733 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 22:41:28 ] >>732 だいたい何にでも使う
734 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 23:02:23 ] テキスト処理をするのに使う テキスト処理と聞いて何も思いつかない場合はまだスクリプト言語に用がないということなので PerlやRubyのことはすっぱり忘れて別なことを楽しみましょう
735 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 00:49:43 ] rubyはrailsのために使います。 フリーだと現時点で一番効率よく稼げるのrailsです。 3人月の案件で700は固いから月給200万ですよ。
736 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 17:05:00 ] 日本語でおk
737 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 19:13:55 ] >>732 >Htmlに組み込む言語 それはPHP
738 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 20:26:14 ] >>737 HTMLがPHPになるんですか? PHPがHTMLになるんですか? 組み込むってそういうことですよね?
739 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 20:54:46 ] 画面分割はどうやればいいんですか? 自動的に隠したり、分割を×ボタンで消したりする機能のパックになったコントロールとかあるんですか?
740 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 20:57:37 ] >>739 Webクライアントの仕組みについて理解してから来なさい。
741 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 20:58:32 ] >>739 えーと… Rubyの仕事ではないので、GUIに何を使ってるか調べて、それに関するスレなりサイトなりに行くといい
742 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 21:18:58 ] @蠣←これを右クリでコピーする Aスタート→すべてのプログラム→アクセサリ→メモ帳を起動 B編集→貼り付け C編集→すべて選択 D変換キーを押す
743 名前:676 mailto:sage [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 mailto:sage [2008/10/28(火) 23:45:30 ] >>723 >1. 書き忘れていましたが、ご指摘のとおりソート済みを仮定しています。 >2. ちょうどそのエラーに出くわしていたところでした。。。 >3. 事前に一応調べてはみたのですが、ちゃんと理解できていなかったです。 また数学がよくわかっていないため、2の事態が発生しました。 >4. MATCH関数を知らなかったので調べてみましたが、どのように適用すればよいかわかりませんでした。もう少し詳しく教えていただけないでしょうか。 >>724 知らない事がありすぎるのですが、みやすくなったので使ってみたいと思います。 速くなるのも教えていただけると助かります。。。
745 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 05:33:04 ] forは内部的にeachを呼び出すそうだから、速度差など無いに等しい。 どうしても気になるなら一億回くらい空ループ回して計ってみるといい。 まぁ、仮に10倍の速度差があったとしても、今は気にする必要ない。 プログラムの高速化はまず何よりもアルゴリズムが最優先。 小手先の最適化に手をつけるのはその後だね。 breakは単に使い方が悪い。 >>677 の最初の2つは先にreturnするので、絶対に到達しない。 最後のはbreak後returnしかしていないので、returnで置き換え可能。 breakせずに抜けるパターンの場合、必ず範囲外アクセスで落ちる。 つまりすべての箇所で何の役にも立っていないというわけ。 異常入力にマジックナンバーを返すのもありだけど、発生頻度が低く 検査箇所が多いようなら例外(Exception)を発生させたほうがいいよ。 コードの見通しがまるで違ってくるから。 VLOOKUPは検査値に対応する行と指定した列が交差するセルの値を 返すのに対し、MATCHは検査値に対応する値の位置を返す。 VLOOKUPでは検索範囲が左端の列で、かつ対応する値の列の高さと 縦位置が完全に一致しなければいけない。 MATCHとINDEXまたはOFFSETとの組み合わせなら、検査列に対応 する値の列が左にあってもよいし、縦にずれていてもよいし、列でなく 行(対応する値が横に並ぶ)でもよい。 その気になれば対応する値をnマスおきに飛び飛びにだってできる。 それに比べると列指定不可のVLOOKUPなんてあまりに不便すぎる。
746 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 05:37:23 ] 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
747 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 05:40:31 ] ベンチマーク 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) # 二分検索(ループ)
748 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 05:57:19 ] >>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
749 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 07:00:09 ] 全角空白厨は何を言っても説得力がない
750 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 09:42:12 ] そこが気になるというのは、もしやコードをテストしてみようとしたわけか? 朝早くから実に殊勝な心がけだ。 大変すばらしい。 それだけ向上心があるなら、更なる技術向上のための課題として、全角半角の 変換フィルタでもチャレンジしていただきたい。 (もちろんワンライナーな)
751 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:08:41 ] >>750 コードは全く読んでない 全角空白かどうかだけをブラウザ上でチェックした それで充分
752 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:21:12 ] >>749 ,751 俺もコード張るときはwebブラウザとかJaneのこと考えて 全角に変換してから張るんだけど何かまずいの?
753 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:21:57 ] 書き込む際に見やすいように、という理由でいわゆる全角スペースを使うのは 割とよくあることだと思うんだが、それをどういう切り口で転がすと「厨」になるんだろ。 それこそ「説得力が無い」よ。
754 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:26:48 ] 全角空白なんて危険なもの使わなくたって があるだろう 初心者がコピペで実行する初心者スレで全角空白みたいなのをコードに混ぜるのはあまりいい気はしない arr.each do |e| puts e end
755 名前:752 mailto:sage [2008/10/29(水) 10:31:22 ] >>754 ああなるほどな、サンクス
756 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:34:41 ] >>754 本人? よりよい方法がある、という話ならわかるけど、そんなことで厨呼ばわりした上で、 コードなんか見なくても十分とか言ってのけたわけ? 「あまりいい気はしない」とか、なんか急にトーン下がってるけど。
757 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:40:23 ] >>756 いや全然 検証のために irb にコピペして全角空白でエラーになってピキッとなったことはないか? せっかく書き込み前に置換する手間を割いてるのに置換先が全角空白だというのはバカっぽいだろ なんでわざわざ実行不可能なコードにさせるんだよ
758 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:46:17 ] 他人が実行するかもしれないことに気が回らない俺スゴイ系の人は 2chでは厨呼ばわりされても仕方ないかな、という気はちょっとだけする
759 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 11:01:39 ] だが、ム板では普通に見かけるけどな。 インデントを全角空白で、ってのは。
760 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 11:24:51 ] ソース見れば普通に半角空白残ってるんだお
761 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 11:35:27 ] 置換の手間は割けなくても長文粘着はありなんだよねこういう人ってw
762 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 11:47:31 ] 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
763 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 11:55:24 ] 投稿者1人が半角スペースなコードをエディタに書く ↓ 書き込み時に全角スペースに置換する ↓ 参照者複数人が各々のコピペ時に全角スペースを置換する ↓ エディタに半角スペースなコードができる まあ、プロトコル的に無駄ではあるな 投稿者が半角スペースを に置換してくれさえすれば参照者はコピペだけでおkなのに 2chブラウザによっては半角スペースを投稿時に に変換してくれるものもあるけどな navi2ch使いあたりはこのへん全く意識しないはず というか、全角スペース混じってると範囲実行のM-|ができなくてイラつく(w いちいち 1 [1,2,3].each do |e| 2 puts e 3 end と行番号つきで書かれるくらいムカつく
764 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 12:05:00 ] Jane Doe Styleで >>754 をコピーすると 半角スペースの箇所はクリップボードには &#160 (&#は半角)で保存されるぞ アプリケーション( 2ch 含む)によって文字参照の扱いなんてまちまちなんだから 文字参照に変換してから貼れって主張にはあまり魅力を感じないんだよな
765 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 12:09:49 ] コピペ内容に関して意識してる2chブラウザはそう多くないよね どうレンダリングするかとかはRFCに記述ないんだっけ?
766 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 13:14:44 ] なにやらえらい騒ぎになってしまったな。 全角半角が問題になるのはコピペする人間だけなのだが、実際それをする人間がどれ ほどいるのか。 他の板ならともかく、いかに初心者スレとはいえここはム板なんだから、一括置換な んぞ5秒でこなす くらいの能力は期待できないものなのか。 学校のセンセじゃあるまいし、その程度は勘弁していただきたい。 まぁ、全角を使っているのは書き込みログが読みにくくなるから、というしょーもな い理由なので、 こちらも置換すれば済む話ではあるし、専ブラで対処できるものなら導入を検討する よ。 と、ここで新着見たら、そんな簡単な話しでもないのか。 確かに>>764 は以前くらったことがあるな。 どうしたもんかね。
767 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 13:17:44 ] ノンブレイカブルスペースは \x20 とは別物。常識
768 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 16:32:30 ] おれも つかってたけど、>>764 と同じことがあって、 結局全角スペースのほうが害がすくないと判断してる。 >>767 そうなんだよね。しかも が半角スペースにならない環境だと、 置換が全角スペースより面倒なんだよな。 まあ2chの仕様がクソということで。
769 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 16:33:42 ] >>762 CSVやめて、FasterCSVを使ってみたらどうでしょうか。 「ruby fastercsv」でぐぐってみてください。
770 名前:デフォルトの名無しさん [2008/10/29(水) 17:08:50 ] >>769 実は先ほどソースはredmineのものなんです ファイル名app\helpers\issues_helper.rb なので簡単にFasterCSVに置き換えて大丈夫なものなのか判断しにくいんです。 変更は簡単ですかね?
771 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:43:51 ] >>762 CSV::Writer ならエスケープが必要なフィールドだけエスケープされるので、 以下のようになるはずだけど。 AAA,BBB,CCC,"DD D" DD\nDだけじゃなくてAAAとかもクォートして欲しいってこと?
772 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 13:30:47 ] >749-768 先頭の空白に関しては、まだRubyは良いほうでしょ Pythonなんて先頭の空白が纏められたら話にならんかと
773 名前:デフォルトの名無しさん [2008/10/30(木) 16:17:11 ] while文の中にif文入れられる?
774 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 16:22:19 ] 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で処理することを期待してるのですが
776 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 18:53:18 ] >>775 手っ取り早いのはeval。 でも数式に限らずなんでも実行できてしまうから 四則演算だけ処理したいならraccとそのサンプルのcalc.yあたりとか。
777 名前:775 mailto:sage [2008/10/30(木) 19:31:22 ] >>776 ありがとうございます。助かりました。
778 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 22:51:35 ] >>776 > 四則演算だけ処理したいならraccとそのサンプルのcalc.yあたりとか。 正規表現で入力を検査してokならevalに渡す方が楽でない?
779 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 22:58:30 ] そのへんは入力元がどのくらい信用できてどのくらい調教可能かによるな
780 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 23:07:18 ] 信用できないから検査する。 何によるかというならどれくらい受理する式の文法を限定できるかだろう。 君、バカでしょ。
781 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 23:18:40 ] 検査が必要かどうかという話だろ 自分で電卓代わりに使いたいだけなら入力検査は不要 こんなの完璧にやるか全くやらないかの2択なんだから信用度は重要 2//3 で エラー吐いて落ちるのは困るだろうし 1 2 + 3 で エラー吐いて落ちるのは困るだろうし 1/3*3 で 0 が返るのも困るだろうし (1..2) で Range オブジェクトが返るのも困るだろう
782 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 00:02:44 ] >>781 君はバカさ加減の露出癖でもあるのかね。 > こんなの完璧にやるか全くやらないかの2択なんだから信用度は重要 不測の動作をさせないことが保証できればいいんだよ。 エラーはevalのすぐ外で捕捉すりゃいい話。 > (1..2) で Range オブジェクトが返るのも困るだろう そうならないように検査するんだろうが。
783 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 00:03:55 ] じゃあraccでやれよ
784 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 00:06:22 ] は?
785 名前:676 mailto:sage [2008/10/31(金) 00:28:23 ] >>745 returnしたら、その後に行かないという基本的な事を知りませんでした。。。 説明していただいた内容が理解できていない部分があるので質問させて下さい。 「MATCHとINDEXまたはOFFSETとの組み合わせなら」とおっしゃっているのは、 それぞれ以下のもののことでしょうか? www.ruby-lang.org/ja/man/html/Regexp.html#match www.ruby-lang.org/ja/man/html/Array.html#index www.ruby-lang.org/ja/man/html/MatchData.html#offset それとも以下のようなexcelの関数のことでしょうか? support.microsoft.com/kb/181212/ja これすらも解からない状況です。申し訳ありませんがよろしくお願いいたします。 >>746-748 ループ版の早さは今の私には驚異的です! 1個のデータを処理するのにexcelで処理していたときは約5分 自分で作ったvlookupで約2分だったので、1秒かからなくなるんですね。 ただ、勉強不足でわからないことだらけです。 ループ版を自分で作るには時間がかかるので少し待って下さい。 完成したら添削をお願いします。
786 名前:デフォルトの名無しさん [2008/10/31(金) 02:28:31 ] qb5.2ch.net/test/read.cgi/operate/1206636885/657 駄目元で書き込んだ。 賛同してくれる人はこのレスに同意のアンカーをつけてくれ。
787 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 04:54:23 ] >>785 コードの端々で妙な書き方してるから、他言語でヘンな癖でもつけて きたのかと思ってたら、もしかしてプログラミング初心者だった? Excel VBA使いを想定してたんだが、Excelもサッパリのようだし… INDEXやOFFSET等、全部大文字で書いたのはExcelの関数。 これらについてはスレ違いなので他でよろしく。 まぁ、とりあえずは基本的な文法・制御構造をまず覚えてくれ。 最低限、分岐・ループ・メソッド呼び出しとそこからの脱出あたり。 勧めといてなんだけど例外は後回しでいいかな。 一度苦労した後の方が有り難みもよく分かるだろうし。 次に組み込みクラスについて調べてみる。 上で使ってるのは、数値(Numeric), 文字列(String), 範囲(Range) あたりを見れば分かる程度の簡単な使い方してる。 重要なのは配列(Array)とEnumerableの2つ。 制御構造と並んで、こいつらがアルゴリズムを実装する要だ。 (今回は使わなかったが、Hashもいずれ知っておくべき) クラスライブラリを全部覚えるのは大変だろうけど、どんなことが できるかくらいはざっと目を通しておくといい。 そうしたらコードを読んでみる。 どれもかなり短いから、読み下すのはそう難しくないとおもう。 行数短縮のために三項演算子を濫用している点は申し訳ない。
788 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 04:58:30 ] コードを読んだだけでは内容を理解するのは難しいだろうから、 短い配列でどのような動きになるか、紙に書いてみるといい。 再帰をループに変更するにはアルゴリズムを十分に理解して いなければならないが、是非がんばって挑戦してほしい。 ケチな高速化など後回しと書いた理由も実感して貰えたと思うが、 もし興味を持ったなら、アルゴリズムも勉強してみてはどうか。 ほんのちょっとの仕組みの違いで速度が千倍とかざらにあるよ。 計算量の考え方だけでも知っておくことをお勧めする。
789 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 07:54:59 ] VB系はreturnに直接相当する命令がないからな。 戻り値と、プロシージャを抜ける構文が別になってるから。 で、そのまま直訳してreturnとbreakに分けた、と。そんな感じだろう。
790 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 10:38:32 ] ひとこといわせてくれ。 >>787-788 、おつ。こんごもがんがれ。
791 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 17:14:09 ] あるクラスAが別のクラスBのサブクラスかどうかを判定するメソッドってありませんでしたっけ? 今は A.ancestors.include?(B) とやってるんですけど、かっこわるいですよね。
792 名前:デフォルトの名無しさん [2008/10/31(金) 17:21:41 ] どうして?それでよいのでは?
793 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 17:45:25 ] class B;end class A < B; end class C; end p A < B p A > B p A < C
794 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 17:51:24 ] >>793 >> File < IO => true >> Dir < IO => nil なにこれーーー >> Fixnum < Integer => true >> Array < Enumerable => true module もOKだ ちょうさんくすです
795 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 18:44:55 ] まさかModule/Class同士の比較ができるとは・・・知らなかった
796 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 21:10:08 ] >>795 伊達に継承の記号が "<" なわけじゃない。 ……かどうかは知らないが。
797 名前:デフォルトの名無しさん [2008/11/01(土) 06:26:05 ] VIPから来ますた
798 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 06:26:45 ] VIPから来ますた
799 名前:デフォルトの名無しさん [2008/11/01(土) 06:28:45 ] ∧_∧ ( ´・ω・) みなさん、VIPからさし入れのお茶が入りましたよ・・・・。 ( つ旦O と_)_) 旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦
800 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 06:44:02 ] VIPから来ますた
801 名前:728 mailto:sage [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 = 'www.yahoo.co.jp/ ' 29 p b = B.new 30 p c = C.new(url)
803 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 12:21:28 ] URIはHTTP専用ってわけじゃないので、ちゃんとプロトコルから書く。 あとNet::HTTPはわりと残念な設計で、サブクラスでinitializeをオーバーライドしても呼ばれない。 委譲したほうがいいかも
804 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 19:52:20 ] >>802 これで我慢すれ class C < Net::HTTP def initialize(*args) args[0].kind_of?(URI) ? super(args[0].host,args[0].port) : super end end
805 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 08:33:41 ] そこでhttpclientですね
806 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 12:26:17 ] 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 = '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)
807 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 17:50:27 ] >>806 × a = A.P(foo, bar).newobj(foo, bar) # in A.new ○ a = self.P(foo, bar).newobj(foo, bar)
808 名前:806 mailto:sage [2008/11/03(月) 00:21:05 ] おおお!!thx>>807 なんで、A付けちゃったんだろ? これを色々いじって、マニュアル見ながらよく考えてみる。 も一回ありがとう!>>807
809 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:14:38 ] ディレクトリの中にあるすべてのファイル名を変えるプログラムを作ろうとしたのですが 5分で挫折しました(笑) File.open("D:\\Data") {|f| puts f.to_str() } とりあえずこうやってファイル名を出力しようとしたのですが、 コマンドプロンプトではすべてUNICODEのファイル名で表示されてしまい わけわかめです。 $SCODE = SJISとかやってもダメでした
810 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:28:30 ] それファイル名じゃなくdataというファイルの中身を読んでいるように思えるが `dir d:\\data /b`.each { |f| f.chop! puts f }
811 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:39:07 ] その場合メソッドパラメタの名前は line とかのほうがいいぞ
812 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:42:01 ] メソッドパラメタ → ブロックパラメタ
813 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:58:21 ] >>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"]
814 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 18:15:13 ] >>813 今のrubyは\も扱ってくれるよ と思ってたが、Dir.globは\区切りに対応してないのね……
815 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 20:31:28 ] 下のディレクトリの中も再帰的にやるんじゃなかったら Dir.entries(ディレクトリのパス).reject{|d| File.directory? } とか。
816 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 00:14:51 ] rubyでファイルの種類の判断ってできますか? 拡張子で判断するのではなくファイルの中身で、Excelファイルかどうかの判断が したいんです。 よろしくおねがいします。
817 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 01:34:00 ] できますよ
818 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 03:33:29 ] >>816 がんばってマジックナンバー嫁
819 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 08:17:09 ] >>816 unix系ならFileMagicだけどwindowsはよう知らん
820 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 19:22:11 ] >>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}
821 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 21:56:06 ] >>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 エクセルファイルを漏れなく判定できるのかはわかりませんが…
822 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 11:05:21 ] require 'foobar' としたあとで、'foobar.rb' の絶対パスを調べる方法ってありますか。
823 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 15:13:55 ] File.expand_path($LOAD_PATH.map{|d| File.join(d, 'foobar.rb') }.find{|path| File.exist?(path) })
824 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 15:19:42 ] >>823 それは読み込んだファイルであることを保証しない
825 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 15:27:19 ] 読み込んだファイルそのものを指定することは1.8ではできないと思った 同名のファイルをファイルパスから探すことはできるけれど >>823 で問題になる場合というのはなくはないとは思うが非常にレアなような気もする
826 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 15:32:16 ] foobar.rb で File.expand_path(__FILE__) を返すようなメソッドなりなんなりを用意しておくほうが確実なのかな >>823 の要件に合うとは思えないけど
827 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 15:35:43 ] >>826 require を拡張したほうが妥当と思う が、どうすればいいのやら gem の require はどうやってるんだっけ
828 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 15:43:39 ] foobar.rb で File.expand_path(__FILE__) を返すようなメソッドなりなんなりを requireしたあとからくっつければ医院で内科医?
829 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 16:20:11 ] >>828 はのび太
830 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 17:55:23 ] >>823-828 どうもありがとうございます。 ないということなので、以下の方法で済ませることにしました。 lib = "foobar.rb" dir = $:.find{|path| File.exist?(File.join(path, lib)) } filepath = dir ? File.join(dir, lib) : nil ありがとうございました。
831 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 21:45:52 ] 拡張子省いてrequireしたとき、.soだったのか.rbだったのかまで知りたくなったら、$LOADED_FEATURESとも突き合わせて比較する必要も出てくる。
832 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 00:21:42 ] 突然ごめん。 p array した時の["hoge", "fuga", "boo"]みたいな書式って 変更できたりしない? あと一歩でcsvなので便利に使えそうなんだが。 pのことをググって調べるのは非常にホネが折れる…
833 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 00:28:03 ] inspect
834 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 01:07:55 ] >>832 www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html#p なんでもぐぐって調べようとするから骨が折れてるんだろうw
835 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 02:12:54 ] >>832 joinの方が楽
836 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 03:23:57 ] >>832 >>835 その名も「csv」というライブラリが標準で付いてることを忘れないでやってくれ。
837 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 09:49:56 ] >>832 一文字目と最後の文字消せばいいだけじゃね?
838 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 12:18:53 ] なんでもかんでもググるって馬鹿がすることだよね。 賢い人なら知りたいことが見付かりそうな文書はどこにあるのかをまずは考える。
839 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 20:15:46 ] ロックシステムについて相談があるんですが 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オープンしても例外を投げなくてうまくいかない ようです。他のプラットフォームだとどうなんでしょう?
840 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 21:16:58 ] File#flock() を使う方法しかしらない。 File.open("foobar.txt", "wb") do |f| f.flock(File::LOCK_EX) # 排他ロック f.unlock(); end
841 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 21:22:21 ] なんか既視感がある 組み込みで妥当に動作してるロック機構を再発明しようとするな、というのがアドバイスだったはず
842 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 21:24:54 ] >>840 まずそのサーバーでflockが使えないから無理 >>841 組み込みで現に存在してるのが使えないから問題。 確認したいこと 1.とりあえず方法があっているか。 2.Windowsだとまともに動かないようだが他のプラットフォームだとどうか。
843 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 21:35:38 ] >>839 1.8.6-FreeBSDだけど File::CREAT|File::EXCL で Errno::EEXIST が出る ただし>>839 のソースをそのまま実行すると例外が rescue でとらえられて 例外処理でロックファイル削除されてからリトライするから、例外が発生してないように見える あとrescueの下の二行間違ってるよ
844 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 21:40:52 ] >>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 未来の時刻と比較してるようだがこれはいいのか?
845 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 21:43:49 ] >>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秒以上前なら削除するように できてますから。
846 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 21:45:56 ] >>844 あ、やばい。そこがおかしい。 どう考えてもおかしい。 if(File.stat('lockfile').mtime+10<Time.new) then こう直すべきだ
847 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 21:55:09 ] >>844 どこでおかしかったか分からないが治った。thx
848 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 21:57:23 ] >>842 > 組み込みで現に存在してるのが使えないから問題
849 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 22:10:05 ] >>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)
850 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 22:19:35 ] >>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
851 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 22:24:21 ] それでもやっぱり最後のレースコンディションは解消してないのだが、 これ以上この方法にこだわる限り改善の余地はなさそう。
852 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 22:42:44 ] >>842 >まずそのサーバーでflockが使えないから無理 File#flock() が使えない環境ってどんなの? どこでも使えるもんだと思ってた。
853 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 23:03:27 ] >>850 更新時刻から10秒待つのに、リトライは0.1秒×10回でいいのか、というのはおいといて、ゴミ掃除を別々のプロセスで確実にやるのは無理だと俺は判断してる。 ゴミ掃除専用のプロセスを1個だけ別に動かしとけ。メインの処理に10秒以上かかる可能性がないと言えるなら、それで大丈夫だろ。
854 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 23:31:32 ] どうせ専用のプロセスを立ち上げるなら, druby使ってmutexを共有するという強引な方法を思いついた
855 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 00:22:16 ] 普通にO_EXLOCKでシステムのアドバイザリロック機構に頼ればいいんじゃないのか? 下がnfsだったりするとアレだが。
856 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 05:41:35 ] >>853-854 レンタルサーバーでCGIを動かすために使うというのが大前提なので。 プロセスの常駐とかまず無理。 10秒待つのではなく確実を期すために10秒以上前のロックファイルを 削除するといっている。待つ時間は1秒。
857 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 05:43:07 ] flockメソッド(関数)は、言語によって同じ名前でも実装が違ったり 一部のファイルシステムやレンタルサーバ上では使えなかったりしてあまり信用できない かといって自分でロック機構を実装すれば、レースコンディションの危険がある なんかこの辺をさくっと解決してくれるpure rubyなライブラリないかな
858 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 11:34:57 ] >>857 >flockメソッド(関数)は、言語によって同じ名前でも実装が違ったり Rubyの話してるんだから他の言語は関係ないだろ。 >一部のファイルシステムやレンタルサーバ上では使えなかったりしてあまり信用できない だからどんなファイルシステムやレンタルサーバ上で使えないの? 具体名をだしてくれ。 どういう場合にflockが使えないのかを、ドキュメントに書いてもらおうぜ。
859 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 12:23:44 ] >>858 NFS上でのロックは不可能。 これはflockシステムコールの実装から来る制約。 fcntlを使えばNFSでロックすることは可能になるがIO.ioctl関数という 可搬性が低いメソッドを用いなければならず(まずWindowsなら実装されていないと 門前払い)かなり面倒。おまけにたいていNFS上でのロックはセキュリティホールに なるので使えないのが普通。
860 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 12:49:31 ] >>858 レンタルサーバだと、flockが明示的に禁止されているサーバがある。パンドラとか ただ、現在flockを使えないサーバがどのくらいあるかは分からない 無視できるほど少数かも
861 名前:デフォルトの名無しさん [2008/11/08(土) 22:07:38 ] 正規表現の書き方なのですが、、、、 >Sector:</td><td class="yfnc_tabledata1"><a href="biz.yahoo.com/p/7conameu.html ">Services< こんな文字列があって、前後にも改行以外の文字が色々とくっついているのですが、 Sector:の後のServicesをマッチさせて文字としてとってこようとすると、どう書けば良いでしょうか?
862 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 22:17:18 ] 正規表現は書き方を覚えないと駄目 なぜなら、ほんの少し変えようと思っただけで別物になるから コピペでやろうとすると異常に遠回りになる 正規表現自体は他の言語の正規表現とけっこう互換性があるから適当なサイトで勉強すれ
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
864 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 11:46:37 ] wxRubyについて勉強してるんですが、何かいいサイトはありますか? 一応自力で見つけたサイト www.gesource.jp/programming/ruby/gui/wxruby/index.html wx.k5-n.com/wxruby/ 最小限のことは自分でやってます。require周りは自分でなんとかしてます。
865 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 11:59:40 ] 具体的には… 1.とりあえずwxWindowをインストールした 2.wxRubyをgems経由でインストールした 3.簡単なテストアプリケーションが動くようになった 以上のことがすでに完了してます。
866 名前:デフォルトの名無しさん [2008/11/09(日) 12:00:00 ] 文字列変換メソッドを多数持たせたモジュールがあります。呼び出し ごとに正規表現オブジェクトが作成されるのを防ぎたいのですが、 単に/abcde/ の代わりにRegexp.new("abcde")とすればOKですか? それともグローバル変数みたいなものに格納しないとキャッシュと しての効果は出ない?
867 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 12:12:20 ] 式展開を含まないならどうでもいい
868 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 12:18:17 ] >>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 の言うように、式展開を含むような「毎回違う可能性のある」正規表現はこの限りではない
869 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 12:20:32 ] >>866 /abc/ なら毎回生成されることはない。 /ab#{var}cd/ や Regexp.new("abcd") なら毎回作成される。 あとは CACHE_REGEXP = {} def cache_regexp(str) CACHE_REGEXP[str] ||= Regexp.new(str) end とか。
870 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 12:42:43 ] >>864 公式のチュートリアル。 あとWxWidgetsのサイト全般と公式のAPIドキュメント。 wxに限ったことではなく、既存ライブラリのRubyバインディングは 元ネタのサイト漁るのが一番いいと思う。
871 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 12:57:40 ] >>870 読んでみたんですが、すでに???状態です。 英語ワカンネじゃなくてそもそも読む気力がないのが大問題だったりするわけですがorz 今度気力が回復したらやってみます
872 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 13:09:11 ] わかんなくてもコードコピペしてたら何となく動くし それでもダメならWxWidgets関連のサイト参考にって>>870 の2-4行目で
873 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 13:15:24 ] >>872 ええ。一応その段階はある程度OKです。 あとはゆっくり亀のように進んでいけばいいんです。 解決しました。ありがとうございます。
874 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 13:23:24 ] >>864 harukaze wxPython で検索 あと、解説サイトじゃないけど wxRuby開発者が出してるwxsugarオススメ
875 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 13:49:02 ] >>874 たぶん言ってるサイトはこれだと思うんだけど、 www.harukaze.net/~haruka/wxpython/index.html なんかドメイン飛んでるよ Pythonのが参考になるっつーことは理解できたけど。
876 名前:866 [2008/11/09(日) 15:29:30 ] >>867-869 ありがとう、よく分かりました。
877 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:22:19 ] >>859 >NFS上でのロックは不可能。 ほう、そうなのか。知らなかった。さんくす。 >fcntlを使えばNFSでロックすることは可能になるがIO.ioctl関数という >可搬性が低いメソッドを用いなければならず(まずWindowsなら実装されていないと >門前払い)かなり面倒。 Windows上でNFSを使うことはないだろうから、ioctlはUNIX限定でいいんじゃね? >おまけにたいていNFS上でのロックはセキュリティホールに >なるので使えないのが普通。 これよくわかんないんだけど、理由は?参考になるURLプリーズ。 >>860 >レンタルサーバだと、flockが明示的に禁止されているサーバがある。パンドラとか これも理由がわからん。レンタルサーバでNFS使ってるわけじゃないだろうし。なんで?
878 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 23:31:11 ] >>877 ttps://menu.pandora.nu/public/flock.php パンドラ側の説明みつけた
879 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 00:06:10 ] 超絶初心者な質問で申し訳ないんですけど、RubyScript2Exeでexeファイル作りたいんですけど上手くいきません。 使い方は、RubyScript2Exe.rbとexeにしたいファイルを同じフォルダに入れて、 コマンドプロンプトで、「ruby [RubyScript2Exeのパス] [exeにしたいファイル]」 で合っていますか?
880 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 07:32:00 ] >>878 サンクス。あきらかにNFS使ってるね。 そんなサーバがあることに驚いたけど。
881 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 07:50:04 ] つまりflock前提として、最適なロック方法は 「まずIO.ioctlでロックを試みる、エラーが出ればrescueしてflockする」ということか! ・・・面倒だ やっぱり、完全に可搬性のあるファイルシステムロック用のライブラリが欲しいな
882 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 08:19:04 ] 「完全に」とか簡単に言っちゃう人って頭悪そう。
883 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 08:36:33 ] 不完全or不安定なライブラリがほしいって言うのもなんだと思うが
884 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 08:49:34 ] 欲しい欲しい、して欲しい。
885 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 09:14:19 ] RAAやRubyForgeをざっと探してみたけど、ファイルロック用のライブラリらしきものが見当たらない 実はみんな、あまり必要としていないのか? MLでこんな古い話は見つけたが、ソースコードはもう公開されてないっぽい (時間ないから詳しく探してないけど) ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/11326
886 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 09:50:16 ] 本来、ファイルロックみたいにべったり環境依存なものに、完全な可搬性を求める発想が普通は余りないんだよね。 とはいうものの「環境依存だから諦めろ」ってのも古い考えで、こういう操作こそ処理系で環境差異を吸収しろ、っていう意見も、確かに一つの見識だと思う。 というわけで、完全な可搬性を持ったファイルロックの実装をコントリビュートしてくれ。
887 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 09:54:31 ] あんまり気にしたこと無かったけど、makeするあたりで 良きに計らってくれるとよさそうな感じだね
888 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 15:07:35 ] flockが使えるかどうかがファイルシステムに依存する以上、 コンパイル時に判定するのは無意味じゃないか?
889 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 17:32:32 ] >>886 SQLが使えるなら簡単な表を作って、そこに1つだけレコードを追加して、 あとはSELECT FOR UPDATEかSELECT LOCK IN SHARE MODEで終了。 幸いSQL用のライブラリは普通に配布されてる。 SQLが使えない場合はやり方を工夫するしかないわけなんだが。 とりあえずパンドラさんのPerlライブラリを解析するしかなさそうだけど。 >>881 むしろ順番は逆のほうがいい。ioctl関数はどちらかといえば汎用関数。 ioctlが使えないのはほぼ例外なくWindowsで作られてるサーバー。
890 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 17:34:51 ] RuBBSになんかあったな、ロック用のモジュール。 これの可搬性はどうなんだろう。 ttp://www.google.com/codesearch?hl=ja&q=lang:ruby+lock.rb+RuBBS+show:GN3bH3qHRek:P3zWR8HHuh8:MtDFtjKjkEI&sa=N&cd=2&ct=rc&cs_p=www.spc.gr.jp/software/archive/rubbs-1.0.7.tar.gz&cs_f=rubbs-1.0.7/lock.rb
891 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 17:53:13 ] >>890 この関数の流れは… 1.ロックファイルを固有ファイルに名前を変えようとする。成功したら3へ 2.失敗したらタイムアウトより古いロックファイルがあればロックを取得しようとする。 成功したら3へ 3.1秒待って1へ戻る。ただしtry回試して失敗したら打ち切り 4.ロックを取得できていなければLockError例外を発生させる 5.ブロックをともなって呼び出されていた場合そのブロックを実行する。 そしてロックを解放する ロックの解除は普通に元のファイル名に変更するだけ。 汎用性はかなり高いと思われる。レースコンディションを検討しても まずないだろうと考えられる。ファイルのリネームができないサーバーは まずないだろうからその面でも問題はない。
892 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 18:01:12 ] ただし、このプログラムを使う場合、GPL2が適用されるので それを使ったソースの配布もGPL2を用いなければならず、 そこが唯一の問題だったりする。逆に言えば、GPL2で 配布する予定のプログラムならぜんぜん問題はないといってよい。
893 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 19:05:10 ] >>892 自分で書き直せばいいんじゃね?
894 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 22:36:42 ] アトミックな処理(シンボリックリンクの作成とか)を利用したロック方法は それなりにノウハウが枯れきっている話題だし、自分で実装しちゃえばいい。
895 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 07:21:48 ] 試しにファイルシステムロック用のライブラリを書いてみた(不完全) mkdir方式で共有ロック・排他ロックの区別あり ttp://eload.run.buttobi.net/cgi-bin/img/e_260.zip ロック検出→ロックディレクトリ作成の間に 明らかなレースコンディションがあるんだけど、解決の方法が思いつかない・・・ 何かいい解決策はないだろうか
896 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 12:34:09 ] すでに存在するディレクトリを指定したときにエラー返らないんだっけ?
897 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 13:20:39 ] Perlだけど解説は参考になるかな www.din.or.jp/~ohzaki/perl.htm#File_Lock
898 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 21:36:28 ] >>896 Errno::EEXIST
899 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 08:41:51 ] 改良版。レースコンディションは無くなった……と思う その代わり1回のロックで2つのディレクトリを作るため、効率はやや悪い ttp://eload.run.buttobi.net/cgi-bin/img/e_261.zip >>896 共有ロックだと、複数のロックを同時にかけられるから 「まずmkdirしてみて、失敗するならロックされている」という検出方法が使えなかった
900 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 16:44:54 ] ボロボロじゃん。 教科書に載るようなちゃんと知られたアルゴリズムを調べて書いた方がいいと思うよ。