08/12/20 19:08:36
「10日でおぼえるRuby on Rails」と「はじめてのRuby」を読んだばかりの
Ruby歴2週間のおれに教えてくれ。
Rails2.2を入れたいのだが、Ruby1.9.0Xでいいの?1.9.1の未完成版は止めた方がいい?
仕事じゃないから人柱でもなんでもいいけど、
慣れない環境であまりにも動かないと何が何だか分からなくなってつらい。
最新版命主義だから1.8.6Xはよほどひどくないと考えていないっす。
668:デフォルトの名無しさん
08/12/20 19:12:33
Rubyの最新版は1.8.7だよ
1.8.6は古いから、しがらみも資産もない新規さんなら1.8.7でウキウキ新機能をエンジョイしろ
Railsも完全に動作するし
669:デフォルトの名無しさん
08/12/20 19:22:18
>>668
レスサンクス
1.8.7ってあいのこみたいなイメージがあるのだが。
1.9系みたいにマルチバイト文字列を簡単に扱いたいんだけどできる?
670:デフォルトの名無しさん
08/12/20 19:51:18
結局速いのがいいから1.9.1系にしちゃった。不具合上等。サンキューな。
671:デフォルトの名無しさん
08/12/20 19:54:11
さて果たして670がどうなるのか
ちょっとワクワクしてきた
672:632
08/12/20 20:05:21
>>633
gmail使うことにしました
我ながらなんという遅レスか
673:デフォルトの名無しさん
08/12/20 20:44:50
>>660
Matlab持ってる研究室尋ね歩いて使わせてもらえ
674:デフォルトの名無しさん
08/12/20 21:33:35
1.91はまだか。
675:670
08/12/20 22:26:30
Vista64を使ってるから、1.9.1最新(64bit)入れたけどgemが動かず。
1.9.0最新(64bit)入れたけど動かず。1.9.1最新(32bit)入れてようやくRailsのインストールまで終わった。
落としたバイナリのzlibがだめなのかなと思ったが、疲れたから完璧ということにした。
676:デフォルトの名無しさん
08/12/20 22:40:31
Vista 64ビット版で1.9.1に挑戦するとは……なんという茨の道
でもそんな根性のあるユーザーは嫌いじゃないぜ
677:デフォルトの名無しさん
08/12/20 22:48:29
>>676
嫌いになる可能性しかないような気がするんだが
問題切り分けできない状態でなにが勉強か
678:デフォルトの名無しさん
08/12/20 23:46:21
32bitや64bitという言葉が出てくるんだから、まるっきりコンピュータの素人というわけでもなかろう。
たぶん誰も助けてやることはできないだろうけど、がんばれ。
679:デフォルトの名無しさん
08/12/21 09:12:31
>>673
とりあえずなんとかOctaveでテキスト形式に変換完了。
今延々回してるがかなり長くなりそうorz
680:デフォルトの名無しさん
08/12/21 09:35:39
そもそもRubyは学術計算には向かない
681:デフォルトの名無しさん
08/12/21 12:18:43
>>680
何をするかに依るが、簡単な数値計算には俺は使うよ。
一行で書いて答ポンと出す感じのコード。向いてると思う。
ちょっと入り組んでる計算(シミュレーション、微分方程式、FFT etc)
だと C++ で書くけど。
682:デフォルトの名無しさん
08/12/21 12:34:26
計算が多少複雑でも、コード書くことだけ考えればRubyで十分扱えると思う
むしろ問題なのは処理速度
683:デフォルトの名無しさん
08/12/21 12:35:45
行列演算の結果狂ってるとかいうのなかったっけ
684:デフォルトの名無しさん
08/12/21 14:07:22
学術計算にいまどきプログラミング言語か
入り組んでいる計算なら
mathematicaとかmatlabのほうが向いてると思うね
簡単な計算ならlinuxについているbcが向いてる
685:デフォルトの名無しさん
08/12/21 14:09:34
mathematicaも立派な関数型言語搭載のプログラミング環境ですから
686:デフォルトの名無しさん
08/12/21 14:10:34
はいはい、「汎用の」が抜けてた抜けてた
687:デフォルトの名無しさん
08/12/21 14:29:33
巨大な計算をする時はやっぱmathematicaやmatlabは遅い。
とは言え、代替物としてRubyを使うのもどうかとは思うが。
688:デフォルトの名無しさん
08/12/21 17:00:04
nokogiriのgemインストールが失敗します。
riの生成に失敗しているようなのですが、これはどのように対処したもんでしょうか?
> gem install nokogiri
Successfully installed nokogiri-1.0.7-x86-mswin32-60
1 gem installed
Installing ri documentation for nokogiri-1.0.7-x86-mswin32-60...
ERROR: While executing gem ... (NoMethodError)
undefined method `new' for nil:NilClass
> ruby -v
uby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32]
689:デフォルトの名無しさん
08/12/21 17:31:48
>>681
計算時間の見積もりが4日とかorz
256次元のベクトルの距離を頻繁に求めるので手間かかりすぎ。
ある1本と別の4000本との距離を求めるだけで45秒。
使ってるクラスはmatrixに入ってるVectorクラス。
690:デフォルトの名無しさん
08/12/21 19:55:22
>>688
$ gem install --no-ri nokogiri
とりあえず。ちなみに gem help install で調べられる。
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32]
gem 1.3.1
では問題は起きなかったっす。
691:デフォルトの名無しさん
08/12/21 21:08:15
>>690
rdocもなんか失敗したので、これでいけました。
gem install --no-ri --no-rdoc nokogiri
ありがとう。
692:デフォルトの名無しさん
08/12/21 21:10:09
ちょいと質問なのですが、
HTMLファイルの一部を書き換えたいのですが、
nokogiriとか使うとパースや部分的なノード置換がすごく楽なのですが、
出力すると(to_html)元のHTMLがかなり崩れてしまいます。
元のHTMLをなるべく維持したい場合はどうしたらよいものでしょうか?
693:デフォルトの名無しさん
08/12/21 21:13:02
見掛けが崩れるだけで、htmlとしては大部分が同じはずだが
HTML上の改行位置や空白数なんかも維持したい場合は正規表現で置換するしかないな
694:デフォルトの名無しさん
08/12/21 21:19:33
フラットな処理で何とかなるならHTMLSplitとか
695:デフォルトの名無しさん
08/12/21 21:35:38
rubygemsのsyntaxってあんじゃん
なんていうか、マトモなCSSってどこかにない? vimやEmacsのハイライト意識したやつとか
RubyとHTMLのだけあればいいんだけど
あのRubyのとか酷過ぎるだろ常識的に考えて
696:デフォルトの名無しさん
08/12/21 21:42:02
>>693-694
レスありがとう。
なるたけ維持したかったので、頑張って正規表現でgsubしてみました。
そんなに複雑じゃなかったのでなんとかなったみたいです。
お騒がせしました
697:デフォルトの名無しさん
08/12/21 22:03:17
for i in 1..50
hoge
end
の 50 を a を Array として
for i in 1..(a.size)
としたらだめのようでした。
aのサイズだけ for を走らせたい場合、Ruby はどうするのがよいでしょうか?
698:デフォルトの名無しさん
08/12/21 22:07:31
普通はこうする。
a.size.times { |i| p a[i] }
699:デフォルトの名無しさん
08/12/21 22:09:38
>>697
a.each do |e|
p e
end
Ruby では for はまず使わない
700:デフォルトの名無しさん
08/12/21 22:10:35
>>697
よのどのことがないかぎり、Rubyでは単純ループにforは使わないと慣習があるぞ
>>698 でよいかと思う
701:デフォルトの名無しさん
08/12/21 22:10:50
インデックスが欲しければこう
a.each_with_index { |e, i|
}
702:デフォルトの名無しさん
08/12/21 22:11:32
ごめん、>>699だ
703:デフォルトの名無しさん
08/12/21 22:13:40
a のサイズ分ループしたいけど、
a の要素を使わない時は >>698 だっしょ。
a の要素を単に順番に使いたいだけの場合は >>699 で、
a の要素とそのインデックスを両方使いたい場合は >>701 だ。
704:デフォルトの名無しさん
08/12/21 22:17:21
>>698-701
みなさま本当にありがとうです。
for をそもそも使わないのか・・・そもそも入門からおかしかったようです。
705:デフォルトの名無しさん
08/12/21 22:19:16
もちろん普通はfor使わないのは分かるんだがなんで>>697が動作しないんだ?
範囲式に制限でもあるのか?
706:デフォルトの名無しさん
08/12/21 22:21:00
0 オリジンじゃないから
配列にアクセスする部分で死んでるとか
707:デフォルトの名無しさん
08/12/21 22:23:11
そうだな
50番目の a[i] で nil の NoMethodError でも出てるのだろう
708:705
08/12/21 22:33:17
なるほど。自分も初心者だが確かにやりそうだ。
まあこういうのを防ぐ為にもforは使わないってことだな。
709:デフォルトの名無しさん
08/12/21 23:14:47
Rubyを書き慣れてくると、forの書き方はちょっと考えないと
思い出せないようになってくる。
710:デフォルトの名無しさん
08/12/21 23:17:48
freezeしたHashの要素を変更するシンプルな方法はありますか?
freezeの意味ないやんってなるけど仕様変更で一か所だけ要素を変更する必要があります
freezeしているクラスと同じクラス内なので影響が他のクラスに及ぶことはありません
711:デフォルトの名無しさん
08/12/21 23:52:38
>>695
「酷すぎる」って言ってるのが
syntax-*/data/ruby.css とかのことだったら、あれ以上のもので公開されてるのは多分ない。
712:デフォルトの名無しさん
08/12/22 00:08:51
>>680-687
遅レスだが(というかなぜか今日は流れ速い)、俺がよく ruby 使うのは
簡単な計算でパラメータ変えて繰り返して使う式ですぐ答が欲しいときかな。
わざわざ Mathematica とか Maple, Maxima 立ち上げる気がしない程度のもの。
あと、これらでもプログラム書けるけど個人的には ruby の coding の方が好き。
3次方程式の解レベルの複雑さ。Ruby で端末でパラメータ入力して結果
すぐ帰ってくる。bc, とかではできない。多少複雑なら C++ で書いてる。
ruby は遅いし、書き捨て的に使ってるし、mma, maple, maxima とかでも
遅すぎることも多い。
713:デフォルトの名無しさん
08/12/22 00:45:33
>>710
h = {:ary => [1]}.freeze # => {:ary=>[1]}
h[:ary][0] = 2
p h # =>{:ary=>[2]}
Hashオブジェクトをfreezeしてもその中にあるオブジェクトまでは
freezeされてないから、それを直接書き換えるとか。
これ、本来はfreezeの落とし穴だから気をつけて。
714:デフォルトの名無しさん
08/12/22 01:38:05
要素を変更したいんですー
h = {:ary => 1}.freeze
h[:ary] = 2
715:デフォルトの名無しさん
08/12/22 01:46:09
Are you happy?
716:デフォルトの名無しさん
08/12/22 02:00:18
じゃあdupしてfreezeされてないコピーに差し替えれば?
と言いたいけど別のところに参照されちゃってるんだろうなぁ。
そもそもfreezeしてるコードをいじれるならfreezeやめれば
いいじゃんと思うんだけど、freezeしないといけない理由を詳しく。
717:デフォルトの名無しさん
08/12/22 03:08:37
文字通り邪悪だけど、
evil-ruby gemをインストールして h.unfreeze
718:デフォルトの名無しさん
08/12/22 06:52:25
>>710
出来ないことはないけど、不可能と考えて別の方法を探すべきだと思われる
そもそも、freezeされてるってことはそれなりの理由があるんじゃないのか?
719:デフォルトの名無しさん
08/12/22 10:55:22
>>710
びみょーに違うけど、こんなん(不完全だけど)をextendして
freezeを遅延させるとか…? やっぱ変だな
# 一箇所だけ変えたいところのキーは'hoge'決めうち
module HashLasyFreeze
def []=(key, val)
ret = super
freeze if key == 'hoge'
ret
end
end
720:デフォルトの名無しさん
08/12/22 15:28:52
いくつかのサイトの更新状況を取得するプログラム組んでいるのですが、
File::statしてatimeしたいのですが、サイトで公開されているページの最終更新時間など取得する場合どのようにすればいいのでしょうか。
721:デフォルトの名無しさん
08/12/22 15:33:54
>>720
require 'net/http'
Net::HTTP.version_1_2
Net::HTTP.start('www.example.com', 80) {|http|
response = http.get('/index.html')
puts response['last-modified']
}
こんな感じ。
722:デフォルトの名無しさん
08/12/22 20:27:20
WindowsXP SP3、OneClickInstaller
デスクトップ(や他のアプリケーション上)に文字列を表示させるソフトを作りたいのですが、
それが可能なGUIツールキットってあるのでしょうか?
ググってみたところ、ウィンドウの半透明化ができれば可能そうだと思ったのですが、
それが可能なツールキットを探すことができませんでした。
ご存知の方いらっしゃれば教えてください。
723:デフォルトの名無しさん
08/12/22 20:37:03
いわゆる付箋ソフトだな
Rubyでやるこっちゃないねえ
他のC#とかで作れるようになってからその知識を流用してRuby+GUIでやれ
95パーセントくらいRuby無関係だし
724:デフォルトの名無しさん
08/12/22 20:40:41
Win32OLE.rb
725:デフォルトの名無しさん
08/12/22 20:51:05
def getWindowLong(hwnd, index)
api = Win32API.new('user32', 'GetWindowLong', 'LL', 'L')
return api.call(hwnd, index)
end
def setWindowLong(hwnd, index, gwl)
api = Win32API.new('user32', 'SetWindowLong', 'LLL', 'L')
return api.call(hwnd, index, gwl)
end
def setLayeredWindowAttributes(hwnd, crkey, alpha, flags)
api = Win32API.new('user32', 'SetLayeredWindowAttributes', 'LLLL', 'L')
return api.call(hwnd, crkey, alpha, flags)
end
gwl = getWindowLong(hwnd, GWL_EXSTYLE)
gwl &= ~WS_EX_LAYERED
gwl |= ((ratio != 100) ? WS_EX_LAYERED : 0)
gwl &= ~WS_EX_TRANSPARENT
gwl |= (transparent ? WS_EX_TRANSPARENT : 0)
setWindowLong(hwnd, GWL_EXSTYLE, gwl)
setLayeredWindowAttributes(hwnd, (ckey ? color : 0),
((255 * ratio) / 100), (LWA_ALPHA | (ckey ? LWA_COLORKEY : 0))
)
726:デフォルトの名無しさん
08/12/22 20:55:22
GWL_EXSTYLE = 0xFFFFFFEC
WS_EX_LAYERED = 0x00080000
WS_EX_TRANSPARENT = 0x00000020
LWA_COLORKEY = 0x00000001
LWA_ALPHA = 0x00000002
727:デフォルトの名無しさん
08/12/22 20:56:50
>>723
うむ、95パーセントくらいRuby無関係だな
728:722
08/12/22 21:11:41
>>724-726
レスありがとうございます。試してみます!
>>723,727
既存のrubyプログラムの処理結果をデスクトップに書きたかったんです。
rubyでどう頑張ってもダメならC#覚えるつもりでした。助言ありがとうございます。
729:デフォルトの名無しさん
08/12/22 21:33:18
rubyで幾つかのオブジェクトを生成・初期化したかったので、
a=b=c=d=Array.new
とかやったら、全部が同じオブジェクトを指してしまうという大惨事に見舞われました。
Cとかなら int a=b=c=d=0;
とか書いて複数の変数の生成・初期化が問題なく行われるんですが、rubyでこれをやると
同じオブジェクトが参照されてしまうのってどうなんですか?
730:デフォルトの名無しさん
08/12/22 21:37:50
>>729
だってそれは初期化でもなんでもなく、単に同じオブジェクトを指すように指示してるだけだもの
そのオブジェクト内容が変化すれば全部が変化するというそんだけの話
オブジェクトという考え方をRubyでは無視せんでくれ
a = Array.new
b = Array.new
c = Array.new
d = Array.new
こうだな
Arrayオブジェクトを生成する使い方をしてるならArray.newではなくnilでもいいかも
731:デフォルトの名無しさん
08/12/22 21:38:46
Cでポインタ使ったことある?
732:デフォルトの名無しさん
08/12/22 21:46:33
>>729
Array.newが一度しか実行されなければ、Arrayのオブジェクトは一つしか生成されない
って見方もできるかと
733:デフォルトの名無しさん
08/12/22 21:47:27
a,b,c,d=Array.new*4
734:デフォルトの名無しさん
08/12/22 21:50:15
あーはいはい
>>729
Ruby は代入文も値を返す
a=b=c=d=Array.new
は
d=Array.new
c=d
b=c
a=b
と全く同じだ
a が b=c=d= を「透過して」 Array.new を起動することはない
735:デフォルトの名無しさん
08/12/22 21:54:50
>>730
たとえば、100個のオブジェクトを生成・初期化したいときには、
a1=Array.new
a2=Array.new
・
・
・
a99=Array.new
a100=Array.new
って書かなきゃだめなの?
a自体をarrayにしろと言われそうだけど、多数のオブジェクトを生成・初期化したい場合は
一行に一個書くしかないの?
736:デフォルトの名無しさん
08/12/22 21:56:01
そのためにもArrayを使えよw
737:デフォルトの名無しさん
08/12/22 21:56:46
a = Array.new(100)
a.each { |b| b = Array.new }
738:735
08/12/22 22:00:14
どうやら俺はデータ構造というものについて真剣に考えるべき時期に来たようだ。
Rubyだけですむ話ではなさそうだ。すまん。このスレからは消えることにする。
739:デフォルトの名無しさん
08/12/22 22:09:53
a1=Array.new
a2=Array.new
・
・
・
a99=Array.new
a100=Array.new
まじでこういうソース見たことあるよ
某上場電気メーカーのソフトウェア部門で
740:デフォルトの名無しさん
08/12/22 22:13:20
そいつの方が給料いっぱいもらって勝ち組みなんですね
わかります
741:デフォルトの名無しさん
08/12/22 22:30:43
1.upto(100) {|i| eval "a#{i} = Array.new" }
1.9だと外側のbindingをevalに渡す必要があったりするのかな。
742:デフォルトの名無しさん
08/12/23 00:30:25
>729
その文って、Cで書くとすれば
int array[] = {3,4,7,2,9,1};
int *a,*b,*c,*d;
a=b=c=d=array;
みたいな感じでは?だからCでも全部同じ配列を指してしまうのは変わりないよ
Rubyでも、Fixnum同士ならその代入でも問題は起こらん
違うのは構造体やクラスから生成した、実体同士の代入ってのがRubyに無いことかな
743:デフォルトの名無しさん
08/12/23 02:50:57
Dir.glob("./*")
で、ディレクトリを含まないリストを得るにはどうやったら良いのでしょうか?
744:デフォルトの名無しさん
08/12/23 02:54:55
globは糞なのでls, dirを使いましょう
745:デフォルトの名無しさん
08/12/23 02:59:04
なるべく機種依存のコーディングは避けたいんですが・・・
746:デフォルトの名無しさん
08/12/23 03:04:57
Dir.glob("*").select {|f| !File.directory?(f) }
かな。ちなみに "./" は不要。
747:デフォルトの名無しさん
08/12/23 03:18:27
少しスレ違いかもしれませんが、特定のファイルをscanした時だけ
500 Internal Server Errorして落ちてしまうのですが、
タグ内で異様にスペースがやたらあるような文字列にscanすると異様に負荷がかかるとか聞いたことありませんか?
748:デフォルトの名無しさん
08/12/23 04:40:50
>>746
なるほど。ディレクトリ判定を入れればいいのですね。ありがとうございます。
749:デフォルトの名無しさん
08/12/23 06:41:46
>>747
Ruby自体はHTTPのエラーを出さない
それは、サーバが実行したコマンドが正規の出力をしなかったという意味しか持たないよ
原因を知りたかったら勝手な推測は止めて、その正規ではない出力が何かを調べる
コマンドラインから実行すれば一発だが、どうせコマンドラインから実行できないんだろうから、スクリプト内の実行部分を
begin
rescue Exception => e
File.open('/自分のディレクトリ/error.txt', 'w'){|f| f.print(e)}
end
で囲んでRubyの出す例外出力を読め
750:デフォルトの名無しさん
08/12/23 07:43:45
>>600
wikiみろ
751:750
08/12/23 07:44:16
誤爆
752:デフォルトの名無しさん
08/12/23 08:30:59
Windowsで日本語を扱っています。
require 'jcode'
$KCODE='SJIS'
str = 'aあいbうえおc'
上記のような時に2文字目までを切り出したいんですが、
「str[0, 2]」では2バイト目までということになってしまいます。
下記のような冗長なやり方しか思いつかないのですが、もっとスマートなやり方はないでしょうか?
jcodeのリファレンスマニュアルを見てみたのですが使えそうなものが見つかりませんでした。
i = 0
str_part = ""
str.each_char do |x|
str_part += x if i < 2
i += 1
end
753:デフォルトの名無しさん
08/12/23 08:41:38
>>752
str.split('')[0,2]*''
754:デフォルトの名無しさん
08/12/23 08:50:16
すごくスマートですね! Array経由とは考え付きませんでした。
755:デフォルトの名無しさん
08/12/23 09:18:23
strがめちゃくちゃ長くて
2文字目だけでいいときは
もったいない
756:デフォルトの名無しさん
08/12/23 10:06:48
配列内の数値の類似度を求めるのはどうすればいいでしょうか?
偏差なのか、相関係数なのか?
スレチですかね・・・・
757:デフォルトの名無しさん
08/12/23 10:23:04
>>756
配列の要素にアクセスする方法はRubyだな
758:デフォルトの名無しさん
08/12/23 10:26:20
「類似度」を定義しないことにはどうにも
759:デフォルトの名無しさん
08/12/23 10:33:02
>>756
具体例を出してみれば?
じゃないと他の人にはわからん
760:デフォルトの名無しさん
08/12/23 10:37:29
[1, 2, 3, 4]
[16, 8, 4, 2]
の二つの類似度は 100% です
761:デフォルトの名無しさん
08/12/23 10:51:47
>>758 さんの言うように定義の問題では。定義をすれば解き方は
いろいろある。逆に定義が無ければ何したいのかわからん。
偏差でも相関係数でも変数のタイプでも良いが。
762:デフォルトの名無しさん
08/12/23 10:56:24
Rubyでスマートな書き方して生産性が上がったためしがないな。
もう何年も使ってるけど相変わらず配列にデータ突っ込んで
forかeachでまわしてみたいなBASICと大差ないコードしか書いてないw
763:デフォルトの名無しさん
08/12/23 11:02:18
>>760
なぜそれが類似度100% ?
764:デフォルトの名無しさん
08/12/23 11:03:27
Ruby関係ないな
765:デフォルトの名無しさん
08/12/23 11:04:53
そだな
計算式を持ってきてRubyでの実装方法を聞くとかなら手伝う人が出るかも
計算式の出し方そのものは知らん
教科書なり論文なり読め
766:デフォルトの名無しさん
08/12/23 11:19:07
Eclipse に RDT を入れて開発しています。
Ruby Explorer で、[Run as]->[Ruby Application] を選択すれば実行できるのですが、
これを、コードを編集するウインドウがアクティブな時に、キーボードショートカットで
実行する方法はないでしょうか?
キー割り当てで、[Run Ruby Application] に Binding [F5] When [In Windows] もしくは
[Ruby Editor]で割り当てても反応なしでした。
Eclipse のバージョンは 3.4.1
RDT は 1.1.0.200812081651NGT です。
767:デフォルトの名無しさん
08/12/23 11:20:22
レーベンシュタイン距離でも求めれば?
768:デフォルトの名無しさん
08/12/23 13:37:32
>>749
自機でやるとエラー吐かないのに、鯖で動かすと特定の文字列を含むファイルだけ
500エラー吐くですよね。テストした結果scanで100パー落ちていましたし。
でも他のファイルなら普通に鯖でも動いている点から見て、作りが悪いのではなくて特定の文字が含まれてるファイルに対してscanの処理がいように重くなったことによる、
負荷の掛かりすぎて500なのではないかと。
>>749さんの方法も含めつつindexで処理する方法に切り替えや、怪しい文字列の置き換えなど施して処理するなどの方法をやってみたいと思います。
ありがとうございました。
769:768
08/12/23 13:47:40
今やってみた所、indexで切り出したら鯖実行で100%コケていた場所を抜けられました。
scanに比べて負荷が緩やかなんでしょうかindex。
770:デフォルトの名無しさん
08/12/23 14:00:56
原因を知りたかったら勝手な推測は止めて、その正規ではない出力が何かを調べる
771:デフォルトの名無しさん
08/12/23 17:54:55
130MHz駆動の組み込みマシンでrubyプログラムを走らせたら重すぎて笑った。
772:デフォルトの名無しさん
08/12/23 18:12:34
apacheで出してるerror_logみるとか
773:デフォルトの名無しさん
08/12/23 18:28:46
>>769
できるよ。
以上。
はい次の方。
774:デフォルトの名無しさん
08/12/23 19:06:53
自分用ライブラリです。なので、究極的にはどうでもいいんですけれど。
「ローカルファイルを読み込んで、書いてあるデータを変数とかに取り込むクラス」があります。
変数は外部からそれなりの頻度で参照されますが負荷とかは無視して結構です。
class HogeFile
def initialize(path)
@path = path ...
end
attr_reader :mtime, data2, ...
def parse
file = File.read(@path)
@mtime = File.stat(@path).mtime
@data1 = file.scan(/.../)
end
end
という、HogeFile.new.parse が必要なタイプと
class HogeFile
def initialize(path)
@path = path
@data = File.read(@path)
end
def mtime; @mtime ||= File.stat(@path).mtime; end
def data1; @data1 ||= @file.scan(/.../); end
end
という、なんというか遅延評価?っぽいのって、どっちをメインに使っていくのがいいもんでしょか。
こういうデータクラスってけっこう作るんですよね。
775:デフォルトの名無しさん
08/12/23 19:13:25
ほぼ全ての変数を必要とする(アクセスしない可能性のある変数というのがまず無い)のなら前者
変数をまとめてPStoreとかに保存する可能性があるとかいう場合も前者
っていうか基本は前者
data4 くらいで超ごっつい正規表現処理があって処理の流れが一瞬止まるとかいうことがあるなら後者がいいかも
ネットからファイルを適宜取得するタイプのライブラリでは後者を時々見るな
考え方のベースとなるものは君の言う通り遅延評価だ
それが有効かどうかだけで決めちゃっていいと思う
あるいはカッコイイかどうかだけでもいい
(この場合ほぼ全ての自作スクリプトで後者になって、2年くらいして見返して「あーこの頃は遅延評価時代だー」とか懐かしむことになる)
776:デフォルトの名無しさん
08/12/23 19:37:02
てかデータクラスにparseさせんな
それは別のクラスでやって、結果だけをアクセサ経由でデータクラスに登録しろ
777:デフォルトの名無しさん
08/12/23 20:00:17
>>776
えー
めんどい
778:デフォルトの名無しさん
08/12/23 21:05:40
>>769
その環境かかないとよくわからんぞ
共有レンタルサーバーなら負荷掛けるとかってに落とすところもある。
見れるならerror_logは最低みとかないとな
いや多分、個別の環境かかれても俺はなんともいえんと思うけどw
779:デフォルトの名無しさん
08/12/23 21:11:45
>>776
主張の理由kwsk
780:デフォルトの名無しさん
08/12/23 21:18:50
いやそれ自体はそのまんまだろ
めんどくさいからやんねーというのも反論そのまんまだ
781:デフォルトの名無しさん
08/12/23 21:27:09
そういう宗教があるんだろう
782:デフォルトの名無しさん
08/12/23 21:30:16
データとパーサを分けるのは設計の常識みたいなものだけど、個人で作るアプリなら分けなくてもいい。
他人に迷惑をかけないという意味でね。
783:デフォルトの名無しさん
08/12/23 23:02:54
>>771 むしろ ruby がちゃんと走ること自体結構感心した。130MHz だもの。
784:デフォルトの名無しさん
08/12/23 23:08:05
組み込みでも 130MHz とかいくのか・・・。
8~9年前は普通にノートパソコンで使ってたぜ・・・。
785:デフォルトの名無しさん
08/12/23 23:25:22
Mechanize で質問です。
agent = WWW::Mechanize.new
agent.get(url)
form0 = agent.page.forms[0]
form1 = agent.page.forms.name('form1')
form0.name == form1.name #=>true
form0 == form1 #=>false
となります。
form0とform1とは同じものを参照していると思ってたのですが,
どんな違いがあるのですか?
form0.action = 'hogehoge'はうまくいくのに
form1.action = 'hogehoge'はエラーになるので疑問が生じました。
786:デフォルトの名無しさん
08/12/23 23:33:45
>>784
うちの自宅サーバ、その頃のノートPCだったりする。(Pentium133MHz、メモリ40MB)
RubyのCGIが、起動するだけで4秒かかるよ!! 動き始めるとそんなに遅くないんだけどな……。
787:デフォルトの名無しさん
08/12/23 23:40:24
>>785
form1は WWW::Mechanize::List だから、= を使った代入は行えない
form1.action は form1[0].action の返り値、すなわち action 属性の文字列を返す
URLリンク(d.hatena.ne.jp)
form1.action = 'hogehoge' は文字列に代入するという奇妙なことになっているだけ
788:デフォルトの名無しさん
08/12/23 23:48:58
このへんの動作と返り値のオブジェクトの種類を全部把握しないと使えなくて紛らわしいので、
WWW::Mechanize::List は最新版 0.9.0 では削除されてる
agent.page.forms.name('form1') と書いたら NoMethodError で動作しない
Mechanize のバージョンが 0.8.5 かそれ以降なら form_with が使えるよ
それより古いなら、name に限っては agent.page.form('form1') がフォームオブジェクトを返すほぼ同じ動作をする
form0 == form1 を true にしたいなら、List からフォームオブジェクトを取り出して比較してくれ
form1[0] が WWW::Mechanize::Form クラスのオブジェクトを返して form0 と同じもののはず
789:デフォルトの名無しさん
08/12/24 00:04:55
う、答えになってね
> どんな違いがあるのですか?
「agent.page.forms[0] は WWW::Mechanize::Form クラスのオブジェクトを返しているが、
agent.page.forms.name('form1') は WWW::Mechanize::List クラスのオブジェクトを返してる」
が回答でございます
だから、
form1 = agent.page.forms.name('form1')[0]
と、List 内の要素を明示的に取り出さないと、WWW::Mechanize::Form オブジェクトそのものにはならないよ
「クラスのメソッドは Object#send で動作するし、返り値も普通に返ってくるけど、目的のクラスのオブジェクトではない」という変な状態
抽出作業が完了したら [0] をつけて特定する癖をつけておかないと、今みたいに変なとこで詰まったりするぞ
790:デフォルトの名無しさん
08/12/24 00:19:13
120MHzあればRubyは動くよね
rubygems は鬼のように重いけど
791:デフォルトの名無しさん
08/12/24 00:22:34
>>787
…このサイト作った奴バカだろ
せいぜい中堅どころのライブラリのメソッド全解説とか何が楽しいんだよ
792:デフォルトの名無しさん
08/12/24 00:29:41
>>791
現在のRubyはそのような
「こんなことまでわざわざ書く理由って何よ?」
という人の努力によってなんとかうまく支えられております
マニュアル書く人しかり、丁寧な導入記事書く人しかり
793:デフォルトの名無しさん
08/12/24 00:49:24
>>791
真意は知らないけど個人的感想としては、mechanizeのライブラリ構造も
単純ではないしRubyの勉強方法として良い手だと思った。
「理解した(自称)」以上に理解が進んでないと説明することなんて
できないんだよなぁ・・・。説明してる内に薄っぺらさが露呈する。
告白デバッグが気付かせてくれるのはまさにそれ。
794:デフォルトの名無しさん
08/12/24 00:58:31
以上ちらうら
795:デフォルトの名無しさん
08/12/24 03:08:36
hpricotでdiv.entryで取得した記事数分ハッシュを作成するにはどうすればよいでしょうか?
Keyはentry_1->entry_nまででvalueは単語数とか他で計算した値を入れようと思うのですが.
796:デフォルトの名無しさん
08/12/24 03:27:22
mechanizeのデフォルトパーサがHpricotからNokogiriになったな。
いつのまに・・・
797:デフォルトの名無しさん
08/12/24 05:57:55
Railsを使ってプロジェクトを自動生成して
ruby script\generate controller main index
を実行したのみのプロジェクトでRubyのテストをしています.
webrickを起動して
URLリンク(localhost:3000)
のhtmlページは,問題なく表示するのですが
URLリンク(localhost:3000)
でindexページを見ようとすると
1度目は正常に表示されますが,
更新ボタン(もしくは,アドレスバーの移動ボタン)を押すとWebrickが次のようなエラーを出して終了していしまいます.
127.0.0.1 - - [24/Dec/2008:05:44:28 東京 (標準時)] "GET /main HTTP/1.1" 200 283
- -> /main
127.0.0.1 - - [24/Dec/2008:05:44:33 東京 (標準時)] "GET /main HTTP/1.1" 200 283
- -> /main
C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/mysql_adapter.rb:196: [BUG] Segmentation fault
ruby 1.8.6 (2007-09-24) [i386-mswin32]
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
ひとつ目の-->/mainが移動時,ふたつ目が更新時です
どのように対応すればいいでしょうか.
798:デフォルトの名無しさん
08/12/24 07:21:44
>>795
search メソッドの返り値は Hpricot::Elements で、配列のような動作をするっていうか配列でできることは全部できる
これに詰まってる要素に当たるものは Hpricot::Elem だ
Hpricot::Elem にはタグに囲まれてる文字列を適当に返す inner_text メソッドや
HTMLで整形して返す inner_html メソッドがあるし、
Hpricot::Elem オブジェクトから search でさらに探すこともできる
それ以上のもんではないので、普通にどうにかして作れ
799:デフォルトの名無しさん
08/12/24 08:43:05
>>797
[BUG]と出た場合、Rubyのスクリプトレベルの誤りではないので、
開発サイドに再現コードを教えるくらいしかできることはない。
800:デフォルトの名無しさん
08/12/24 08:49:16
BUGと出ても、自分がわけのわからんオブジェクトを引数でメソッドに渡してるとか
回避できるものもあるけど
801:デフォルトの名無しさん
08/12/24 09:45:55
回避できてもバグはバグなんじゃね?
802:デフォルトの名無しさん
08/12/24 10:59:53
すいません、ググっても解決できなくてハマっているので教えてください。
ruby1.8にて、ptyとexpectモジュールで、自動sshログインをしようとしているのですが。
cygwin上では、問題なく動かせるものの。
solaris(free10)では、spawn('ssh ***.***.**')の所で
> open: pty slave: No such file or directory
とでてしまいます。
このspawnの内部をsshのフルパス指定にしたり、lsなど他のコマンドに代えても同じでした。
どうもptyモジュールが上手く動かせてないと考えているのですが。。。
特にptyにはパラメータはなさそうです。
ptyがやろうとしてる仮想tty?という処理がなんなのかが理解できてない....
すみません、どなたか動かすヒントだけでも教えてください。
803:デフォルトの名無しさん
08/12/24 11:18:49
>>802
Solarisスレで聞く
804:797
08/12/24 13:03:37
>>799-801
こちらの環境が悪いんじゃなくて
Ruby(もしくはRails)開発側が悪いってことでしょうか?
手書きでは,まだコードを一行も書いていないので
そんなことないと思いたいのですが...
Rubyのダウングレードとかで対応できないか今夜にでもやってみます...
805:デフォルトの名無しさん
08/12/24 13:22:51
>>804
まずは1.8.7-p72のか、せめて1.8.6の一番新しいp287を試してみるべき。
URLリンク(www.garbagecollect.jp)
one-click installer使ってるんだろうけどこの際我慢。
806:802
08/12/24 14:13:10
1.8.7-p27 のソースからのビルドでしたので。
なにかヒントがないかとざっと眺めると、 ./ext/pty を発見。
ダメ元でpty.c をのぞいて、問題点を探してみると、
どうも"TIOCSCTTY "の定義が無い事がまずいんじゃないかと推測。
この情報を元にググってみると
去年の8月、ruby-lang に "Bug in ruby extension" というスレを発見
> I noticed that Solaris 10 does not support TIOCSCTTY so in function
> establishShell() the child process closes the slave device and reopens it to ...
どうやらSolaris 10 において、ptyの問題が指摘されている模様。
TIOCSCTTY がキーワードみたいだが。 私では何がまずいか理解できない(汗)
このスレで問題対応パッチが登場し、最後にmatzさんが"そのパッチをコミットしてくれー"と書いている。
これが今回の私の問題点と同じであるなら、最新版なら動くはずじゃん。と思い・・・.
あ、でも、1.8.7-p27 が 1.8系の最新版ですよねぇ。
うぐぐ、この問題と関係がないのかなあ。。。。(´・ω・`)ショボーン
>803
レスサンクス。
推測通りsolarisの環境がらみの問題なら、海外で聞いた方がよさそうですね。
英語で聞くのは閾が高いなあ...(´・ω・`)
807:802
08/12/24 14:14:57
>806
s/1.8.7-p27/1.8.7-p72/
808:デフォルトの名無しさん
08/12/24 15:34:50
>>786
Passenger入れろw
っていうほどのメモリもないみたいだがwww
809:デフォルトの名無しさん
08/12/24 16:20:13
以下のようなフォームデータを cgi クラスで受け渡したいと思っています。
<form action="" method="post">
<input type="text" name="server" value="#{server}" />
<input type="text" name="name" value="#{name}" />
<input type="submit" value="更新" />
</form>
それも同じ形式のフォームを何個か繰り返しおいて、しかもその個数も可変にしたいと思っています。
さらにそのデータは pstore に保存したいと思っています。
古い CGI での方法ならば変数名 server などに番号をつけて server1, server2 などという変数名として
ループで 1..max をまわして処理するというのが思いつくのですが、Ruby 的にエレガントな方法はあるのでしょうか?
配列やハッシュなどを使ってスマートに書く方法があったら教えていただけませんでしょうか。
810:デフォルトの名無しさん
08/12/24 17:50:42
hiddenを入れれば区別出来るんじゃね
811:797
08/12/25 00:36:49
>805
どちらをインストールしてみても結果は一緒でした...
これってRuby開発者側に伝えた方がいいのでしょうか
うちの環境のみの再現だと思うのですが...
812:デフォルトの名無しさん
08/12/25 01:18:37
rakeで、src/**/*.txt から dst/**/*.html に変換するような file タスクを書きたいんですけど、どうかけばいいですか。
813:デフォルトの名無しさん
08/12/25 05:11:00
a hrefの値の中にABCっていう文字列があるリンクの中身つまりinner_textを取得するにはどうすればいいでしょうか?
hpricotやNokogiriで指定しようにも複数のページでXPATHのaの順番が違っていて取得できません。
814:813
08/12/25 05:36:00
すいません、事故解決です。
doc/"a[text()*='ABC']"でできますね。
Hpricotとかをtagやセレクタでぐるぐる回すものだと勘違いしてました。
お騒がせしました。
815:デフォルトの名無しさん
08/12/25 06:04:46
>>811
自分のコードかデータにバグを引き起こす原因があるとは思わないの?
816:デフォルトの名無しさん
08/12/25 06:44:34
>>815
スレリンク(tech板)l50
817:デフォルトの名無しさん
08/12/25 06:51:44
>>797
とりあえず該当の行を見て、まずどこて落ちたのかを調べるべき
それでも本体のバグっぽかったら諦めて報告
>>809
本題とは関係ないけど、CGIアプリケーションでPStore使うのはオススメしない
rubyのバージョンが古くなるとデータ読めないことがあるから
自分しか使わないスクリプトなら問題はないけど
今ならYAML::Storeオススメ
818:デフォルトの名無しさん
08/12/25 13:26:33
>>810
hiddenを入れて対処できました。ありがとうございました。
>>817
そうなんですね。YAML::Store に書き換えておきました。ありがとうございました。
819:デフォルトの名無しさん
08/12/25 13:59:37
>>815
>>797見てそう思う方がおかしくないか?w
でもmysql環境を見直してみる価値はありそう。
820:デフォルトの名無しさん
08/12/25 15:36:57
某サイトのurlをopenした所、
uninitialized constant StanderdError (NameError)
こんなメッセージが出てプログラムが途中で止まることがあるですけど、これって何が原因なんでしょうか。
821:デフォルトの名無しさん
08/12/25 15:38:47
>>820
>StanderdError
StandardErrorと書いたつもりのどっかでスペルミスしてる。
822:デフォルトの名無しさん
08/12/25 15:45:45
がっちょわるー
class MyHogeError < StanderdError
end
とか書いてあるんだな
がっちょわるー
>>820
使ってる外部ライブラリの中から「StanderdError」という文字列を探して「StandardError」に直接書き換えとく
823:デフォルトの名無しさん
08/12/25 15:51:11
> rubyのバージョンが古くなるとデータ読めないことがあるから
これをあまり心配してない俺
その時になってから過去のバージョンの pstore で読んで、新しいバージョンの pstore で書き出せばよくね?
PStore を YAML で置き換えて常用するなんてブルジョワジョワジョワに過ぎるだろ
824:デフォルトの名無しさん
08/12/25 15:57:22
どんなデータをどんだけ保存したいかによるね
ファイルが数KB程度で収まるなら読みやすいYAMLのほうがよかろう
なんかよくわからん大量のデータの数百KBを読み書きしまーすというのならさすがにちょっと
うっかり画像を保存したことがあるが遅くて死んだ
825:デフォルトの名無しさん
08/12/25 16:06:11
バイナリだとクラッシュしたときの復旧がしんどいから
ちょっとしたデータのシリアライズにはyaml/storeがお気に入り。
826:デフォルトの名無しさん
08/12/25 16:09:07
とりあえず一般ユーザーはこれ使っとけ、と言えるほどのものがRubyにはまだないんだ
用途に応じて使って適宜バックアップだの負荷測定だのしなきゃならん
827:デフォルトの名無しさん
08/12/25 16:15:51
>>826
ガイドみたいなのがあるといいよね
ってるびまにあるのか
828:797
08/12/25 16:26:27
>819
mysql関係ですか,
とりあえず今夜は,sqliteで同じように実装してから
再現確認してみます.
829:デフォルトの名無しさん
08/12/25 16:51:39
>>821
>>822
begin
open("URLリンク(*****)")
rescue Timeout::Error
rescue StanderdError <<<<<某プログからのコピペまんま
rescue EOFErro
rescue Exception
rescue NameError
end
こんな感じで例外関係の対処法ググっては追加していた中で某ブログからコピペしたものが、
スペルミスしていたとは..。
即回答ありがとうございました。実は昨日からハマってました。
830:デフォルトの名無しさん
08/12/25 17:05:59
>>829
コピペうんぬんより、エラーメッセージを*よく*見て原因を考えるクセをつけようぜ!
831:デフォルトの名無しさん
08/12/25 22:03:26
Ruby学習者の「2冊目の本」、買ったやついる?どう?
832:デフォルトの名無しさん
08/12/25 22:24:03
エロティックランゲージだかなんだか副題がついてたやつか
833:デフォルトの名無しさん
08/12/25 22:26:47
今すぐ買ってくるわ
834:デフォルトの名無しさん
08/12/25 22:39:08
あれはRuby学習者というか、Rubyを使いたい人向けの本だろ
位置的に初学者本の次くらいなんじゃねーかとは言われてないわけでもないが
835:デフォルトの名無しさん
08/12/25 22:46:05
隠しても仕方ないか
Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~
URLリンク(www.amazon.co.jp)
> 1-2 サンプルプログラムに特化した言語、HQ9+
> HQ9+とは
> HQ9+インタプリタを作ってみよう
> 1-3 8つの命令ですべてを記述する言語、Brainf*ck
> 1-4 決して印刷できない言語、Whitespace
> 2 Esoteric Languageを作る
> Esoteric Languageの設計と実装
> Starry言語の設計
> 付録 Esoteric Language傑作選
> Befunge、 Wierd、Shakespeare、Chef、Unlambda、Grass
> False、NULL、AAAAAAAAAAAAAA!!!!、INTERCAL、Malbolge、KEMURI、Taxi
836:デフォルトの名無しさん
08/12/25 23:09:53
なんかBFスレでは、へんな言語をネタにしたRuby入門本とか言われてたが。
...GRASS、無いのかw
837:デフォルトの名無しさん
08/12/25 23:15:39
>>836
GrassとGRASSは違う言語?
838:デフォルトの名無しさん
08/12/25 23:27:35
あ、Grassです。見えてなかったらしい。すまん。
839:デフォルトの名無しさん
08/12/25 23:34:55
新しい「プログラミング言語 Ruby」が来年の1月に出るのか。
1.9.1のリリースが迫って書籍もまた出てきそうだな。
840:デフォルトの名無しさん
08/12/26 01:05:48
RubyでSQLを用いるときってどういう時ですか?
解析させるデータ数が多いとか相互参照が多いときとかですかね?
841:デフォルトの名無しさん
08/12/26 01:11:04
リレーショナルデータベースを使うとき...というか、
どういう時にリレーショナルデータベースを使うか、という質問?
842:797
08/12/26 05:53:14
とりあえず解決したので報告です.
原因はいまだにわかりませんが
Railsのヴァージョンを
2.2.2 -> 2.1.2
へとダウングレードすることで正常動作するようになりました.
mysql postgres sqlite3
と三つ試しても同じ結果だったので,
諦めかけてましたが,
友人が作ったv2.1.2のプロジェクトを実行したとき
偶然うまくいったのがきっかけでした
843:デフォルトの名無しさん
08/12/26 11:31:16
>>840
Rubyの「メモリ内でのハッシュ構造+ディスク上でのPStoreのようなもの」ではどうにもならない場合
具体的には>>841
844:デフォルトの名無しさん
08/12/26 12:35:59
SQLの方が良い場合も歩けど
オブジェクトのままシリアライズした方が良い場合も結構ある
後者だと単純にSQLに置き換えるって訳には
845:デフォルトの名無しさん
08/12/26 23:20:20
鋸のXPathが期待した結果を出さないのだが,なぜ?
url = "URLリンク(bit.sikkou.jp)"
doc = Nokogiri::HTML(open(url))
puts doc.xpath('//b[text()="公告日"]')
「<b>公告日</b>」になるはずなのだが,
結果は空白(要するに検索できてない)
エンコードの問題でしょうか?
ちなみにスクリプト自体はUTF-8です。
846:デフォルトの名無しさん
08/12/26 23:25:17
>>845
あ~、これは誰かがどっかで説明しないといけないんだけど、Nokogiri.new は実は引数を3つとるんだよ
第3引数は文字列の文字エンコードを書く
doc = Nokogiri::HTML(open(url), nil, 'SHIFT_JIS')
って書いてみ