Ruby 初心者スレッド Part 21
at TECH
1:デフォルトの名無しさん
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用なのですね。
ありがとうございました。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5369日前に更新/211 KB
担当:undef