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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
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
893 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 16:34:31 ] 探訪Ruby 第1回 Rubyの国へようこそ 第2回 テスト第一主義 第3回 Wiki Wiki 第4回 Blogの世界 第5回 アスペクト指向 第6回 RubyとEmacs 第7回 Instiki 第8回 テンプレート 第9回 DBM 第10回 tDiary 第11回 Webアプリケーションの基礎 第12回 Webアプリケーションの基礎(その2) 第13回 Webアプリケーションフレームワーク 第14回 マークアップ・マークダウン 第15回 ダイコン 最終回 ネタのタネ
894 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 18:25:28 ] >>891 WWW::Mechanizeもそうだけど、ドキュメントがないからどうやったら早いのかわかりずらいよね。 俺も苦労した。 ただいっておくけど、 > 「そのサイト専用の正規表現使ってHTMLからdivやtable単位でscanで切り出して > 配列にしさらに正規表現で切り出す」 ってのが楽にできるのが、Hpricotですよ。
895 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 20:28:24 ] 楽さか速度のどっちを選ぶかだね。
896 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 05:08:19 ] >>894 でいかにもな感じで勧めてみたのだが・・・ >>891 みたいな、「それ今知っている技術でやった方が早いよ」と思う人にはやはり勧められない。 文句言うだけなので、やめておいた方がいい。 Hpricotは、半分は「おおーすげー」って感動するためにあるようなものでし、 基本この手のライブラリは、ソース読まないとまともに使えないし、 とにかく早く(速くじゃないよ)やりたいなら、 導入コストがでかいので、gemで入るような既存のライブラリを使うことは勧めない。
897 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 05:30:32 ] rubyでXMLを扱うのに速度の速いライブラリはありますか? rexmlを使うと10秒近くかかるので 最低限の機能としてはXPATHが使えればいいです。
898 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 05:43:42 ] Hpricotはここ見れば簡単にわかるだろう mono.kmc.gr.jp/~yhara/rubyscraping/?Hpricot
899 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 09:38:02 ] そんなお前らに超オススメ scrAPI wota.jp/ac/?date=20070115#p01
900 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 10:57:19 ] Hpricotは「抜き出したい範囲の終わりの文字列」が特徴的で自明なときは非効率 html.scan(/<table class="nested"><tr><td>(.+?)<\/tr><\/td><\/table>\r\n<div class="box1/) みたいな感じ 「どう言っても対応する</div>だとしか言えない」とかいう場合はHpricotのようなパーサの出番 あとHpricotを使っておきながらto_htmlしたものとかを正規表現でscanしたら負けなのでよろしく
901 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 11:03:30 ] >>892-893 Rubyの記事だけ抜き出してうんこpdfの段組をばらして htmに変換してついでにHTML Help形式にもコンバートして売って欲しい・・・
902 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 11:08:50 ] >>897 HpricotのXMLモードかlibxml-ruby
903 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 11:44:50 ] >>897 Hpricotが拡張ライブラリ使ってるから早いんじゃね? 使ったことはないが
904 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 15:20:46 ] expect.rb は標準で入っているんですか? ActiveSriptRuby で入れた ruby 1.8.6 には入っていないようです。
905 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 15:55:12 ] >>902 Hpricotインストールしてみたけどまだ5秒ぐらいかかる。 libxml-rubyはgemでインストールしようとしたらエラーが出たので挫折。 ただHipricotより圧倒的に速そうだ。
906 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 16:12:42 ] >904 pty拡張の一部なので(ext/pty/lib/expect.rb)、 ptyのないシステムには入っていないかも知れない。
907 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 21:04:17 ] Rubyをシュミで使うくらいには初心者から片足抜けたんだけど、 お勧めの面白そうな言語ある? PerlとCとJavaは除外で
908 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 21:05:34 ] Python
909 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 21:11:07 ] 最近はlispをたしなむのが流行らしい。
910 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 21:18:30 ] Schemeあたりに触れて「面白いけど使えねー」と嘆き Haskellあたりを食い散らかして「作れるもんねーよ」と嘆く そしてRubyに戻ってくると…「俺こんな汚いコードや粗悪なアルゴリズム書いてたのか!」 とりあえずはLisp系列か関数型言語のどっちかだろ
911 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 21:58:41 ] Pythonは変な意味で被らないか
912 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:28:38 ] すいません、教えてください。 @one, @two, @three, @four, @five ... とインスタンス変数をたくさん持ったオブジェクトAがあり、 @one, @two, @three というように上の一部に対応するインスタンス変数(のみ)を 持ったオブジェクトBがあります。 Bのインスタンス変数すべてが対応するAのそれと同じ対象を 参照していればtrue、そうでなければfalseを返すメソッドが ほしいのですが、どうすればキレイに書けるでしょうか?
913 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:29:32 ] TOOWTDIな世界に触れてみるのは悪くないと思う
914 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:33:31 ] >>913 なんかの書き間違いかと思ったら、パイクソかよ。
915 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:53:00 ] >>912 そういう全比較の結果に頼らなければならないこと自体が何か非常にまずい
916 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 22:57:00 ] >>912 よくわかんないけど、Object#instance_variables とか Object#instance_variable_get とか使えばいいんじゃないか。 a = A.new b = B.new b.instance_variables.each do |varname| val = b.instance_variable_get(varname) if val != a.instance_variable_get(varname) puts "b.#{varname} != a.#{varname}" break end end
917 名前:912 mailto:sage [2008/02/17(日) 23:09:35 ] >>915 自分もそんな気はしてたんですが、アプリの終了時に 上書き保存のダイアログを出すかどうか調べる方法として、 こんなへたれロジックしか思いつきませんでした・・・。 >>916 これ、いただきます。感謝です。リフレクション系のメソッドが なかなか自然に浮かんできません。修行します・・・。
918 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 00:08:57 ] >>917 もっといい方法があるはず リフレクション無しでやれないかどうか、頭を捻って考えるべき どうしても思いつかないなら、ここでソース(or具体的なクラス構成)を提示して 「どんな方法があるか」を質問すればいい
919 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 01:34:54 ] AとBで共通に参照してる変数群が表す情報は オブジェクトで表現してみるとか。比較一つでいいし。 関係ないこと纏めてもしゃーないからやっぱ 設計しだいだけど
920 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 05:45:53 ] >>917 変更した時にフラグを立てることは出来んの?