トップページ⇒tech
1001コメント379KB

Ruby 初心者スレッド Part 22

レス数が1000を超えています。これ以上書き込みはできません。
00017302008/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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
00027302008/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
00037302008/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/
00047302008/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/
00057302008/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/
00067302008/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
00077302008/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/
0008デフォルトの名無しさん2008/09/15(月) 21:36:40
1乙
ただいま
0009デフォルトの名無しさん2008/09/15(月) 21:40:43
スレ立て乙です
いきなり質問していいですか?
プロパティファイルの扱いのようにメッセージや設定を管理したい場合の
実装について一般的にどうするのかが知りたいです

定数クラスを作るべきかなと考えたんですが
パラメータを渡して組み合わせたものをメッセージとして表示させる場合に
警告が出て気になります。みなさんはこういう場合どう実装していますか?
0010デフォルトの名無しさん2008/09/15(月) 22:48:07
>>9
>定数クラスを作るべきかなと考えたんですが
それでいいと思うけど。Configクラスとか。

>パラメータを渡して組み合わせたものをメッセージとして表示させる場合に
>警告が出て気になります。みなさんはこういう場合どう実装していますか?
どんな警告?
0011デフォルトの名無しさん2008/09/15(月) 23:08:38
>>10
ああ、それで良かったんですか

警告は定数の値を変更しようとすると出るアレです
0012デフォルトの名無しさん2008/09/15(月) 23:16:52
>パラメータを渡して組み合わせたものをメッセージとして表示させる場合に

と

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

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

0013デフォルトの名無しさん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'

とかすればいいんじゃね?知らんけど。

0014デフォルトの名無しさん2008/09/15(月) 23:27:51
最近はYAMLがいいんじゃないかね。
0015デフォルトの名無しさん2008/09/16(火) 01:32:31
ネットのWEB上のテキストから
文字列を取得してきて、
変数aに格納するのってできる?
どうやるの?

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

に「あいうえお」って書いてあって、
その「あいうえお」を変数aに入れたい。
0016デフォルトの名無しさん2008/09/16(火) 01:46:58
open-uri
0017デフォルトの名無しさん2008/09/16(火) 02:05:09
>>15
require 'open-uri'
a = open('http://www.abc.com/abc.txt') {|f| f.read }
これでいいんだっけ?間違ってたら教えて。
0018デフォルトの名無しさん2008/09/16(火) 09:07:25
open-uriのブロックはわりと無意味
00197302008/09/16(火) 15:00:47
質問です

ActiveRecordってスレッドセーフなんですか?
0020デフォルトの名無しさん2008/09/16(火) 19:04:42
>>19
多分違うけど、2.2からはthread safeになるかもしれない
ただRuby1.8だとthread safeにしてもあんまりうれしくない
0021デフォルトの名無しさん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
0022デフォルトの名無しさん2008/09/16(火) 23:07:20
なあ、マシン名、ユーザーID、パスワードはマジなのか?
ここまで露骨だと釣りっぽい気もするが。
0023デフォルトの名無しさん2008/09/16(火) 23:41:58
すみません、書き込んだ瞬間気付いてパス変えました;;

誰かのサンプルを参考にしちゃろうとググってみても全くヒットしないですね・・・
もしかするとRubyでimapっていうのがあまりお勧めできないのかしら
公式マニュアルだけでは何とも理解に時間がかかるので、書籍を買った方が良さそうですね
0024デフォルトの名無しさん2008/09/16(火) 23:44:44
本なんて買うだけ無駄
0025デフォルトの名無しさん2008/09/16(火) 23:51:13
>>23
ぐぐったらこんなのあったけど。ダメかな。
http://www.caliban.org/ruby/rit.shtml
0026デフォルトの名無しさん2008/09/17(水) 00:15:04
use the source >>21
0027デフォルトの名無しさん2008/09/17(水) 00:15:52
IMAPについての知識はあるんだよね
0028デフォルトの名無しさん2008/09/17(水) 02:47:45
rubyって自分のパスワード2ちゃんに
書くようなマヌケが多いの?
0029デフォルトの名無しさん2008/09/17(水) 07:23:00
Rubyなんて使ってるとアホになるよ
0030デフォルトの名無しさん2008/09/17(水) 12:42:52
自動プロクシ設定スクリプト環境でのrubygemsの使い方を教えて下さい
0031デフォルトの名無しさん2008/09/17(水) 13:36:39
パソコンのハードディスクに
「a.txt」
ってファイルを作る。


↑これってできる?
0032デフォルトの名無しさん2008/09/17(水) 15:16:56
>>31
できる
0033デフォルトの名無しさん2008/09/17(水) 16:21:04
>>31

File.open("a.txt", "w"){|f|
# ここでゆっくり好きな処理していってね!
}
0034デフォルトの名無しさん2008/09/17(水) 18:00:02
ruby -rfileutils -e "FileUtils.touch('a.txt')"
0035デフォルトの名無しさん2008/09/17(水) 20:53:08
ruby -e "(/mswin32|mingw|cygwin/===RUBY_PLATFORM)? `echo off > a.txt` : `touch a.txt`"
0036デフォルトの名無しさん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すればできるというのはわかるのですが、
もっと簡単に行う方法ってないものでしょうか。
0037デフォルトの名無しさん2008/09/17(水) 23:14:14
send(:symbol, args...)じゃ簡単にしたことにならないん?
0038デフォルトの名無しさん2008/09/17(水) 23:25:23
>>37
サンクス!!
0039デフォルトの名無しさん2008/09/18(木) 08:22:27
>>33-35

どれが正しいの?
なんでコードだけ張って
日本語の解説が無いの?
0040デフォルトの名無しさん2008/09/18(木) 08:34:19
どれも正しい、>>35はちょっとイタダケナイけど
日本語の解説はリファレンスマニュアルでも読んどけ
0041デフォルトの名無しさん2008/09/18(木) 10:49:11
>>36
Ruby的には
def funcall(x)
return yield(x)
end

x = 10
funcall(x) { x + 1 }
なんだよね。
でも関数合成的に使うには向いてないかも。
0042デフォルトの名無しさん2008/09/18(木) 17:52:57
Enumerable#all? と Enumerable#any? について質問です。
要素が空の場合はどういう結果になるのでしょうか?

手元のrubyでは all? が true 、any? が false を返すようですが
マニュアルには要素が空の場合については書かれていないので
要素が空の場合は処理を分けた方が無難でしょうか?
0043デフォルトの名無しさん2008/09/18(木) 19:14:28
>>42
数学的にはその挙動であってるはずだから、マニュアルに書いてなくても、その挙動を信じていいと思うよ
0044デフォルトの名無しさん2008/09/18(木) 19:16:10
あ、これはマニュアルの不備だね
論理的な動作ではなく、Enumerable の内部処理に依存してる






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

OSはWindowsです
0046デフォルトの名無しさん2008/09/18(木) 22:59:48
「ruby windows インストール」でぐぐるといいとおもうよ
0047sage2008/09/18(木) 23:41:06
1.8.7にしたら
[BUG] object allocation during garbage collection phase
などというものがでるようになってしもうた。

GC と win32ole あたりに原因がありそうなんだけど
再現するコンパクトなコードがつくれませんの。
0048デフォルトの名無しさん2008/09/19(金) 00:04:07
スレッド使ってるとよく出ますな
0049デフォルトの名無しさん2008/09/19(金) 01:51:19
>43-44
ありがとうございます。そのまま行きます。
0050デフォルトの名無しさん2008/09/19(金) 03:30:54
FAQだったらすみませんが、質問です。

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

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

特に、トップレベルで関数を定義することが、Objectクラスにメソッドを追加
することと同じなので、気づかずに既存のメソッドを上書きしてしまいそうで
不安です。
0051デフォルトの名無しさん2008/09/19(金) 03:33:16
開発者同士でしっかり話し合う
0052502008/09/19(金) 04:18:50
Rubyの言語仕様や、コーディングの定石による対処法をお願いします。

特に不慣れなフレームワークを使っているときなどに、既存の関数の誤った上
書きによってトラブルが起こるのを避けたいのです。
0053デフォルトの名無しさん2008/09/19(金) 08:21:08
適当に思いついたのを書いてみる

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

メソッドの上書きはデバッグモード(ruby -d)の出力を確認
独自クラス定義前と定義後のclass#methods(等)の結果を比較
0054デフォルトの名無しさん2008/09/19(金) 08:34:32
Win2000でrubyをはじめたいんだけど、
なんでパッケージが6つもあるの?

どれを入れたらいいのか、
わからないじゃん
0055デフォルトの名無しさん2008/09/19(金) 08:45:37
言語仕様が無いのでいろんなものができてしまいました。
0056デフォルトの名無しさん2008/09/19(金) 09:10:02
rubyでCGIゲーム作るって
イバラの道?
0057デフォルトの名無しさん2008/09/19(金) 09:18:01
てか>>50のやり方はスクリプトの書き方(ライブラリの利用の仕方)としてなんか間違ってね?という気はするんだが
0058デフォルトの名無しさん2008/09/19(金) 09:20:47
>>56
どんなゲーム作りたいかにもよるが、CGIべったりなPHPとかで作るよりはめんどくさい
0059デフォルトの名無しさん2008/09/19(金) 10:06:20
>>58
だとしたらCGIゲーム部分(ブラウザで見る部分)はPHPで作って、
専用ブラウザはruby(RPGツクールVX)ってしたほうがいいかな。

でもそれだと2つの言語を覚えないといけないんだよね。
0060502008/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
> フレームワークを使っていると、知らないうちに基底クラスのメソッドをオー
> バーライドしてしまい、予期せぬバグに悩まされたりします。
0061デフォルトの名無しさん2008/09/19(金) 11:05:54
rubyインストールしてみた。
ActiveRuby1.8.7いれてみた。

次、エディタは何使えばいい?
0062デフォルトの名無しさん2008/09/19(金) 11:16:11
>>61
RDE
0063デフォルトの名無しさん2008/09/19(金) 11:35:29
ActiveRubyっていうのをいれたんだけど、
本当はOne-Click Rubyっていうのもあったの?

どっちがよかったの?
なんで統一しないの?
なんでインストーラーがいっぱいあるの??
0064デフォルトの名無しさん2008/09/19(金) 11:41:03
One-Click RubyのほうがPATHもセットしてくれるからいいと思う
0065デフォルトの名無しさん2008/09/19(金) 11:41:48
>>60
不味いよね〜という話にはなっていて、いくつかの解決策も検討されているようだが
まだ手が回ってないっぽい
ttp://www.rubyist.net/~matz/20060218.html#c05
0066デフォルトの名無しさん2008/09/19(金) 11:42:57
1.9は大きな変更しないってことになったから
0067デフォルトの名無しさん2008/09/19(金) 11:55:21
>>63
ActiveScriptRubyは元々の目的が違うからじゃないかな
そもそも、本来は初心者向けのセットじゃないし
0068デフォルトの名無しさん2008/09/19(金) 11:55:27
>>62
RDEいれてみた。abcって表示できた。
これでいいのかな。
0069デフォルトの名無しさん2008/09/19(金) 12:24:08
http://kazato.run.buttobi.net/cgi-bin/material/src/vm002_0328.png

RDE
文字が重なるんだけど、どこの設定を見ればいい?
0070502008/09/19(金) 12:27:01
>>65
ありがとうございます。なるほど、問題視はされているのですね。

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

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

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

ほかにも、クラスが通常はオープンで、requireによってどんどん書き換えら
れていくなど、Rubyは名前空間についてはきわめて楽観的な言語だという印象
があります。できる限り名前空間を独立させるPythonとは、まったく逆の方針
に見えて興味深いです。
0071デフォルトの名無しさん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で定義してあり、、でも使われていなくて、、、みたいな謎が
0072デフォルトの名無しさん2008/09/19(金) 12:35:51
>>69
そのテキストエリアで右クリック - [設定] - [フォント]を適当にいじる
大きくするなり、変えるなり
0073デフォルトの名無しさん2008/09/19(金) 13:08:58
>>71
Rubyの数学モジュールは存在が適当
マトモな人は使わない
0074デフォルトの名無しさん2008/09/19(金) 13:12:34
>>70
実行時にほぼ全てをevalで改変できるのはRubyの特徴
だからこそ、初期モックアップに向いていて、大規模開発に向かない
0075デフォルトの名無しさん2008/09/19(金) 13:15:01
「○○ができる」という長所と、「○○ができてしまう」という短所に関しては、
どうしても共存していく以外無いものなぁ。
0076デフォルトの名無しさん2008/09/19(金) 13:15:59
>>74
だよなあ
まあ、制御できたら用途によっては便利だろうなとは思う

というより、そういうのは単にそのフレームワークが行儀悪くてマニュアル不足で邪悪なだけなのでは…
「普通」は、トップレベルにメソッドを定義したりしないし、自身を継承させることを是としない
0077デフォルトの名無しさん2008/09/19(金) 13:20:28
>自身を継承させることを是としない
どんなアホ設計だよ
0078デフォルトの名無しさん2008/09/19(金) 13:21:18
>>76
> 自身を継承させることを是としない
あ、やっぱそうだよね、「カスタマイズは継承で」っていうモジュール設計はよくないよな
0079デフォルトの名無しさん2008/09/19(金) 13:22:35
>>73
実用性の面ではそんな雰囲気を感じるけど、
まあ検討材料としてはw
0080デフォルトの名無しさん2008/09/19(金) 13:23:07
c++のほうがまともだな
0081デフォルトの名無しさん2008/09/19(金) 13:25:02
>>73
別に誰も損しないんだから、もうちょっと良くなってもいいのにね、あれ
0082デフォルトの名無しさん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
0083デフォルトの名無しさん2008/09/19(金) 14:21:45
>>72
できた。
0084デフォルトの名無しさん2008/09/19(金) 14:26:59
rubyをインストールして、
エディタも動くようになったんで、
初心者向けのWEB上の入門サイトを
読みたいんだけど、どれを読めばいい?
0085デフォルトの名無しさん2008/09/19(金) 14:30:44
http://www1.tf.chiba-u.jp/~shin/tutorial/
0086デフォルトの名無しさん2008/09/19(金) 15:24:16
http://kazato.run.buttobi.net/cgi-bin/material/src/vm002_0329.png

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

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

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

一回ごとに毎回、毎回設定するの
めんどいですからね。
0087デフォルトの名無しさん2008/09/19(金) 15:33:45
RDEで「こんにちは」って打ったら、
めちゃめちゃに文字化けするんですけど??

それでいて、実行すると、ちゃんと表示されるんですけど??
0088デフォルトの名無しさん2008/09/19(金) 15:37:13
RDEってもしかしてPerlでも使えるの?
0089デフォルトの名無しさん2008/09/19(金) 15:47:14
>>87-88
聞くよりもまず自分で模索するようにしてください

文字化けはたぶんエディタのフォント設定のせい。perlでも一応使える
0090デフォルトの名無しさん2008/09/19(金) 15:48:14
>>87
は自分で調べたら解決したのでもういいや
0091デフォルトの名無しさん2008/09/19(金) 15:48:55
>>89
perlで使うときは、perlのexeはどこに設定するの?
もしかして、rubyのexeのところにいれるの?
キモー
0092デフォルトの名無しさん2008/09/19(金) 16:40:15
a = open('http://www.2ch.net/warn.txt') {|f| f.read }

これが動きません。
ひょっとして、ウチだけ???
0093デフォルトの名無しさん2008/09/19(金) 16:41:34
require 'open-uri'
a = open('http://www.2ch.net/warn.txt') {|f| f.read }
print a;



↑これで動きました。

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

print
"a";
0095デフォルトの名無しさん2008/09/19(金) 18:06:34
>>94
ここはあなたの質問場ではありません
0096デフォルトの名無しさん2008/09/19(金) 18:51:05
RGSS2なんですけど、requireが使えなくて、
必ず、
Kernel.require("C:\\1.rb")

とかって書かないといけないんです。それで、
open-uri.rbを開くと、その中で、また
require uri
とかって書いてあるじゃないですか。またrequireです。
ここでエラーが出るので(requierは使えないよっていう)
すべてのライブラリの中のrequireをKernel.requireに
置き換えないといけないのかな、、、って今思ってますけど、
どう思いますか。
0097デフォルトの名無しさん2008/09/19(金) 19:02:19
RGSSは内部動作が独自改変されたRubyなので、普通のRubyの知識では太刀打ちできない
RGSSのマニュアルなりなんなりを読んでくれ
0098212008/09/19(金) 20:33:30
出張のため返信が遅れてしまいすみません
>>25
おお!ありがとうございます!
しかし見てみましたがかなり複雑な感じなんですね・・・
やっぱ色んな状況を想定したり文字コードなんかの処理等でこんなになってしまうんでしょうか
とりあえず俺のような初心者には無理っぽいですのでiPhoneで同じようなこと考えている人がいないか聞いてみることにします

ありがとうございましたおまいら
0099デフォルトの名無しさん2008/09/19(金) 20:53:37
>>96
def require(file)
Kernel.require file
end
ってしておけばKernelいらないと思う。
あとRGSSなら同人ゲ板のツクール質問スレのほうがよさそう。
0100デフォルトの名無しさん2008/09/19(金) 21:21:47
windowsでrailsをテスト的に使って見ていますが、
"ruby script/generate ..."とか"rake db:migrate ..."
とかスクリプトを実行すると、とんでもなく長い間待たされます。
どうしてこんなに遅いんでしょうか?
Core2Duoを使っていますが、20秒以上も待たされるので。。。。

何かよい解決策はないでしょうか?

0101デフォルトの名無しさん2008/09/19(金) 21:42:18
>>100
windowsとrubyの相性が悪いから。
ruby script/generate をすると、
1. 新しいrubyプロセスを起動し、
2. railsと関連ライブラリをすべて読み込んでから
3. scaffoldを実行するから、
そりゃ遅い。とくに 2. が。
0102デフォルトの名無しさん2008/09/19(金) 21:42:25
>>94
明らかに文が終わらないことが分かる場合、たとえば
開いたカッコがまだ閉じてないとか、二項演算子の第2項をまだ書いてないとか
の場合は語句(トークン)の間で行を変えていい。
そうでない場合(そこまでが文として正当に解釈しうる場合)は
¥ (円記号またはバックスラッシュ)を書いてから改行。
0103デフォルトの名無しさん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の本なんてなくね?
0104デフォルトの名無しさん2008/09/19(金) 21:48:36
>>>103
そもそもIMAPについての知識がロクに無いんだろ
IMAPについての知識があるならnet/imapだけでできるはず
そういう場合は「めんどくさいけどどうすればいいですか」という聞き方になる

メール関連は簡単に扱って欲しくないから、これくらいでいいと思う
0105デフォルトの名無しさん2008/09/20(土) 01:17:39
>>101
開発に使っているマシンは圧倒的にwinが多い
そのwinでまともに動かないrailsは、
やはり個人の趣味サイト作りでしか使ないのか?

海外では非常によく利用されているpythonのdjangoは、
winでもストレス無く使える。
0106デフォルトの名無しさん2008/09/20(土) 01:38:14
運用にwinなんて使わないだろ?
0107デフォルトの名無しさん2008/09/20(土) 01:40:59
>>105
>開発に使っているマシンは圧倒的にwinが多い

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

0108デフォルトの名無しさん2008/09/20(土) 01:59:53
>>107
わざわざRailsを使うためにMacを買うか?
しかも会社ならなおさらだ。
だからRailsは圧倒的に個人しか使わないんだろうー
やはりちょっとしたサイトはPHP、
中規規模以上はJavaに落ち着いているんじゃない。
0109デフォルトの名無しさん2008/09/20(土) 03:35:19
個人 →   rails
数人 →   PHP
中規模 → JAVA
0110デフォルトの名無しさん2008/09/20(土) 07:16:22
>>105
>開発に使っているマシンは圧倒的にwinが多い
Rails使いはMacのほうが多い
RailsConf行ってみな、冗談じゃなくてほぼ全員Macだから。
いまだWindows使っているのはJava屋さんだろう
0111デフォルトの名無しさん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 ←重すぎ高すぎ!

もっと実用的なモデル出してくれたら考えるわ
0112デフォルトの名無しさん2008/09/20(土) 07:42:08
RGSSなんだけど、
ツクールXPがRGSS1で
ツクールVXがRGSS2なのね。

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

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

そんで、そのままRGSSで書くと、エラーになるの。
0113デフォルトの名無しさん2008/09/20(土) 07:44:04
require 'uri'    ←(1)
↑この形式だとエラーが出る。

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

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

どうしたらいいかな?
0114デフォルトの名無しさん2008/09/20(土) 07:46:14
もうプログラミング辞めたほうがいいな
0115デフォルトの名無しさん2008/09/20(土) 07:58:10
http://questionbox.jp.msn.com/qa944237.html?StatusCheck=ON

一応ここにも書いてあるけど
いったいどうしたらいいかな。
0116デフォルトの名無しさん2008/09/20(土) 08:06:06
RGSSでのライブラリrequireの方法

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


↑あとこれをよくみかけるんだが、
どういうことなんだろう??
0117デフォルトの名無しさん2008/09/20(土) 08:16:18
>>112
上でも書いている人がいるが、RGSSはRubyを改造したもので、
改造部分に関するエラーは俺たちには全くわからない

エラーが出る理由も、わざわざそうしている理由もわからない
売り物なんだし、改造した人に聞け
0118デフォルトの名無しさん2008/09/20(土) 08:29:19
RDE

出力をDOSプロンプトにするのってどうやるの?
0119デフォルトの名無しさん2008/09/20(土) 08:48:23
puts 'abcde ' * 20000

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

perlだったら3秒で出るのに。
0120デフォルトの名無しさん2008/09/20(土) 08:50:20
Rubyに早さを求めるやつなんて初めて見た
0121デフォルトの名無しさん2008/09/20(土) 08:50:25
>>119
まあそのへんはコマンドプロンプトに文句言ってくれ
Rubyの処理自体は3秒くらいで終わってる
0122デフォルトの名無しさん2008/09/20(土) 09:05:04
RDEで出力を下でなくて
DOSプロンプトに出すにはどうしたらいいの?
0123デフォルトの名無しさん2008/09/20(土) 09:12:05
Windowsではirbとかでもイライラするな
irbは返り値の表示の設定ができるが
0124デフォルトの名無しさん2008/09/20(土) 09:19:25
最初からDOSプロンプト立ち上げて、
そこから直接コマンドラインで実行したら
3秒でできた。
でもRDEから実行したいんよ。
どうしたらいいかな?
DOSプロンプトに出力する方法ね。
0125デフォルトの名無しさん2008/09/20(土) 09:33:56
>>110
東京Ruby会議で「主にMac使ってる人」って質問で6〜7割手をあげてたような気が
0126デフォルトの名無しさん2008/09/20(土) 09:38:12
MacというかMacOSXとUNIX系開発言語(って何?)との親和性の高さはガチ
Windowsでもプログラミング環境エディションとか出せばいいのに
0127デフォルトの名無しさん2008/09/20(土) 09:45:10
まあみんなカッコよく安楽にプログラミングしたいんだよ
でなけりゃあどべ使い以外にMacが売れる理由がないし、Emacsが死なない理由がないし、Rubyが支持される理由もない
0128デフォルトの名無しさん2008/09/20(土) 11:32:09
TextMateだっけ?あれが人気あるらしいね。開発に。
Windowsにも E Text EditorとかIntypeとしてクローン作られてるっぽいけど。
0129デフォルトの名無しさん2008/09/20(土) 11:56:29
>>128
クローンはどいつもこいつもシェアウェアでな

いや、別にいいんだが、入金めんどい
成功したら安価版とか作ってくれ
0130デフォルトの名無しさん2008/09/20(土) 11:59:26
日本はベクターにないと買うの面倒でかなわん
0131デフォルトの名無しさん2008/09/20(土) 13:42:29
str = 'hoge'

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

   代 入 す る

」

でいい? 厳密には代入ではなくて他の表現が妥当だとかそういうのはない?
0132デフォルトの名無しさん2008/09/20(土) 13:48:28
…めんどくさいので代入でOK
最近の議論とか空気とかを元にしてる初めてのRubyではどう書いてある?

とりあえず、誰も文句は言わないと思うよ
束縛するとか言う言い方してる奴がいたら鼻糞ほじっとけ
0133デフォルトの名無しさん2008/09/20(土) 13:51:57
オブジェクトとインスタンスってRubyではどう使い分けますか?
0134デフォルトの名無しさん2008/09/20(土) 13:59:47
>>131
つうか代入ってなによ?
0135デフォルトの名無しさん2008/09/20(土) 14:06:38
>>134
データと名称の関連付け。なまえをつけること。Naming convention。
Rubyでは初期化宣言と同時に行われるのでちょっとわかりにくい。

というのでどう
0136デフォルトの名無しさん2008/09/20(土) 14:23:59
なら「名前をつける」って説明の方が通りがいいんじゃねえか、とおもた。
0137デフォルトの名無しさん2008/09/20(土) 14:27:35
RDEで実行を途中で止めるのってどうすればいいの?
ctrl+C押しても止まんないんだけど。
0138デフォルトの名無しさん2008/09/20(土) 14:37:30
止めるボタンあります
0139デフォルトの名無しさん2008/09/20(土) 14:38:26
緑△アイコンの実行ボタンの隣に、
□アイコンの強制終了ってあるでしょ
0140デフォルトの名無しさん2008/09/20(土) 15:22:28
他の言語で代入という概念を知ってるなら代入でいいだろ。

a = Hoge みたいな表現が、名前付けなのは Haskell とかだけど、
そっちとは明らかに違うし。
0141デフォルトの名無しさん2008/09/20(土) 16:59:07
RDEはうだつが上がらないし
RDTは糞重いし
もうEmacsしかないじゃないか!
0142デフォルトの名無しさん2008/09/20(土) 17:20:29
>>133
クラスをインスタンス化したものがインスタンス
0143デフォルトの名無しさん2008/09/20(土) 19:22:08
NetBeans使えば。
0144デフォルトの名無しさん2008/09/20(土) 19:35:57
NetBeans以上に重いものなんてこの宇宙に存在するの?
0145デフォルトの名無しさん2008/09/20(土) 19:36:51
責任,ですかね.
0146デフォルトの名無しさん2008/09/20(土) 20:57:24
>140
他の言語っつってもCの代入とは明らかに違うだろうに。
Haskellの代入とも違うけどさ。
0147デフォルトの名無しさん2008/09/20(土) 22:32:07
str = 'hoge'
のように代入された状態で str を使うと 'hoge' という情報を取り出せるという点では
どの言語もだいたい一緒だわな
0148デフォルトの名無しさん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 を勉強してたころは真偽判定ってどう書いてたんだっけ、覚えてないな
0149デフォルトの名無しさん2008/09/20(土) 23:31:42
…そういうのはチラ裏スレでやれ

Ruby は nil や false が返って来ない限り真だからな
真偽判定はどんどん書けて気楽だ
0150デフォルトの名無しさん2008/09/20(土) 23:38:04
そういやずっと前から思ってたんだけど、Perl とかで整数の 0(や文字の "0")が真偽値の偽とみなされるようになったのってなんで?
ヌル文字とかの関係? 関係ないよね?
0151デフォルトの名無しさん2008/09/20(土) 23:48:35
スクリプト言語の初心者スレっぽくてよろしい

>>150
0 を偽にしなかったら 1 を偽にしなきゃいけなくなるじゃないか(-1 でも可)
0152デフォルトの名無しさん2008/09/20(土) 23:49:01
さすがRubyスレ
知能が低い
0153デフォルトの名無しさん2008/09/20(土) 23:50:28
>>150
Cから発想すればふつー0が偽になるんだろう。
CにもPerlにもboolean型は無いしな。
0154デフォルトの名無しさん2008/09/21(日) 05:19:55
http://www1.tf.chiba-u.jp/~shin/tutorial/index.rb?Chapter=10

これってサブルーチンと何が違うの?
0155デフォルトの名無しさん2008/09/21(日) 07:53:29
Cで関数のポインタを扱うのとさして変わらない。
0156デフォルトの名無しさん2008/09/21(日) 08:00:34
>>155
定義された場所のスコープ(Binding)を受け継いでいるところ
01571562008/09/21(日) 08:05:56
アンカ間違えだけど、指摘と受け取ってもらっても結構
×155
○154
0158デフォルトの名無しさん2008/09/21(日) 08:23:27
>>154
手続きオブジェクトは原理的にはサブルーチン、雰囲気では関数ポインタでおk
オブジェクトになってしまってるとこと、>>156の言うように定義時の環境が保存されてるとこが一般的なものとは違うけど

サブルーチンオブジェクトと呼んでもよかったシロモノで、Rubyではたまたま手続きと呼んでるだけに過ぎない
プロシージャ(Proc-edure)とサブルーチンに決定的な違いがないのと同じ
0159デフォルトの名無しさん2008/09/21(日) 09:31:58
>>146
> Cの代入とは明らかに違うだろうに。

どう違うの?
0160デフォルトの名無しさん2008/09/21(日) 11:17:02
>>133
適当。分かりやすい基準はたぶん無い
0161デフォルトの名無しさん2008/09/21(日) 11:22:28
rubyのxamppはどこにあるの?
rubyのCGIとか、railsとかやってみたいんだけど。
0162デフォルトの名無しさん2008/09/21(日) 11:39:21
>159
根本的には同じデータのコピーなんだが
Rubyは基本的に「オブジェクトへの参照」を扱うため
代入が基本的に「参照のコピー」になるのに対し
C/C++は参照というクッションが必ずしも存在せず
いきなり「オブジェクトそのもの」を扱うことが出来てしまうため
(参照を扱うなら明示的に参照を扱うよう書く必要がある)
代入が「実体のコピー」(Rubyでいうa=b.dupに近い…がこれも同じではないな)になることが普通にある
0163デフォルトの名無しさん2008/09/21(日) 11:45:01
>>161
InstantRails
0164デフォルトの名無しさん2008/09/21(日) 12:04:46
>>162
構造体(オブジェクト)のコピーが起こること、を問題とするわけね。

変数の実体が値である(C/C++)か、変数の実体が参照である(Ruby/Java/Python...)か、
という点が違いであって、名前に実体を関連付ける、という「代入」で問題ないんじゃないかと。
0165デフォルトの名無しさん2008/09/21(日) 12:56:02
>>150
>そういやずっと前から思ってたんだけど、Perl とかで整数の 0(や文字の "0")が真偽値の偽とみなされるようになったのってなんで?
>ヌル文字とかの関係? 関係ないよね?

Perlは考え方としてCの延長にあるから、booleanがない(つまりfalseがない)からかわりに 0 を偽としている。
RubyはLispやSmalltalkに影響を受けているから、nilとfalseだけを偽にしている。
nullじゃなくてnilってところがポイント。
0166デフォルトの名無しさん2008/09/21(日) 13:01:01
0 が選ばれた理由にはなってないな
ビットの 0 と 1 で 0 が negative だったから、が答かと
0167デフォルトの名無しさん2008/09/21(日) 13:30:26
"0" が偽である理由としてはちょい苦しいかもな
"0" が 0 に同一視されてると見るか
0168デフォルトの名無しさん2008/09/21(日) 13:32:33
perlとかphpは型が曖昧だからまあそんな挙動もするでしょう
0169デフォルトの名無しさん2008/09/21(日) 13:37:26
あっちの言語って型付けが弱いんじゃなかったっけ
自動変換されるという便利だが怖い仕様・・・・・・
01707302008/09/21(日) 13:40:32
perlもphpも糞ですよ
0171デフォルトの名無しさん2008/09/21(日) 13:49:43
>>148
めんどくさいよな
というかRuby(が参考にしたLisp系列)が条件文のこと優先して動作を作ったというのが正しいのかも
0172デフォルトの名無しさん2008/09/21(日) 14:00:41
0が偽のくせに「真としての0」が返って来る関数があるというのがまあ変といえば変
変態だったら誉め甲斐もあるんだが、ただ変なだけでは…
0173デフォルトの名無しさん2008/09/21(日) 14:04:12
まあ便利なんだけどねPHP
0174デフォルトの名無しさん2008/09/21(日) 14:08:33
それは認めるし、普及言語はどれも大なり小なり批判されるものだが
この挙動は……
0175デフォルトの名無しさん2008/09/21(日) 14:09:24
他の言語を学ぶという姿勢は賞賛に値する
Rubyしかできないとかマジ生ゴミ
0176デフォルトの名無しさん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 の挙動が極悪なのと似たような構造上欠陥じゃないかと思う
0177デフォルトの名無しさん2008/09/21(日) 14:31:32
あー、gsubも最初に用意されてる引数の構文の挙動が気難しくてブロックが推奨だったな
0178デフォルトの名無しさん2008/09/21(日) 15:42:20
まぁ値が数値型にも文字列型にもなるのはawkからの伝統だしな
0179デフォルトの名無しさん2008/09/22(月) 02:23:34
>>163
ありがとう。できたよ。
クッキングなんとかがうごいた。

で、次、これの開発ってどうやればいいの?
0180デフォルトの名無しさん2008/09/22(月) 03:37:13
railsのIDEは何を使えばいいの?
0181デフォルトの名無しさん2008/09/22(月) 07:16:08
いい加減、本買うかぐぐるかしようぜ。
0182デフォルトの名無しさん2008/09/22(月) 10:27:50
おっと質問の仕方が悪かったかな。
数あるIDEの中で、どれを使えばいいのかということ。
0183デフォルトの名無しさん2008/09/22(月) 10:32:37
>>182
どれも糞
0184デフォルトの名無しさん2008/09/22(月) 10:34:30
機能的にはNetBeandsがかなりがんばってる感じはするがどの程度実用に耐えるかは知らん。
0185デフォルトの名無しさん2008/09/22(月) 10:38:09
>>183でFA
0186デフォルトの名無しさん2008/09/22(月) 10:45:14
どうせ補間とか望めないからどれ使っても大して変わらん
0187デフォルトの名無しさん2008/09/22(月) 10:48:14
Emacsのような単なる単語文字列としての略語展開が一番マシという困った結論に…
0188デフォルトの名無しさん2008/09/22(月) 10:52:09
NBのコード補完はかなり強力。いつまでもema糞なんぞにしがみついてないで一度試してみるといい。
0189デフォルトの名無しさん2008/09/22(月) 10:57:22
NetBeansの補完は、まあ頑張ってるほうだとは思った
多少いい加減なのは仕方ない
01907302008/09/22(月) 11:01:46
関数とかクラスが畳めるエディタが良いな。
0191デフォルトの名無しさん2008/09/22(月) 11:04:19
>>190
関数って何ですか???

実際上はEclipse+プラグインかNetBeansかEmacs/Vimくらいしかないんだから順に試しとけ
Javaの実行環境入れるのめんどくさい?もんくゆーな
0192デフォルトの名無しさん2008/09/22(月) 11:07:51
CPUが2Ghz程度しかない前時代のマシンではロクに動作しないので新しいマシン買うこと
01937302008/09/22(月) 11:09:54
>>191

> 関数って何ですか???
まだそんなこと言ってるんですかw
関数と言い張りますよ。
0194デフォルトの名無しさん2008/09/22(月) 11:15:51
別に言い張ってて構わないと思うよ
Rubyの用語集にも書いてあるくらいだから
0195デフォルトの名無しさん2008/09/22(月) 11:18:09
>>193
クラスに関数があるのか?
あれは多くの言語で「いや、これを関数って呼ぶのはなんか違うな」と判断されてメソッドと呼ばれているものだと思うが
仲間外れはC++くらい?
0196デフォルトの名無しさん2008/09/22(月) 11:22:19
C++はメンバ関数だっけか

ともあれ、Ruby学ぶ気ないんだなと思われるのは必定
それによって起こる結果については暴れないことだ
0197デフォルトの名無しさん2008/09/22(月) 11:31:56
NetBeansとかは最初に何かするときに10秒くらいかかるのが切ない
同じことを2度目にするときは受忍範囲内なんだが
01987302008/09/22(月) 11:35:27
わかった。
副作用があるものは関数とは呼べないのは同意だけど、
だとしたらプロシージャと呼ぶべき。

それに、メソッドという呼び方をすることがRubyを学ぶことにつながるとは言えない。
俺はもうRubyの大体のことはわかったし、
実際にRubyを使って新しいWEBサービスを稼働させている。
0199デフォルトの名無しさん2008/09/22(月) 11:40:45
>>198
なるほど、では君は初心者ではない
このスレから卒業し早々に立ち去りたまえ
0200デフォルトの名無しさん2008/09/22(月) 11:43:59
ここは純技術的な質問をするスレであって実のところレベルの高低は問わないのさ。
0201デフォルトの名無しさん2008/09/22(月) 11:45:53
>>197
arr = Array.new
arr.m

ここで「arrはArrayだからArray#mapでmap」という判断をして欲しい所存
0202デフォルトの名無しさん2008/09/22(月) 11:48:21
>>201
補完試すたびにソース全体をevalしまくりだな
0203デフォルトの名無しさん2008/09/22(月) 11:51:36
>>195
やっぱりAdaとかSimulaとか、あっちのほうの言語じゃ
メソッドは何が起源なんだろうか。Smaltalkとか?
0204デフォルトの名無しさん2008/09/22(月) 11:59:10
>>201
え、そういう状況に即した判断をするのがIDEの便利なとこなんじゃないの?
そこで「mのつくメソッド全部から選んでね」と表示するんじゃEmacsと変わらんぞ
02057302008/09/22(月) 12:02:49
>>203
アランケイじゃない?
アランケイごときがsmalltalkを考えて、言語をわかりやすく庶民(笑)に伝えるために
オブジェクトにメッセージを送るという考えかたで説明したのが起源じゃないかな。
で、オブジェクトにメッセージを送る「方法」をそのままメソッドと呼んだだけ。
だから、別に「メソッド」は学術的に意味がある言葉ではない。
02067302008/09/22(月) 12:12:21
アランケイがもてはやされるようになったのはC++が出てから。
それまでは普通の胡散臭いタイプの学者のおっちゃん。
ただ単に運良くオブジェクト指向が流行ったからアランケイがもてはやされるようになったというだけ。
オブジェクト指向は流行るべくして流行ったというわけでもないから、
本当に運が良かっただけと言うべきだね。
アランケイの言葉を未だに使い続ける理由はそれだけだね。
0207デフォルトの名無しさん2008/09/22(月) 12:26:13
はいはい初心者スレでつまんない自説自慢はやめてね
0208デフォルトの名無しさん2008/09/22(月) 12:31:01
アランケイがもてはやされるようになったのはMacが出てから。
それまでは普通の胡散臭いタイプの学者のおっちゃん。
ただ単に運良くGUIが知られてアランケイがもてはやされるようになったというだけ。
SmalltalkタイプのGUIは流行るべくして流行ったというわけでもないから、
(ジョブズがたまたまAltoで動くSmalltalkシステム=暫定Dynabookを見て感動しただけで、
Alto向けにはSmalltalk以外にもStarとかのいろんなタイプのGUIがあったから)
本当に運が良かっただけと言うべきだね。
アランケイの言葉を未だに使い続ける理由はそれだけだね。
02097302008/09/22(月) 12:37:54
ともかく、メソッドをプロシージャと呼ぼうが、C言語的な意味で関数と呼ぼうが問題ないわけ。
メソッドと言わないと通じないというわけでもないしね。
0210デフォルトの名無しさん2008/09/22(月) 12:52:54
>>209
どう呼んでもいいのならメソッドと呼べ
Rubyではそれをメソッドと呼ぶ
0211デフォルトの名無しさん2008/09/22(月) 12:58:27
うむ、結論が出たな
0212デフォルトの名無しさん2008/09/22(月) 14:22:12
>>210
どう呼んでも良いことを認めたら、それこそ自由に呼んで良いんじゃないの?w
0213デフォルトの名無しさん2008/09/22(月) 17:38:14
じゃあ俺は各ソースファイルのことをモジュールと呼ぶことにしよう
どう呼んでも問題ないんだよな?

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

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

程度にしておこうな
まあ、モジュールほど紛らわしい単語ではないから
関数と書かれていても解るが
02147302008/09/22(月) 18:30:43
うざいから消えてくれないかな
02157302008/09/22(月) 18:31:48
おまえがな
0216730 ◆KL6EsW0z.s 2008/09/22(月) 18:32:32
これで満足か
0217デフォルトの名無しさん2008/09/22(月) 18:37:29
自覚してんじゃんwww
0218デフォルトの名無しさん2008/09/23(火) 18:50:38
netbeansいれてみたんだが。

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

WEBサーバーって言ったらアパッチじゃないの?
0219デフォルトの名無しさん2008/09/23(火) 18:52:04
netbeansいれてみたんだが。

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

instantrailsのrailsと、
netbeansのrailsと、使い分けろってこと?
0220デフォルトの名無しさん2008/09/23(火) 19:16:13
「実行」ってやったら勝手に
ブラウザ起動して、
localhost:3000がアドレスに入って、
サンプルのページが出てきたんだが、
これってもしかして、netbeans起動中は
勝手にWEBサーバーも起動しているということか?
0221デフォルトの名無しさん2008/09/23(火) 19:53:18
そろそろ解決してる頃だな
自分で調べりゃ早いのに
0222デフォルトの名無しさん2008/09/24(水) 09:18:36
http://www.thinkit.co.jp/cert/article/0605/2/2/4.htm

このページに書いてあるとおりにやっても
うまくいきません
0223デフォルトの名無しさん2008/09/24(水) 09:19:45
RadRailsの右下ペインの「Servers」を選択して
「AddressBookServer」を起動します。
ステータスが「Started」になれば、Web
サーバの起動は完了です。


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

なんでサーバーがスタートしないんでしょうか?
0224デフォルトの名無しさん2008/09/24(水) 12:06:26
http://www.rubylife.jp/rails/erb/index2.html

とりあえずここまでできた。
IDEを使わずコマンドラインでやるのが
結局一番早かった。
0225デフォルトの名無しさん2008/09/24(水) 12:57:46
うごいたーーーーーーーーーーーーーーー
ファイヤーウオールで
アプトナの通信をブロックしてたのが
原因だった

アプトナの通信を
「すべて許可する」
にしたら、マニュアルの通りに動いたーーーーーーーー
ガオーーーーーーーーーーーーーー
0226デフォルトの名無しさん2008/09/24(水) 13:18:38
なんでwebrickとモングレの2つの
サーバーがあるの?
0227デフォルトの名無しさん2008/09/24(水) 13:19:23
ルービーっておかしいわ

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

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

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

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

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

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

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

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

そこで、皆さんがどのように感じておられるのか、お聞きしてみたいと思いま
したが、このスレの反応を見てもやはりあまり問題視されていないようで、こ
れはやはり意外でした。
0229502008/09/24(水) 14:13:55
>>76-78
私が言及していた、継承を必要とするフレームワークとは Rails のことです。
継承が危険だとはよく言われますが、、継承を多用しなければ Railsの簡潔さ
はかなり損なわれたことでしょう。

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

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

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


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

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

何も知らないでトップレベルに def object_id; 0 end などと書けば、すべて
のオブジェクトインスタンスのidが0になってしまうのです。そしてこれを書
くことは、プロジェクトに関わるどの人間にも可能なのです。
0230502008/09/24(水) 14:15:25
最後に、自分の印象ですが、

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

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

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

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

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


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

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

あとは、Rubyに限らずスクリプト系はどれもそうだけど、「問題があったら直せばいい」という精神をもつしかないと思うよ。
たしかにかぶる可能性はあるけど、そんなにしょっちゅうかぶることはないし、かぶったらかぶったで直せばいい。そんな感じ。
0233デフォルトの名無しさん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の問題なのでしょうか?よろしくお願いします。
0234デフォルトの名無しさん2008/09/24(水) 15:26:38
RoRってwebrickを作動させておけば
アパッチいらないんじゃん。

なんでアパッチインストールさせたのさ?
0235デフォルトの名無しさん2008/09/24(水) 17:26:47
>>233
exeファイルをダウンロードしたから、それをアンチウィルスソフトがチェックしているんじゃない?
アンチウィルスソフトを一時的に無効にしてみるとか。
0236デフォルトの名無しさん2008/09/24(水) 21:17:17
>>227
Java の IDE とアプリケーションサーバがいくつあるか調べてから文句言ってくれ。
0237デフォルトの名無しさん2008/09/24(水) 21:21:36
>>229
以下を守れば大丈夫。
・自分の足を打ちがちな馬鹿にはコードを触らせない
・Railsのフレームワーク部分のコードは一通り読む
0238デフォルトの名無しさん2008/09/24(水) 21:26:43
「エディターが3つ」の意味がわからない
0239デフォルトの名無しさん2008/09/24(水) 21:31:05
>>238
エディターズレビューとかあんじゃん
0240デフォルトの名無しさん2008/09/24(水) 21:37:20
音声データをデジタル化するときに
周波数16kHzだから
".unpack("s*") をつかって数値化はできたんだけど
数値が25000くらいあって。

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

というかそういうバイナリ扱うのはRubyは不得意なんだが外部プログラム使えないのか
0242デフォルトの名無しさん2008/09/24(水) 21:43:38
まあこれ完全に専門的な内容だから
知らない人かなり多いのかな。。。
0243デフォルトの名無しさん2008/09/24(水) 21:46:22
まあRubyをメインにやるような人はふつう知らない
外部プログラム使えというアドバイスはけっこう正しいかと
0244デフォルトの名無しさん2008/09/24(水) 21:47:27
デジタル化されてんじゃん
0245デフォルトの名無しさん2008/09/24(水) 21:48:43
このデータをフーリエ変換しないといけないんだけど
単位がわからなくてはね。
0246デフォルトの名無しさん2008/09/24(水) 21:49:30
240はアホすぎて自分が何をやりたいのか説明できてない
0247デフォルトの名無しさん2008/09/24(水) 21:52:22
スレ違い

サウンドプログラミング4
http://pc11.2ch.net/test/read.cgi/tech/1185340076/
0248デフォルトの名無しさん2008/09/24(水) 21:53:39
音声データから
特徴抽出したい。
これは普通ツールによって行われるが
今自分で作ってる

以上
0249デフォルトの名無しさん2008/09/24(水) 21:55:39
247のスレで聞くからもういいです。
アホ扱いされるのなら
0250デフォルトの名無しさん2008/09/24(水) 21:56:41
RIFFだったら http://www.kk.iij4u.or.jp/~kondo/wave/ の通りかと。
フォーマットの仕様読んでわからないなら諦めたほうが。
0251デフォルトの名無しさん2008/09/24(水) 21:57:16
まあ Ruby はあんま関係ないな
そのファイル形式の構造の問題だ
0252デフォルトの名無しさん2008/09/24(水) 22:58:25
Rubyとは関係ないかもしれないのですが、Rubyで実装しているのでここで質問させてください。

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

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

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


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

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

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

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

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

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

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

なんかわかりにくくてごめん
0255デフォルトの名無しさん2008/09/24(水) 23:01:25
2回送ってしまった、スマン
0256デフォルトの名無しさん2008/09/24(水) 23:03:32
>>254
Ruby関係ないしそもそもそのへんは設計どうでもいいからわかりやすいほうにしろ
メソッドって言葉の使い方間違ってねーか?まあいいや
0257デフォルトの名無しさん2008/09/24(水) 23:05:17
>>246
どっちかというと基本から何をどうすればいいのか分かっていないのでは。

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

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

ここまではRubyと何の関係もないのでもう一つ言っとくと、packでの"s"は
その環境のエンディアンに依存しているので、よそでは動かないかもよ。
ちゃんとフォーマットにあわせて"n"とか"v"を使うように。
0258デフォルトの名無しさん2008/09/25(木) 00:42:13
>>253
>最後に、名前は早々衝突しないし、もし衝突したなら直すというのが、Rubyコ
>ミュニティ(というかスクリプティング界隈)の精神なのですね。すると自動
>テストが、推奨というより必須になるわけですね。当たり前のことですが、改
>めて目からうろこが落ちました。

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

というおっさんのひとりごとでした。
0259デフォルトの名無しさん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

とか。
しかし日本語下手だな。なんとかしてくれ。
0260デフォルトの名無しさん2008/09/25(木) 00:58:11
>>252
PRGってやつ?
0261デフォルトの名無しさん2008/09/25(木) 07:30:35
>258
ある程度慣れた人だと、shebang や require 以外で最初に書くのは
module になる気がする
要るか判らんが、とりあえず空間切っておくか、みたいな
0262デフォルトの名無しさん2008/09/25(木) 09:05:11
アホばかりでやんなっちゃうよ
0263デフォルトの名無しさん2008/09/25(木) 12:11:04
表示端末の文字エンコードを自動判別して変換することはできますか?
ファイル内容を puts した瞬間に
「しまったこれShiftJISかようわ矢印キー効かね」
というようなことを大多数の端末で避けたいです
0264デフォルトの名無しさん2008/09/25(木) 12:21:02
>>263
ENV に情報がなければ無理だろな
Windowsのコマンドプロンプトでは特に情報がないようだ
0265デフォルトの名無しさん2008/09/25(木) 15:36:52
あー、スクリプト例で文字列を puts とかさせるときちょっと困るね
toeuc 決め打ちしておくのも変だし
0266デフォルトの名無しさん2008/09/25(木) 16:08:59
rubygemで特定のパッケージをupdate対象から外すことはできる?
要はholdしたいんだけど
0267デフォルトの名無しさん2008/09/27(土) 01:13:27
TkcItem.newはrequire 'tk' だけでできるのに
TkcItemのサブクラスを作ろうとするとrequire 'tk/canvas'が必要になるのはなぜ?
0268デフォルトの名無しさん2008/09/28(日) 03:56:41
rubyをつかって刑務所からプログラミングしてるんですか?
0269デフォルトの名無しさん2008/09/28(日) 14:35:51
Rubyでバイナリを16進数文字列に変換するのはどうしたらできますか。
packとかunpackがわかりくすぎて、理解できません
0270デフォルトの名無しさん2008/09/28(日) 14:55:34
packとか使え
packはC参考にしれ
0271デフォルトの名無しさん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
}
0272デフォルトの名無しさん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 ')'
となってしまいます。
普通にメソッド呼んでいるだけなんですが、何が悪いんでしょうか。。
=のつかないメソッド名だと大丈夫なんですが…
0273デフォルトの名無しさん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% くらい。
0274デフォルトの名無しさん2008/09/28(日) 18:47:03
RoR動くレンタルサーバーって
高いところしかないの?

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

なるべく月500円以下のところを
紹介してほしいんだけど。
0275デフォルトの名無しさん2008/09/28(日) 18:58:38
500円以下はありえない

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

専用サーバと呼ばれる、少人数あるいは自分たちだけの買い取りサーバを使うんだね
02762722008/09/28(日) 19:02:27
>>273
ありがとうございます。

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

結局、調査の末これならできるということがわかりました。。
a.send(:xy=, 1, 2)
実際は ActiveRecord::Base#attributes= なんですが。
0277デフォルトの名無しさん2008/09/28(日) 19:09:56
a.xy=1, 2とかa.xy=*[1, 2]でもよさそうに思う
02782722008/09/28(日) 19:41:41
>>277
それだと @x が [1, 2] になっちゃうんです…
ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin8]
0279デフォルトの名無しさん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
0280デフォルトの名無しさん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()でブロックされるようで、うまくいきません。
0281デフォルトの名無しさん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
0282デフォルトの名無しさん2008/09/28(日) 21:17:08
popen
0283デフォルトの名無しさん2008/09/28(日) 21:29:15
じゃあ俺はreadpartialを推しておく
0284デフォルトの名無しさん2008/09/28(日) 21:41:56
windows版のrubyが起動に物凄く時間がかかるんですがなぜでしょうか・・・?
0285デフォルトの名無しさん2008/09/28(日) 21:57:46
rubygems読み込んでるんだろ
0286デフォルトの名無しさん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) ) でしたとか。
0287デフォルトの名無しさん2008/09/29(月) 04:05:45
ちょっと質問なのですが、Vistorパターンがいまいちわかっていません。
サンプルコードを見ても実際にどんな時につかうのかが?

Rubyのライブラリなんかで、Vistorパターンを実際に使っているソースはありませんでしょうか?
0288デフォルトの名無しさん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
0289デフォルトの名無しさん2008/09/29(月) 04:14:09
>>227
C/C++とか触れそうにないなw
あなたには選択肢が少ない、ひまわりとかDelphiがオススメ
0290デフォルトの名無しさん2008/09/29(月) 08:23:51
>>287
Visitorははまるときはピッタリはまるんだけどね。

Visitorパターンの例題として見るだけなら少し大きめだが、RDのパーサとか
http://rubyforge.org/projects/rdtool/
0291デフォルトの名無しさん2008/09/30(火) 00:28:47
Mac OSXにRails環境を作ってみたのですが、プロジェクトを作成すると
ファイルの文字コードが全て iso-2022-jp-3で作成されてしまいます。

プロジェクト作成時にutf8でファイル生成するオプションなどはありますか?
0292デフォルトの名無しさん2008/09/30(火) 08:23:04
railsコマンドが作る初期プロジェクトに使われる文字の範囲では
ISO-2022-JP-3(初期ASCIIでスタート)とUTF-8は同じだと思うんだが。
0293デフォルトの名無しさん2008/09/30(火) 10:00:53
どんなソフトやらでISO-2022-JPでなくISO-2022-JP-3だと判定されたのかはちょっと気になるな

cat > hoge.txt とかで作ったファイルも同じ判定ならコンソールか何かの設定の問題か、その判定ソフトの癖だな
0294デフォルトの名無しさん2008/09/30(火) 11:52:43
RoR のフォームヘルパには Smarty でいう html_options みたいなヤツはないの?
0295デフォルトの名無しさん2008/09/30(火) 14:09:23
>>294
html_optionsみたいなのがなにかを説明しないと、わかるわけがない
0296デフォルトの名無しさん2008/09/30(火) 14:20:57
>>295
ttp://www.smarty.net/manual/ja/language.function.html.options.php
0297デフォルトの名無しさん2008/09/30(火) 15:39:13
まずは「rails select option」でぐぐろうぜ
0298デフォルトの名無しさん2008/09/30(火) 17:10:47
うぉーあった。ありがとうございます >>297
Rails入門(本)には text とか radio は載ってたのにこれは載ってない。
でもないのはおかしいなと思ってた。date_select まであるじゃんかよ…。
02992872008/09/30(火) 17:21:04
>>290
thanx 見てみます。
0300デフォルトの名無しさん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側の問題のような気もするので、そっちで聞いてみます。
0301デフォルトの名無しさん2008/10/01(水) 08:21:11
>>300
とりあえずodなどで問題のテキストをバイナリダンプしてみては?

0302デフォルトの名無しさん2008/10/01(水) 11:09:10
>>300
文字エンコード自動評価の順が iso-2022-jp-3 が最初なんだろう
vimrcの文字エンコード推測設定がMacOSX向きじゃないんだと思う
きっとどっかのサイトのを意味もわからず丸コピペしたのだと推測
0303デフォルトの名無しさん2008/10/01(水) 12:05:42
>>298
書名をさらして著者に改善を要求しよう
0304デフォルトの名無しさん2008/10/01(水) 12:13:37
バージョンアップ後のフォローを求めるアホもいるので注意
ちゃんと冒頭に「バージョン○○を対象にします」って書いてあんじゃんよ
0305デフォルトの名無しさん2008/10/01(水) 15:00:25
>>304
今回の select option に限って言えば、どのバージョンでもあるわな
0306デフォルトの名無しさん2008/10/01(水) 19:14:46
ruby gemsでdescriptionで検索することってできないのでしょうか?

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

とやっても、名前でしか検索ができません。
説明欄も検索したいのですが・・・
0307デフォルトの名無しさん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するためのオプションだな。
0308デフォルトの名無しさん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が問題なのですが何がいけないんでしょうか・・・?
助言頂けるとありがたいです。
0309デフォルトの名無しさん2008/10/02(木) 11:49:49
"うまく動かず"を出し惜しめせずに書けw
0310デフォルトの名無しさん2008/10/02(木) 11:51:06
sum += a.to_i
かな
0311デフォルトの名無しさん2008/10/02(木) 12:07:40
>>309
コマンドプロンプトだと1つ目の数値を入れたとたん終了・・・
>>310
できた!thx!
getsで入力した数値を文字列だと思ってたのか・・・orz
ほんとありがとう、数値ひとつ入力するのに1時間奮闘してた・・・
03123112008/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
0313デフォルトの名無しさん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"
0314デフォルトの名無しさん2008/10/02(木) 12:37:37
どういう勉強の仕方をしてるのか気になる。
0315デフォルトの名無しさん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)

あと入門書嫁
0316デフォルトの名無しさん2008/10/02(木) 12:49:11
本題に関係ないとはいえ一応書いておくが、Rubyでforはめったに使わない
普通はブロックを使う
03173122008/10/02(木) 12:50:02
>>313
おお・・・ちゃんと動く・・・ありがとです。
for文の中でsumに足していかないとは・・・!
sum周りが初見なんで調べないとですね。
ともあれthxです。

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

>>315
いや、「.rb」をそのままダブルクリックで実行してます。
だからsleep入れたりしてすぐに消えないようにしてたり・・・
基本はRDEで実行してます。
「たのしいRuby 第2版」を参考にしてますが、必要な所だけ探して読んでるのがいけないかもですね・・・
0318デフォルトの名無しさん2008/10/02(木) 13:19:11
コマンドライン実行のスクリプトをダブルクリックしてどうする
正常終了でウィンドウ閉じるだろ
0319デフォルトの名無しさん2008/10/02(木) 13:36:57
最後にsystem('pause')入れたりする
0320デフォルトの名無しさん2008/10/02(木) 14:02:52
>>317
RDE使ってるなら、プログラムを実行した後
下の出力ウインドウにエラーメッセージとか出てるんじゃないか?
それを貼り付けるべし

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

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

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

みなさんありがとうございます。またすぐに来そうで心配ですが、その時はよろしくお願いします。
0322デフォルトの名無しさん2008/10/02(木) 18:02:43
バッチファイルにしてやればエラーが出てもポーズさせるようにできるよ。
ruby -x "%~0" || pause
と書けばエラーが出たときに限ってとまる。

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

#!ruby
put "hello"
0323デフォルトの名無しさん2008/10/02(木) 19:08:34
>>322
横からだがサンクス
これを.rbに関連付けしておけばよいのか・・・
|| でエラー時だけ止まるのかいいな、これ
0324デフォルトの名無しさん2008/10/02(木) 22:15:24
rdocで#:nodoc:と指定されてる要素も無理矢理ドキュメント化するような
オプションとか方法とかってありますか?
0325デフォルトの名無しさん2008/10/02(木) 23:44:42
>>324
そんなのはないから自分で #:nodoc:を消せばいいじゃん
cp -pr src1 src2
find src2 -type f | xargs perl -pi 's/:nodoc://'
0326デフォルトの名無しさん2008/10/03(金) 01:37:13
>>325
なるほど
参考にさせていただきます
ありがとうございました
0327デフォルトの名無しさん2008/10/03(金) 02:38:35
>>325
そこでrubyでもsedでもなくperlかよw
0328デフォルトの名無しさん2008/10/03(金) 11:54:46
>>327
1 linerでの置換ならrubyよりperlのほうが便利
sedは-pオプションがない
0329デフォルトの名無しさん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
が使えるかが一番問題なんだけど
0330デフォルトの名無しさん2008/10/03(金) 13:02:03
>>329
現在の Ruby は 1.8.7 です
0331デフォルトの名無しさん2008/10/03(金) 13:09:37
(いろいろとpython側もruby側も追随してないだろうから、やめるのが吉、ってことか...)
0332デフォルトの名無しさん2008/10/03(金) 15:59:38
>>329
作者に聞くか、自分で試してみるしかない。
つうか、PerlやPHPならまだしも、Pythonから宗旨替えする理由って何?
0333デフォルトの名無しさん2008/10/03(金) 17:24:32
>>332
借りてるレンタルサーバーでRubyは動くけど
pythonが動かない

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

というエラーが出ます。どうしたもんでしょうか。
0336デフォルトの名無しさん2008/10/03(金) 21:46:08
普通にsystem使ったら?
0337デフォルトの名無しさん2008/10/03(金) 22:09:57
>>328

sedのデフォルトの動作が -p 指定時のPerlと同じだろ。
おまえさんが言いたいのは -i じゃないのか?
でもこれも GNU sedならあるけどね。
0338デフォルトの名無しさん2008/10/03(金) 22:12:47
>>335
gsub!の置換後の文字列だけどそれでいいのか?

あと startはcmd.exe の内部コマンドだからそれだとまずいだろう
0339デフォルトの名無しさん2008/10/03(金) 23:13:37
>>337
>おまえさんが言いたいのは -i じゃないのか?
その通りだ orz
エスパーさんくす
0340デフォルトの名無しさん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"

みたいになってしまいます。
0341デフォルトの名無しさん2008/10/03(金) 23:58:19
>>340
ソース読んでないけど、たぶんその通り
UNIX畑の人間が書いたスクリプトには、バイナリモードを考慮してないものがある
最近だとRackでも見た
0342デフォルトの名無しさん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
ある意味とてもカッコ悪いよな
0343デフォルトの名無しさん2008/10/04(土) 00:01:14
PNGのマジックナンバーに含まれるEOF文字で止まっているようですね。
バイナリモードのopenを使うように書き換えないといかんのかな。
0344デフォルトの名無しさん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 のモジュールの多くは自前のスクリプトの先頭で書き換えることができる
きっとこれから何度もお世話になると思うので覚えておくといい
けっこう明確なバグ(で、自前で何とかなるもの)が残ってたりするもんだ
0345デフォルトの名無しさん2008/10/04(土) 00:07:32
あれ、アクセスフラグrbじゃなくてrwなの?
0346デフォルトの名無しさん2008/10/04(土) 00:10:45
rb だな
0347デフォルトの名無しさん2008/10/04(土) 00:16:27
msっていつになったらテキストモードをなくすの?
0348デフォルトの名無しさん2008/10/04(土) 00:24:32
>>347
Cやれ
03493402008/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
0350デフォルトの名無しさん2008/10/04(土) 01:18:38
これはホントは標準添付の便利メソッドのフリしてバイナリモードガン無視の File.read が悪いんだよね
ライブラリ作者はあんまり悪くない(注意不足なだけ)
2.0 では直ってたりするのかしら
0351デフォルトの名無しさん2008/10/04(土) 01:29:27
1.9にはIO.binreadというのがあるようだ。
あと、1.9以降はstdioと絶縁したんだっけか?
0352デフォルトの名無しさん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
0353デフォルトの名無しさん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
0354デフォルトの名無しさん2008/10/04(土) 02:37:21
>>352
while (3000ポートに接続できない)
 sleep(1) # 1秒待つ
end
0355デフォルトの名無しさん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
03563522008/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.

とか出るしダメポ……
0357デフォルトの名無しさん2008/10/04(土) 02:53:16
>>355
「全部WSHで書けばいいじゃん」って思うよね?
うん,俺もそう思う.

Jscriptとかも使ってみると意外と便利なんだよなぁ.
03583522008/10/04(土) 02:57:28
深夜に何度もすいません。
キー入力待ちでもsleep後に平行してブラウザが起動してくれました。大丈夫でした。
httpdの起動が遅いせいか、どうもタイミングが悪かったようです。

>>354を実装してみたいと思います。ありがとうございます。
03593522008/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をこんな感じで行けました。
もっと短くかければよかったのですが。
0360デフォルトの名無しさん2008/10/04(土) 04:06:35
テキストモードとか意味不明。
ただこういうバグを生むために存在するとしか考えられん。

まあでもそういうのを考慮する環境がクライアント機では90%以上を占めてるので仕方ないか。。
0361デフォルトの名無しさん2008/10/04(土) 04:10:20
だからCやれって
テキストモードが生まれたわけがわかるから
0362デフォルトの名無しさん2008/10/04(土) 04:35:54
>>361
Cは平素より使用しているが、どうしてテキストモードなるものが存在する必要があるかは理解できない。
ここで、「ググレ」やリンクを貼る行為ではなく、あなたの言葉での説明希望。
0363デフォルトの名無しさん2008/10/04(土) 07:12:40
ちゃんとした文責のある文章を拒否して、名無しさんの言葉だけ求めるってw

「知りたい」んじゃなくて「追い込みたい」のが丸わかり。
土曜の早朝から何を厨臭いことを。
0364デフォルトの名無しさん2008/10/04(土) 07:17:11
隔離スレにお帰り
0365デフォルトの名無しさん2008/10/04(土) 08:31:49
むしろCのstdioがマシンごとに改行の内部表現が異なることを意識して
テキストモードとバイナリモードを用意して抽象性を確保してるんだから
UNIX使いもちゃんと使い分けろって話になりはしないの?
0366デフォルトの名無しさん2008/10/04(土) 09:50:05
>>363
煽るだけならCスレへお帰りください
0367デフォルトの名無しさん2008/10/04(土) 10:23:42
>>362
>Cは平素より使用しているが、どうしてテキストモードなるものが存在する必要があるかは理解できない。
たんに、プラットフォームによって改行を表す記号が違うので、それを隠蔽して互換性を確保するモードを用意しただけ。

>ここで、「ググレ」やリンクを貼る行為ではなく、あなたの言葉での説明希望。
ほんとにCやってるなら、このくらい分かるだろ。
まずは「教えてください」という言葉を覚えような。
0368デフォルトの名無しさん2008/10/04(土) 11:01:03
>>367
>まずは「教えてください」という言葉を覚えような。
お前は文章に「教えてください」って文字列が入ってないと納得できない正規表現脳なのか
0369デフォルトの名無しさん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
0370デフォルトの名無しさん2008/10/04(土) 12:46:31
>>365
普通UNIX使いは改行記号がが\nのとき、\r\nのとき、\rのときそれぞれを考慮したコードを書きます。
なぜならUnix使いはおそらくwindowsをはじめとする他の環境を触ったことがあり、
それらで改行がどう表現されるかを知っていて、
かつbフラグは無視される環境であることがほとんどだから。

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

0371デフォルトの名無しさん2008/10/04(土) 12:56:18
>>368
その文字列を探す様子をたとえるのに、正規表現はないだろう。
0372デフォルトの名無しさん2008/10/04(土) 13:09:55
http://pc11.2ch.net/test/read.cgi/tech/1221967332/87
こいつ何言ってるの?
0373デフォルトの名無しさん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フラグは無視される環境であることがほとんど」なわけがない。
0374デフォルトの名無しさん2008/10/04(土) 13:27:07
>>372
お前の存在をズバリ言い当ててるのでは?
0375デフォルトの名無しさん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?
0376デフォルトの名無しさん2008/10/04(土) 14:08:35
この場合、「一般的であることを示す」のは至難の業だわな。
いったい何百例出せばいいのかと(数例で納得するのは逆におかしい)。

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

「知りたい」んじゃなくて「追い込みたい」のが丸わかり。
土曜の昼に何を厨臭いことを。
0377デフォルトの名無しさん2008/10/04(土) 14:46:13
>>376
久々に切れのある内容のスレを見た。
尊敬する。
あなたの言うとおり!!
0378デフォルトの名無しさん2008/10/04(土) 16:17:01
>>376
なに語ってるのか知らんけど、
>普通UNIX使いは改行記号がが¥nのとき、¥r¥nのとき、¥rのときそれぞれを考慮したコードを書きます。
なんておかしなことを書いてあるから、それが「普通」である根拠を示してくれといってるだけ。
答えられないならでしゃばんなよ。
0379デフォルトの名無しさん2008/10/04(土) 16:20:17
IDの出ないスレは自演が楽だな。
0380デフォルトの名無しさん2008/10/04(土) 16:21:10
>>375
>wgetのhttp.cなどを参考にしても、もし改行が¥nの場合、¥r¥nの場合両方とも正しく処理できるように
>なっている様がわかる。

wget はネットで使うんだから、どちらにも対処できるようにするのは普通だろ。
それこそunixもwindowsもmacも関係ない話。
これをbフラグの話で持ち出すほうがおかしい。
0381デフォルトの名無しさん2008/10/04(土) 16:46:28
>>378
> なに語ってるのか知らんけど、
知らんまま反応した当然の結果として、まるで的外れだから、「知る」までは黙ってていいよ。
0382デフォルトの名無しさん2008/10/04(土) 18:34:37
unixはバイナリモードしかなくても、改行コードがファイル毎にバラバラでも
テキストを問題なく扱えるし、windowsでも当然可能
# 可能にしてるのはライブラリやアプリケーション、だけど問題はそこじゃない
不必要なテキストモードを残しているばかりに>>340の様な問題が起こる
appleがOSXでCRを捨てたようにwinもさっさとテキストモードを廃止してほしいもんだ
03833402008/10/04(土) 19:03:40
なんか、俺のせいで半荒れ?でスマナイ

俺はネイティブ言語はDelphiくらいしかつかわないけど、
テキストモードとかバイナリモードなんて意識したことない。
File.readのテキストモードとかの区別って結局どこから来てるんですかね?
0384デフォルトの名無しさん2008/10/04(土) 19:25:51
>>383
Rubyを作るときのCの…えー、WindowsのCライブラリから来ている
結局としては、テキストであるという判断をどの層で誰がやるかという話に過ぎない
03853522008/10/04(土) 19:33:12
>>384
そっか、C言語のライブラリのせいなのね・・・
03863402008/10/04(土) 19:36:58
ん?レス番残ってた 340です。
0387デフォルトの名無しさん2008/10/04(土) 19:42:25
1.9はstdioを捨てたと聞いたが、そうするとテキストモードに関する
状況は変化するの?
0388デフォルトの名無しさん2008/10/05(日) 18:24:44
>>387
ユニバーサルニューラインが入ってる。
http://www.garbagecollect.jp/~usa/d/200808c.html#id20080825_P1
0389デフォルトの名無しさん2008/10/05(日) 19:15:07
>>388
> "r"なら、"rt"と"rb"のどちらの扱いになるかはプラットフォーム依存。
> とりあえず、いわゆるUNIXなら"rb"と同様に、mswinやmingwなら"rt"と同様になる。

ちょw 問題解決されてなくないですか?
0390デフォルトの名無しさん2008/10/05(日) 19:17:52
ああ、違うのかな?
前みたいに適当に"r" だけだとどっちにしろ環境依存になるから、
バイナリかテキストかを意識しなくちゃいけないわけか
0391デフォルトの名無しさん2008/10/05(日) 20:19:17
テキストだとエンコーディングも意識する必要があるしのう。
文字=バイトで凝り固まった外人どもよりはこのへん日本人は意識しやすいだろうけど。

0392デフォルトの名無しさん2008/10/06(月) 00:31:26
>>389
本質的に問題なのはテキストモードを区別するという慣習だから、
Rubyだけで解決できる性質の問題じゃない。
Windows全体で「CRLFを使うのはやめよう」という流れにならない
限り解決しようがない。
0393デフォルトの名無しさん2008/10/06(月) 01:51:56
結局いつものRubyが糞なのが根源的な原因だけど対応するのが面倒だから
個々の環境(というかいつもWindows狙い撃ち)で対応しやがれというお話ですね。
0394デフォルトの名無しさん2008/10/06(月) 02:00:53
俺の場合、Windows(つかSJIS/CP932)一辺倒の頃は
むしろ「LFなんて糞、CR+LFに統一しる」と思ってた
今はそうでもないが、昔の俺以外にもそう思ってる奴は居るかも
0395デフォルトの名無しさん2008/10/06(月) 02:31:20
ラインをフィードしただけで「行の先頭」に行くUNIXは変
キャリッジをリターンしただけで「次の行」に行く旧Macも変
「カーソルを行頭に戻してから行を送る」というCRLFを具現したWindowsが意味的に妥当

とは思う
っていうか電脳化した時点でCRLFという概念作っとけよもう
何が悲しくてコンピュータでタイプライタのエミュレーションなんぞしなければならんのか
0396デフォルトの名無しさん2008/10/06(月) 02:38:48
SJISが普通に使われるWindowsでは2バイトあった方が誤読しにくい
0397デフォルトの名無しさん2008/10/06(月) 08:21:28
>>395
それは端末を中心に考えているから。だから「行頭に戻る」と「次の行に移動する」をわけて考えてしまう。
UNIX作ったひとはテキストを扱うことを考えてて、それでテキストの「行末」が欲しかっただけだから、
それを1文字で表現したことは、そんなにおかしな話ではない。
0398デフォルトの名無しさん2008/10/06(月) 10:46:45
CP/Mの呪縛?
EOFとかCR/LFとか
0399デフォルトの名無しさん2008/10/06(月) 11:10:10
read() より下のレイヤであれこれやる Windows が変、ってことで
0400デフォルトの名無しさん2008/10/06(月) 12:31:57
>>394
統一しる!までは思わんがw
どっちかというと、UNIXとかの人にバイナリで読む時とかちゃんと、"rb" つけてくれ!頼む!って感じ。
いろんなソースいじっていると本当にそう思うw
0401デフォルトの名無しさん2008/10/06(月) 12:33:07
なーーんか、そろそろRuby本スレみたいな雰囲気で
初心者さんが質問しにくくなってきている気がするので移動しませんか?w
0402デフォルトの名無しさん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")
などとするしかないでしょうか?
関数持ちだすのもなんかアレな気がして…
0403デフォルトの名無しさん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するのはどうでしょう
0404デフォルトの名無しさん2008/10/07(火) 09:05:04
>>403
> class << Object.new
こんな書き方できるんだ...
「class <<」の右側って任意の式がかけるの?
0405デフォルトの名無しさん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
0406デフォルトの名無しさん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
みたいな感じで使う
0407デフォルトの名無しさん2008/10/07(火) 17:44:23
>  class << self;
 class << self
0408デフォルトの名無しさん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の特異メソッドを定義するという説明になるかと思いますが、
両者はまったく同一のことを行っているという解釈でいいでしょうか。
0409デフォルトの名無しさん2008/10/07(火) 20:36:41

  ☆ チン

        ☆ チン  〃  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          ヽ ___\(\・∀・)<  初心者の質問じゃない質問まだー?
             \_/⊂ ⊂_)_ \____________
           / ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
        |  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| :|
        |           .|/
0410デフォルトの名無しさん2008/10/07(火) 20:36:43
いいです
0411デフォルトの名無しさん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

くらいは違う。
0412デフォルトの名無しさん2008/10/07(火) 22:38:52
両者の違いが問題になるようなクラス設計をしてはいけないな
0413デフォルトの名無しさん2008/10/08(水) 02:30:36
>>411の上と下って具体的にどう違うの?
0414デフォルトの名無しさん2008/10/08(水) 11:48:06
最近、Rubyの勉強を始めた者です。
先週、RubyのMLに登録し「Welcome to our ruby mailing list」のメールも届いたのですが、
その後メールが1件も届きません。ひょっとしてRubyのMLって、コマンドをサーバーに送って
取得しないといけないのでしょうか?それとも、さらに何か手順を踏まないとメールが
届かないのでしょうか?メールに記載されている説明には、過去の投稿が欲しいなら
サーバーにコマンドを送れ、とは書かれているのですが・・・
0415デフォルトの名無しさん2008/10/08(水) 11:57:01
RubyのML、じゃどれかわからん。
MLによっては単に流量が少ないだけということもある。

本来流れているはずのメールが届いてないというなら、そのWelcomeメールに書いてある問い合わせ先に質問メールを投げればいい。
0416デフォルトの名無しさん2008/10/08(水) 12:00:10
ruby-ext と ruby-math、非公式の rubyist ML は投稿がないな

正直なとこ、ML は何か発言したい人向けだね
初心者さんはこのスレとかマニュアル独学とかしたほうがいいかも
0417デフォルトの名無しさん2008/10/08(水) 12:09:57
>>415,416
素早いレス、ありがとうございます。
登録したのは「ruby-list」です。単に投稿が少ないだけなのか、
それとも自分が何かミスをしていて、メールが届かないのかが分からなかったもので。
とりあえず、MLの管理者に問い合せてみようと思います。
0418デフォルトの名無しさん2008/10/08(水) 12:27:55
ウインドウズでのrakeの実行が遅すぎる、どうにかならないのか?
0419デフォルトの名無しさん2008/10/08(水) 12:42:41
>>418
まだCPUが1個なんですか?
Rails開発者はデュアルコアとか普通ですよ?
0420デフォルトの名無しさん2008/10/08(水) 13:22:04
gem update のメモリ超絶消費問題が長らく直らなかったくらいだしなあ
メイン開発者たちのマシンでは一瞬あるいは2秒程度で終わってると考えるのが妥当だな
あるいはWindowsのRuby使ってないとか
0421デフォルトの名無しさん2008/10/08(水) 13:26:07
Windows使ってる人なんてハイスペックが当たり前で気にならないかもしれない
0422デフォルトの名無しさん2008/10/08(水) 13:51:19
>>418
一応回答すると、WindowsのRubyスクリプトで処理開始までが馬鹿みたいに遅いのはどうにもならない
これを改善する方法を見つけられたらRubyは広まると思うんだがというかWindowsで常用したい
0423デフォルトの名無しさん2008/10/08(水) 13:55:23
Core2Duo使ってるレベルだったら遅さなんて感じないけどね
0424デフォルトの名無しさん2008/10/08(水) 14:09:02
>>423
俺の環境はCore2Duoだが、体感できるぐらいには遅い
0425デフォルトの名無しさん2008/10/08(水) 14:09:55
同じマシンにLinuxとか入れて同じRubyスクリプトを実行するとほぼ一瞬なんだよねえ
Cライブラリとかの違いの関係だと思うんだが、残念だな
0426デフォルトの名無しさん2008/10/08(水) 14:18:53
WindowsでRubyってそんな遅いの?
ならJRuby使っても気にならないんじゃね
0427デフォルトの名無しさん2008/10/08(水) 14:24:38
>>424
そうなってくると、HDDとかにも問題があるんじゃない?
0428デフォルトの名無しさん2008/10/08(水) 14:27:56
VistaはVistaで遅い
0429デフォルトの名無しさん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

だそうな
0430デフォルトの名無しさん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でこれだったぞい?
0431デフォルトの名無しさん2008/10/08(水) 15:04:51
そりゃキャッシュに乗ってるかどうかで全然違うよ
0432デフォルトの名無しさん2008/10/08(水) 15:10:08
>>429
どうもその人だけみたいな感じだね
いろいろな要素が絡み合って遅くなってるのかな
0433デフォルトの名無しさん2008/10/08(水) 15:19:17
>>430
それはCPUが充分速い
>>429はPentium3だぞ
0434デフォルトの名無しさん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とか」だとかいうのの何かが関連してるのかも
0435デフォルトの名無しさん2008/10/08(水) 15:26:11
>>433
424みたいのがいるから、CPUの問題じゃなく、遅くなる何かがあるんじゃないか?
0436デフォルトの名無しさん2008/10/08(水) 15:30:25
全員が遅いなら、それこそ「WindowsのRubyは遅くて使えねえ」という大合唱になってるはずだしな
大丈夫な人と大丈夫でない人がいる程度には、ポピュラーな別の原因があるんだろう
0437デフォルトの名無しさん2008/10/08(水) 15:38:24
VistaだったらWindows defenderの影響とか
0438デフォルトの名無しさん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分くらいかかる
04394242008/10/08(水) 18:47:36
書き忘れてたけど、遅くなるのは基本的に初回起動(キャッシュされてない状態)のとき
キャッシュ無しの状態でrake打つと、だいたい3〜5秒ぐらいかかる
二回目以降は0.1秒くらいしかかからない
(WindowsXP Core2Duo 1.86GHz メモリ1024MB ruby-mswin32)
0440デフォルトの名無しさん2008/10/08(水) 19:24:07
rakeとか言われても何も比較できない
0441デフォルトの名無しさん2008/10/08(水) 21:30:31
K6-2 450Mhz Windows 2000
rakeって使ったこと無いけど
Ruby 1.9.0-5 に標準でついてるので
何も無しにrakeすると
No Rakefile found で即終了
約2.5秒 (何回実行しても)
0442デフォルトの名無しさん2008/10/09(木) 01:22:27
>>419
Core2Duoでも、めちゃくちゃ遅いぞー
今のままではwin上でrailsは開発できない
0443デフォルトの名無しさん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バブルははじけるだろうな。もうはじけている予感はあるが...
マーケティング戦略に踊らされたやつの負けー
0444デフォルトの名無しさん2008/10/09(木) 01:41:46
根本的にいろいろ勘違いしてるな
0445デフォルトの名無しさん2008/10/09(木) 04:54:55
勘違いしているというより、railsを叩くストーリーを語りたかったんだろう。
「この物語はフィクションです。実在の人物・団体・CPU・プログラミング言語とは
一切関係ありません」
0446デフォルトの名無しさん2008/10/09(木) 08:09:36
Rubyが遅いのはもうすでにだれもが知っている事
耐えられないならJRubyを使えば速くなる


0447デフォルトの名無しさん2008/10/09(木) 08:28:26
JRubyの方が速いのは事実だが、
RailsをJRubyで動かすとCRubyより遅くなる。
0448デフォルトの名無しさん2008/10/09(木) 08:32:02
結局Pyhon+Zopeが最強ってことか
0449デフォルトの名無しさん2008/10/09(木) 09:20:44
>>448
Python + Django
だろー

Railsはscaffoldであっと今に雛形が作れるが、
Djangoはもっと強力で管理ページもあっという間に作れる。

0450デフォルトの名無しさん2008/10/09(木) 10:08:18
>>445
客観的に見れない信者のような連中が出てきたらそろそろかな?
前出のように、ウインドウズ上で仕事として開発するのは無理。
LinuxとWinでrake db:migrateの比較をしてみればすぐわかる。

Railsは、初回は金利0その後徐々に金利が上がるローンと似ている。
0451デフォルトの名無しさん2008/10/09(木) 10:29:10
Railsの「生産性」を叩いてる人はVBAで納品される受注プロダクトもあるということを聞いたら卒倒するんだろうなと思ってる
なんでソフトウェアの全部が全部銀行並みの規模でクオリティでなければならんのん?
0452デフォルトの名無しさん2008/10/09(木) 10:59:38
なんでWindows上でRailsを実行させないといけないのかがそもそも理解できないわけだが。
0453デフォルトの名無しさん2008/10/09(木) 11:14:20
>>452
開発環境の事を言っているんだろ
rakeは本番稼動では使わないからなー
Rails信者はMac信者という事だろう
しかしほとんどは最近Mac信者になったやつらだろうが

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

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

WindowsをクライアントにしてUNIX系OSにログインするというのが最強ではあるが、それだとメンテ対象が2つになるんだよね
0455デフォルトの名無しさん2008/10/09(木) 11:50:30
WindowsやLinuxとかを我慢して使ってる人のほうがよっぽど信者だと思う…
0456デフォルトの名無しさん2008/10/09(木) 12:14:08
質問だよ

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

どうするのが速くて妥当かなあ?
検索語100個の正規表現100個を200文全部に適用する? 2万回正規表現起動?
0457デフォルトの名無しさん2008/10/09(木) 12:20:30
数KBのテキストに100回適用を200回とかはRuby的には屁でもない日強茶飯事だと思うぞ
ライブラリの中ではもっとえげつない、力技としか思えない正規表現動作がゴロゴロ…

選択100個入りの正規表現と100個の正規表現をif文で回すのと text.include?(s) とどれが速いかとかそういうのは知らない
0458デフォルトの名無しさん2008/10/09(木) 12:45:02
>>455
会社にあるPCを見て見ろ、Macなんてあるか?
ほとんどないだろう、どこの会社だって同じだ。
Railsが新しい物好きな連中以外に普及するためには、
Winでまともに使えないとだめなんだろうね。
個人的にはRailsのIDEがもっとコード補完が上手になってもらいたい。

結局、
小規模サイト:PHP
大規模サイト:Java
0459デフォルトの名無しさん2008/10/09(木) 12:47:53
候補や説明文がよほど膨大なら、
Karp-Rabin法も考えられるかもしれんが・・・・・まあその程度なら
0460デフォルトの名無しさん2008/10/09(木) 12:52:25
yieldはなんだかんだ言って遅いから
語群を|でつなげた正規表現200回起動がよさそうに思う
ブロック使わずにif文ずらずら並べるならわからんけど
0461デフォルトの名無しさん2008/10/09(木) 12:53:39
個人的用途を除くと、イメージ的には
Macはデザイン、クリエイター、
Linuxは学術用
UNIXはサーバー
Windowsはビジネスその他って感じだな
0462デフォルトの名無しさん2008/10/09(木) 13:10:44
Ruby/Tkで
EntryウィジェットやTextウィジェット上でドラッグすると
フリーズします。原因として考えられることは何でしょうか?
0463デフォルトの名無しさん2008/10/09(木) 13:18:57
ドラッグしたときの動作をプログラムしてないからじゃね
0464デフォルトの名無しさん2008/10/09(木) 13:20:10
語群があまり変わらないという話だから、俺も>>460に賛成
0465デフォルトの名無しさん2008/10/09(木) 13:22:01
>>456
正規表現でやるならRegexp.unionっていうのがあるよー
0466デフォルトの名無しさん2008/10/09(木) 13:22:15
学術的なウンタラカンタラならともかく、業務サポートかカジュアルな用途だろうしな(いやわからんが)
0467デフォルトの名無しさん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)/

きちんと動くのかね、これ
0468デフォルトの名無しさん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に軸足を移すそうだ。
0469デフォルトの名無しさん2008/10/09(木) 13:31:22
はいはい初心者スレだよここは
0470デフォルトの名無しさん2008/10/09(木) 13:35:36
>>468
Javaを知らないからそんなことになる
Javaを知ってればRoRはJavaで負けたスーツ連中が持ち上げてるだけだと早々に気づけたろうに
いい社会勉強になったことだろう
0471デフォルトの名無しさん2008/10/09(木) 13:36:44
>>467
動くよそりゃw
inspectがごちゃごちゃするのには確かに同意するが
0472デフォルトの名無しさん2008/10/09(木) 13:41:02
>>468
みんな、そこはもう大分前にとおりすぎたのだがwww
0473デフォルトの名無しさん2008/10/09(木) 13:41:51
そもそも ?-mix: って何よマニュアルに書いとけよって感じではある > Regexp.union
0474デフォルトの名無しさん2008/10/09(木) 13:42:54
>>468
あとZed Shawの記事はネタなので釣られないようにな。
単体の記事で見ると本当にそう思っているのかと思うもんだよ。

よくはてなブックマークとかでたくさんブックマークされている、煽り気味のエントリーとか
他の記事よむとネタじゃんってすぐにわかる、みたいなの
0475デフォルトの名無しさん2008/10/09(木) 13:43:20
Rubyしか知らないと悲惨なのにはこっそり同意しておく
0476デフォルトの名無しさん2008/10/09(木) 13:46:23
CとJavaとPerlとPHPとPythonとSchemeはオレオレライブラリを作れる程度には齧っておいたほうがいい

…多いな
0477デフォルトの名無しさん2008/10/09(木) 13:48:55
PerlとPHPは真っ先に除外できるな
0478デフォルトの名無しさん2008/10/09(木) 13:53:31
>>477は何もわかってない
キャッチセールに真っ先に引っかかるタイプ
0479デフォルトの名無しさん2008/10/09(木) 13:59:54
アレな方々が流入してくるとすぐスレがおかしくなるな
0480デフォルトの名無しさん2008/10/09(木) 14:02:47
PerlやPHPを知らないっていうのは一番悲惨なパターンのRubyユーザーなのでは…
0481デフォルトの名無しさん2008/10/09(木) 16:01:00
PerlやPHPを生半可に知ってる方が、変にRubyに入れ込んじゃって不幸になる気もする。
0482デフォルトの名無しさん2008/10/09(木) 16:29:26
Rubyって何に適してる言語なの?
0483デフォルトの名無しさん2008/10/09(木) 16:53:30
>>482
オブジェクト指向テキスト操作ネット通信言語です
0484デフォルトの名無しさん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でまともに使えなければこれ以上流行はしないだろう。
0485デフォルトの名無しさん2008/10/09(木) 17:14:11
RailsはRubyのヘビーユーザーが適当に活用して小ぶりなアプリケーションを連続生産するのに向いている
RailsのためにRubyを学ぶような人や、Railsのソースを読んでも何してるかさっぱりわからんような人が使ってもどうにもならんな

という魔術師(志向)の人向けのフレームワークだったはずなんだが、当初からそのはずだったんだが、誰が捻じ曲げたのやら…
0486デフォルトの名無しさん2008/10/09(木) 17:14:19
すごい初歩的な質問していい?
ゲーム作ってみたいと思って、つい最近Ruby始めたんだけど。
講座HPみたいなところで、Ruby/SDLでつくったスクリプトをexeファイルにしても、
Ruby/SDLのdllファイルが全部同じディレクトリにはいってないと動作しないって書いてあったんだけど、
てことは作ったゲーム配布するときはdllファイルも全部つけて配布しなきゃいけないってこと?
0487デフォルトの名無しさん2008/10/09(木) 17:19:27
>>484
MacOSXでRubyを使うことに決めた人は、もともとPC-UNIX上でRuby使い倒してたような人が多い
そういう人の使うRoRは、その人のプロダクト作成に非常に役立つものになると思うよ

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

あとRubyでゲーム作るのはマゾさんのすることなんだけど、あなたはマゾですか?
0488デフォルトの名無しさん2008/10/09(木) 17:22:03
>>484
Railsを擁護する気は全くないけれど
一応、IDEを使ってRailsの開発することはできるよ(EclipseとAptana)

>>486
その通り

>>487
俺は自分のことをSだと思ってたが、本当はMだったのか
0489デフォルトの名無しさん2008/10/09(木) 17:41:03
http://www.domo2.net/search/search.cgi?word=ruby&tnum=50&sort=res+desc
0490デフォルトの名無しさん2008/10/09(木) 17:45:19
>>487
>>488
回答ありがとうございますm(__)m
一緒に配布するんですか〜。16個くらいあったんでまとめられれば見栄えがいいんだけど。

Rubyはゲームに向いてないですか;
大学の講義でRubyを軽く使うらしいから、ついでにと思って始めたんだけど・・
Rubyはわかりやすいって評判ですけど、Rubyでプログラミングに慣れてからC言語勉強した場合、
共通点が多くてサクサク覚えられますか?それとも違いが大きくて効率悪いですか?
0491デフォルトの名無しさん2008/10/09(木) 17:49:36
>>490
人によるんじゃないかな
共通してる部分も確かにあるけど
片方をしっかり身に着けない内に他に手を出すと
ごっちゃになって混乱しそう
0492デフォルトの名無しさん2008/10/09(木) 17:49:46
C言語を使って便利な機能を便利な概念でまとめたのがRubyだ
0493デフォルトの名無しさん2008/10/09(木) 17:54:36
>>491
>>492
回答ありがとうございます。
ある程度身につくまでRubyで頑張ってみて、限界感じたらC言語勉強することにします〜
0494デフォルトの名無しさん2008/10/09(木) 18:02:07
C→Rubyは曖昧さを感じて戸惑う
Ruby→Cは堅苦しさ、面倒くささを感じる
0495デフォルトの名無しさん2008/10/09(木) 18:07:31
>>490 >>491 >>492 >>493
CとRubyはまったく用途が違うだろう。無理に使う事ができるけどね。
Cを勉強するならC++じゃないか。
Rubyでゲームか? 話にならない。
ゲーム開発している人間に聞いてみな。笑われるだけだ。

後々の資産として、C++を先に勉強したほうが得だと思うよ。
0496デフォルトの名無しさん2008/10/09(木) 18:24:53
またC++厨が…
C++を学ぶのとCを学ぶのでは意義が違うと何度言えば
0497デフォルトの名無しさん2008/10/09(木) 18:26:11
そろそろスレタイ嫁
0498デフォルトの名無しさん2008/10/09(木) 18:30:38
>>496
説明してみぞ


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

Eclipse + JDT で幸せなJava開発環境を味わってる人には物足りないだろう。
0502デフォルトの名無しさん2008/10/09(木) 19:29:58
Rubyと共に使うなら純Cだろうね。
C++はそれ単体で使うもの。
ゲーム作りならC++オンリーがパフォーマンス的に一番だろうなあ。
ただ、Rubyでも処理速度がさほど求められないならゲームに一応使えると思うが
ゲーム用のライブラリはCかC++だろうしなあ。
一応、RPGツクールはRuby使えるのもある。
0503デフォルトの名無しさん2008/10/09(木) 20:03:58
>>502
Ruby/SDLでだいたい満足してたから、他のゲーム用ライブラリ触ったことないんだが
CやC++にはそんなに良いライブラリがあるのか?
0504デフォルトの名無しさん2008/10/09(木) 21:45:12
とりあえず、SDLはC/C++でも普通に使える。
0505デフォルトの名無しさん2008/10/10(金) 10:57:55
>>503
SDL
0506デフォルトの名無しさん2008/10/10(金) 18:18:11
わざわざCからSDL使わなくても、Ruby/SDLでよくね
性能が要求されるなら直接DirectX使うべきだし
0507デフォルトの名無しさん2008/10/10(金) 18:27:06
ゲームってのはけっこうハイレベルな感じに常時性能が要求されるもんだと思ってたが違うのか?
0508デフォルトの名無しさん2008/10/10(金) 18:29:11
ゲームによるよ
3Dでエフェクトも激しいアクションゲームなんかは大変だけど
そうじゃないゲームもたくさんある
0509デフォルトの名無しさん2008/10/10(金) 18:36:43
専用スレがあるんだからそっちでやればよくね?
0510デフォルトの名無しさん2008/10/10(金) 18:47:04
>>508
マジレスするとそうでもない
画像表示してブラーかけてるだけのADVなのにDirect9c対応グラフィックボード要求するとかもうアホかと
0511デフォルトの名無しさん2008/10/10(金) 18:55:54
「DirectGraphicsの初期化に失敗しました」は昨今けっこう有名なメッセージだと思う
0512デフォルトの名無しさん2008/10/10(金) 19:29:48
誘導:
【Ruby/SDL他】Rubyでゲーム制作・総合スレッド
http://pc11.2ch.net/test/read.cgi/gamedev/1207069887/
0513デフォルトの名無しさん2008/10/10(金) 20:31:46
>>510
それはその例がそういうゲームってだけだろ
0514デフォルトの名無しさん2008/10/11(土) 10:27:03
玉金破裂ゲーム
0515デフォルトの名無しさん2008/10/11(土) 15:25:43
Arrayを継承したクラスのオブジェクト.find_all{|e| e.cond?}

がArrayを継承したクラスのオブジェクトに自動でならないことにほんのりがっかりした
0516デフォルトの名無しさん2008/10/11(土) 15:30:32
>>515
gem のライブラリで時々見るな、そういう中途半端実装
そこはレシーバのコレクションクラスのオブジェクトを作って返せと…なんのための独自配列なのかと…
0517デフォルトの名無しさん2008/10/11(土) 16:00:49
>>515
find_all は Array じゃなくて Enumerable のメソッドだから
実際のところ自分のクラスは関係ない
0518デフォルトの名無しさん2008/10/11(土) 21:09:09
Arrayは継承するな…とcompositionを使えと
0519デフォルトの名無しさん2008/10/11(土) 21:59:40
Arrayを継承するってどういうシチュエーションなんだ??
0520デフォルトの名無しさん2008/10/11(土) 22:08:31
なんで継承を毛嫌いするかね
0521デフォルトの名無しさん2008/10/11(土) 22:09:37
いらんメソッドが付いてくるから
0522デフォルトの名無しさん2008/10/11(土) 22:13:23
アホすぎて笑えない
0523デフォルトの名無しさん2008/10/11(土) 22:13:39
継承は怖い
0524デフォルトの名無しさん2008/10/11(土) 22:18:59
>>520
作るのは簡単だが使うときに面倒
あと作り直すときにも面倒
0525デフォルトの名無しさん2008/10/11(土) 22:20:50
すごいとこまできてるねRubyistはw
0526デフォルトの名無しさん2008/10/11(土) 22:21:13
>>515
ハッシュからハッシュを返すselectやmapはたまに欲しくなる
0527デフォルトの名無しさん2008/10/11(土) 22:22:01
カンペキに活用した継承は非常に強力だが、ほとんどの継承はそうではない
っていうか、組み込みクラスは継承しないで委譲しろ、継承は自作クラス間でどんどんやれ
0528デフォルトの名無しさん2008/10/11(土) 22:23:05
本当にアホばかりで嫌になる
0529デフォルトの名無しさん2008/10/11(土) 22:24:49
ライブラリを書くくらいに使ってる人がいないってだけ
0530デフォルトの名無しさん2008/10/12(日) 10:56:19
Integerのaとbのobject_idを常に同じにする方法ってありますか?
a.object_id = b.object_id
みたいなことがやりたいんですが
0531デフォルトの名無しさん2008/10/12(日) 11:51:41
>>530
object_id を同じにしたい理由が良くわからんが…
普通に代入すれば同じになるでしょ。

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

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

>>531の言うように、Ruby の整数の数値の値とオブジェクトIDは紐付けられてる
整数の 1 のオブジェクト ID は常に一定だ
0533デフォルトの名無しさん2008/10/12(日) 13:33:03
>530
多分参照を扱いたいんだと思うが
そういう場合は配列やオブジェクトにくるんで受け渡しするのがベスト。
0534デフォルトの名無しさん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が定義しやすいなと
0535デフォルトの名無しさん2008/10/12(日) 15:39:09
>>534
なぜそうなってしまうのかわからない。
スキーマはどうなってるの?
0536デフォルトの名無しさん2008/10/12(日) 16:27:25
>>534
ごめん
その話聞いても,idとa_idを同じオブジェクトIDにしたい理由がわかんないわ
それにそもそも代入やFixnumみたいなやつ以外で同じオブジェクトIDになることない気がする

なにか勘違いしてるんじゃ…
0537デフォルトの名無しさん2008/10/12(日) 16:47:40
そんなことできたらそれはIDって言わないんじゃないの
0538デフォルトの名無しさん2008/10/12(日) 16:56:36
要するに,例えばaとbっていう変数があったときに
b.object_id = a.object_id
としておけば
a = 10
としたときに,bも自動的に10になってくれませんか?

っていう話でしょ

object_idはそんな用途に使えません
0539デフォルトの名無しさん2008/10/12(日) 17:01:37
>>538
すげー
よく検討ついたな
0540デフォルトの名無しさん2008/10/12(日) 17:54:01
>> 538
その通りです
分かりにくい説明で申し訳ないです

用は参照を使いたかったんですが。。
0541デフォルトの名無しさん2008/10/12(日) 18:32:47
なんかa_idって名前が気になるな
すっげー憶測だけど、Bはインスタンス変数でAを持つのが素直な設計だったりしない?
それならB#save!で@a.save!するだけで済むから楽なんだけど
0542デフォルトの名無しさん2008/10/12(日) 18:38:16
>>538
おまえ、ほんとエスパーだな。
おれはさっぱり読み解けなかった。
0543デフォルトの名無しさん2008/10/12(日) 19:03:44
>>534
railsというかActiveSupportはそういう関連づけを自動化してくれなかったっけ?

あるいは>>541のようにしてB#a_idは@a.idを返すようにするとか。
0544デフォルトの名無しさん2008/10/12(日) 20:48:21
>540は自分の頭にあるオブジェクトのイメージをER図やクラス図で
さらっと描きだせるくらいのレベルになるまでARを封印すべきだ。
もし仕事でやってるなら合掌。
0545デフォルトの名無しさん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が同じだよということができれば良いなということでした。
0546デフォルトの名無しさん2008/10/12(日) 23:11:18
プライマリキーの値を変更するな、テーブルの設計からやり直せ
0547デフォルトの名無しさん2008/10/12(日) 23:24:26
>>545
自己レスです
とりあえず、参照は素直にはできないということは分かりました。
ありがとうございました。
もう少し試行錯誤して、無理なら普通のARにしてみます。
0548デフォルトの名無しさん2008/10/13(月) 01:37:23
>>544
初心者として気になるんだけど
そのレベルになるまではどんな感じやるのが上達する?
0549デフォルトの名無しさん2008/10/13(月) 01:44:19
>>548
1週間に3日書く
今週はRubyスクリプト書いたり改良の試行錯誤が無かったなあという週が無いという状態にする

制御構造覚えたらマニュアル見つつたまに使う程度のカジュアルさでももちろん一向に構わないが、
その場合はRubyが上達することはないだろうし、上達するほど頑張る理由もそもそも無いことだろう
0550デフォルトの名無しさん2008/10/13(月) 01:56:31
Rubyのクラス分けやモジュール分けはてきとーで良いということがわかった頃から
スクリプト作るの早くなったような気がする

今でも特異メソッドとかわからんが
インスタンスメソッドとクラスメソッドしか作ってない
Proc はライブラリで要求されないと作らない
yield は使う機会が無いのでわけがわからない
0551デフォルトの名無しさん2008/10/13(月) 06:21:15
yield は each 作ったりしたらすぐ覚える
0552デフォルトの名無しさん2008/10/13(月) 06:31:29
おれはテストを書く気が全く起こらないんだよなあ…
少しづつでも書けばいいんだろうけど
つまらないから全く続かない…
0553デフォルトの名無しさん2008/10/13(月) 07:56:06
どう考えても

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

なのでテストを書く理由がない俺
他人様に提供するライブラリ書くんじゃない限り要らないもんだと割り切ってる
書き方指南がないということは本当はみんな不要だと思ってる証拠
0554デフォルトの名無しさん2008/10/13(月) 08:32:04
>>553
書き方指南いろいろあるじゃん
本にもwebページにも

俺も有用であるという自信はないが
0555デフォルトの名無しさん2008/10/13(月) 08:43:49
テスト書くためのスクリプトでテスト書く説明するだけだしなあ
お前そんなスクリプトなんて普段絶対書かないだろ、というのが多々…(特にテスト駆動)
0556デフォルトの名無しさん2008/10/13(月) 08:54:11
スクリプト序盤から中盤での書き方がよくわからないのがテスト駆動の特徴
というかMockとかあのへんを理解しないと関数的スクリプトのテストしかできん
0557デフォルトの名無しさん2008/10/13(月) 09:23:47
色々書き方の作法もあるけど、むしろ形式に捕らわれず自由にテスト書くようにしたら
それはそれで楽める部分もあると思う。
0558デフォルトの名無しさん2008/10/13(月) 09:42:39
俺はテスト書かなくて困るのってリリース後なんだよなぁ。
デグレ出るたびに書いときゃよかったって思う。
0559デフォルトの名無しさん2008/10/13(月) 10:07:10
ちゃんとテストが書けるようになったら、もう上級者だよ。
つまり上級者になるためには、テストがきちんと書けるようにならないといけない。

おれはまだうまく書けないんだけどな。
UIのテストなんか、どうしたらいいのかさっぱりだ。
0560デフォルトの名無しさん2008/10/13(月) 10:36:29
他人様のライブラリのgitのtestディレクトリとか眺めてるとよくわかる

本文コードの追加変更に対してテストが異常に適当というか不足
時間かけてまでして作りたくないかどうすれば網羅するか考えるの面倒なんだろうな
0561デフォルトの名無しさん2008/10/13(月) 14:01:54
テストなしでロジック修正とかコードの整理(リファクタリング)とか、
怖くてできない体になった。
0562デフォルトの名無しさん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
でインストール。
0563デフォルトの名無しさん2008/10/13(月) 17:14:28
>>561
わかります
0564デフォルトの名無しさん2008/10/13(月) 17:30:17
テスト書くとメソッド単位でしか検証できないからめんどくさい
あと、GUIアプリのTestってどうやるの?
0565デフォルトの名無しさん2008/10/13(月) 17:35:59
できない
0566デフォルトの名無しさん2008/10/13(月) 17:55:46
入力の自動化をすれば出来る。
が、チェック項目をリストにして人力でやったほうがなんぼかマシ。
0567デフォルトの名無しさん2008/10/13(月) 18:30:55
RubyでGUIつーと、テスト以前に環境が貧弱だからのう。
WebならSeleniumとか。
0568デフォルトの名無しさん2008/10/13(月) 18:32:59
>>564
自動でマウス動かしてクリックしたりフォーム埋めたりするよプログラムを併用する
稀にどうしても自動化できないところが出てくることがあり、そういうときは漏れのない操作一覧図を書いて手動
0569デフォルトの名無しさん2008/10/13(月) 18:58:10
>>564
ビューとコントローラを極力分離すれば、ある程度までは機械的にテストできる
0570デフォルトの名無しさん2008/10/13(月) 19:02:19
GUI自体をテストしたい場合は?
0571デフォルトの名無しさん2008/10/13(月) 19:15:36
GUI自体のテストって具体的にどんなの?
0572デフォルトの名無しさん2008/10/13(月) 19:52:47
マウスクリックのタイミングとか
0573デフォルトの名無しさん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
となってほしいのです。
0574デフォルトの名無しさん2008/10/14(火) 02:15:25
本質的にサブネットマスクはbitmaskだから
ANDしてやればいい
0575デフォルトの名無しさん2008/10/14(火) 03:03:18
>>573
IPAddr#include?
0576デフォルトの名無しさん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でも同様の結果でした。

これを回避する方法はないものでしょうか?
0577デフォルトの名無しさん2008/10/14(火) 09:35:18
そろそろ解決してる頃だろうか

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

「hoge ライブラリを試そうとして hoge.rb を作って実行し、次にまた別のスクリプトを作って変なエラーにはまる」というのは
そろそろ FAQ にしてもいいと思う
0578デフォルトの名無しさん2008/10/14(火) 09:46:44
>>577
ああ、まさにそれでした。
5時間くらい悩んでの書き込みだったので、今はRMagickのマニュアルを読んでました。
有難うございました。
0579デフォルトの名無しさん2008/10/14(火) 20:24:43
文字列中のすべての"\"を"\\"に、"'"を"\'"に置きかえたいときに
gsubってものすごくつかいづらいんですけど、
なんか他にいい方法はありませんか?
0580デフォルトの名無しさん2008/10/14(火) 21:00:31
str.gsub(/['\\]/){|s|"\\#{s}"}
十分簡潔に思うが、どの辺が使いづらく感じた?
0581デフォルトの名無しさん2008/10/14(火) 21:19:06
str.gsub(/['"]/) { %Q|¥¥#{$&}| }
あたりで手を打たないか?
0582デフォルトの名無しさん2008/10/14(火) 21:19:40
遅すぎたリロード
0583デフォルトの名無しさん2008/10/14(火) 21:42:38
ブロック使わずに表現できないの?
0584デフォルトの名無しさん2008/10/14(火) 21:45:41
str.gsub(/([\\'])/, "\\\\\\1")

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

>>579-580
後方参照使わずにgsub繰り返すっていう力押しをしてた人が
ハマるパターンだろうね。
0585デフォルトの名無しさん2008/10/14(火) 22:04:09
>>580
なるほど、ブロックを使えばいいんですね。

>十分簡潔に思うが、どの辺が使いづらく感じた?
perl なら、 s/([\\'])/\\\1/; と、比較的直感的なところを
>>584 のように"\\\\\\1"と書くとバックスラッシュが多くなりすぎて
後で読みにくいと思ったわけです。
0586デフォルトの名無しさん2008/10/14(火) 22:06:36
おっと、 s/([\\'])/\\\1/g; でした。
0587デフォルトの名無しさん2008/10/14(火) 23:56:30
str.gsub(/[\\']/, /\\\&/.source)
0588デフォルトの名無しさん2008/10/15(水) 00:44:09
Windows限定でいいんですけど、OSが32ビット版か64ビット版か調べる方法はあるでしょうか。
ENV["OS"]だと32bit版XPでも64bit版XPでも"Windows_NT"と表示されて区別が付きません。

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

ENV['PROCESSOR_ARCHITECTURE'].include?('64') が true なら 64BitなCPUなのできっと 64Bit版Windows
ttp://support.microsoft.com/kb/827218/
0590デフォルトの名無しさん2008/10/15(水) 01:06:42
じゃあruby関係で
ruby -e 'p RUBY_PLATFORM'

64bit環境を持ってないのでどんな出力がされるのかは知らんけど
0591デフォルトの名無しさん2008/10/15(水) 01:10:11
RUBY_PLATFORMはコンパイル時に決まりそう
0592デフォルトの名無しさん2008/10/15(水) 01:15:50
Fixnumを地道にカウントアップしていってBignumになる境界を見つける -> そこから推定
とかそういうアホを思いついた
0593デフォルトの名無しさん2008/10/15(水) 01:21:56
64bitのOSで32bitのバイナリ使ってたら無理じゃないか
0594デフォルトの名無しさん2008/10/15(水) 02:22:11
WIN32 API の GetSystemInfo() とか呼んだら良さそうな気がする。
呼び方はあれ、dl 使うなり何なり工夫してくれと。
0595デフォルトの名無しさん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 にも登場していますが、特別そういう表示がないので
勝手に使っても差し支えないんでしょうか?
0596デフォルトの名無しさん2008/10/15(水) 03:12:41
その程度の誰が書いても同じになるコードには
著作権が発生するほどの創作性はないよ。
0597デフォルトの名無しさん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
0598デフォルトの名無しさん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
0599デフォルトの名無しさん2008/10/15(水) 07:08:01
CamelCaseキモすぎる
0600デフォルトの名無しさん2008/10/15(水) 08:10:27
PascalCaseだね
0601デフォルトの名無しさん2008/10/15(水) 08:20:52
LCCだろ

さりとて、Windows の API にはハイフン区切りは似合わないのも事実
0602デフォルトの名無しさん2008/10/15(水) 08:25:44
CamelCaseは力強さを感じる
0603デフォルトの名無しさん2008/10/15(水) 12:36:20
MSは先頭大文字のCamelCase好きだよね
クラス名でもないのに何故?と違和感を感じる
0604デフォルトの名無しさん2008/10/15(水) 14:33:09
クラス名は許せるが、rubyでは_区切りとisPredicateではなくpredicate?を使ってほしい
0605デフォルトの名無しさん2008/10/15(水) 15:06:15
>>604
>isPredicateではなくpredicate?
変数に?使えたっけ
0606デフォルトの名無しさん2008/10/15(水) 15:17:48
使えないよ。
けどpredicateってことは多分604はメソッド名のつもりで言ったんだと思う
0607デフォルトの名無しさん2008/10/15(水) 17:14:47
何気に
attr_reader :hoge?
って書けないんだよな
0608デフォルトの名無しさん2008/10/15(水) 20:37:53
@hoge? がだめだからなぁ。
Module#attr_readerが再定義されていればその限りじゃないぜ
意義はないけど。
0609デフォルトの名無しさん2008/10/15(水) 20:39:11
?付きメソッドを定義したくなるのはよくあることなのに、attrで定義できないのがな・・・
自分でattr_readerを拡張するか、rubyplusのboolattr使うと便利
つーかActiveSupport辺りにも入ってそうな気がする
0610デフォルトの名無しさん2008/10/15(水) 21:32:47
?付きメソッドを自分で定義すれば済むだけなので、漏れは必要ないかなあ。
0611デフォルトの名無しさん2008/10/15(水) 21:48:34
>>610
メソッドごとに一つ一つ?付きを定義していくのって凄く面倒じゃね? 変更に弱くなるし
0612デフォルトの名無しさん2008/10/15(水) 21:59:26
?末尾のシンボルを渡されたら、メソッド名はそのままに
末尾削った変数にアクセスするっていうのも便利かもしらんね

でも真偽値のアクセサが面倒になるほど多いっていうのも
設計見直せる可能性はない?
0613デフォルトの名無しさん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

こんなんとか。リフレクションを用いるほど多く使うんじゃなければ
ちゃんと書いたほうがいいと思うけど
0614デフォルトの名無しさん2008/10/15(水) 22:40:14
>>611
>>612の言うように?付きメソッドをそんなに定義することあるかな?
06156112008/10/15(水) 22:43:31
>>612 >>614
4〜5つ程度の?付きメソッドでも、似たような定義を続けて書くことになるからかなり面倒だと俺は思う
この辺は個人の意見もあるとは思うが
0616デフォルトの名無しさん2008/10/15(水) 22:51:08
attr はあまり使わない
メソッドはきちんと定義する
0617デフォルトの名無しさん2008/10/15(水) 23:34:27
そもそも @hoge? ができないことに疑問を感じるんだが
0618デフォルトの名無しさん2008/10/15(水) 23:45:48
だから ? つきはメソッドだっつーの述語だっつーの

data= っていう変数が作れないのは不自然か?
change! っていう変数が作れないのは不自然か?
0619デフォルトの名無しさん2008/10/15(水) 23:56:18
@is_foo みたいな変数名をどれだけ見かけることか
変数名が述語になれないのはおかしい
0620デフォルトの名無しさん2008/10/16(木) 00:08:25
@hoge? = 123
まず見た目がきもい
そして三項演算子の文法と衝突しそう
0621デフォルトの名無しさん2008/10/16(木) 00:08:33
変数名が述語になるほうがおかしい飢餓す
0622デフォルトの名無しさん2008/10/16(木) 00:12:41
@foop か @foo_p でいい
0623デフォルトの名無しさん2008/10/16(木) 00:14:27
「○○が二者択一のどちらかか、を格納する変数」というのはあまり Ruby っぽくない
二者択一の判断自体をメソッドで参照するのがフツーな気がする
0624デフォルトの名無しさん2008/10/16(木) 00:32:23
>>620
そんなこと言ったらメソッド foo? がどんなオブジェクトも返すことのできる点もおかしくないかい?
0625デフォルトの名無しさん2008/10/16(木) 00:36:58
見た目がきもい、ってのはほんとに見たまんま、?で終わる識別子が左辺値にくるのが
きもいってことだよ。
別に @hoge? = true ならいいってことじゃない
0626デフォルトの名無しさん2008/10/16(木) 00:41:29
>>621
変数名とメソッド名の間で、言葉づかいの上でのセマンティックスが違っている「べき」なら、attr 系は廃止すべきってことになるな

>>625
@hoge? = true なら悪くないと思うけど
0627デフォルトの名無しさん2008/10/16(木) 00:46:06
やだよ。
メソッド名の慣習のせいで、「hogeっすか?」って訊いてるようなイメージがあるじゃん。>@hoge?
で、「そうっすよ」とか「違いますよ」とか返事しようとしてるところに値突っ込むってのは変な感じだ。観念的な言い方でアレだが
0628デフォルトの名無しさん2008/10/16(木) 00:50:34
何も @hoge? があってもそう書かなきゃいけないわけじゃないから、? を使わない自由を奪っているわけではないでしょ。
それよりも、attr 系によって変数名とメソッド名を関連付ける機能が提供されているにもかかわらず、? 付のメソッドだけ特例でそれができないほうが一貫性に欠けて嫌だ。
0629デフォルトの名無しさん2008/10/16(木) 00:54:28
>変数名とメソッド名を関連付ける機能
単なるメソッド。とあるリフレクションのラップなだけ。

>? 付のメソッドだけ特例でそれができない
できないのはそこじゃなくて変数名に?を付けること。
でもってこっちは処理系本体の機能の話。

パーサとかに手を入れて?付き変数を許してまで@hoge?とか書きたいか?
0630デフォルトの名無しさん2008/10/16(木) 00:58:26
そりゃ現状じゃ @hoge? が書けないようにパースしてるんだから、パーサを変えるしかないわな。
別に難しいことじゃない。
あと、attr_reader が処理系そのものが提供しているかどうかなんて関係ないじゃん。飽くまで意味論の話だし、built-inで入ってるんだから。
0631デフォルトの名無しさん2008/10/16(木) 01:02:56
だって…再定義できるもの
0632デフォルトの名無しさん2008/10/16(木) 01:06:57
>>627
メソッドvalueと変数@valueがあったとして、メソッドのほうは「valueは何か?」と問う意味なのに対して@valueはそのままの意味だよね?
同じようにhoge?がメッセージだと解釈されても、@hoge?までメッセージと解釈する必要はないのでは?
0633デフォルトの名無しさん2008/10/16(木) 01:20:26
変数名だからその通りなんだけど、あくまでイメージというか馴れや先入観の問題だよ。>@hoge?がメッセージっぽい

また別の問題として、
変数名に?が付けられて、attr系もそんな名前を受け取るとすると
hoge.foo? = true とか
hoge.bar! = false とかが出て来る。後者なんて比較の否定と見間違う。

さらにいうと、?や!を許すとして、[]とか[]=とか@-は変数名に許す? 全部メソッド名としては有効なはずだよ。
attr_accessor :foo=
-> foo.foo= = 123
こんなことになる
0634デフォルトの名無しさん2008/10/16(木) 01:44:47
hoge.foo? = true はできてもいいと思う。
hoge.foo! = ってのはまあちょっとヘンだけど、attr系で ! つけたかったことないから、あってもなくてもいいや。
[] や = が「メソッドの一部である」というのは別の側面で筋を通すための論法であって必ずしも名前の一部ではないので
(その証拠にメソッド「foo=」は、「foo.foo = 」のようにスペースを入れることができる)、
attr_accessor :foo= 等はなくてもよいかと。
0635デフォルトの名無しさん2008/10/16(木) 01:55:24
>その証拠にメソッド「foo=」は、「foo.foo = 」のようにスペースを入れることができる
いやいや、メソッド名はあくまで「foo=」だよ。__send__(:foo=, 123)とか出来る。
パーサが頑張って「foo.foo = value」を「foo.foo=(value)」と同じような扱いにしてくれているだけで。
0636デフォルトの名無しさん2008/10/16(木) 06:05:11
隔離スレでやれ
0637デフォルトの名無しさん2008/10/16(木) 09:41:53
本スレが隔離スレってのも難儀な話だよなあ
0638デフォルトの名無しさん2008/10/21(火) 07:15:54
RDEのツールバーとコンソール窓の設定などが上手く動作してくれません
ツールバーを移動して1段にまとめたりしても、RDEを最起動すると別の位置へ
勝手に移動した状態になってしまいます
コンソール窓は、フォントの設定が初期値に戻ってしまうのと、
ctrl+alt+cで開閉したりができません

コンソール窓のフォント設定だけは致命的なんで、そこだけでもなんとかできればと
06396382008/10/21(火) 07:27:47
一応環境も
ActiveScriptRuby 1.8.7(p72)
Windows XP SP3
です
0640デフォルトの名無しさん2008/10/21(火) 14:20:14
ツールバーの問題は俺の環境(XP)では何年も前からあるよ。
0641デフォルトの名無しさん2008/10/21(火) 15:51:59
てかRDE薦めてるサイトでもあるのか?
俺なら間違ってもRDEなんて使わせないんだが
0642デフォルトの名無しさん2008/10/21(火) 15:56:44
統合環境使わせるなら EclipseかNetBeansあたりじゃね?
0643デフォルトの名無しさん2008/10/21(火) 15:58:04
本筋以外での障壁が大きいからねえ…
「我慢して使う」時点で何か間違っとる
素直にエディタとプロンプトをAlt+Tabで切り替えて使うほうがマシ
06446382008/10/21(火) 17:13:53
コンソール窓のフォント設定は自分のミスでした
コンソール窓で右クリして「設定」からフォントを設定していたのですが、
直ぐ上に「フォント」というのがありました… 見逃してました

>>640
どもです
ツールバーはしょうがないみたいですね

>>641-643
どもです
winの人がrubyを始めようと思うと、RDEがまず最初に目に入るような気がします
NetBeansはDLしてあったのですが、JAVAが云々…とまたやることが増えそうなので
後回しになってました
とりあえず簡単なプログラムを書いて試したかったので、RDEをという感じで
日常はEmEditorのフリー版(かなり古い)を使っていたので、それでやればよかったのですが
コマンド操作には不慣れなwin人なんで、お手軽(そう)なRDEから初めてみようと思い

初心者〜中級者?への道筋がすっぽり抜けてる感じがしていて先行き不安ですが
書いて直ぐ実行できるのはやっぱり楽しいし勉強になります
0645デフォルトの名無しさん2008/10/21(火) 18:04:59
RDEはirbと似たような感じでSandBoxとしてしか使わないなぁ。
ファイルに保存はしなきゃならんけど、EmEditorも言語モード別のキー設定と、
外部プログラムのを実行して標準出力を下窓に出す機能が(少なくともVer6からには)
備わってるから、キー1発で実行はできるよ。
0646デフォルトの名無しさん2008/10/21(火) 18:48:59
RDEはいろいろなところで紹介されてるから、知名度はかなり高いし
動作はけっこう軽くて多機能、日本語対応と利点は多い
が、不安定さ(特に文字コード関連)とレジストリ使用がそれらの魅力を帳消しにしている
0647デフォルトの名無しさん2008/10/21(火) 19:42:48
RDEを普段使ってない人がファーストインプレッションあるいは又聞きで薦めてんじゃないかと思ってる
普段から使っていれば、少なくとも初心者には勧めようとは思えないはずだ

単一言語用だからといってIDE作成が簡単になるわけではない
1種類の言語にしか対応しなくても、10種類の言語に対応してても、IDEとしての作り方は同じだと思う
Rubyに特化すればIDEが俺でも作れそうとか最初に思った人は罪深いなと思ってみる
0648デフォルトの名無しさん2008/10/21(火) 19:58:42
FreeRIDEが日本語や他の文字コードに対応してくれれば無敵なんだが
0649デフォルトの名無しさん2008/10/21(火) 22:52:51
rubyの表記法の質問なのですが、
Test::Sample
のように書かれていたら、TestとSampleはともにクラスでTestがSampleの親クラス
という認識で合ってますか?
::という記号は定数やクラス変数なども表すとネットで見たのですが
区別は付くのでしょうか?
0650デフォルトの名無しさん2008/10/21(火) 23:13:36
:: は 「の」 だ
Test::Sample は Test 「の」 Sample だ
それ以上の意味はないよ
クラスかどうかは普通に識別子で判断する
先頭が大文字なら定数かクラス
先頭が小文字かアンダースコアならメソッド
ただ、あからさまに面倒なのでメソッドを :: で繋ぐことはRubyでは意図的にしない
(他の言語での書き方をしないと死ぬ人が稀に使う)
06516492008/10/22(水) 00:09:42
>>650
ありがとうございます。
そんな曖昧なものだったんですね。メソッドは#でしたっけ?
この業界っていやに自己主張強い人が多いから統一できないのかな
0652デフォルトの名無しさん2008/10/22(水) 07:50:20
RDEってRubyのサンプルプログラムとして付いているもんだと思ってた・・・
0653デフォルトの名無しさん2008/10/22(水) 09:30:08
>>651
スクリプト上での表記とマニュアルでの表記は違う

…違ってちゃいけないと思うんだが、まあ、
「○○クラスのインスタンスメソッド××を…」と書く代わりに「○○#××を…」と
「○○クラスのクラスメソッド××を…」と書く代わりに「○○.××を…」と
「○○クラスの定数××を…」と書く代わりに「○○::××を…」と書けたほうが
一度理解してしまえば便利ではある
0654デフォルトの名無しさん2008/10/22(水) 18:04:18
>>653
> スクリプト上での表記とマニュアルでの表記は違う
>
> …違ってちゃいけないと思うんだが、まあ、

とはいえ、あるクラスのインスタンスメソッドというのは、直接コード上には
現れないから、そもそも同じ表記にはしようがない。
いちいち X.new.m とか書くのもめんどくさいだろ。
0655デフォルトの名無しさん2008/10/22(水) 20:22:05
>>650
Test::Sample だったら普通はmoduleかclassがネストされてるやつじゃね?
0656デフォルトの名無しさん2008/10/23(木) 09:59:06
>649
::で示されるのは主に
・モジュール内クラス
・クラス内クラス
・モジュール内モジュール
・クラス内モジュール
・モジュールの持つ定数
・クラスの持つ定数
などであって、クラス間の親子関係ではない。
どちらかと言えば所有、もしくは所属の関係。
0657デフォルトの名無しさん2008/10/23(木) 17:43:37
Windowsなら、既に更新停止状態だがJmEditorでぜんぜんいける。
コマンドライン登録しとけば、キー一発で実行できるし、プロンプト
勝手に閉じてほしくないなら、ruby.exe実行してからpauseするバッチ
ファイル登録すればいい。
0658デフォルトの名無しさん2008/10/23(木) 18:56:51
まさかJmEditor使いが俺の他にもいたとは
動作軽いしUSBで運べるし、便利だよね
0659デフォルトの名無しさん2008/10/23(木) 22:50:55
irb とかでいっつも忘れるんだけど、NKF.guess の返り値の数字と文字エンコード名の関係ってどっかに書いてないかな?
0660デフォルトの名無しさん2008/10/23(木) 22:57:18
NKF.constants.map{|s|[NKF.const_get(s),s]}
こんな感じで出せばいいんじゃないか?
0661デフォルトの名無しさん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 と同じものです。


下記参照て言われても、下記がない・・・
0662デフォルトの名無しさん2008/10/24(金) 08:30:26
.chmもちあるけば解決するお
0663デフォルトの名無しさん2008/10/24(金) 09:07:06
>>659
あれは inspect で文字列が出るべきだと思う
0664デフォルトの名無しさん2008/10/24(金) 09:07:51
>>662
書いてねえって
0665デフォルトの名無しさん2008/10/24(金) 10:01:53
>>664
キーワード:NKF.guess(str) (nkf)
でとんだページの下に定数が書いてあるけど・・・
0666デフォルトの名無しさん2008/10/24(金) 11:02:43
> NKF.guess の返り値の数字と文字エンコード名の関係
0667デフォルトの名無しさん2008/10/24(金) 23:52:29
ああ、そりゃソース嫁としかw
0668デフォルトの名無しさん2008/10/25(土) 13:34:31
>>656
じゃあクラスの継承はどうやって表すの?
0669デフォルトの名無しさん2008/10/25(土) 13:55:39
「表しようがない」が正解かと
「XXXを継承したYYY」のように文章で書くしかないな
0670デフォルトの名無しさん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
↓に続く
0671デフォルトの名無しさん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"などもググって見ましたがダメでした。
よろしくお願いします。
0672デフォルトの名無しさん2008/10/26(日) 11:07:36
>>670-671
Excel.Application ペースト でググるんだ
Win32OLEの情報を探すときはRubyに限定しないほうが良い
俺excel持ってないから動作検証できないけどごめんね
0673デフォルトの名無しさん2008/10/26(日) 12:43:20
関係ないけど gemで入れられる excel用のライブラリ見つけたぜ
spreadsheet-0.6.1.5 Documentation
http://spreadsheet.rubyforge.org/
0674670-6712008/10/26(日) 17:37:00
>>672-673
ありがとうございます。解決しました。

原因は貼り付ける際に列で指定していたからダメだったようで、
貼り付ける先頭セルの値をRangeで受け渡したらうまく行きました。
また上のプログラムだとちゃんと保存できないのも注意です。
開き方の問題なのか読み取り専用になっているようです。
名前を付けて保存するようにしたらちゃんと保存されました。
0675デフォルトの名無しさん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
0676デフォルトの名無しさん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

06776762008/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
06786762008/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
0679デフォルトの名無しさん2008/10/26(日) 19:44:37
>>675
いきなり自作CGIをレンタルサーバーで動かすとか正気の沙汰ではないぞ
httpdのエラーログをみよう。
いやその前に、まずは、WindowsならばXAMPPでも入れてローカル環境で試そう、な
0680デフォルトの名無しさん2008/10/26(日) 19:54:27
>>679
一応ローカルで実験はした。
方法
1.irbを起動する
2.環境変数を設定
3.systemコマンドで実行
結果
とりあえず動いた

だからアップロードしたわけだが。
0681デフォルトの名無しさん2008/10/26(日) 19:58:41
結論:

 ・ 馬鹿にCGIを渡すな

0682デフォルトの名無しさん2008/10/26(日) 20:02:38
>>681
一応Apacheをインストール中
ところで、WindowsのApacheでCGIを動かすとき#!の行はどうすればいい?
0683デフォルトの名無しさん2008/10/26(日) 20:10:51
家の環境では、ruby.exeをapacheと同じドライブの例えばc:\usr\local\bin\ に放り込んでおけば動いた
0684デフォルトの名無しさん2008/10/26(日) 20:12:44
パスは通しておいてね
0685デフォルトの名無しさん2008/10/26(日) 20:12:47
>>682
パス通して#!rubyでいいんじゃね
0686デフォルトの名無しさん2008/10/26(日) 20:13:15
> パスは通しておいてね
Ruby本体をインスコしたディレクトリにパスは通しておいてね
06876752008/10/26(日) 20:20:11
実験は成功した。普通に動いた。
今度は書き込みを実行したとき何も出力されないバグが出てきたが
0688デフォルトの名無しさん2008/10/26(日) 20:34:55
cgi-exception入れとけ
ttp://cgi-exception.rubyforge.org/
0689デフォルトの名無しさん2008/10/26(日) 21:02:28
>>688
ローカルでは動く。リモートでは動かない
cgi-exceptionをrequireしても(もちろんそのファイルごとアップロード済み)
まったくダメ。
0690デフォルトの名無しさん2008/10/26(日) 21:07:27
この分だと向こうで拡張ライブラリの一部が欠損しているというオチの可能性が
高そう。標準添付のライブラリ(cgi,nkf)しか使ってないのに…
0691デフォルトの名無しさん2008/10/26(日) 21:24:01
CGI.unescape(cgi.params['うんこ']) を CGI.unescape(cgi.params['うんこ'][0]) にするとかさ、
NKF,nkf(略) を NKF.nkf(略) にするとかさ、
変数名やGET/POSTパラメタの名前に誤りがないかよく見るとかさ。
0692デフォルトの名無しさん2008/10/26(日) 21:26:19
環境を疑うよりは、まず自分のスクリプトを徹底的に疑うべき
CGI-Exceptionでエラーが出ないなら次はprintfデバッグだ
スクリプト中の適当な位置で、テキストファイルにログを書き出していけば
たいていエラー箇所を特定できる
(スクリプトが全く実行されない場合は、syntax errorかrubyパス絡みの可能性が高い)
06936922008/10/26(日) 21:37:21
あ、重要なこと書き忘れてた

初心者は(初心者じゃなくても一緒だけど)まず最小限のCGIスクリプトから書き始めろ
小さなスクリプトが動いてから、徐々に機能追加していかないと
ただでさえ特定しづらいCGIのエラーが、余計に特定しづらくなる

少なくとも、そこそこの長さがあって環境変数が関わるような掲示板スクリプトを
一気に書き上げるべきではない
0694デフォルトの名無しさん2008/10/26(日) 21:55:34
>>691
それにはすでに気づいて直した。直したが治らない。
>>692
syntax errorがらみはありえない(-cオプションで検査済み)
パスもチェック済み(/usr/local/bin/ruby)
>>693
一応ローカルで動作確認済みなので
0695デフォルトの名無しさん2008/10/26(日) 21:59:42
これはRubyの問題ではない(まだ)

>>694
だからその方法が間違ってると指摘されてるだろう
CGIは「ブラウザでInternalServerErrorが出なくなるまで書き直す」という手法で開発してはいけない
エラーメッセージを確認しない開発手法は糞だ
0696デフォルトの名無しさん2008/10/26(日) 22:02:14
> 一応ローカルで動作確認済みなので
最小限のCGIスクリプトをサーバー上で動かさないとダメ
「環境変数自分で入れて、systemで実行して動いたから」というのではあまり意味がない
0697デフォルトの名無しさん2008/10/26(日) 22:03:11
結論:

 ・ 馬鹿にCGIを渡すな

0698デフォルトの名無しさん2008/10/26(日) 22:04:18
>>695
とりあえずちょいと方法が思い浮かんだので実験してみる

1.まずは単なるテストスクリプトが動くか確かめる
それすら動かないようならとりあえずこの環境での動作はあきらめたほうがよい
2.次にちょっとした工夫のなされたテストスクリプトを使って実験を行う
3.最後にその結果を見て検証する
0699デフォルトの名無しさん2008/10/26(日) 22:04:55
RubyでWin32弄くる場合に必要な知識はRubyそのものではないのと同様に
RubyでCGIやる場合に必要な知識はRubyそのものではないのだな

ライブラリで吸収隠蔽すべきかどうかというのは悩ましいとこだと思う
0700デフォルトの名無しさん2008/10/26(日) 22:05:14
>>696
Apacheでも動作確認済み
1時間以上前に実験した。
0701デフォルトの名無しさん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からまた弄ってるのか?
0702デフォルトの名無しさん2008/10/26(日) 22:09:26
>>700
どう動作確認したのかkwsk
俺の環境でApache立ち上げて試してみたが、普通にアクセスしただけでエラーが出る
具体的には>>701
0703デフォルトの名無しさん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>"

このスクリプトすら動作してないのでもはやお手上げ
0704デフォルトの名無しさん2008/10/26(日) 22:10:02
>>699
だねえ

>>700
小出しにするな
自分で話をまとめられないなら諦めれ
0705デフォルトの名無しさん2008/10/26(日) 22:11:17
> 小出しにするな
> 自分で話をまとめられないなら諦めれ

に一票
そして離脱
0706デフォルトの名無しさん2008/10/26(日) 22:17:59
>最小限のCGIスクリプトbTーバー上で涛ョかさないとダャ

bノ対して

>Apacheでも動作確認済み
>1時間以上前に実験した。
って…明らかに話噛み合ってないな
0707デフォルトの名無しさん2008/10/26(日) 22:19:34
>>703
自分でApache立ち上げて試すときは、そのパスじゃまず起動しないぞ
#!ruby -Ks
にして試してみ。それでも駄目ならお手上げ
07086752008/10/26(日) 22:21:49
>>706
まったくかみ合わない上に、どうやらこちらの問題ではなさそうだと
判明したのでたぶんこれ以上話し合っても結論が出る可能性は0(正確には)

ただ、根本的バグが見つかったのは皆さんのおかげです。
皆さん、ご協力どうもありがとうございました。
0709デフォルトの名無しさん2008/10/26(日) 22:24:45
>>707
もちろんローカルでやるときはそのためのパスにするわけですけどね。
0710デフォルトの名無しさん2008/10/26(日) 22:31:12
>>707
Rubyの絶対パスを指定して動いてるので、いえるのは
もはやここでは対処しようのない問題だということです。
とりあえずテストスクリプトすら動かないということは
他のところに持っていったのでこれ以上の深入りは
避けたいと思います。
0711デフォルトの名無しさん2008/10/26(日) 22:32:04
>>703
ステータスコード書いてないから動かなくて当然
あと\n\nだとサーバが非winのとき困るんじゃないか?
0712デフォルトの名無しさん2008/10/26(日) 22:33:31
てゆーかbbs.cgi自体も割りと…たぶん2、3個の虫食いじゃないよな、
斜め読みした感じでも
0713デフォルトの名無しさん2008/10/26(日) 23:01:23
パーミッションの設定してませんでした><
07147072008/10/26(日) 23:10:02
>>711
あ、そうか
NPH環境だとステータスコード無しでは動かないのか…
0715デフォルトの名無しさん2008/10/26(日) 23:38:16
超遅レスだけど
>>656 >>668 >>669
ここら辺の話って本当なんですか?
Rubyのライブラリのレファレンスでクラスの説明とか見るとよく::が使われてるけど
あれは本当は間違いなんですか?
0716デフォルトの名無しさん2008/10/26(日) 23:48:43
>>656以外の使い方してるやつなんてあんのか
具体的になんてライブラリのリファレンスのどの部分よ
0717デフォルトの名無しさん2008/10/27(月) 00:17:15
>>676
「vlookupのようなもの」ってのが、一体どんなのか分からんのだが
vpreとvpstではさんで比較してるってことは、ソート済みだと仮定してもいいの?
良いなら二分探索が使える

コードについて
・Range#eachがあるんだからeachを使う。Rubyでforは(めったに)使わない
・不要なbreakが見られる
・異常入力に対して99.9とかを返すのは、これでいいの?
0718デフォルトの名無しさん2008/10/27(月) 01:26:18
>715
マニュアル内でのその記述はクラスの親子関係じゃなくて、大抵モジュールの定数のハズ。
0719デフォルトの名無しさん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
0720デフォルトの名無しさん2008/10/27(月) 01:34:23
言うなれば :: でクラス同士を繋いでいたら、それは親子じゃなくて入れ子の関係ってところか。
0721デフォルトの名無しさん2008/10/27(月) 01:47:29
Railsの質問はここでいいんでしょうっか?
Web画面を共有出来るアプリが作りたいので
実験で5分で動くshootingstar使ったchatのテストアプリみたいなのを
動かしたんですけど自分でブラウザを更新しないと表示画面が更新されません。
バージョンは、shooting_star (3.2.7)とrailsは2.1.2でOSはUbuntuなんですけど。。
0722デフォルトの名無しさん2008/10/27(月) 02:10:00
WebProg板にRailsスレあるよ

【Ruby】Ruby on Rails Part6
http://pc11.2ch.net/test/read.cgi/php/1224838013/
0723デフォルトの名無しさん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関数にした方がまだ使いやすくない?
0724デフォルトの名無しさん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の言うとおり、二分検索するのがいいんでない。
適当にコード見て書いただけなんで、バグとか指摘の間違いとかあるやも。
0725デフォルトの名無しさん2008/10/27(月) 05:51:25
>>711
ほぼ参考書のままです。
とりあえずステータスコードをつけて動くか確かめてみます
0726デフォルトの名無しさん2008/10/27(月) 05:59:36
結局Content-typeの改行コードを\r\nにしたら動きました
0727デフォルトの名無しさん2008/10/27(月) 06:22:47
>>726
それは誤りだ
0728デフォルトの名無しさん2008/10/27(月) 07:26:44
>>727
一応めでたく完成して新しい追加機能2つ(日付表示・連投規制)を
付け加えました。たぶんこれで実運用上、書き込みがぶつからなければ
なんとかなると思います。タグ検索機能はなんか変ですが
おいおい何とかします。
0729デフォルトの名無しさん2008/10/27(月) 08:20:38
>>727
誤りではないだろう、HTTPの標準改行コードは\r\nだ
出力先がバイナリモードでさえあれば問題はない
0730デフォルトの名無しさん2008/10/27(月) 21:40:37
>>716 >>718 >>719
Java出身のruby初心者だったものでクラスライブラリはクラスの継承で繋がってると思い込んでました。
なるほど、rubyはモジュールや入れ子のクラスを多用するんですね。
勉強になりました。ありがとうございました。
0731デフォルトの名無しさん2008/10/27(月) 22:15:18
Javaだってよく使うだろう。
0732デフォルトの名無しさん2008/10/27(月) 22:25:44
RubyやPerlって一体なにに使う言語なんですか?

Htmlに組み込む言語という解釈でいいんですか?
0733デフォルトの名無しさん2008/10/27(月) 22:41:28
>>732
だいたい何にでも使う
0734デフォルトの名無しさん2008/10/27(月) 23:02:23
テキスト処理をするのに使う

テキスト処理と聞いて何も思いつかない場合はまだスクリプト言語に用がないということなので
PerlやRubyのことはすっぱり忘れて別なことを楽しみましょう
0735デフォルトの名無しさん2008/10/28(火) 00:49:43
rubyはrailsのために使います。
フリーだと現時点で一番効率よく稼げるのrailsです。
3人月の案件で700は固いから月給200万ですよ。
0736デフォルトの名無しさん2008/10/28(火) 17:05:00
日本語でおk
0737デフォルトの名無しさん2008/10/28(火) 19:13:55
>>732
>Htmlに組み込む言語

それはPHP
0738デフォルトの名無しさん2008/10/28(火) 20:26:14
>>737
HTMLがPHPになるんですか?
PHPがHTMLになるんですか?
組み込むってそういうことですよね?
0739デフォルトの名無しさん2008/10/28(火) 20:54:46
画面分割はどうやればいいんですか?
自動的に隠したり、分割を×ボタンで消したりする機能のパックになったコントロールとかあるんですか?
0740デフォルトの名無しさん2008/10/28(火) 20:57:37
>>739
Webクライアントの仕組みについて理解してから来なさい。
0741デフォルトの名無しさん2008/10/28(火) 20:58:32
>>739
えーと…
Rubyの仕事ではないので、GUIに何を使ってるか調べて、それに関するスレなりサイトなりに行くといい
0742デフォルトの名無しさん2008/10/28(火) 21:18:58
�@蠣←これを右クリでコピーする
�Aスタート→すべてのプログラム→アクセサリ→メモ帳を起動
�B編集→貼り付け
�C編集→すべて選択
�D変換キーを押す
07436762008/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で十分なのでこうしました。
07446762008/10/28(火) 23:45:30
>>723
>1.
書き忘れていましたが、ご指摘のとおりソート済みを仮定しています。

>2.
ちょうどそのエラーに出くわしていたところでした。。。

>3.
事前に一応調べてはみたのですが、ちゃんと理解できていなかったです。
また数学がよくわかっていないため、2の事態が発生しました。

>4.
MATCH関数を知らなかったので調べてみましたが、どのように適用すればよいかわかりませんでした。もう少し詳しく教えていただけないでしょうか。

>>724
知らない事がありすぎるのですが、みやすくなったので使ってみたいと思います。
速くなるのも教えていただけると助かります。。。
0745デフォルトの名無しさん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なんてあまりに不便すぎる。
0746デフォルトの名無しさん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
0747デフォルトの名無しさん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) # 二分検索(ループ)
0748デフォルトの名無しさん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
0749デフォルトの名無しさん2008/10/29(水) 07:00:09
全角空白厨は何を言っても説得力がない
0750デフォルトの名無しさん2008/10/29(水) 09:42:12
そこが気になるというのは、もしやコードをテストしてみようとしたわけか?
朝早くから実に殊勝な心がけだ。 大変すばらしい。

それだけ向上心があるなら、更なる技術向上のための課題として、全角半角の
変換フィルタでもチャレンジしていただきたい。 (もちろんワンライナーな)
0751デフォルトの名無しさん2008/10/29(水) 10:08:41
>>750
コードは全く読んでない
全角空白かどうかだけをブラウザ上でチェックした
それで充分
0752デフォルトの名無しさん2008/10/29(水) 10:21:12
>>749,751
俺もコード張るときはwebブラウザとかJaneのこと考えて
全角に変換してから張るんだけど何かまずいの?
0753デフォルトの名無しさん2008/10/29(水) 10:21:57
書き込む際に見やすいように、という理由でいわゆる全角スペースを使うのは
割とよくあることだと思うんだが、それをどういう切り口で転がすと「厨」になるんだろ。
それこそ「説得力が無い」よ。
0754デフォルトの名無しさん2008/10/29(水) 10:26:48
全角空白なんて危険なもの使わなくたって &nbsp; があるだろう
初心者がコピペで実行する初心者スレで全角空白みたいなのをコードに混ぜるのはあまりいい気はしない

arr.each do |e|
  puts e
end
07557522008/10/29(水) 10:31:22
>>754
ああなるほどな、サンクス
0756デフォルトの名無しさん2008/10/29(水) 10:34:41
>>754
本人?

よりよい方法がある、という話ならわかるけど、そんなことで厨呼ばわりした上で、
コードなんか見なくても十分とか言ってのけたわけ?
「あまりいい気はしない」とか、なんか急にトーン下がってるけど。
0757デフォルトの名無しさん2008/10/29(水) 10:40:23
>>756
いや全然

検証のために irb にコピペして全角空白でエラーになってピキッとなったことはないか?
せっかく書き込み前に置換する手間を割いてるのに置換先が全角空白だというのはバカっぽいだろ
なんでわざわざ実行不可能なコードにさせるんだよ
0758デフォルトの名無しさん2008/10/29(水) 10:46:17
他人が実行するかもしれないことに気が回らない俺スゴイ系の人は
2chでは厨呼ばわりされても仕方ないかな、という気はちょっとだけする
0759デフォルトの名無しさん2008/10/29(水) 11:01:39
だが、ム板では普通に見かけるけどな。
インデントを全角空白で、ってのは。
0760デフォルトの名無しさん2008/10/29(水) 11:24:51
ソース見れば普通に半角空白残ってるんだお
0761デフォルトの名無しさん2008/10/29(水) 11:35:27
置換の手間は割けなくても長文粘着はありなんだよねこういう人ってw
0762デフォルトの名無しさん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
0763デフォルトの名無しさん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

と行番号つきで書かれるくらいムカつく
0764デフォルトの名無しさん2008/10/29(水) 12:05:00
Jane Doe Styleで >>754 をコピーすると
半角スペースの箇所はクリップボードには &#160 (&#は半角)で保存されるぞ

アプリケーション( 2ch 含む)によって文字参照の扱いなんてまちまちなんだから
文字参照に変換してから貼れって主張にはあまり魅力を感じないんだよな
0765デフォルトの名無しさん2008/10/29(水) 12:09:49
コピペ内容に関して意識してる2chブラウザはそう多くないよね
どうレンダリングするかとかはRFCに記述ないんだっけ?
0766デフォルトの名無しさん2008/10/29(水) 13:14:44
なにやらえらい騒ぎになってしまったな。

全角半角が問題になるのはコピペする人間だけなのだが、実際それをする人間がどれ
ほどいるのか。
他の板ならともかく、いかに初心者スレとはいえここはム板なんだから、一括置換な
んぞ5秒でこなす
くらいの能力は期待できないものなのか。
学校のセンセじゃあるまいし、その程度は勘弁していただきたい。

まぁ、全角を使っているのは書き込みログが読みにくくなるから、というしょーもな
い理由なので、
こちらも置換すれば済む話ではあるし、専ブラで対処できるものなら導入を検討する
よ。

と、ここで新着見たら、そんな簡単な話しでもないのか。
確かに>>764は以前くらったことがあるな。
どうしたもんかね。
0767デフォルトの名無しさん2008/10/29(水) 13:17:44
ノンブレイカブルスペースは \x20 とは別物。常識
0768デフォルトの名無しさん2008/10/29(水) 16:32:30
おれも &nbsp; つかってたけど、>>764と同じことがあって、
結局全角スペースのほうが害がすくないと判断してる。

>>767
そうなんだよね。しかも&nbsp;が半角スペースにならない環境だと、
置換が全角スペースより面倒なんだよな。

まあ2chの仕様がクソということで。
0769デフォルトの名無しさん2008/10/29(水) 16:33:42
>>762
CSVやめて、FasterCSVを使ってみたらどうでしょうか。
「ruby fastercsv」でぐぐってみてください。
0770デフォルトの名無しさん2008/10/29(水) 17:08:50
>>769
実は先ほどソースはredmineのものなんです
ファイル名app\helpers\issues_helper.rb
なので簡単にFasterCSVに置き換えて大丈夫なものなのか判断しにくいんです。
変更は簡単ですかね?
0771デフォルトの名無しさん2008/10/29(水) 22:43:51
>>762
CSV::Writer ならエスケープが必要なフィールドだけエスケープされるので、
以下のようになるはずだけど。

AAA,BBB,CCC,"DD
D"

DD\nDだけじゃなくてAAAとかもクォートして欲しいってこと?
0772デフォルトの名無しさん2008/10/30(木) 13:30:47
>749-768
先頭の空白に関しては、まだRubyは良いほうでしょ
Pythonなんて先頭の空白が纏められたら話にならんかと
0773デフォルトの名無しさん2008/10/30(木) 16:17:11
while文の中にif文入れられる?
0774デフォルトの名無しさん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
0775デフォルトの名無しさん2008/10/30(木) 18:36:04
msg = "(1+2+3)*2/3" などのように数式の入った変数を
プログラムの構文として処理することは可能でしょうか?
  val = 構文評価(msg)
のようなイメージで、
任意の数式をRubyで処理することを期待してるのですが
0776デフォルトの名無しさん2008/10/30(木) 18:53:18
>>775
手っ取り早いのはeval。
でも数式に限らずなんでも実行できてしまうから
四則演算だけ処理したいならraccとそのサンプルのcalc.yあたりとか。
07777752008/10/30(木) 19:31:22
>>776
ありがとうございます。助かりました。
0778デフォルトの名無しさん2008/10/30(木) 22:51:35
>>776
> 四則演算だけ処理したいならraccとそのサンプルのcalc.yあたりとか。

正規表現で入力を検査してokならevalに渡す方が楽でない?
0779デフォルトの名無しさん2008/10/30(木) 22:58:30
そのへんは入力元がどのくらい信用できてどのくらい調教可能かによるな
0780デフォルトの名無しさん2008/10/30(木) 23:07:18
信用できないから検査する。
何によるかというならどれくらい受理する式の文法を限定できるかだろう。
君、バカでしょ。
0781デフォルトの名無しさん2008/10/30(木) 23:18:40
検査が必要かどうかという話だろ
自分で電卓代わりに使いたいだけなら入力検査は不要

こんなの完璧にやるか全くやらないかの2択なんだから信用度は重要
2//3 で エラー吐いて落ちるのは困るだろうし
1 2 + 3 で エラー吐いて落ちるのは困るだろうし
1/3*3 で 0 が返るのも困るだろうし
(1..2) で Range オブジェクトが返るのも困るだろう
0782デフォルトの名無しさん2008/10/31(金) 00:02:44
>>781
君はバカさ加減の露出癖でもあるのかね。

> こんなの完璧にやるか全くやらないかの2択なんだから信用度は重要

不測の動作をさせないことが保証できればいいんだよ。
エラーはevalのすぐ外で捕捉すりゃいい話。

> (1..2) で Range オブジェクトが返るのも困るだろう

そうならないように検査するんだろうが。
0783デフォルトの名無しさん2008/10/31(金) 00:03:55
じゃあraccでやれよ
0784デフォルトの名無しさん2008/10/31(金) 00:06:22
は?
07856762008/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秒かからなくなるんですね。
ただ、勉強不足でわからないことだらけです。
ループ版を自分で作るには時間がかかるので少し待って下さい。
完成したら添削をお願いします。
0786デフォルトの名無しさん2008/10/31(金) 02:28:31
http://qb5.2ch.net/test/read.cgi/operate/1206636885/657
駄目元で書き込んだ。
賛同してくれる人はこのレスに同意のアンカーをつけてくれ。
0787デフォルトの名無しさん2008/10/31(金) 04:54:23
>>785
コードの端々で妙な書き方してるから、他言語でヘンな癖でもつけて
きたのかと思ってたら、もしかしてプログラミング初心者だった?
Excel VBA使いを想定してたんだが、Excelもサッパリのようだし…
INDEXやOFFSET等、全部大文字で書いたのはExcelの関数。
これらについてはスレ違いなので他でよろしく。


まぁ、とりあえずは基本的な文法・制御構造をまず覚えてくれ。
最低限、分岐・ループ・メソッド呼び出しとそこからの脱出あたり。
勧めといてなんだけど例外は後回しでいいかな。
一度苦労した後の方が有り難みもよく分かるだろうし。

次に組み込みクラスについて調べてみる。
上で使ってるのは、数値(Numeric), 文字列(String), 範囲(Range)
あたりを見れば分かる程度の簡単な使い方してる。
重要なのは配列(Array)とEnumerableの2つ。
制御構造と並んで、こいつらがアルゴリズムを実装する要だ。
(今回は使わなかったが、Hashもいずれ知っておくべき)

クラスライブラリを全部覚えるのは大変だろうけど、どんなことが
できるかくらいはざっと目を通しておくといい。

そうしたらコードを読んでみる。
どれもかなり短いから、読み下すのはそう難しくないとおもう。
行数短縮のために三項演算子を濫用している点は申し訳ない。
0788デフォルトの名無しさん2008/10/31(金) 04:58:30
コードを読んだだけでは内容を理解するのは難しいだろうから、
短い配列でどのような動きになるか、紙に書いてみるといい。
再帰をループに変更するにはアルゴリズムを十分に理解して
いなければならないが、是非がんばって挑戦してほしい。

ケチな高速化など後回しと書いた理由も実感して貰えたと思うが、
もし興味を持ったなら、アルゴリズムも勉強してみてはどうか。
ほんのちょっとの仕組みの違いで速度が千倍とかざらにあるよ。
計算量の考え方だけでも知っておくことをお勧めする。
0789デフォルトの名無しさん2008/10/31(金) 07:54:59
VB系はreturnに直接相当する命令がないからな。
戻り値と、プロシージャを抜ける構文が別になってるから。
で、そのまま直訳してreturnとbreakに分けた、と。そんな感じだろう。
0790デフォルトの名無しさん2008/10/31(金) 10:38:32
ひとこといわせてくれ。
>>787-788、おつ。こんごもがんがれ。
0791デフォルトの名無しさん2008/10/31(金) 17:14:09
あるクラスAが別のクラスBのサブクラスかどうかを判定するメソッドってありませんでしたっけ?
今は
A.ancestors.include?(B)
とやってるんですけど、かっこわるいですよね。
0792デフォルトの名無しさん2008/10/31(金) 17:21:41
どうして?それでよいのでは?
0793デフォルトの名無しさん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
0794デフォルトの名無しさん2008/10/31(金) 17:51:24
>>793

>> File < IO
=> true
>> Dir < IO
=> nil

なにこれーーー

>> Fixnum < Integer
=> true
>> Array < Enumerable
=> true

module もOKだ

ちょうさんくすです

0795デフォルトの名無しさん2008/10/31(金) 18:44:55
まさかModule/Class同士の比較ができるとは・・・知らなかった
0796デフォルトの名無しさん2008/10/31(金) 21:10:08
>>795
伊達に継承の記号が "<" なわけじゃない。
……かどうかは知らないが。
0797デフォルトの名無しさん2008/11/01(土) 06:26:05
VIPから来ますた
0798デフォルトの名無しさん2008/11/01(土) 06:26:45
VIPから来ますた
0799デフォルトの名無しさん2008/11/01(土) 06:28:45





∧_∧
( ´・ω・) みなさん、VIPからさし入れのお茶が入りましたよ・・・・。
( つ旦O
と_)_) 旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦
0800デフォルトの名無しさん2008/11/01(土) 06:44:02
VIPから来ますた
08017282008/11/01(土) 08:48:50
検索機能がついに完成しました。
一応私の夢見た掲示板をついに作り終えました。
とはいえまだ課題がいくつか残ってます。
それを今後つぶしていきます。
0802デフォルトの名無しさん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)
0803デフォルトの名無しさん2008/11/01(土) 12:21:28
URIはHTTP専用ってわけじゃないので、ちゃんとプロトコルから書く。
あとNet::HTTPはわりと残念な設計で、サブクラスでinitializeをオーバーライドしても呼ばれない。
委譲したほうがいいかも
0804デフォルトの名無しさん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
0805デフォルトの名無しさん2008/11/02(日) 08:33:41
そこでhttpclientですね
0806デフォルトの名無しさん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)
0807デフォルトの名無しさん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)
08088062008/11/03(月) 00:21:05
おおお!!thx>>807
なんで、A付けちゃったんだろ?
これを色々いじって、マニュアル見ながらよく考えてみる。
も一回ありがとう!>>807
0809デフォルトの名無しさん2008/11/03(月) 17:14:38
ディレクトリの中にあるすべてのファイル名を変えるプログラムを作ろうとしたのですが
5分で挫折しました(笑)

File.open("D:\\Data") {|f|
puts f.to_str()
}

とりあえずこうやってファイル名を出力しようとしたのですが、
コマンドプロンプトではすべてUNICODEのファイル名で表示されてしまい
わけわかめです。
$SCODE = SJISとかやってもダメでした
0810デフォルトの名無しさん2008/11/03(月) 17:28:30
それファイル名じゃなくdataというファイルの中身を読んでいるように思えるが

`dir d:\\data /b`.each { |f| f.chop!
  puts f
}
0811デフォルトの名無しさん2008/11/03(月) 17:39:07
その場合メソッドパラメタの名前は line とかのほうがいいぞ
0812デフォルトの名無しさん2008/11/03(月) 17:42:01
メソッドパラメタ → ブロックパラメタ
0813デフォルトの名無しさん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"]
0814デフォルトの名無しさん2008/11/03(月) 18:15:13
>>813
今のrubyは\も扱ってくれるよ

と思ってたが、Dir.globは\区切りに対応してないのね……
0815デフォルトの名無しさん2008/11/03(月) 20:31:28
下のディレクトリの中も再帰的にやるんじゃなかったら
Dir.entries(ディレクトリのパス).reject{|d| File.directory? }
とか。
0816デフォルトの名無しさん2008/11/04(火) 00:14:51
rubyでファイルの種類の判断ってできますか?
拡張子で判断するのではなくファイルの中身で、Excelファイルかどうかの判断が
したいんです。
よろしくおねがいします。
0817デフォルトの名無しさん2008/11/04(火) 01:34:00
できますよ
0818デフォルトの名無しさん2008/11/04(火) 03:33:29
>>816
がんばってマジックナンバー嫁
0819デフォルトの名無しさん2008/11/04(火) 08:17:09
>>816
unix系ならFileMagicだけどwindowsはよう知らん
0820デフォルトの名無しさん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}
0821デフォルトの名無しさん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

エクセルファイルを漏れなく判定できるのかはわかりませんが…
0822デフォルトの名無しさん2008/11/06(木) 11:05:21
require 'foobar'
としたあとで、'foobar.rb' の絶対パスを調べる方法ってありますか。
0823デフォルトの名無しさん2008/11/06(木) 15:13:55
File.expand_path($LOAD_PATH.map{|d| File.join(d, 'foobar.rb') }.find{|path| File.exist?(path) })
0824デフォルトの名無しさん2008/11/06(木) 15:19:42
>>823
それは読み込んだファイルであることを保証しない
0825デフォルトの名無しさん2008/11/06(木) 15:27:19
読み込んだファイルそのものを指定することは1.8ではできないと思った
同名のファイルをファイルパスから探すことはできるけれど

>>823で問題になる場合というのはなくはないとは思うが非常にレアなような気もする
0826デフォルトの名無しさん2008/11/06(木) 15:32:16
foobar.rb で File.expand_path(__FILE__) を返すようなメソッドなりなんなりを用意しておくほうが確実なのかな
>>823の要件に合うとは思えないけど
0827デフォルトの名無しさん2008/11/06(木) 15:35:43
>>826
require を拡張したほうが妥当と思う

が、どうすればいいのやら
gem の require はどうやってるんだっけ
0828デフォルトの名無しさん2008/11/06(木) 15:43:39
foobar.rb で File.expand_path(__FILE__) を返すようなメソッドなりなんなりを
requireしたあとからくっつければ医院で内科医?
0829デフォルトの名無しさん2008/11/06(木) 16:20:11
>>828はのび太
0830デフォルトの名無しさん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
ありがとうございました。
0831デフォルトの名無しさん2008/11/06(木) 21:45:52
拡張子省いてrequireしたとき、.soだったのか.rbだったのかまで知りたくなったら、$LOADED_FEATURESとも突き合わせて比較する必要も出てくる。


0832デフォルトの名無しさん2008/11/07(金) 00:21:42
突然ごめん。
p array
した時の["hoge", "fuga", "boo"]みたいな書式って
変更できたりしない?
あと一歩でcsvなので便利に使えそうなんだが。
pのことをググって調べるのは非常にホネが折れる…
0833デフォルトの名無しさん2008/11/07(金) 00:28:03
inspect
0834デフォルトの名無しさん2008/11/07(金) 01:07:55
>>832
http://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html#p
なんでもぐぐって調べようとするから骨が折れてるんだろうw
0835デフォルトの名無しさん2008/11/07(金) 02:12:54
>>832
joinの方が楽
0836デフォルトの名無しさん2008/11/07(金) 03:23:57
>>832
>>835
その名も「csv」というライブラリが標準で付いてることを忘れないでやってくれ。
0837デフォルトの名無しさん2008/11/07(金) 09:49:56
>>832
一文字目と最後の文字消せばいいだけじゃね?
0838デフォルトの名無しさん2008/11/07(金) 12:18:53
なんでもかんでもググるって馬鹿がすることだよね。
賢い人なら知りたいことが見付かりそうな文書はどこにあるのかをまずは考える。
0839デフォルトの名無しさん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オープンしても例外を投げなくてうまくいかない
ようです。他のプラットフォームだとどうなんでしょう?
0840デフォルトの名無しさん2008/11/07(金) 21:16:58
File#flock() を使う方法しかしらない。

File.open("foobar.txt", "wb") do |f|
 f.flock(File::LOCK_EX) # 排他ロック
 f.unlock();
end
0841デフォルトの名無しさん2008/11/07(金) 21:22:21
なんか既視感がある

組み込みで妥当に動作してるロック機構を再発明しようとするな、というのがアドバイスだったはず
0842デフォルトの名無しさん2008/11/07(金) 21:24:54
>>840
まずそのサーバーでflockが使えないから無理
>>841
組み込みで現に存在してるのが使えないから問題。
確認したいこと
1.とりあえず方法があっているか。
2.Windowsだとまともに動かないようだが他のプラットフォームだとどうか。
0843デフォルトの名無しさん2008/11/07(金) 21:35:38
>>839
1.8.6-FreeBSDだけど File::CREAT|File::EXCL で Errno::EEXIST が出る
ただし>>839のソースをそのまま実行すると例外が rescue でとらえられて
例外処理でロックファイル削除されてからリトライするから、例外が発生してないように見える
あとrescueの下の二行間違ってるよ
0844デフォルトの名無しさん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
未来の時刻と比較してるようだがこれはいいのか?
0845デフォルトの名無しさん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秒以上前なら削除するように
できてますから。
0846デフォルトの名無しさん2008/11/07(金) 21:45:56
>>844
あ、やばい。そこがおかしい。
どう考えてもおかしい。
if(File.stat('lockfile').mtime+10<Time.new) then
こう直すべきだ
0847デフォルトの名無しさん2008/11/07(金) 21:55:09
>>844
どこでおかしかったか分からないが治った。thx
0848デフォルトの名無しさん2008/11/07(金) 21:57:23
>>842
> 組み込みで現に存在してるのが使えないから問題
0849デフォルトの名無しさん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)
0850デフォルトの名無しさん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
0851デフォルトの名無しさん2008/11/07(金) 22:24:21
それでもやっぱり最後のレースコンディションは解消してないのだが、
これ以上この方法にこだわる限り改善の余地はなさそう。
0852デフォルトの名無しさん2008/11/07(金) 22:42:44
>>842
>まずそのサーバーでflockが使えないから無理
File#flock() が使えない環境ってどんなの?
どこでも使えるもんだと思ってた。
0853デフォルトの名無しさん2008/11/07(金) 23:03:27
>>850
更新時刻から10秒待つのに、リトライは0.1秒×10回でいいのか、というのはおいといて、ゴミ掃除を別々のプロセスで確実にやるのは無理だと俺は判断してる。
ゴミ掃除専用のプロセスを1個だけ別に動かしとけ。メインの処理に10秒以上かかる可能性がないと言えるなら、それで大丈夫だろ。
0854デフォルトの名無しさん2008/11/07(金) 23:31:32
どうせ専用のプロセスを立ち上げるなら,
druby使ってmutexを共有するという強引な方法を思いついた
0855デフォルトの名無しさん2008/11/08(土) 00:22:16
普通にO_EXLOCKでシステムのアドバイザリロック機構に頼ればいいんじゃないのか?
下がnfsだったりするとアレだが。
0856デフォルトの名無しさん2008/11/08(土) 05:41:35
>>853-854
レンタルサーバーでCGIを動かすために使うというのが大前提なので。
プロセスの常駐とかまず無理。
10秒待つのではなく確実を期すために10秒以上前のロックファイルを
削除するといっている。待つ時間は1秒。
0857デフォルトの名無しさん2008/11/08(土) 05:43:07
flockメソッド(関数)は、言語によって同じ名前でも実装が違ったり
一部のファイルシステムやレンタルサーバ上では使えなかったりしてあまり信用できない

かといって自分でロック機構を実装すれば、レースコンディションの危険がある
なんかこの辺をさくっと解決してくれるpure rubyなライブラリないかな
0858デフォルトの名無しさん2008/11/08(土) 11:34:57
>>857
>flockメソッド(関数)は、言語によって同じ名前でも実装が違ったり
Rubyの話してるんだから他の言語は関係ないだろ。

>一部のファイルシステムやレンタルサーバ上では使えなかったりしてあまり信用できない
だからどんなファイルシステムやレンタルサーバ上で使えないの?
具体名をだしてくれ。
どういう場合にflockが使えないのかを、ドキュメントに書いてもらおうぜ。
0859デフォルトの名無しさん2008/11/08(土) 12:23:44
>>858
NFS上でのロックは不可能。
これはflockシステムコールの実装から来る制約。
fcntlを使えばNFSでロックすることは可能になるがIO.ioctl関数という
可搬性が低いメソッドを用いなければならず(まずWindowsなら実装されていないと
門前払い)かなり面倒。おまけにたいていNFS上でのロックはセキュリティホールに
なるので使えないのが普通。
0860デフォルトの名無しさん2008/11/08(土) 12:49:31
>>858
レンタルサーバだと、flockが明示的に禁止されているサーバがある。パンドラとか

ただ、現在flockを使えないサーバがどのくらいあるかは分からない
無視できるほど少数かも
0861デフォルトの名無しさん2008/11/08(土) 22:07:38
正規表現の書き方なのですが、、、、
>Sector:</td><td class="yfnc_tabledata1"><a href="http://biz.yahoo.com/p/7conameu.html">Services<
こんな文字列があって、前後にも改行以外の文字が色々とくっついているのですが、
Sector:の後のServicesをマッチさせて文字としてとってこようとすると、どう書けば良いでしょうか?
0862デフォルトの名無しさん2008/11/08(土) 22:17:18
正規表現は書き方を覚えないと駄目
なぜなら、ほんの少し変えようと思っただけで別物になるから
コピペでやろうとすると異常に遠回りになる

正規表現自体は他の言語の正規表現とけっこう互換性があるから適当なサイトで勉強すれ
0863デフォルトの名無しさん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
0864デフォルトの名無しさん2008/11/09(日) 11:46:37
wxRubyについて勉強してるんですが、何かいいサイトはありますか?

一応自力で見つけたサイト
http://www.gesource.jp/programming/ruby/gui/wxruby/index.html
http://wx.k5-n.com/wxruby/

最小限のことは自分でやってます。require周りは自分でなんとかしてます。
0865デフォルトの名無しさん2008/11/09(日) 11:59:40
具体的には…

1.とりあえずwxWindowをインストールした
2.wxRubyをgems経由でインストールした
3.簡単なテストアプリケーションが動くようになった

以上のことがすでに完了してます。
0866デフォルトの名無しさん2008/11/09(日) 12:00:00
文字列変換メソッドを多数持たせたモジュールがあります。呼び出し
ごとに正規表現オブジェクトが作成されるのを防ぎたいのですが、
単に/abcde/ の代わりにRegexp.new("abcde")とすればOKですか?
それともグローバル変数みたいなものに格納しないとキャッシュと
しての効果は出ない?

0867デフォルトの名無しさん2008/11/09(日) 12:12:20
式展開を含まないならどうでもいい
0868デフォルトの名無しさん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の言うように、式展開を含むような「毎回違う可能性のある」正規表現はこの限りではない
0869デフォルトの名無しさん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
とか。
0870デフォルトの名無しさん2008/11/09(日) 12:42:43
>>864
公式のチュートリアル。
あとWxWidgetsのサイト全般と公式のAPIドキュメント。

wxに限ったことではなく、既存ライブラリのRubyバインディングは
元ネタのサイト漁るのが一番いいと思う。
0871デフォルトの名無しさん2008/11/09(日) 12:57:40
>>870
読んでみたんですが、すでに???状態です。
英語ワカンネじゃなくてそもそも読む気力がないのが大問題だったりするわけですがorz
今度気力が回復したらやってみます
0872デフォルトの名無しさん2008/11/09(日) 13:09:11
わかんなくてもコードコピペしてたら何となく動くし
それでもダメならWxWidgets関連のサイト参考にって>>870の2-4行目で
0873デフォルトの名無しさん2008/11/09(日) 13:15:24
>>872
ええ。一応その段階はある程度OKです。
あとはゆっくり亀のように進んでいけばいいんです。
解決しました。ありがとうございます。
0874デフォルトの名無しさん2008/11/09(日) 13:23:24
>>864
harukaze wxPython で検索

あと、解説サイトじゃないけど
wxRuby開発者が出してるwxsugarオススメ
0875デフォルトの名無しさん2008/11/09(日) 13:49:02
>>874
たぶん言ってるサイトはこれだと思うんだけど、
http://www.harukaze.net/~haruka/wxpython/index.html
なんかドメイン飛んでるよ
Pythonのが参考になるっつーことは理解できたけど。
08768662008/11/09(日) 15:29:30
>>867-869

ありがとう、よく分かりました。
0877デフォルトの名無しさん2008/11/10(月) 23:22:19
>>859
>NFS上でのロックは不可能。
ほう、そうなのか。知らなかった。さんくす。

>fcntlを使えばNFSでロックすることは可能になるがIO.ioctl関数という
>可搬性が低いメソッドを用いなければならず(まずWindowsなら実装されていないと
>門前払い)かなり面倒。
Windows上でNFSを使うことはないだろうから、ioctlはUNIX限定でいいんじゃね?

>おまけにたいていNFS上でのロックはセキュリティホールに
>なるので使えないのが普通。
これよくわかんないんだけど、理由は?参考になるURLプリーズ。

>>860
>レンタルサーバだと、flockが明示的に禁止されているサーバがある。パンドラとか
これも理由がわからん。レンタルサーバでNFS使ってるわけじゃないだろうし。なんで?
0878デフォルトの名無しさん2008/11/10(月) 23:31:11
>>877
ttps://menu.pandora.nu/public/flock.php
パンドラ側の説明みつけた
0879デフォルトの名無しさん2008/11/11(火) 00:06:10
超絶初心者な質問で申し訳ないんですけど、RubyScript2Exeでexeファイル作りたいんですけど上手くいきません。
使い方は、RubyScript2Exe.rbとexeにしたいファイルを同じフォルダに入れて、
コマンドプロンプトで、「ruby [RubyScript2Exeのパス] [exeにしたいファイル]」
で合っていますか?
0880デフォルトの名無しさん2008/11/11(火) 07:32:00
>>878
サンクス。あきらかにNFS使ってるね。
そんなサーバがあることに驚いたけど。
0881デフォルトの名無しさん2008/11/11(火) 07:50:04
つまりflock前提として、最適なロック方法は
「まずIO.ioctlでロックを試みる、エラーが出ればrescueしてflockする」ということか!

・・・面倒だ
やっぱり、完全に可搬性のあるファイルシステムロック用のライブラリが欲しいな
0882デフォルトの名無しさん2008/11/11(火) 08:19:04
「完全に」とか簡単に言っちゃう人って頭悪そう。
0883デフォルトの名無しさん2008/11/11(火) 08:36:33
不完全or不安定なライブラリがほしいって言うのもなんだと思うが
0884デフォルトの名無しさん2008/11/11(火) 08:49:34
欲しい欲しい、して欲しい。
0885デフォルトの名無しさん2008/11/11(火) 09:14:19
RAAやRubyForgeをざっと探してみたけど、ファイルロック用のライブラリらしきものが見当たらない
実はみんな、あまり必要としていないのか?

MLでこんな古い話は見つけたが、ソースコードはもう公開されてないっぽい
(時間ないから詳しく探してないけど)
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/11326
0886デフォルトの名無しさん2008/11/11(火) 09:50:16
本来、ファイルロックみたいにべったり環境依存なものに、完全な可搬性を求める発想が普通は余りないんだよね。
とはいうものの「環境依存だから諦めろ」ってのも古い考えで、こういう操作こそ処理系で環境差異を吸収しろ、っていう意見も、確かに一つの見識だと思う。
というわけで、完全な可搬性を持ったファイルロックの実装をコントリビュートしてくれ。
0887デフォルトの名無しさん2008/11/11(火) 09:54:31
あんまり気にしたこと無かったけど、makeするあたりで
良きに計らってくれるとよさそうな感じだね
0888デフォルトの名無しさん2008/11/11(火) 15:07:35
flockが使えるかどうかがファイルシステムに依存する以上、
コンパイル時に判定するのは無意味じゃないか?
0889デフォルトの名無しさん2008/11/11(火) 17:32:32
>>886
SQLが使えるなら簡単な表を作って、そこに1つだけレコードを追加して、
あとはSELECT FOR UPDATEかSELECT LOCK IN SHARE MODEで終了。
幸いSQL用のライブラリは普通に配布されてる。
SQLが使えない場合はやり方を工夫するしかないわけなんだが。
とりあえずパンドラさんのPerlライブラリを解析するしかなさそうだけど。
>>881
むしろ順番は逆のほうがいい。ioctl関数はどちらかといえば汎用関数。
ioctlが使えないのはほぼ例外なくWindowsで作られてるサーバー。
0890デフォルトの名無しさん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
0891デフォルトの名無しさん2008/11/11(火) 17:53:13
>>890
この関数の流れは…
1.ロックファイルを固有ファイルに名前を変えようとする。成功したら3へ
2.失敗したらタイムアウトより古いロックファイルがあればロックを取得しようとする。
成功したら3へ
3.1秒待って1へ戻る。ただしtry回試して失敗したら打ち切り
4.ロックを取得できていなければLockError例外を発生させる
5.ブロックをともなって呼び出されていた場合そのブロックを実行する。
そしてロックを解放する

ロックの解除は普通に元のファイル名に変更するだけ。

汎用性はかなり高いと思われる。レースコンディションを検討しても
まずないだろうと考えられる。ファイルのリネームができないサーバーは
まずないだろうからその面でも問題はない。
0892デフォルトの名無しさん2008/11/11(火) 18:01:12
ただし、このプログラムを使う場合、GPL2が適用されるので
それを使ったソースの配布もGPL2を用いなければならず、
そこが唯一の問題だったりする。逆に言えば、GPL2で
配布する予定のプログラムならぜんぜん問題はないといってよい。
0893デフォルトの名無しさん2008/11/11(火) 19:05:10
>>892
自分で書き直せばいいんじゃね?
0894デフォルトの名無しさん2008/11/11(火) 22:36:42
アトミックな処理(シンボリックリンクの作成とか)を利用したロック方法は
それなりにノウハウが枯れきっている話題だし、自分で実装しちゃえばいい。
0895デフォルトの名無しさん2008/11/12(水) 07:21:48
試しにファイルシステムロック用のライブラリを書いてみた(不完全)
mkdir方式で共有ロック・排他ロックの区別あり
ttp://eload.run.buttobi.net/cgi-bin/img/e_260.zip

ロック検出→ロックディレクトリ作成の間に
明らかなレースコンディションがあるんだけど、解決の方法が思いつかない・・・
何かいい解決策はないだろうか
0896デフォルトの名無しさん2008/11/12(水) 12:34:09
すでに存在するディレクトリを指定したときにエラー返らないんだっけ?
0897デフォルトの名無しさん2008/11/12(水) 13:20:39
Perlだけど解説は参考になるかな
http://www.din.or.jp/~ohzaki/perl.htm#File_Lock
0898デフォルトの名無しさん2008/11/12(水) 21:36:28
>>896
Errno::EEXIST
0899デフォルトの名無しさん2008/11/13(木) 08:41:51
改良版。レースコンディションは無くなった……と思う
その代わり1回のロックで2つのディレクトリを作るため、効率はやや悪い
ttp://eload.run.buttobi.net/cgi-bin/img/e_261.zip

>>896
共有ロックだと、複数のロックを同時にかけられるから
「まずmkdirしてみて、失敗するならロックされている」という検出方法が使えなかった
0900デフォルトの名無しさん2008/11/13(木) 16:44:54
ボロボロじゃん。
教科書に載るようなちゃんと知られたアルゴリズムを調べて書いた方がいいと思うよ。
0901デフォルトの名無しさん2008/11/14(金) 00:49:45
Rubyで簡単な落ちゲームがあるのですが

http://jp.rubyist.net/magazine/?0018-GameProgramingForRubySDL

これをネットワーク越しに(LAN内のみ)二人対戦できるようにするには
どのような方法がありますでしょうか?
指針だけでもいいのでご教授お願いします。
0902デフォルトの名無しさん2008/11/14(金) 00:58:11
drb
0903デフォルトの名無しさん2008/11/14(金) 01:09:35
マルチは止めること

基本的なものだと発想はごく単純で、
互いが互いのキー入力やイベントを送信しあうだけ
左キーが押された!とかアイテム取った!とか
0904デフォルトの名無しさん2008/11/14(金) 01:30:22
それじゃダメ。
片方をサーバにするのが一番簡単。
0905デフォルトの名無しさん2008/11/14(金) 12:22:38
>>899
いい感じだと思うぞ

ただ、読み込みのときにディレクトリ名の生成を
乱数に頼ってるところが怪しい
1秒に10回くらいのリクエストがあると衝突しそう
0906デフォルトの名無しさん2008/11/14(金) 15:42:32
ロックするのはIO.ioctlじゃなくてIO.fcntlな。
0907デフォルトの名無しさん2008/11/14(金) 23:59:42
マルチってなんでダメなの?
0908デフォルトの名無しさん2008/11/15(土) 00:26:23
>>907
「おなかが空いて死にそうなんです…」
「自分ではもうどうすることもできません…」
「お願いです一食分のお金でいいのでめぐんでください…」
といって食事代をめぐんでもらった
場所を変えてまた同じことを繰り返す
人の善意を利用した最低の行為
0909デフォルトの名無しさん2008/11/15(土) 11:13:23
>907
マルチポストでググって出てくる最初のほうのいくつかを嫁
0910デフォルトの名無しさん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 */
0911デフォルトの名無しさん2008/11/15(土) 13:43:13
sh: cc: not found

コンパイラ入ってるか?
09129102008/11/15(土) 13:53:08
>>911
apt-get install gcc
apt-get install make
をやったところ、無事にgem install mysqlが通りました。
ありがとうございます。
0913デフォルトの名無しさん2008/11/15(土) 21:28:50
Dir.glob("**/*"){|f| p f }

↑だとフォルダもファイルも一緒に表示されてしまいます
フォルダのみファイルのみのパスが欲しいんですがどうしたらいいんでしょう
0914デフォルトの名無しさん2008/11/15(土) 21:46:07
dirs, files = Dir.glob("**/*").partition{|path| File.directory? }
0915デフォルトの名無しさん2008/11/15(土) 22:05:58
ありがとうございます、今まで長々と書いてたけど短く出来るんじゃないかと思って聞いてみました。
あとコピペしたらエラーになったんで最後にpathを付けたら動きました。

dirs, files = Dir.glob("**/*").partition{|path| File.directory? path}
0916デフォルトの名無しさん2008/11/15(土) 22:49:15
Dir.glob("**/*/"){|f| p f }
0917デフォルトの名無しさん2008/11/16(日) 01:07:09
>>916
ありがとうございます、フォルダのみ検索できました

ファイルのみ検索できないか試したけど、拡張子ありファイルならできました
Dir.glob("**/*.*"){|f| p f }
0918デフォルトの名無しさん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
$
09199182008/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
0920デフォルトの名無しさん2008/11/16(日) 02:22:52
>>918はduplicatedじゃなくてdeprecatedだし、警告だから、
あなたが遭遇している問題とはおそらく関係ないと思う。
モデルは作った? DBは作った? アダプタは何? 最近のデフォルトはsqlite3だぞ。

>>919でしているのはrakeのバージョン。
rakeは0.8.3しか入ってないんだからそういうエラーになる。

0921デフォルトの名無しさん2008/11/16(日) 02:36:33
>>920
ありがと。
いろいろ試してエラーメッセージを見てたら気づきました。。。
gemを使って、railsの2.1.2を入れたり消したりしてたら
いつのまにか、インストール済み(2.1.2と1.2.6)のrailsとその関連のパッケージは
アンインストールができなくなりました。
2.1.2は暫く使わないので、一回消したかったのだけど。
0922デフォルトの名無しさん2008/11/16(日) 02:50:22
hashってキーから値をだすけど、値を指定してキーを取り出すことはできないですよね?
0923デフォルトの名無しさん2008/11/16(日) 02:54:04
Hash#index
0924デフォルトの名無しさん2008/11/16(日) 03:03:14
ありがとうございます
0925デフォルトの名無しさん2008/11/16(日) 04:12:20
>>917
> ファイルのみ検索できないか試したけど、拡張子ありファイルならできました
それはファイルとディレクトリを区別してるわけではなく、
途中に"."を含むパス名を探している。
Dir.glob単独で区別できるのはディレクトリのみ。
0926デフォルトの名無しさん2008/11/16(日) 08:51:18
Rubyでプログレスバーを更新しながらファイルをダウンロードしているプログラムの例を
ご存じありませんか?参考にしたいのですが。
0927デフォルトの名無しさん2008/11/16(日) 08:58:40
Ruby プログレスバー でぐぐった?
あと GUI か CUI かで話が違ってくるかも
0928デフォルトの名無しさん2008/11/16(日) 10:49:04
>>925
そうですか、フォルダに"."があれば反応しちゃうんですね
0929デフォルトの名無しさん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 なんですか?よければお教えください。
0930デフォルトの名無しさん2008/11/16(日) 11:18:27
>>929
開発環境を自由に変更できる立場の人が2ちゃんで効かないでください。あなたのチームは終わってます。
09319292008/11/16(日) 11:22:39
>>930
いやいや、そんなんじゃないです。ただのへっぽこ零細企業の人間です。
ただこれからの技術の移り変わりに対応する為、あるいは後学のため、
ってだけの理由です。
仕事で使う必然性があるわけではありません。
0932デフォルトの名無しさん2008/11/16(日) 11:33:01
JavaとC++とPHP,Perl知っていれば大抵の業務はこれのいずれかでは?
0933デフォルトの名無しさん2008/11/16(日) 11:34:35
>まともに対応してるIDEは無いの!?
動的型付けな言語なら補完なんか大してできないのでどれも似たり寄ったりな気が
09349292008/11/16(日) 11:40:07
連投スイマセンが、ちと補足を。
当方、ただLLに興味持って、やってみたいと思っただけの
人間です。ただそれにしても将来性とかかんがえちゃうの
で、後々自分の仕事で使う機会があるとすれば…?という
発想をしただけです。
決してRuby使いの皆様をくさそうとする意図はありません。
スレ違い、たいへん失礼しました。
0935デフォルトの名無しさん2008/11/16(日) 11:41:11
LLがなにかわからん
0936デフォルトの名無しさん2008/11/16(日) 11:45:52
>>929
>>228-230はスコープ管理の話なんかしてないしrubyのスコープ管理は甘くなんか無い
>>228-で言ってるのはrubyはタイプセーフなプログラミングが出来ないって事で
それはその通りだけどテスト駆動な開発をすれば問題無い、と>>253までつづいてる
それより本を買ったんなら元を取るつもりで全部読めよ、もったいない
0937デフォルトの名無しさん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/
0938デフォルトの名無しさん2008/11/16(日) 11:49:43
926です。
Ruby/GTK+付属のデモで画像を表示するやつ(プログレスバーは出てきませんが)をみながら
自分で書き終えてしまいました。

>>929
「ためにする心配」につられていても仕方がないと思いますよ。
その欠点は本当か、あるいはそれは実際に深刻なものなのか、というのはやってみずに
評価したふりをしてみても仕方がない。
それから、いずれにしても「後々使う機会があるかも……?」という程度では今何を
やったところで実際に使うときにも詳細は陳腐化の可能性が大きいです。
それならば考え方や長所短所を飲み込んでおくために
明らかに一方の代表格であるRailsを学んでみるのは悪くない選択だと思います。
0939デフォルトの名無しさん2008/11/16(日) 12:20:54
929です。
>>936,>>938
おっしゃる事はごもっともです。良く分ります。
さらにちょっと、余談でごめんなさい。なぜRubyに興味を持ったのか?
という話をします。
それは、不況だって事です。安易かもしれませんが、不況だから、今後
業務系大規模システム案件は減少するだろうと思ったわけです。
すると中小規模で小金額の案件が多くなるだろうと。大規模なら当然
Javaなんですが・・・。
それと、Javaでも充分重いって事もあります。だからもっと中小規模
向きで、シンプルで軽く低コストに開発できる技術が流行ってくるだろう、
と。
それでRubyあたりがもっとシェア上げて来るんじゃねえか?などと思った
次第です。日本人が作ったというのも、右派な自分には魅力でした。
まだ自分には結論だせませんが、今後も興味は持ち続けたいと思います。
0940デフォルトの名無しさん2008/11/16(日) 12:26:00
>>939

>>937
>またPHPなどに比べて,メモリーを消費すると言う問題もあり,
>資源の少ないサーバーでの運用には注意が必要である。
0941デフォルトの名無しさん2008/11/16(日) 12:36:30
>>940
つまり軽い技術欲しがる事に対しては、Rubyは軽くない、PHPのほうがマシ、と言いたい?
0942デフォルトの名無しさん2008/11/16(日) 12:53:18
おいおいPHPに比べて資源を消費するのはRailsの話だろ。
勝手にすり替えてRubxをこき下ろそうとするなよ。
0943デフォルトの名無しさん2008/11/16(日) 13:01:58
>>942 すいませんそのとおりですね。Railsの話でした
0944デフォルトの名無しさん2008/11/16(日) 16:59:04
>>940
まあ確かにメモリは食うけど共有サーバでCGI実行みたいな環境じゃなく、
普通に2GBくらいメモリ積んでるサーバ使えば問題にならないよ。
データベース用サーバならともかくアプリ用のサーバのメモリをケチっても中小規模の案件(数台〜10数台)なら大した差がないだろ。
09456762008/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
09466762008/11/16(日) 23:37:22
>>787-789
ちなみに私のプログラム歴ですが
学生時代にperlを12コマと卒研でcを数ヵ月、
社会人になってからこんな感じで少しです。
変なクセは学生時代のどちらかで付いてしまったと思います。

VBは今回のもので少し書きましたが
全然速くならなかったのですぐにあきらめてしまったので
breakの話とかは全く知らないです。

とにかく、ど素人です。
申し訳ありませんが >>945 の添削よろしくお願い致します。
0947デフォルトの名無しさん2008/11/17(月) 00:28:11
>945
ぱっと見て目につくのは while 0 かな。
他言語の 0 が偽でRubyが真なのとあいまってすげぇ紛らわしいw
Rubyには loop do 〜 end っていう無限ループ用のイテレータがあるからそれを使う。
つか、他言語やってたらな while 1 か while true と書くだフツーw
0948デフォルトの名無しさん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
0949デフォルトの名無しさん2008/11/17(月) 00:51:32
組み込み開発でC言語しか知らないけど、勉強のためにRubyを勉強しようと思っています。
組込みしか知らない人で同じくRubyを勉強している人いますか?
お勧めの書籍や、気をつけるべき点があれば教えてください。
0950デフォルトの名無しさん2008/11/17(月) 02:00:02
>>946
returnのところで、境界の2値との距離を取って、近い方のインデックスを返すようにされてますが、
これだと、順序はある(大小比較が出来る)けど距離(差)が取れない値の検索が出来ないですよね。
(例えば数値の検索には使えても辞書順に整列された文字列の検索には使えませんよね。)

なので、関数の再利用性を高めるために、
より汎用性の高い「二分検索して境界のインデックスを返す」という関数はそれ単体で作っておいて、
その関数を呼び出して境界の2値との距離を取って近い方のインデックスを返す関数、をmatch_loopとするのが良いと思います。

あと関数の名前がちょっと気になります。検索方法が二分検索ならば配列はソートされていることが前提なので
間違えて変な配列を渡さないように、それが分かるような名前にした方がいいと思います。
例: binary_search、search_sorted_array など
0951デフォルトの名無しさん2008/11/17(月) 12:58:36
>>949
書籍については>>2を参照のこと
組み込みの世界は知らないんだが、Rubyってあるのかなあ・・・・・・?
0952デフォルトの名無しさん2008/11/17(月) 20:31:40
>>951
そもそも組み込みのところにインタプリタ内蔵できないでしょ
0953デフォルトの名無しさん2008/11/17(月) 22:23:07
>>949
>組込みしか知らない人で同じくRubyを勉強している人いますか?
>お勧めの書籍や、気をつけるべき点があれば教えてください。
特にない。初心者と同じように勉強すればいい。
ただ組み込みを知っているなら、当然アセンブラやポインタの理解はしているだろうから、
内部の動作を解析した『Rubyハッキングガイド』をいきなり読むのも面白いかも。

>>951,952
別に組み込みで使いたいなんて、>>949には一言も書いてないんだが
0954デフォルトの名無しさん2008/11/17(月) 22:28:36
おすすめしていいのか迷ってたけど、自分もRHGはアリじゃないかと思った。
http://i.loveruby.net/ja/rhg/book/
でもこれ、いま書籍手に入る?
09556762008/11/17(月) 22:33:44
>>947,948,950
どうもありがとうございました。
やはり私が知らない事をたくさん指摘していただけて勉強になりました。

whileに関しては0と1どっちかなぁ、と初めに0をやったら
無限ループになったから使ったという最低な事をしてました。。。

関数の名前と汎用性は今後勉強していくうちにステップアップしていきたいです。
今は数値の検索にしか使わない、ということと >>945 の数行を書くのに
いっぱいいっぱいだったので。

今後もよろしくお願いいたします。
0956デフォルトの名無しさん2008/11/17(月) 22:45:06
>>954
多分無理
0957デフォルトの名無しさん2008/11/17(月) 23:02:08
>>954
Rubyソースコード完全解説: 青木 峰郎, まつもと ゆきひろ: Amazon.co.jp: 本
http://www.amazon.co.jp/dp/4844317210

出品者からお求めいただけます。
1点の新品/中古商品を見る: ¥ 20,000より
0958デフォルトの名無しさん2008/11/18(火) 00:53:01
hpricotみたいな感じでjavascriptのボタン押す方法ってないですか?
watirはwinだしfirewatirはバックグラウンドで起動の方法が分からない。。
0959デフォルトの名無しさん2008/11/18(火) 01:25:08
>951-954
アドバイスありがとうございました。
組込みの現場で使うと言うのではなく、部長から
「組込みだけでなく、組込み+αを目指せ」
といわれ、部としてRuby技術者を増やすらしいのです。

ですから、あくまでも主体は組込みで、
勉強というか、知識の幅を広げるためのRubyです。
(さすがに知っている知識が、C言語と組込技術のみは狭すぎるから)
そのため、現在、UMLを先行して勉強しています
(これは業務でも利用できるので)

>ただ組み込みを知っているなら、当然アセンブラやポインタの理解はしているだろうから、
そうですね。そのあたりは理解しているつもりです。
(アセンブラの場合、読めますが、書くとなると少しがんばる必要がありますが、RISCの場合とか)

とにかく、まずは読んで動かしてぐりぐりとやってみます。
0960デフォルトの名無しさん2008/11/18(火) 01:59:47
そういえば、東芝がCellの処理能力を利用して、
Ruby使って組み込み開発できるようにするってのは進行してるのかな。
0961デフォルトの名無しさん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を
入れたり、なんだかよく分からないけど動いてるみたいだからまぁいいか、
なんてスタンスでいると後々痛い目を見るよ。
一遍くらいは泣きを見た方が却っていいのかもしれんけど。
0962デフォルトの名無しさん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
0963デフォルトの名無しさん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/
0964デフォルトの名無しさん2008/11/18(火) 13:07:44
rand() の戻り値って、0 < rand() < 1 ですよね。
整数値を得たい場合はどうしたらいいですか。
RAND_MAXとかあるかと思いましたが、なさそうです。
0965デフォルトの名無しさん2008/11/18(火) 13:41:15
整数値で引数を与えると
0 ≦ rand n < n で整数を返すようになる
0966デフォルトの名無しさん2008/11/18(火) 14:27:50
>964
そりゃRubyのrand()は1万桁の乱数だって平気で返せるからな。
どこかでテキトーに区切りつけれ。
0967デフォルトの名無しさん2008/11/18(火) 15:17:30
ここで質問していいのか良く分からないのですが、良ければ教えてください。

cygwin上のrubyで最近ircのbotを動かそうとして、riceを使いghotiを動かしています。
ところが発言がNOTICEじゃないので、NOTICEで発言させたいと思っています。
rubyはろくに弄った事が無いので、どの辺弄ったらいいんでしょうか。

あと、発言の学習でurlが含まれるものを排除したいと思っています。
s.gsubでノーマライズしているの部分で消せばよいと考えました。

とりあえず以下のような感じで削除しようと思ったのですが
s.gsub!("^.*http.*$","")
うまく消えないようです

なんか注意点はありますでしょうか?
0968デフォルトの名無しさん2008/11/18(火) 16:13:36
s.gsub!(/^.*http.*$/, "")
じゃなくて?それとこれだとURLだけじゃなくて、その行全部消えるけど大丈夫?
0969デフォルトの名無しさん2008/11/18(火) 16:52:00
>>967
コード斜め読みしてみた感じ、たぶんrice-0.0.0.2はNOTICEに対応してない。
HEADなら対応してそうだけどライブラリ構造ずいぶん変わってるから
差し替えてそのまま動くかはあやしい。動きそうな気もするけど。
もし差し替えてうまく動いたなら、privmsgしてるところをnoticeに書き換え。
0970デフォルトの名無しさん2008/11/18(火) 17:46:45
>>968 の言うように
s.gsub!(/^.*http.*$/,"")
と、ちゃんと正規表現として検索パターンを与えないと、文字列そのものとして検索されるよ

s.gsub!("^.*http.*$","") などと検索パターンに文字列を与えると
s.gsub!(Regexp.new(Regexp.escape("^.*http.*$")), "")
と同じ意味になっちゃう

ruby 1.6以前だと、文字列を与えるとそれを正規表現として扱ってましたが
0971デフォルトの名無しさん2008/11/18(火) 18:13:33
>>959
普通にプログラムが書ける人間なら、ちょっと文法覚えてちょっと組み込みクラスのメソッド群を覚えれば、普通に使えるようになるはず。
もしそうじゃなかったら、「普通にプログラムが書ける人間」じゃないなだけなので、使えるはずのCを真面目に勉強しろ、って感じ。

まあ、書いてることを見る限り、ちょっといじったらすぐわかるようになるよ。
09729672008/11/18(火) 18:39:48
>>968-970
ありがとうございます
他のノーマライズ処理部分が一部正規表現ぽく見えたので、/要らないのかと思ってしまいました

あと、NOTICEは対応していないかもしれないんですね
態々コードまで見てもらってありがとうございます
直接埋め込みで何とかなるか調べてみようと思います
0973デフォルトの名無しさん2008/11/18(火) 19:27:36
>971
待て待て、C言語とRubyだと結構違いも大きいぞ…例えば

・非オブジェクト指向言語のC、オブジェクト指向言語のRuby

例えばCなら「関数」で目的の機能を探すところを
Rubyでは「クラス」または「モジュール」単位で探す
(ライブラリ単位で探す場合もあるが、そこは共通)

・変数に型があるCと中身に型があるRuby

C言語は変数が型を持ち、中身である値は型を持たない
Rubyの変数はオブジェクトを指すラベルでしかなく型はない
その代わり、参照先のオブジェクトがハッキリと型を持つ

この辺りは押さえておきたい
0974デフォルトの名無しさん2008/11/18(火) 19:43:49
>>965
>整数値で引数を与えると
>0 ≦ rand n < n で整数を返すようになる
なにこれー
ちょーさんくす
0975デフォルトの名無しさん2008/11/18(火) 19:59:44
>>973
そんなの本質的な違いじゃないから。
0976デフォルトの名無しさん2008/11/18(火) 21:33:24
> ・非オブジェクト指向言語のC、オブジェクト指向言語のRuby

これはでかすぎるだろ・・・別にオブジェクト指向なんて意識しなくても動くけど
個人的には動的な型づけもでかいと思う

普通ってどのくらいのレベルを言うのかイマイチわからん
0977デフォルトの名無しさん2008/11/18(火) 21:37:47
>>925
> Dir.glob単独で区別できるのはディレクトリのみ。

ほんなら
Dir.glob("**/*") - Dir.glob("**/*/")
でファイル一覧取れるじゃーん、イェーイ、と思ったら予想外の結果になった。
0978デフォルトの名無しさん2008/11/18(火) 22:19:01
Rubyをこれから勉強しようと思ってます。

OSはUbuntu Linux。で、エディタをEmacs使おうと思ってたのですが、
本には向いてないとか書かれてました。

Aptanaのプラグインとかはちょっと重そうなのと、試してみたらエラー
出たりしたので放置してます。

Linuxユーザの方はどんなエディタ使ってますか?
0979デフォルトの名無しさん2008/11/18(火) 22:20:23
教祖がEmacs使いなわけですが・・・
0980デフォルトの名無しさん2008/11/18(火) 22:21:13
>>978
emacs
0981デフォルトの名無しさん2008/11/18(火) 22:21:25
普通にEmacs使ってるけど、別に問題はないかと。

その本には「初心者には」向いてないって書いてたんじゃない?
0982デフォルトの名無しさん2008/11/18(火) 22:29:06
多分Emacsそのものが初心者向きでないという意味だろうな
emacs使えるならそれで良いし、もちろんvimでもGNU nanoでも
geditでも、プレーンテキストが編集出来るならなんでも良い
09839782008/11/18(火) 22:31:41
ありがとうございます。Emacsで問題ないんですね。

Emacs向いてない、って書いてあったのは、「RailsによるアジャイルWebアプリケーション開発」
でした。何ででしょうね。この本には、Macの何とかってエディタがおすすめとなってました。
0984デフォルトの名無しさん2008/11/18(火) 22:43:04
TextMateか
0985デフォルトの名無しさん2008/11/18(火) 23:03:38
>983
RubyがMacで流行ったから、それを意識したんだろうな
MacOSXのエディタは決定版が少ないから
(文字コードに弱かったり、色分けすら無かったり)
オススメエディタの紹介もそれなりに需要あるんだよ

ちなみに俺はMacでは GNU nano かな
Linux畑のRubyには、Linux畑のエディタのが問題起きにくい
0986デフォルトの名無しさん2008/11/18(火) 23:04:53
MacだとMacVimがいい
0987デフォルトの名無しさん2008/11/19(水) 12:25:18
↓ 以下、1000まで Mac用vi と Mac用Emacsの宗教戦争
0988デフォルトの名無しさん2008/11/19(水) 13:07:05
jEditはどう?
0989デフォルトの名無しさん2008/11/19(水) 16:19:50
JUnitを拡張したDbUnitのような、データベース関係の試験をするための便利なツールはrubyにありますか?
0990デフォルトの名無しさん2008/11/19(水) 18:02:58
autotestが無限にテストを繰り返してしまうのですけど、どんなことをうたがったらよいでしょうか?

lib/app.rb # test.rbをrequire
lib/test.rb
spec/test_spec.rb

などのような基本的なスクリプトなのですが・・・
09919902008/11/19(水) 18:05:41
あああ、わかりました。
log/ にログファイルを出力していたのですが、autotestが更新したと思って
無限にテストを繰り返していました。
特定ディレクトリのみ監視外にするにはどうしたらよいのだろう・・・
09929902008/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

お騒がせいたしました。
ありがとうございました。
0993デフォルトの名無しさん2008/11/19(水) 21:52:35
>988
それ、2つのエディタが見つかるんだが、jEのほうだよな?
jedit X のほうじゃないよな?

…そういやkEditといい、jEditといい、Mac界は紛らわしい名前のエディタも多いんだなw
09946762008/11/19(水) 23:12:00
>>961,962
まずは >>746 を紙に書いて動きを考えて
解説はwikipediaのものを見るだけにしました。(カンニングはしてません)

無限ループは終了条件をどうすればよいか考え付かなかったのでprekとして
1つ前のkを保存して強制的に終了させていました。

考えが甘いとの指摘はおっしゃる通りだと思います。
この話は仕事でもよく指摘されています(仕事はプログラミングとは無関係)。
思わぬところで自分が成長できていないを再認識しました。。。
(whileも近接値判定もやって出来なりでokとしてしまいましたが
ちゃんと考えないと抜けがありますね。[0, 1] の 0.5 は乱数では出てきませんでした。)

★自分のと >>962 の違いについて
・2行目の検査で安全性を確保している
・ループの終了条件が分かりやすい
・>>961 に書いてありますが、近接値判定のところを前と同じにしてある
・変数名の付け方
0995デフォルトの名無しさん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のインストーラはないでしょうか?
0996デフォルトの名無しさん2008/11/19(水) 23:51:42
ttp://arton.hp.infoseek.co.jp/indexj.html
ここかしら
0997デフォルトの名無しさん2008/11/20(木) 00:24:14
>>994
馬鹿発見
0998デフォルトの名無しさん2008/11/20(木) 01:52:57
そりゃ質問スレで質問者が頭良いか悪いかと言えば悪い方に分類されるのは当たり前だろう
0999デフォルトの名無しさん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だけケータイから立てたのであと誰かたのむ
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。