5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Ruby 初心者スレッド Part 22

1 :730:2008/09/15(月) 17:25:21
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

   【Ruby1.9 は不安定な開発版であり初心者には全く向きません】
   【最新安定版の Ruby1.8.7 の使用をお勧めします】
    ※1.8.7 は1.8 と 1.9 の橋渡しをするためのリリースです。
      1.9 の新機能の一部が利用可能なので初学者にお勧めです。
    ※ただし十分安定しているとは言えないので
      プロダクション環境での利用にはお勧めしません。

関連スレやURLは>>2-8あたりを見てください。Ruby on Railsの質問はRailsスレへ。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・モジュール名やエラーメッセージでググる
 ・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
 ・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(自力で訳さずなるべくそのままで)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

2 :730:2008/09/15(月) 17:27:18
【よくあるしつもん】
Q:
いちからRubyを始める初心者向けのRuby入門書は何がおすすめでしょうか?

A:
プログラム作成の初心者だったら
「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
http://www.amazon.co.jp/dp/4797336617/

他の言語経験があるんだったら
「プログラミングRuby 第2版 言語編」
http://www.amazon.co.jp/dp/4274066428/
「初めてのRuby」
http://www.amazon.co.jp/dp/4873113679


3 :730:2008/09/15(月) 17:31:36
■前スレ
Ruby 初心者スレッド Part 21
http://pc11.2ch.net/test/read.cgi/tech/1217952441/

■関連スレ
Rubyについて Part 32
http://pc11.2ch.net/test/read.cgi/tech/1215531152/

Rubyの宿題教えてください。2限目
http://pc11.2ch.net/test/read.cgi/tech/1200175247/

RubyCocoa 初心者質問【Leopardバンドル記念】
http://pc11.2ch.net/test/read.cgi/mac/1193373811/

【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc11.2ch.net/test/read.cgi/tech/1155031689/

Ruby on Rails のスレ が
http://pc11.2ch.net/test/read.cgi/php/1207425569/

デザパタ + Python/Ruby/Smalltalk part2
http://pc11.2ch.net/test/read.cgi/tech/1175959706/

魁け! Ruby 1.9.X
http://pc11.2ch.net/test/read.cgi/tech/1201603546/

Rubyについて(アンチ専用) Part003
http://pc11.2ch.net/test/read.cgi/tech/1207233348/

4 :730:2008/09/15(月) 17:33:59
■公式/非公式関連リンク
Ruby Home Page
http://www.ruby-lang.org/ja/

Rubyリファレンス(よくサーバーエラーになります)
http://www.ruby-lang.org/ja/man/
http://www.ruby-doc.org/ (英語)

リファレンスのHTMLヘルプ版配布
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
# Windowsで便利

Ruby FAQ
http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ

Programming Ruby - The Pragmatic Programmer's Guide
http://www.ruby-doc.org/docs/ProgrammingRuby/
# 好評書籍をWebで公開中、ただし英語

逆引きRuby
http://www.namaraii.com/rubytips/


5 :730:2008/09/15(月) 17:35:01
RAA - Ruby Application Archive
http://raa.ruby-lang.org/

RubyForge
http://www.rubyforge.org/
# Rubyのアプリやライブラリが検索できる

GitHub RubyGems
http://gems.github.com/
http://github.com/
# 最近は RubyForge より GitHub が人気

日本Rubyの会 公式Wiki
http://jp.rubyist.net/
# メニューに表示されていない埋もれた情報ページ多数

Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
# コードレビューが好評

Ruby hotlinks 五月雨版(日記やblogのアンテナ)
http://www.rubyist.net/~kazu/samidare/

Rubyの本一覧
http://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/>
http://www.rubyxml.com/

Matzにっき(Ruby作者の日記)
http://www.rubyist.net/~matz/


6 :730:2008/09/15(月) 17:36:20
■最近できたWiki
Ruby 初心者スレッド Hiki
http://starlet.s145.xrea.com/ruby/hiki/

Ruby Portal
http://ruby.morphball.net/portal/

■プレゼンテーション
Ruby会議2008
http://jp.rubyist.net/RubyKaigi2008/
http://www.nicovideo.jp/tag/rubykaigi2008

Ruby会議2007
http://jp.rubyist.net/RubyKaigi2007/
http://www.nicovideo.jp/tag/RubyKaigi2007

日本 Ruby カンファレンス 2006
http://jp.rubyist.net/RubyKaigi2006/
http://jp.rubyist.net/RubyKaigi2006/videos.html


7 :730:2008/09/15(月) 17:40:14
■他板の関連スレ

【カルト】Ruby開発者Matz【モルモン】
http://pc11.2ch.net/test/read.cgi/prog/1148712641/

【Ruby/SDL他】Rubyでゲーム制作・総合スレッド
http://pc11.2ch.net/test/read.cgi/gamedev/1207069887/

RubyによるWebプログラミングについての質問
http://pc11.2ch.net/test/read.cgi/php/1219059400/

8 :デフォルトの名無しさん:2008/09/15(月) 21:36:40
1乙
ただいま

9 :デフォルトの名無しさん:2008/09/15(月) 21:40:43
スレ立て乙です
いきなり質問していいですか?
プロパティファイルの扱いのようにメッセージや設定を管理したい場合の
実装について一般的にどうするのかが知りたいです

定数クラスを作るべきかなと考えたんですが
パラメータを渡して組み合わせたものをメッセージとして表示させる場合に
警告が出て気になります。みなさんはこういう場合どう実装していますか?

10 :デフォルトの名無しさん:2008/09/15(月) 22:48:07
>>9
>定数クラスを作るべきかなと考えたんですが
それでいいと思うけど。Configクラスとか。

>パラメータを渡して組み合わせたものをメッセージとして表示させる場合に
>警告が出て気になります。みなさんはこういう場合どう実装していますか?
どんな警告?


11 :デフォルトの名無しさん:2008/09/15(月) 23:08:38
>>10
ああ、それで良かったんですか

警告は定数の値を変更しようとすると出るアレです

12 :デフォルトの名無しさん:2008/09/15(月) 23:16:52
>パラメータを渡して組み合わせたものをメッセージとして表示させる場合に



>警告は定数の値を変更しようとすると出る

との間に1万光年の距離がある。



13 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/09/15(月) 23:27:51
最近はYAMLがいいんじゃないかね。


15 :デフォルトの名無しさん:2008/09/16(火) 01:32:31
ネットのWEB上のテキストから
文字列を取得してきて、
変数aに格納するのってできる?
どうやるの?

http://www.abc.com/abc.txt

に「あいうえお」って書いてあって、
その「あいうえお」を変数aに入れたい。

16 :デフォルトの名無しさん:2008/09/16(火) 01:46:58
open-uri

17 :デフォルトの名無しさん:2008/09/16(火) 02:05:09
>>15
require 'open-uri'
a = open('http://www.abc.com/abc.txt') {|f| f.read }
これでいいんだっけ?間違ってたら教えて。

18 :デフォルトの名無しさん:2008/09/16(火) 09:07:25
open-uriのブロックはわりと無意味

19 :730:2008/09/16(火) 15:00:47
質問です

ActiveRecordってスレッドセーフなんですか?

20 :デフォルトの名無しさん:2008/09/16(火) 19:04:42
>>19
多分違うけど、2.2からはthread safeになるかもしれない
ただRuby1.8だとthread safeにしてもあんまりうれしくない

21 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/09/16(火) 23:07:20
なあ、マシン名、ユーザーID、パスワードはマジなのか?
ここまで露骨だと釣りっぽい気もするが。

23 :デフォルトの名無しさん:2008/09/16(火) 23:41:58
すみません、書き込んだ瞬間気付いてパス変えました;;

誰かのサンプルを参考にしちゃろうとググってみても全くヒットしないですね・・・
もしかするとRubyでimapっていうのがあまりお勧めできないのかしら
公式マニュアルだけでは何とも理解に時間がかかるので、書籍を買った方が良さそうですね

24 :デフォルトの名無しさん:2008/09/16(火) 23:44:44
本なんて買うだけ無駄

25 :デフォルトの名無しさん:2008/09/16(火) 23:51:13
>>23
ぐぐったらこんなのあったけど。ダメかな。
http://www.caliban.org/ruby/rit.shtml

26 :デフォルトの名無しさん:2008/09/17(水) 00:15:04
use the source >>21


27 :デフォルトの名無しさん:2008/09/17(水) 00:15:52
IMAPについての知識はあるんだよね

28 :デフォルトの名無しさん:2008/09/17(水) 02:47:45
rubyって自分のパスワード2ちゃんに
書くようなマヌケが多いの?

29 :デフォルトの名無しさん:2008/09/17(水) 07:23:00
Rubyなんて使ってるとアホになるよ

30 :デフォルトの名無しさん:2008/09/17(水) 12:42:52
自動プロクシ設定スクリプト環境でのrubygemsの使い方を教えて下さい

31 :デフォルトの名無しさん:2008/09/17(水) 13:36:39
パソコンのハードディスクに
「a.txt」
ってファイルを作る。


↑これってできる?

32 :デフォルトの名無しさん:2008/09/17(水) 15:16:56
>>31
できる

33 :デフォルトの名無しさん:2008/09/17(水) 16:21:04
>>31

File.open("a.txt", "w"){|f|
# ここでゆっくり好きな処理していってね!
}


34 :デフォルトの名無しさん:2008/09/17(水) 18:00:02
ruby -rfileutils -e "FileUtils.touch('a.txt')"


35 :デフォルトの名無しさん:2008/09/17(水) 20:53:08
ruby -e "(/mswin32|mingw|cygwin/===RUBY_PLATFORM)? `echo off > a.txt` : `touch a.txt`"

36 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/09/17(水) 23:14:14
send(:symbol, args...)じゃ簡単にしたことにならないん?


38 :デフォルトの名無しさん:2008/09/17(水) 23:25:23
>>37
サンクス!!

39 :デフォルトの名無しさん:2008/09/18(木) 08:22:27
>>33-35

どれが正しいの?
なんでコードだけ張って
日本語の解説が無いの?

40 :デフォルトの名無しさん:2008/09/18(木) 08:34:19
どれも正しい、>>35はちょっとイタダケナイけど
日本語の解説はリファレンスマニュアルでも読んどけ

41 :デフォルトの名無しさん:2008/09/18(木) 10:49:11
>>36
Ruby的には
def funcall(x)
return yield(x)
end

x = 10
funcall(x) { x + 1 }
なんだよね。
でも関数合成的に使うには向いてないかも。

42 :デフォルトの名無しさん:2008/09/18(木) 17:52:57
Enumerable#all? と Enumerable#any? について質問です。
要素が空の場合はどういう結果になるのでしょうか?

手元のrubyでは all? が true 、any? が false を返すようですが
マニュアルには要素が空の場合については書かれていないので
要素が空の場合は処理を分けた方が無難でしょうか?

43 :デフォルトの名無しさん:2008/09/18(木) 19:14:28
>>42
数学的にはその挙動であってるはずだから、マニュアルに書いてなくても、その挙動を信じていいと思うよ


44 :デフォルトの名無しさん:2008/09/18(木) 19:16:10
あ、これはマニュアルの不備だね
論理的な動作ではなく、Enumerable の内部処理に依存してる






って 1.8 でそれかよ

45 :デフォルトの名無しさん:2008/09/18(木) 22:39:17
rubyの勉強をはじめてみたいのですが、
まず、なにとなにとなにを
ダウンロードしてインストールすればいいでしょうか?

OSはWindowsです

46 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/09/19(金) 00:04:07
スレッド使ってるとよく出ますな

49 :デフォルトの名無しさん:2008/09/19(金) 01:51:19
>43-44
ありがとうございます。そのまま行きます。

50 :デフォルトの名無しさん:2008/09/19(金) 03:30:54
FAQだったらすみませんが、質問です。

Rubyのprivateメソッドやインスタンス変数は、Java や C++ のような完全な
隠蔽ではないようです。親クラスのprivateメソッドやインスタンス変数を、
子クラスで知らずに上書きしてしまう可能性があります。

この上書きを避けるには、どのようにしたら良いのでしょうか?親クラスの
privateなメソッドやインスタンス変数の名前をすべて把握する以外にないの
でしょうか?

特に、トップレベルで関数を定義することが、Objectクラスにメソッドを追加
することと同じなので、気づかずに既存のメソッドを上書きしてしまいそうで
不安です。


51 :デフォルトの名無しさん:2008/09/19(金) 03:33:16
開発者同士でしっかり話し合う

52 :50:2008/09/19(金) 04:18:50
Rubyの言語仕様や、コーディングの定石による対処法をお願いします。

特に不慣れなフレームワークを使っているときなどに、既存の関数の誤った上
書きによってトラブルが起こるのを避けたいのです。


53 :デフォルトの名無しさん:2008/09/19(金) 08:21:08
適当に思いついたのを書いてみる

インスタンス変数の上書きは継承ではなく委譲を使うことで回避
フレームワークの都合等で継承せざるを得ない場合は、できるだけ
特殊な変数名を使う
> @HOGE @___hoge___ @projNo_hoge ...
これらの変数もHashや構造体等で入れ子にする事で定義数を減らす
> @projVar[:item] @projVar.item ...

メソッドの上書きはデバッグモード(ruby -d)の出力を確認
独自クラス定義前と定義後のclass#methods(等)の結果を比較

54 :デフォルトの名無しさん:2008/09/19(金) 08:34:32
Win2000でrubyをはじめたいんだけど、
なんでパッケージが6つもあるの?

どれを入れたらいいのか、
わからないじゃん

55 :デフォルトの名無しさん:2008/09/19(金) 08:45:37
言語仕様が無いのでいろんなものができてしまいました。

56 :デフォルトの名無しさん:2008/09/19(金) 09:10:02
rubyでCGIゲーム作るって
イバラの道?

57 :デフォルトの名無しさん:2008/09/19(金) 09:18:01
てか>>50のやり方はスクリプトの書き方(ライブラリの利用の仕方)としてなんか間違ってね?という気はするんだが

58 :デフォルトの名無しさん:2008/09/19(金) 09:20:47
>>56
どんなゲーム作りたいかにもよるが、CGIべったりなPHPとかで作るよりはめんどくさい

59 :デフォルトの名無しさん:2008/09/19(金) 10:06:20
>>58
だとしたらCGIゲーム部分(ブラウザで見る部分)はPHPで作って、
専用ブラウザはruby(RPGツクールVX)ってしたほうがいいかな。

でもそれだと2つの言語を覚えないといけないんだよね。

60 :50:2008/09/19(金) 11:05:33
>>53
丁寧なご説明、ありがとうございます。ですが、結局「気をつける」以外に無
いようで、少々残念です。

アンダースコアで始まるなどの特殊な変数名は、逆にフレームワーク側も衝突
回避を意図して多用している可能性があり、結局、変数名にプロジェクトごと
のprefixをつけたり、 instance_variables でこまめに確認したりするしかな
いように見えます。

しかしこれでは、グローバル変数しかなかった時代と変わらないと思います。
むしろ、メタプログラミングによって変数名やメソッド名がgrep検索できなく
なったRubyコードでは、名前の衝突の危険性は増しているとすら思います。

PHP5には完全なprivateがあり、Pythonにはマングリングという仕組みがあり
ます。Rubyにそれに類するものがないのは意外でした。

しかしRuby1.9でも変更される予定は無いようなので、実用的にはさほど困ら
ないものなのかもしれません。

ruby -d は知りませんでした。活用させていただきます。


>>57
53さんもおっしゃるとおり、フレームワークに継承を強制される場合をお考え
ください。
http://www.gesource.jp/weblog/archives/2007/06/rubyprotectedjavac.html
> フレームワークを使っていると、知らないうちに基底クラスのメソッドをオー
> バーライドしてしまい、予期せぬバグに悩まされたりします。


61 :デフォルトの名無しさん:2008/09/19(金) 11:05:54
rubyインストールしてみた。
ActiveRuby1.8.7いれてみた。

次、エディタは何使えばいい?

62 :デフォルトの名無しさん:2008/09/19(金) 11:16:11
>>61
RDE

63 :デフォルトの名無しさん:2008/09/19(金) 11:35:29
ActiveRubyっていうのをいれたんだけど、
本当はOne-Click Rubyっていうのもあったの?

どっちがよかったの?
なんで統一しないの?
なんでインストーラーがいっぱいあるの??

64 :デフォルトの名無しさん:2008/09/19(金) 11:41:03
One-Click RubyのほうがPATHもセットしてくれるからいいと思う

65 :デフォルトの名無しさん:2008/09/19(金) 11:41:48
>>60
不味いよね〜という話にはなっていて、いくつかの解決策も検討されているようだが
まだ手が回ってないっぽい
ttp://www.rubyist.net/~matz/20060218.html#c05

66 :デフォルトの名無しさん:2008/09/19(金) 11:42:57
1.9は大きな変更しないってことになったから

67 :デフォルトの名無しさん:2008/09/19(金) 11:55:21
>>63
ActiveScriptRubyは元々の目的が違うからじゃないかな
そもそも、本来は初心者向けのセットじゃないし

68 :デフォルトの名無しさん:2008/09/19(金) 11:55:27
>>62
RDEいれてみた。abcって表示できた。
これでいいのかな。

69 :デフォルトの名無しさん:2008/09/19(金) 12:24:08
http://kazato.run.buttobi.net/cgi-bin/material/src/vm002_0328.png

RDE
文字が重なるんだけど、どこの設定を見ればいい?

70 :50:2008/09/19(金) 12:27:01
>>65
ありがとうございます。なるほど、問題視はされているのですね。

私自身はRailsを業務で半年ほど使った経験があるのですが、クラス継承にお
いて名前空間が独立していないことを途中で知って、たいへん怖くなりました。
自分の書いてきたコードが安全かどうか、確証がないと思ったからです。

しかし、「初めてのRuby」にはこのことは何も書いてありませんでした。ネッ
トでもそれほど多くの声は見つかりません。Ruby コミュニティでこれはあま
り重大な問題だとは考えられていないということなのでしょうか?

しかし、>>53さんのおっしゃるようなことに絶えず注意し続けなければならな
いなら、コーディングに手間がかかって大変だと思うのですが。

ほかにも、クラスが通常はオープンで、requireによってどんどん書き換えら
れていくなど、Rubyは名前空間についてはきわめて楽観的な言語だという印象
があります。できる限り名前空間を独立させるPythonとは、まったく逆の方針
に見えて興味深いです。


71 :デフォルトの名無しさん:2008/09/19(金) 12:32:55
>>50
local visibilityとかいう新機能とは違うのかな。
ぶっちゃけ1.9使ったことないから適当だけど。。

あと、最近気付いた妙な事例。
http://www.ruby-lang.org/ja/man/html/Matrix.html
> Matrix#[i, j] = x
> (i,j)要素をxに変更する。
> このメソッドは、matrix.rbに定義されていない。以下に、その定義と使用例を示す。

なんて書いてあるけど、実は
http://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 :デフォルトの名無しさん:2008/09/19(金) 12:35:51
>>69
そのテキストエリアで右クリック - [設定] - [フォント]を適当にいじる
大きくするなり、変えるなり

73 :デフォルトの名無しさん:2008/09/19(金) 13:08:58
>>71
Rubyの数学モジュールは存在が適当
マトモな人は使わない

74 :デフォルトの名無しさん:2008/09/19(金) 13:12:34
>>70
実行時にほぼ全てをevalで改変できるのはRubyの特徴
だからこそ、初期モックアップに向いていて、大規模開発に向かない

75 :デフォルトの名無しさん:2008/09/19(金) 13:15:01
「○○ができる」という長所と、「○○ができてしまう」という短所に関しては、
どうしても共存していく以外無いものなぁ。

76 :デフォルトの名無しさん:2008/09/19(金) 13:15:59
>>74
だよなあ
まあ、制御できたら用途によっては便利だろうなとは思う

というより、そういうのは単にそのフレームワークが行儀悪くてマニュアル不足で邪悪なだけなのでは…
「普通」は、トップレベルにメソッドを定義したりしないし、自身を継承させることを是としない

77 :デフォルトの名無しさん:2008/09/19(金) 13:20:28
>自身を継承させることを是としない
どんなアホ設計だよ

78 :デフォルトの名無しさん:2008/09/19(金) 13:21:18
>>76
> 自身を継承させることを是としない
あ、やっぱそうだよね、「カスタマイズは継承で」っていうモジュール設計はよくないよな

79 :デフォルトの名無しさん:2008/09/19(金) 13:22:35
>>73
実用性の面ではそんな雰囲気を感じるけど、
まあ検討材料としてはw

80 :デフォルトの名無しさん:2008/09/19(金) 13:23:07
c++のほうがまともだな

81 :デフォルトの名無しさん:2008/09/19(金) 13:25:02
>>73
別に誰も損しないんだから、もうちょっと良くなってもいいのにね、あれ

82 :デフォルトの名無しさん:2008/09/19(金) 13:51:21
ちなみにMatrix#[]=云々はこのスレから

http://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 :デフォルトの名無しさん:2008/09/19(金) 14:21:45
>>72
できた。

84 :デフォルトの名無しさん:2008/09/19(金) 14:26:59
rubyをインストールして、
エディタも動くようになったんで、
初心者向けのWEB上の入門サイトを
読みたいんだけど、どれを読めばいい?

85 :デフォルトの名無しさん:2008/09/19(金) 14:30:44
http://www1.tf.chiba-u.jp/~shin/tutorial/

86 :デフォルトの名無しさん:2008/09/19(金) 15:24:16
http://kazato.run.buttobi.net/cgi-bin/material/src/vm002_0329.png

ここのフォントの大きさを、
最初から大きくしたいのですが、
どこの設定をいじればいいですか?

いまは、エディタを起動するたびに
設定しなおしてます。

これを、最初からというか
設定を保存したいのです。

一回ごとに毎回、毎回設定するの
めんどいですからね。

87 :デフォルトの名無しさん:2008/09/19(金) 15:33:45
RDEで「こんにちは」って打ったら、
めちゃめちゃに文字化けするんですけど??

それでいて、実行すると、ちゃんと表示されるんですけど??

88 :デフォルトの名無しさん:2008/09/19(金) 15:37:13
RDEってもしかしてPerlでも使えるの?

89 :デフォルトの名無しさん:2008/09/19(金) 15:47:14
>>87-88
聞くよりもまず自分で模索するようにしてください

文字化けはたぶんエディタのフォント設定のせい。perlでも一応使える

90 :デフォルトの名無しさん:2008/09/19(金) 15:48:14
>>87
は自分で調べたら解決したのでもういいや

91 :デフォルトの名無しさん:2008/09/19(金) 15:48:55
>>89
perlで使うときは、perlのexeはどこに設定するの?
もしかして、rubyのexeのところにいれるの?
キモー

92 :デフォルトの名無しさん:2008/09/19(金) 16:40:15
a = open('http://www.2ch.net/warn.txt') {|f| f.read }

これが動きません。
ひょっとして、ウチだけ???

93 :デフォルトの名無しさん:2008/09/19(金) 16:41:34
require 'open-uri'
a = open('http://www.2ch.net/warn.txt') {|f| f.read }
print a;



↑これで動きました。

マジで感動。

94 :デフォルトの名無しさん:2008/09/19(金) 17:46:17
長い行で改行入っちゃうときはどうしたらいいの?

print
"a";

95 :デフォルトの名無しさん:2008/09/19(金) 18:06:34
>>94
ここはあなたの質問場ではありません

96 :デフォルトの名無しさん:2008/09/19(金) 18:51:05
RGSS2なんですけど、requireが使えなくて、
必ず、
Kernel.require("C:\\1.rb")

とかって書かないといけないんです。それで、
open-uri.rbを開くと、その中で、また
require uri
とかって書いてあるじゃないですか。またrequireです。
ここでエラーが出るので(requierは使えないよっていう)
すべてのライブラリの中のrequireをKernel.requireに
置き換えないといけないのかな、、、って今思ってますけど、
どう思いますか。

97 :デフォルトの名無しさん:2008/09/19(金) 19:02:19
RGSSは内部動作が独自改変されたRubyなので、普通のRubyの知識では太刀打ちできない
RGSSのマニュアルなりなんなりを読んでくれ

98 :21:2008/09/19(金) 20:33:30
出張のため返信が遅れてしまいすみません
>>25
おお!ありがとうございます!
しかし見てみましたがかなり複雑な感じなんですね・・・
やっぱ色んな状況を想定したり文字コードなんかの処理等でこんなになってしまうんでしょうか
とりあえず俺のような初心者には無理っぽいですのでiPhoneで同じようなこと考えている人がいないか聞いてみることにします

ありがとうございましたおまいら

99 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/09/19(金) 21:42:18
>>100
windowsとrubyの相性が悪いから。
ruby script/generate をすると、
1. 新しいrubyプロセスを起動し、
2. railsと関連ライブラリをすべて読み込んでから
3. scaffoldを実行するから、
そりゃ遅い。とくに 2. が。

102 :デフォルトの名無しさん:2008/09/19(金) 21:42:25
>>94
明らかに文が終わらないことが分かる場合、たとえば
開いたカッコがまだ閉じてないとか、二項演算子の第2項をまだ書いてないとか
の場合は語句(トークン)の間で行を変えていい。
そうでない場合(そこまでが文として正当に解釈しうる場合)は
¥ (円記号またはバックスラッシュ)を書いてから改行。


103 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/09/20(土) 01:38:14
運用にwinなんて使わないだろ?


107 :デフォルトの名無しさん:2008/09/20(土) 01:40:59
>>105
>開発に使っているマシンは圧倒的にwinが多い

Railsだと、世界的にはMacかもしれんぞ。(要調査)



108 :デフォルトの名無しさん:2008/09/20(土) 01:59:53
>>107
わざわざRailsを使うためにMacを買うか?
しかも会社ならなおさらだ。
だからRailsは圧倒的に個人しか使わないんだろうー
やはりちょっとしたサイトはPHP、
中規規模以上はJavaに落ち着いているんじゃない。


109 :デフォルトの名無しさん:2008/09/20(土) 03:35:19
個人 →   rails
数人 →   PHP
中規模 → JAVA

110 :デフォルトの名無しさん:2008/09/20(土) 07:16:22
>>105
>開発に使っているマシンは圧倒的にwinが多い
Rails使いはMacのほうが多い
RailsConf行ってみな、冗談じゃなくてほぼ全員Macだから。
いまだWindows使っているのはJava屋さんだろう

111 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/09/20(土) 07:42:08
RGSSなんだけど、
ツクールXPがRGSS1で
ツクールVXがRGSS2なのね。

そんで、RGSS1はrequire の使用がOKで、
RGSS2はKernel.require って書かないとだめなのね。

そんで、rubyに付属のライブラリ見ると、
中味が全部、require 'uri'
こういう形式で書いてあるのね。

そんで、そのままRGSSで書くと、エラーになるの。

113 :デフォルトの名無しさん:2008/09/20(土) 07:44:04
require 'uri'    ←(1)
↑この形式だとエラーが出る。

require("C:\\uri.rb")  ←(2)
↑この形式だとエラーが出ない。

絶対指定だとエラーがでない。
相対指定?だとエラーがでる。
(2)で書いても、その1行だけはエラーにならないけど、
その行で呼び出したライブラリの中味は
(1)の形式で書いてあるので、そこでエラーになる。

どうしたらいいかな?

114 :デフォルトの名無しさん:2008/09/20(土) 07:46:14
もうプログラミング辞めたほうがいいな

115 :デフォルトの名無しさん:2008/09/20(土) 07:58:10
http://questionbox.jp.msn.com/qa944237.html?StatusCheck=ON

一応ここにも書いてあるけど
いったいどうしたらいいかな。

116 :デフォルトの名無しさん:2008/09/20(土) 08:06:06
RGSSでのライブラリrequireの方法

   $: << File.expand_path(".")
   require "ファイル名"
   Game.exeを起動したディレクトリにあるライブラリをロードする
   "."を相対パスに変更すれば、好きなディレクトリを指定できる


↑あとこれをよくみかけるんだが、
どういうことなんだろう??

117 :デフォルトの名無しさん:2008/09/20(土) 08:16:18
>>112
上でも書いている人がいるが、RGSSはRubyを改造したもので、
改造部分に関するエラーは俺たちには全くわからない

エラーが出る理由も、わざわざそうしている理由もわからない
売り物なんだし、改造した人に聞け

118 :デフォルトの名無しさん:2008/09/20(土) 08:29:19
RDE

出力をDOSプロンプトにするのってどうやるの?

119 :デフォルトの名無しさん:2008/09/20(土) 08:48:23
puts 'abcde ' * 20000

たかがこれだけの出力するのに何秒かかってんだよ

perlだったら3秒で出るのに。

120 :デフォルトの名無しさん:2008/09/20(土) 08:50:20
Rubyに早さを求めるやつなんて初めて見た

121 :デフォルトの名無しさん:2008/09/20(土) 08:50:25
>>119
まあそのへんはコマンドプロンプトに文句言ってくれ
Rubyの処理自体は3秒くらいで終わってる

122 :デフォルトの名無しさん:2008/09/20(土) 09:05:04
RDEで出力を下でなくて
DOSプロンプトに出すにはどうしたらいいの?

123 :デフォルトの名無しさん:2008/09/20(土) 09:12:05
Windowsではirbとかでもイライラするな
irbは返り値の表示の設定ができるが

124 :デフォルトの名無しさん:2008/09/20(土) 09:19:25
最初からDOSプロンプト立ち上げて、
そこから直接コマンドラインで実行したら
3秒でできた。
でもRDEから実行したいんよ。
どうしたらいいかな?
DOSプロンプトに出力する方法ね。

125 :デフォルトの名無しさん:2008/09/20(土) 09:33:56
>>110
東京Ruby会議で「主にMac使ってる人」って質問で6〜7割手をあげてたような気が

126 :デフォルトの名無しさん:2008/09/20(土) 09:38:12
MacというかMacOSXとUNIX系開発言語(って何?)との親和性の高さはガチ
Windowsでもプログラミング環境エディションとか出せばいいのに

127 :デフォルトの名無しさん:2008/09/20(土) 09:45:10
まあみんなカッコよく安楽にプログラミングしたいんだよ
でなけりゃあどべ使い以外にMacが売れる理由がないし、Emacsが死なない理由がないし、Rubyが支持される理由もない

128 :デフォルトの名無しさん:2008/09/20(土) 11:32:09
TextMateだっけ?あれが人気あるらしいね。開発に。
Windowsにも E Text EditorとかIntypeとしてクローン作られてるっぽいけど。

129 :デフォルトの名無しさん:2008/09/20(土) 11:56:29
>>128
クローンはどいつもこいつもシェアウェアでな

いや、別にいいんだが、入金めんどい
成功したら安価版とか作ってくれ

130 :デフォルトの名無しさん:2008/09/20(土) 11:59:26
日本はベクターにないと買うの面倒でかなわん

131 :デフォルトの名無しさん:2008/09/20(土) 13:42:29
str = 'hoge'

これを説明するのって、「ローカル変数 str に 文字列 'hoge' を

   代 入 す る



でいい? 厳密には代入ではなくて他の表現が妥当だとかそういうのはない?

132 :デフォルトの名無しさん:2008/09/20(土) 13:48:28
…めんどくさいので代入でOK
最近の議論とか空気とかを元にしてる初めてのRubyではどう書いてある?

とりあえず、誰も文句は言わないと思うよ
束縛するとか言う言い方してる奴がいたら鼻糞ほじっとけ

133 :デフォルトの名無しさん:2008/09/20(土) 13:51:57
オブジェクトとインスタンスってRubyではどう使い分けますか?

134 :デフォルトの名無しさん:2008/09/20(土) 13:59:47
>>131
つうか代入ってなによ?

135 :デフォルトの名無しさん:2008/09/20(土) 14:06:38
>>134
データと名称の関連付け。なまえをつけること。Naming convention。
Rubyでは初期化宣言と同時に行われるのでちょっとわかりにくい。

というのでどう

136 :デフォルトの名無しさん:2008/09/20(土) 14:23:59
なら「名前をつける」って説明の方が通りがいいんじゃねえか、とおもた。

137 :デフォルトの名無しさん:2008/09/20(土) 14:27:35
RDEで実行を途中で止めるのってどうすればいいの?
ctrl+C押しても止まんないんだけど。

138 :デフォルトの名無しさん:2008/09/20(土) 14:37:30
止めるボタンあります

139 :デフォルトの名無しさん:2008/09/20(土) 14:38:26
緑△アイコンの実行ボタンの隣に、
□アイコンの強制終了ってあるでしょ

140 :デフォルトの名無しさん:2008/09/20(土) 15:22:28
他の言語で代入という概念を知ってるなら代入でいいだろ。

a = Hoge みたいな表現が、名前付けなのは Haskell とかだけど、
そっちとは明らかに違うし。

141 :デフォルトの名無しさん:2008/09/20(土) 16:59:07
RDEはうだつが上がらないし
RDTは糞重いし
もうEmacsしかないじゃないか!

142 :デフォルトの名無しさん:2008/09/20(土) 17:20:29
>>133
クラスをインスタンス化したものがインスタンス

143 :デフォルトの名無しさん:2008/09/20(土) 19:22:08
NetBeans使えば。

144 :デフォルトの名無しさん:2008/09/20(土) 19:35:57
NetBeans以上に重いものなんてこの宇宙に存在するの?

145 :デフォルトの名無しさん:2008/09/20(土) 19:36:51
責任,ですかね.

146 :デフォルトの名無しさん:2008/09/20(土) 20:57:24
>140
他の言語っつってもCの代入とは明らかに違うだろうに。
Haskellの代入とも違うけどさ。

147 :デフォルトの名無しさん:2008/09/20(土) 22:32:07
str = 'hoge'
のように代入された状態で str を使うと 'hoge' という情報を取り出せるという点では
どの言語もだいたい一緒だわな

148 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/09/20(土) 23:31:42
…そういうのはチラ裏スレでやれ

Ruby は nil や false が返って来ない限り真だからな
真偽判定はどんどん書けて気楽だ

150 :デフォルトの名無しさん:2008/09/20(土) 23:38:04
そういやずっと前から思ってたんだけど、Perl とかで整数の 0(や文字の "0")が真偽値の偽とみなされるようになったのってなんで?
ヌル文字とかの関係? 関係ないよね?

151 :デフォルトの名無しさん:2008/09/20(土) 23:48:35
スクリプト言語の初心者スレっぽくてよろしい

>>150
0 を偽にしなかったら 1 を偽にしなきゃいけなくなるじゃないか(-1 でも可)

152 :デフォルトの名無しさん:2008/09/20(土) 23:49:01
さすがRubyスレ
知能が低い

153 :デフォルトの名無しさん:2008/09/20(土) 23:50:28
>>150
Cから発想すればふつー0が偽になるんだろう。
CにもPerlにもboolean型は無いしな。

154 :デフォルトの名無しさん:2008/09/21(日) 05:19:55
http://www1.tf.chiba-u.jp/~shin/tutorial/index.rb?Chapter=10

これってサブルーチンと何が違うの?

155 :デフォルトの名無しさん:2008/09/21(日) 07:53:29
Cで関数のポインタを扱うのとさして変わらない。

156 :デフォルトの名無しさん:2008/09/21(日) 08:00:34
>>155
定義された場所のスコープ(Binding)を受け継いでいるところ

157 :156:2008/09/21(日) 08:05:56
アンカ間違えだけど、指摘と受け取ってもらっても結構
×155
○154

158 :デフォルトの名無しさん:2008/09/21(日) 08:23:27
>>154
手続きオブジェクトは原理的にはサブルーチン、雰囲気では関数ポインタでおk
オブジェクトになってしまってるとこと、>>156の言うように定義時の環境が保存されてるとこが一般的なものとは違うけど

サブルーチンオブジェクトと呼んでもよかったシロモノで、Rubyではたまたま手続きと呼んでるだけに過ぎない
プロシージャ(Proc-edure)とサブルーチンに決定的な違いがないのと同じ

159 :デフォルトの名無しさん:2008/09/21(日) 09:31:58
>>146
> Cの代入とは明らかに違うだろうに。

どう違うの?

160 :デフォルトの名無しさん:2008/09/21(日) 11:17:02
>>133
適当。分かりやすい基準はたぶん無い

161 :デフォルトの名無しさん:2008/09/21(日) 11:22:28
rubyのxamppはどこにあるの?
rubyのCGIとか、railsとかやってみたいんだけど。

162 :デフォルトの名無しさん:2008/09/21(日) 11:39:21
>159
根本的には同じデータのコピーなんだが
Rubyは基本的に「オブジェクトへの参照」を扱うため
代入が基本的に「参照のコピー」になるのに対し
C/C++は参照というクッションが必ずしも存在せず
いきなり「オブジェクトそのもの」を扱うことが出来てしまうため
(参照を扱うなら明示的に参照を扱うよう書く必要がある)
代入が「実体のコピー」(Rubyでいうa=b.dupに近い…がこれも同じではないな)になることが普通にある

163 :デフォルトの名無しさん:2008/09/21(日) 11:45:01
>>161
InstantRails

164 :デフォルトの名無しさん:2008/09/21(日) 12:04:46
>>162
構造体(オブジェクト)のコピーが起こること、を問題とするわけね。

変数の実体が値である(C/C++)か、変数の実体が参照である(Ruby/Java/Python...)か、
という点が違いであって、名前に実体を関連付ける、という「代入」で問題ないんじゃないかと。

165 :デフォルトの名無しさん:2008/09/21(日) 12:56:02
>>150
>そういやずっと前から思ってたんだけど、Perl とかで整数の 0(や文字の "0")が真偽値の偽とみなされるようになったのってなんで?
>ヌル文字とかの関係? 関係ないよね?

Perlは考え方としてCの延長にあるから、booleanがない(つまりfalseがない)からかわりに 0 を偽としている。
RubyはLispやSmalltalkに影響を受けているから、nilとfalseだけを偽にしている。
nullじゃなくてnilってところがポイント。

166 :デフォルトの名無しさん:2008/09/21(日) 13:01:01
0 が選ばれた理由にはなってないな
ビットの 0 と 1 で 0 が negative だったから、が答かと

167 :デフォルトの名無しさん:2008/09/21(日) 13:30:26
"0" が偽である理由としてはちょい苦しいかもな
"0" が 0 に同一視されてると見るか

168 :デフォルトの名無しさん:2008/09/21(日) 13:32:33
perlとかphpは型が曖昧だからまあそんな挙動もするでしょう

169 :デフォルトの名無しさん:2008/09/21(日) 13:37:26
あっちの言語って型付けが弱いんじゃなかったっけ
自動変換されるという便利だが怖い仕様・・・・・・

170 :730:2008/09/21(日) 13:40:32
perlもphpも糞ですよ

171 :デフォルトの名無しさん:2008/09/21(日) 13:49:43
>>148
めんどくさいよな
というかRuby(が参考にしたLisp系列)が条件文のこと優先して動作を作ったというのが正しいのかも

172 :デフォルトの名無しさん:2008/09/21(日) 14:00:41
0が偽のくせに「真としての0」が返って来る関数があるというのがまあ変といえば変
変態だったら誉め甲斐もあるんだが、ただ変なだけでは…

173 :デフォルトの名無しさん:2008/09/21(日) 14:04:12
まあ便利なんだけどねPHP

174 :デフォルトの名無しさん:2008/09/21(日) 14:08:33
それは認めるし、普及言語はどれも大なり小なり批判されるものだが
この挙動は……

175 :デフォルトの名無しさん:2008/09/21(日) 14:09:24
他の言語を学ぶという姿勢は賞賛に値する
Rubyしかできないとかマジ生ゴミ

176 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/09/21(日) 14:31:32
あー、gsubも最初に用意されてる引数の構文の挙動が気難しくてブロックが推奨だったな

178 :デフォルトの名無しさん:2008/09/21(日) 15:42:20
まぁ値が数値型にも文字列型にもなるのはawkからの伝統だしな

179 :デフォルトの名無しさん:2008/09/22(月) 02:23:34
>>163
ありがとう。できたよ。
クッキングなんとかがうごいた。

で、次、これの開発ってどうやればいいの?

180 :デフォルトの名無しさん:2008/09/22(月) 03:37:13
railsのIDEは何を使えばいいの?

181 :デフォルトの名無しさん:2008/09/22(月) 07:16:08
いい加減、本買うかぐぐるかしようぜ。

182 :デフォルトの名無しさん:2008/09/22(月) 10:27:50
おっと質問の仕方が悪かったかな。
数あるIDEの中で、どれを使えばいいのかということ。

183 :デフォルトの名無しさん:2008/09/22(月) 10:32:37
>>182
どれも糞

184 :デフォルトの名無しさん:2008/09/22(月) 10:34:30
機能的にはNetBeandsがかなりがんばってる感じはするがどの程度実用に耐えるかは知らん。

185 :デフォルトの名無しさん:2008/09/22(月) 10:38:09
>>183でFA

186 :デフォルトの名無しさん:2008/09/22(月) 10:45:14
どうせ補間とか望めないからどれ使っても大して変わらん

187 :デフォルトの名無しさん:2008/09/22(月) 10:48:14
Emacsのような単なる単語文字列としての略語展開が一番マシという困った結論に…

188 :デフォルトの名無しさん:2008/09/22(月) 10:52:09
NBのコード補完はかなり強力。いつまでもema糞なんぞにしがみついてないで一度試してみるといい。

189 :デフォルトの名無しさん:2008/09/22(月) 10:57:22
NetBeansの補完は、まあ頑張ってるほうだとは思った
多少いい加減なのは仕方ない

190 :730:2008/09/22(月) 11:01:46
関数とかクラスが畳めるエディタが良いな。

191 :デフォルトの名無しさん:2008/09/22(月) 11:04:19
>>190
関数って何ですか???

実際上はEclipse+プラグインかNetBeansかEmacs/Vimくらいしかないんだから順に試しとけ
Javaの実行環境入れるのめんどくさい?もんくゆーな

192 :デフォルトの名無しさん:2008/09/22(月) 11:07:51
CPUが2Ghz程度しかない前時代のマシンではロクに動作しないので新しいマシン買うこと

193 :730:2008/09/22(月) 11:09:54
>>191

> 関数って何ですか???
まだそんなこと言ってるんですかw
関数と言い張りますよ。

194 :デフォルトの名無しさん:2008/09/22(月) 11:15:51
別に言い張ってて構わないと思うよ
Rubyの用語集にも書いてあるくらいだから

195 :デフォルトの名無しさん:2008/09/22(月) 11:18:09
>>193
クラスに関数があるのか?
あれは多くの言語で「いや、これを関数って呼ぶのはなんか違うな」と判断されてメソッドと呼ばれているものだと思うが
仲間外れはC++くらい?

196 :デフォルトの名無しさん:2008/09/22(月) 11:22:19
C++はメンバ関数だっけか

ともあれ、Ruby学ぶ気ないんだなと思われるのは必定
それによって起こる結果については暴れないことだ

197 :デフォルトの名無しさん:2008/09/22(月) 11:31:56
NetBeansとかは最初に何かするときに10秒くらいかかるのが切ない
同じことを2度目にするときは受忍範囲内なんだが

198 :730:2008/09/22(月) 11:35:27
わかった。
副作用があるものは関数とは呼べないのは同意だけど、
だとしたらプロシージャと呼ぶべき。

それに、メソッドという呼び方をすることがRubyを学ぶことにつながるとは言えない。
俺はもうRubyの大体のことはわかったし、
実際にRubyを使って新しいWEBサービスを稼働させている。

199 :デフォルトの名無しさん:2008/09/22(月) 11:40:45
>>198
なるほど、では君は初心者ではない
このスレから卒業し早々に立ち去りたまえ

200 :デフォルトの名無しさん:2008/09/22(月) 11:43:59
ここは純技術的な質問をするスレであって実のところレベルの高低は問わないのさ。

201 :デフォルトの名無しさん:2008/09/22(月) 11:45:53
>>197
arr = Array.new
arr.m

ここで「arrはArrayだからArray#mapでmap」という判断をして欲しい所存

202 :デフォルトの名無しさん:2008/09/22(月) 11:48:21
>>201
補完試すたびにソース全体をevalしまくりだな

203 :デフォルトの名無しさん:2008/09/22(月) 11:51:36
>>195
やっぱりAdaとかSimulaとか、あっちのほうの言語じゃ
メソッドは何が起源なんだろうか。Smaltalkとか?

204 :デフォルトの名無しさん:2008/09/22(月) 11:59:10
>>201
え、そういう状況に即した判断をするのがIDEの便利なとこなんじゃないの?
そこで「mのつくメソッド全部から選んでね」と表示するんじゃEmacsと変わらんぞ

205 :730:2008/09/22(月) 12:02:49
>>203
アランケイじゃない?
アランケイごときがsmalltalkを考えて、言語をわかりやすく庶民(笑)に伝えるために
オブジェクトにメッセージを送るという考えかたで説明したのが起源じゃないかな。
で、オブジェクトにメッセージを送る「方法」をそのままメソッドと呼んだだけ。
だから、別に「メソッド」は学術的に意味がある言葉ではない。

206 :730:2008/09/22(月) 12:12:21
アランケイがもてはやされるようになったのはC++が出てから。
それまでは普通の胡散臭いタイプの学者のおっちゃん。
ただ単に運良くオブジェクト指向が流行ったからアランケイがもてはやされるようになったというだけ。
オブジェクト指向は流行るべくして流行ったというわけでもないから、
本当に運が良かっただけと言うべきだね。
アランケイの言葉を未だに使い続ける理由はそれだけだね。

207 :デフォルトの名無しさん:2008/09/22(月) 12:26:13
はいはい初心者スレでつまんない自説自慢はやめてね

208 :デフォルトの名無しさん:2008/09/22(月) 12:31:01
アランケイがもてはやされるようになったのはMacが出てから。
それまでは普通の胡散臭いタイプの学者のおっちゃん。
ただ単に運良くGUIが知られてアランケイがもてはやされるようになったというだけ。
SmalltalkタイプのGUIは流行るべくして流行ったというわけでもないから、
(ジョブズがたまたまAltoで動くSmalltalkシステム=暫定Dynabookを見て感動しただけで、
Alto向けにはSmalltalk以外にもStarとかのいろんなタイプのGUIがあったから)
本当に運が良かっただけと言うべきだね。
アランケイの言葉を未だに使い続ける理由はそれだけだね。

209 :730:2008/09/22(月) 12:37:54
ともかく、メソッドをプロシージャと呼ぼうが、C言語的な意味で関数と呼ぼうが問題ないわけ。
メソッドと言わないと通じないというわけでもないしね。

210 :デフォルトの名無しさん:2008/09/22(月) 12:52:54
>>209
どう呼んでもいいのならメソッドと呼べ
Rubyではそれをメソッドと呼ぶ

211 :デフォルトの名無しさん:2008/09/22(月) 12:58:27
うむ、結論が出たな

212 :デフォルトの名無しさん:2008/09/22(月) 14:22:12
>>210
どう呼んでも良いことを認めたら、それこそ自由に呼んで良いんじゃないの?w

213 :デフォルトの名無しさん:2008/09/22(月) 17:38:14
じゃあ俺は各ソースファイルのことをモジュールと呼ぶことにしよう
どう呼んでも問題ないんだよな?

…とまあ、そういう話があるので

「Rubyで def や define_method で定義するのは全てメソッド
 一部メソッドは関数と呼ばれることがあるが
 それらも全てメソッドであることをお忘れなく」

程度にしておこうな
まあ、モジュールほど紛らわしい単語ではないから
関数と書かれていても解るが

214 :730:2008/09/22(月) 18:30:43
うざいから消えてくれないかな

215 :730:2008/09/22(月) 18:31:48
おまえがな

216 :730 ◆KL6EsW0z.s :2008/09/22(月) 18:32:32
これで満足か

217 :デフォルトの名無しさん:2008/09/22(月) 18:37:29
自覚してんじゃんwww

218 :デフォルトの名無しさん:2008/09/23(火) 18:50:38
netbeansいれてみたんだが。

新規railsプロジェクト、で、
サーバーのところで
webrickってのしか選べないんだが、
これってなんなの?

WEBサーバーって言ったらアパッチじゃないの?

219 :デフォルトの名無しさん:2008/09/23(火) 18:52:04
netbeansいれてみたんだが。

すでにinstantrailsで、railsはインストール済みなのだが、
「railsがインストールされていません」
というメッセージが出てきて、勝手にまたrailsをインストール
された。つまり、今パソコンにrailsが2つ入っているわけで
無駄このうえない。どういうこと?

instantrailsのrailsと、
netbeansのrailsと、使い分けろってこと?

220 :デフォルトの名無しさん:2008/09/23(火) 19:16:13
「実行」ってやったら勝手に
ブラウザ起動して、
localhost:3000がアドレスに入って、
サンプルのページが出てきたんだが、
これってもしかして、netbeans起動中は
勝手にWEBサーバーも起動しているということか?

221 :デフォルトの名無しさん:2008/09/23(火) 19:53:18
そろそろ解決してる頃だな
自分で調べりゃ早いのに

222 :デフォルトの名無しさん:2008/09/24(水) 09:18:36
http://www.thinkit.co.jp/cert/article/0605/2/2/4.htm

このページに書いてあるとおりにやっても
うまくいきません

223 :デフォルトの名無しさん:2008/09/24(水) 09:19:45
RadRailsの右下ペインの「Servers」を選択して
「AddressBookServer」を起動します。
ステータスが「Started」になれば、Web
サーバの起動は完了です。


↑こう書いてあるのですが、
ステータスが
starting...
で10秒たって、
stopped
になってしまいます。

なんでサーバーがスタートしないんでしょうか?

224 :デフォルトの名無しさん:2008/09/24(水) 12:06:26
http://www.rubylife.jp/rails/erb/index2.html

とりあえずここまでできた。
IDEを使わずコマンドラインでやるのが
結局一番早かった。

225 :デフォルトの名無しさん:2008/09/24(水) 12:57:46
うごいたーーーーーーーーーーーーーーー
ファイヤーウオールで
アプトナの通信をブロックしてたのが
原因だった

アプトナの通信を
「すべて許可する」
にしたら、マニュアルの通りに動いたーーーーーーーー
ガオーーーーーーーーーーーーーー

226 :デフォルトの名無しさん:2008/09/24(水) 13:18:38
なんでwebrickとモングレの2つの
サーバーがあるの?

227 :デフォルトの名無しさん:2008/09/24(水) 13:19:23
ルービーっておかしいわ

まずインストーラーの段階からして3つあるし、
エディターは3つあるし
IDEは3つあるし
サーバーは3つあるしで、

いいかげんにしろっての。

228 :50:2008/09/24(水) 14:12:41
すみません。大変遅くなりました。都合でネットにアクセスできなかったもの
で。もう少しここで話をさせてください。

>>71
> local visibilityとかいう新機能とは違うのかな。
ちょっと調べてみたのですが、2006年ごろで話は止まっているのではないでしょ
うか?

>>74-76
すみませんが、私が問題視しているのはevalではないのです。evalを持つ言語、
オープンクラスを持つ言語に共通する点ではなく、Ruby固有のクラス実装を私
は問題視しています。

具体的には、以下のようなことです。

・あるクラスを継承するときに、親クラス名.methods などを頻繁に実行して、
存在するすべてのメソッドやインスタンス変数の名前を確認して、衝突を避け
なければならない。

・あるクラス内だけで使う、公開しないツールのようなメソッドを作れるよう
な名前空間がどこにもない。

これらを解決する方法が、コーディング規約によるプレフィックスのみという
のは、ずいぶん原始的で、JavaやC++に慣れた人なら不自由を感じると思うの
ですが。しかもRuby の大クラス主義で、既存のプロパティの数は膨大です。

そこで、皆さんがどのように感じておられるのか、お聞きしてみたいと思いま
したが、このスレの反応を見てもやはりあまり問題視されていないようで、こ
れはやはり意外でした。


229 :50:2008/09/24(水) 14:13:55
>>76-78
私が言及していた、継承を必要とするフレームワークとは Rails のことです。
継承が危険だとはよく言われますが、、継承を多用しなければ Railsの簡潔さ
はかなり損なわれたことでしょう。

継承そのものが悪という視点には、あまり賛同できません。例えばプロトタイ
プベースの言語なら、委譲でも同様の問題が起こるからです。継承にせよ委譲
にせよ、他のオブジェクトへのプロパティの探索が自動的に行われる仕組みが
ある限り、この問題は必ず起こるでしょう。それは簡潔さとのトレードオフです。

しかしここでは、継承の善悪にはこれ以上踏み入りたくないのです。私は、
Rubyにおいては継承がいっそう危険になっているという点に、話を絞りたいです。

そもそも、継承の良し悪しや好き嫌いにかかわらず、私たちは業務でRailsを使
わざるを得ません。


>>76
トップレベルにメソッド定義というのは、フレームワークが強制するという話
ではなく、初心者プログラマが知らずに作ってしまう危険性を言っています。

トップレベルの関数がObjectクラスのprivateメソッドだというのは確かにう
まい仕組みだと思いますが、これを知っている人は、Ruby利用者の半数以下だ
と思います。これは直感的に予想しづらい、危険な仕様ではないでしょうか?

何も知らないでトップレベルに def object_id; 0 end などと書けば、すべて
のオブジェクトインスタンスのidが0になってしまうのです。そしてこれを書
くことは、プロジェクトに関わるどの人間にも可能なのです。


230 :50:2008/09/24(水) 14:15:25
最後に、自分の印象ですが、

C++ ... アクセス、改変してはいけないものには、ユーザがアクセスする方法
が決して存在しない。

Python, Java ... アクセス、改変してはいけないものは、ユーザが意図しな
ければアクセス、改変されないが、意図すれば誰もが自由にアクセス、改変できる。

Ruby ... アクセス、改変してはいけないものを保護する方法が乏しく、ユー
ザが意図せずにアクセス、改変してしまうことがある。

つまり、私が問題にしているのは、アクセス、改変が可能かどうかではなく、
それを意図していないのに誤ってアクセス、改変してしまう危険についてなの
です。

この二者は、Rubyはフレキシブルな言語だという主張によって、しばしば混同
されがちだと思います。フレキシブルなのは結構ですが、自分の足を撃ちたく
はないのです。


以上です。長々と失礼しました。

231 :デフォルトの名無しさん:2008/09/24(水) 14:28:43
>>230
あなたはC++、Python、Javaを10年くらいやりこんで、
それで今回、rubyに入ってきたような人なの?

かなりプロフェッショナルな印象を受けるが。

232 :デフォルトの名無しさん:2008/09/24(水) 14:42:40
>>228-230
主張はだいたい合ってるし、正しい。
ただ、この問題がRubyで簡単に解決できるかというと、たぶん実装の都合で難しいんじゃないかな。
Pythonのmanglingだっけ、あれが欲しいとは思うんだけど、class_evalとかinstance_evalとかあるRubyでPythonと同じように実装可能かと言われると、分かんない。
ただ、manglingは(不細工ではあるけど)手動でできるので、mangling程度の隠蔽でよければ、手動で頑張ればできるということになる。手動だとほんと不細工だけど。

あとは、Rubyに限らずスクリプト系はどれもそうだけど、「問題があったら直せばいい」という精神をもつしかないと思うよ。
たしかにかぶる可能性はあるけど、そんなにしょっちゅうかぶることはないし、かぶったらかぶったで直せばいい。そんな感じ。


233 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/09/24(水) 15:26:38
RoRってwebrickを作動させておけば
アパッチいらないんじゃん。

なんでアパッチインストールさせたのさ?

235 :デフォルトの名無しさん:2008/09/24(水) 17:26:47
>>233
exeファイルをダウンロードしたから、それをアンチウィルスソフトがチェックしているんじゃない?
アンチウィルスソフトを一時的に無効にしてみるとか。

236 :デフォルトの名無しさん:2008/09/24(水) 21:17:17
>>227
Java の IDE とアプリケーションサーバがいくつあるか調べてから文句言ってくれ。

237 :デフォルトの名無しさん:2008/09/24(水) 21:21:36
>>229
以下を守れば大丈夫。
・自分の足を打ちがちな馬鹿にはコードを触らせない
・Railsのフレームワーク部分のコードは一通り読む

238 :デフォルトの名無しさん:2008/09/24(水) 21:26:43
「エディターが3つ」の意味がわからない

239 :デフォルトの名無しさん:2008/09/24(水) 21:31:05
>>238
エディターズレビューとかあんじゃん

240 :デフォルトの名無しさん:2008/09/24(水) 21:37:20
音声データをデジタル化するときに
周波数16kHzだから
".unpack("s*") をつかって数値化はできたんだけど
数値が25000くらいあって。

その単語は1.3秒くらいなんだけど
単位がわからなくて。わかるひといますか?

241 :デフォルトの名無しさん:2008/09/24(水) 21:41:32
> 周波数16kHzだから.unpack("s*") をつかって数値化
日本語でおk
てか周波数と整数のBit数ってなんか関係あるん?
書いててなんかありそうな気もしてきたが、たぶん関係ないんじゃね?

というかそういうバイナリ扱うのはRubyは不得意なんだが外部プログラム使えないのか

242 :デフォルトの名無しさん:2008/09/24(水) 21:43:38
まあこれ完全に専門的な内容だから
知らない人かなり多いのかな。。。

243 :デフォルトの名無しさん:2008/09/24(水) 21:46:22
まあRubyをメインにやるような人はふつう知らない
外部プログラム使えというアドバイスはけっこう正しいかと

244 :デフォルトの名無しさん:2008/09/24(水) 21:47:27
デジタル化されてんじゃん

245 :デフォルトの名無しさん:2008/09/24(水) 21:48:43
このデータをフーリエ変換しないといけないんだけど
単位がわからなくてはね。

246 :デフォルトの名無しさん:2008/09/24(水) 21:49:30
240はアホすぎて自分が何をやりたいのか説明できてない

247 :デフォルトの名無しさん:2008/09/24(水) 21:52:22
スレ違い

サウンドプログラミング4
http://pc11.2ch.net/test/read.cgi/tech/1185340076/

248 :デフォルトの名無しさん:2008/09/24(水) 21:53:39
音声データから
特徴抽出したい。
これは普通ツールによって行われるが
今自分で作ってる

以上

249 :デフォルトの名無しさん:2008/09/24(水) 21:55:39
247のスレで聞くからもういいです。
アホ扱いされるのなら

250 :デフォルトの名無しさん:2008/09/24(水) 21:56:41
RIFFだったら http://www.kk.iij4u.or.jp/~kondo/wave/ の通りかと。
フォーマットの仕様読んでわからないなら諦めたほうが。

251 :デフォルトの名無しさん:2008/09/24(水) 21:57:16
まあ Ruby はあんま関係ないな
そのファイル形式の構造の問題だ

252 :デフォルトの名無しさん:2008/09/24(水) 22:58:25
Rubyとは関係ないかもしれないのですが、Rubyで実装しているのでここで質問させてください。

普通、ウェブアプリで検索とかのリクエスト送って、リクエストの結果を
送ったページと同じページに表示させる場合、リクエストを送るのは同じページのメソッドにしたほうがいい?

なんか一緒に作ってる人が
Aページ⇒Bメソッド⇒Aページのメソッドって感じにしててどうなのかな?って思ったんです

なんかわかりにくくてごめん

253 :50:2008/09/24(水) 22:58:28
>>231
プロフェッショナルとは恥ずかしくてとても言えませんが、経歴と年数はだい
たい当たっています。


>>232
大変参考になりました。ありがとうございます。

instance_eval等ですか。なるほどこれがあると、マングリングとの両立は難
しい気がします。念のため確認しましたが、Pythonには instance_evalに当た
る機能はないようです。

内部プロパティ名のコーディング規約は、なるほど手動マングリングが、不恰
好ですが現実的ですね。

最後に、名前は早々衝突しないし、もし衝突したなら直すというのが、Rubyコ
ミュニティ(というかスクリプティング界隈)の精神なのですね。すると自動
テストが、推奨というより必須になるわけですね。当たり前のことですが、改
めて目からうろこが落ちました。

質問してよかったです。ありがとうございました。

254 :デフォルトの名無しさん:2008/09/24(水) 23:00:29
Rubyとは関係ないかもしれないのですが、Rubyで実装しているのでここで質問させてください。

普通、ウェブアプリで検索とかのリクエスト送って、リクエストの結果を
送ったページと同じページに表示させる場合、リクエストを送るのは同じページのメソッドにしたほうがいい?

なんか一緒に作ってる人が
Aページ⇒Bメソッド⇒Aページのメソッドって感じにしててどうなのかな?って思ったんです

なんかわかりにくくてごめん

255 :デフォルトの名無しさん:2008/09/24(水) 23:01:25
2回送ってしまった、スマン

256 :デフォルトの名無しさん:2008/09/24(水) 23:03:32
>>254
Ruby関係ないしそもそもそのへんは設計どうでもいいからわかりやすいほうにしろ
メソッドって言葉の使い方間違ってねーか?まあいいや

257 :デフォルトの名無しさん:2008/09/24(水) 23:05:17
>>246
どっちかというと基本から何をどうすればいいのか分かっていないのでは。

>>240
音声圧縮についてのことでもなさそうだし、普通のPCMの話だとおもうけど
音声がどのようにしてデジタルに符号化されているのかを理解していれば、
単位が分からんとか言い出すはずがないんだが。

データサイズ[bit] = 量子化ビット数[bit] * サンプリング周波数[Hz] * 時間[s] * チャンネル数

ここまではRubyと何の関係もないのでもう一つ言っとくと、packでの"s"は
その環境のエンディアンに依存しているので、よそでは動かないかもよ。
ちゃんとフォーマットにあわせて"n"とか"v"を使うように。

258 :デフォルトの名無しさん:2008/09/25(木) 00:42:13
>>253
>最後に、名前は早々衝突しないし、もし衝突したなら直すというのが、Rubyコ
>ミュニティ(というかスクリプティング界隈)の精神なのですね。すると自動
>テストが、推奨というより必須になるわけですね。当たり前のことですが、改
>めて目からうろこが落ちました。

いちおう補足しておくけど、エラーはテストで見つかるけど、もしコンパイル時に見つかるならそれにこしたことはない。そっちのほうが作業効率いいしね。
ただ、実はコンパイル時の検査は必須ではなく、テストで見つけるというアプローチでも十分実用的というだけ。
いままで「コンパイル時にできるだけエラーを見つけないといけない」「名前の衝突による思わぬバグを防ぐような仕組みを用意してないといけない」と
思いこんでいたんだけど、実はそうでもなかったよ、慣れればなんとかなるよ、という経験をしてほしいなー

というおっさんのひとりごとでした。

259 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/09/25(木) 00:58:11
>>252
PRGってやつ?

261 :デフォルトの名無しさん:2008/09/25(木) 07:30:35
>258
ある程度慣れた人だと、shebang や require 以外で最初に書くのは
module になる気がする
要るか判らんが、とりあえず空間切っておくか、みたいな

262 :デフォルトの名無しさん:2008/09/25(木) 09:05:11
アホばかりでやんなっちゃうよ

263 :デフォルトの名無しさん:2008/09/25(木) 12:11:04
表示端末の文字エンコードを自動判別して変換することはできますか?
ファイル内容を puts した瞬間に
「しまったこれShiftJISかようわ矢印キー効かね」
というようなことを大多数の端末で避けたいです


264 :デフォルトの名無しさん:2008/09/25(木) 12:21:02
>>263
ENV に情報がなければ無理だろな
Windowsのコマンドプロンプトでは特に情報がないようだ

265 :デフォルトの名無しさん:2008/09/25(木) 15:36:52
あー、スクリプト例で文字列を puts とかさせるときちょっと困るね
toeuc 決め打ちしておくのも変だし

266 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/09/28(日) 14:35:51
Rubyでバイナリを16進数文字列に変換するのはどうしたらできますか。
packとかunpackがわかりくすぎて、理解できません

270 :デフォルトの名無しさん:2008/09/28(日) 14:55:34
packとか使え
packはC参考にしれ

271 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/09/28(日) 17:00:00
http://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 :デフォルトの名無しさん:2008/09/28(日) 18:47:03
RoR動くレンタルサーバーって
高いところしかないの?

さくらのライトプランで動かないの?

なるべく月500円以下のところを
紹介してほしいんだけど。

275 :デフォルトの名無しさん:2008/09/28(日) 18:58:38
500円以下はありえない

そもそものRoR動かすこと自体がかなりサーバ負荷の高い行為だから、
収容人数の多い安いレンタルサーバでは実用的な速度ではまず動作しない

専用サーバと呼ばれる、少人数あるいは自分たちだけの買い取りサーバを使うんだね

276 :272:2008/09/28(日) 19:02:27
>>273
ありがとうございます。

a.xy=(何か)
という形は単なるメソッド呼び出しだと思っていたのですが、
実際には代入用の特別な呼び出しで、「何か」の部分は代入の右辺に
使えるような式である必要があり、普通のメソッドと同じようには
いかない、ってことなんでしょうか。

結局、調査の末これならできるということがわかりました。。
a.send(:xy=, 1, 2)
実際は ActiveRecord::Base#attributes= なんですが。

277 :デフォルトの名無しさん:2008/09/28(日) 19:09:56
a.xy=1, 2とかa.xy=*[1, 2]でもよさそうに思う

278 :272:2008/09/28(日) 19:41:41
>>277
それだと @x が [1, 2] になっちゃうんです…
ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin8]

279 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/09/28(日) 21:17:08
popen

283 :デフォルトの名無しさん:2008/09/28(日) 21:29:15
じゃあ俺はreadpartialを推しておく

284 :デフォルトの名無しさん:2008/09/28(日) 21:41:56
windows版のrubyが起動に物凄く時間がかかるんですがなぜでしょうか・・・?

285 :デフォルトの名無しさん:2008/09/28(日) 21:57:46
rubygems読み込んでるんだろ

286 :デフォルトの名無しさん:2008/09/28(日) 22:18:04
>>276
http://www.ruby-lang.org/ja/man/html/_B1E9BBBBBBD2BCB0.html
>プログラミングの利便のために一部のメソッド呼び出しと制御構造は演算子形式をとります。
>ほとんどの演算子は特別な形式のメソッド呼び出しですが、(後略)

ということだそうだから、普通のメソッド呼び出しとは違うんだろう。
だいたい2項演算子の引数が複数だったりすると混乱の元にしかならんしな。
f( a + 1, 2) と書いたら、実は f( a+(1, 2) ) でしたとか。

287 :デフォルトの名無しさん:2008/09/29(月) 04:05:45
ちょっと質問なのですが、Vistorパターンがいまいちわかっていません。
サンプルコードを見ても実際にどんな時につかうのかが?

Rubyのライブラリなんかで、Vistorパターンを実際に使っているソースはありませんでしょうか?

288 :デフォルトの名無しさん:2008/09/29(月) 04:09:01
>>274
安いRailsのホスティングサーバー - Core
http://d.hatena.ne.jp/core/20080906/1220715811#c

野ログはノロキュアMaxHeart - SlicehostでそれなりにRailsを使っている感想 , Rails動かす環境が欲しい人必見
http://cureblack.com/20080909.html#p01

まともに動かすには、VPSぐらいでないと無理くさいです。

レンサバでRamaze動かしている人(CGI駆動でw)はいた。

rubyの軽いWebアプリケーションフレームワークを試してみた - NAT’s Programming Champloo
http://d.hatena.ne.jp/NAT_programming/20080817/1218957113
さくらのレンタルサーバでramazeを動かしてみた - NAT’s Programming Champloo
http://d.hatena.ne.jp/NAT_programming/20080817/1218962624


289 :デフォルトの名無しさん:2008/09/29(月) 04:14:09
>>227
C/C++とか触れそうにないなw
あなたには選択肢が少ない、ひまわりとかDelphiがオススメ

290 :デフォルトの名無しさん:2008/09/29(月) 08:23:51
>>287
Visitorははまるときはピッタリはまるんだけどね。

Visitorパターンの例題として見るだけなら少し大きめだが、RDのパーサとか
http://rubyforge.org/projects/rdtool/


291 :デフォルトの名無しさん:2008/09/30(火) 00:28:47
Mac OSXにRails環境を作ってみたのですが、プロジェクトを作成すると
ファイルの文字コードが全て iso-2022-jp-3で作成されてしまいます。

プロジェクト作成時にutf8でファイル生成するオプションなどはありますか?

292 :デフォルトの名無しさん:2008/09/30(火) 08:23:04
railsコマンドが作る初期プロジェクトに使われる文字の範囲では
ISO-2022-JP-3(初期ASCIIでスタート)とUTF-8は同じだと思うんだが。

293 :デフォルトの名無しさん:2008/09/30(火) 10:00:53
どんなソフトやらでISO-2022-JPでなくISO-2022-JP-3だと判定されたのかはちょっと気になるな

cat > hoge.txt とかで作ったファイルも同じ判定ならコンソールか何かの設定の問題か、その判定ソフトの癖だな

294 :デフォルトの名無しさん:2008/09/30(火) 11:52:43
RoR のフォームヘルパには Smarty でいう html_options みたいなヤツはないの?

295 :デフォルトの名無しさん:2008/09/30(火) 14:09:23
>>294
html_optionsみたいなのがなにかを説明しないと、わかるわけがない

296 :デフォルトの名無しさん:2008/09/30(火) 14:20:57
>>295
ttp://www.smarty.net/manual/ja/language.function.html.options.php

297 :デフォルトの名無しさん:2008/09/30(火) 15:39:13
まずは「rails select option」でぐぐろうぜ

298 :デフォルトの名無しさん:2008/09/30(火) 17:10:47
うぉーあった。ありがとうございます >>297
Rails入門(本)には text とか radio は載ってたのにこれは載ってない。
でもないのはおかしいなと思ってた。date_select まであるじゃんかよ…。

299 :287: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 :デフォルトの名無しさん:2008/10/01(水) 08:21:11
>>300
とりあえずodなどで問題のテキストをバイナリダンプしてみては?



302 :デフォルトの名無しさん:2008/10/01(水) 11:09:10
>>300
文字エンコード自動評価の順が iso-2022-jp-3 が最初なんだろう
vimrcの文字エンコード推測設定がMacOSX向きじゃないんだと思う
きっとどっかのサイトのを意味もわからず丸コピペしたのだと推測

303 :デフォルトの名無しさん:2008/10/01(水) 12:05:42
>>298
書名をさらして著者に改善を要求しよう

304 :デフォルトの名無しさん:2008/10/01(水) 12:13:37
バージョンアップ後のフォローを求めるアホもいるので注意
ちゃんと冒頭に「バージョン○○を対象にします」って書いてあんじゃんよ

305 :デフォルトの名無しさん:2008/10/01(水) 15:00:25
>>304
今回の select option に限って言えば、どのバージョンでもあるわな

306 :デフォルトの名無しさん:2008/10/01(水) 19:14:46
ruby gemsでdescriptionで検索することってできないのでしょうか?

 gem search --details --both --all hoge

とやっても、名前でしか検索ができません。
説明欄も検索したいのですが・・・

307 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/02(木) 11:49:49
"うまく動かず"を出し惜しめせずに書けw

310 :デフォルトの名無しさん:2008/10/02(木) 11:51:06
sum += a.to_i
かな

311 :デフォルトの名無しさん:2008/10/02(木) 12:07:40
>>309
コマンドプロンプトだと1つ目の数値を入れたとたん終了・・・
>>310
できた!thx!
getsで入力した数値を文字列だと思ってたのか・・・orz
ほんとありがとう、数値ひとつ入力するのに1時間奮闘してた・・・

312 :311:2008/10/02(木) 12:26:45
またすぐに聞きに来てごめんなさい・・・orz
aを配列にしたとたん動かなくなりました・・・
実行しても「点数を入力してください」すら表示されず終わります。

sum =0
puts "点数を入力してください。"
a[]              ←いらなそうだけど一応宣言
for i in 1..5
  print i, "番:"
  a[i] = gets.chomp   
  sum += a[i].to_i      
end

.to_iの使い方がおかしいのかもと思い、その行をコメント化してみたりしましたがうまくいかず・・・
gets辺りで躓いてると思います。
お手数ですがどなたかアドバイスください。
入力で躓きまくってる私はRuby向いてないのかなぁ・・・orz


313 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/02(木) 12:37:37
どういう勉強の仕方をしてるのか気になる。

315 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/02(木) 12:49:11
本題に関係ないとはいえ一応書いておくが、Rubyでforはめったに使わない
普通はブロックを使う

317 :312:2008/10/02(木) 12:50:02
>>313
おお・・・ちゃんと動く・・・ありがとです。
for文の中でsumに足していかないとは・・・!
sum周りが初見なんで調べないとですね。
ともあれthxです。

>>314
Cは多少やってたのでCの頃に書いた簡単なプログラムをRubyに書き直してみてるところです。
文法がずいぶん違って躓きまくりです・・・

>>315
いや、「.rb」をそのままダブルクリックで実行してます。
だからsleep入れたりしてすぐに消えないようにしてたり・・・
基本はRDEで実行してます。
「たのしいRuby 第2版」を参考にしてますが、必要な所だけ探して読んでるのがいけないかもですね・・・

318 :デフォルトの名無しさん:2008/10/02(木) 13:19:11
コマンドライン実行のスクリプトをダブルクリックしてどうする
正常終了でウィンドウ閉じるだろ

319 :デフォルトの名無しさん:2008/10/02(木) 13:36:57
最後にsystem('pause')入れたりする

320 :デフォルトの名無しさん:2008/10/02(木) 14:02:52
>>317
RDE使ってるなら、プログラムを実行した後
下の出力ウインドウにエラーメッセージとか出てるんじゃないか?
それを貼り付けるべし

出ないようならコンソールから実行

321 :デフォルトの名無しさん:2008/10/02(木) 14:22:57
>>318
いやだからsleep入れたりしてるんですが、エラーの時は関係なく終わるんです。

>>319
Rubyの場合はスタンダードライブラリを読み込まなくても使えるんですね。(Rubyには存在しない?
活用させていただきます。

>>320
一応出ますね。以後貼り付けます。

みなさんありがとうございます。またすぐに来そうで心配ですが、その時はよろしくお願いします。

322 :デフォルトの名無しさん:2008/10/02(木) 18:02:43
バッチファイルにしてやればエラーが出てもポーズさせるようにできるよ。
ruby -x "%~0" || pause
と書けばエラーが出たときに限ってとまる。

test.bat
ruby -x "%~0"
pause
goto :eof

#!ruby
put "hello"


323 :デフォルトの名無しさん:2008/10/02(木) 19:08:34
>>322
横からだがサンクス
これを.rbに関連付けしておけばよいのか・・・
|| でエラー時だけ止まるのかいいな、これ

324 :デフォルトの名無しさん:2008/10/02(木) 22:15:24
rdocで#:nodoc:と指定されてる要素も無理矢理ドキュメント化するような
オプションとか方法とかってありますか?

325 :デフォルトの名無しさん:2008/10/02(木) 23:44:42
>>324
そんなのはないから自分で #:nodoc:を消せばいいじゃん
cp -pr src1 src2
find src2 -type f | xargs perl -pi 's/:nodoc://'


326 :デフォルトの名無しさん:2008/10/03(金) 01:37:13
>>325
なるほど
参考にさせていただきます
ありがとうございました

327 :デフォルトの名無しさん:2008/10/03(金) 02:38:35
>>325
そこでrubyでもsedでもなくperlかよw


328 :デフォルトの名無しさん:2008/10/03(金) 11:54:46
>>327
1 linerでの置換ならrubyよりperlのほうが便利
sedは-pオプションがない

329 :デフォルトの名無しさん:2008/10/03(金) 12:52:51
http://www.goto.info.waseda.ac.jp/~fukusima/ruby/python-j.html
これ教えてもらってpythonから宗旨替えするのを検討してるんだけど
本当にpythonのモジュールが問題なくつかえるの?
ctypes
boost.python
numpy
matplotlib
PIL
が使えるかが一番問題なんだけど

330 :デフォルトの名無しさん:2008/10/03(金) 13:02:03
>>329
現在の Ruby は 1.8.7 です

331 :デフォルトの名無しさん:2008/10/03(金) 13:09:37
(いろいろとpython側もruby側も追随してないだろうから、やめるのが吉、ってことか...)

332 :デフォルトの名無しさん:2008/10/03(金) 15:59:38
>>329
作者に聞くか、自分で試してみるしかない。
つうか、PerlやPHPならまだしも、Pythonから宗旨替えする理由って何?

333 :デフォルトの名無しさん:2008/10/03(金) 17:24:32
>>332
借りてるレンタルサーバーでRubyは動くけど
pythonが動かない

railsが便利なら使ってみたい

334 :デフォルトの名無しさん:2008/10/03(金) 17:30:26
>>333
Railsを実用的な速度で使うなら、
別プロセスのサービス(MongrelやFastCGI)か
Apache組込のPassengerが必要になる。
レンタルサーバではどちらもできないことが多いので、注意。

335 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/03(金) 21:46:08
普通にsystem使ったら?

337 :デフォルトの名無しさん:2008/10/03(金) 22:09:57
>>328

sedのデフォルトの動作が -p 指定時のPerlと同じだろ。
おまえさんが言いたいのは -i じゃないのか?
でもこれも GNU sedならあるけどね。


338 :デフォルトの名無しさん:2008/10/03(金) 22:12:47
>>335
gsub!の置換後の文字列だけどそれでいいのか?

あと startはcmd.exe の内部コマンドだからそれだとまずいだろう


339 :デフォルトの名無しさん: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
http://nanoc.stoneship.org/

nanocというRuby製のCMSを使ってみています。
nanoc autocompileコマンド時にhttpdサーバーが立ち上がります。
しかし、ブラウザでhttp://localhost:3000/ というデフォルトのアドレスにアクセスしても
画像が何故か読まれません。

そこで、autocompileコマンドのソースを追って調べていたのですが、

nanoc: lib/nanoc/extra/auto_compiler.rb@55a1480e2719
http://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 :デフォルトの名無しさん:2008/10/03(金) 23:58:19
>>340
ソース読んでないけど、たぶんその通り
UNIX畑の人間が書いたスクリプトには、バイナリモードを考慮してないものがある
最近だとRackでも見た

342 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/04(土) 00:01:14
PNGのマジックナンバーに含まれるEOF文字で止まっているようですね。
バイナリモードのopenを使うように書き換えないといかんのかな。


344 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/04(土) 00:07:32
あれ、アクセスフラグrbじゃなくてrwなの?

346 :デフォルトの名無しさん:2008/10/04(土) 00:10:45
rb だな

347 :デフォルトの名無しさん:2008/10/04(土) 00:16:27
msっていつになったらテキストモードをなくすの?

348 :デフォルトの名無しさん:2008/10/04(土) 00:24:32
>>347
Cやれ

349 :340:2008/10/04(土) 00:48:47
みなさんありがとう。上手くいきました

trap::IO - Rubyリファレンスマニュアル
http://www.sakalab.org/prog-ruby/ruby-man-html-20080121/trap_IO.html
> IO.readはファイルを開くときにバイナリモードにしないので、
> バイナリモードの存在する環境でバイナリファイルの読み込みに使うと 内容が壊れることがあります。

これかい!しかし何でこんな罠があるんだ。
罠ってのはバイナリモードじゃなくてIO.readのことだけど。
nanocの作者 mac っぽいし?

-----lib/binary_patch.rb-----
module Nanoc::Extra
  class AutoCompiler
    def serve_file(path)
      # Build response
      [
        200,
        { 'Content-Type' => mime_type_of(path, 'application/octet-stream') },
        [ File.open(path, 'rb'){|f| f.read } ]
      ]
    end
  end
end
-------------------
>>344参考に、これをサイトデータの lib 以下に放り込んでおくとOK的な。
後でさくーしゃにパッチ投げるか……

しかし、grepかけたら、他にも File.read あったり、
File.openでバイナリモードにしてないところがあるから、
直すところがいくつもありそうw

350 :デフォルトの名無しさん:2008/10/04(土) 01:18:38
これはホントは標準添付の便利メソッドのフリしてバイナリモードガン無視の File.read が悪いんだよね
ライブラリ作者はあんまり悪くない(注意不足なだけ)
2.0 では直ってたりするのかしら

351 :デフォルトの名無しさん: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("http://localhost:#{port}/") if defined?(Launchy)
      original_start(port, handler_name)
    end
  end
end

353 :デフォルトの名無しさん:2008/10/04(土) 01:51:50
で、Threadを使ってみようとしたんだけどもネイティブスレッドじゃないせいか
上手くいきませんでした。何かよい方法はないものでしょうか?

    def start(port, handler_name)
      port ||= 3000
      t = Thread.new do
        Sleep(3)
        Launchy.open("http://localhost:#{port}/") if defined?(Launchy)
      end
      original_start(port, handler_name)
      t.join
    end


354 :デフォルトの名無しさん:2008/10/04(土) 02:37:21
>>352
while (3000ポートに接続できない)
 sleep(1) # 1秒待つ
end

355 :デフォルトの名無しさん: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:2008/10/04(土) 02:57:28
深夜に何度もすいません。
キー入力待ちでもsleep後に平行してブラウザが起動してくれました。大丈夫でした。
httpdの起動が遅いせいか、どうもタイミングが悪かったようです。

>>354を実装してみたいと思います。ありがとうございます。

359 :352:2008/10/04(土) 03:33:52
    # Boot web browser before original start
    def start(port, handler_name)
      require 'open-uri'
      require 'resolv-replace'
      
      require_gem('launchy', true)
      
      port ||= 3000
      
      t = Thread.new do
        uri = "http://localhost:#{port}/"
        loop do
          begin
            exit_loop = false
            open(uri) do |f|
              puts "Eureka #{uri} !";
              exit_loop = true
            end
            break if exit_loop
          rescue
          end
          sleep(1)
        end
        puts "Launching browser..."
        Launchy.open(uri) if defined?(Launchy)
      end
      original_start(port, handler_name)
      t.join
    end

>>354をこんな感じで行けました。
もっと短くかければよかったのですが。

360 :デフォルトの名無しさん:2008/10/04(土) 04:06:35
テキストモードとか意味不明。
ただこういうバグを生むために存在するとしか考えられん。

まあでもそういうのを考慮する環境がクライアント機では90%以上を占めてるので仕方ないか。。

361 :デフォルトの名無しさん:2008/10/04(土) 04:10:20
だからCやれって
テキストモードが生まれたわけがわかるから

362 :デフォルトの名無しさん:2008/10/04(土) 04:35:54
>>361
Cは平素より使用しているが、どうしてテキストモードなるものが存在する必要があるかは理解できない。
ここで、「ググレ」やリンクを貼る行為ではなく、あなたの言葉での説明希望。

363 :デフォルトの名無しさん:2008/10/04(土) 07:12:40
ちゃんとした文責のある文章を拒否して、名無しさんの言葉だけ求めるってw

「知りたい」んじゃなくて「追い込みたい」のが丸わかり。
土曜の早朝から何を厨臭いことを。

364 :デフォルトの名無しさん:2008/10/04(土) 07:17:11
隔離スレにお帰り

365 :デフォルトの名無しさん:2008/10/04(土) 08:31:49
むしろCのstdioがマシンごとに改行の内部表現が異なることを意識して
テキストモードとバイナリモードを用意して抽象性を確保してるんだから
UNIX使いもちゃんと使い分けろって話になりはしないの?

366 :デフォルトの名無しさん:2008/10/04(土) 09:50:05
>>363
煽るだけならCスレへお帰りください

367 :デフォルトの名無しさん:2008/10/04(土) 10:23:42
>>362
>Cは平素より使用しているが、どうしてテキストモードなるものが存在する必要があるかは理解できない。
たんに、プラットフォームによって改行を表す記号が違うので、それを隠蔽して互換性を確保するモードを用意しただけ。

>ここで、「ググレ」やリンクを貼る行為ではなく、あなたの言葉での説明希望。
ほんとにCやってるなら、このくらい分かるだろ。
まずは「教えてください」という言葉を覚えような。

368 :デフォルトの名無しさん:2008/10/04(土) 11:01:03
>>367
>まずは「教えてください」という言葉を覚えような。
お前は文章に「教えてください」って文字列が入ってないと納得できない正規表現脳なのか

369 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/04(土) 12:46:31
>>365
普通UNIX使いは改行記号がが\nのとき、\r\nのとき、\rのときそれぞれを考慮したコードを書きます。
なぜならUnix使いはおそらくwindowsをはじめとする他の環境を触ったことがあり、
それらで改行がどう表現されるかを知っていて、
かつbフラグは無視される環境であることがほとんどだから。

>>367
だからね、それは「テキストモードが必要な理由」にはならないんだよw
なぜなら普通は上に書いたようなことをやるから。
あれば便利かと思って作ったんだろうが、現状むしろあることのほうが害。バグの原因になる。
こんぐらい少し考えればわかるだろwww



371 :デフォルトの名無しさん:2008/10/04(土) 12:56:18
>>368
その文字列を探す様子をたとえるのに、正規表現はないだろう。

372 :デフォルトの名無しさん:2008/10/04(土) 13:09:55
http://pc11.2ch.net/test/read.cgi/tech/1221967332/87
こいつ何言ってるの?

373 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/04(土) 13:27:07
>>372
お前の存在をズバリ言い当ててるのでは?

375 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/04(土) 14:08:35
この場合、「一般的であることを示す」のは至難の業だわな。
いったい何百例出せばいいのかと(数例で納得するのは逆におかしい)。

それでいて、いかにも「正当な要求をした俺と、応えられないコイツ」的な構図が
出来上がるから、まぁ、ある種の人間はこの質問をすることを凄く好むんだよね。

「知りたい」んじゃなくて「追い込みたい」のが丸わかり。
土曜の昼に何を厨臭いことを。

377 :デフォルトの名無しさん:2008/10/04(土) 14:46:13
>>376
久々に切れのある内容のスレを見た。
尊敬する。
あなたの言うとおり!!

378 :デフォルトの名無しさん:2008/10/04(土) 16:17:01
>>376
なに語ってるのか知らんけど、
>普通UNIX使いは改行記号がが¥nのとき、¥r¥nのとき、¥rのときそれぞれを考慮したコードを書きます。
なんておかしなことを書いてあるから、それが「普通」である根拠を示してくれといってるだけ。
答えられないならでしゃばんなよ。


379 :デフォルトの名無しさん:2008/10/04(土) 16:20:17
IDの出ないスレは自演が楽だな。

380 :デフォルトの名無しさん:2008/10/04(土) 16:21:10
>>375
>wgetのhttp.cなどを参考にしても、もし改行が¥nの場合、¥r¥nの場合両方とも正しく処理できるように
>なっている様がわかる。

wget はネットで使うんだから、どちらにも対処できるようにするのは普通だろ。
それこそunixもwindowsもmacも関係ない話。
これをbフラグの話で持ち出すほうがおかしい。

381 :デフォルトの名無しさん:2008/10/04(土) 16:46:28
>>378
> なに語ってるのか知らんけど、
知らんまま反応した当然の結果として、まるで的外れだから、「知る」までは黙ってていいよ。

382 :デフォルトの名無しさん:2008/10/04(土) 18:34:37
unixはバイナリモードしかなくても、改行コードがファイル毎にバラバラでも
テキストを問題なく扱えるし、windowsでも当然可能
# 可能にしてるのはライブラリやアプリケーション、だけど問題はそこじゃない
不必要なテキストモードを残しているばかりに>>340の様な問題が起こる
appleがOSXでCRを捨てたようにwinもさっさとテキストモードを廃止してほしいもんだ

383 :340:2008/10/04(土) 19:03:40
なんか、俺のせいで半荒れ?でスマナイ

俺はネイティブ言語はDelphiくらいしかつかわないけど、
テキストモードとかバイナリモードなんて意識したことない。
File.readのテキストモードとかの区別って結局どこから来てるんですかね?

384 :デフォルトの名無しさん:2008/10/04(土) 19:25:51
>>383
Rubyを作るときのCの…えー、WindowsのCライブラリから来ている
結局としては、テキストであるという判断をどの層で誰がやるかという話に過ぎない

385 :352:2008/10/04(土) 19:33:12
>>384
そっか、C言語のライブラリのせいなのね・・・

386 :340:2008/10/04(土) 19:36:58
ん?レス番残ってた 340です。

387 :デフォルトの名無しさん:2008/10/04(土) 19:42:25
1.9はstdioを捨てたと聞いたが、そうするとテキストモードに関する
状況は変化するの?


388 :デフォルトの名無しさん:2008/10/05(日) 18:24:44
>>387
ユニバーサルニューラインが入ってる。
http://www.garbagecollect.jp/~usa/d/200808c.html#id20080825_P1

389 :デフォルトの名無しさん:2008/10/05(日) 19:15:07
>>388
> "r"なら、"rt"と"rb"のどちらの扱いになるかはプラットフォーム依存。
> とりあえず、いわゆるUNIXなら"rb"と同様に、mswinやmingwなら"rt"と同様になる。

ちょw 問題解決されてなくないですか?

390 :デフォルトの名無しさん:2008/10/05(日) 19:17:52
ああ、違うのかな?
前みたいに適当に"r" だけだとどっちにしろ環境依存になるから、
バイナリかテキストかを意識しなくちゃいけないわけか

391 :デフォルトの名無しさん:2008/10/05(日) 20:19:17
テキストだとエンコーディングも意識する必要があるしのう。
文字=バイトで凝り固まった外人どもよりはこのへん日本人は意識しやすいだろうけど。



392 :デフォルトの名無しさん:2008/10/06(月) 00:31:26
>>389
本質的に問題なのはテキストモードを区別するという慣習だから、
Rubyだけで解決できる性質の問題じゃない。
Windows全体で「CRLFを使うのはやめよう」という流れにならない
限り解決しようがない。


393 :デフォルトの名無しさん:2008/10/06(月) 01:51:56
結局いつものRubyが糞なのが根源的な原因だけど対応するのが面倒だから
個々の環境(というかいつもWindows狙い撃ち)で対応しやがれというお話ですね。

394 :デフォルトの名無しさん:2008/10/06(月) 02:00:53
俺の場合、Windows(つかSJIS/CP932)一辺倒の頃は
むしろ「LFなんて糞、CR+LFに統一しる」と思ってた
今はそうでもないが、昔の俺以外にもそう思ってる奴は居るかも

395 :デフォルトの名無しさん:2008/10/06(月) 02:31:20
ラインをフィードしただけで「行の先頭」に行くUNIXは変
キャリッジをリターンしただけで「次の行」に行く旧Macも変
「カーソルを行頭に戻してから行を送る」というCRLFを具現したWindowsが意味的に妥当

とは思う
っていうか電脳化した時点でCRLFという概念作っとけよもう
何が悲しくてコンピュータでタイプライタのエミュレーションなんぞしなければならんのか

396 :デフォルトの名無しさん:2008/10/06(月) 02:38:48
SJISが普通に使われるWindowsでは2バイトあった方が誤読しにくい

397 :デフォルトの名無しさん:2008/10/06(月) 08:21:28
>>395
それは端末を中心に考えているから。だから「行頭に戻る」と「次の行に移動する」をわけて考えてしまう。
UNIX作ったひとはテキストを扱うことを考えてて、それでテキストの「行末」が欲しかっただけだから、
それを1文字で表現したことは、そんなにおかしな話ではない。


398 :デフォルトの名無しさん:2008/10/06(月) 10:46:45
CP/Mの呪縛?
EOFとかCR/LFとか


399 :デフォルトの名無しさん:2008/10/06(月) 11:10:10
read() より下のレイヤであれこれやる Windows が変、ってことで

400 :デフォルトの名無しさん:2008/10/06(月) 12:31:57
>>394
統一しる!までは思わんがw
どっちかというと、UNIXとかの人にバイナリで読む時とかちゃんと、"rb" つけてくれ!頼む!って感じ。
いろんなソースいじっていると本当にそう思うw

401 :デフォルトの名無しさん:2008/10/06(月) 12:33:07
なーーんか、そろそろRuby本スレみたいな雰囲気で
初心者さんが質問しにくくなってきている気がするので移動しませんか?w

402 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/07(火) 09:05:04
>>403
> class << Object.new
こんな書き方できるんだ...
「class <<」の右側って任意の式がかけるの?


405 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/07(火) 17:44:23
>  class << self;
 class << self

408 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/07(火) 20:36:41

  ☆ チン

        ☆ チン  〃  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          ヽ ___\(\・∀・)<  初心者の質問じゃない質問まだー?
             \_/⊂ ⊂_)_ \____________
           / ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
        |  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| :|
        |           .|/


410 :デフォルトの名無しさん:2008/10/07(火) 20:36:43
いいです

411 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/07(火) 22:38:52
両者の違いが問題になるようなクラス設計をしてはいけないな

413 :デフォルトの名無しさん:2008/10/08(水) 02:30:36
>>411の上と下って具体的にどう違うの?

414 :デフォルトの名無しさん:2008/10/08(水) 11:48:06
最近、Rubyの勉強を始めた者です。
先週、RubyのMLに登録し「Welcome to our ruby mailing list」のメールも届いたのですが、
その後メールが1件も届きません。ひょっとしてRubyのMLって、コマンドをサーバーに送って
取得しないといけないのでしょうか?それとも、さらに何か手順を踏まないとメールが
届かないのでしょうか?メールに記載されている説明には、過去の投稿が欲しいなら
サーバーにコマンドを送れ、とは書かれているのですが・・・

415 :デフォルトの名無しさん:2008/10/08(水) 11:57:01
RubyのML、じゃどれかわからん。
MLによっては単に流量が少ないだけということもある。

本来流れているはずのメールが届いてないというなら、そのWelcomeメールに書いてある問い合わせ先に質問メールを投げればいい。

416 :デフォルトの名無しさん:2008/10/08(水) 12:00:10
ruby-ext と ruby-math、非公式の rubyist ML は投稿がないな

正直なとこ、ML は何か発言したい人向けだね
初心者さんはこのスレとかマニュアル独学とかしたほうがいいかも

417 :デフォルトの名無しさん:2008/10/08(水) 12:09:57
>>415,416
素早いレス、ありがとうございます。
登録したのは「ruby-list」です。単に投稿が少ないだけなのか、
それとも自分が何かミスをしていて、メールが届かないのかが分からなかったもので。
とりあえず、MLの管理者に問い合せてみようと思います。

418 :デフォルトの名無しさん:2008/10/08(水) 12:27:55
ウインドウズでのrakeの実行が遅すぎる、どうにかならないのか?


419 :デフォルトの名無しさん:2008/10/08(水) 12:42:41
>>418
まだCPUが1個なんですか?
Rails開発者はデュアルコアとか普通ですよ?

420 :デフォルトの名無しさん:2008/10/08(水) 13:22:04
gem update のメモリ超絶消費問題が長らく直らなかったくらいだしなあ
メイン開発者たちのマシンでは一瞬あるいは2秒程度で終わってると考えるのが妥当だな
あるいはWindowsのRuby使ってないとか

421 :デフォルトの名無しさん:2008/10/08(水) 13:26:07
Windows使ってる人なんてハイスペックが当たり前で気にならないかもしれない

422 :デフォルトの名無しさん:2008/10/08(水) 13:51:19
>>418
一応回答すると、WindowsのRubyスクリプトで処理開始までが馬鹿みたいに遅いのはどうにもならない
これを改善する方法を見つけられたらRubyは広まると思うんだがというかWindowsで常用したい

423 :デフォルトの名無しさん:2008/10/08(水) 13:55:23
Core2Duo使ってるレベルだったら遅さなんて感じないけどね

424 :デフォルトの名無しさん:2008/10/08(水) 14:09:02
>>423
俺の環境はCore2Duoだが、体感できるぐらいには遅い

425 :デフォルトの名無しさん:2008/10/08(水) 14:09:55
同じマシンにLinuxとか入れて同じRubyスクリプトを実行するとほぼ一瞬なんだよねえ
Cライブラリとかの違いの関係だと思うんだが、残念だな

426 :デフォルトの名無しさん:2008/10/08(水) 14:18:53
WindowsでRubyってそんな遅いの?
ならJRuby使っても気にならないんじゃね

427 :デフォルトの名無しさん:2008/10/08(水) 14:24:38
>>424
そうなってくると、HDDとかにも問題があるんじゃない?

428 :デフォルトの名無しさん:2008/10/08(水) 14:27:56
VistaはVistaで遅い

429 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/08(水) 15:04:51
そりゃキャッシュに乗ってるかどうかで全然違うよ

432 :デフォルトの名無しさん:2008/10/08(水) 15:10:08
>>429
どうもその人だけみたいな感じだね
いろいろな要素が絡み合って遅くなってるのかな

433 :デフォルトの名無しさん:2008/10/08(水) 15:19:17
>>430
それはCPUが充分速い
>>429はPentium3だぞ

434 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/08(水) 15:26:11
>>433
424みたいのがいるから、CPUの問題じゃなく、遅くなる何かがあるんじゃないか?

436 :デフォルトの名無しさん:2008/10/08(水) 15:30:25
全員が遅いなら、それこそ「WindowsのRubyは遅くて使えねえ」という大合唱になってるはずだしな
大丈夫な人と大丈夫でない人がいる程度には、ポピュラーな別の原因があるんだろう

437 :デフォルトの名無しさん:2008/10/08(水) 15:38:24
VistaだったらWindows defenderの影響とか

438 :デフォルトの名無しさん: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:2008/10/08(水) 18:47:36
書き忘れてたけど、遅くなるのは基本的に初回起動(キャッシュされてない状態)のとき
キャッシュ無しの状態でrake打つと、だいたい3〜5秒ぐらいかかる
二回目以降は0.1秒くらいしかかからない
(WindowsXP Core2Duo 1.86GHz メモリ1024MB ruby-mswin32)

440 :デフォルトの名無しさん:2008/10/08(水) 19:24:07
rakeとか言われても何も比較できない

441 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/09(木) 01:41:46
根本的にいろいろ勘違いしてるな

445 :デフォルトの名無しさん:2008/10/09(木) 04:54:55
勘違いしているというより、railsを叩くストーリーを語りたかったんだろう。
「この物語はフィクションです。実在の人物・団体・CPU・プログラミング言語とは
一切関係ありません」

446 :デフォルトの名無しさん:2008/10/09(木) 08:09:36
Rubyが遅いのはもうすでにだれもが知っている事
耐えられないならJRubyを使えば速くなる




447 :デフォルトの名無しさん:2008/10/09(木) 08:28:26
JRubyの方が速いのは事実だが、
RailsをJRubyで動かすとCRubyより遅くなる。

448 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/09(木) 10:29:10
Railsの「生産性」を叩いてる人はVBAで納品される受注プロダクトもあるということを聞いたら卒倒するんだろうなと思ってる
なんでソフトウェアの全部が全部銀行並みの規模でクオリティでなければならんのん?

452 :デフォルトの名無しさん:2008/10/09(木) 10:59:38
なんでWindows上でRailsを実行させないといけないのかがそもそも理解できないわけだが。

453 :デフォルトの名無しさん:2008/10/09(木) 11:14:20
>>452
開発環境の事を言っているんだろ
rakeは本番稼動では使わないからなー
Rails信者はMac信者という事だろう
しかしほとんどは最近Mac信者になったやつらだろうが



454 :デフォルトの名無しさん:2008/10/09(木) 11:33:24
Windows → クライアントサイドアプリケーション以外ヘボい
PC-UNIX系 → サーバサイドプログラム以外ヘボい
MacOSX → どっちも不可もなく見掛けが気持ちよい

という単なる選択の収斂の結果に過ぎない
WinでPC-UNIX系プログラムがきちんと動けばWindowsを使うって
あるいはクライアント環境がもっさりでなければPC-UNIXを常用する

WindowsをクライアントにしてUNIX系OSにログインするというのが最強ではあるが、それだとメンテ対象が2つになるんだよね

455 :デフォルトの名無しさん:2008/10/09(木) 11:50:30
WindowsやLinuxとかを我慢して使ってる人のほうがよっぽど信者だと思う…

456 :デフォルトの名無しさん:2008/10/09(木) 12:14:08
質問だよ

適宜更新される200字くらいの説明文が常に200個くらいあって、
それらに特定の日本語群(更新は稀で候補100個くらい)が含まれてるかどうかチェックしたいんだ
スレ全部読み込んで、注目したい語を含むレスがあるかどうか調べて抜き出す、みたいなノリだと思ってくださいな

どうするのが速くて妥当かなあ?
検索語100個の正規表現100個を200文全部に適用する? 2万回正規表現起動?

457 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/09(木) 12:47:53
候補や説明文がよほど膨大なら、
Karp-Rabin法も考えられるかもしれんが・・・・・まあその程度なら

460 :デフォルトの名無しさん:2008/10/09(木) 12:52:25
yieldはなんだかんだ言って遅いから
語群を|でつなげた正規表現200回起動がよさそうに思う
ブロック使わずにif文ずらずら並べるならわからんけど

461 :デフォルトの名無しさん:2008/10/09(木) 12:53:39
個人的用途を除くと、イメージ的には
Macはデザイン、クリエイター、
Linuxは学術用
UNIXはサーバー
Windowsはビジネスその他って感じだな

462 :デフォルトの名無しさん:2008/10/09(木) 13:10:44
Ruby/Tkで
EntryウィジェットやTextウィジェット上でドラッグすると
フリーズします。原因として考えられることは何でしょうか?

463 :デフォルトの名無しさん:2008/10/09(木) 13:18:57
ドラッグしたときの動作をプログラムしてないからじゃね

464 :デフォルトの名無しさん:2008/10/09(木) 13:20:10
語群があまり変わらないという話だから、俺も>>460に賛成

465 :デフォルトの名無しさん:2008/10/09(木) 13:22:01
>>456
正規表現でやるならRegexp.unionっていうのがあるよー

466 :デフォルトの名無しさん:2008/10/09(木) 13:22:15
学術的なウンタラカンタラならともかく、業務サポートかカジュアルな用途だろうしな(いやわからんが)

467 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/09(木) 13:31:22
はいはい初心者スレだよここは

470 :デフォルトの名無しさん:2008/10/09(木) 13:35:36
>>468
Javaを知らないからそんなことになる
Javaを知ってればRoRはJavaで負けたスーツ連中が持ち上げてるだけだと早々に気づけたろうに
いい社会勉強になったことだろう

471 :デフォルトの名無しさん:2008/10/09(木) 13:36:44
>>467
動くよそりゃw
inspectがごちゃごちゃするのには確かに同意するが

472 :デフォルトの名無しさん:2008/10/09(木) 13:41:02
>>468
みんな、そこはもう大分前にとおりすぎたのだがwww

473 :デフォルトの名無しさん:2008/10/09(木) 13:41:51
そもそも ?-mix: って何よマニュアルに書いとけよって感じではある > Regexp.union

474 :デフォルトの名無しさん:2008/10/09(木) 13:42:54
>>468
あとZed Shawの記事はネタなので釣られないようにな。
単体の記事で見ると本当にそう思っているのかと思うもんだよ。

よくはてなブックマークとかでたくさんブックマークされている、煽り気味のエントリーとか
他の記事よむとネタじゃんってすぐにわかる、みたいなの

475 :デフォルトの名無しさん:2008/10/09(木) 13:43:20
Rubyしか知らないと悲惨なのにはこっそり同意しておく

476 :デフォルトの名無しさん:2008/10/09(木) 13:46:23
CとJavaとPerlとPHPとPythonとSchemeはオレオレライブラリを作れる程度には齧っておいたほうがいい

…多いな

477 :デフォルトの名無しさん:2008/10/09(木) 13:48:55
PerlとPHPは真っ先に除外できるな

478 :デフォルトの名無しさん:2008/10/09(木) 13:53:31
>>477は何もわかってない
キャッチセールに真っ先に引っかかるタイプ

479 :デフォルトの名無しさん:2008/10/09(木) 13:59:54
アレな方々が流入してくるとすぐスレがおかしくなるな

480 :デフォルトの名無しさん:2008/10/09(木) 14:02:47
PerlやPHPを知らないっていうのは一番悲惨なパターンのRubyユーザーなのでは…

481 :デフォルトの名無しさん:2008/10/09(木) 16:01:00
PerlやPHPを生半可に知ってる方が、変にRubyに入れ込んじゃって不幸になる気もする。

482 :デフォルトの名無しさん:2008/10/09(木) 16:29:26
Rubyって何に適してる言語なの?

483 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/09(木) 17:14:11
RailsはRubyのヘビーユーザーが適当に活用して小ぶりなアプリケーションを連続生産するのに向いている
RailsのためにRubyを学ぶような人や、Railsのソースを読んでも何してるかさっぱりわからんような人が使ってもどうにもならんな

という魔術師(志向)の人向けのフレームワークだったはずなんだが、当初からそのはずだったんだが、誰が捻じ曲げたのやら…

486 :デフォルトの名無しさん:2008/10/09(木) 17:14:19
すごい初歩的な質問していい?
ゲーム作ってみたいと思って、つい最近Ruby始めたんだけど。
講座HPみたいなところで、Ruby/SDLでつくったスクリプトをexeファイルにしても、
Ruby/SDLのdllファイルが全部同じディレクトリにはいってないと動作しないって書いてあったんだけど、
てことは作ったゲーム配布するときはdllファイルも全部つけて配布しなきゃいけないってこと?

487 :デフォルトの名無しさん:2008/10/09(木) 17:19:27
>>484
MacOSXでRubyを使うことに決めた人は、もともとPC-UNIX上でRuby使い倒してたような人が多い
そういう人の使うRoRは、その人のプロダクト作成に非常に役立つものになると思うよ

>>486
Exerbでひとつにまとめることが…DLLはできないのかな
というか、DLLは普通実行ファイルと一緒に配布するもんなんじゃね

あとRubyでゲーム作るのはマゾさんのすることなんだけど、あなたはマゾですか?

488 :デフォルトの名無しさん:2008/10/09(木) 17:22:03
>>484
Railsを擁護する気は全くないけれど
一応、IDEを使ってRailsの開発することはできるよ(EclipseとAptana)

>>486
その通り

>>487
俺は自分のことをSだと思ってたが、本当はMだったのか

489 :デフォルトの名無しさん:2008/10/09(木) 17:41:03
http://www.domo2.net/search/search.cgi?word=ruby&tnum=50&sort=res+desc

490 :デフォルトの名無しさん:2008/10/09(木) 17:45:19
>>487
>>488
回答ありがとうございますm(__)m
一緒に配布するんですか〜。16個くらいあったんでまとめられれば見栄えがいいんだけど。

Rubyはゲームに向いてないですか;
大学の講義でRubyを軽く使うらしいから、ついでにと思って始めたんだけど・・
Rubyはわかりやすいって評判ですけど、Rubyでプログラミングに慣れてからC言語勉強した場合、
共通点が多くてサクサク覚えられますか?それとも違いが大きくて効率悪いですか?

491 :デフォルトの名無しさん:2008/10/09(木) 17:49:36
>>490
人によるんじゃないかな
共通してる部分も確かにあるけど
片方をしっかり身に着けない内に他に手を出すと
ごっちゃになって混乱しそう

492 :デフォルトの名無しさん:2008/10/09(木) 17:49:46
C言語を使って便利な機能を便利な概念でまとめたのがRubyだ

493 :デフォルトの名無しさん:2008/10/09(木) 17:54:36
>>491
>>492
回答ありがとうございます。
ある程度身につくまでRubyで頑張ってみて、限界感じたらC言語勉強することにします〜

494 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/09(木) 18:24:53
またC++厨が…
C++を学ぶのとCを学ぶのでは意義が違うと何度言えば

497 :デフォルトの名無しさん:2008/10/09(木) 18:26:11
そろそろスレタイ嫁

498 :デフォルトの名無しさん:2008/10/09(木) 18:30:38
>>496
説明してみぞ




499 :デフォルトの名無しさん:2008/10/09(木) 18:34:39
うぜぇ

500 :デフォルトの名無しさん:2008/10/09(木) 18:37:16
こういう香ばしい人って、なんでみんなageるんだろうね

501 :デフォルトの名無しさん:2008/10/09(木) 18:45:48
>>484,488
業務でAptana使ってるが、コード補完はやはりイマイチ。
候補が無駄に多いうえに欲しいのが出てこなかったりする。
特に、ハッシュで引数与える関数は全滅だ。
この辺はNetBeansも大差ない。
abbrevのあるemacs系の方がまだ使える。

Eclipse + JDT で幸せなJava開発環境を味わってる人には物足りないだろう。

502 :デフォルトの名無しさん:2008/10/09(木) 19:29:58
Rubyと共に使うなら純Cだろうね。
C++はそれ単体で使うもの。
ゲーム作りならC++オンリーがパフォーマンス的に一番だろうなあ。
ただ、Rubyでも処理速度がさほど求められないならゲームに一応使えると思うが
ゲーム用のライブラリはCかC++だろうしなあ。
一応、RPGツクールはRuby使えるのもある。

503 :デフォルトの名無しさん:2008/10/09(木) 20:03:58
>>502
Ruby/SDLでだいたい満足してたから、他のゲーム用ライブラリ触ったことないんだが
CやC++にはそんなに良いライブラリがあるのか?

504 :デフォルトの名無しさん:2008/10/09(木) 21:45:12
とりあえず、SDLはC/C++でも普通に使える。

505 :デフォルトの名無しさん:2008/10/10(金) 10:57:55
>>503
SDL

506 :デフォルトの名無しさん:2008/10/10(金) 18:18:11
わざわざCからSDL使わなくても、Ruby/SDLでよくね
性能が要求されるなら直接DirectX使うべきだし

507 :デフォルトの名無しさん:2008/10/10(金) 18:27:06
ゲームってのはけっこうハイレベルな感じに常時性能が要求されるもんだと思ってたが違うのか?

508 :デフォルトの名無しさん:2008/10/10(金) 18:29:11
ゲームによるよ
3Dでエフェクトも激しいアクションゲームなんかは大変だけど
そうじゃないゲームもたくさんある

509 :デフォルトの名無しさん:2008/10/10(金) 18:36:43
専用スレがあるんだからそっちでやればよくね?

510 :デフォルトの名無しさん:2008/10/10(金) 18:47:04
>>508
マジレスするとそうでもない
画像表示してブラーかけてるだけのADVなのにDirect9c対応グラフィックボード要求するとかもうアホかと

511 :デフォルトの名無しさん:2008/10/10(金) 18:55:54
「DirectGraphicsの初期化に失敗しました」は昨今けっこう有名なメッセージだと思う

512 :デフォルトの名無しさん:2008/10/10(金) 19:29:48
誘導:
【Ruby/SDL他】Rubyでゲーム制作・総合スレッド
http://pc11.2ch.net/test/read.cgi/gamedev/1207069887/

513 :デフォルトの名無しさん:2008/10/10(金) 20:31:46
>>510
それはその例がそういうゲームってだけだろ

514 :デフォルトの名無しさん:2008/10/11(土) 10:27:03
玉金破裂ゲーム

515 :デフォルトの名無しさん:2008/10/11(土) 15:25:43
Arrayを継承したクラスのオブジェクト.find_all{|e| e.cond?}

がArrayを継承したクラスのオブジェクトに自動でならないことにほんのりがっかりした

516 :デフォルトの名無しさん:2008/10/11(土) 15:30:32
>>515
gem のライブラリで時々見るな、そういう中途半端実装
そこはレシーバのコレクションクラスのオブジェクトを作って返せと…なんのための独自配列なのかと…

517 :デフォルトの名無しさん:2008/10/11(土) 16:00:49
>>515
find_all は Array じゃなくて Enumerable のメソッドだから
実際のところ自分のクラスは関係ない


518 :デフォルトの名無しさん:2008/10/11(土) 21:09:09
Arrayは継承するな…とcompositionを使えと

519 :デフォルトの名無しさん:2008/10/11(土) 21:59:40
Arrayを継承するってどういうシチュエーションなんだ??


520 :デフォルトの名無しさん:2008/10/11(土) 22:08:31
なんで継承を毛嫌いするかね

521 :デフォルトの名無しさん:2008/10/11(土) 22:09:37
いらんメソッドが付いてくるから

522 :デフォルトの名無しさん:2008/10/11(土) 22:13:23
アホすぎて笑えない

523 :デフォルトの名無しさん:2008/10/11(土) 22:13:39
継承は怖い

524 :デフォルトの名無しさん:2008/10/11(土) 22:18:59
>>520
作るのは簡単だが使うときに面倒
あと作り直すときにも面倒

525 :デフォルトの名無しさん:2008/10/11(土) 22:20:50
すごいとこまできてるねRubyistはw

526 :デフォルトの名無しさん:2008/10/11(土) 22:21:13
>>515
ハッシュからハッシュを返すselectやmapはたまに欲しくなる

527 :デフォルトの名無しさん:2008/10/11(土) 22:22:01
カンペキに活用した継承は非常に強力だが、ほとんどの継承はそうではない
っていうか、組み込みクラスは継承しないで委譲しろ、継承は自作クラス間でどんどんやれ

528 :デフォルトの名無しさん:2008/10/11(土) 22:23:05
本当にアホばかりで嫌になる

529 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/12(日) 11:51:41
>>530
object_id を同じにしたい理由が良くわからんが…
普通に代入すれば同じになるでしょ。

今の実装では Fixnum の場合は即値だから必ず同じ値になるんじゃないかな。



532 :デフォルトの名無しさん:2008/10/12(日) 12:05:34
>>530
できませんという答が妥当な気がする

>>531の言うように、Ruby の整数の数値の値とオブジェクトIDは紐付けられてる
整数の 1 のオブジェクト ID は常に一定だ

533 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/12(日) 15:39:09
>>534
なぜそうなってしまうのかわからない。
スキーマはどうなってるの?


536 :デフォルトの名無しさん:2008/10/12(日) 16:27:25
>>534
ごめん
その話聞いても,idとa_idを同じオブジェクトIDにしたい理由がわかんないわ
それにそもそも代入やFixnumみたいなやつ以外で同じオブジェクトIDになることない気がする

なにか勘違いしてるんじゃ…

537 :デフォルトの名無しさん:2008/10/12(日) 16:47:40
そんなことできたらそれはIDって言わないんじゃないの

538 :デフォルトの名無しさん:2008/10/12(日) 16:56:36
要するに,例えばaとbっていう変数があったときに
b.object_id = a.object_id
としておけば
a = 10
としたときに,bも自動的に10になってくれませんか?

っていう話でしょ

object_idはそんな用途に使えません

539 :デフォルトの名無しさん:2008/10/12(日) 17:01:37
>>538
すげー
よく検討ついたな

540 :デフォルトの名無しさん:2008/10/12(日) 17:54:01
>> 538
その通りです
分かりにくい説明で申し訳ないです

用は参照を使いたかったんですが。。

541 :デフォルトの名無しさん:2008/10/12(日) 18:32:47
なんかa_idって名前が気になるな
すっげー憶測だけど、Bはインスタンス変数でAを持つのが素直な設計だったりしない?
それならB#save!で@a.save!するだけで済むから楽なんだけど

542 :デフォルトの名無しさん:2008/10/12(日) 18:38:16
>>538
おまえ、ほんとエスパーだな。
おれはさっぱり読み解けなかった。

543 :デフォルトの名無しさん:2008/10/12(日) 19:03:44
>>534
railsというかActiveSupportはそういう関連づけを自動化してくれなかったっけ?

あるいは>>541のようにしてB#a_idは@a.idを返すようにするとか。

544 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/12(日) 23:11:18
プライマリキーの値を変更するな、テーブルの設計からやり直せ

547 :デフォルトの名無しさん:2008/10/12(日) 23:24:26
>>545
自己レスです
とりあえず、参照は素直にはできないということは分かりました。
ありがとうございました。
もう少し試行錯誤して、無理なら普通のARにしてみます。

548 :デフォルトの名無しさん:2008/10/13(月) 01:37:23
>>544
初心者として気になるんだけど
そのレベルになるまではどんな感じやるのが上達する?

549 :デフォルトの名無しさん:2008/10/13(月) 01:44:19
>>548
1週間に3日書く
今週はRubyスクリプト書いたり改良の試行錯誤が無かったなあという週が無いという状態にする

制御構造覚えたらマニュアル見つつたまに使う程度のカジュアルさでももちろん一向に構わないが、
その場合はRubyが上達することはないだろうし、上達するほど頑張る理由もそもそも無いことだろう

550 :デフォルトの名無しさん:2008/10/13(月) 01:56:31
Rubyのクラス分けやモジュール分けはてきとーで良いということがわかった頃から
スクリプト作るの早くなったような気がする

今でも特異メソッドとかわからんが
インスタンスメソッドとクラスメソッドしか作ってない
Proc はライブラリで要求されないと作らない
yield は使う機会が無いのでわけがわからない

551 :デフォルトの名無しさん:2008/10/13(月) 06:21:15
yield は each 作ったりしたらすぐ覚える

552 :デフォルトの名無しさん:2008/10/13(月) 06:31:29
おれはテストを書く気が全く起こらないんだよなあ…
少しづつでも書けばいいんだろうけど
つまらないから全く続かない…

553 :デフォルトの名無しさん:2008/10/13(月) 07:56:06
どう考えても

 テストを書くのに悩む時間 >> 変なバグで悩む時間

なのでテストを書く理由がない俺
他人様に提供するライブラリ書くんじゃない限り要らないもんだと割り切ってる
書き方指南がないということは本当はみんな不要だと思ってる証拠

554 :デフォルトの名無しさん:2008/10/13(月) 08:32:04
>>553
書き方指南いろいろあるじゃん
本にもwebページにも

俺も有用であるという自信はないが

555 :デフォルトの名無しさん:2008/10/13(月) 08:43:49
テスト書くためのスクリプトでテスト書く説明するだけだしなあ
お前そんなスクリプトなんて普段絶対書かないだろ、というのが多々…(特にテスト駆動)

556 :デフォルトの名無しさん:2008/10/13(月) 08:54:11
スクリプト序盤から中盤での書き方がよくわからないのがテスト駆動の特徴
というかMockとかあのへんを理解しないと関数的スクリプトのテストしかできん

557 :デフォルトの名無しさん:2008/10/13(月) 09:23:47
色々書き方の作法もあるけど、むしろ形式に捕らわれず自由にテスト書くようにしたら
それはそれで楽める部分もあると思う。

558 :デフォルトの名無しさん:2008/10/13(月) 09:42:39
俺はテスト書かなくて困るのってリリース後なんだよなぁ。
デグレ出るたびに書いときゃよかったって思う。

559 :デフォルトの名無しさん:2008/10/13(月) 10:07:10
ちゃんとテストが書けるようになったら、もう上級者だよ。
つまり上級者になるためには、テストがきちんと書けるようにならないといけない。

おれはまだうまく書けないんだけどな。
UIのテストなんか、どうしたらいいのかさっぱりだ。

560 :デフォルトの名無しさん:2008/10/13(月) 10:36:29
他人様のライブラリのgitのtestディレクトリとか眺めてるとよくわかる

本文コードの追加変更に対してテストが異常に適当というか不足
時間かけてまでして作りたくないかどうすれば網羅するか考えるの面倒なんだろうな

561 :デフォルトの名無しさん:2008/10/13(月) 14:01:54
テストなしでロジック修正とかコードの整理(リファクタリング)とか、
怖くてできない体になった。


562 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/13(月) 17:30:17
テスト書くとメソッド単位でしか検証できないからめんどくさい
あと、GUIアプリのTestってどうやるの?

565 :デフォルトの名無しさん:2008/10/13(月) 17:35:59
できない

566 :デフォルトの名無しさん:2008/10/13(月) 17:55:46
入力の自動化をすれば出来る。
が、チェック項目をリストにして人力でやったほうがなんぼかマシ。

567 :デフォルトの名無しさん:2008/10/13(月) 18:30:55
RubyでGUIつーと、テスト以前に環境が貧弱だからのう。
WebならSeleniumとか。


568 :デフォルトの名無しさん:2008/10/13(月) 18:32:59
>>564
自動でマウス動かしてクリックしたりフォーム埋めたりするよプログラムを併用する
稀にどうしても自動化できないところが出てくることがあり、そういうときは漏れのない操作一覧図を書いて手動

569 :デフォルトの名無しさん:2008/10/13(月) 18:58:10
>>564
ビューとコントローラを極力分離すれば、ある程度までは機械的にテストできる

570 :デフォルトの名無しさん:2008/10/13(月) 19:02:19
GUI自体をテストしたい場合は?

571 :デフォルトの名無しさん:2008/10/13(月) 19:15:36
GUI自体のテストって具体的にどんなの?

572 :デフォルトの名無しさん:2008/10/13(月) 19:52:47
マウスクリックのタイミングとか

573 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/14(火) 02:15:25
本質的にサブネットマスクはbitmaskだから
ANDしてやればいい

575 :デフォルトの名無しさん:2008/10/14(火) 03:03:18
>>573
IPAddr#include?


576 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/14(火) 09:35:18
そろそろ解決してる頃だろうか

>>576
require 'hoge' は カレントディレクトリの hoge.rb ファイルを読み込む
rmagick.rb (大文字小文字問わず)という自作ファイルを改名しろ

「hoge ライブラリを試そうとして hoge.rb を作って実行し、次にまた別のスクリプトを作って変なエラーにはまる」というのは
そろそろ FAQ にしてもいいと思う

578 :デフォルトの名無しさん:2008/10/14(火) 09:46:44
>>577
ああ、まさにそれでした。
5時間くらい悩んでの書き込みだったので、今はRMagickのマニュアルを読んでました。
有難うございました。

579 :デフォルトの名無しさん:2008/10/14(火) 20:24:43
文字列中のすべての"\"を"\\"に、"'"を"\'"に置きかえたいときに
gsubってものすごくつかいづらいんですけど、
なんか他にいい方法はありませんか?


580 :デフォルトの名無しさん:2008/10/14(火) 21:00:31
str.gsub(/['\\]/){|s|"\\#{s}"}
十分簡潔に思うが、どの辺が使いづらく感じた?

581 :デフォルトの名無しさん:2008/10/14(火) 21:19:06
str.gsub(/['"]/) { %Q|¥¥#{$&}| }
あたりで手を打たないか?


582 :デフォルトの名無しさん:2008/10/14(火) 21:19:40
遅すぎたリロード


583 :デフォルトの名無しさん:2008/10/14(火) 21:42:38
ブロック使わずに表現できないの?

584 :デフォルトの名無しさん:2008/10/14(火) 21:45:41
str.gsub(/([\\'])/, "\\\\\\1")

・・・うん、ブロックのほうがいい。

>>579-580
後方参照使わずにgsub繰り返すっていう力押しをしてた人が
ハマるパターンだろうね。

585 :デフォルトの名無しさん:2008/10/14(火) 22:04:09
>>580
なるほど、ブロックを使えばいいんですね。

>十分簡潔に思うが、どの辺が使いづらく感じた?
perl なら、 s/([\\'])/\\\1/; と、比較的直感的なところを
>>584 のように"\\\\\\1"と書くとバックスラッシュが多くなりすぎて
後で読みにくいと思ったわけです。


586 :デフォルトの名無しさん:2008/10/14(火) 22:06:36
おっと、 s/([\\'])/\\\1/g; でした。

587 :デフォルトの名無しさん:2008/10/14(火) 23:56:30
str.gsub(/[\\']/, /\\\&/.source)


588 :デフォルトの名無しさん:2008/10/15(水) 00:44:09
Windows限定でいいんですけど、OSが32ビット版か64ビット版か調べる方法はあるでしょうか。
ENV["OS"]だと32bit版XPでも64bit版XPでも"Windows_NT"と表示されて区別が付きません。



589 :デフォルトの名無しさん:2008/10/15(水) 00:51:21
Ruby関係ねえええ

ENV['PROCESSOR_ARCHITECTURE'].include?('64') が true なら 64BitなCPUなのできっと 64Bit版Windows
ttp://support.microsoft.com/kb/827218/

590 :デフォルトの名無しさん:2008/10/15(水) 01:06:42
じゃあruby関係で
ruby -e 'p RUBY_PLATFORM'

64bit環境を持ってないのでどんな出力がされるのかは知らんけど

591 :デフォルトの名無しさん:2008/10/15(水) 01:10:11
RUBY_PLATFORMはコンパイル時に決まりそう

592 :デフォルトの名無しさん:2008/10/15(水) 01:15:50
Fixnumを地道にカウントアップしていってBignumになる境界を見つける -> そこから推定
とかそういうアホを思いついた

593 :デフォルトの名無しさん:2008/10/15(水) 01:21:56
64bitのOSで32bitのバイナリ使ってたら無理じゃないか

594 :デフォルトの名無しさん:2008/10/15(水) 02:22:11
WIN32 API の GetSystemInfo() とか呼んだら良さそうな気がする。
呼び方はあれ、dl 使うなり何なり工夫してくれと。

595 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/15(水) 03:12:41
その程度の誰が書いても同じになるコードには
著作権が発生するほどの創作性はないよ。

597 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/15(水) 07:08:01
CamelCaseキモすぎる

600 :デフォルトの名無しさん:2008/10/15(水) 08:10:27
PascalCaseだね

601 :デフォルトの名無しさん:2008/10/15(水) 08:20:52
LCCだろ

さりとて、Windows の API にはハイフン区切りは似合わないのも事実

602 :デフォルトの名無しさん:2008/10/15(水) 08:25:44
CamelCaseは力強さを感じる

603 :デフォルトの名無しさん:2008/10/15(水) 12:36:20
MSは先頭大文字のCamelCase好きだよね
クラス名でもないのに何故?と違和感を感じる

604 :デフォルトの名無しさん:2008/10/15(水) 14:33:09
クラス名は許せるが、rubyでは_区切りとisPredicateではなくpredicate?を使ってほしい

605 :デフォルトの名無しさん:2008/10/15(水) 15:06:15
>>604
>isPredicateではなくpredicate?
変数に?使えたっけ

606 :デフォルトの名無しさん:2008/10/15(水) 15:17:48
使えないよ。
けどpredicateってことは多分604はメソッド名のつもりで言ったんだと思う

607 :デフォルトの名無しさん:2008/10/15(水) 17:14:47
何気に
attr_reader :hoge?
って書けないんだよな

608 :デフォルトの名無しさん:2008/10/15(水) 20:37:53
@hoge? がだめだからなぁ。
Module#attr_readerが再定義されていればその限りじゃないぜ
意義はないけど。

609 :デフォルトの名無しさん:2008/10/15(水) 20:39:11
?付きメソッドを定義したくなるのはよくあることなのに、attrで定義できないのがな・・・
自分でattr_readerを拡張するか、rubyplusのboolattr使うと便利
つーかActiveSupport辺りにも入ってそうな気がする

610 :デフォルトの名無しさん:2008/10/15(水) 21:32:47
?付きメソッドを自分で定義すれば済むだけなので、漏れは必要ないかなあ。

611 :デフォルトの名無しさん:2008/10/15(水) 21:48:34
>>610
メソッドごとに一つ一つ?付きを定義していくのって凄く面倒じゃね? 変更に弱くなるし

612 :デフォルトの名無しさん:2008/10/15(水) 21:59:26
?末尾のシンボルを渡されたら、メソッド名はそのままに
末尾削った変数にアクセスするっていうのも便利かもしらんね

でも真偽値のアクセサが面倒になるほど多いっていうのも
設計見直せる可能性はない?

613 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/15(水) 22:40:14
>>611
>>612の言うように?付きメソッドをそんなに定義することあるかな?

615 :611:2008/10/15(水) 22:43:31
>>612 >>614
4〜5つ程度の?付きメソッドでも、似たような定義を続けて書くことになるからかなり面倒だと俺は思う
この辺は個人の意見もあるとは思うが

616 :デフォルトの名無しさん:2008/10/15(水) 22:51:08
attr はあまり使わない
メソッドはきちんと定義する

617 :デフォルトの名無しさん:2008/10/15(水) 23:34:27
そもそも @hoge? ができないことに疑問を感じるんだが

618 :デフォルトの名無しさん:2008/10/15(水) 23:45:48
だから ? つきはメソッドだっつーの述語だっつーの

data= っていう変数が作れないのは不自然か?
change! っていう変数が作れないのは不自然か?

619 :デフォルトの名無しさん:2008/10/15(水) 23:56:18
@is_foo みたいな変数名をどれだけ見かけることか
変数名が述語になれないのはおかしい

620 :デフォルトの名無しさん:2008/10/16(木) 00:08:25
@hoge? = 123
まず見た目がきもい
そして三項演算子の文法と衝突しそう

621 :デフォルトの名無しさん:2008/10/16(木) 00:08:33
変数名が述語になるほうがおかしい飢餓す

622 :デフォルトの名無しさん:2008/10/16(木) 00:12:41
@foop か @foo_p でいい

623 :デフォルトの名無しさん:2008/10/16(木) 00:14:27
「○○が二者択一のどちらかか、を格納する変数」というのはあまり Ruby っぽくない
二者択一の判断自体をメソッドで参照するのがフツーな気がする

624 :デフォルトの名無しさん:2008/10/16(木) 00:32:23
>>620
そんなこと言ったらメソッド foo? がどんなオブジェクトも返すことのできる点もおかしくないかい?

625 :デフォルトの名無しさん:2008/10/16(木) 00:36:58
見た目がきもい、ってのはほんとに見たまんま、?で終わる識別子が左辺値にくるのが
きもいってことだよ。
別に @hoge? = true ならいいってことじゃない

626 :デフォルトの名無しさん:2008/10/16(木) 00:41:29
>>621
変数名とメソッド名の間で、言葉づかいの上でのセマンティックスが違っている「べき」なら、attr 系は廃止すべきってことになるな

>>625
@hoge? = true なら悪くないと思うけど

627 :デフォルトの名無しさん:2008/10/16(木) 00:46:06
やだよ。
メソッド名の慣習のせいで、「hogeっすか?」って訊いてるようなイメージがあるじゃん。>@hoge?
で、「そうっすよ」とか「違いますよ」とか返事しようとしてるところに値突っ込むってのは変な感じだ。観念的な言い方でアレだが

628 :デフォルトの名無しさん:2008/10/16(木) 00:50:34
何も @hoge? があってもそう書かなきゃいけないわけじゃないから、? を使わない自由を奪っているわけではないでしょ。
それよりも、attr 系によって変数名とメソッド名を関連付ける機能が提供されているにもかかわらず、? 付のメソッドだけ特例でそれができないほうが一貫性に欠けて嫌だ。

629 :デフォルトの名無しさん:2008/10/16(木) 00:54:28
>変数名とメソッド名を関連付ける機能
単なるメソッド。とあるリフレクションのラップなだけ。

>? 付のメソッドだけ特例でそれができない
できないのはそこじゃなくて変数名に?を付けること。
でもってこっちは処理系本体の機能の話。

パーサとかに手を入れて?付き変数を許してまで@hoge?とか書きたいか?

630 :デフォルトの名無しさん:2008/10/16(木) 00:58:26
そりゃ現状じゃ @hoge? が書けないようにパースしてるんだから、パーサを変えるしかないわな。
別に難しいことじゃない。
あと、attr_reader が処理系そのものが提供しているかどうかなんて関係ないじゃん。飽くまで意味論の話だし、built-inで入ってるんだから。

631 :デフォルトの名無しさん:2008/10/16(木) 01:02:56
だって…再定義できるもの

632 :デフォルトの名無しさん:2008/10/16(木) 01:06:57
>>627
メソッドvalueと変数@valueがあったとして、メソッドのほうは「valueは何か?」と問う意味なのに対して@valueはそのままの意味だよね?
同じようにhoge?がメッセージだと解釈されても、@hoge?までメッセージと解釈する必要はないのでは?

633 :デフォルトの名無しさん:2008/10/16(木) 01:20:26
変数名だからその通りなんだけど、あくまでイメージというか馴れや先入観の問題だよ。>@hoge?がメッセージっぽい

また別の問題として、
変数名に?が付けられて、attr系もそんな名前を受け取るとすると
hoge.foo? = true とか
hoge.bar! = false とかが出て来る。後者なんて比較の否定と見間違う。

さらにいうと、?や!を許すとして、[]とか[]=とか@-は変数名に許す? 全部メソッド名としては有効なはずだよ。
attr_accessor :foo=
-> foo.foo= = 123
こんなことになる

634 :デフォルトの名無しさん:2008/10/16(木) 01:44:47
hoge.foo? = true はできてもいいと思う。
hoge.foo! = ってのはまあちょっとヘンだけど、attr系で ! つけたかったことないから、あってもなくてもいいや。
[] や = が「メソッドの一部である」というのは別の側面で筋を通すための論法であって必ずしも名前の一部ではないので
(その証拠にメソッド「foo=」は、「foo.foo = 」のようにスペースを入れることができる)、
attr_accessor :foo= 等はなくてもよいかと。

635 :デフォルトの名無しさん:2008/10/16(木) 01:55:24
>その証拠にメソッド「foo=」は、「foo.foo = 」のようにスペースを入れることができる
いやいや、メソッド名はあくまで「foo=」だよ。__send__(:foo=, 123)とか出来る。
パーサが頑張って「foo.foo = value」を「foo.foo=(value)」と同じような扱いにしてくれているだけで。

636 :デフォルトの名無しさん:2008/10/16(木) 06:05:11
隔離スレでやれ

637 :デフォルトの名無しさん:2008/10/16(木) 09:41:53
本スレが隔離スレってのも難儀な話だよなあ

638 :デフォルトの名無しさん:2008/10/21(火) 07:15:54
RDEのツールバーとコンソール窓の設定などが上手く動作してくれません
ツールバーを移動して1段にまとめたりしても、RDEを最起動すると別の位置へ
勝手に移動した状態になってしまいます
コンソール窓は、フォントの設定が初期値に戻ってしまうのと、
ctrl+alt+cで開閉したりができません

コンソール窓のフォント設定だけは致命的なんで、そこだけでもなんとかできればと

639 :638:2008/10/21(火) 07:27:47
一応環境も
ActiveScriptRuby 1.8.7(p72)
Windows XP SP3
です

640 :デフォルトの名無しさん:2008/10/21(火) 14:20:14
ツールバーの問題は俺の環境(XP)では何年も前からあるよ。

641 :デフォルトの名無しさん:2008/10/21(火) 15:51:59
てかRDE薦めてるサイトでもあるのか?
俺なら間違ってもRDEなんて使わせないんだが

642 :デフォルトの名無しさん:2008/10/21(火) 15:56:44
統合環境使わせるなら EclipseかNetBeansあたりじゃね?

643 :デフォルトの名無しさん:2008/10/21(火) 15:58:04
本筋以外での障壁が大きいからねえ…
「我慢して使う」時点で何か間違っとる
素直にエディタとプロンプトをAlt+Tabで切り替えて使うほうがマシ

644 :638:2008/10/21(火) 17:13:53
コンソール窓のフォント設定は自分のミスでした
コンソール窓で右クリして「設定」からフォントを設定していたのですが、
直ぐ上に「フォント」というのがありました… 見逃してました

>>640
どもです
ツールバーはしょうがないみたいですね

>>641-643
どもです
winの人がrubyを始めようと思うと、RDEがまず最初に目に入るような気がします
NetBeansはDLしてあったのですが、JAVAが云々…とまたやることが増えそうなので
後回しになってました
とりあえず簡単なプログラムを書いて試したかったので、RDEをという感じで
日常はEmEditorのフリー版(かなり古い)を使っていたので、それでやればよかったのですが
コマンド操作には不慣れなwin人なんで、お手軽(そう)なRDEから初めてみようと思い

初心者〜中級者?への道筋がすっぽり抜けてる感じがしていて先行き不安ですが
書いて直ぐ実行できるのはやっぱり楽しいし勉強になります

645 :デフォルトの名無しさん:2008/10/21(火) 18:04:59
RDEはirbと似たような感じでSandBoxとしてしか使わないなぁ。
ファイルに保存はしなきゃならんけど、EmEditorも言語モード別のキー設定と、
外部プログラムのを実行して標準出力を下窓に出す機能が(少なくともVer6からには)
備わってるから、キー1発で実行はできるよ。

646 :デフォルトの名無しさん:2008/10/21(火) 18:48:59
RDEはいろいろなところで紹介されてるから、知名度はかなり高いし
動作はけっこう軽くて多機能、日本語対応と利点は多い
が、不安定さ(特に文字コード関連)とレジストリ使用がそれらの魅力を帳消しにしている

647 :デフォルトの名無しさん:2008/10/21(火) 19:42:48
RDEを普段使ってない人がファーストインプレッションあるいは又聞きで薦めてんじゃないかと思ってる
普段から使っていれば、少なくとも初心者には勧めようとは思えないはずだ

単一言語用だからといってIDE作成が簡単になるわけではない
1種類の言語にしか対応しなくても、10種類の言語に対応してても、IDEとしての作り方は同じだと思う
Rubyに特化すればIDEが俺でも作れそうとか最初に思った人は罪深いなと思ってみる

648 :デフォルトの名無しさん:2008/10/21(火) 19:58:42
FreeRIDEが日本語や他の文字コードに対応してくれれば無敵なんだが

649 :デフォルトの名無しさん:2008/10/21(火) 22:52:51
rubyの表記法の質問なのですが、
Test::Sample
のように書かれていたら、TestとSampleはともにクラスでTestがSampleの親クラス
という認識で合ってますか?
::という記号は定数やクラス変数なども表すとネットで見たのですが
区別は付くのでしょうか?

650 :デフォルトの名無しさん:2008/10/21(火) 23:13:36
:: は 「の」 だ
Test::Sample は Test 「の」 Sample だ
それ以上の意味はないよ
クラスかどうかは普通に識別子で判断する
先頭が大文字なら定数かクラス
先頭が小文字かアンダースコアならメソッド
ただ、あからさまに面倒なのでメソッドを :: で繋ぐことはRubyでは意図的にしない
(他の言語での書き方をしないと死ぬ人が稀に使う)

651 :649:2008/10/22(水) 00:09:42
>>650
ありがとうございます。
そんな曖昧なものだったんですね。メソッドは#でしたっけ?
この業界っていやに自己主張強い人が多いから統一できないのかな

652 :デフォルトの名無しさん:2008/10/22(水) 07:50:20
RDEってRubyのサンプルプログラムとして付いているもんだと思ってた・・・

653 :デフォルトの名無しさん:2008/10/22(水) 09:30:08
>>651
スクリプト上での表記とマニュアルでの表記は違う

…違ってちゃいけないと思うんだが、まあ、
「○○クラスのインスタンスメソッド××を…」と書く代わりに「○○#××を…」と
「○○クラスのクラスメソッド××を…」と書く代わりに「○○.××を…」と
「○○クラスの定数××を…」と書く代わりに「○○::××を…」と書けたほうが
一度理解してしまえば便利ではある

654 :デフォルトの名無しさん:2008/10/22(水) 18:04:18
>>653
> スクリプト上での表記とマニュアルでの表記は違う
>
> …違ってちゃいけないと思うんだが、まあ、

とはいえ、あるクラスのインスタンスメソッドというのは、直接コード上には
現れないから、そもそも同じ表記にはしようがない。
いちいち X.new.m とか書くのもめんどくさいだろ。


655 :デフォルトの名無しさん:2008/10/22(水) 20:22:05
>>650
Test::Sample だったら普通はmoduleかclassがネストされてるやつじゃね?

656 :デフォルトの名無しさん:2008/10/23(木) 09:59:06
>649
::で示されるのは主に
・モジュール内クラス
・クラス内クラス
・モジュール内モジュール
・クラス内モジュール
・モジュールの持つ定数
・クラスの持つ定数
などであって、クラス間の親子関係ではない。
どちらかと言えば所有、もしくは所属の関係。

657 :デフォルトの名無しさん:2008/10/23(木) 17:43:37
Windowsなら、既に更新停止状態だがJmEditorでぜんぜんいける。
コマンドライン登録しとけば、キー一発で実行できるし、プロンプト
勝手に閉じてほしくないなら、ruby.exe実行してからpauseするバッチ
ファイル登録すればいい。

658 :デフォルトの名無しさん:2008/10/23(木) 18:56:51
まさかJmEditor使いが俺の他にもいたとは
動作軽いしUSBで運べるし、便利だよね

659 :デフォルトの名無しさん:2008/10/23(木) 22:50:55
irb とかでいっつも忘れるんだけど、NKF.guess の返り値の数字と文字エンコード名の関係ってどっかに書いてないかな?

660 :デフォルトの名無しさん:2008/10/23(木) 22:57:18
NKF.constants.map{|s|[NKF.const_get(s),s]}
こんな感じで出せばいいんじゃないか?

661 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/24(金) 08:30:26
.chmもちあるけば解決するお

663 :デフォルトの名無しさん:2008/10/24(金) 09:07:06
>>659
あれは inspect で文字列が出るべきだと思う

664 :デフォルトの名無しさん:2008/10/24(金) 09:07:51
>>662
書いてねえって

665 :デフォルトの名無しさん:2008/10/24(金) 10:01:53
>>664
キーワード:NKF.guess(str) (nkf)
でとんだページの下に定数が書いてあるけど・・・

666 :デフォルトの名無しさん:2008/10/24(金) 11:02:43
> NKF.guess の返り値の数字と文字エンコード名の関係

667 :デフォルトの名無しさん:2008/10/24(金) 23:52:29
ああ、そりゃソース嫁としかw

668 :デフォルトの名無しさん:2008/10/25(土) 13:34:31
>>656
じゃあクラスの継承はどうやって表すの?

669 :デフォルトの名無しさん:2008/10/25(土) 13:55:39
「表しようがない」が正解かと
「XXXを継承したYYY」のように文章で書くしかないな

670 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/26(日) 11:07:36
>>670-671
Excel.Application ペースト でググるんだ
Win32OLEの情報を探すときはRubyに限定しないほうが良い
俺excel持ってないから動作検証できないけどごめんね

673 :デフォルトの名無しさん:2008/10/26(日) 12:43:20
関係ないけど gemで入れられる excel用のライブラリ見つけたぜ
spreadsheet-0.6.1.5 Documentation
http://spreadsheet.rubyforge.org/


674 :670-671:2008/10/26(日) 17:37:00
>>672-673
ありがとうございます。解決しました。

原因は貼り付ける際に列で指定していたからダメだったようで、
貼り付ける先頭セルの値をRangeで受け渡したらうまく行きました。
また上のプログラムだとちゃんと保存できないのも注意です。
開き方の問題なのか読み取り専用になっているようです。
名前を付けて保存するようにしたらちゃんと保存されました。

675 :デフォルトの名無しさん:2008/10/26(日) 19:29:35
掲示板スクリプトを作ってるんだけど、動かない。
どこがおかしいのかな。

使っているサーバー @pages (www4サーバー)

一応誘導を受けて来たので誘導元
□規制解除要望□ dion.ne.jp専用 Part727
http://ex24.2ch.net/test/read.cgi/accuse/1224841217/

スクリプトはここからダウンロードして
http://www4.atpages.jp/mh35jp/bbsmake.html

676 :デフォルトの名無しさん: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:2008/10/26(日) 19:34:59
#676の続きです
def Vlookup(vs,v)
vx=vs.to_f
if (vx<v[0][0]) then
return -99.9
break
elsif (vx>v[v.size-1][0]) then
return 99.9
break
end
for i in 0..(v.size-1)
vpre=v[i][0]
vpst=v[i+1][0]
if (vx>vpre)&&(vx<=vpst) then
if (vpre-vx).abs<=(vpst-vx).abs then
num=i
elsif (vpre-vx).abs>(vpst-vx).abs then
num=i+1
end
break
end
end
return v[num][1]
end


678 :676:2008/10/26(日) 19:35:43
#677の続きです。
DAT=[[0.5,5.0,50.0],[1.0,10.0,100.0],[1.5,15.0,150.0],[2.0,20.0,200.0]]

lines=Array.new

open(ARGV[0],"r") do |f|
while line = f.gets
line.chomp!
lines=line.split(/,/)
lines[1]=Vlookup(lines[1],DAT)
lines[2]=Vlookup(lines[2],DAT)
print lines.join(","),"\n"
end
end


679 :デフォルトの名無しさん:2008/10/26(日) 19:44:37
>>675
いきなり自作CGIをレンタルサーバーで動かすとか正気の沙汰ではないぞ
httpdのエラーログをみよう。
いやその前に、まずは、WindowsならばXAMPPでも入れてローカル環境で試そう、な


680 :デフォルトの名無しさん:2008/10/26(日) 19:54:27
>>679
一応ローカルで実験はした。
方法
1.irbを起動する
2.環境変数を設定
3.systemコマンドで実行
結果
とりあえず動いた

だからアップロードしたわけだが。

681 :デフォルトの名無しさん:2008/10/26(日) 19:58:41
結論:

 ・ 馬鹿にCGIを渡すな



682 :デフォルトの名無しさん:2008/10/26(日) 20:02:38
>>681
一応Apacheをインストール中
ところで、WindowsのApacheでCGIを動かすとき#!の行はどうすればいい?

683 :デフォルトの名無しさん:2008/10/26(日) 20:10:51
家の環境では、ruby.exeをapacheと同じドライブの例えばc:\usr\local\bin\ に放り込んでおけば動いた

684 :デフォルトの名無しさん:2008/10/26(日) 20:12:44
パスは通しておいてね

685 :デフォルトの名無しさん:2008/10/26(日) 20:12:47
>>682
パス通して#!rubyでいいんじゃね

686 :デフォルトの名無しさん:2008/10/26(日) 20:13:15
> パスは通しておいてね
Ruby本体をインスコしたディレクトリにパスは通しておいてね

687 :675:2008/10/26(日) 20:20:11
実験は成功した。普通に動いた。
今度は書き込みを実行したとき何も出力されないバグが出てきたが

688 :デフォルトの名無しさん:2008/10/26(日) 20:34:55
cgi-exception入れとけ
ttp://cgi-exception.rubyforge.org/

689 :デフォルトの名無しさん:2008/10/26(日) 21:02:28
>>688
ローカルでは動く。リモートでは動かない
cgi-exceptionをrequireしても(もちろんそのファイルごとアップロード済み)
まったくダメ。

690 :デフォルトの名無しさん:2008/10/26(日) 21:07:27
この分だと向こうで拡張ライブラリの一部が欠損しているというオチの可能性が
高そう。標準添付のライブラリ(cgi,nkf)しか使ってないのに…

691 :デフォルトの名無しさん:2008/10/26(日) 21:24:01
CGI.unescape(cgi.params['うんこ']) を CGI.unescape(cgi.params['うんこ'][0]) にするとかさ、
NKF,nkf(略) を NKF.nkf(略) にするとかさ、
変数名やGET/POSTパラメタの名前に誤りがないかよく見るとかさ。

692 :デフォルトの名無しさん:2008/10/26(日) 21:26:19
環境を疑うよりは、まず自分のスクリプトを徹底的に疑うべき
CGI-Exceptionでエラーが出ないなら次はprintfデバッグだ
スクリプト中の適当な位置で、テキストファイルにログを書き出していけば
たいていエラー箇所を特定できる
(スクリプトが全く実行されない場合は、syntax errorかrubyパス絡みの可能性が高い)

693 :692:2008/10/26(日) 21:37:21
あ、重要なこと書き忘れてた

初心者は(初心者じゃなくても一緒だけど)まず最小限のCGIスクリプトから書き始めろ
小さなスクリプトが動いてから、徐々に機能追加していかないと
ただでさえ特定しづらいCGIのエラーが、余計に特定しづらくなる

少なくとも、そこそこの長さがあって環境変数が関わるような掲示板スクリプトを
一気に書き上げるべきではない

694 :デフォルトの名無しさん:2008/10/26(日) 21:55:34
>>691
それにはすでに気づいて直した。直したが治らない。
>>692
syntax errorがらみはありえない(-cオプションで検査済み)
パスもチェック済み(/usr/local/bin/ruby)
>>693
一応ローカルで動作確認済みなので

695 :デフォルトの名無しさん:2008/10/26(日) 21:59:42
これはRubyの問題ではない(まだ)

>>694
だからその方法が間違ってると指摘されてるだろう
CGIは「ブラウザでInternalServerErrorが出なくなるまで書き直す」という手法で開発してはいけない
エラーメッセージを確認しない開発手法は糞だ

696 :デフォルトの名無しさん:2008/10/26(日) 22:02:14
> 一応ローカルで動作確認済みなので
最小限のCGIスクリプトをサーバー上で動かさないとダメ
「環境変数自分で入れて、systemで実行して動いたから」というのではあまり意味がない

697 :デフォルトの名無しさん:2008/10/26(日) 22:03:11
結論:

 ・ 馬鹿にCGIを渡すな



698 :デフォルトの名無しさん:2008/10/26(日) 22:04:18
>>695
とりあえずちょいと方法が思い浮かんだので実験してみる

1.まずは単なるテストスクリプトが動くか確かめる
それすら動かないようならとりあえずこの環境での動作はあきらめたほうがよい
2.次にちょっとした工夫のなされたテストスクリプトを使って実験を行う
3.最後にその結果を見て検証する

699 :デフォルトの名無しさん:2008/10/26(日) 22:04:55
RubyでWin32弄くる場合に必要な知識はRubyそのものではないのと同様に
RubyでCGIやる場合に必要な知識はRubyそのものではないのだな

ライブラリで吸収隠蔽すべきかどうかというのは悩ましいとこだと思う

700 :デフォルトの名無しさん:2008/10/26(日) 22:05:14
>>696
Apacheでも動作確認済み
1時間以上前に実験した。

701 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/26(日) 22:09:26
>>700
どう動作確認したのかkwsk
俺の環境でApache立ち上げて試してみたが、普通にアクセスしただけでエラーが出る
具体的には>>701

703 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/26(日) 22:10:02
>>699
だねえ

>>700
小出しにするな
自分で話をまとめられないなら諦めれ

705 :デフォルトの名無しさん:2008/10/26(日) 22:11:17
> 小出しにするな
> 自分で話をまとめられないなら諦めれ

に一票
そして離脱

706 :デフォルトの名無しさん:2008/10/26(日) 22:17:59
>最小限のCGIスクリプトをサーバー上で動かさないとダメ

に対して

>Apacheでも動作確認済み
>1時間以上前に実験した。
って…明らかに話噛み合ってないな

707 :デフォルトの名無しさん:2008/10/26(日) 22:19:34
>>703
自分でApache立ち上げて試すときは、そのパスじゃまず起動しないぞ
#!ruby -Ks
にして試してみ。それでも駄目ならお手上げ

708 :675:2008/10/26(日) 22:21:49
>>706
まったくかみ合わない上に、どうやらこちらの問題ではなさそうだと
判明したのでたぶんこれ以上話し合っても結論が出る可能性は0(正確には)

ただ、根本的バグが見つかったのは皆さんのおかげです。
皆さん、ご協力どうもありがとうございました。

709 :デフォルトの名無しさん:2008/10/26(日) 22:24:45
>>707
もちろんローカルでやるときはそのためのパスにするわけですけどね。

710 :デフォルトの名無しさん:2008/10/26(日) 22:31:12
>>707
Rubyの絶対パスを指定して動いてるので、いえるのは
もはやここでは対処しようのない問題だということです。
とりあえずテストスクリプトすら動かないということは
他のところに持っていったのでこれ以上の深入りは
避けたいと思います。

711 :デフォルトの名無しさん:2008/10/26(日) 22:32:04
>>703
ステータスコード書いてないから動かなくて当然
あと\n\nだとサーバが非winのとき困るんじゃないか?

712 :デフォルトの名無しさん:2008/10/26(日) 22:33:31
てゆーかbbs.cgi自体も割りと…たぶん2、3個の虫食いじゃないよな、
斜め読みした感じでも

713 :デフォルトの名無しさん:2008/10/26(日) 23:01:23
パーミッションの設定してませんでした><

714 :707:2008/10/26(日) 23:10:02
>>711
あ、そうか
NPH環境だとステータスコード無しでは動かないのか…

715 :デフォルトの名無しさん:2008/10/26(日) 23:38:16
超遅レスだけど
>>656 >>668 >>669
ここら辺の話って本当なんですか?
Rubyのライブラリのレファレンスでクラスの説明とか見るとよく::が使われてるけど
あれは本当は間違いなんですか?

716 :デフォルトの名無しさん:2008/10/26(日) 23:48:43
>>656以外の使い方してるやつなんてあんのか
具体的になんてライブラリのリファレンスのどの部分よ

717 :デフォルトの名無しさん:2008/10/27(月) 00:17:15
>>676
「vlookupのようなもの」ってのが、一体どんなのか分からんのだが
vpreとvpstではさんで比較してるってことは、ソート済みだと仮定してもいいの?
良いなら二分探索が使える

コードについて
・Range#eachがあるんだからeachを使う。Rubyでforは(めったに)使わない
・不要なbreakが見られる
・異常入力に対して99.9とかを返すのは、これでいいの?

718 :デフォルトの名無しさん:2008/10/27(月) 01:26:18
>715
マニュアル内でのその記述はクラスの親子関係じゃなくて、大抵モジュールの定数のハズ。

719 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/27(月) 01:34:23
言うなれば :: でクラス同士を繋いでいたら、それは親子じゃなくて入れ子の関係ってところか。

721 :デフォルトの名無しさん:2008/10/27(月) 01:47:29
Railsの質問はここでいいんでしょうっか?
Web画面を共有出来るアプリが作りたいので
実験で5分で動くshootingstar使ったchatのテストアプリみたいなのを
動かしたんですけど自分でブラウザを更新しないと表示画面が更新されません。
バージョンは、shooting_star (3.2.7)とrailsは2.1.2でOSはUbuntuなんですけど。。

722 :デフォルトの名無しさん:2008/10/27(月) 02:10:00
WebProg板にRailsスレあるよ

【Ruby】Ruby on Rails Part6
http://pc11.2ch.net/test/read.cgi/php/1224838013/

723 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/27(月) 05:51:25
>>711
ほぼ参考書のままです。
とりあえずステータスコードをつけて動くか確かめてみます

726 :デフォルトの名無しさん:2008/10/27(月) 05:59:36
結局Content-typeの改行コードを\r\nにしたら動きました

727 :デフォルトの名無しさん:2008/10/27(月) 06:22:47
>>726
それは誤りだ

728 :デフォルトの名無しさん:2008/10/27(月) 07:26:44
>>727
一応めでたく完成して新しい追加機能2つ(日付表示・連投規制)を
付け加えました。たぶんこれで実運用上、書き込みがぶつからなければ
なんとかなると思います。タグ検索機能はなんか変ですが
おいおい何とかします。

729 :デフォルトの名無しさん:2008/10/27(月) 08:20:38
>>727
誤りではないだろう、HTTPの標準改行コードは\r\nだ
出力先がバイナリモードでさえあれば問題はない

730 :デフォルトの名無しさん:2008/10/27(月) 21:40:37
>>716 >>718 >>719
Java出身のruby初心者だったものでクラスライブラリはクラスの継承で繋がってると思い込んでました。
なるほど、rubyはモジュールや入れ子のクラスを多用するんですね。
勉強になりました。ありがとうございました。

731 :デフォルトの名無しさん:2008/10/27(月) 22:15:18
Javaだってよく使うだろう。

732 :デフォルトの名無しさん:2008/10/27(月) 22:25:44
RubyやPerlって一体なにに使う言語なんですか?

Htmlに組み込む言語という解釈でいいんですか?

733 :デフォルトの名無しさん:2008/10/27(月) 22:41:28
>>732
だいたい何にでも使う

734 :デフォルトの名無しさん:2008/10/27(月) 23:02:23
テキスト処理をするのに使う

テキスト処理と聞いて何も思いつかない場合はまだスクリプト言語に用がないということなので
PerlやRubyのことはすっぱり忘れて別なことを楽しみましょう

735 :デフォルトの名無しさん:2008/10/28(火) 00:49:43
rubyはrailsのために使います。
フリーだと現時点で一番効率よく稼げるのrailsです。
3人月の案件で700は固いから月給200万ですよ。

736 :デフォルトの名無しさん:2008/10/28(火) 17:05:00
日本語でおk

737 :デフォルトの名無しさん:2008/10/28(火) 19:13:55
>>732
>Htmlに組み込む言語

それはPHP

738 :デフォルトの名無しさん:2008/10/28(火) 20:26:14
>>737
HTMLがPHPになるんですか?
PHPがHTMLになるんですか?
組み込むってそういうことですよね?

739 :デフォルトの名無しさん:2008/10/28(火) 20:54:46
画面分割はどうやればいいんですか?
自動的に隠したり、分割を×ボタンで消したりする機能のパックになったコントロールとかあるんですか?

740 :デフォルトの名無しさん:2008/10/28(火) 20:57:37
>>739
Webクライアントの仕組みについて理解してから来なさい。


741 :デフォルトの名無しさん:2008/10/28(火) 20:58:32
>>739
えーと…
Rubyの仕事ではないので、GUIに何を使ってるか調べて、それに関するスレなりサイトなりに行くといい

742 :デフォルトの名無しさん:2008/10/28(火) 21:18:58
@蠣←これを右クリでコピーする
Aスタート→すべてのプログラム→アクセサリ→メモ帳を起動
B編集→貼り付け
C編集→すべて選択
D変換キーを押す

743 :676:2008/10/28(火) 23:44:49
>>717
説明不足でした。私がやりたいのは、以下のものです。
・1列目にソート済みの数値が入っている
・2列目には1列目の各行に対応する数値が入っている
・ある数値(入力値)が来た時に1列目の中から最も近い値を探し、それに対応する2列目の値を返す
・もし入力値が1列目の数値の上下限から外れていたら、それぞれ99.9か-99.9を返す
です。

>・Range#eachがあるんだからeachを使う。Rubyでforは(めったに)使わない
始めたばかりなもので。。。今後はeachを使います。(ちなみに速度に差はありますか?)

>・不要なbreakが見られる
入力値が上下限から外れていたら、関数の中のif文より後のfor文にいれたくなかったので使いました。これを見てからelseに書き換えました。
(一般的にbreakは多用しない方がよいのですか?)

>・異常入力に対して99.9とかを返すのは、これでいいの?
異常を示す文字列にしようかとしましたが、今、私がやりたいことにおいて99.9で十分なのでこうしました。


744 :676:2008/10/28(火) 23:45:30
>>723
>1.
書き忘れていましたが、ご指摘のとおりソート済みを仮定しています。

>2.
ちょうどそのエラーに出くわしていたところでした。。。

>3.
事前に一応調べてはみたのですが、ちゃんと理解できていなかったです。
また数学がよくわかっていないため、2の事態が発生しました。

>4.
MATCH関数を知らなかったので調べてみましたが、どのように適用すればよいかわかりませんでした。もう少し詳しく教えていただけないでしょうか。

>>724
知らない事がありすぎるのですが、みやすくなったので使ってみたいと思います。
速くなるのも教えていただけると助かります。。。

745 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/29(水) 07:00:09
全角空白厨は何を言っても説得力がない

750 :デフォルトの名無しさん:2008/10/29(水) 09:42:12
そこが気になるというのは、もしやコードをテストしてみようとしたわけか?
朝早くから実に殊勝な心がけだ。 大変すばらしい。

それだけ向上心があるなら、更なる技術向上のための課題として、全角半角の
変換フィルタでもチャレンジしていただきたい。 (もちろんワンライナーな)

751 :デフォルトの名無しさん:2008/10/29(水) 10:08:41
>>750
コードは全く読んでない
全角空白かどうかだけをブラウザ上でチェックした
それで充分

752 :デフォルトの名無しさん:2008/10/29(水) 10:21:12
>>749,751
俺もコード張るときはwebブラウザとかJaneのこと考えて
全角に変換してから張るんだけど何かまずいの?

753 :デフォルトの名無しさん:2008/10/29(水) 10:21:57
書き込む際に見やすいように、という理由でいわゆる全角スペースを使うのは
割とよくあることだと思うんだが、それをどういう切り口で転がすと「厨」になるんだろ。
それこそ「説得力が無い」よ。

754 :デフォルトの名無しさん:2008/10/29(水) 10:26:48
全角空白なんて危険なもの使わなくたって &nbsp; があるだろう
初心者がコピペで実行する初心者スレで全角空白みたいなのをコードに混ぜるのはあまりいい気はしない

arr.each do |e|
  puts e
end

755 :752:2008/10/29(水) 10:31:22
>>754
ああなるほどな、サンクス

756 :デフォルトの名無しさん:2008/10/29(水) 10:34:41
>>754
本人?

よりよい方法がある、という話ならわかるけど、そんなことで厨呼ばわりした上で、
コードなんか見なくても十分とか言ってのけたわけ?
「あまりいい気はしない」とか、なんか急にトーン下がってるけど。

757 :デフォルトの名無しさん:2008/10/29(水) 10:40:23
>>756
いや全然

検証のために irb にコピペして全角空白でエラーになってピキッとなったことはないか?
せっかく書き込み前に置換する手間を割いてるのに置換先が全角空白だというのはバカっぽいだろ
なんでわざわざ実行不可能なコードにさせるんだよ

758 :デフォルトの名無しさん:2008/10/29(水) 10:46:17
他人が実行するかもしれないことに気が回らない俺スゴイ系の人は
2chでは厨呼ばわりされても仕方ないかな、という気はちょっとだけする


759 :デフォルトの名無しさん:2008/10/29(水) 11:01:39
だが、ム板では普通に見かけるけどな。
インデントを全角空白で、ってのは。

760 :デフォルトの名無しさん:2008/10/29(水) 11:24:51
ソース見れば普通に半角空白残ってるんだお

761 :デフォルトの名無しさん:2008/10/29(水) 11:35:27
置換の手間は割けなくても長文粘着はありなんだよねこういう人ってw

762 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/29(水) 11:55:24

 投稿者1人が半角スペースなコードをエディタに書く
          ↓
 書き込み時に全角スペースに置換する
          ↓
 参照者複数人が各々のコピペ時に全角スペースを置換する
          ↓
 エディタに半角スペースなコードができる


まあ、プロトコル的に無駄ではあるな
投稿者が半角スペースを&nbsp;に置換してくれさえすれば参照者はコピペだけでおkなのに

2chブラウザによっては半角スペースを投稿時に&nbsp;に変換してくれるものもあるけどな
navi2ch使いあたりはこのへん全く意識しないはず
というか、全角スペース混じってると範囲実行のM-|ができなくてイラつく(w
いちいち

1 [1,2,3].each do |e|
2 puts e
3 end

と行番号つきで書かれるくらいムカつく

764 :デフォルトの名無しさん:2008/10/29(水) 12:05:00
Jane Doe Styleで >>754 をコピーすると
半角スペースの箇所はクリップボードには &#160 (&#は半角)で保存されるぞ

アプリケーション( 2ch 含む)によって文字参照の扱いなんてまちまちなんだから
文字参照に変換してから貼れって主張にはあまり魅力を感じないんだよな

765 :デフォルトの名無しさん:2008/10/29(水) 12:09:49
コピペ内容に関して意識してる2chブラウザはそう多くないよね
どうレンダリングするかとかはRFCに記述ないんだっけ?

766 :デフォルトの名無しさん:2008/10/29(水) 13:14:44
なにやらえらい騒ぎになってしまったな。

全角半角が問題になるのはコピペする人間だけなのだが、実際それをする人間がどれ
ほどいるのか。
他の板ならともかく、いかに初心者スレとはいえここはム板なんだから、一括置換な
んぞ5秒でこなす
くらいの能力は期待できないものなのか。
学校のセンセじゃあるまいし、その程度は勘弁していただきたい。

まぁ、全角を使っているのは書き込みログが読みにくくなるから、というしょーもな
い理由なので、
こちらも置換すれば済む話ではあるし、専ブラで対処できるものなら導入を検討する
よ。

と、ここで新着見たら、そんな簡単な話しでもないのか。
確かに>>764は以前くらったことがあるな。
どうしたもんかね。

767 :デフォルトの名無しさん:2008/10/29(水) 13:17:44
ノンブレイカブルスペースは \x20 とは別物。常識

768 :デフォルトの名無しさん:2008/10/29(水) 16:32:30
おれも &nbsp; つかってたけど、>>764と同じことがあって、
結局全角スペースのほうが害がすくないと判断してる。

>>767
そうなんだよね。しかも&nbsp;が半角スペースにならない環境だと、
置換が全角スペースより面倒なんだよな。

まあ2chの仕様がクソということで。


769 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/29(水) 22:43:51
>>762
CSV::Writer ならエスケープが必要なフィールドだけエスケープされるので、
以下のようになるはずだけど。

AAA,BBB,CCC,"DD
D"

DD\nDだけじゃなくてAAAとかもクォートして欲しいってこと?

772 :デフォルトの名無しさん:2008/10/30(木) 13:30:47
>749-768
先頭の空白に関しては、まだRubyは良いほうでしょ
Pythonなんて先頭の空白が纏められたら話にならんかと

773 :デフォルトの名無しさん:2008/10/30(木) 16:17:11
while文の中にif文入れられる?

774 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/30(木) 18:53:18
>>775
手っ取り早いのはeval。
でも数式に限らずなんでも実行できてしまうから
四則演算だけ処理したいならraccとそのサンプルのcalc.yあたりとか。

777 :775:2008/10/30(木) 19:31:22
>>776
ありがとうございます。助かりました。

778 :デフォルトの名無しさん:2008/10/30(木) 22:51:35
>>776
> 四則演算だけ処理したいならraccとそのサンプルのcalc.yあたりとか。

正規表現で入力を検査してokならevalに渡す方が楽でない?

779 :デフォルトの名無しさん:2008/10/30(木) 22:58:30
そのへんは入力元がどのくらい信用できてどのくらい調教可能かによるな

780 :デフォルトの名無しさん:2008/10/30(木) 23:07:18
信用できないから検査する。
何によるかというならどれくらい受理する式の文法を限定できるかだろう。
君、バカでしょ。

781 :デフォルトの名無しさん:2008/10/30(木) 23:18:40
検査が必要かどうかという話だろ
自分で電卓代わりに使いたいだけなら入力検査は不要

こんなの完璧にやるか全くやらないかの2択なんだから信用度は重要
2//3 で エラー吐いて落ちるのは困るだろうし
1 2 + 3 で エラー吐いて落ちるのは困るだろうし
1/3*3 で 0 が返るのも困るだろうし
(1..2) で Range オブジェクトが返るのも困るだろう

782 :デフォルトの名無しさん:2008/10/31(金) 00:02:44
>>781
君はバカさ加減の露出癖でもあるのかね。

> こんなの完璧にやるか全くやらないかの2択なんだから信用度は重要

不測の動作をさせないことが保証できればいいんだよ。
エラーはevalのすぐ外で捕捉すりゃいい話。

> (1..2) で Range オブジェクトが返るのも困るだろう

そうならないように検査するんだろうが。

783 :デフォルトの名無しさん:2008/10/31(金) 00:03:55
じゃあraccでやれよ

784 :デフォルトの名無しさん:2008/10/31(金) 00:06:22
は?

785 :676:2008/10/31(金) 00:28:23
>>745
returnしたら、その後に行かないという基本的な事を知りませんでした。。。

説明していただいた内容が理解できていない部分があるので質問させて下さい。
「MATCHとINDEXまたはOFFSETとの組み合わせなら」とおっしゃっているのは、
それぞれ以下のもののことでしょうか?
http://www.ruby-lang.org/ja/man/html/Regexp.html#match
http://www.ruby-lang.org/ja/man/html/Array.html#index
http://www.ruby-lang.org/ja/man/html/MatchData.html#offset
それとも以下のようなexcelの関数のことでしょうか?
http://support.microsoft.com/kb/181212/ja
これすらも解からない状況です。申し訳ありませんがよろしくお願いいたします。

>>746-748
ループ版の早さは今の私には驚異的です!
1個のデータを処理するのにexcelで処理していたときは約5分
自分で作ったvlookupで約2分だったので、1秒かからなくなるんですね。
ただ、勉強不足でわからないことだらけです。
ループ版を自分で作るには時間がかかるので少し待って下さい。
完成したら添削をお願いします。

786 :デフォルトの名無しさん:2008/10/31(金) 02:28:31
http://qb5.2ch.net/test/read.cgi/operate/1206636885/657
駄目元で書き込んだ。
賛同してくれる人はこのレスに同意のアンカーをつけてくれ。

787 :デフォルトの名無しさん:2008/10/31(金) 04:54:23
>>785
コードの端々で妙な書き方してるから、他言語でヘンな癖でもつけて
きたのかと思ってたら、もしかしてプログラミング初心者だった?
Excel VBA使いを想定してたんだが、Excelもサッパリのようだし…
INDEXやOFFSET等、全部大文字で書いたのはExcelの関数。
これらについてはスレ違いなので他でよろしく。


まぁ、とりあえずは基本的な文法・制御構造をまず覚えてくれ。
最低限、分岐・ループ・メソッド呼び出しとそこからの脱出あたり。
勧めといてなんだけど例外は後回しでいいかな。
一度苦労した後の方が有り難みもよく分かるだろうし。

次に組み込みクラスについて調べてみる。
上で使ってるのは、数値(Numeric), 文字列(String), 範囲(Range)
あたりを見れば分かる程度の簡単な使い方してる。
重要なのは配列(Array)とEnumerableの2つ。
制御構造と並んで、こいつらがアルゴリズムを実装する要だ。
(今回は使わなかったが、Hashもいずれ知っておくべき)

クラスライブラリを全部覚えるのは大変だろうけど、どんなことが
できるかくらいはざっと目を通しておくといい。

そうしたらコードを読んでみる。
どれもかなり短いから、読み下すのはそう難しくないとおもう。
行数短縮のために三項演算子を濫用している点は申し訳ない。

788 :デフォルトの名無しさん:2008/10/31(金) 04:58:30
コードを読んだだけでは内容を理解するのは難しいだろうから、
短い配列でどのような動きになるか、紙に書いてみるといい。
再帰をループに変更するにはアルゴリズムを十分に理解して
いなければならないが、是非がんばって挑戦してほしい。

ケチな高速化など後回しと書いた理由も実感して貰えたと思うが、
もし興味を持ったなら、アルゴリズムも勉強してみてはどうか。
ほんのちょっとの仕組みの違いで速度が千倍とかざらにあるよ。
計算量の考え方だけでも知っておくことをお勧めする。

789 :デフォルトの名無しさん:2008/10/31(金) 07:54:59
VB系はreturnに直接相当する命令がないからな。
戻り値と、プロシージャを抜ける構文が別になってるから。
で、そのまま直訳してreturnとbreakに分けた、と。そんな感じだろう。

790 :デフォルトの名無しさん:2008/10/31(金) 10:38:32
ひとこといわせてくれ。
>>787-788、おつ。こんごもがんがれ。

791 :デフォルトの名無しさん:2008/10/31(金) 17:14:09
あるクラスAが別のクラスBのサブクラスかどうかを判定するメソッドってありませんでしたっけ?
今は
A.ancestors.include?(B)
とやってるんですけど、かっこわるいですよね。

792 :デフォルトの名無しさん:2008/10/31(金) 17:21:41
どうして?それでよいのでは?

793 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/10/31(金) 17:51:24
>>793

>> File < IO
=> true
>> Dir < IO
=> nil

なにこれーーー

>> Fixnum < Integer
=> true
>> Array < Enumerable
=> true

module もOKだ

ちょうさんくすです



795 :デフォルトの名無しさん:2008/10/31(金) 18:44:55
まさかModule/Class同士の比較ができるとは・・・知らなかった

796 :デフォルトの名無しさん:2008/10/31(金) 21:10:08
>>795
伊達に継承の記号が "<" なわけじゃない。
……かどうかは知らないが。

797 :デフォルトの名無しさん:2008/11/01(土) 06:26:05
VIPから来ますた

798 :デフォルトの名無しさん:2008/11/01(土) 06:26:45
VIPから来ますた

799 :デフォルトの名無しさん:2008/11/01(土) 06:28:45





∧_∧
( ´・ω・) みなさん、VIPからさし入れのお茶が入りましたよ・・・・。
( つ旦O
と_)_) 旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦

800 :デフォルトの名無しさん:2008/11/01(土) 06:44:02
VIPから来ますた

801 :728:2008/11/01(土) 08:48:50
検索機能がついに完成しました。
一応私の夢見た掲示板をついに作り終えました。
とはいえまだ課題がいくつか残ってます。
それを今後つぶしていきます。

802 :デフォルトの名無しさん:2008/11/01(土) 11:00:45
以下のスクリプトで,30行目で,
usr/lib/ruby/1.8/net/http.rb:451:in `initialize': wrong number of arguments (2 for 1) (ArgumentError)
のエラーが出てしまいます。
比較のためにAとBを作ったのですが、29行目ではエラーが出ません。
Net::HTTPを承継したクラスを作って,コンストラクタの部分を
オーバーライドしようとしています。
エラーの原因は何でしょうか
1 #!/usr/bin/ruby
4 require 'net/http'
5 require 'uri'
7 class A
8 def initialize(arg)
9 puts "A initialized", arg
10 end
11 end
13 class B < A
14 def initialize
15 puts "B initialized"
16 end
17 end
19 class C < Net::HTTP
20 Net::HTTP.version_1_2
21 def initialize(url)
22 uri = URI.parse(url)
23 puts "C initialized"
24 super(uri.host, uri.port)
25 end
26 end
28 url = 'http://www.yahoo.co.jp/'
29 p b = B.new
30 p c = C.new(url)


803 :デフォルトの名無しさん:2008/11/01(土) 12:21:28
URIはHTTP専用ってわけじゃないので、ちゃんとプロトコルから書く。
あとNet::HTTPはわりと残念な設計で、サブクラスでinitializeをオーバーライドしても呼ばれない。
委譲したほうがいいかも

804 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/11/02(日) 08:33:41
そこでhttpclientですね

806 :デフォルトの名無しさん: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 = 'http://www.yahoo.co.jp/'
p c = C.new(url)
 
Net::HTTP を眺めて同じ挙動を再現しようと思ったけど、できないYO!
class A;end
class << A; alias newobj new; end
class A
  def A.new(foo, bar=nil)
    a = A.P(foo, bar).newobj(foo, bar)
  end
  def initialize(foo, bar=nil)
    puts "A init."; @foo = foo; @bar = bar
  end
  def A.P(foo, bar=nil);self;end
end
class B < A
  def initialize(foo)#, bar=nil)
    puts "B init."; super(1, 2)
  end
end
p b = B.new(3)

807 :デフォルトの名無しさん: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:2008/11/03(月) 00:21:05
おおお!!thx>>807
なんで、A付けちゃったんだろ?
これを色々いじって、マニュアル見ながらよく考えてみる。
も一回ありがとう!>>807

809 :デフォルトの名無しさん:2008/11/03(月) 17:14:38
ディレクトリの中にあるすべてのファイル名を変えるプログラムを作ろうとしたのですが
5分で挫折しました(笑)

File.open("D:\\Data") {|f|
puts f.to_str()
}

とりあえずこうやってファイル名を出力しようとしたのですが、
コマンドプロンプトではすべてUNICODEのファイル名で表示されてしまい
わけわかめです。
$SCODE = SJISとかやってもダメでした

810 :デフォルトの名無しさん:2008/11/03(月) 17:28:30
それファイル名じゃなくdataというファイルの中身を読んでいるように思えるが

`dir d:\\data /b`.each { |f| f.chop!
  puts f
}


811 :デフォルトの名無しさん:2008/11/03(月) 17:39:07
その場合メソッドパラメタの名前は line とかのほうがいいぞ

812 :デフォルトの名無しさん:2008/11/03(月) 17:42:01
メソッドパラメタ → ブロックパラメタ

813 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/11/03(月) 18:15:13
>>813
今のrubyは\も扱ってくれるよ

と思ってたが、Dir.globは\区切りに対応してないのね……

815 :デフォルトの名無しさん:2008/11/03(月) 20:31:28
下のディレクトリの中も再帰的にやるんじゃなかったら
Dir.entries(ディレクトリのパス).reject{|d| File.directory? }
とか。

816 :デフォルトの名無しさん:2008/11/04(火) 00:14:51
rubyでファイルの種類の判断ってできますか?
拡張子で判断するのではなくファイルの中身で、Excelファイルかどうかの判断が
したいんです。
よろしくおねがいします。

817 :デフォルトの名無しさん:2008/11/04(火) 01:34:00
できますよ

818 :デフォルトの名無しさん:2008/11/04(火) 03:33:29
>>816
がんばってマジックナンバー嫁

819 :デフォルトの名無しさん:2008/11/04(火) 08:17:09
>>816
unix系ならFileMagicだけどwindowsはよう知らん

820 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/11/06(木) 11:05:21
require 'foobar'
としたあとで、'foobar.rb' の絶対パスを調べる方法ってありますか。


823 :デフォルトの名無しさん:2008/11/06(木) 15:13:55
File.expand_path($LOAD_PATH.map{|d| File.join(d, 'foobar.rb') }.find{|path| File.exist?(path) })

824 :デフォルトの名無しさん:2008/11/06(木) 15:19:42
>>823
それは読み込んだファイルであることを保証しない

825 :デフォルトの名無しさん:2008/11/06(木) 15:27:19
読み込んだファイルそのものを指定することは1.8ではできないと思った
同名のファイルをファイルパスから探すことはできるけれど

>>823で問題になる場合というのはなくはないとは思うが非常にレアなような気もする

826 :デフォルトの名無しさん:2008/11/06(木) 15:32:16
foobar.rb で File.expand_path(__FILE__) を返すようなメソッドなりなんなりを用意しておくほうが確実なのかな
>>823の要件に合うとは思えないけど

827 :デフォルトの名無しさん:2008/11/06(木) 15:35:43
>>826
require を拡張したほうが妥当と思う

が、どうすればいいのやら
gem の require はどうやってるんだっけ

828 :デフォルトの名無しさん:2008/11/06(木) 15:43:39
foobar.rb で File.expand_path(__FILE__) を返すようなメソッドなりなんなりを
requireしたあとからくっつければ医院で内科医?


829 :デフォルトの名無しさん:2008/11/06(木) 16:20:11
>>828はのび太

830 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/11/06(木) 21:45:52
拡張子省いてrequireしたとき、.soだったのか.rbだったのかまで知りたくなったら、$LOADED_FEATURESとも突き合わせて比較する必要も出てくる。




832 :デフォルトの名無しさん:2008/11/07(金) 00:21:42
突然ごめん。
p array
した時の["hoge", "fuga", "boo"]みたいな書式って
変更できたりしない?
あと一歩でcsvなので便利に使えそうなんだが。
pのことをググって調べるのは非常にホネが折れる…

833 :デフォルトの名無しさん:2008/11/07(金) 00:28:03
inspect

834 :デフォルトの名無しさん:2008/11/07(金) 01:07:55
>>832
http://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html#p
なんでもぐぐって調べようとするから骨が折れてるんだろうw

835 :デフォルトの名無しさん:2008/11/07(金) 02:12:54
>>832
joinの方が楽

836 :デフォルトの名無しさん:2008/11/07(金) 03:23:57
>>832
>>835
その名も「csv」というライブラリが標準で付いてることを忘れないでやってくれ。

837 :デフォルトの名無しさん:2008/11/07(金) 09:49:56
>>832
一文字目と最後の文字消せばいいだけじゃね?

838 :デフォルトの名無しさん:2008/11/07(金) 12:18:53
なんでもかんでもググるって馬鹿がすることだよね。
賢い人なら知りたいことが見付かりそうな文書はどこにあるのかをまずは考える。

839 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/11/07(金) 21:16:58
File#flock() を使う方法しかしらない。

File.open("foobar.txt", "wb") do |f|
 f.flock(File::LOCK_EX) # 排他ロック
 f.unlock();
end

841 :デフォルトの名無しさん:2008/11/07(金) 21:22:21
なんか既視感がある

組み込みで妥当に動作してるロック機構を再発明しようとするな、というのがアドバイスだったはず

842 :デフォルトの名無しさん:2008/11/07(金) 21:24:54
>>840
まずそのサーバーでflockが使えないから無理
>>841
組み込みで現に存在してるのが使えないから問題。
確認したいこと
1.とりあえず方法があっているか。
2.Windowsだとまともに動かないようだが他のプラットフォームだとどうか。

843 :デフォルトの名無しさん:2008/11/07(金) 21:35:38
>>839
1.8.6-FreeBSDだけど File::CREAT|File::EXCL で Errno::EEXIST が出る
ただし>>839のソースをそのまま実行すると例外が rescue でとらえられて
例外処理でロックファイル削除されてからリトライするから、例外が発生してないように見える
あとrescueの下の二行間違ってるよ

844 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/11/07(金) 21:45:56
>>844
あ、やばい。そこがおかしい。
どう考えてもおかしい。
if(File.stat('lockfile').mtime+10<Time.new) then
こう直すべきだ

847 :デフォルトの名無しさん:2008/11/07(金) 21:55:09
>>844
どこでおかしかったか分からないが治った。thx

848 :デフォルトの名無しさん:2008/11/07(金) 21:57:23
>>842
> 組み込みで現に存在してるのが使えないから問題

849 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/11/07(金) 22:24:21
それでもやっぱり最後のレースコンディションは解消してないのだが、
これ以上この方法にこだわる限り改善の余地はなさそう。

852 :デフォルトの名無しさん:2008/11/07(金) 22:42:44
>>842
>まずそのサーバーでflockが使えないから無理
File#flock() が使えない環境ってどんなの?
どこでも使えるもんだと思ってた。

853 :デフォルトの名無しさん:2008/11/07(金) 23:03:27
>>850
更新時刻から10秒待つのに、リトライは0.1秒×10回でいいのか、というのはおいといて、ゴミ掃除を別々のプロセスで確実にやるのは無理だと俺は判断してる。
ゴミ掃除専用のプロセスを1個だけ別に動かしとけ。メインの処理に10秒以上かかる可能性がないと言えるなら、それで大丈夫だろ。


854 :デフォルトの名無しさん:2008/11/07(金) 23:31:32
どうせ専用のプロセスを立ち上げるなら,
druby使ってmutexを共有するという強引な方法を思いついた

855 :デフォルトの名無しさん:2008/11/08(土) 00:22:16
普通にO_EXLOCKでシステムのアドバイザリロック機構に頼ればいいんじゃないのか?
下がnfsだったりするとアレだが。

856 :デフォルトの名無しさん:2008/11/08(土) 05:41:35
>>853-854
レンタルサーバーでCGIを動かすために使うというのが大前提なので。
プロセスの常駐とかまず無理。
10秒待つのではなく確実を期すために10秒以上前のロックファイルを
削除するといっている。待つ時間は1秒。

857 :デフォルトの名無しさん:2008/11/08(土) 05:43:07
flockメソッド(関数)は、言語によって同じ名前でも実装が違ったり
一部のファイルシステムやレンタルサーバ上では使えなかったりしてあまり信用できない

かといって自分でロック機構を実装すれば、レースコンディションの危険がある
なんかこの辺をさくっと解決してくれるpure rubyなライブラリないかな

858 :デフォルトの名無しさん:2008/11/08(土) 11:34:57
>>857
>flockメソッド(関数)は、言語によって同じ名前でも実装が違ったり
Rubyの話してるんだから他の言語は関係ないだろ。

>一部のファイルシステムやレンタルサーバ上では使えなかったりしてあまり信用できない
だからどんなファイルシステムやレンタルサーバ上で使えないの?
具体名をだしてくれ。
どういう場合にflockが使えないのかを、ドキュメントに書いてもらおうぜ。


859 :デフォルトの名無しさん:2008/11/08(土) 12:23:44
>>858
NFS上でのロックは不可能。
これはflockシステムコールの実装から来る制約。
fcntlを使えばNFSでロックすることは可能になるがIO.ioctl関数という
可搬性が低いメソッドを用いなければならず(まずWindowsなら実装されていないと
門前払い)かなり面倒。おまけにたいていNFS上でのロックはセキュリティホールに
なるので使えないのが普通。

860 :デフォルトの名無しさん:2008/11/08(土) 12:49:31
>>858
レンタルサーバだと、flockが明示的に禁止されているサーバがある。パンドラとか

ただ、現在flockを使えないサーバがどのくらいあるかは分からない
無視できるほど少数かも

861 :デフォルトの名無しさん:2008/11/08(土) 22:07:38
正規表現の書き方なのですが、、、、
>Sector:</td><td class="yfnc_tabledata1"><a href="http://biz.yahoo.com/p/7conameu.html">Services<
こんな文字列があって、前後にも改行以外の文字が色々とくっついているのですが、
Sector:の後のServicesをマッチさせて文字としてとってこようとすると、どう書けば良いでしょうか?


862 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/11/09(日) 11:46:37
wxRubyについて勉強してるんですが、何かいいサイトはありますか?

一応自力で見つけたサイト
http://www.gesource.jp/programming/ruby/gui/wxruby/index.html
http://wx.k5-n.com/wxruby/

最小限のことは自分でやってます。require周りは自分でなんとかしてます。

865 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/11/09(日) 12:12:20
式展開を含まないならどうでもいい

868 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2008/11/09(日) 12:42:43
>>864
公式のチュートリアル。
あとWxWidgetsのサイト全般と公式のAPIドキュメント。

wxに限ったことではなく、既存ライブラリのRubyバインディングは
元ネタのサイト漁るのが一番いいと思う。

871 :デフォルトの名無しさん:2008/11/09(日) 12:57:40
>>870
読んでみたんですが、すでに???状態です。
英語ワカンネじゃなくてそもそも読む気力がないのが大問題だったりするわけですがorz
今度気力が回復したらやってみます

872 :デフォルトの名無しさん:2008/11/09(日) 13:09:11
わかんなくてもコードコピペしてたら何となく動くし
それでもダメならWxWidgets関連のサイト参考にって>>870の2-4行目で

873 :デフォルトの名無しさん:2008/11/09(日) 13:15:24
>>872
ええ。一応その段階はある程度OKです。
あとはゆっくり亀のように進んでいけばいいんです。
解決しました。ありがとうございます。

874 :デフォルトの名無しさん:2008/11/09(日) 13:23:24
>>864
harukaze wxPython で検索

あと、解説サイトじゃないけど
wxRuby開発者が出してるwxsugarオススメ

875 :デフォルトの名無しさん:2008/11/09(日) 13:49:02
>>874
たぶん言ってるサイトはこれだと思うんだけど、
http://www.harukaze.net/~haruka/wxpython/index.html
なんかドメイン飛んでるよ
Pythonのが参考になるっつーことは理解できたけど。

876 :866:2008/11/09(日) 15:29:30
>>867-869

ありがとう、よく分かりました。

877 :デフォルトの名無しさん:2008/11/10(月) 23:22:19
>>859
>NFS上でのロックは不可能。
ほう、そうなのか。知らなかった。さんくす。

>fcntlを使えばNFSでロックすることは可能になるがIO.ioctl関数という
>可搬性が低いメソッドを用いなければならず(まずWindowsなら実装されていないと
>門前払い)かなり面倒。
Windows上でNFSを使うことはないだろうから、ioctlはUNIX限定でいいんじゃね?

>おまけにたいていNFS上でのロックはセキュリティホールに
>なるので使えないのが普通。
これよくわかんないんだけど、理由は?参考になるURLプリーズ。

>>860
>レンタルサーバだと、flockが明示的に禁止されているサーバがある。パンドラとか
これも理由がわからん。レンタルサーバでNFS使ってるわけじゃないだろうし。なんで?

878 :デフォルトの名無しさん:2008/11/10(月) 23:31:11
>>877
ttps://menu.pandora.nu/public/flock.php
パンドラ側の説明みつけた

879 :デフォルトの名無しさん:2008/11/11(火) 00:06:10
超絶初心者な質問で申し訳ないんですけど、RubyScript2Exeでexeファイル作りたいんですけど上手くいきません。
使い方は、RubyScript2Exe.rbとexeにしたいファイルを同じフォルダに入れて、
コマンドプロンプトで、「ruby [RubyScript2Exeのパス] [exeにしたいファイル]」
で合っていますか?

880 :デフォルトの名無しさん:2008/11/11(火) 07:32:00
>>878
サンクス。あきらかにNFS使ってるね。
そんなサーバがあることに驚いたけど。

881 :デフォルトの名無しさん:2008/11/11(火) 07:50:04
つまりflock前提として、最適なロック方法は
「まずIO.ioctlでロックを試みる、エラーが出ればrescueしてflockする」ということか!

・・・面倒だ
やっぱり、完全に可搬性のあるファイルシステムロック用のライブラリが欲しいな

882 :デフォルトの名無しさん:2008/11/11(火) 08:19:04
「完全に」とか簡単に言っちゃう人って頭悪そう。

883 :デフォルトの名無しさん:2008/11/11(火) 08:36:33
不完全or不安定なライブラリがほしいって言うのもなんだと思うが

884 :デフォルトの名無しさん:2008/11/11(火) 08:49:34
欲しい欲しい、して欲しい。

885 :デフォルトの名無しさん:2008/11/11(火) 09:14:19
RAAやRubyForgeをざっと探してみたけど、ファイルロック用のライブラリらしきものが見当たらない
実はみんな、あまり必要としていないのか?

MLでこんな古い話は見つけたが、ソースコードはもう公開されてないっぽい
(時間ないから詳しく探してないけど)
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/11326

886 :デフォルトの名無しさん:2008/11/11(火) 09:50:16
本来、ファイルロックみたいにべったり環境依存なものに、完全な可搬性を求める発想が普通は余りないんだよね。
とはいうものの「環境依存だから諦めろ」ってのも古い考えで、こういう操作こそ処理系で環境差異を吸収しろ、っていう意見も、確かに一つの見識だと思う。
というわけで、完全な可搬性を持ったファイルロックの実装をコントリビュートしてくれ。

887 :デフォルトの名無しさん:2008/11/11(火) 09:54:31
あんまり気にしたこと無かったけど、makeするあたりで
良きに計らってくれるとよさそうな感じだね

888 :デフォルトの名無しさん:2008/11/11(火) 15:07:35
flockが使えるかどうかがファイルシステムに依存する以上、
コンパイル時に判定するのは無意味じゃないか?


889 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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=http://www.spc.gr.jp/software/archive/rubbs-1.0.7.tar.gz&cs_f=rubbs-1.0.7/lock.rb

891 :デフォルトの名無しさん:2008/11/11(火) 17:53:13
>>890
この関数の流れは…
1.ロックファイルを固有ファイルに名前を変えようとする。成功したら3へ
2.失敗したらタイムアウトより古いロックファイルがあればロックを取得しようとする。
成功したら3へ
3.1秒待って1へ戻る。ただしtry回試して失敗したら打ち切り
4.ロックを取得できていなければLockError例外を発生させる
5.ブロックをともなって呼び出されていた場合そのブロックを実行する。
そしてロックを解放する

ロックの解除は普通に元のファイル名に変更するだけ。

汎用性はかなり高いと思われる。レースコンディションを検討しても
まずないだろうと考えられる。ファイルのリネームができないサーバーは
まずないだろうからその面でも問題はない。

892 :デフォルトの名無しさん:2008/11/11(火) 18:01:12
ただし、このプログラムを使う場合、GPL2が適用されるので
それを使ったソースの配布もGPL2を用いなければならず、
そこが唯一の問題だったりする。逆に言えば、GPL2で
配布する予定のプログラムならぜんぜん問題はないといってよい。

893 :デフォルトの名無しさん:2008/11/11(火) 19:05:10
>>892
自分で書き直せばいいんじゃね?


894 :デフォルトの名無しさん:2008/11/11(火) 22:36:42
アトミックな処理(シンボリックリンクの作成とか)を利用したロック方法は
それなりにノウハウが枯れきっている話題だし、自分で実装しちゃえばいい。


895 :デフォルトの名無しさん:2008/11/12(水) 07:21:48
試しにファイルシステムロック用のライブラリを書いてみた(不完全)
mkdir方式で共有ロック・排他ロックの区別あり
ttp://eload.run.buttobi.net/cgi-bin/img/e_260.zip

ロック検出→ロックディレクトリ作成の間に
明らかなレースコンディションがあるんだけど、解決の方法が思いつかない・・・
何かいい解決策はないだろうか

896 :デフォルトの名無しさん:2008/11/12(水) 12:34:09
すでに存在するディレクトリを指定したときにエラー返らないんだっけ?

897 :デフォルトの名無しさん:2008/11/12(水) 13:20:39
Perlだけど解説は参考になるかな
http://www.din.or.jp/~ohzaki/perl.htm#File_Lock

898 :デフォルトの名無しさん:2008/11/12(水) 21:36:28
>>896
Errno::EEXIST

899 :デフォルトの名無しさん:2008/11/13(木) 08:41:51
改良版。レースコンディションは無くなった……と思う
その代わり1回のロックで2つのディレクトリを作るため、効率はやや悪い
ttp://eload.run.buttobi.net/cgi-bin/img/e_261.zip

>>896
共有ロックだと、複数のロックを同時にかけられるから
「まずmkdirしてみて、失敗するならロックされている」という検出方法が使えなかった

900 :デフォルトの名無しさん:2008/11/13(木) 16:44:54
ボロボロじゃん。
教科書に載るようなちゃんと知られたアルゴリズムを調べて書いた方がいいと思うよ。

901 :デフォルトの名無しさん:2008/11/14(金) 00:49:45
Rubyで簡単な落ちゲームがあるのですが

http://jp.rubyist.net/magazine/?0018-GameProgramingForRubySDL

これをネットワーク越しに(LAN内のみ)二人対戦できるようにするには
どのような方法がありますでしょうか?
指針だけでもいいのでご教授お願いします。

902 :デフォルトの名無しさん:2008/11/14(金) 00:58:11
drb

903 :デフォルトの名無しさん:2008/11/14(金) 01:09:35
マルチは止めること

基本的なものだと発想はごく単純で、
互いが互いのキー入力やイベントを送信しあうだけ
左キーが押された!とかアイテム取った!とか

904 :デフォルトの名無しさん:2008/11/14(金) 01:30:22
それじゃダメ。
片方をサーバにするのが一番簡単。

905 :デフォルトの名無しさん:2008/11/14(金) 12:22:38
>>899
いい感じだと思うぞ

ただ、読み込みのときにディレクトリ名の生成を
乱数に頼ってるところが怪しい
1秒に10回くらいのリクエストがあると衝突しそう

906 :デフォルトの名無しさん:2008/11/14(金) 15:42:32
ロックするのはIO.ioctlじゃなくてIO.fcntlな。

907 :デフォルトの名無しさん:2008/11/14(金) 23:59:42
マルチってなんでダメなの?

908 :デフォルトの名無しさん:2008/11/15(土) 00:26:23
>>907
「おなかが空いて死にそうなんです…」
「自分ではもうどうすることもできません…」
「お願いです一食分のお金でいいのでめぐんでください…」
といって食事代をめぐんでもらった
場所を変えてまた同じことを繰り返す
人の善意を利用した最低の行為

909 :デフォルトの名無しさん:2008/11/15(土) 11:13:23
>907
マルチポストでググって出てくる最初のほうのいくつかを嫁

910 :デフォルトの名無しさん:2008/11/15(土) 13:29:25
dbに繋げるために、MySQL/Rubyを入れたいんですが
$ sudo gem install mysql -- --with-mysql-dir=/usr/lib/mysql
と打ち込んだら、下みたいになります。
誰か教えてください。
$ head mkmf.log
find_library: checking for mysql_query() in -lmysqlclient... -------------------- no

"cc -o conftest -I. -I/usr/lib/ruby/1.8/i486-linux -I. -I/usr/lib/mysql/include -fno-strict-aliasing -g -g -O2 -fPIC
conftest.c -L"." -L"/usr/lib" -L"/usr/lib/mysql/lib" -L. -Wl,-Bsymbolic-functions -rdynamic -Wl,-export-dynamic
-lruby1.8-static -lmysqlclient -lpthread -ldl -lcrypt -lm -lc"
sh: cc: not found
checked program was:
/* begin */
1: /*top*/
2: int main() { return 0; }
3: int t() { void ((*volatile p)()); p = (void ((*)()))mysql_query; return 0; }
/* end */


911 :デフォルトの名無しさん:2008/11/15(土) 13:43:13
sh: cc: not found

コンパイラ入ってるか?


912 :910:2008/11/15(土) 13:53:08
>>911
apt-get install gcc
apt-get install make
をやったところ、無事にgem install mysqlが通りました。
ありがとうございます。

913 :デフォルトの名無しさん:2008/11/15(土) 21:28:50
Dir.glob("**/*"){|f| p f }

↑だとフォルダもファイルも一緒に表示されてしまいます
フォルダのみファイルのみのパスが欲しいんですがどうしたらいいんでしょう

914 :デフォルトの名無しさん:2008/11/15(土) 21:46:07
dirs, files = Dir.glob("**/*").partition{|path| File.directory? }

915 :デフォルトの名無しさん:2008/11/15(土) 22:05:58
ありがとうございます、今まで長々と書いてたけど短く出来るんじゃないかと思って聞いてみました。
あとコピペしたらエラーになったんで最後にpathを付けたら動きました。

dirs, files = Dir.glob("**/*").partition{|path| File.directory? path}

916 :デフォルトの名無しさん:2008/11/15(土) 22:49:15
Dir.glob("**/*/"){|f| p f }

917 :デフォルトの名無しさん:2008/11/16(日) 01:07:09
>>916
ありがとうございます、フォルダのみ検索できました

ファイルのみ検索できないか試したけど、拡張子ありファイルならできました
Dir.glob("**/*.*"){|f| p f }

918 :デフォルトの名無しさん:2008/11/16(日) 01:29:01

なにかが重複していて、テーブルが作成されないのですがいくつか試したものの
うまくいきません。誰か助言をお願いします。

$ gem list

*** LOCAL GEMS ***

actionmailer (2.1.2, 1.3.6)
actionpack (2.1.2, 1.13.6)
actionwebservice (1.2.6)
activerecord (2.1.2, 1.15.6)
activeresource (2.1.2)
activesupport (2.1.2, 1.4.4)
fastercsv (1.4.0)
gettext (1.93.0)
hoe (1.8.2)
mysql (2.7)
rails (2.1.2, 1.2.6)
rake (0.8.3)
rspec (1.1.11)
rspec-rails (1.1.11)
ruby-openid (2.1.2)
rubyforge (1.0.1)
rubygems-update (1.3.1)
uuidtools (1.0.4)
$ rake db:migrate
(in /railsApp/scheduler)
/railsApp/scheduler/config/boot.rb:20:Warning: Gem::SourceIndex#search support for String patterns is deprecated
$


919 :918:2008/11/16(日) 02:10:28
試しに、バージョンを指定してdb:migrateを実行してみたところ別のエラーになりました。
根本的な勘違いをしているのでしょうか?

$ rake _1.2.6_ db:migrate
/usr/local/lib/site_ruby/1.8/rubygems.rb:636:in `report_activate_error': RubyGem version error: rake(0.8.3 not = 1.2.6) (Gem::LoadError)
from /usr/local/lib/site_ruby/1.8/rubygems.rb:141:in `activate'
from /usr/local/lib/site_ruby/1.8/rubygems.rb:49:in `gem'
from /usr/bin/rake:18

920 :デフォルトの名無しさん:2008/11/16(日) 02:22:52
>>918はduplicatedじゃなくてdeprecatedだし、警告だから、
あなたが遭遇している問題とはおそらく関係ないと思う。
モデルは作った? DBは作った? アダプタは何? 最近のデフォルトはsqlite3だぞ。

>>919でしているのはrakeのバージョン。
rakeは0.8.3しか入ってないんだからそういうエラーになる。



921 :デフォルトの名無しさん:2008/11/16(日) 02:36:33
>>920
ありがと。
いろいろ試してエラーメッセージを見てたら気づきました。。。
gemを使って、railsの2.1.2を入れたり消したりしてたら
いつのまにか、インストール済み(2.1.2と1.2.6)のrailsとその関連のパッケージは
アンインストールができなくなりました。
2.1.2は暫く使わないので、一回消したかったのだけど。

922 :デフォルトの名無しさん:2008/11/16(日) 02:50:22
hashってキーから値をだすけど、値を指定してキーを取り出すことはできないですよね?

923 :デフォルトの名無しさん:2008/11/16(日) 02:54:04
Hash#index

924 :デフォルトの名無しさん:2008/11/16(日) 03:03:14
ありがとうございます

925 :デフォルトの名無しさん:2008/11/16(日) 04:12:20
>>917
> ファイルのみ検索できないか試したけど、拡張子ありファイルならできました
それはファイルとディレクトリを区別してるわけではなく、
途中に"."を含むパス名を探している。
Dir.glob単独で区別できるのはディレクトリのみ。


926 :デフォルトの名無しさん:2008/11/16(日) 08:51:18
Rubyでプログレスバーを更新しながらファイルをダウンロードしているプログラムの例を
ご存じありませんか?参考にしたいのですが。

927 :デフォルトの名無しさん:2008/11/16(日) 08:58:40
Ruby プログレスバー でぐぐった?
あと GUI か CUI かで話が違ってくるかも

928 :デフォルトの名無しさん:2008/11/16(日) 10:49:04
>>925
そうですか、フォルダに"."があれば反応しちゃうんですね

929 :デフォルトの名無しさん:2008/11/16(日) 11:13:18
当方Java使いの業務系システムSEです。
Ruby on Railsが良いらしいと最近知って、
キャッチセールスにハマった奴状態になりました。
よしRubyだ!さっそく勉強だ!と思って、昨日本屋で
「たのしいRuby」「Rubyレシピブック」「Railsレシピブック」
3冊一気に購入しました。

そして今日、このスレを見て……
>>228-230
Rubyのスコープ管理ってそんない甘いの!?
えっ、Windowsでは重すぎてまともに動かないの!?
まともに対応してるIDEは無いの!?
何ソレ!?
・・・・・・でゲッと思っている俺、34歳オッサンのおばかさんです。

本は3冊で合計、\8,610しました……涙目・・・

Ruby…ダメなの?じゃあスレ違い申し訳ないですが、
LLやるとすれば何が良いんでしょうか?
小規模業務系システムに耐えるもので、Javaより小コスト
でライトなもの、って何でしょう?
Python + Django なんですか?よければお教えください。


930 :デフォルトの名無しさん:2008/11/16(日) 11:18:27
>>929
開発環境を自由に変更できる立場の人が2ちゃんで効かないでください。あなたのチームは終わってます。

931 :929:2008/11/16(日) 11:22:39
>>930
いやいや、そんなんじゃないです。ただのへっぽこ零細企業の人間です。
ただこれからの技術の移り変わりに対応する為、あるいは後学のため、
ってだけの理由です。
仕事で使う必然性があるわけではありません。

932 :デフォルトの名無しさん:2008/11/16(日) 11:33:01
JavaとC++とPHP,Perl知っていれば大抵の業務はこれのいずれかでは?

933 :デフォルトの名無しさん:2008/11/16(日) 11:34:35
>まともに対応してるIDEは無いの!?
動的型付けな言語なら補完なんか大してできないのでどれも似たり寄ったりな気が

934 :929:2008/11/16(日) 11:40:07
連投スイマセンが、ちと補足を。
当方、ただLLに興味持って、やってみたいと思っただけの
人間です。ただそれにしても将来性とかかんがえちゃうの
で、後々自分の仕事で使う機会があるとすれば…?という
発想をしただけです。
決してRuby使いの皆様をくさそうとする意図はありません。
スレ違い、たいへん失礼しました。

935 :デフォルトの名無しさん:2008/11/16(日) 11:41:11
LLがなにかわからん

936 :デフォルトの名無しさん:2008/11/16(日) 11:45:52
>>929
>>228-230はスコープ管理の話なんかしてないしrubyのスコープ管理は甘くなんか無い
>>228-で言ってるのはrubyはタイプセーフなプログラミングが出来ないって事で
それはその通りだけどテスト駆動な開発をすれば問題無い、と>>253までつづいてる
それより本を買ったんなら元を取るつもりで全部読めよ、もったいない

937 :デフォルトの名無しさん:2008/11/16(日) 11:47:37
しかし,Railsが万能であり,PHPやJavaなど既存の環境をすべて置き換えられるという訳ではない。
Railsの作者であるDavid Heinemeier Hansson氏は元々PHPユーザーであり,いまでも37signalsのページではPHPが使われている。
Railsはしっかりしたモデルを持ったデータベースアプリケーションには向いているが,メールフォームやアンケートなど,
遷移の少ないものでは,その利点をあまり発揮しない。またPHPなどに比べて,メモリーを消費すると言う問題もあり,
資源の少ないサーバーでの運用には注意が必要である。
http://itpro.nikkeibp.co.jp/article/COLUMN/20060424/236113/

938 :デフォルトの名無しさん:2008/11/16(日) 11:49:43
926です。
Ruby/GTK+付属のデモで画像を表示するやつ(プログレスバーは出てきませんが)をみながら
自分で書き終えてしまいました。

>>929
「ためにする心配」につられていても仕方がないと思いますよ。
その欠点は本当か、あるいはそれは実際に深刻なものなのか、というのはやってみずに
評価したふりをしてみても仕方がない。
それから、いずれにしても「後々使う機会があるかも……?」という程度では今何を
やったところで実際に使うときにも詳細は陳腐化の可能性が大きいです。
それならば考え方や長所短所を飲み込んでおくために
明らかに一方の代表格であるRailsを学んでみるのは悪くない選択だと思います。

939 :デフォルトの名無しさん:2008/11/16(日) 12:20:54
929です。
>>936,>>938
おっしゃる事はごもっともです。良く分ります。
さらにちょっと、余談でごめんなさい。なぜRubyに興味を持ったのか?
という話をします。
それは、不況だって事です。安易かもしれませんが、不況だから、今後
業務系大規模システム案件は減少するだろうと思ったわけです。
すると中小規模で小金額の案件が多くなるだろうと。大規模なら当然
Javaなんですが・・・。
それと、Javaでも充分重いって事もあります。だからもっと中小規模
向きで、シンプルで軽く低コストに開発できる技術が流行ってくるだろう、
と。
それでRubyあたりがもっとシェア上げて来るんじゃねえか?などと思った
次第です。日本人が作ったというのも、右派な自分には魅力でした。
まだ自分には結論だせませんが、今後も興味は持ち続けたいと思います。

940 :デフォルトの名無しさん:2008/11/16(日) 12:26:00
>>939

>>937
>またPHPなどに比べて,メモリーを消費すると言う問題もあり,
>資源の少ないサーバーでの運用には注意が必要である。

941 :デフォルトの名無しさん:2008/11/16(日) 12:36:30
>>940
つまり軽い技術欲しがる事に対しては、Rubyは軽くない、PHPのほうがマシ、と言いたい?

942 :デフォルトの名無しさん:2008/11/16(日) 12:53:18
おいおいPHPに比べて資源を消費するのはRailsの話だろ。
勝手にすり替えてRubxをこき下ろそうとするなよ。

943 :デフォルトの名無しさん:2008/11/16(日) 13:01:58
>>942 すいませんそのとおりですね。Railsの話でした


944 :デフォルトの名無しさん:2008/11/16(日) 16:59:04
>>940
まあ確かにメモリは食うけど共有サーバでCGI実行みたいな環境じゃなく、
普通に2GBくらいメモリ積んでるサーバ使えば問題にならないよ。
データベース用サーバならともかくアプリ用のサーバのメモリをケチっても中小規模の案件(数台〜10数台)なら大した差がないだろ。

945 :676:2008/11/16(日) 23:29:31
数週間前に質問した者です。
(excelのvlookupのようなものをrubyで書きたいと質問しました)
二分探索のループで書いたものがやっと(自分の中で)完成しました。
どんな感じでしょうか?コメントをいただきたいです。
よろしくお願いいたします。

def match_loop(val, array)
high=array.size-1
low=prek=0

while 0
k=(high+low)/2
if prek!=k then
val<array[k] ? high=k : low=k
else
break
end
prek=k
end
return val-array[low]<array[high]-val ? low : high
end


946 :676:2008/11/16(日) 23:37:22
>>787-789
ちなみに私のプログラム歴ですが
学生時代にperlを12コマと卒研でcを数ヵ月、
社会人になってからこんな感じで少しです。
変なクセは学生時代のどちらかで付いてしまったと思います。

VBは今回のもので少し書きましたが
全然速くならなかったのですぐにあきらめてしまったので
breakの話とかは全く知らないです。

とにかく、ど素人です。
申し訳ありませんが >>945 の添削よろしくお願い致します。

947 :デフォルトの名無しさん:2008/11/17(月) 00:28:11
>945
ぱっと見て目につくのは while 0 かな。
他言語の 0 が偽でRubyが真なのとあいまってすげぇ紛らわしいw
Rubyには loop do 〜 end っていう無限ループ用のイテレータがあるからそれを使う。
つか、他言語やってたらな while 1 か while true と書くだフツーw

948 :デフォルトの名無しさん:2008/11/17(月) 00:46:20
>>946
アルゴリズム自体に問題は無いと思う・・・・・思うが、実行してないので自信がないw

・スペース。記号間には適宜スペースを入れると見やすくなるとされる。まあこれも流儀があるらしいが

・無限ループ
while文は、条件部分が真の場合にループ部分を実行する
Rubyにおいて真とは、「falseとnil以外の全て」だから、while 0でも一応は無限ループになるが
表記として非常に紛らわしい(言語によっては、0を偽とみなすものもある)
せめてwhile 1、でもRubyには組み込み関数(関数的メソッド)loopがあるので、無限ループには慣用的にこれを使う

・ifの辺り
if〜else breakだと、縦に長くなって終了条件も読み取りづらくなる
さらにifは後置表記ができる

・最後のend手前
メソッドでの最後のreturnは省略でき、その場合は最後の式を評価された値が戻る。今回は省略してみた
あと個人的には、三項演算子の条件部分が複雑で読みづらいので、せめて括弧が欲しい
コーディング規約によっては、「複雑な条件ならif文を使え」ともされているが、今回はまあ良いんじゃなかろうか

def match_loop(val, array)
 high = array.size - 1
 low = prek = 0

 loop do
  k = (high + low)/2
  break if prek == k
  val < array[k] ? high = k : low = k
  prek = k
 end
 (val - array[low] < array[high] - val) ? low : high
end

949 :デフォルトの名無しさん:2008/11/17(月) 00:51:32
組み込み開発でC言語しか知らないけど、勉強のためにRubyを勉強しようと思っています。
組込みしか知らない人で同じくRubyを勉強している人いますか?
お勧めの書籍や、気をつけるべき点があれば教えてください。

950 :デフォルトの名無しさん:2008/11/17(月) 02:00:02
>>946
returnのところで、境界の2値との距離を取って、近い方のインデックスを返すようにされてますが、
これだと、順序はある(大小比較が出来る)けど距離(差)が取れない値の検索が出来ないですよね。
(例えば数値の検索には使えても辞書順に整列された文字列の検索には使えませんよね。)

なので、関数の再利用性を高めるために、
より汎用性の高い「二分検索して境界のインデックスを返す」という関数はそれ単体で作っておいて、
その関数を呼び出して境界の2値との距離を取って近い方のインデックスを返す関数、をmatch_loopとするのが良いと思います。

あと関数の名前がちょっと気になります。検索方法が二分検索ならば配列はソートされていることが前提なので
間違えて変な配列を渡さないように、それが分かるような名前にした方がいいと思います。
例: binary_search、search_sorted_array など

951 :デフォルトの名無しさん:2008/11/17(月) 12:58:36
>>949
書籍については>>2を参照のこと
組み込みの世界は知らないんだが、Rubyってあるのかなあ・・・・・・?

952 :デフォルトの名無しさん:2008/11/17(月) 20:31:40
>>951
そもそも組み込みのところにインタプリタ内蔵できないでしょ

953 :デフォルトの名無しさん:2008/11/17(月) 22:23:07
>>949
>組込みしか知らない人で同じくRubyを勉強している人いますか?
>お勧めの書籍や、気をつけるべき点があれば教えてください。
特にない。初心者と同じように勉強すればいい。
ただ組み込みを知っているなら、当然アセンブラやポインタの理解はしているだろうから、
内部の動作を解析した『Rubyハッキングガイド』をいきなり読むのも面白いかも。

>>951,952
別に組み込みで使いたいなんて、>>949には一言も書いてないんだが

954 :デフォルトの名無しさん:2008/11/17(月) 22:28:36
おすすめしていいのか迷ってたけど、自分もRHGはアリじゃないかと思った。
http://i.loveruby.net/ja/rhg/book/
でもこれ、いま書籍手に入る?

955 :676:2008/11/17(月) 22:33:44
>>947,948,950
どうもありがとうございました。
やはり私が知らない事をたくさん指摘していただけて勉強になりました。

whileに関しては0と1どっちかなぁ、と初めに0をやったら
無限ループになったから使ったという最低な事をしてました。。。

関数の名前と汎用性は今後勉強していくうちにステップアップしていきたいです。
今は数値の検索にしか使わない、ということと >>945 の数行を書くのに
いっぱいいっぱいだったので。

今後もよろしくお願いいたします。

956 :デフォルトの名無しさん:2008/11/17(月) 22:45:06
>>954
多分無理

957 :デフォルトの名無しさん:2008/11/17(月) 23:02:08
>>954
Rubyソースコード完全解説: 青木 峰郎, まつもと ゆきひろ: Amazon.co.jp: 本
http://www.amazon.co.jp/dp/4844317210

出品者からお求めいただけます。
1点の新品/中古商品を見る: ¥ 20,000より


958 :デフォルトの名無しさん:2008/11/18(火) 00:53:01
hpricotみたいな感じでjavascriptのボタン押す方法ってないですか?
watirはwinだしfirewatirはバックグラウンドで起動の方法が分からない。。

959 :デフォルトの名無しさん:2008/11/18(火) 01:25:08
>951-954
アドバイスありがとうございました。
組込みの現場で使うと言うのではなく、部長から
「組込みだけでなく、組込み+αを目指せ」
といわれ、部としてRuby技術者を増やすらしいのです。

ですから、あくまでも主体は組込みで、
勉強というか、知識の幅を広げるためのRubyです。
(さすがに知っている知識が、C言語と組込技術のみは狭すぎるから)
そのため、現在、UMLを先行して勉強しています
(これは業務でも利用できるので)

>ただ組み込みを知っているなら、当然アセンブラやポインタの理解はしているだろうから、
そうですね。そのあたりは理解しているつもりです。
(アセンブラの場合、読めますが、書くとなると少しがんばる必要がありますが、RISCの場合とか)

とにかく、まずは読んで動かしてぐりぐりとやってみます。

960 :デフォルトの名無しさん:2008/11/18(火) 01:59:47
そういえば、東芝がCellの処理能力を利用して、
Ruby使って組み込み開発できるようにするってのは進行してるのかな。

961 :デフォルトの名無しさん:2008/11/18(火) 05:29:58
少々出遅れてしまったか。
>>945
お、できたのか、すばらしい。
再帰を読み解けというのはちょっとハードル高かったかもと思ってたんだが、
どこかで二分検索の解説を探してきたかな? 
アルゴリズムの実装はちゃんとできてるようだね。

コーディングスタイルについて……は、突っ込み入ってるし、まぁ、いいか。
# そもそも自分が人に偉そうなことをいえる様な書き方してない。

一つだけ言わせてもらうと、break, return の使い方が前回と一緒。
breakで抜けた後はreturnするだけ。 だったら最初からreturnでいいじゃん。
そもそも無限ループにするより、うまいこと終了条件を設定できないかな?

他には返値の近接値判定が >>677 では下に寄せているのに、>>945 では
上に寄せている。 [0, 1] で 0.5 を探すと >>746 は 0 >>945 は 1 を返す。

それからprek に前回の k を保存しているようだけど、意義がよく分からない。
前回の k の値は high か low のどちらかに残るのになぜ必要なのかな。


まとめると、プログラムの進行を、いつ、どういった条件で、どのように分岐
させるのかというあたりの考えがどうにも甘い感じがする。
前回は言わなかったけど、>>677なんかがその典型で、if に対する else が
来るべきところに、elsifで真偽値を反転した式を再度評価していたりとか、
絶対に成立する/しない条件式や絶対に通過しないコードがあったりとか。

説教くさいようだけど、値を比較する時に大小関係がよく分からなくなった
からといって安易に絶対値をとってごまかしてみたり、whileに適当に0を
入れたり、なんだかよく分からないけど動いてるみたいだからまぁいいか、
なんてスタンスでいると後々痛い目を見るよ。
一遍くらいは泣きを見た方が却っていいのかもしれんけど。

962 :デフォルトの名無しさん:2008/11/18(火) 05:33:41
いろいろ言ったけど、それでも結構よくできてたと思うよ。頑張ったね。
参考までに>>746のもの。>>945とよく似ているけど、なにが違うかな。

def match_loop(val, array)
 return array[0] if array.size <= 1 # 配列が空の時はnilを返す
 head = 0
 tail = array.size - 1

 while tail - head > 1
  navel = (head + tail) / 2
  if val < array[navel]
   tail = navel
  else
   head = navel
  end
 end
 val-array[head] <= array[tail]-val ? head : tail
end

963 :デフォルトの名無しさん:2008/11/18(火) 13:05:37
>>954
Rubyハッキングガイドの本は入手できなくても、Webでよめるよね。
http://i.loveruby.net/ja/rhg/book/

あと、「初めてのRuby」には、一般ユーザでも知っておいた方がいいRubyの内部構造にしぼって解説が載っているみたいだから、
Rubyハッキングガイドをいきなり読むよりはいいかもしれない。
http://www.oreilly.co.jp/books/9784873113678/

964 :デフォルトの名無しさん:2008/11/18(火) 13:07:44
rand() の戻り値って、0 < rand() < 1 ですよね。
整数値を得たい場合はどうしたらいいですか。
RAND_MAXとかあるかと思いましたが、なさそうです。


965 :デフォルトの名無しさん:2008/11/18(火) 13:41:15
整数値で引数を与えると
0 ≦ rand n < n で整数を返すようになる

966 :デフォルトの名無しさん:2008/11/18(火) 14:27:50
>964
そりゃRubyのrand()は1万桁の乱数だって平気で返せるからな。
どこかでテキトーに区切りつけれ。

967 :デフォルトの名無しさん:2008/11/18(火) 15:17:30
ここで質問していいのか良く分からないのですが、良ければ教えてください。

cygwin上のrubyで最近ircのbotを動かそうとして、riceを使いghotiを動かしています。
ところが発言がNOTICEじゃないので、NOTICEで発言させたいと思っています。
rubyはろくに弄った事が無いので、どの辺弄ったらいいんでしょうか。

あと、発言の学習でurlが含まれるものを排除したいと思っています。
s.gsubでノーマライズしているの部分で消せばよいと考えました。

とりあえず以下のような感じで削除しようと思ったのですが
s.gsub!("^.*http.*$","")
うまく消えないようです

なんか注意点はありますでしょうか?

968 :デフォルトの名無しさん:2008/11/18(火) 16:13:36
s.gsub!(/^.*http.*$/, "")
じゃなくて?それとこれだとURLだけじゃなくて、その行全部消えるけど大丈夫?

969 :デフォルトの名無しさん:2008/11/18(火) 16:52:00
>>967
コード斜め読みしてみた感じ、たぶんrice-0.0.0.2はNOTICEに対応してない。
HEADなら対応してそうだけどライブラリ構造ずいぶん変わってるから
差し替えてそのまま動くかはあやしい。動きそうな気もするけど。
もし差し替えてうまく動いたなら、privmsgしてるところをnoticeに書き換え。

970 :デフォルトの名無しさん:2008/11/18(火) 17:46:45
>>968 の言うように
s.gsub!(/^.*http.*$/,"")
と、ちゃんと正規表現として検索パターンを与えないと、文字列そのものとして検索されるよ

s.gsub!("^.*http.*$","") などと検索パターンに文字列を与えると
s.gsub!(Regexp.new(Regexp.escape("^.*http.*$")), "")
と同じ意味になっちゃう

ruby 1.6以前だと、文字列を与えるとそれを正規表現として扱ってましたが


971 :デフォルトの名無しさん:2008/11/18(火) 18:13:33
>>959
普通にプログラムが書ける人間なら、ちょっと文法覚えてちょっと組み込みクラスのメソッド群を覚えれば、普通に使えるようになるはず。
もしそうじゃなかったら、「普通にプログラムが書ける人間」じゃないなだけなので、使えるはずのCを真面目に勉強しろ、って感じ。

まあ、書いてることを見る限り、ちょっといじったらすぐわかるようになるよ。

972 :967:2008/11/18(火) 18:39:48
>>968-970
ありがとうございます
他のノーマライズ処理部分が一部正規表現ぽく見えたので、/要らないのかと思ってしまいました

あと、NOTICEは対応していないかもしれないんですね
態々コードまで見てもらってありがとうございます
直接埋め込みで何とかなるか調べてみようと思います

973 :デフォルトの名無しさん:2008/11/18(火) 19:27:36
>971
待て待て、C言語とRubyだと結構違いも大きいぞ…例えば

・非オブジェクト指向言語のC、オブジェクト指向言語のRuby

例えばCなら「関数」で目的の機能を探すところを
Rubyでは「クラス」または「モジュール」単位で探す
(ライブラリ単位で探す場合もあるが、そこは共通)

・変数に型があるCと中身に型があるRuby

C言語は変数が型を持ち、中身である値は型を持たない
Rubyの変数はオブジェクトを指すラベルでしかなく型はない
その代わり、参照先のオブジェクトがハッキリと型を持つ

この辺りは押さえておきたい

974 :デフォルトの名無しさん:2008/11/18(火) 19:43:49
>>965
>整数値で引数を与えると
>0 ≦ rand n < n で整数を返すようになる
なにこれー
ちょーさんくす

975 :デフォルトの名無しさん:2008/11/18(火) 19:59:44
>>973
そんなの本質的な違いじゃないから。

976 :デフォルトの名無しさん:2008/11/18(火) 21:33:24
> ・非オブジェクト指向言語のC、オブジェクト指向言語のRuby

これはでかすぎるだろ・・・別にオブジェクト指向なんて意識しなくても動くけど
個人的には動的な型づけもでかいと思う

普通ってどのくらいのレベルを言うのかイマイチわからん

977 :デフォルトの名無しさん:2008/11/18(火) 21:37:47
>>925
> Dir.glob単独で区別できるのはディレクトリのみ。

ほんなら
Dir.glob("**/*") - Dir.glob("**/*/")
でファイル一覧取れるじゃーん、イェーイ、と思ったら予想外の結果になった。


978 :デフォルトの名無しさん:2008/11/18(火) 22:19:01
Rubyをこれから勉強しようと思ってます。

OSはUbuntu Linux。で、エディタをEmacs使おうと思ってたのですが、
本には向いてないとか書かれてました。

Aptanaのプラグインとかはちょっと重そうなのと、試してみたらエラー
出たりしたので放置してます。

Linuxユーザの方はどんなエディタ使ってますか?

979 :デフォルトの名無しさん:2008/11/18(火) 22:20:23
教祖がEmacs使いなわけですが・・・

980 :デフォルトの名無しさん:2008/11/18(火) 22:21:13
>>978
emacs


981 :デフォルトの名無しさん:2008/11/18(火) 22:21:25
普通にEmacs使ってるけど、別に問題はないかと。

その本には「初心者には」向いてないって書いてたんじゃない?

982 :デフォルトの名無しさん:2008/11/18(火) 22:29:06
多分Emacsそのものが初心者向きでないという意味だろうな
emacs使えるならそれで良いし、もちろんvimでもGNU nanoでも
geditでも、プレーンテキストが編集出来るならなんでも良い

983 :978:2008/11/18(火) 22:31:41
ありがとうございます。Emacsで問題ないんですね。

Emacs向いてない、って書いてあったのは、「RailsによるアジャイルWebアプリケーション開発」
でした。何ででしょうね。この本には、Macの何とかってエディタがおすすめとなってました。

984 :デフォルトの名無しさん:2008/11/18(火) 22:43:04
TextMateか

985 :デフォルトの名無しさん:2008/11/18(火) 23:03:38
>983
RubyがMacで流行ったから、それを意識したんだろうな
MacOSXのエディタは決定版が少ないから
(文字コードに弱かったり、色分けすら無かったり)
オススメエディタの紹介もそれなりに需要あるんだよ

ちなみに俺はMacでは GNU nano かな
Linux畑のRubyには、Linux畑のエディタのが問題起きにくい

986 :デフォルトの名無しさん:2008/11/18(火) 23:04:53
MacだとMacVimがいい

987 :デフォルトの名無しさん:2008/11/19(水) 12:25:18
↓ 以下、1000まで Mac用vi と Mac用Emacsの宗教戦争

988 :デフォルトの名無しさん:2008/11/19(水) 13:07:05
jEditはどう?

989 :デフォルトの名無しさん:2008/11/19(水) 16:19:50
JUnitを拡張したDbUnitのような、データベース関係の試験をするための便利なツールはrubyにありますか?


990 :デフォルトの名無しさん:2008/11/19(水) 18:02:58
autotestが無限にテストを繰り返してしまうのですけど、どんなことをうたがったらよいでしょうか?

lib/app.rb # test.rbをrequire
lib/test.rb
spec/test_spec.rb

などのような基本的なスクリプトなのですが・・・

991 :990:2008/11/19(水) 18:05:41
あああ、わかりました。
log/ にログファイルを出力していたのですが、autotestが更新したと思って
無限にテストを繰り返していました。
特定ディレクトリのみ監視外にするにはどうしたらよいのだろう・・・

992 :990:2008/11/19(水) 18:24:59
ZenTest/lib/autotest/rails.rbとネットの.autotestを参考に
以下を.autotestとして書いてプロジェクト直下に置いたところ、
無事にlog/以下を監視対象外に指定することができました。

Autotest.add_hook :initialize do |autotest|
  autotest.instance_eval do
   add_exception %r%^\./(?:db|doc|log|public|script|tmp|vendor)%
  end
end

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

993 :デフォルトの名無しさん:2008/11/19(水) 21:52:35
>988
それ、2つのエディタが見つかるんだが、jEのほうだよな?
jedit X のほうじゃないよな?

…そういやkEditといい、jEditといい、Mac界は紛らわしい名前のエディタも多いんだなw

994 :676:2008/11/19(水) 23:12:00
>>961,962
まずは >>746 を紙に書いて動きを考えて
解説はwikipediaのものを見るだけにしました。(カンニングはしてません)

無限ループは終了条件をどうすればよいか考え付かなかったのでprekとして
1つ前のkを保存して強制的に終了させていました。

考えが甘いとの指摘はおっしゃる通りだと思います。
この話は仕事でもよく指摘されています(仕事はプログラミングとは無関係)。
思わぬところで自分が成長できていないを再認識しました。。。
(whileも近接値判定もやって出来なりでokとしてしまいましたが
ちゃんと考えないと抜けがありますね。[0, 1] の 0.5 は乱数では出てきませんでした。)

★自分のと >>962 の違いについて
・2行目の検査で安全性を確保している
・ループの終了条件が分かりやすい
>>961 に書いてありますが、近接値判定のところを前と同じにしてある
・変数名の付け方

995 :デフォルトの名無しさん:2008/11/19(水) 23:47:48
windowsにRubyをインストーラでインストールしたいです。
http://www.ruby-lang.org/ja/downloads/
を見ると
・ActiveScriptRubyは1.8.5
・One-Click Ruby Installer for Windows は1.8.6
でした。
1.8.7のインストーラはないでしょうか?


996 :デフォルトの名無しさん:2008/11/19(水) 23:51:42
ttp://arton.hp.infoseek.co.jp/indexj.html
ここかしら

997 :デフォルトの名無しさん:2008/11/20(木) 00:24:14
>>994
馬鹿発見

998 :デフォルトの名無しさん:2008/11/20(木) 01:52:57
そりゃ質問スレで質問者が頭良いか悪いかと言えば悪い方に分類されるのは当たり前だろう

999 :デフォルトの名無しさん:2008/11/20(木) 04:26:33
次立ててくる

1000 :デフォルトの名無しさん:2008/11/20(木) 04:32:59
Ruby 初心者スレッド Part 23
http://pc11.2ch.net/test/read.cgi/tech/1227123021/

取り急ぎ>>1だけケータイから立てたのであと誰かたのむ

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

293 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)