[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 20:58 / Filesize : 271 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Ruby 初心者スレッド Part 17



1 名前:デフォルトの名無しさん [2008/01/16(水) 17:41:27 ]
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
関連スレやURLは>>2-7あたりを見てください。Ruby on Railsの質問はWebProg板のRailsスレで。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・ぐぐる
 ・マニュアルで探す www.ruby-lang.org/ja/man/
 ・FAQを読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(なるべくそのままで)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。

■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

792 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 18:05:13 ]
>>789
ttp://0xcc.net/ruby-progressbar/

あとはopen-uriでopenするときに
:content_length_proc で 最初のサイズ設定
:progress_proc で進捗伝達
をさせるようにすればいい

793 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 18:17:14 ]
require 'open-uri'

uri = URI.parse('gems.rubyforge.org/yaml')
total = 0
count = (0..100).to_a
open(uri,
:content_length_proc => lambda {|n| total = n; puts "#{n}バイトいきます"},
:progress_proc => lambda {|n|
pc = (n.to_f/total*100).to_i
if pc == count.first then
puts "#{pc}%終了"
count.shift
end
}).read

# =====================================
$ ruby ./progress.rb
16047764バイトいきます
0%終了
1%終了
2%終了
3%終了




794 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 18:48:25 ]
メソッドの引数にハッシュを取りたいです。
とり得るキーが多めにあった場合とか、うまく処理する方法ってありますか?
キーは1個の場合も4個の場合もあり、複数のキーが互いに必須なこともあります。

795 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 18:53:08 ]
>>792-793
なるほどこりゃ便利ですね
open-uriのライブラリを掘り下げてみましたら
なるほどキモになってる部分は Net::HTTPResponse#read_body {|str| .... } ですね
ありがとうございました

796 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 18:55:43 ]
うまく処理する方法とは?
まず、まずい処理がどんなものか説明してもらおうか。



797 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 19:00:04 ]
>>794
素直にやるとこうだと思うぞ

def hoge(h)
case h
when h.has_key?(:param1) ...
when h.has_key?(:param2) && h.has_key?(:param3) ...
else raise "引数が不正です"
end
end

:param1と:param2は背反でないと処理上困るのになぜか同時に指定されてる、
とかいうエラーへの対処は無視しろめんどくさくなるから
「同時に指定したら死刑」とかいう立て札でも立てとけ

798 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 19:01:42 ]
>>794
質問の意味が良く分からないが・・・

>キーは1個の場合も4個の場合もあり、
case hash.size
when 0
when 1
・・・

>複数のキーが互いに必須なこともあります。
if hash.key?(foo) && hash.key?(bar)

こんな感じじゃないか?

799 名前:デフォルトの名無しさん [2008/02/12(火) 21:35:04 ]
>>792-793
open-uriってお手軽なだけかと思ったら、意外に融通利いてびっくりだ

800 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 22:13:34 ]
もう見てないかもしれないが
>>310>>316
今北なので、亀レスで申し訳ない

nowrite(true)、verbose(true) メソッドを使えばそれ以降
:noop=>true、:verbose=>true がデフォルトで設定される…はずなのだが
Rakeのバグでshとruby以外のメソッドに適用されない

つづく



801 名前:800 mailto:sage [2008/02/12(火) 22:15:10 ]
修正するには rake.rb に以下のパッチを当てればおk
Index: rake.rb
===================================================================
--- rake.rb (revision 639)
+++ rake.rb (working copy)
@@ -871,8 +871,8 @@
module FileUtils
RUBY = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])

- OPT_TABLE['sh'] = %w(noop verbose)
- OPT_TABLE['ruby'] = %w(noop verbose)
+ OPT_TABLE['sh'] = [:noop, :verbose]
+ OPT_TABLE['ruby'] = [:noop, :verbose]

# Run the system command +cmd+. If multiple arguments are given the command
# is not run with the shell (same semantics as Kernel::exec and
@@ -970,10 +970,10 @@

FileUtils::OPT_TABLE.each do |name, opts|
default_options = []
- if opts.include?('verbose')
+ if opts.include?(:verbose)
default_options << ':verbose => RakeFileUtils.verbose_flag'
end
- if opts.include?('noop')
+ if opts.include?(:noop)
default_options << ':noop => RakeFileUtils.nowrite_flag'
end



802 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 22:28:06 ]
既出でしたらすみません。トップレベルのインスタンス変数、selfについて質
問です。

クラス・モジュール定義内ではインスタンスメソッドの外に定義したインスタ
ンス変数はクラスオブジェクト(Klass)のインスタンス変数になり、インスタン
スメソッドとはselfが異なるのでアクセスできません。

class Klass
@a = 1 <--
def foo \
@a <-----+-- 別物(selfが異なる)
end
end
Klass.new.foo => nil

しかし、トップレベルで定義したインスタンス変数はトップレベルで定義した
メソッドからselfが同一なのでアクセスすることができます。

@a = 1 <--
def foo \
@a <-----+-- 同一(selfが一緒)
end
foo => 1

なぜトップレベルではメソッド定義内のselfとメソッド定義の外のselfが同一
になるのでしょうか。
rubyインタプリタが起動時に

Object.new.instance_eval { *ここがトップレベル* }

のようにしてトップレベルを作っていると解釈すればよいのでしょうか。


803 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 22:39:00 ]
$ cat top.rb
p self
def hoge
p self
end
hoge
p self.class

$ ruby top.rb
main
main
Object


804 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 23:07:32 ]
>>803さん、ありがとうございます。

トップレベルのselfはObjectのインスタンスで評価するとmainというものが返っ
てくるというのは理解できるのですが、トップレベルがどのようにして作られ
てselfが設定されているのかがわかりません。
あと、なぜトップレベルのselfはmainという表記で#<Object:0x294dc>みたいな
表記にならないのでしょうか。
そういう言語仕様なのでしょうか...


805 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 23:24:52 ]
>>804
トップレベルをオブジェクト指向として悩むのはあまりよくないぞ
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/8965

まあ、Module#privateされたでっかいObjectクラスの中身だと考えられなくもないけど

806 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 23:39:52 ]
"main"と返るのはそう定義されてるから。(object.c)
RubyのCソースは一部の例外を別にすれば見やすいから追いかけてみるとよい。


807 名前:804 mailto:sage [2008/02/12(火) 23:58:30 ]
>>805さん、>>806さんありがとうごぜいます。
>>805さん
bladeのスレッド読んでみました。確かにEiffelやJavaよりもいきなり制御を書
けてしまうrubyのほうがありがたい気がします。
そういえば質問する前にbladeでnamazu検索してみたのですが、結果のリストが
表示されませんでした。壊れているんでしょうか?
>>806さん
そうですね。rb_internあたりで萎えてしまうのですが。頑張って読んでみます。


808 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:01:03 ]
あ、それ俺も気づいた。bladeの検索は死んでる。
今じゃgoogle site:使ってるなあ

809 名前:804 mailto:sage [2008/02/13(水) 00:24:48 ]
そうかgoogle site:を使えばよかったのかー。頭悪いな > オレ
>>806さん、ソース読んでみました。
main_to_s
rb_define_singleton_method(ruby_top_self, "to_s", main_to_s, 0);
拍子抜けしました。Init_Objectあたりをもっと深く読んでみようと思います。
ありがとうございました。


810 名前:783 mailto:sage [2008/02/13(水) 02:49:21 ]
レスくれた方有難うございました。
確かにttcは読み込めなかったので
Miyako入れる方向で探っていく事にします
それにしてもruby/SDLの文字表示がこんなに弱いとは…



811 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 04:33:24 ]
>>779
釣られてるよ。
>>777のpythonのコードは、sortに()が付いてないから実際にはソートしてない。

812 名前:デフォルトの名無しさん [2008/02/13(水) 07:53:37 ]
$ irb
irb(main):001:0> l=[100,101,102,103,104,105,106,107,108,109]
=> [100, 101, 102, 103, 104, 105, 106, 107, 108, 109]
irb(main):002:0> l.each_with_index do |item,idx|
irb(main):003:1* puts "hit #{item}"
irb(main):004:1> l.delete_at idx if 0==item%2
irb(main):005:1> end
hit 100
hit 102
hit 104
hit 106
hit 108
=> [101, 103, 105, 107, 109]
irb(main):006:0>
意図したとおり奇数だけ残せたのですがhitの表示がなぜ偶数だけになっているか分かりません
delete_atするより前でputs "hit #{item}"してるので全要素がputsされると思ったのですが。。。


813 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 08:07:34 ]
消す度にずれてるから

p l
とか
puts "hit #{item} at #{idx}"
にして見れば分かる

delete_ifを使えばいいよ

814 名前:812 mailto:sage [2008/02/13(水) 08:28:52 ]
理解できました ありがとうございます
delete_if使ってみます

815 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 09:05:53 ]
>>811
python -c 'range(0,10000000).sort'
real 0.0859320 user 0.0468750 sys 0.0312500

python -c 'range(0,10000000).sort()'
real 0.0771435 user 0.0312500 sys 0.0468750

>>779
ruby -e '(0...10000000).sort'
real 2.1707595 user 1.6875000 sys 0.1406250

ruby -e '(0...1000000).to_a
real 0.3525165 user 0.2500000 sys0.0937500

816 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 09:10:38 ]
桁が違うとか紛らわしい
ruby -e '(0...10000000).to_a
real 1.6034130 user 1.4531250 sys 0.1406250

817 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 10:14:36 ]
10000000 を 10_000_000 とか 1000_0000 とか書けることは意外と知られてないし使われてないな

irb> p 10_000_000
10000000


818 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 10:41:43 ]
>>810
でもMiyakoでは特に変なことしてないみたいだぞ?
api/font.rb を「TTF」で検索してみ

819 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 14:09:52 ]
Pythonのマージソートは部分整列を利用してほげほげとかクックブックに書いてあったから
range(0,10000000).sort() のソートにほとんど時間がかからないはず。
(参考:svn.python.org/view/*checkout*/python/trunk/Objects/listsort.txt)
Rubyはどうなのよ

820 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 15:29:39 ]
マージソートなのか。
rubyはクイックソートだから、整列済みのものには不利だな。



821 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 15:34:42 ]
>>820
それもあるけど、1.9だとシステム提供のqsortでなく割と高速なqsort実装を使っているので、その例だとPythonとほぼ互角の速度になる。

822 名前:デフォルトの名無しさん [2008/02/13(水) 18:19:53 ]
"ID;本文"という形式のcsvファイルを読み込み、
本文だけを文節単位でわかち書き(半角スペースを挿入する)して
返すスクリプトを書きたいと思っています。
そのため、RubyからCaboChaにテキストを渡して処理しようと
CaboCha0.53をインストールしたのですが、
肝心のCaboChaの呼び出し方がさっぱりわかりません。

CaboCha公式サイト(chasen.org/~taku/software/cabocha/libcabocha.html
には「詳しくは, ruby/README…をご覧ください.」と書いてあるのですが
そのruby/READMEがCaboChaインストールフォルダ内に見つからず…
どなたか、インストール方法とRubyからの呼び出し方を
教えていただけますでしょうか。

●実行環境
WindowsXP SP2
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
※One-Click Installer - Windows 1.8.6-26 Final Release 使用

CaboCha 0.53(Binary package for MS-Windows)

823 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 19:18:25 ]
>>822
CaboCha というのは全く使ったことがないけど、
そのページから落せるソース cabocha-0.53.tar.gz には
ruby/README は入ってたよ。
中を読むとさらに test.rb を読めとあって、test.rb 内には
コメントとかまったく書いてないんだけど、まあその辺は C ライブラリの
方を見て予想しろってことなんじゃないかと。

あ、Windows での tar.gz の伸長には適当になんかフリーソフトを探してくれ。

824 名前:デフォルトの名無しさん [2008/02/13(水) 20:44:51 ]
Cgi = CGI.new

ip = ENV['REMOTE_ADDR']
host = ''

begin
host = Socket.gethostbyname(ip)[0]
rescue
host = ip
end

Cgi.out{host}

これでちゃんとリモホ名に変換出来る鯖と
出来ない鯖があるんですが、鯖の問題なんですよね?

825 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 20:52:30 ]
rescueでエラー殺しておいてそういう質問するな

SocketError: host not found
が出るという話ならRubyのバージョンが悪いとかなんとかいうことになってた気がする
エラー時にコマンドラインから外部コマンド使うとなんとかなるかも

826 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 21:08:44 ]
>>825
すみません…
助言ありがとうございました!

827 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 21:31:37 ]
require 'cgi'
require 'socket'
cgi = CGI.new
begin
cgi.out{Socket.gethostbyname(ENV['REMOTE_ADDR'])[0]}
rescue
cgi.out{CGI.escapeHTML($!.inspect)}
end

う〜ん、こうやっても特に例外は出てない様です…
変換出来ない鯖のRubyのversionは1.8.5でした…

828 名前:783 mailto:sage [2008/02/14(木) 02:31:38 ]
ruby/SDLの日本語表示の質問した者ですが
IPAフォントというフリーのttfを見付けたので
Miyakoを入れずとも日本語表示は出来ました

ただ、新たな問題としてボールドとイタリックの書体設定が出てきました
見る限りSDLやMiyakoにそういう機能は無いようですし…
そもそもこういう書体設定はどういう理屈でやってるんでしょうか

829 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 02:35:27 ]
>>827
とりあえず何かのファイルにENV全体を書き出してみたら?
CLIENT_IPとかX_FORWARDED_FORとかVIAとかなら取れるかもしれない。


830 名前:828 mailto:sage [2008/02/14(木) 02:41:52 ]
>>828
自己解決しました
思いっきりスタイルの設定部分見落としてたわ…
失礼しました



831 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 07:29:33 ]

正規表現でこういうのは無理?

p "X(1)((2)Y)Z".gsub(/\([0-90-9]+\)/g, '')

やりたいこと
・(1)(2)を両方取り除く

わからんこと
・gオプションって無い?
・全角0-9の指定は無理?
※cygwin版ruby

832 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 07:30:27 ]
↑全角がまじっちゃったけど、( )は全て半角

833 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 07:36:47 ]
jcodeかなんかrequreする必要があったような無かったような・・・
gオプションってマッチを1回で止めない、ってperlのおぷそんだったけ?
それならデフォルトでそうなんじゃなかったっけか。

834 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 07:37:15 ]
sub
gsub

835 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 07:47:34 ]
さんくす

>>833
jcodeじゃgsubないっぽい
[0123456789]て書かないと駄目くさい

>>834
そうだった、gは必要ないな

836 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 10:51:43 ]
>>831
jcodeをrequireして、
str.tr("0-9", "0-9").gsub(...)
ただ他の関係ない全角数字も巻き込まれる :-)

837 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 11:00:58 ]
>823
ありがとう。
結局、rubyバインディングをインストールするには
Win用のCaboChaバイナリのほかに
UNIX用のCaboChaとSWIGを落としてきて自分でmakefileしないと
いけないようですね。

838 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 11:20:26 ]
全くカボチャやらメカブやらチャセンやら・・・

ズイキはないのっ!?

839 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 11:40:53 ]
>>831
半角開きカッコ・半角または全角数字・半角閉じカッコ

の並びを消去したいなら、正規表現はそれで問題ないぞ
(たしかにgオプションは存在しないのでつけたら駄目だが)
もし動作しないというなら、それは単に文字コード指定の問題だろう
対象文字列がShift_JISやらCP932やらならsを、日本語EUCならeつけろ

irb> p "X(1)((2)Y)Z(3)45".gsub(/\([0-90-9]+\)/e, '')
"X(Y)Z45"

840 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 14:16:13 ]
>>839
確認してみたら通ったよ。

何が悪かったかといえば、コマンドラインで-Kオプションつけずに
ネイティブでないエンコード使ってたからぽい

だからコンパイル時にエラーになってた。



841 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 15:26:24 ]
Rubinius で、Ruby にインクリメント演算子モドキを実装 - sumim’s smalltalking-tos
ttp://d.hatena.ne.jp/sumim/20080214/p1

…バイトコードを探して加算するという力技

842 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 16:26:06 ]
コンテキストがべたべたに見えてるのか、
Rubyはなぜかそれをやらなかったんだよね、
フレームのオブジェクト化。

843 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 16:26:39 ]
rubyは、か。

844 名前:デフォルトの名無しさん [2008/02/14(木) 16:54:11 ]
>>843
matzは、か?

845 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 16:59:21 ]
>>842
しないほうがいいんじゃね?>>841なんてどうかんがえても力業だし

846 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 17:07:43 ]
この手のイントロスペクションが可能だと、デバッガを強化できるんだがな。

847 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 17:15:38 ]
ドコに力点を置くかだよね
特に悪影響がないのなら導入すればいいわけで

848 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 18:33:31 ]
ruby/SDLの日本語表示の質問してた者です
何度も何度も済みません…

ttfのフォントで半角英数文字列を出力すると
全角幅で出てしまうんですが、何か調整する機能は無いのでしょうか?
一応ゴリ押しすれば、
文字列を各文字に分割して文字幅取りつつ各個表示
という風に行けそうではありますが…


849 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 19:45:01 ]
>>848
何を言ってるのかよく分からないのですが、とりあえず
mono.kmc.gr.jp/proj/rubysdl/?Works
にある作品で、該当しそうなことをやってるものの
ソースを読んでみたらどうでしょうか。
高橋メソッドとか文字表示に特化してそうだし、
ソースをちょっと見てみた限りTTF使ってるみたいだし、
実行してみてないので想像ですが、半角/全角が
区別されずに表示されるという事もないんじゃないかなあと思います。

850 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 20:27:32 ]
>>848
俺の環境ではそういった現象は起こっていない(半角は半角幅で出力される)
もう少しkwsk



851 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 20:35:06 ]
フォントによってはそうなるよ
ruby/sdlではなくfreetypeの仕様っぽい
プロポーショナルなフォント使えば大丈夫だったと思う

852 名前:848 mailto:sage [2008/02/14(木) 20:49:34 ]
ソース出した方が早そうですね
フォントはIPAゴシックです

SDL.init(SDL::INIT_EVERYTHING)
screen = SDL.set_video_mode(SCREEN_W, SCREEN_H, 16, SDL::SWSURFACE)

SDL::TTF.init
font = SDL::TTF.open("IPAFont/ipag.ttf", 24)
font.style = SDL::TTF::STYLE_ITALIC
font.draw_blended_utf8(screen, "abc", 0, 32, 255, 255, 255)

これで全角幅で出ます(Pゴシックも同じ)
「abc」でなく「a b c」という感じ

853 名前:848 mailto:sage [2008/02/15(金) 03:47:05 ]
レスどうもです
色々試しましたがどうもフォント依存の問題みたいですね
Arialだと普通に間合いが詰まってましたし

…しかし日本語フォントで
サイズ一定以下にすると表示がバグるとか不具合もあるようで
これ本当にゲーム作れるのか…?

854 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 04:07:32 ]
>>835
ここで愚痴るより作者にメールを送れYO!
反応のある確率はここより低いかもしれんが、
もしあった場合より的確な答が返ってくるだろうし
パッチも当たるかもしれないじゃん。

855 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 04:33:18 ]
追試してみたけどそもそも文字が出ないw
なにがわるいんだろ?

856 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 15:31:04 ]
かなり亀だが
>>797
case h
when h.has_key?(:param1) ...

これって期待通りの動作しなくね?

857 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 16:07:58 ]
h === h.has_key?(:param1) って何が起こるの?

858 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 16:10:42 ]
あ、逆か。
h.has_key?(:param1) === h って何が起こるの?

859 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 16:43:47 ]
そのまんまだよ
h が === 的に true と同一なら true、同一でないなら false が返る
Hash は TrueClass に属してないから常に false だね

860 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 16:46:09 ]
変な書き方だった
Hash は TrueClass にも FalseClass にも属してないから結果は常に false だね
に変更



861 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 19:22:31 ]
休刊になったLinux Magazine全部入りDVDを入手
Matz御大による、初等Ruby講座(と探訪Ruby)の
存在を知り拝読(中)

しっかし、なんつーわかりやすさなんでしょう
なんでもないと思ってたとこでも
目からうろこが、ぽろぽろぽろぽろ…

開発者自身の手でここまでやさしく書かれた
ドキュメントがあったなんて!と
ちょっと感動しました

過ぎるほど今更ですみません

862 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 20:21:59 ]
>>858
逆じゃないよ。(when式)===(case結果)で合ってる。

863 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 21:33:48 ]
>>862
だから>>858はそう書いてるんじゃないか?

864 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 21:49:36 ]
case h
じゃなくて
case
なんだろうね。


865 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 22:13:01 ]
gem install したときに 所有者 root でインストールしようとするのを止めさせることはできますか?
$ gem install --no-ri --no-rdoc hpricot

make
cc -I. -I. -I/usr/local/lib/ruby/1.8/i386-freebsd6 -I. -fPIC -O2 -fno-strict-aliasing -pipe -fPIC -c hpricot_scan.c
cc -shared -Wl,-soname,hpricot_scan.so -L'/usr/local/lib' -Wl,-R'/usr/local/lib' -o hpricot_scan.so hpricot_scan.o \
-Wl,-R -Wl,/usr/local/lib -L/usr/local/lib -L. -lruby18 -lc -lcrypt -lm -pthread -lc

make install
/usr/bin/install -c -o root -g wheel -m 0755 hpricot_scan.so /home/俺/rubygems/gems/hpricot-0.6/lib/i686-linux

install: /home/俺/rubygems/gems/hpricot-0.6/lib/i686-linux/hpricot_scan.so: chown/chgrp: Operation not permitted
*** Error code 71



866 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 00:35:29 ]
原因が絞られたので再質問します

Ruby1.8.5にて、ユーザー権限でgem install hpricotしようと思いました。
しかし、root権限でインストールしようとしてしまってうまくいきません。
/usr/bin/install -c -o root -g wheel -m 0755 hpricot_scan.so
レンタルサーバ(さくら)なので rbconfig の CONFIG の INSTALLキーに
/usr/bin/install -c -o root -g wheel という文字列が入ってしまってるからのようです。
これを変更した上でgem install を実行させることはできますか?

867 名前:866 mailto:sage [2008/02/16(土) 01:25:16 ]
あーできたー。っていうかこれ罠っぽい…
さくらインターネットでrubygemsのインストールでコケる場合の対処

/usr/local/lib/ruby/1.8/i386-freebsd6/rbconfig.rb を見ると
> CONFIG["INSTALL"] = ENV['RB_USER_INSTALL'] ? '/usr/bin/install -c' : '/usr/bin/install -c -o root -g wheel'
とかいう記述がある
よって
setenv RB_USER_INSTALL true
とかコマンドラインで入力してから rubugemsをインストールすればいい
(試してないけどたぶんrubygemsのインストール時1回のみでおk)

あーもう寝る

868 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 02:52:50 ]
>>861
宗教じみてるので釣りかと思った

869 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 02:58:43 ]
>>861
そんなに分かりやすいのか・・・買う価値ありかね?

870 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 03:48:49 ]
初めて知ったが、そもそもLinux Magazineぜんぶ入りが買いじゃね?

>>866-867
さくらの共有?Railsまともにうごきます?



871 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 04:21:29 ]
でももう2年前の話だしなぁ・・・休刊。
まだVineが人気の時代じゃね?

872 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 10:07:47 ]
>>870
FastCGI入ってないけどそれでもよければ

873 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 10:16:34 ]
Webサービスとして使うのは問題外ってことだな
自分用かバックグラウンド動作用か

874 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 11:15:37 ]
% time python -c 'range(0,10000000).sort'
0.769u 1.022s 0:01.79 99.4% 0+0k 0+0io 0pf+0w
% time ruby -e '(0...10000000).sort'
3.170u 0.259s 0:03.42 100.0% 0+0k 0+0io 0pf+0w

875 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 11:58:20 ]
>>872
まともに使えない上に、同じ鯖の人に迷惑になりそうな(´・ω・`)

876 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:02:23 ]
どっかのページで、CGI版でも高速動作させるって方法があったけど、
結局、プロセスをしばらく立ちあげといてって方法なので、レンサバだと無理そうだった・・・

CGIでRailsをまともに動かす - 古橋貞之の日記
d.hatena.ne.jp/viver/20080209/p1

877 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:00:28 ]
以前からずううううっと気になってたんだけどさ

file = open('test.txt','r').read

とか

file = File.open('test.txt','r').read

ってしたときって、test.txtを開いたときに使ったIOオブジェクトってcloseされてる?
readの中で実はブロックとか使っててcloseしてるとか

878 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:06:30 ]
>>877
close はしてないので File.read("test.txt") を使ったほうがいい。
バイナリモードの指定ができないくそインターフェイスだけど。

879 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:18:18 ]
あるいは、長くなってもいいなら content = open(...) {|io| io.read }


880 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:26:21 ]
File.open(path).read は「動くけどあまり好ましくない書き方」のひとつだな



881 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:47:03 ]
参照カウンタの方がスクリプト言語にはあうね

882 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:52:34 ]
やっぱり、そんなには知られていなかったんですね>Matzの連載
私も知らずに手に入れたんですけど

初等講座が190ページ、探訪が96ページ
雑誌連載ならではの密度(基本2段組でビッシリ)ですので
これ目当てで買っても損はないかと思います。
ただ、PDFの2段組は読みづらいです。

私はスレタイどおりの初心者なので
正直、中盤以降はナナメ読みになりましたが
ハッシュと正規表現の置換のところで
そう書いてくれればわかる!という開発者ならではの
曇りのない記述に出会えたので
これだけで個人的には得した気分です。

883 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:04:34 ]
何の本の話ですか?

884 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:05:15 ]
>>861じゃね?


885 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:05:32 ]
861 デフォルトの名無しさん [sage] Date:2008/02/15(金) 19:22:31  ID: Be:
    休刊になったLinux Magazine全部入りDVDを入手
    Matz御大による、初等Ruby講座(と探訪Ruby)の
    存在を知り拝読(中)

886 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:06:09 ]
ありがとう

失礼しました

887 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:07:33 ]
>初等講座が190ページ、探訪が96ページ
>雑誌連載ならではの密度(基本2段組でビッシリ)ですので
>これ目当てで買っても損はないかと思います。

ここだけ出版される予定はないの?


888 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:08:06 ]
出たら買うかも

889 名前:デフォルトの名無しさん [2008/02/16(土) 14:16:30 ]

ruby-sapporo.org/live


890 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:18:56 ]
>>861の感想とかこのところ荒みっぱなしのMatzに読ませてやりたいな



891 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 15:51:50 ]
Hpricotを半日いじった結果、
「そのサイト専用の正規表現使ってHTMLからdivやtable単位でscanで切り出して配列にしさらに正規表現で切り出す」
ということをしたほうが速いということに至った

もっと一般的なことするまでさよならHpricot

892 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:33:24 ]
初等Ruby講座
第1回 はじめの一歩
第2回 条件判断とループ
第3回 オブジェクトと変数
第4回 配列
第5回 ハッシュ(または連想配列)
第6回 文字列の操作
第7回 パターンマッチ
第8回 入出力
第9回 数と電卓
第10回 CGI
第11回 Rubyで作るCGI
第12回 CGIの道具箱
第13回 ファイル処理
第14回 ネットワークプログラミング
番外編 Rubyカンファレンスレポート
第15回 プロセスとフォーク
第16回 スレッド(その1)
第17回 スレッド(その2)
第18回 データの保存
第19回 XMLとYAML
第20回 XMLとYAML(その2)
第21回 エクストリーム・プログラミング
第22回 独習Ruby
第23回 再入門オブジェクト指向
最終回 ここからのRuby






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<271KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef