Ruby 初心者スレッド Part 21at TECH
Ruby 初心者スレッド Part 21 - 暇つぶし2ch1:デフォルトの名無しさん
08/08/06 01:07:21
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

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

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

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

2:デフォルトの名無しさん
08/08/06 01:09:14
【よくあるしつもん】
Q:
いちからRubyを始める初心者向けのRuby入門書は何がおすすめでしょうか?

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

他の言語経験があるんだったら
「プログラミングRuby 第2版 言語編」
URLリンク(www.amazon.co.jp)
「初めてのRuby」
URLリンク(www.amazon.co.jp)

3:デフォルトの名無しさん
08/08/06 01:10:11
■前スレ
Ruby 初心者スレッド Part 20
スレリンク(tech板)

■関連スレ
Rubyについて Part 32
スレリンク(tech板)

Rubyの宿題教えてください。2限目
スレリンク(tech板)

RubyCocoa 初心者質問【Leopardバンドル記念】
スレリンク(mac板)

【ActiveScript】RubyをWindowsで使うスレ【GUI】
スレリンク(tech板)

Ruby on Rails のスレ が
スレリンク(php板)

【Ruby】Rails以外のRubyフレームワーク【alt】
スレリンク(php板)

【Rails】便利なRubyGemsを共有するスレ【Hpricot】
スレリンク(tech板)

Rubyについて(アンチ専用) Part003
スレリンク(tech板)

4:デフォルトの名無しさん
08/08/06 01:10:46
■公式/非公式関連リンク
Ruby Home Page
URLリンク(www.ruby-lang.org)

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

リファレンスのHTMLヘルプ版配布
URLリンク(elbereth-hp.hp.infoseek.co.jp)
# Windowsで便利

Ruby FAQ
URLリンク(ruby-lang.org)

Programming Ruby - The Pragmatic Programmer's Guide
URLリンク(www.ruby-doc.org)
# 好評書籍をWebで公開中、ただし英語

逆引きRuby
URLリンク(www.namaraii.com)

5:デフォルトの名無しさん
08/08/06 01:11:20
RAA - Ruby Application Archive
URLリンク(raa.ruby-lang.org)

RubyForge
URLリンク(www.rubyforge.org)
# Rubyのアプリやライブラリが検索できる

GitHub RubyGems
URLリンク(gems.github.com)
URLリンク(github.com)
# 最近は RubyForge より GitHub が人気

日本Rubyの会 公式Wiki
URLリンク(jp.rubyist.net)
# メニューに表示されていない埋もれた情報ページ多数

Rubyist Magazine - るびま
URLリンク(jp.rubyist.net)
# コードレビューが好評

Ruby hotlinks 五月雨版(日記やblogのアンテナ)
URLリンク(www.rubyist.net)

Rubyの本一覧
URLリンク(www.ruby-lang.org)

<rubyXML/>
URLリンク(www.rubyxml.com)

Matzにっき(Ruby作者の日記)
URLリンク(www.rubyist.net)

6:デフォルトの名無しさん
08/08/06 01:12:00
■最近できたWiki
Ruby 初心者スレッド Hiki
URLリンク(starlet.s145.xrea.com)

Ruby Portal
URLリンク(ruby.morphball.net)

■プレゼンテーション
Ruby会議2008
URLリンク(jp.rubyist.net)
URLリンク(www.nicovideo.jp)

Ruby会議2007
URLリンク(jp.rubyist.net)
URLリンク(www.nicovideo.jp)

日本 Ruby カンファレンス 2006
URLリンク(jp.rubyist.net)
URLリンク(jp.rubyist.net)

7:デフォルトの名無しさん
08/08/06 01:45:54
>>1

8:デフォルトの名無しさん
08/08/06 01:48:45
Ruby>>>>>Java
スレリンク(tech板)

アラン・ケイも認めた!Ruby>>>>>Smalltalk
スレリンク(tech板)

Ruby最高や!
スレリンク(tech板)

【Perl,PHP】LLバトルロワイヤル3【Ruby,Python】
スレリンク(tech板)

9:デフォルトの名無しさん
08/08/06 06:04:20
データベースで言語環境を切り替える特許 
URLリンク(www.j-tokkyo.com)

おれ、この手の切り替え上記特許とほぼか全く同じ方法で10年以上もまえから
ずっとつかってきてるんだけど、特許違反なんのかな。。。
つーか、この程度のアイデアで特許になるってどうかしてんじゃないの??

今やってるRoRプロジェクトでも3ヶ国語対応でつかってんだが。。。

10:デフォルトの名無しさん
08/08/06 06:31:07
>>9
それが公知のものであることを証明できれば特許は認められなくなるはず。
ていうか、日本語と思えなくて読む気にならんのだが、これはgettextとは一線
を画すようなものなのか?


11:デフォルトの名無しさん
08/08/06 06:58:53
もう出勤だが、、、話あってみるわ。
今やってるPJ、工場のロボット制御なんだが、

物理層(ロボットとか)-シーケンサ-C/C++層-RoR層(インターフェース、DB) ユーザー

なんだが、海外にも出荷してるから、多言語化の部分全部DBのテーブルにいれてるんだよね

12:デフォルトの名無しさん
08/08/06 17:02:30
Rubyにはプログラミング言語以上の価値があると思う
スレリンク(php板)

13:デフォルトの名無しさん
08/08/06 22:05:03
トヨタか、手ごわいな…
リスクありそうだから、全部yamlで切り替えするということでおわった。。。
でもファイルにするのやなんだよな。

というか今までリリースしてきたアプリはどうなるんじゃ。

14:デフォルトの名無しさん
08/08/07 05:11:46
>>9
こんなの、そこら中のWebアプリで使われてないか?


15:デフォルトの名無しさん
08/08/07 15:06:50
質問。クラスを継承カスタマイズするのとクラスの返り値を解析する新クラス作成とどっちが一般的ですか?

ぶっちゃけた話 gem の WWW::Mechanize を使ってます。

 ・ Mechanizeオブジェクトがクッキー覚えたopen-uri的な「Webブラウザ」になる
 ・ ↑のGETの返り値はHpricotでHTML要素が解析され変数に格納されたPageオブジェクト

こんなライブラリです。で、特定のサイト、mixiとかはてなとか、ああいうのに対応させようと思います。

 A. Mechanizeを継承したクラスを作り、サイトに特化した変数を追加したりメソッドかを書き換えたりする
 B. サイトアクセス用クラスを作り、オリジナルクラスに渡す引数や返り値を「手元」で色々いじる

どっちが好ましいというか普通というか妥当でしょうか?

16:デフォルトの名無しさん
08/08/07 15:19:25
AがRubyっぽいような気がする
たとえばWWW::Mechanizeを継承したMixi::Mechanizeを作るとかそういうのだろ?

17:デフォルトの名無しさん
08/08/07 16:18:59
質問させてください。ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-cygwin]です。
RDEを使っています。

ruby/sdlを使おうと、require 'sdl'したのですが,sdl.soが読み込めないようです。
require 'sdl'だけのスクリプトを実行すると。

/usr/lib/ruby/site_ruby/1.8/i386-cygwin/sdl.so: No such file or directory - /usr/lib/ruby/site_ruby/1.8/i386-cygwin/sdl.so (LoadError)
from /usr/lib/ruby/site_ruby/1.8/sdl.rb:17
from C:/cygwin/bin/rb3EB.tmp:1:in `require'
from C:/cygwin/bin/rb3EB.tmp:1
Complete(1)

とエラーになってしまいました。
sdl.soはC:\cygwin\lib\ruby\site_ruby\1.8\i386-cygwinにあり、
ここのパスが通っていないのかなと試しに、そのディレクトリに
print "test was loaded" だけからなるスクリプト(test.rb)を作成し
別の場所のスクリプトからrequire 'test.rb'を実行したら
問題なく 「test was loaded」と表示されました。
*.soだけが読み込めないようです。

ご教示お願いします。

18:デフォルトの名無しさん
08/08/07 18:16:52
>>15
Bだろjk。委譲で済むなら委譲でいいだろ。
継承は最後の武器ってmatzが言ってた。

自分でしか使わない使い捨てスクリプトならAでいいけど。

19:デフォルトの名無しさん
08/08/07 19:41:48
>>17
そのエラーはsdl.soが無いと言っているとは限らなくて、
sdl.soをDLLとして読み込む際にエラーが出たときにもそのエラーになるらしいよ。

スレリンク(tech板)n356-362

なんとなくSDLのDLLを用意していない、とかがあやしい気がする。


20:17
08/08/07 20:44:33
>sdl.soをDLLとして読み込む際にエラーが出たときにもそのエラーになるらしいよ。
まさしくその通りでした

URLリンク(www.kmc.gr.jp)
によるとsdlはcygwinのrubyからでは使えないとのことでした
詳細はわかりませんが*.soがCygwin用やMinGWy用とで異なるようですね

URLリンク(www.cs.kyoto-wu.ac.jp)
URLリンク(eto.com)
を見てCygwinで頑張るか
MinGW版Rubyを使うかして解決しようと思います
どうもありがとうございました

21:デフォルトの名無しさん
08/08/08 09:04:24
>>15
class HogeSite
 def initialize
  @agent = WWW::Mechanize.new
 end
 def hoge

 end
end

22:デフォルトの名無しさん
08/08/08 10:12:41
>>21
module Hatena
class Mechanize < WWW::Mechanize
attr_accessor :username, :password
LOGIN_URI = URI.parse('URLリンク(www.hatena.ne.jp)')
def login
orig_get(LOGIN_URI).forms[0].set_fields('name' => @username, 'password' => @password)
submit(page.forms[0])
end
alias orig_get get
def get(uri,param=[],ref=nil)
login if cookie_jar.empty?(LOGIN_URI)
_get(uri,param,ref)
end

class ConfigPage < ::WWW::Mechanize::Page
# is for URLリンク(d.hatena.ne.jp)
def counter
@counter ||= parser.search('div.note').find{|e| /#{'ページビュー'.toeuc}/e =~ e.inner_text}.inner_text.scan(/\d+/).to_s.to_i
end
end
end

とか書けるのって便利っぽくね?
WWW::Mechanizeライブラリがアップデートして中身が大幅工事されたとき涙目だけど

23:デフォルトの名無しさん
08/08/08 10:24:00
こういうライブラリを継承して改造するのは、
ライブラリの内部インスタンス変数やマニュアルにないプライベートメソッドと被るのが怖い
しかも下手すれば作成中全然気づかない可能性があって探すのも面倒なのが怖すぎる

うまく動いてるうちは概念的にも明瞭で便利だとは思う
専用ブラウザと専用データページだからね

24:デフォルトの名無しさん
08/08/08 10:27:27
継承されることを考慮されてないと、すごくかぶりやすいからね

25:デフォルトの名無しさん
08/08/08 12:00:23
そういうのは継承されることを意識したモジュール作成テクニックを語ってこそ意味があるな

26:デフォルトの名無しさん
08/08/08 12:14:46
×そういうのは継承されることを意識したモジュール作成テクニックを語ってこそ意味があるな
○継承されることを意識したモジュール作成テクニックを教えて下さい

かぶりやすいことに対処するのは、かぶらないような冗長な名前を使います
普通はアンダースコアも使います
@__unkoclass_kusomiso__とかね

27:デフォルトの名無しさん
08/08/08 12:30:01
モジュール名がくっついたインスタンス変数というのは時々使う
例でいうと @hatena_username とか @hatena_counter とか
ライブラリを作る側が死ぬほどめんどくさいのが難点
あと継承した人がちょっと中の変数やメソッド使おうかなと思ったときもめんどくさい

継承元にあるメソッドや変数を上書きしてたら表示する継承警告モードとかあるといいのに


28:デフォルトの名無しさん
08/08/08 12:41:35
WWW::Mechanize には Logger クラスのインスタンスを指定する log というアクセサメソッドがあるんだが
これが agent._mechanize_logger_ だったらきっと誰も使わないだろうな

29:デフォルトの名無しさん
08/08/08 12:43:28
WWW::Mechanizeは継承して使うようなものじゃないでしょ

30:デフォルトの名無しさん
08/08/08 12:43:39
同じクラスに定義されたメソッドが、インスタンスで共有する変数用のsigilがあればいいのに
@.aaa とかとか

31:デフォルトの名無しさん
08/08/08 12:45:19
>>28
名前をかぶらないようにするというのは、内部で使うインスタンス変数やプライベートメソッドのことです

32:デフォルトの名無しさん
08/08/08 12:54:52
ていうか、Rubyのライブラリのシステムは他人が継承して使うようにできてない
(あるいは、バグっても泣かないというポリシーのもとで開放されてる)

継承は自作のクラスを自作のクラスで継承するとかそういうときに使うもんだ

33:デフォルトの名無しさん
08/08/08 12:59:49
Rubyで継承を使うのは本当に難しいし、
そのうち仕様が変更される可能性の高い分野でもあるので
それも怖い

34:デフォルトの名無しさん
08/08/08 13:24:53
そんなに難しくはないし怖くもないよ
>>32の最後の行が全然徹底されてないってだけだ
Rubyスクリプトとしてのソースが見えないArrayを継承してデカいクラス作るとかマゾにも程がある

35:デフォルトの名無しさん
08/08/08 13:29:13
GUIなんか継承が普通ですよ

36:デフォルトの名無しさん
08/08/08 15:56:10
Rubyに複数の脆弱性
URLリンク(www.ruby-lang.org)
> セーフレベルの脆弱性
> WEBrickのDoS脆弱性
> dlの汚染チェックの欠如
> resolv.rbのDNSスプーフィング脆弱性

脆弱性のあるバージョン

・全部

対処法
1.8系列、1.9系列ともにこれを反映した完全な最新版
(1.8.6-p286、1.8.7-p71、1.9のr18424)に変える
今のところ、バイナリ配布を頑張ってる人の反応は特にない

37:デフォルトの名無しさん
08/08/08 16:12:31


   ま た セ ー フ レ ベ ル 4 か



38:デフォルトの名無しさん
08/08/08 16:54:41
>>15
WWW::Mechanizeの使い方が間違っていると思うんだけど

39:デフォルトの名無しさん
08/08/08 17:00:16
>>22
aliasしても使ってなさそうに見えるし、_getって内部メソッドか?
あらかじめloginするってだけならこれだけでよくね?

def get(*)
 login if cookie_jar.empty?(LOGIN_URI)
 super
end


40:デフォルトの名無しさん
08/08/08 17:03:27
AもBも間違ってるというならCを提示すべき
てか、Aは確かにライブラリを完全把握したマッチョ向け綱渡りだが、Bってわりと普通じゃね?

時々忘れられてるがここはこれでも一応初心者スレなんで
「自爆して自覚するまで継承の便利さを味わっとけ」
というアドバイスもアリかなと思う
他人から教科書的に言われてもピンと来ないし伸びる余地も無い気がする

41:デフォルトの名無しさん
08/08/08 17:08:11
>>39
Mechanize には _get は無いね
alias _get get
だったのを書き損じたとかそんなとこじゃ

42:デフォルトの名無しさん
08/08/08 17:11:23
Mechanizeはagentが大域変数ばりに出張ってるとこがあんまり好きじゃない

43:デフォルトの名無しさん
08/08/08 21:51:46
delegatorやforwarderの出る幕ではないのか?


44:デフォルトの名無しさん
08/08/08 23:36:15
mechanizeで商売してるやつ多過ぎw

45:デフォルトの名無しさん
08/08/09 00:37:49
使い道を思いつかない思考の貧困さを恥じるべきだな

46:デフォルトの名無しさん
08/08/09 00:39:49
Struct厨に告ぐ
使いこなせると便利っぽい気もするのでハッシュと配列しか使ってない俺を感動させてくださいお願いします

47:デフォルトの名無しさん
08/08/09 00:46:51
>>46
便利さだけで言えば、Rubyではハッシュと配列(と俺クラスのインスタンス変数)の組み合わせのほうがおおむねわかりやすくて便利です

無理してまで自分から使えなくてもいいんじゃないかなと思う
データ構造がどうなってるかスクリプトを読めればOK

48:デフォルトの名無しさん
08/08/09 01:37:25
Hashに、キーが有限で順序が欲しいなぁと思ったときとか。

あとずらずらattr_accessorが並ぶだけの殆ど構造体みたいなクラスとかは、
1から書かずにStruct使うとか。コードを書かなければ書かないほどバグは減る。

49:デフォルトの名無しさん
08/08/09 04:47:43
1.キー名に制約が必要なとき(変なキーを受け付けない)
2.アクセサメソッドだけじゃなくて、添え字(キー、インデクス)でのアクセスがあると便利なとき

だいたいこの2つの条件がそろうとStruct使う。
今までに使ったのは2回くらいだが。

50:デフォルトの名無しさん
08/08/09 07:03:40
【Ruby/SDL他】Rubyでゲーム制作・総合スレッド
スレリンク(gamedev板:125-135番)

Rubyスクリプトを暗号化できないか?という流れがあったのです。
RPGツクールXPではスクリプト個別ファイルを暗号化、
RPGツクールVXではアーカイブにまとめているようなのですが、
これを実現する方法はありませんでしょうか?

requireをフックして書き換えるみたいなことってできるんでしょうか?

51:デフォルトの名無しさん
08/08/09 08:26:34
暗号化ってなーに?
エディタで開くと文字化けしてるという意味?

52:デフォルトの名無しさん
08/08/09 08:44:19
RGSS固有の話題は元のRubyがほとんど関係ないからツクールスレでやってくれると助かるんだが

RGSSがわからない人にはRGSSスクリプトそのままで問題ないし
RGSSがわかる人にとってはeval系列使って同じ動作させれば何書いてあるかわかるわけだし
どのへんの人を対象にしてるのか謎だ

53:デフォルトの名無しさん
08/08/09 09:20:34
ちゃんと嫁

54:デフォルトの名無しさん
08/08/09 09:52:43
ん? ツクールと同じことすればいいだけだろ
独自バイナリを読み込めるようなrubyを作って同梱して配布すればいい

55:デフォルトの名無しさん
08/08/09 10:53:12
Rubyってスクリプトの難読化は苦手なんだよね
そういう意味ではゲーム製作にはあまり向かないわ

56:デフォルトの名無しさん
08/08/09 11:13:13
夜中に作った作成途中のスクリプトの構造が朝起きたらさっぱりわからん

# HERE: ここからつくる

とか再開用定型句が書いてあるのはいいんだが、場所だけじゃなく何をすればいいのかも書いてほしかった昨日の俺
とりあえずなんでもかんでもget_xxxってメソッドにするのやめようぜわけわからんわ

57:デフォルトの名無しさん
08/08/09 11:23:15
先にテスト書けとまでは言わないが、コンセプトのメモとか作ってないの?

58:デフォルトの名無しさん
08/08/09 11:44:21
また継承云々の話なんだけどさ
個々の画像に関するデータを溜め込んだデータ群を作ろうと思うんだ
ハッシュで用が足りることがわかってるんだ

class Gallery < Hash
def xxxx
# selfをいじるメソッド色々
end
end



class Gallery
def initialize
@data = Hash.new
end
attr_accessor :data
def xxxx
# @dataをいじるメソッド色々
end
end

って、後者のほうがいいのかなあ
いちいち gallery.data でハッシュにアクセスしないといけないのがちょっとヤなんだけど

59:デフォルトの名無しさん
08/08/09 11:58:29
コレクションが必要な場合に必要なのは、コレクションのクラスではなくコレクションを持つクラスだというのをどこかで見た気がするんだがどこだったかな

確かにdataというような凡庸で他クラスと被りがちなアクセサ名しか思いつかなくてブルーになることはあるが、後者の癖をつけておいたほうがいい
あと委譲の人気の無さは異常

60:デフォルトの名無しさん
08/08/09 12:25:55
後者でも、委譲用のライブラリを使えばだいぶ楽に書けたような

61:デフォルトの名無しさん
08/08/09 12:36:13
Gallery is a Hashと言えるかどうか。
Hashをつかう任意の場所にGalleryを使えるか。


62:デフォルトの名無しさん
08/08/09 13:49:14
委譲の解説は「なぜ委譲が好ましいのか(他の方法ではよろしくないのか)」という説明がすっぽり抜けてるものばかりだ
あれではどう頑張っても広まらんよ

63:デフォルトの名無しさん
08/08/09 14:18:12
Rubyだけをやってると委譲はなかなかピンとこない
アクセサメソッドの中で他オブジェクトを動的にnewすれば用が足りたりするからな
他の言語やるといいぞ

64:デフォルトの名無しさん
08/08/09 14:57:34
るびま URLリンク(jp.rubyist.net) の例を使うが、確かに

require 'forwardable'
class MyQueue1
extend Forwardable
def initialize; @q = Array.new; end
def_delegator :@q, :push, :enq
def_delegator :@q, :shift, :deq
def_delegators :@q, :push, :shift, :size
end

class MyQueue2
def initialize; @q = Array.new; end
def push(*e); @q.push(*e); end
def shift(*e); @q.shift(*e); end
def size(*e); @q.size(*e); end
alias :enq :push; alias :deq :shift
end

class MyQueue3 < Array
alias enq push
alias deq shift
end

[MyQueue1.new, MyQueue2.new, MyQueue3.new].each do |q|
q.enq 1, 2, 3, 4, 5
q.push 6
p q.size
end

の3つは、どれも6を表示はするな

65:デフォルトの名無しさん
08/08/09 15:09:38
MyQueue3 を見て「Arrayのメソッドが全部使えるなんていざというとき便利そうだ」とか思った俺
まあ、1と2で attr_accessor :q してくれてればメリットもなくなるか
でもまさか、@q を公開なんてしないよな?

66:デフォルトの名無しさん
08/08/09 15:49:24
そもそも#shuffle!とかを許すキューってどうなのよw
Arrayを継承となると、Arrayが公開する100近くのメソッドについて
責任を持たないといけなくなる。お手上げだ

67:デフォルトの名無しさん
08/08/09 16:05:35
責任も何も「自由に使ってください。」じゃダメなん?

68:デフォルトの名無しさん
08/08/09 16:20:32
>>67
確かにごく最初は「マニュアルに書いとけばいいんじゃね?」「たくさん定義されてても使わなければ無問題だろ」だった
でもそれじゃ駄目だということがわかってきたので責任(Responsibility)という概念が生まれたわけで

無理して今から字面を理解しなくても、そういえばなんか煩いこと言われてたな程度に覚えておけばいい
オブジェクト指向プログラミングをやっていれば、ほぼ確実にこれ関連で火傷をする日が来るから
自分の作ったものが火傷したり破綻したりして初めて理解できたといえるシロモノなんで、まああまり考え込まないことだ

69:デフォルトの名無しさん
08/08/09 16:48:05
require 'delegate'
foo = SimpleDelegator.new([])
foo.push(1)
foo.push(2)
puts foo.size #=> 2

これって foo = [] のほうが便利じゃね?

70:デフォルトの名無しさん
08/08/09 17:43:57
>>52
RGSSでやっていることを一般のゲームでもやりたいという話です。

>>54
いや、まあそういうことなんですが、
元のRubyソースに手を加えて
requireやってるところを置き換えるっつーことでよろしい?

71:デフォルトの名無しさん
08/08/09 18:38:49
答えてないぞ
どこまで隠したいのかはっきりしれ
Ruby知ってる人間がirbに読み込んで数行書いたら読めてしまうものでもいいのかどうか

72:デフォルトの名無しさん
08/08/09 19:16:45
String#% って、Hashをとれないんだっけ?
"name: %(name)s, age: %(age)d" % {:name=>'Hoge', :age=>20}
みたいな感じでやりたいんだけど。

73:デフォルトの名無しさん
08/08/09 19:19:47
>>72
ruby-gettext-packageでそんな感じの拡張をしている。
www.yotabanana.com/hiki/ruby-gettext-api.html?ruby-gettext-api#class+String


74:デフォルトの名無しさん
08/08/09 19:23:09
あ、単なる埋め込みなので、to_sでは間に合わない凝った文字列化が必要なら、
ハッシュの値のほうを '%03d% % age みたく別途フォーマットする必要がある。



75:デフォルトの名無しさん
08/08/09 19:33:17
>>71
できれば、ちょっとしたそのようなクイックハックは避けたいのですが、
その程度ならどのような方法があるものでしょうか?

76:デフォルトの名無しさん
08/08/09 20:05:26
BASE64でエンコードするとかすればいいんじゃね

irb> eval "Y2xhc3MgSG9nZTsgZGVmIHN0cjsnSGVsbG8sV29ybGQhJztlbmQ7ZW5kO3B1\ndHMgSG9nZS5uZXcuc3Ry\n".unpack('m')[0]
Hello,World!


77:デフォルトの名無しさん
08/08/09 20:38:02
ちょっとしたスクリプト作るのにも何日もかかる自分が若干イヤになるな

78:デフォルトの名無しさん
08/08/09 20:43:18
>>77
作業環境が悪いんだよ! エディタとか!

79:デフォルトの名無しさん
08/08/09 20:52:37
>>78
なるほど!周りのせいじゃ仕方ないな!

まあ趣味個人とはいえさすがにいまどき putty + Emacs + ruby-mode + RCS だけなのはねーよとは思うんだが
もうちょっと便利で安楽な感じにスクリプト書きたいです

80:デフォルトの名無しさん
08/08/09 21:05:52
emacs + ruby-mode以外いいのあるんかい??
RadRails(eclipseのやつ)とかいろいろためしてみたが、軽さがたりねー

81:デフォルトの名無しさん
08/08/09 21:20:30
+ QX9650 すれば快適になるよ

82:デフォルトの名無しさん
08/08/09 21:44:40
NetBeansのRubyパッケージは結構いいかなと思ったり
JRuby、Rake、Gems、RSpec、ruby-debugとか、標準で一揃い統合されてる

83:デフォルトの名無しさん
08/08/09 22:38:18
ねっこはあれでもまだ重くてなあ
まだ重いっていうかこれ以上軽くなる理由もないんだが(w

ところで、なんで重いの?

84:デフォルトの名無しさん
08/08/09 22:47:51
てかWindowsのRubyはあまり使いたくないんだが…

85:デフォルトの名無しさん
08/08/09 22:55:47
そんなん、ごっついエディタとしてだけ使えばいいじゃん

86:デフォルトの名無しさん
08/08/09 23:23:28
Linuxでも使えるけど

87:デフォルトの名無しさん
08/08/09 23:25:00
Emacs使ってる人にIDE勧めても色々な意味で無駄

88:デフォルトの名無しさん
08/08/09 23:27:46
Emacs/gvimユーザーの半分くらいの人はRubyのあるマシンにターミナル経由でログインして使ってるんじゃないかね
>>79にPuTTYがあるのが象徴的というか

89:デフォルトの名無しさん
08/08/09 23:39:18
ruby-electric.el がもうちょっとなあ

90:デフォルトの名無しさん
08/08/09 23:42:38
Javaするときくらいだな。IDE。それでも外部エディタはemacs
IDEつかってるのは、仕事先と同じ環境でつかいたいってだけの理由だが。

91:デフォルトの名無しさん
08/08/09 23:46:05
あと作業領域の広さかなー。
Emacsつかってる椰子は、メニューなんか全部みせてないだろうし。
トーパルズはviを5ターミナルくらいで開いてかいてるだっけか。


92:デフォルトの名無しさん
08/08/09 23:54:44
仕事場でもLinux使うがね
C#とかじゃないなら足る

93:デフォルトの名無しさん
08/08/09 23:59:36
>>91
下3行(Emacsバッファ説明・Emacsミニバッファ・GNU screenのバー)以外は全部エディタ領域だからな
IDE使ってみて「ぷろじぇくと」とかいうのが画面の左半分を占拠したときはビビった
みんな画面広いんだな

94:デフォルトの名無しさん
08/08/10 00:43:23
>>89
rcodetoolsを全開で使うんだ
なんか補完する度にHDDが動いてる気がするが気のせい

95:デフォルトの名無しさん
08/08/10 03:18:08
ねとびんかわいいよねとびん

96:デフォルトの名無しさん
08/08/10 04:00:07
emacs-lispのrubyラッパーかいて、Rubyでも設定できるように
してくれたらーーー、学生の時みたいに時間あればなー
スーパーHaXする椰子がでてきたら はじまるのに。。。

97:デフォルトの名無しさん
08/08/10 06:34:45
>>80
NetBeans使っているけどなかなかいいよ。

RubyGemsは1.2まだ非対応で固まるけどw

>>93
うちはフォント小さくして、狭い画面で書いてますw

98:デフォルトの名無しさん
08/08/10 06:37:32
>>96
- Summary
Ruby製のテキストエディタ

- Features
o scripting in any language
o macro recording and playback
o multi-element clipboard
o multi-level undo
o parsed ("smart") indentation
o customizable multilingual syntax highlighting, with support for embedded languages (e.g. PHP, eRuby, Javascript)
o bookmarking, named and unnamed
o regular expression searching
o a customizable status line
o limited ctags support
o hooks

- Reference
purepistos.net - Diakonos
URLリンク(purepistos.net)

- via
MOONGIFT - Diakonos
URLリンク(oss.moongift.jp)

MOONGIFT - Diakonos レビュー
URLリンク(oss.moongift.jp)

99:デフォルトの名無しさん
08/08/10 06:39:08
MOONGIFTリンク修正

MOONGIFT: ≫ Diakonos:オープンソースを毎日紹介
URLリンク(www.moongift.jp)

MOONGIFT: ≫ Diakonos レビュー:オープンソースを毎日紹介
URLリンク(www.moongift.jp)

100:デフォルトの名無しさん
08/08/10 07:06:55
>>96
el4r

101:デフォルトの名無しさん
08/08/10 10:30:41
emacsユーザーならわかるとおもうが、もどきじゃだめなんだよ。もどきじゃ。


102:デフォルトの名無しさん
08/08/10 12:15:31
emacsユーザーってemacsしか使えなさそうで不幸だと思う

103:デフォルトの名無しさん
08/08/10 12:57:07
>>102
それには適当なIDEやエディタの名前を入れても成立するということが歴史的に知られている

104:デフォルトの名無しさん
08/08/10 14:12:42
OS入れても成立する

105:デフォルトの名無しさん
08/08/10 14:57:13
>>94
> rcodetools
ほう
検索するたびに2秒くらい止まるんだが日本語解説サイトとかないんかね

106:デフォルトの名無しさん
08/08/10 15:09:03
ホント俺ってLinux以外使えないんだよね

107:デフォルトの名無しさん
08/08/10 15:14:28
機能だけでなくバックグランドに流れている”歴史”も引きずってるからなぁ
xemacsに一時期ながれていたが、歴史の差でemacs使うようになったな。おれは


108:デフォルトの名無しさん
08/08/10 15:17:41
Windowsを「使えている」人なんてごくひと握りだ
レジストリやcompmgmt.msc、NETコマンドやActiveDirectoryをいったいどれだけの人が理解してるやら
気にするな

109:デフォルトの名無しさん
08/08/10 17:50:55
Windowsは、まっとうな人なら、使いこなすことに抵抗あるんだよ。

110:デフォルトの名無しさん
08/08/10 19:12:45
お前らの好きなMacやLinuxが罵倒されたら嫌だろ。
ならWindowsへの皮肉は、ポケットにしまいこんでおくんだ

111:デフォルトの名無しさん
08/08/10 19:56:16
でも、Windows に愛着を感じてる人って少なくない?
相対数どころか絶対数でもMacに負けてる気がする。

112:デフォルトの名無しさん
08/08/10 20:53:54
ていうか>>110は何もわかってないんだよ

113:デフォルトの名無しさん
08/08/10 21:01:04
そんな感じはするが、まあ空気みたいなもんだからね
あって当然。普通に使う分には縁の下は意識しない
MSの最大公約数的な設計もあって、特に面白みというか個性があるわけでもないと

114:デフォルトの名無しさん
08/08/11 00:41:42
attrの単純なアクセサが15個くらいどさっとある特定目的用クラスがあるんだが
なんか微妙に多くて微妙に筋がよくないような気がしてならない
うまく減らす方法はあるだろうか

115:デフォルトの名無しさん
08/08/11 01:51:12
>>114
設計がおかしい可能性はないか?
単純なアクセサだらけのクラス自体、責務を切り分けられていないように思える。

116:デフォルトの名無しさん
08/08/11 05:00:45
事務職(時給800円)なんで、俺は、会計処理の計算ぱぱっとためしたいとき、Rubyつかうけど、
15のアクセくらいなら、普通にありえるな。
会計DBのテーブルが15以上フィールドもってるっていう設計されてるときとか。



117:デフォルトの名無しさん
08/08/11 06:48:58
いくつかの機能をまとめて内部クラスを作ってそこのクラス変数にすればよい

118:デフォルトの名無しさん
08/08/11 07:23:42
PHPでファイルに文字列を追加するプログラムを書いていたのですが、
LFSに対応していないようで、2G以上になるとエラーになりました
Rubyで扱える最大ファイルサイズはどのくらいですか?

119:デフォルトの名無しさん
08/08/11 08:33:44
Ruby1.8/1.9自体は2GBより大きなファイルを扱えたはず(Windowsでは無理)
ただ、思いっきり意識してスクリプト作らないとメモリに2GB全部読み込むぞ

120:デフォルトの名無しさん
08/08/11 08:49:05
>>114
扱うのめんどくさいという話だと思うんで、ハッシュにまとめておく

121:デフォルトの名無しさん
08/08/11 17:06:49
携帯電話から入力されたメッセージを、txt形式で鯖に貯めたいです。
一行掲示板なるものを見つけて書いてみたけど、
URLリンク(www.skuare.net)
書き込まれた内容は文字化けして読めんとです。
au、ソフトバンク、docomoなど各キャリアから書き込みたいなら、
エンコードを何とかしろという話だと思いますが、よくわかりません。
どう書けば文字化けせずにテキストを貯めておけますか?

122:デフォルトの名無しさん
08/08/11 17:31:52
携帯電話のフォローをするgemは聞いたことがないなあ

とりあえず携帯電話の機種ごとのWeb通信および文字エンコードと独自文字領域についての知識が必要
これはRuby全く関係ないので自力でやってくれ

123:デフォルトの名無しさん
08/08/11 17:42:24
偏見だけど、はてなブックマークで5users以上にすらなってないRuby関連記事はそもそも信用したらあかんよ
自分に合わせてゼロから作ったほうがまだ安心できる

124:デフォルトの名無しさん
08/08/11 18:10:54
>>123
めちゃくちゃ偏見じゃねーか

まあしかし件の記事は自分専用のスクリプトだしな
他人や他機種のことは全く考えられてない

125:デフォルトの名無しさん
08/08/11 21:18:46
URLリンク(jpmobile-rails.org)
あ、Railsじゃないのか。

126:デフォルトの名無しさん
08/08/11 21:31:51
Ruby/Tk について質問です。

ひとつのアプリで複数のウィンドウを開きたいんですが、TkRoot のウィンド
ウから別のウィンドウをいくつも開くにはどのクラスを使えばいいでしょうか?

試しに TkToplevel.new でウィンドウを作ってみたら、ウィンドウ自体は開く
もののその上に置いたボタンとかのウィジェットがまったく表示されませんで
した。


127:デフォルトの名無しさん
08/08/11 21:41:06
>>125
jpmobileをrails依存な部分とそうでない部分に分けるという動きが
どっかであったのを見た。


128:デフォルトの名無しさん
08/08/11 22:05:41
>>126
Ruby/Tkのマニュアルくらいは斜め読みするんだ

129:126
08/08/11 22:39:13
>>128
Ruby/Tk はマニュアルとしてまとまった物がみつからないので、「Ruby アプリ
ケーションプログラミング」を参照しているんですが、よくわからないので困っ
てます。。。


130:デフォルトの名無しさん
08/08/12 00:11:16
githubから入れたgemの依存関係が解決できないです。
gemから見たときに、githubのgemは衝突回避のために username-projectname という形で
gemを提供しているのですが、あるgemで入れたソフトが
username-projectnameでなくて、projectname に依存しているという風に言ってきます。
このおかげで動かしたいgemで入れたソフトがエラーが出て動きません。

具体的には、↓ddollar-remember-the-ruby を入れようと思ったら、
ddollar's remember-the-ruby at master ? GitHub
URLリンク(github.com)
↓ddollar-preferences に依存するようなのですが(ソース確認した)、
ddollar's preferences at master ? GitHub
URLリンク(github.com)
実際には、素のpreferencesがインスコされてしまって、そっちが参照されてしまいます。
(gem install時も素のpreferencesの方が入ってしまう・・・)

ddollar-preferences を入れて、素の preferences を uninstall した状態で実行しても、

(ほげまげ)/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:578:in `report_activate_error': Could not find RubyGem preferences (>= 0.1.3) (Gem::LoadError)
from (ほげまげ)/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:134:in `activate'
from (ほげまげ)/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:158:in `activate'
from (ほげまげ)/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:157:in `each'
from (ほげまげ)/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:157:in `activate'
from (ほげまげ)/ruby/lib/ruby/site_ruby/1.8/rubygems.rb:49:in `gem'
from (ほげまげ)/ruby/bin/rtr:18
などといわれ、preferencesの方を見に行ってしまいます。
なんとかならないのかなあ・・・

131:130
08/08/12 01:04:11
ここみたら手動で入れられました。
Hoe dependencies - comp.lang.ruby | Google グループ
URLリンク(groups.google.com)

git clone git://github.com/ddollar/preferences.git preferences
cd preferences
gem install pkg/preferences-0.1.4.gem

一応これで目的のソフトは動きました。

しかしながら、これだと同じライブラリ名があるとバッティングしますね・・・。
それにgithubで他の人が作った同じライブラリが同時に入れられないw

そしてやはりというか、
 (ほげまげ)\ruby\gems\1.8\specifications\ddollar-remember-the-ruby-0.3.2.gemspec
の中の
 %q<preferences>
を全部
 %q<ddollar-preferences>
に置換しても動きます。(当然ですね)

問題はgithub内のそれぞれのユーザーのコードが、他のgithubのコードを
dependencyに追加する時にユーザー名まで入れるの?ということになりますね・・・

132:デフォルトの名無しさん
08/08/12 03:12:00
>>126
toplevel = TkToplevel.new
button = TkButton.new(toplevel,:text=>'push me').pack

基本はTkHoge.new(親部品、オプション)で親部品は省略するとTk.rootになる

ruby/tkはドキュメントが足りなすぎてtcl/tkを知らないと使い物にならない
今まで見た中では「逆引きRuby/Tk」(ググれ)のページが一番まともに使える

133:デフォルトの名無しさん
08/08/12 08:28:08
gem instal ほげほげ

のgemのインストールが高い頻度で固まるのですが私だけでしょうか?
コマンドプロンプトでCtrl-Cを押しても止まりません。
タスクマネージャでrubyを殺すしか手段はなくなります。
インストールは、5回に一度くらいしか成功しません orz

> gem -v
1.2.0

OS:Windows XP SP2

134:デフォルトの名無しさん
08/08/12 09:07:51
ASRだとしたら、自分と同じ症状だ。自分は今の最新にしたら治った。
次からはRubyのバージョンとかも書いてくれ。

135:133
08/08/12 10:00:05
>>134
すまそ。忘れてた
>ruby -v
ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32]

136:デフォルトの名無しさん
08/08/12 11:52:50
というかRuby/TKはTclでTkを知ってる人が使ってるもんだとばかり思ってた
RubyのGUIってそんなもんだからさ
「○○では××と書くようなことをRuby○○ではどう書くんですか?」という質問を希望

137:デフォルトの名無しさん
08/08/12 18:22:21
しつもん

PStoreありますよね
あれって、

PStore.new(path).transaction do |db|

とした時点で、db に該当するとこには pstore ファイルのまーしゃるな内容が完全に展開されてるんですよね?
data = db['hoge'] としてもメモリ的になんかいいことがあるとか何もないですよね?

138:デフォルトの名無しさん
08/08/12 18:40:46
>>137

unless read_only
file = File.open(@filename, RDWR_ACCESS)
...
content = file.read()
...
if content != ""
@table = load(content)
...
def load(content) # :nodoc:
Marshal::load(content)
end
...
def [](name)
in_transaction
@table[name]
end

ということで、答は YES
transaction した時点で、Ruby は pstore ファイル全体を Marshal でロードしたデカいオブジェクトをメモリに保持する
db[hoge] というメソッドは既に存在するそのデカいオブジェクトのハッシュへの参照に過ぎない
別名をつけるかどうかは読みやすさだけで決めてよし

時々「でかいpsotreに差分だけ追加」という効率的っぽいプログラミングをしてる人を見かけるが、
あれの本当の動作は「全部引き出してフルサイズ復元してちょっと付け足してまた全体を必死で変換してディスクに書き込む」だ

139:デフォルトの名無しさん
08/08/12 21:24:43
Rubyってこういうメモリを湯水のように使う処理結構多いよな

140:デフォルトの名無しさん
08/08/13 13:25:30
Rubyで外部コマンドに頼らなくてはならなくなりました
んで、質問です

data.each do |param|
`command #{param}`
end

は、dataの数だけ毎回シェルを起動して終了してますか?
複数のデータそれぞれに対してコマンドを使用したい場合は

sh = Shell.new
data.each do |param|
sh.system("command #{param}")
end

としたほうが、起動するシェルは1個で済んだりしますか?

141:デフォルトの名無しさん
08/08/13 13:37:19
 > によるリダイレクトや | によるフィルタとか使わない限りおおむね YES のようだ
外部コマンド使えば速くて済むもんね、と考えてのことなら前者は無駄が多いかもしれん

142:デフォルトの名無しさん
08/08/13 15:15:25
% ruby -rshell -e "sh = Shell.new; 5.times do |i| sh.transact do p system('echo -n \$\$') end end"
58045
58046
58047
58048
58049


143:デフォルトの名無しさん
08/08/13 17:12:14
いやそんな例出されても
transactって名前そのまんまだし

144:デフォルトの名無しさん
08/08/13 21:32:04
Shellって言えば

irb> require 'shell'
irb> sh = Shell.new
irb> sh.verbose = false
irb> sh.cd('/')
shell: current dir: /

って、verbose を偽にしても notify でログが表示されるのはなんでなんだぜ?

145:デフォルトの名無しさん
08/08/13 21:34:42
>>140
exec使えよ

146:デフォルトの名無しさん
08/08/13 21:50:58
>>145
試行錯誤中のirbが途中で終了した
責任は取ってもらうからな

147:デフォルトの名無しさん
08/08/13 21:54:15




スレで見たものをirbで何でも試すから…

148:デフォルトの名無しさん
08/08/13 23:56:18
irbが終了した責任はirbの再起動で取るよ
ってことで、sshでログインしてやるから、
IP,ID,PASS晒せや

149:デフォルトの名無しさん
08/08/14 07:30:03
素朴な疑問なんだけど
破壊的メソッドって自分で定義して追加することは可能?


150:デフォルトの名無しさん
08/08/14 07:40:10
>>149
追加できないかもしれないと思った理由は?

151:デフォルトの名無しさん
08/08/14 07:51:44
! がついてるからシステム的に特殊なものだと思ったんじゃないかね
! つきも ? つきも = つきも普通に定義できるぞ

152:149
08/08/14 08:41:50
たとえばStringで文字列の末尾に"foo"を追加する破壊的メソッドの定義って
どう書けば良いのでしょう?

153:デフォルトの名無しさん
08/08/14 08:49:35
class String
 def append_foo!
  self << "foo"
 end
end

s = "hoge"
s.append_foo!
p s

154:デフォルトの名無しさん
08/08/14 16:04:08
予定表作ろうと思うんだ
うん、Webカレンダーアプリケーションみたいなの
その日のデータ登録は自分が(コマンドラインまたはCGIで)やるだけなんだけど、結果はHTMLとして公開したい
いい感じのデータ構造をもつクラスとHTML書き出しクラスを持つライブラリとか都合よくないかな?

155:デフォルトの名無しさん
08/08/14 16:36:08
>>154
そんなんライブラリはないけど
rails本に幾らでも例題あるがな

作らんでもカレンダーウェブサービスも沢山あるし

156:デフォルトの名無しさん
08/08/14 16:47:29
ディレクトリ名の最後のデリミッター("/")を削除する、簡単な方法ってないですか?
もしくは考慮して、"/"がなかったらつけてくれる関数なんかありませんでしょうか?

File.dirname(dir) ってやると "hoge/moge/" が "hoge"になってしまって、
かなり期待と反対の動作なんですが・・・("hoge/moge"がほしい)

157:デフォルトの名無しさん
08/08/14 16:49:23
各日のイベント自体がパブリックなものなら
Google Calender か Yahoo! カレンダーに適当に登録してカレンダーを公開、が妥当な気がする
データ型についてはまあ類似例を見て研究するということで

158:デフォルトの名無しさん
08/08/14 17:00:21
>>156
/foo/bar という文字列があったとして、 bar がファイルなのかディレクトリなのかは
実際に(HDDの)ファイルシステムにアクセスしないとわからないから、ある意味無理

というか、そんな不完全で不安定なディレクトリパスが欲しい理由って何?
そういうのが必要な場合の多くは必ず File.join でディレクトリとファイルを連結するようにすれば用が足りる
ディレクトリの最後にスラッシュがあろうがなかろうが、問答無用でディレクトリとみなして連結してくれる

もし、外部コマンドに渡すディレクトリ文字列を Ruby で作らなきゃいけないんだとかいう場合は
require 'pathname' したあと Pathname#realpath 使え

159:デフォルトの名無しさん
08/08/14 17:16:35
>>158
レスありがとう
実際にはFileTest.directory?などでディレクトリチェックをしています。

そうです。Dir.globとかに渡すときに、適当に渡されたパスに "*.hoge"とか "**/*.moge"とかを
くっつけたかったのです。最初から情報を中田氏にしたことを詫びします。
File.joinを使うのですね。
やってみます。

160:156
08/08/14 17:18:32
>>158
File.joinで無事にできました!
お騒がせしました。
エスパーありがとうございました。

161:デフォルトの名無しさん
08/08/14 17:47:14
たまに見かける
 # :nodoc:
という記述はなんなんでしょうか?
ドキュメント生成ツールか何かようのフラグ?

162:デフォルトの名無しさん
08/08/14 17:48:46
>>161
ActiveRecord (1) -- construct_sql - Ruby on Rails 研究 - Ruby on Rails with OIAX
URLリンク(www.oiax.jp)

> その右にある #:nodoc は、RDoc の修飾子(modifier)の一種です。RDoc は、
> Ruby ソースコードからドキュメントを生成するプログラムです。RDcoc は
>この修飾子が添えられたクラスやメソッドをドキュメント生成の対象から外します。

RDoc用なのですね。
ありがとうございました。

163:デフォルトの名無しさん
08/08/14 19:15:23
Windowsのファイル名の区切り文字(バックスラッシュ、円記号)は、
Dir.globに渡しても動作しません。
スクリプトなどの引数などから指定された場合、
単純に置換する以外によい簡潔な解決策はないでしょうか?

164:163
08/08/14 19:27:59
>>158で出ていた pathname と Pathname#realpath でいけました!
Pathname("hoge\mage\")は、Pathname#realpath で "hoge/mage/"になってくれました。

ありがとうございました。

165:デフォルトの名無しさん
08/08/15 01:14:07
↓なんで?

s="#&32;12:34"
/[\s(?: )](\d{2}):(\d{2})/=~s
p $1,$2   # => 12, 34

Regexp.new("[\s(?: )](\d{2}):(\d{2})")=~s
p $1,$2   # => nil, nil

166:デフォルトの名無しさん
08/08/15 02:33:56
"#&32;12:34" は "#&32:12:34" の間違いだよな?

p Regexp.new("[\s(?: )](\d{2}):(\d{2})")
p /[\s(?: )](\d{2}):(\d{2})/

これを実行すりゃ分かる。

167:デフォルトの名無しさん
08/08/15 09:54:35
ruby_1_8 と ruby_1_8_7 とはどう違うんでしょうか?
ruby_1_8 は次 (今だと ruby_1_8_8) の候補、みたいな感じ?

168:デフォルトの名無しさん
08/08/15 11:03:55
それの名前を付けた人のポリシーによる
つまり、ソフトウェアパッケージのポリシーとか

一般的には、 1.8 とだけ書かれたものは 1.8 のうち最新版のものへのエイリアスだ
1.8.7 が用意されていれば 1.8.7 、まだ用意されてなくて 1.8.6 だけなら 1.8.6

169:デフォルトの名無しさん
08/08/15 15:27:37
require 'tk'
l = TkLabel.new(:text=>'0').pack
b = TkButton.new(:command=>proc{

TkAfter.new( 100, 1, proc{
l.text=l.text.to_i+1
Tk.event_generate(b,'Button-1')
Tk.event_generate(b,'ButtonRelease-1')}
).start

}).pack
Tk.mainloop

一定間隔でラベルの数字が増え続けるようにしたかったのですが、
実際やってみると、途中で不規則に止まってしまいます。
原因と解決策(できればイベント強制発生のループの形は残したままで)を
ご教示お願いします。



170:デフォルトの名無しさん
08/08/15 16:26:00
>>169
Enter->ButtonPress-1->ButtonRelease-1(->Leave)

171:デフォルトの名無しさん
08/08/16 00:53:38
TCPSocketでサーバからデータを受け取る際
リアルタイムに取得済みバイト数を得る方法はありませんでしょうか?

現在は
・サーバ側: writeでソケットに渡す
・クライアント側: readでソケットから受け取る
データ自体は問題なく受け取れています

どうやら受け取ったデータはソケットのバッファ?か何かに書いているようで
そこをリアルタイムに覗く方法が分かりません

参考になるものやヒントなどがあればよろしくお願いします


172:デフォルトの名無しさん
08/08/16 01:03:19
>>171
普通覗かない覗けないから、rubyでreadできた分を
取得済みと考えていいんじゃね?

173:171
08/08/16 01:27:26
>>172
readできた分となると
全て取得した後のサイズしか知ることができないようなのです

ごめんなさい ちょっと紛らわしかったかもしれません
必ずしもバッファを覗く必要はありません
リアルタイムに取得済みバイト数さえ取得できれば方法は問いません

バッファが覗けないとなると別の方法ですね・・・


174:デフォルトの名無しさん
08/08/16 03:23:59
>>173
readpartialで少し筒読みながら自分でサイズ管理

175:デフォルトの名無しさん
08/08/16 04:16:24
>>173
よくわからんのは、
取得ってどこまで来たのを取得データと捉えたいんだ?

176:171
08/08/16 09:21:25
>>174
readpartialですね
試してみます

>>175
どういう答え方が正しいのか分からないのですが
ソケットまで来ていれば取得済と考えています


177:171
08/08/16 22:02:54
readpartialで解決できました
ありがとうございます

178:デフォルトの名無しさん
08/08/17 15:32:40
URLリンク(www.aoky.net)

179:デフォルトの名無しさん
08/08/17 16:41:49
ああそうか夏休みか

180:デフォルトの名無しさん
08/08/18 02:30:09
el4rは動作が怪しい

181:デフォルトの名無しさん
08/08/18 11:56:16
Rubyで使われてるフォントって何?欲しいんだけど

182:デフォルトの名無しさん
08/08/18 11:59:12
……よーわからんが、このロゴに使われてる字体のことか?
URLリンク(www.ruby-lang.org)

183:デフォルトの名無しさん
08/08/18 12:11:12
ああ、すまんそういうことじゃなくて

URLリンク(www.ruby-lang.org)

ここの「Rubyとは」ってとこの横のエディタ画像のフォント

184:デフォルトの名無しさん
08/08/18 12:16:12
画像じゃない気がするんだが…

#code div {
display: block;
font-family: "Lucida Console", Monaco, monospace;
padding-left: 24px;
padding-right: 24px;
}

って書いてあるんで、君のパソコンに入ってるLucida ConsoleかMonacoかmonospace
あるいはmonospaceファミリーに設定されてるフォントで勝手に表示されてる

185:デフォルトの名無しさん
08/08/18 12:18:01
欲しいも何も既に持ってるってパターンだな

186:デフォルトの名無しさん
08/08/18 12:23:00
>>184
画像じゃなかったのか…ありがとう

187:デフォルトの名無しさん
08/08/18 12:34:18
irb> say = "I love Ruby"
irb> say['love'] = "*love*"
irb> puts say.upcase
I *LOVE* RUBY

なんぞこれ

188:デフォルトの名無しさん
08/08/18 12:36:25
>>184
あ、でもこれ日本語対応してないのか…くぅ、使いたかった

189:デフォルトの名無しさん
08/08/18 12:43:37
Hpricotって1.9に対応する予定ってあるんですか?

190:デフォルトの名無しさん
08/08/18 12:43:39
xyzzyとかはASCIIと日本語を別々のフォントに指定できるぞ
xyzzy使わざるを得なくなるのが難点か

もしWindowsXP以降(2000でもフォントによってはできる)を使ってるならFontLink機能を使う手もある
「どう考えても英字フォントを指定してるだけなのになぜか日本語も表示できる謎機能」を自力で利用する

191:デフォルトの名無しさん
08/08/18 12:49:12
>>190
kwsk

192:デフォルトの名無しさん
08/08/18 13:06:35
1.9は

 ・誰でもgem含めて完全に1.9のライブラリだけを使って動作するようにインストールできるよガイド

があれば対応が増えると思う
現状の1.9は「1.9に乗り換える」という覚悟がないとそもそもインストールしにくい
make install するとgemごとユーザーディレクトリにインストールされるような親切セットが欲しい

>>191
ぐぐってレジストリ書き換えろ

193:デフォルトの名無しさん
08/08/18 13:14:14
gem開発者はRubyに関してちょっと詳しいだけであって、
その他のことに関しては素人に毛が生えた程度だと思ったほうがいいよな
自分用Rubyと際新安定版RubyとRuby1.9の3つくらいは維持しないといかんわけで
それに対するフォローはあっても面白いかもしれん

194:デフォルトの名無しさん
08/08/18 13:56:07
PerlでいうことろのTemplate ToolkitやFillInFormみたいなモジュールはありますか?

195:デフォルトの名無しさん
08/08/18 14:58:05
uri = "URLリンク(example.com?aaa=123&bbb=456&ccc=789)"

ここからquery param形式でURIをパースしてくれるものってあるでしょうか?
今は正規表現でパースしてますが面倒で…

196:デフォルトの名無しさん
08/08/18 16:03:24
query param 形式ってなんじゃらほい

irb> require 'cgi'
irb> require 'uri'
irb> uri = URI.parse('URLリンク(example.com?aaa=123&bbb=456&ccc=789)')
irb> p CGI.parse(uri.query)
{"aaa"=>["123"], "bbb"=>["456"], "ccc"=>["789"]}

こんなん?

197:デフォルトの名無しさん
08/08/18 18:06:11
>>194
あるはずだが、見つからないなあ

フォーム入りHTMLを自動生成して送る
      ↓
ユーザーがフォームを埋めて送り返してくる
      ↓
解析したが内容が不足または不当だった
      ↓
ユーザーの入力内容がフォームに記入された状態のHTMLを再度生成して再送


198:195
08/08/18 20:48:03
>>196
まさにその通りです
自分も書いた後に「query param形式」って変な表現だと思ってました
ありがとうございます!

199:デフォルトの名無しさん
08/08/19 00:24:58
JRubyを使ってSwingを叩いていてはまったのでどなたかお助けください。

Javaのクラス(具体的にはjavax.swing.event.MouseInputAdapter)を基底としてRubyのクラスを作りました。
そこで初期値を与えてnewしようとしたところ、
base.rb:24:in `__jcreate!': wrong # of arguments for constructor (NameError)
とのエラーが出てしまいます。

初期値を与えなければ正常に動作するため、Javaクラスを基底とするRubyクラスでは
初期化に工夫がいるのかと思い、調べてみたのですが、言及を発見することができませんでした。

どなたか回避方法、或いは他の原因に心当たりの方がいらっしゃいましたら教えてください。

200:デフォルトの名無しさん
08/08/19 00:34:00
>>199
コンストラクタの先頭でsuper()を呼べばいいんじゃない?


201:199
08/08/19 00:55:17
>>200
あうあ。どうもありがとうございます。
書き込み前にsuperを試したときにもsuperを括弧無しで呼んだ時には引数が引き継がれる、
というのを知らなかったので、二重にはまっていたみたいです。
明示的にsuper()を呼ばなければ引数引継ぎで自動的にsuperが呼ばれるのかしらん。
色々と調べてみます。どうもありがとうございました。

202:デフォルトの名無しさん
08/08/19 18:41:40
ruby script/server -p 80

このコマンドを実行し、ポート80を使っていたapacheを停止させたところURLリンク(localhost)でも接続できるようになりました。
これはapacheの代わりにmongrelが動いているということでしょうか。
初歩的な質問ですいません

203:デフォルトの名無しさん
08/08/19 19:28:29
Railsに関する質問はRailsスレで

204:202
08/08/20 01:20:53
ありがとうございます

205:デフォルトの名無しさん
08/08/20 17:58:01
rubyって
(2..0).to_a
ってしたらなんで[2,1,0]って配列を作ってくれないの?

そもそもRubyのRangeクラスって昇順しか認められてないの?

206:デフォルトの名無しさん
08/08/20 18:42:12
失敬な
降順だろうが昇順だろうがきちんと存在しマニュアル通りに動作するぞ
2.succ は 3 で 0 より大きいから each も即終了する

…まあ、Range#first > Range#end なときは
Range#each の中で逆方向の配列作ってくれてもいいじゃんという気は
全くしないわけではない

207:デフォルトの名無しさん
08/08/20 21:04:20
..はsuccを使うので、2.step(0, -1).to_aで我慢してくれ。


208:デフォルトの名無しさん
08/08/20 21:05:55
それくらいならreverseする


209:デフォルトの名無しさん
08/08/21 00:38:55
p (2..0).to_a # => []
p (0..2).to_a # => [0, 1, 2]

たしかに気分悪いなこれ


210:デフォルトの名無しさん
08/08/21 00:48:15
>>206の言う通り以外の何物でもない
> 2.succ は 3 で 0 より大きいから each も即終了
succ を辿る実装を変えるとは思えないから、each を書き換えるしかないな

211:デフォルトの名無しさん
08/08/21 02:44:59
そういえば1.9のString#succはなかなか変態らしいな。
次の意味のあるバイト列までいかに素早く進むか、みたいな。



212:デフォルトの名無しさん
08/08/21 11:06:44
akr氏のあれか

213:デフォルトの名無しさん
08/08/21 18:30:19
これか
cvs.m17n.org/~akr/pub/string-succ-rejectkaigi2008.pdf


214:デフォルトの名無しさん
08/08/21 19:54:18
initialize 内部で望ましくない動作をしている外部クラスがあります。
特定の引数 param2 のハッシュから特定のキー 'danger' に関連するペアを、
param2.delete('danger') のように事前削除すれば問題ありません。
クラスを利用するときの引数でいちいち削除すればいいんですが、
できれば同クラス名のクラス定義をスクリプト開始時にこっそり上書きすることで楽に済ませたいです。

最初

class Hoge
alias _initialize initialize
def initialize(param1, param2)
param2.delete('danger')
_initialize
end
end

と書いたんですが、これだと self が書き換わりません。いい方法はありますか?

215:デフォルトの名無しさん
08/08/21 22:31:12
どこのself

216:デフォルトの名無しさん
08/08/22 01:19:03
Net::HTTP を利用してるモジュールがあるんですが、中で

body = StringIO.new
http.request_get(uri.path){|res|
res.read_body {|part|
size += part.size
body.write(part)
}
}

としてる部分がありました(request_getはrequest_postのもあります)
どうせ最後には全部メモリに入るわけだし、ふつーに

body = request_get(uri.path).body
size = body.size

でいいと思うんですが、わざわざ細かく読み込んでるのは何か理由があるんでしょうか?

217:デフォルトの名無しさん
08/08/22 08:57:37
>>216
マルチスレッドのためじゃね?
最後は書いた人に聞かないとわかんないから、この質問はメーリングリストで聞いてみるのがいいだろうね。
書いた人はだれかしらんけど、たぶんメーリングリストは読んでいると思うよ。

218:デフォルトの名無しさん
08/08/22 11:19:47
Ruby1.8.6 と Ruby1.8.7 をうまく共存させる方法はない?
> lib/ruby/1.8/i686-linux/rbconfig.rb:7: ruby lib version (1.8.7) doesn't match executable version (1.8.6) (RuntimeError)

219:デフォルトの名無しさん
08/08/22 11:31:28
>>216
Net::HTTP の中でも同じような書き方をしてるから、それ自体は net/http.rb の改変コピペだと思う

で、>>215の言うように、net/http.rb での採用理由はたぶんマルチスレッドというかマルチタスクというかそんなのの対策だと思われる
たとえば、サーバからのファイルを HDD 上のファイルと同じノリで最初から最後までずーっとひと息に待ってると、
でかいファイルの場合はそれだけでタスクというかジョブがいっぱいになってしまう
一昔前のWindowsのフリーソフト(や現在のピーとかピーとかピーとか)に稀にあった、
ファイルをダウンロード中にビジーになって他に何もできなくなるヘボいフリーソフトのダウンローダーの動作を考えてもらうといい

220:デフォルトの名無しさん
08/08/22 11:34:11
>>219 の 215 は >>217 の間違い
ぶっちゃけ net/http にお任せしてればわざわざ自前でそんなとこまで意識して書く必要はないんだけど、
繊細動作させるダウンロードクラスでも作ってるのかな?

221:デフォルトの名無しさん
08/08/22 11:38:48
>>218
既にあった lib/ruby/1.8/ とかが新しくインストールした 1.8 系列で上書きされてるっぽい
lib/ruby/1.8.7/ って明示的に作れないんだっけ?
どっちにしても両方再インストールだな

222:デフォルトの名無しさん
08/08/22 11:57:48
>>221
configure --with-ruby-version=full

223:デフォルトの名無しさん
08/08/22 12:02:17
>>218
漏れは ./configure --prefix=/usr/local/ruby_1_8_6 とかやっとります。

224:デフォルトの名無しさん
08/08/22 17:32:27
現存するクラスを完全に上書きしたいです

require 'uri'
URI = nil
require 'my-uri'

とすると希望どおりの動作にはなりますが、
> warning: already initialized constant URI
という真っ当な警告が出てしまいます

225:デフォルトの名無しさん
08/08/22 17:40:00
質問なんだぜ

1. Array を継承する
2. @data = Array.new してから、@data をいじるArrayと同名のメソッドを完全自作
3. @data = Array.new してから、 @data に対してメソッドを委譲

細かいレベルの一般的実行速度で言えば 1 が一番速くて 3 が一番もったりだよな?
1 は微妙にキケンで 2 はめんどくさいから 3 をやる、という思考の流れでいいんだよね?

226:デフォルトの名無しさん
08/08/22 18:38:19
>>224
require 'uri'
class Object
remove_const :URI
end
require 'my-uri'

227:デフォルトの名無しさん
08/08/22 21:25:18
誰だこんな220行の建て増し温泉旅館メソッド書いたの

228:デフォルトの名無しさん
08/08/22 21:33:53
rubygemsには時々すごい変なソースが転がってる
まあインプットとアウトプットが妥当なら使うけどな

229:デフォルトの名無しさん
08/08/23 01:02:49
かなり間抜け気味の質問なんですが、net::SMTPでのメール送信て、
同一ドメイン内のメアドへの送信のみでしょうか。

メールフォームCGIでそのような動作になっていて、
外部のメアドに送信しようとするときに限りエラーになります。
エラーメッセージもでているのですが、なんとなく上記部分がひっかかったので、
詳細なしで質問させていただきましたm(_ _)m

230:デフォルトの名無しさん
08/08/23 01:36:31
外部にも送れるよ。


231:229
08/08/23 01:48:11
>>230
ありがとうございます!すっきりしました。
エラーを見てチェックしなおしてみます。

232:デフォルトの名無しさん
08/08/23 23:50:39
Keep-Alive と COOKIE が使える Web アクセス用のクラスで何か良いのあるかな?

httpclient は何でもかんでも RuntimeError になって不便だった。


233:デフォルトの名無しさん
08/08/24 02:19:53
gem の WWW::Mechanize が一応両方とも使える
gem isntall mechanize で Hpricot と一緒に入るはず

234:232
08/08/24 11:58:23
>>233
WWW::Mechanize って Keep-Alive 使えたのか…知らなかった。ありがと。

ただ、割と大きいファイルを落とすつもりなので
>>216 みたいにブロックが渡せるようなのが欲しかったんだけど、
WWW::Mechanize はパっと見無理っぽいですね、残念。

235:デフォルトの名無しさん
08/08/24 12:09:27
どこをどう「探した」のか気になる
ブロックなんてただのブロックなのに

236:デフォルトの名無しさん
08/08/24 12:24:12
いまさらだけど、>>216のコードでなんで「全部メモリに入る」んだ?
読み込んだ部分ごとに出力に書き出してるように見えるけど

237:デフォルトの名無しさん
08/08/24 12:27:50
>>220の通りで、Net::HTTPを利用している限りはソケットからfragment単位で読むからダウンロード負荷自体は問題にならない

「これまでのresponseをメモリ内で破棄しつつ最新のみIOに出力する」というダウンローダー芸はNet::HTTPではできないと思う
100MBのファイルを取得したら100MBのファイルはresponseの取得履歴としてメモリ内にどーしても一瞬保持されるはず

238:232
08/08/24 13:36:57
>>237 まぢで?
だとすると、ブロック渡しする意味は進捗状況の確認ができるだけってこと?

ちょっと net/http.rb の中見てみた限りでは、BufferedIO にも、ReadAdapter にも
読み込んだデータを保存しているような挙動は確認できなかった。
保存されるとしたら、どこに保存されてるんだろう。

実際、read_body にブロック渡した場合と渡さない場合で
HTTPResponse#body の挙動が変わるようだ

http = Net::HTTP.start("www.example.com", 80)
p http.request_get("/index.html") {|req| req.read_body{} }.body
# >> #<Net::ReadAdapter>

http = Net::HTTP.start("www.example.com", 80)
p http.request_get("/index.html") {|req| req.read_body }.body
# >> "<html><head>...."


239:デフォルトの名無しさん
08/08/24 17:58:12
YAMLの Anchor, Aliase でノードを参照する時に、
別の.ymlファイルのノードを参照するのって
どうすれば良いんでしょうか?

240:デフォルトの名無しさん
08/08/24 21:23:42
>>239
できない。
やるとしたら
s = ''
s << File.read('file1.yml')
s << File.read('file2.yml')
p YAML.load(s)
とするしかない。

241:デフォルトの名無しさん
08/08/24 21:24:42
>>236
>読み込んだ部分ごとに出力に書き出してるように見えるけど
部分的に書き出しても、書き出し先がStringIOオブジェクトだから
結局は全部メモリに入る。

242:デフォルトの名無しさん
08/08/24 21:27:30
>>224
>現存するクラスを完全に上書きしたいです
Rubyは既存クラスを自由に書き換え可能だから、「完全に上書き」する必要はないと思うけどなあ。
もしよければ、既存クラスを書き換えるのではなく完全に上書きしたい理由を語ってみてください。
なにか新しい発見があるかも。

243:デフォルトの名無しさん
08/08/24 22:58:02
module A
 def self.hoge
  puts 'Hoge'
 end
end

class B
 include A
end

これで A.hoge が B.hoge という形に mix-in されないのはどうしようもない?
継承だったらクラスメソッドも継承されるみたいなんだけど

244:デフォルトの名無しさん
08/08/24 23:30:15
>>243
こゆことがしたい?
module A
  def hoge
    puts 'Hoge'
  end
end

class B
  extend A
end


245:243
08/08/24 23:35:22
>>244
なるほど、そういうのもあるんですね。
ただ、A の中にインスタンスメソッドもたくさんあるんですが、何とかなりませんか?

246:デフォルトの名無しさん
08/08/25 00:30:26
委譲の考え方の基本がなんとなくわかった気がする

247:デフォルトの名無しさん
08/08/25 00:40:24
>>245
ええっと、どういう風に書きたいってこと?

248:243
08/08/25 01:14:50
module A
 def self.hoge # クラスメソッド
  puts 'Hoge'
 end
 def fuga # インスタンスメソッド
  self.class.hoge # self がどのクラスのインスタンスかによって変えたい
 end
end

class B
 include A
 # B は hoge を再定義するかもしれないけど、しなくてもいいようにしたい
end

b = B.new
b.fuga # B で再定義されていれば B.hoge、そうでなければ A.hoge が使われるようにしたい

# もしくは、
class C
 include A
 hoge # こういうふうにclassのコンテキストで呼び出したり・・・
end

だいたいこんな感じになってくれるとうれしいです。

249:デフォルトの名無しさん
08/08/25 04:31:05
こんちは
はじめてRubyでスクリプト書いてみました
下記コードでうまいこと画像を保存できたのですが、なぜかアニメーションGIFがぶっ壊れてます
RubyでアニメーションGIFを扱うことは不可能なんでしょうか
もし可能であればライブラリや書き方など教えてほしーです

require 'open-uri'
def main
  # ニコニコ動画の画像があるパス
  url = 'URLリンク(www.nicovideo.jp)'
  # 画像のパスを全部いれておくための配列
  image_url_list = []
  # ローカルの保存先のパス
  savepath = "D:/Data/IMG/"
  # URLの生成
  0.upto(10) do |i|
  image_url_list << url + "%03d" % i + ".gif"
    puts image_url_list
  end
  # 画像を保存
  image_url_list.each do |image_url|
    filename = File.basename(image_url)
    File.open(savepath + filename, "w"){|output|
      open(image_url){|data|
        output.write(data.read)
      }
      puts("#{filename} has saved.")
    }
  end
end
main

250:デフォルトの名無しさん
08/08/25 05:21:27
"wb"

251:デフォルトの名無しさん
08/08/25 05:30:51
うお すげぇ
朝っぱらからありがとうございます
バイナリモードっていうのがあったんですね

あざーっす!


252:デフォルトの名無しさん
08/08/25 07:53:27
>>243
こんな話?

irb(main):001:0> module M
irb(main):002:1>   def self.included(m)
irb(main):003:2>     m.module_eval do
irb(main):004:3*       def self.foo; p :foo; end
irb(main):005:3>     end
irb(main):006:2>   end
irb(main):007:1>
irb(main):008:1*   def bar; p :bar; end
irb(main):009:1> end
=> nil
irb(main):010:0> class C
irb(main):011:1>   include M
irb(main):012:1> end
=> C
irb(main):013:0> C.foo
:foo
=> nil
irb(main):014:0> C.bar
NoMethodError: undefined method `bar' for C:Class
        from (irb):14
        from :0
irb(main):015:0> C.new.bar
:bar
=> nil
irb(main):016:0> class C
irb(main):017:1>   foo
irb(main):018:1> end
:foo
=> nil

253:デフォルトの名無しさん
08/08/25 08:16:45
Rubyって日本語のファイル名を開けるの?

254:243
08/08/25 09:11:30
>>252
おー!include されるごとにメソッドを定義するわけですか。
それでいけそうです。ありがとうございます。

255:デフォルトの名無しさん
08/08/25 09:50:20
open-uriでurlを開いたら自動的にbodyも読まれてテンポラリファイルができてしまいます
headを読んで色々処理してからbodyを読むようにしたいんですけど
そういうのってnet/httpとか使って自作しないといけないんでしょうか

256:デフォルトの名無しさん
08/08/25 20:35:17
def config_file=(path)
h = YAML.load_file(path)
@username ||= h[:user]||h[:username]||h[:id]||h['user']||h['username']||h['id']
@password ||= h[:pass]||h[:password]||h['pass']||h['password']
end

使うキーくらいマニュアルに書いておけよ俺

>>255
はい
HEAD対応open-uriの改造をスクリプトの初めで上書きするモンキーパッチを誰かが作ってたと思ったが忘れた
とここまで書いてHTTPヘッダのことかいなと思う
まあどっちもたいして変わらんな
open-uriはFile.openが思想のベースなのでファイル読み込みは避けられないよ

257:デフォルトの名無しさん
08/08/25 20:41:55
「モンキーパッチ」ってそういう意味だったんだね。

258:デフォルトの名無しさん
08/08/25 20:52:07
>>257
Rubyではね
本来はゲリラパッチで、Rubyのようなシステム的に許されたなあなあのクラス上書きとはちょっと違う
代わりにduck punchingという言葉を使おうと言ってる人が一部にいるけど
本気でRailsの一部の人なので全く広まる気配はない

259:デフォルトの名無しさん
08/08/25 20:56:28
変数に結果を代入したいんだけど、三項演算子と1行if文ってどっちがいいかな?

260:デフォルトの名無しさん
08/08/25 21:01:33
s = (cond ? 'yes' : 'no')

s = if cond then 'yes' else 'no' end

s = if cond then
'yes'
else
'no'
end

if cond then
s = 'yes'
else
s = 'no'
end

まあ好きにせえ
3番目は微妙に嫌われてるということは知っておくといい
「Rubyのif構造は値を返す!!」とか興奮した初心者が多用するが冷静に読むと面倒だ

261:デフォルトの名無しさん
08/08/25 21:48:19
>>259
あるJavaの有名人が『三項演算子は難しい機能だからif文を使いなさい』といってた。
だからif文のほうがいいよ。
だって有名人のいうことだからね!

262:デフォルトの名無しさん
08/08/25 21:55:44
よく以下のような文を見るのですが、何のためにしているのでしょうか?

if __FILE__ == $0

263:デフォルトの名無しさん
08/08/25 22:02:40
>>262
そのif文の中はCで言うmainにあたるってとこかな

そこより上で定義したclassのテスト的なコード書いて
おいて、requireされた場合には実行させないための
おまじない


264:デフォルトの名無しさん
08/08/25 22:06:41
>>263
なるほど、そういうことか


265:デフォルトの名無しさん
08/08/25 22:07:34
>>264
>>263の補足というか、googleで、そのまんま "__FILE__ == $0" で検索して
トップに出てくるページを見ればいいと思うんだ。

初心者スレでググれ!って言うのは無し?


266:デフォルトの名無しさん
08/08/25 23:28:23
>>262-263

それは知らなかった。
勉強になった。
機会をくれてありがとう。


267:デフォルトの名無しさん
08/08/26 00:29:10
if 文の返り値を変数に代入するのは性に会わない
似たような感覚として、

 ・do ~ end ブロック
 ・map と inject を除く {} ブロック

の返り値を利用するのはなんかピンと来ない

268:デフォルトの名無しさん
08/08/26 00:39:09
rubyで日本語のファイル名使えるかどうか
速く回答しやがれ!

269:デフォルトの名無しさん
08/08/26 00:41:04
>>268
使ってみてから質問しろ。
あほか

270:デフォルトの名無しさん
08/08/26 00:49:51
まあ問題が起きてからその状況を質問してもらったほうがええな

271:デフォルトの名無しさん
08/08/26 00:53:35
実際にやってみて日本語名が使えない、という話なのか?
OS環境とか文字コードとか、状況を具体的に説明してごらん。


272:デフォルトの名無しさん
08/08/26 00:57:32
Perlで日本語のファイル名のファイルをopenできないから
rubyだったら開発者がジャップだからネイティブで対応してるかと
思って質問してるんです!!!

273:デフォルトの名無しさん
08/08/26 00:59:40
dllからデータを読み込むプログラムを書こうとしているのですが、
dl/structモジュールで構造体を入れ子にできないのですかねぇ?

そこの部分だけcharの配列で埋めて後で置き換えるしかないのでしょうか・・・

274:デフォルトの名無しさん
08/08/26 01:17:20
>>272
できる。
でもRubyよりも先に日本語の使い方と質問の仕方を勉強することをおすすめする。

275:デフォルトの名無しさん
08/08/26 07:20:54
「♥.txt」を開こうとしたら無理だったんだけど

276:デフォルトの名無しさん
08/08/26 07:36:19
windowsなら、ユニコードのファイル名は無理

277:デフォルトの名無しさん
08/08/26 08:03:16
Rubyをちょこちょこ最近書き始めた初学者です。
Excelの列番号をA1形式からR1C1形式へ変換するプログラムを書こうとしています。
A→1
AA→27
IV→256
てな感じで。

パッと思いついたコードとしては
require 'jcode'

num = 0
str = "IV"
str.each_char{|char| num = num * 26 + char.to_i(36)-"A".to_i(36) + 1}
p num #=>256

ですが、スマートじゃない気がしてなりません。
もっとスマートな書き方有りますでしょうか?
実行環境はWinXP、Ruby1.8.6です。

278:デフォルトの名無しさん
08/08/26 08:17:18
>>276
ユニコードは日本語じゃなとでも言いたいわけ?

279:デフォルトの名無しさん
08/08/26 08:28:52
inject(0) {|n, char| n * 26 + ... } くらいしか思いつかん。

あとは ('A'..'Z').to_a.index(char) で 0 .. 25 に変換とか。
# ところで require 'jcode' は全角アルファベット対応?


280:デフォルトの名無しさん
08/08/26 08:30:10
>>278
Windowsが異常なだけ。


281:255
08/08/26 08:31:03
>>256
そうっすか残念(・ω・)
net/httpなんて使うなとか言う記事みた後なんでちょっと二の足を踏んでしまいます

282:デフォルトの名無しさん
08/08/26 08:38:59
困ったことあったらpythonを使え

283:デフォルトの名無しさん
08/08/26 09:11:19
>>279
単にString#each_charがjcodeで拡張されてるメソッドなので入れなきゃ使えないだけで・・・。
injectについてちょっと調べてみます。ありがとございます。

284:デフォルトの名無しさん
08/08/26 10:22:25
>>277
('A'..'ZZ').to_a.index('IV') + 1

256

285:デフォルトの名無しさん
08/08/26 10:47:07
>>284
これは目からウロコ。
'A'..'ZZ'がZからAAに繰り上げしてくれるとは知らなかったです。
有難う御座いました。

286:デフォルトの名無しさん
08/08/26 10:55:45
これってやっぱりあの変態さに定評のあるsuccがバックエンドになってるのかな?

287:デフォルトの名無しさん
08/08/26 11:00:17
>>281
初心者は自分の手で作ることを嫌がったら駄目だぞ
だいたい、どんなことがなぜ望ましくないかなんて耳で聞いだだけじゃわからんじゃないか

Net::HTTPでgetとheadとpostをするのは基本
ラッパーメソッドを作るのも基本
ヘッダやクッキーの処理にも手を出して、うわ何これめんどくせー、となった時点で既存の外部ライブラリを探す
こうすれば、その外部ライブラリの中の挙動もある程度推測できるし、不足点やバグがあったときに対処もできる
最初から外部ライブラリだけを使ってしまったのではなかなかこうはいかない

ということで、gemで "httpclient" をインストールすれ
HEADリクエストにも対応している

irb> require 'rubygems'
irb> require 'httpclient'
irb> client = HTTPClient.new
irb> res = client.head('URLリンク(www.google.com)')
irb> p res.header['Location']
["URLリンク(www.google.co.jp)"]


288:デフォルトの名無しさん
08/08/26 11:03:19
>>286
irb> p "Z".succ
"AA"

   ___l___   /、`二//-‐''"´::l|::l       l! ';!u ';/:::l ', ';::::::l ';:::::i:::::
   ノ l Jヽ   レ/::/ /:イ:\/l:l l::l   u   !. l / ';:::l ', ';:::::l. ';::::l:::::
    ノヌ     レ  /:l l:::::lヽ|l l:l し      !/  ';:l,、-‐、::::l ';::::l::::
    / ヽ、_      /::l l:::::l  l\l      ヽ-'  / ';!-ー 、';::ト、';::::l:::
   ム ヒ       /::::l/l::::lニ‐-、``        / /;;;;;;;;;;;;;ヽ!   i::::l:::
   月 ヒ      /i::/  l::l;;;;;ヽ \             i;;;;;;;;;;;;;;;;;;;l   l::l:::
   ノ l ヽヽノ    /:::l/:l /;;l:!;;;;;;;;;',               ';;;;;;;;;;;;;;;;;ノ    l:l::
      ̄ ̄    /::::;ィ::l. l;;;;!;;;;;;;;;;;l            `‐--‐'´.....:::::::::!l
   __|_ ヽヽ   /イ//l::l ヽ、;;;;;;;ノ....      し   :::::::::::::::::::::ヽ /!リ l
    | ー      /::::l';!::::::::::::::::::::  u               ', i ノ l
    | ヽー     /イ';::l          ’         し u.  i l  l
     |       /';:';:!,.イ   し    入               l l U
     |      /,、-'´/ し      /  ヽ、   u    し ,' ,'  l
     |        /l し     _,.ノ     `フ"       ,' ,'  ,ィ::/:
     |       /::::::ヽ       ヽ    /     し ,' ,' / l::
     |      /::::::::::::`‐、 し      ',  /    u   ,、-'´  l,、-
     |      ``‐-、._::::::::::` ‐ 、     ',/       , -'´`'´ ,-'´
     |      _,、-‐'"´';:::::::::イ:l';:::` ‐ 、._____,、-‐'"´  u /
   | | | |    \ l::/ l::::::/リ ';:::::lリ:::::l';:::l l:l:::::l\  u /
   | | | |



289:デフォルトの名無しさん
08/08/26 11:08:10
succ大人気w

290:デフォルトの名無しさん
08/08/26 11:12:54
'z'.succ が "A" ではなく "aa" なのは変態でいいと思う
まあ 9.succ が 0 ではなく 10 なんだから予想の範疇ではあるが

'10'.succ が "11" なのも変態認定してよい

291:デフォルトの名無しさん
08/08/26 11:30:48
それは普通

292:デフォルトの名無しさん
08/08/26 11:43:37
'99'.succ が "100" になるのは変態

というか Ruby の succ への拘りは異常
succ を便利に使うのってどの言語由来?

293:デフォルトの名無しさん
08/08/26 11:50:38
perlの ++ -- 由来
rubyが異常なわけではない

294:デフォルトの名無しさん
08/08/26 14:29:46
特定サイトへの頻繁なWebアクセスのキャッシュ管理をDB的にやってくれるライブラリってないすかね
{URL => HTTPヘッダ} というハッシュを1個のpstoreに保存して、スクリプトの最初に完全に読み込んで使ってるんだけど、
もっといいのあるかな

295:デフォルトの名無しさん
08/08/26 14:41:59
>>294
初心者スレ的にはハッシュとPStoreでサイト用にカスタマイズするのが一番だと思う
マルチスレッドでアクセスされてPStoreが壊れそうならsqlite3とかでデータベース使え

Railsのどこかに何かあるような気もするが、たぶん超ごっついと思われ

296:デフォルトの名無しさん
08/08/26 20:29:54
alias suck succ

297:デフォルトの名無しさん
08/08/26 22:44:20
>>294
揮発してもかまわないなら memcached

298:デフォルトの名無しさん
08/08/27 02:07:50
ruby 1.8.7では
 [7,6,5].map.with_index{|x, i| x*i}
ができないので、かわりに
 [7,6,5].each_with_index.map{|x, i| x*i}
と、やるのを見かけました。

ならば inject.with_index 的な意味で
 [7,6,5].each_with_index.inject(0){|r, x, i| r+x*i}
と、できるのでは!と思ってやったところ、
 in `*': no implicit conversion from nil to integer (TypeError)
というエラーがでます。

色々試したところ
 [7,6,5].each_with_index.inject(0){|r, x, i| p x}
とやると
 [7, 0]
 [6, 1]
 [5, 2]
と出力されました。
injectの第2ブロック引数 には
[元配列の要素,インデックス] という配列が
渡されているようです。
(第3ブロック引数は何も渡されない)

なーんか、違和感があるんですけど、そんなことないですか?

299:デフォルトの名無しさん
08/08/27 02:34:14
>>298
[7,6,5].each_with_index.inject(0){|r, (x, i)| r+x*i}

300:デフォルトの名無しさん
08/08/27 18:02:07
rails2.1の入門教えてください

301:デフォルトの名無しさん
08/08/27 18:12:11
アバウトだのう

Rails初心者スレってないんだよね、そう言えば
需要が微妙だけど…

302:デフォルトの名無しさん
08/08/27 18:14:29
beginとendが予約語なので、範囲の開始と終了を表す変数名で困ってます
Rubyで一般的な開始と終了の変数名のペアってありますか?
文法ミスにならないようにbeginとendを慎重に使うというのは勘弁してください

303:デフォルトの名無しさん
08/08/27 18:21:47
Rangeクラスではfirst、lastが使われている

304:デフォルトの名無しさん
08/08/27 18:36:52
beginning-ending
opening-close(closing)
beg ed

305:デフォルトの名無しさん
08/08/27 20:21:49
start finish


306:デフォルトの名無しさん
08/08/27 20:27:06
finishはないわー

307:デフォルトの名無しさん
08/08/27 20:27:28
a z

308:デフォルトの名無しさん
08/08/27 20:50:19
仮引数では s と e をよく使う
が、文字列の s と 配列要素の e と被るのが難点

309:デフォルトの名無しさん
08/08/27 21:00:29
start と stop
@begin と @end

310:デフォルトの名無しさん
08/08/27 21:01:43
>>302
>範囲の開始と終了を表す変数名

from と to でいいような気がしてきた

311:デフォルトの名無しさん
08/08/27 21:12:25
from と to は変換が絡む処理に見える
ファイルの移動とか
文字列の変換とか

312:デフォルトの名無しさん
08/08/27 21:19:30
_beginと_endで

313:デフォルトの名無しさん
08/08/27 23:40:10
>>311
そんなことないと思うけどなー
変換が絡む処理なら src と dst (source と destination) だよ

314:デフォルトの名無しさん
08/08/27 23:41:41
ほほう
from,toじゃなくてsrc,dstかメモっとこ

315:デフォルトの名無しさん
08/08/27 23:52:09
srcとdstはC時代の遺物のような気もする
いや、フルスペルで書くと長すぎるが

316:デフォルトの名無しさん
08/08/28 01:18:47
dstは躊躇うけどdestだと受け入れてしまう気がする

317:デフォルトの名無しさん
08/08/28 02:27:59
ええー

318:デフォルトの名無しさん
08/08/28 05:26:58
src に「開始地点」以外の意図が多すぎるから、src - dst はピンと来ないなあ
dst と書かれていても何のことか悩んでググる自信がある

319:デフォルトの名無しさん
08/08/28 07:58:21
s(tart) - g(oal)
in - out
src -dst
from - to
begin - end

ruby - ?

320:デフォルトの名無しさん
08/08/28 08:23:45
b(egin) e(nd)
k(ey) v(alue) - ペア構造のキー値
r(et) e(lement) - reduce の 第一引数、第二引数

読んでもらおうという気が見えないコードが書けます

321:デフォルトの名無しさん
08/08/28 13:13:24
使えるのが Ruby だけというのもよくないと思うので、PHP5 の勉強も始める

うっひょーこの関数全部フラットでこのまま覚えるのクラスによるクラス分けとかないの
配列(ハッシュ)からペア取り除くのに unset($array['key']) って書かないといけないのね
ずっと前にちょっとだけ齧った Perl4 を思い出した

322:デフォルトの名無しさん
08/08/28 17:20:00
関数って普通フラットじゃね?
メソッドならレシーバいるけど

323:デフォルトの名無しさん
08/08/28 17:47:36
パッケージとか、名前空間に入れられることもあると思う

324:デフォルトの名無しさん
08/08/28 17:53:45
標準(添付・内部)ライブラリがRubyのように全部クラス構造になってて
配列は配列クラスのインスタンスで操作はメソッドを経由して行うとか言うことは確かにないな
PHP5はクラスを作れるが、内部は普通にPHP関数での遣り取りだ
インターフェースとしてのオブジェクト指向だね

325:デフォルトの名無しさん
08/08/28 18:18:09
質問です。

#!/usr/local/bin/ruby
print "Content-type: text/html\n\n"

require "csv"
csv = CSV.open('file.csv,'r')

csv.each_with_index do |line,n|

a[n] = line[0]
b[n] = line[1]
puts

end

print"<html><body>#[a]</body></html>"
print"<html><body>#[b]</body></html>"

csv.close

このプログラムをうpしたのですが内部サーバーエラーが出てしまいます。
自分では間違っているところが見つけられませんでした
どうすれば正常に作動するでしょうか。
回答お願いします。

326:デフォルトの名無しさん
08/08/28 18:32:58
~$ ruby -c test.rb
test.rb:5: syntax error, unexpected tIDENTIFIER, expecting ')'
csv = CSV.open('file.csv,'r')
^
test.rb:5: unterminated string meets end of file


327:デフォルトの名無しさん
08/08/28 18:33:35
file.csvのところのクォーテーションが足りない
aもbも初期化されていないので配列かハッシュを代入すると良い
#[a]でなくて#{a}
htmlタグは1度以上出力しないほうが良い

試してないけどぱっと見てこのぐらい
あといきなりCGIよりも一度コマンドラインで試した方がエラーが見えてわかりやすい

328:デフォルトの名無しさん
08/08/28 19:38:00
expectationsっていいんですか?
何か場当り的な網羅性の無いテストを推奨するような作りに見えるんですが

329:デフォルトの名無しさん
08/08/28 20:05:50
>>320
俺は reduce は acc(mulator) e(lement) が好きだな。
あ、もちろんコードにあわせて sumとかにすることもあるけど。

330:デフォルトの名無しさん
08/08/28 20:35:27
>>328
それは「あんな実行速度の遅いRubyのどこがいいのかわからない」という主張と同質だぞ

331:デフォルトの名無しさん
08/08/28 22:36:41
>>326,>>327

回答ありがとうございました。
次からはコマンドラインで一度試してみます。

332:デフォルトの名無しさん
08/08/29 06:33:27
小林と申します。

メーリングリストの利用自体がはじめてで、安易な行動をとり
皆様に不快な思いをさせてしまいましたこと、心からお詫び申し上げます。
大変申し訳ございませんでした。

333:デフォルトの名無しさん
08/08/29 06:34:15
I'm sorry . This is Test Mail
これはテストメールです。

334:デフォルトの名無しさん
08/08/29 08:52:27
信者としては
こんなバカでも使えるわかりやすいRuby♥
と、 宣伝材料にしたいところだ。

335:デフォルトの名無しさん
08/08/29 10:41:33
net/httpとWindowsのバージョンに関する質問です。
Ruby1.8.6+exerb最新版で固めたプログラム内でnet/httpを使用しています。
そのプログラムはVistaSP1とXPSP2では正常に動作しますが、XPSP3だと接続時に
「接続済みの呼び出し先が一定の時間を過、、、」と出て接続すらできない状態です。
なにかそのあたりの情報がありましたら、ぜひ教えてください。
宜しくお願いします。


336:デフォルトの名無しさん
08/08/29 15:27:37
>>335
rubyのせいとかOSのバージョンが違うせいとか考える前に、問題のマシンでちゃんとネットワークに繋がってるのか調べた方がいい。
プロクシなしで普通にブラウザで外が見えるのか、とか。


337:デフォルトの名無しさん
08/08/29 19:48:45
>>295
sqliteより、RubyレベルでまーしゃるしたHashのほうが速くて便利だと思う

338:デフォルトの名無しさん
08/08/29 22:11:31
質問です

Webブラウザのように実際的な短時間でサムネイル画像を取得したいです
1個ずつサムネ画像URLをアクセスしてると10秒くらいずっとだらだらアクセスしててなんか申し訳ないです
(「申し訳ないのでスクリプトで取得すること自体を止める」ということは考えてないですごめんなさい)
スレッドをいくつか生成してアクセスすれば同じように所要時間を短縮できますか?

339:デフォルトの名無しさん
08/08/29 22:20:59
このへんは一意な答がないんだよな
「多くの場合必ずしも好ましくない」というアドバイスが多すぎる

昔からの有名なものに「サーバ負荷考えてファイルアクセスのたびにスリープ入れろ」というのがあるが、
Keep-Alive全盛の今となってはクライアント側でスリープされて数十KBの接続を引き伸ばされるくらいなら
複数接続してもらってとっとと完了してもらって手放してもらえたほうがまだ有難かったりする

340:デフォルトの名無しさん
08/08/29 22:53:53
>>338
Rubyのスレッドってそういう動作時間縮める用途に使えたっけ?

341:デフォルトの名無しさん
08/08/29 23:00:46
IO待ちの間は他のスレッドに切り替わる…かもしれない

342:デフォルトの名無しさん
08/08/29 23:34:35
URLリンク(slashdot.jp) を思い出した

>>338
Net::HTTP.start(host, 80){|http|
# 各画像ファイルをこのブロックの中でGET
}
こんな感じで多分望みの挙動になると思う

343:デフォルトの名無しさん
08/08/29 23:42:39
require 'open-uri'
require 'benchmark'
uris = %w(URLリンク(www.yahoo.co.jp) URLリンク(pc11.2ch.net) URLリンク(www.yahoo.com)).map{|e| URI(e)}

Benchmark.bm(2) do |x|
x.report{
uris.each do |uri|
uri.read
end
}
end
sleep 2
Benchmark.bm(2) do |x|
x.report{
threads = Array.new
uris.each do |uri|
threads.push(Thread.new { uri.read })
end
threads.each{|thread| thread.join}
}
end

# 結果
user system total real
1.150000 0.080000 1.230000 ( 2.655373)
user system total real
1.210000 0.060000 1.270000 ( 1.583636)

344:デフォルトの名無しさん
08/08/29 23:52:01
外部待ちがないぶん、スレッド使ったほうが全体としては速いな

345:デフォルトの名無しさん
08/08/30 00:21:01
そろそろNet::HTTP.startの中でThread#joinして意味不明の挙動に悩んでる頃なんじゃないかと思う

346:デフォルトの名無しさん
08/08/30 01:55:11
変数名::メソッド

という書き方に違和感を感じるとともに、Rubyらしさも感じます。

347:デフォルトの名無しさん
08/08/30 02:36:56


348:デフォルトの名無しさん
08/08/30 07:31:27
こういうのじゃね

html = uri.read
case uri.host
when /www.example.com/ then
parser = TableParser_www_example_com
when /www.example.jp/ then
parser = TableParser_www_example_jp
end
datatable = parser::parse(html)

最初は文字列として連結して eval("#{classname}.#{method}") するしかないよなと思ってたんだが
普通にメソッド呼び出しのドットがくっついたときはさすがに参った

349:デフォルトの名無しさん
08/08/30 10:14:30
てゆーか実はダラダラしてるほうが行儀正しいって突っ込みは無いのかよ


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch