Ruby 初心者スレッド Part 39
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2010/10/21(木) 10:06:13★注意★ Ruby 1.9.2 は初心者には若干時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
文字エンコーディング等の外部基礎知識が必要な上、不完全対応の第三者ライブラリでの問題の切り分けが手間です。
1.8.7 は 1.9 系の新機能のいくつかが利用可能なため、1.8.7 を習得すればスムーズに 1.9 系に移行できるでしょう。
関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・エラーメッセージの共通そうな部分やエラーの出るモジュール名でググる
・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
・エラーメッセージ(自力で訳さずなるべくそのままで)
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0002デフォルトの名無しさん
2010/10/21(木) 10:07:21Q:
いちからRubyを始める初心者向けのRuby入門書は何がありますか?
A:
プログラム作成自体の初心者なら
・「たのしいRuby 第3版 Rubyではじめる気軽なプログラミング」
http://www.amazon.co.jp/gp/product/4797357401/
文法は理解済み(orリファレンスで乗り切る既言語習得者)の場合のRuby様式を知る必携2冊目
・「初めてのRuby」
http://www.amazon.co.jp/dp/4873113679/
以下は外れが少ないとされている本です。必ず立ち読みした上で自分の目的とレベルに応じて購入してください。
・「Rubyレシピブック 第2版 268の技」(初心者向け)
http://www.amazon.co.jp/dp/4797340045/
・「プログラミングRuby 第2版 言語編」(初心者向け)
http://www.amazon.co.jp/dp/4274066428/
・「Ruby Way 第2版」(脱初心者向け)
http://www.amazon.co.jp/dp/4798115339/
・ 「Rubyクックブック ―エキスパートのための応用レシピ集」(脱初心者向け)
http://www.amazon.co.jp/dp/4873113245/
以下の本は言語作者が書いた最新本ですがとりあえず初学者向けではありません。
・「プログラミング言語 Ruby」(言語として深く知りたい人向け)
http://www.amazon.co.jp/dp/4873113946/
0003デフォルトの名無しさん
2010/10/21(木) 10:08:18・Ruby Home Page 【公式、お役立ち度が微妙】
http://www.ruby-lang.org/ja/
・Rubyリファレンスマニュアル 【検索機能休止中、Googleなどの併用を】
http://www.ruby-lang.org/ja/man/
http://www.ruby-doc.org/ 【詳しい英語版】
・HTMLヘルプ版リファレンスマニュアル配布さん 【Windowsで便利、検索も無論可能】
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
・Programming Ruby - The Pragmatic Programmer's Guide 【好評書籍の初版がネットで、ただし英語】
http://www.ruby-doc.org/docs/ProgrammingRuby/
・Rubyist Magazine - るびま 【ライブラリ紹介などの読み物、過去のコードレビューは一読の価値あり】
http://jp.rubyist.net/magazine/
・逆引きRuby 【やりたいことから探すWiki、最近元気ないので編集者募集】
http://www.namaraii.com/rubytips/
・はてなキーワード > Ruby 【うっかりどっさりまとまったリンク集、説明なし】
http://d.hatena.ne.jp/keyword/Ruby
・RubyForge 【○○をやりたい管理されたライブラリを探すならここ、英語】
http://www.rubyforge.org/
・GitHub 【○○をやりたいコードをとにかく探すならここ、英語】
http://github.com/
・日本Rubyの会 【最近はオフライン勉強会の寄り合い場と化しているので近くで勉強会があれば】
http://jp.rubyist.net/
0004デフォルトの名無しさん
2010/10/21(木) 10:09:00【RoR】Rubyについて Part 41【CPAN vs RubyGems】
http://hibari.2ch.net/test/read.cgi/tech/1281473294/
●アンチスレ
Rubyについて(アンチ専用) Part004
http://pc12.2ch.net/test/read.cgi/tech/1249737531/
●Railsスレ
【Ruby】Ruby on Rails Part10
http://hibari.2ch.net/test/read.cgi/php/1282991262/
●Windows用スレ
【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc12.2ch.net/test/read.cgi/tech/1155031689/
●GUIの使えなさを堪能するスレ
Ruby で GUI するスレ
http://pc12.2ch.net/test/read.cgi/tech/1269609576/
●ぶん投げスレ
Rubyの宿題教えてください。2限目
http://pc12.2ch.net/test/read.cgi/tech/1200175247/
●前スレ
Ruby 初心者スレッド Part 38
http://hibari.2ch.net/test/read.cgi/tech/1282781922/
Ruby 初心者スレッド Part 37
http://hibari.2ch.net/test/read.cgi/tech/1274121477/
Ruby 初心者スレッド Part 36
http://pc12.2ch.net/test/read.cgi/tech/1269233796/
0005デフォルトの名無しさん
2010/10/21(木) 10:09:55・Ruby 1.8.5
レンタルサーバ等にいまだに残ってる非安定な古いバージョン
1.8.6 にすらなってない理由はたぶん管理の手抜きなので怒ってよい
・Ruby 1.8.6
過去の長期政権と数の暴力で一大勢力圏を維持中の旧安定版
公開スクリプトはこれでも動作するべきではあるんだがそろそろ 1.8.7 に譲ってくれ
・Ruby 1.8.7
1.9 シリーズの機能をいくつか足したハイブリッドなバージョン、初学者にこそお勧め
1.9 系機能は 1.8.6 では動かないが「えーマジ1.8.6!? 1.8.6が許されるのは小(AA略」と煽ってよい
・Ruby 1.9.0
不安定にして先鋭機能が超満載の開発版バージョンだったもの
1.9.x は本来全てが開発版の呼称だったのだが、事情が変わって(ここ笑うところ)1.9.1 は安定板に
・Ruby 1.9.1
1.9 系列安定版の最新版のひとつ前(現在は1.9系列としては1.9.2を推奨)
本体と添付ライブラリの動作は問題がないのだがgem等外部第三者ライブラリの対応が超適当特に英語圏産
・Ruby 1.9.2
1.9系列安定版の最新版
素人目にはどこがスゴいんだかわからないくらい慎重にバージョナップされたある意味つまんない安定版
初心者を脱した人が外部ライブラリの開発コミュニティに参加して1.9.2対応進めてくれたりすることを期待中
0006デフォルトの名無しさん
2010/10/21(木) 10:11:12OneClickInstaller は単に古すぎ、RubyInstaller は MinGW32 版で現状扱い怪しい、cygwin 版は cygwin マニア専用
IDEつまり統合環境のお勧めは特にない(せいぜい汎用のEclipseかNetBeans)、RDE は古くて独自すぎで Ruby に慣れた人向け
■ Windows でとにかく迷いたくない普通の人 … ActiveScriptRuby 1.8.7
ttp://arton.hp.infoseek.co.jp/indexj.html
の題字のでかい 「ActiveScriptRuby 1.8.7(p302) with-winsock2 tcl-stub」
マニュアルはWebで見ることもできるが手元にあると便利、1.8.7 の HTML ヘルプ版が
ttp://www.ruby-lang.org/ja/documentation/
の「Rubyリファレンスマニュアル刷新計画 chm版 1.8.7用」
夢のお告げ等、何かの間違いで Ruby の知識がないうちから 1.9.2 を使って苦しみたいマゾい人は
ttp://www.artonx.org/data/asr/ の「Ruby-1.9.2-p数字 Microsoft Installter Package」
・初心者向けチュートリアル記事(過去スレで出たもの)
ホワイの(感動的)Rubyガイド
http://www.aoky.net/articles/why_poignant_guide_to_ruby/
プログラミング入門 - Rubyを使って -, by Chris Pine, 日本語ver. by S. Nishiyama
http://www.ie.u-ryukyu.ac.jp/~kono/software/s04/tutorial/
Ruby チュートリアル (Ruby 1.8.6 編)
http://www.okisoft.co.jp/esc/ruby/tut.html
0007デフォルトの名無しさん
2010/10/21(木) 10:34:36これiswebライトだから今月末でサーバ終わるだろ
0008デフォルトの名無しさん
2010/10/21(木) 10:38:270009デフォルトの名無しさん
2010/10/21(木) 10:43:140010デフォルトの名無しさん
2010/10/21(木) 14:27:17移転の話が載ってないということはそもそも気づいてない可能性が高い
誰かメールしたれ
0011デフォルトの名無しさん
2010/10/21(木) 14:42:16,/ ノ ヽ ~\
/ ノ IPA ヽ ~\
/ ノ ヽ、 `ヽ
| ノ / ̄\ / ̄~ヽ ヽ i
| ノ | ノ
\ | <●> <●> ( )
\ | | | i /
| / ヽ レ
i (●_●) /
i、 ,-――-、 ・ /
i、 <(EEEEE)> ∵/ IPA Rubyは誰でもウェルカム
i、 \ ./ /
\ ーー ,ノ
,,.....イ.ヽヽ、ー-―一ノ゙-、.
: | '; \_____ ノ.| ヽ i
| \/゙(__)\,| i |
0012デフォルトの名無しさん
2010/10/21(木) 18:30:54>>2
Rubyレシピブック 第3版 303の技
http://www.amazon.co.jp/dp/4797359986/
最近Amazonって旧版のページ行くと新版でてるよって教えてくれるけど
これには機能してなかった
1.8/1.9両対応らしいから旧版買った人はカワイソス
0013デフォルトの名無しさん
2010/10/21(木) 22:20:230014デフォルトの名無しさん
2010/10/21(木) 22:37:11だめじゃないけど、Ruby初心者でjrubyとかつらそうな感はある。
あと、jruby固有の話題を扱いたいなら、別スレ立てた方がいいかもね。
0015デフォルトの名無しさん
2010/10/21(木) 22:41:38が今ひとつよくわからないので正しい使い方を知っている人がいたら
教えてもらおうと思いました。コマンドラインとか、エラーメッセージ
とかです。巨大整数を変換するのにlong型に入らなかったという内容の
エラーが出ます。またJrubyを使うと実行速度は上がるのでしょうか?
0016デフォルトの名無しさん
2010/10/21(木) 22:50:31RubyとJavaの両方でライブラリを公開できる程度の知識があれば可能
0017デフォルトの名無しさん
2010/10/21(木) 22:58:44Rubyで作った暗号をJAVAに置き換えようと思ったんですが、コマンド
一つじゃできないんですか?
0018デフォルトの名無しさん
2010/10/21(木) 23:06:43RubyとJavaの両方でライブラリを公開できる程度の知識があれば可能
ちなみにこれはそんなに高度なことを要求されるわけでもない(初心者ではないというだけ)
というか、ドイツ語→フランス語翻訳サイトの使用に必要なものは何かというと
ドイツ語とフランス語だよな
翻訳されたフランス語がきちんとフランス語として正しいかどうかを検証するためには
フランス語の知識がやっぱ要るよな
で、結局そんな人はドイツ語の文章を読んでフランス語を自力で書いたほうが早いよな
つまりその程度
0019デフォルトの名無しさん
2010/10/21(木) 23:08:50何を言っているわからないw
>>15
> RubyをJAVAにコンバートする
もっと詳しく
ソースコードを変換するという意味?
Rubyで書いたソースコードをJavaの環境で動かすという意味?
> RubyをJAVAにコンバートするアプリとして紹介されたんですが、
紹介者に聞いたほうがあなたの状況も知っていて答えているだろうし、多分早いと思う
>>17
> Rubyで作った暗号をJAVAに置き換えようと思ったんですが、
Rubyで「作った」というのは生成した暗号なのか?Rubyで暗号化するためのソースのことか?
Javaで置き換えるとはどういう意味なのか?Javaで暗号を復号化できさえすればいいのか?
「Ruby 暗号 Java」でググると同じようなことをやっている人は見つかるがこういうのは需要があるのか?
0020デフォルトの名無しさん
2010/10/21(木) 23:10:09>>15
>RubyをJAVAにコンバートするアプリとして紹介されたんですが
モルダー、あなた騙されたのよ
0021デフォルトの名無しさん
2010/10/21(木) 23:11:34mixi Engineers’ Blog ≫ OpenSSLの暗号文をJava/Perl/Rubyで開く
http://alpha.mixi.co.jp/blog/?p=91
Javaで暗号化したデータをPerlで復号化しようとしたら大変だった件 - ダウンロードたけし(寅年)の日記
http://d.hatena.ne.jp/download_takeshi/20100819/1282173492
Java で暗号化したデータを Ruby で復号しようとしたら大変だった件 - 口内炎延焼
http://d.hatena.ne.jp/ssig33/20100823/1282554827
0022デフォルトの名無しさん
2010/10/21(木) 23:16:10JRubyは
「これなら、且つ、俺ならRubyで書いたほうが早いが、オリジナルRubyの実行環境がない」
「が、Javaならある」
という狭い条件のときにのみ使う
0023デフォルトの名無しさん
2010/10/21(木) 23:16:57のです。
0024デフォルトの名無しさん
2010/10/21(木) 23:20:18RubyのコードがJAVAに変換されて出てくると思ったんですが違うみたい。
0025デフォルトの名無しさん
2010/10/21(木) 23:26:530026デフォルトの名無しさん
2010/10/21(木) 23:32:41AOTモードでコンパイルすればいい
JVMを常に起動した状態のサーバVM上で、そのプログラムに応じた専用の最適化をすれば、
単純なプログラムではRuby1.9.2と同等か速いこともある
0027デフォルトの名無しさん
2010/10/21(木) 23:34:42とかメソッドなんかあったりして覚えにくい先入観があります。
0028デフォルトの名無しさん
2010/10/21(木) 23:43:52コマンドラインを教えてください。またどの程度速くなりますか?
0029Perl忍者 ◆M5ZWRnXOj6
2010/10/21(木) 23:44:12消えろてめえみらいたなカスが呼吸してるだけで目障りなんだよ
てめえらがルビーやることでさらに俺の怒りへのボルテージをかきたたせるがね
お前らゴミ糞は死ねよ
まつもとひろゆき拝んで死ね
0030デフォルトの名無しさん
2010/10/21(木) 23:47:38遅くなる
0031デフォルトの名無しさん
2010/10/21(木) 23:48:470032デフォルトの名無しさん
2010/10/21(木) 23:55:120033デフォルトの名無しさん
2010/10/21(木) 23:59:23まあ当たり前
crubyでこれ以上ないくらい効率的なスクリプトであって、
VM起動済みのjrubyで何十回とベンチマークとってチューニングすれば、
crubyよりも速い実行時間を得られることがあるかもしれない
0034デフォルトの名無しさん
2010/10/22(金) 00:02:20どこの誰に騙されたのか知らんけど>>22が概ねJRubyの真実
0035デフォルトの名無しさん
2010/10/22(金) 00:09:58というのは真実であって欲しいなあ
で、まあ、Rubyスクリプトが遅いのは普通はスクリプトの作り方が悪いんよね
コマンド一発で直してくださいとか言いそうだがそんなもんできんので勉強してくれ
0036デフォルトの名無しさん
2010/10/22(金) 01:35:06”3042” → あ
のように16進数のStringからそれに該当するコードポイントを持つUNICODE文字を取得したいのですがどうすればいいでしょう。
["3042"].pack("U") 等ではうまくいきません。
お願いします。
0037デフォルトの名無しさん
2010/10/22(金) 01:53:560038デフォルトの名無しさん
2010/10/22(金) 03:24:24あなた騙されてるよ
0039デフォルトの名無しさん
2010/10/22(金) 06:56:19irb> puts ['0x3042'.hex].pack('U')
あ
0040デフォルトの名無しさん
2010/10/22(金) 06:59:43irb> puts ['3042'.hex].pack('U')
あ
とりあえず、
irb> p ["3042"].pack("U")
TypeError: can't convert String into Integer
とか今回はちゃんとエラー出るんで、できればエラー読んでマニュアルにあたって欲しい
0041デフォルトの名無しさん
2010/10/22(金) 08:55:580042デフォルトの名無しさん
2010/10/22(金) 13:14:56javaのソースコードに焼き直すと提言していた人がいたなぁ。
004336
2010/10/22(金) 23:17:38ありがとうございました。誤ったコードを書き込んでしまい失礼しました。
実はvisualuruby上でUNICODE文字を表示させたかったのです。
教えていただいたコードでテキストファイルには正しく文字が出力されましたが、
visualuruby上では化けてしまいます。
これはきっとどうにもならなそうなので別の道を考えます。
0044デフォルトの名無しさん
2010/10/22(金) 23:38:59まじか
004536
2010/10/22(金) 23:43:52はい。$KCODEをUTF8にしたりしてみたのですが、わかりません。
exerbで固めれば配布するのも簡単そうなのでvisualurubyで行きたいのですが。
ほかのGUIキットは別途ライブラリのインストールが必要ですよね。
0046デフォルトの名無しさん
2010/10/23(土) 00:33:280047デフォルトの名無しさん
2010/10/23(土) 17:35:31昨日簡単なプログラムを作ってみて実行させたら結果が出たらすぐに操作盤
が閉じてしまって、ちゃんと実行されたかどうかわからないのですが
どうすればよいでしょう?
0048デフォルトの名無しさん
2010/10/23(土) 17:43:00>>47
Windowsの標準の出力の特性上、そもそもそういうもんですとしか…
出力を眺めたいなら、コマンドプロンプト起動してそこから実行するといい
0049デフォルトの名無しさん
2010/10/23(土) 17:43:15アイコンをダブルクリックで起動すると閉じちゃうから
コマンドプロンプトから実行
よくわかんなかったらコマンドプロンプトの使い方を勉強しる
0050デフォルトの名無しさん
2010/10/23(土) 18:34:14コマンドプロンプトの勉強をします
0051デフォルトの名無しさん
2010/10/23(土) 19:07:050052デフォルトの名無しさん
2010/10/23(土) 19:16:34「 操 作 盤 」
0053デフォルトの名無しさん
2010/10/23(土) 19:22:02マジレスすると操作盤ってコンソールのことだお
プロンプトは入力を促す > みたいな文字のこと
0054デフォルトの名無しさん
2010/10/23(土) 21:59:11中国人死ね
0055デフォルトの名無しさん
2010/10/24(日) 01:48:16それだと椅子までセットになりそうだが。
盤だと上のパネル部分になるのかね。
0056デフォルトの名無しさん
2010/10/24(日) 01:52:120057デフォルトの名無しさん
2010/10/24(日) 02:44:480058デフォルトの名無しさん
2010/10/24(日) 10:40:32wwwwwww
0059デフォルトの名無しさん
2010/10/24(日) 10:44:07・コマンドプロンプトから実行
・外部コマンドが実行できるもしくはRubyのサポートがあるテキストエディタ上から実行
・NetBeansだかAptanaだかのIDEから実行
後者は2つはソースを書きながら、プログラムが終了しても実行結果を表示させたままにできるし
おすすめ
0060デフォルトの名無しさん
2010/10/24(日) 13:02:28あとWEBrickでhttpヘッダのcharset指定ってどうやるんですか?
006160
2010/10/24(日) 13:06:19WEBrickのほうは僕の勘違いでした。
0062デフォルトの名無しさん
2010/10/24(日) 13:23:03以下のように、ハッシュをeachで取り出したいのですが、どうも上手くいきません。
正しい記述方法を教えてもらえないでしょうか?
h = {
:area => 1,
:output => 2,
:category_type => 3,
}
url = 'http//'
h.each do |key,value|
url += key + '=' + value + '&'
end
0063デフォルトの名無しさん
2010/10/24(日) 13:32:52url += urlescape(key) + '=' + urlescape(value) + '&'
}
006462
2010/10/24(日) 14:04:24どうもありがとうございますm(_ _)m
さっそく実行してみたのですが、
undefined method `urlescape' for Alert:Class
というエラーがはき出されてしまいました。ググってみたところ、
これは自作してdefを定義しないといけないのでしょうか?
このような形で
def urlescape(string)
string.gsub(/([^ a-zA-Z0-9_.-]+)/n) do
'%' + $1.unpack('H2' * $1.size).join('%').upcase
end.tr(' ', '+')
end
0065デフォルトの名無しさん
2010/10/24(日) 14:23:51require 'uri'
require 'webrick'
data = {'k1'=>'v1', :k2 =>'v2', 'k3' => '3&4'}
uri = URI.parse("http://example.com/")
query = data.map{|k, v|
# do not use URI.escape
"#{WEBrick::HTTPUtils.escape(k.to_s)}=#{WEBrick::HTTPUtils.escape(v.to_s)}"
}.join('&')
uri.query = uri.query.to_s + query
p uri.to_s
006662
2010/10/24(日) 15:15:39ありがとうございます。m(_ _)m
ちょっと、複雑でわからなかったので、
以下のような形にしたら、一応は動きました。
もっとシンプルなやり方がないものでしょうか。
url = 'http://example.com'
params = Hash::new
params['area'] = 'tokyo';
params['output'] = 'json';
params.to_a.each do |key,value|
url += key + '=' + value + '&'
end
0067デフォルトの名無しさん
2010/10/24(日) 15:55:20URLエンコードしたものを繋げてURI#queryに追記、というの以上のものは現状あんまりないと思うぞ
これ以外の書き方をした場合、将来絶対どっかで詰まって
その回避のためにコードがながーいよ状態になるはず
Array#map と Array#join がわかりにくいと思う場合、ぜひ勉強してくれ
これらを一切使用しないコードのほうが逆にわかりにくい
query = pairs.join('&') の部分を分解しようと思ったが諦めた
WEBrick::HTTPUtils.escape は & をパーセントエンコードしないので書き換え
require 'uri'
require 'erb'
data = {'k1'=>'v1', :k2 =>'white space', 'k3' => '3&4'}
uri = URI.parse("http://example.com/")
pairs = []
data.each do |key, value|
encorded_key = ERB::Util.url_encode(key.to_s)
encorded_value = ERB::Util.url_encode(value.to_s)
pairs << encorded_key + '=' + encorded_value
end
query = pairs.join('&')
uri.query = uri.query.to_s + query
p uri.to_s
0068デフォルトの名無しさん
2010/10/24(日) 15:57:23require 'uri'
require 'erb'
include ERB::Util
data = {'k1'=>'v1', :k2 =>'white space', 'k3' => '3&4'}
uri = URI.parse("http://example.com/")
uri.query = uri.query.to_s + data.map{|k, v| "#{u(k)}=#{u(v)}"}.join('&')
p uri.to_s
0069デフォルトの名無しさん
2010/10/24(日) 16:04:18これがエスパーってやつか
007062
2010/10/24(日) 16:16:10親切にどうもありがとうございますm(_ _)m
今やろうとしていることは下記のようなことです。
※Rails3 ruby1.9.2使用
1 JSON形式でAPIアドレスを取得。 (ここでハッシュをeachで回してURLを結合)
2 それをRuby形式に変換 (json.rbを使って変換予定)
require 'json'
def self.get_xml
url = 'http://allcoupon.jp/api-v1/coupon?'
params = Hash::new
params['area'] = '%E6%9D%B1%E4%BA%AC';
params['output'] = 'json';
params.to_a.each do |key,value|
url += key + '=' + value + '&'
end
url = JSON.parse(url)
return url
end
このような場合でも、例で示してもらえたURLエンコードなどの
記述をするべきでしょうか?
最初は単純に文字列をループで結合としか考えてなかったもので。
とりあえず array#mapなどは勉強してきます!
0071デフォルトの名無しさん
2010/10/24(日) 16:30:05二重になってしまうだけだし、その場合は単純に結合でいいんでないの
あと、URL の構成要素についての知識がないようだ
query を & で終了させたらその後にクエリ文字列が続くのかフラグメント文字列が始まるのか
区別つかなくなるからやっちゃ駄目
それと、+= は Ruby ではあんま使用されないので、使わないことをお勧めする
007262
2010/10/24(日) 16:37:30ありがとうございます!
URLエンコードを必要とした場合の記述だったのですね。
じっくりコードを見直して、どう動いているかを確認させてもらいます!
&で終了させても普通に動いてたのでそのままにしておきましたが、気をつけたいと思います。
+=以外の方法を探してみます!
007362
2010/10/24(日) 19:33:20Rails 3 ruby 1.9.2
※controller
url = 'http://allcoupon.jp/api-v1/coupon?area=%E6%9D%B1%E4%BA%AC&output=json'
contents = URI.parse(url).read
contents = JSON.parse(contents)
@debug = contents['coupon_id']
※view
<%= debug(@debug) %>
-----------------------------
コントローラで、
@debug = contents とすると
こんな感じでずらりと並ぶ。
coupon_id: "2086"
.......
@debug = contents['coupon_id'] とすると
"can't convert String into Integer"
というエラーが出て、上手く値が取得できません。
よい方法を教えてもらえないでしょうか?
0074デフォルトの名無しさん
2010/10/24(日) 19:38:20【Ruby】Ruby on Rails Part10
http://hibari.2ch.net/test/read.cgi/php/1282991262/
0075デフォルトの名無しさん
2010/10/24(日) 20:15:25contents の冒頭はこうなってるよ。
[{"coupon_id"...
contents hash じゃなくて、要素がhashのarray
debugはYAMLで出力するんだが、
coupon_id:
じゃなく
- coupon_id:
になってなるのでは?
0076デフォルトの名無しさん
2010/10/24(日) 20:17:42<pre><%=h contents.inspect %></pre>
でもしてどんなデータ構造になっているかよく眺めたら。
0077デフォルトの名無しさん
2010/10/24(日) 20:22:29# こまけぇこたぁはいいんだよ!!(AA略
0078デフォルトの名無しさん
2010/10/24(日) 22:41:51なかなかなじめません。
A = Bを、MOVE B TO Aと記述できるように
する拡張ライブラリなどはありませんか。
0079デフォルトの名無しさん
2010/10/24(日) 22:53:010080デフォルトの名無しさん
2010/10/25(月) 00:56:51言語ごとに流儀が違うわけだし、RubyをやるならRubyに慣れるしかないと思う。
0081デフォルトの名無しさん
2010/10/25(月) 01:30:11要するにこれって大部分がRubyで記述されてるだけで正体はLLVMベースのJIT/AOTコンパイラなんだろ?
ならRubinius自体を(中間言語まででいいから)コンパイルして配布すればいいだけなんじゃ……
わざわざCRubyの上でRubinius動かす意味ってあんのかね
0082デフォルトの名無しさん
2010/10/25(月) 03:30:10http://hibari.2ch.net/test/read.cgi/tech/1287944631/
新スレ
0083デフォルトの名無しさん
2010/10/25(月) 06:02:11あなたはバイトコンパイルしてあってもファイルを読めるのかもしれないが、
残念ながらふつうのRubyプログラマはバイトコードを直接読むことができない
そういう劣ったRubyプログラマ向けの「Rubyで拡張可能なRubyコンパイラ」なので
あなたは是非こんなものは捨てて高みを目指して頂きたい
0084デフォルトの名無しさん
2010/10/25(月) 07:48:33CRubyが必要だというなら、インストールすればいいだけじゃないの?
008562
2010/10/25(月) 10:23:54すいません、基本的なハッシュの話でこっちのほうがよかったかなと思いまして。
>>75
contents[0]['counpon_id']でうまく行きました!
ありがとうございます。
しかし、<%= debug(@debug) %> で表示すると、
"\xE6\x9D\xB1\xE4\xBA\xAC" こんな感じで日本語がバグっているので、
JSON形式とRubyのハッシュに変換する前に、URLエンコードをしないといけないのかなと思っています。
>>73
debugをやりやすくするにはどうしたらいいのかなと思ってたんですが、
ずばり使いやすいコードを教えていただき、感謝!
>>77
厳密にいうとオブジェクトと考えるのですね。なるへそ。
0086デフォルトの名無しさん
2010/10/25(月) 11:10:09data = conn.query("SELECT * FROM table1;")
のようにexecかqueryを使った場合、conn.clearしてメモリを解放しなさいとあるのですが、
if conn.query("SELECT * FROM table1;")[0]
のように条件判断で使った場合も本来は変数にいれてclearしないとメモリに残ってしまうのでしょうか?
0087デフォルトの名無しさん
2010/10/25(月) 11:13:40バグってなんかいません
0088デフォルトの名無しさん
2010/10/25(月) 11:24:340089デフォルトの名無しさん
2010/10/25(月) 11:26:30>>86
えー、よくわからんが、
data = 外部ライブラリ経由での配列取得行為
でメモリリークするかもしれませんという話なのなら、
外部ライブラリ経由での配列取得行為[0]
でも外部ライブラリ経由での配列取得行為自体は行われるので、メモリリークへの対処はすべきだと思われ
0090デフォルトの名無しさん
2010/10/25(月) 11:28:40URLエンコードではなく、JSONには日本語リテラルが ¥uFFFF という
ASCIIテキストにエンコードされて入っているので、FFFF部分を生の表記に
置き換える必要があるんだけど、元のデータにJSON上の違反がある
のでめんどいな。
サロゲートペアが必要な文字のコードを1つの¥uのあとに8桁書いてる。
正しくは¥uXXXX¥uYYYYのように2文字として書く。
0091デフォルトの名無しさん
2010/10/25(月) 11:39:28ありがとうございます。
デバッグも兼ねて何がメモリに残っているか確認する方法や、ツールなどはあるのでしょうか?
0092デフォルトの名無しさん
2010/10/25(月) 11:46:39データベース内にはbool値が入っているのに、conn.queryで取得するとすべてStringになってしまいます。
プログラム内では
hoge = conn.query("SELECT * FROM table1;")
(hoge[0] ? "ほんと": "うそ")
としたいのですが、
(data[0] == "true" ? "ほんと": "うそ")
として動かしています。
bool値はbool値として取得する方法はありますか?
0093デフォルトの名無しさん
2010/10/25(月) 11:47:32bool値ってなんですか?
0094デフォルトの名無しさん
2010/10/25(月) 11:52:15trueとfalseで返さないのはそれはそれで妥当な気もする
0095デフォルトの名無しさん
2010/10/25(月) 12:11:11とりあえず、query[n] は文字列の配列一覧であるかのように返すように作ってあるのだろう(いや、知らんけど)
ソース見ると getisnull というメソッドがあるようにも見えるがどうやって使うのかはしらね
個々のメソッドで直接アクセスすれば true とかで返ってこないかね
0096デフォルトの名無しさん
2010/10/25(月) 12:18:320097デフォルトの名無しさん
2010/10/25(月) 12:23:34plus_one = conn.query("SELECT houmon_no+1 FROM table1 WHERE user_id = #{session['user_id']};")[0][0] # 例えば'3' or nilが入る
puts (plus_one ? plus_one : 1)
のようにしてるのですが、これは本来は
plus_one = conn.query("SELECT houmon_no+1 FROM table1 WHERE user_id = #{session['user_id']};") # [['3']] or [[nil]]が入る
puts (plus_one[0][0] ? plus_one[0][0] : 1)
plus_one.clear
とすべきなんですね。ありがとうございました。
009862
2010/10/25(月) 15:23:47ありがとうございます。
普通にエンコードする関数を探して、一発で変換と思ってたのですが、
この場合はどのようにすればよいでしょうか?
1.9.2ではJSON形式変換が標準でついているらしく、
このへんを読んでみましたが、日本語に変換というのがよくわからず。
http://rurema.clear-code.com/1.9.2/class/JSON.html
http://webos-goodies.jp/archives/boost_json_conversion_using_string_inspect.html
このライブラリも1.9系だと特に関係ないようで。
これならば、xml形式を使ったほうが簡単なのかと悩み中です。
0099デフォルトの名無しさん
2010/10/25(月) 16:02:58他に選択肢があるなら使用しないのが現状のベター
「ぜんぶえいご」なら問題ないのだけれど
0100デフォルトの名無しさん
2010/10/25(月) 19:27:430101デフォルトの名無しさん
2010/10/25(月) 20:28:58データ型の扱いがルーズすぎるよ
Rubyは基本的に勝手に型変換とかしないので
きっちり変換しないとだめだよ
たとえデータベースに真偽値が入っているとしても、ライブラリがRubyでの真偽値を返すかどうかなんてわからないし
ライブラリのドキュメントをよく読めとしかいえないな
0102デフォルトの名無しさん
2010/10/26(火) 11:19:06=> [1, 2, 3, 4, 5]
(1...5).to_a
=> [1, 2, 3, 4]
...は末尾のみを省くようですが、
スタートも省いてくれるような範囲を作る方法無いでしょうか?
0103デフォルトの名無しさん
2010/10/26(火) 11:30:20それ以外の開区間とかは自力で書いてくれ
あと、開区間と左閉右開区間の区別をドットの数で決めるのは単なる悪習で、使用しないほうがよい
0104デフォルトの名無しさん
2010/10/26(火) 11:34:51えー、
「閉区間と左閉右開区間(左閉半開区間)の区別をドットで決めるのはPerlの悪習なので使うな」
でひとつ
Ruby 的には 2,3,4 が欲しい場合は (2..4).to_a とか 2.upto(4).each do |i| ... end とか書く
1 と 5 の 数字 2つから 2,3,4 を作るのはたぶん悪だ
0105デフォルトの名無しさん
2010/10/26(火) 12:00:14[2, 3, 4]
ドットで悩むこともなくてわかりや…すい?
0106デフォルトの名無しさん
2010/10/26(火) 12:21:54覚えた言葉をむやみやたらに使いたがる子供のようだな
0107デフォルトの名無しさん
2010/10/26(火) 12:32:43普段ドット2つしか使わんから知らなかったけど
これ酷い仕様だな
0108デフォルトの名無しさん
2010/10/26(火) 12:48:09>>107
安心しろ、3連ドットを使用してる人はまずいない
俺は>>102で今年始めて見た
0109デフォルトの名無しさん
2010/10/26(火) 13:11:19端点の含み方を自由に設定できる区間オブジェクトが標準であったら便利だろうなあ
と思うことが2年に1回くらいある
0110デフォルトの名無しさん
2010/10/26(火) 13:28:37require "rubygems"
require "hashie"
m = Hashie::Mash.new({:foo => {:bar => {:baz => {}}}})
m.to_hash #=> <#Hashie::Mash foo=<#Hashie::Mash bar=<#Hashie::Mash baz=<#Hashie::Mash>>>>
#=> {"foo" => {"bar" => {"baz" => {}}}} が欲しい
0111デフォルトの名無しさん
2010/10/26(火) 13:42:27{}.update(m) で標準の Hash が返るように見える
0112デフォルトの名無しさん
2010/10/26(火) 13:46:25Hasie を 0.4.0 にアップデートして to_hash 使え、で FA
0113デフォルトの名無しさん
2010/10/26(火) 14:00:26ありがとうございます
最新(0.4.0)にしたらto_hashで行けました!
0114デフォルトの名無しさん
2010/10/26(火) 17:02:19step,upto,downtoのデフォルト値を無限にしてほしいと思う
不具合?
stepは無引数&ブロックなしでもEnumeratorが返ってくるけど
実際には使えない
使うときになって「引数が足りん」って怒られる
0115デフォルトの名無しさん
2010/10/26(火) 17:08:110116デフォルトの名無しさん
2010/10/26(火) 17:12:08このままリネームを掛けてしまうと、意図しない並び順の昇順に変わってしまいます。かといって正規表現でやるにはややこしそうっす
# 希望する並び順
hoge-1_fuga.jpg
hoge-3_fuga.jpg
hoge-8_fuga.jpg
hoge-12_fuga.jpg
hoge-54_fuga.jpg
Dir.glob('*.jpg')
# globで取得した時の並び順
hoge-1_fuga.jpg
hoge-12_fuga.jpg
hoge-3_fuga.jpg
hoge-54_fuga.jpg
hoge-8_fuga.jpg
0117デフォルトの名無しさん
2010/10/26(火) 17:17:26「自動」でやるほうが怖いだろそれ
ということで自力でファイル名から数値を取り出してソートしれ
Dir.glob('*.jpg').sort_by{|s| s.scan(/\d+/)[0].to_i}
0118デフォルトの名無しさん
2010/10/26(火) 19:39:08という式がある時、
aがfalseの場合bが評価されません。
しかしaがfalseの場合もbを評価した上で、結果を返してほしい場合
簡潔な書き方はありますでしょうか?
自分の知る限りでは以下のようなコードしか思いつきません。
value = a
value = b && value
0119デフォルトの名無しさん
2010/10/26(火) 19:51:320121デフォルトの名無しさん
2010/10/26(火) 20:25:49いまだとそれしかできないね
1.9.2からは 1.upto(Float::INFINITY) もできるようになったけど
loopのカウンター付きがほしいなぁと
def counter( start=0, delta=1 )
なんてのを作ったら
なんか、stepとほとんどいっしょじゃね?とか思ったものでして
Enumerable#cycleなんて無限Enumeratorを返すものがあるので
無限uptoとかも少しはありなんじゃないかと思うのだが
loopと違ってメソッド名に無限って感じがしないので、採用されないだろうなぁ
0122デフォルトの名無しさん
2010/10/26(火) 20:28:13数字混じり文字列ソート - どう書く?org
http://ja.doukaku.org/295/
0123デフォルトの名無しさん
2010/10/26(火) 20:34:23Rubyによくあるいわゆる「あれば便利だとは思うが、いい名前も思いつかないし手で書いて」という奴だな
0124デフォルトの名無しさん
2010/10/26(火) 23:24:47自然言語処理ってPythonが主流なんだってよ
rubyも1.9からなら使えるみたいだけど遅きに失したようだ。
0125デフォルトの名無しさん
2010/10/26(火) 23:29:53全角数字ww
0126デフォルトの名無しさん
2010/10/26(火) 23:30:47kwsk
たまに自然言語処理の人のブログ見ても、Pythonに移行した人見かける
Pythonの有利なところキボン
0127デフォルトの名無しさん
2010/10/26(火) 23:40:39Rubyも使っていた方みたいだけど乗り換えた理由わからない
PythonはNumPyとSciPyが決め手になったようにはみえるけど
自然言語処理は Python がいちばん - 生駒日記
http://d.hatena.ne.jp/mamoruk/20090327/p1
Poll Results: What programming language(s) do you use for large-ish projects?
http://poll.pollhost.com/aGNkYXVtZTMJMTIzNzczNTIwNglFRUVFRUUJMDAwMDAwCUFyaWFsCUFzc29ydGVk/
自然言語処理の中級者向けのテキストはどのようなものになるだろうか - 生駒日記
http://d.hatena.ne.jp/mamoruk/20101016/p1
「python」の検索結果 - 生駒日記
http://d.hatena.ne.jp/mamoruk/searchdiary?word=python
0128デフォルトの名無しさん
2010/10/26(火) 23:44:06これだけだったりして
0129デフォルトの名無しさん
2010/10/26(火) 23:57:54それをしてプログラミング言語の優劣語るのも正直
0130デフォルトの名無しさん
2010/10/27(水) 01:06:58Amazon.co.jp: 入門 自然言語処理: Steven Bird, Ewan Klein, Edward Loper, 萩原 正人, 中山 敬広, 水野 貴明: 本
http://www.amazon.co.jp/%E5%85%A5%E9%96%80-%E8%87%AA%E7%84%B6%E8%A8%80%E8%AA%9E%E5%87%A6%E7%90%86-Steven-Bird/dp/4873114705/
これの原書が
Amazon.co.jp: Natural Language Processing with Python: Steven Bird, Ewan Klein, Edward Loper: 洋書
http://www.amazon.co.jp/Natural-Language-Processing-Python-Steven/dp/0596516495
原書の題名にwith Pythonと付いてるのが・・・
0131デフォルトの名無しさん
2010/10/27(水) 01:08:36うん、で?
0132デフォルトの名無しさん
2010/10/27(水) 01:11:47ttp://www.amazon.co.jp/dp/4873114713/
pythonの章は読んだ?
0133デフォルトの名無しさん
2010/10/27(水) 01:18:38http://hibari.2ch.net/test/read.cgi/tech/1235129481/
0134デフォルトの名無しさん
2010/10/27(水) 01:21:57http://pragdave.blogs.pragprog.com/pragdave/2008/12/ruby-19-can-check-your-indentation.html
たとえばこんなコードがあったとして
class Example
def meth1
if Time.now.hours > 12
puts "Afternoon"
end
def meth2
# ...
end
end
endがらみのエラーがあったときはruby1.9 に -wc をつけてやれば
dave[RUBY3/Book 8:26:51*] ruby -w t.rb
t.rb:5: warning: mismatched indentations at 'end' with 'if' at 3
t.rb:9: warning: mismatched indentations at 'end' with 'def' at 2
t.rb:10: syntax error, unexpected $end, expecting keyword_end
というメッセージがでる。5行目のendが3行目のif文と対応しているけど、
インデントが揃ってないよというメッセージ。
コメントでは「これこそ1.9のキラー機能だ」と絶賛されている。
0135デフォルトの名無しさん
2010/10/27(水) 01:31:17M-x indent-region
0136デフォルトの名無しさん
2010/10/27(水) 01:54:31まあある程度はそれでなんとかなるな
どうしようもない場合はどうしようもないけど
endいっこ余ったとかw
0137デフォルトの名無しさん
2010/10/27(水) 03:43:02何かおもしろそうなことかいてある?
0138デフォルトの名無しさん
2010/10/27(水) 03:46:13IDEでもチェックしてエディタ上に表示してくれるしな
そもそもこんな問題で悩むのはemacsやIDEすら使ってない初心者だと思うか?
「Lispは括弧が多いから」「Pythonはインデントが」並のフレームじゃないのかね
0139デフォルトの名無しさん
2010/10/27(水) 06:11:280140デフォルトの名無しさん
2010/10/27(水) 07:52:46理由の 20 %くらいは確かに文法ミスサポートがないから仕方なく手でやってるクソ仕事という意味なんだが、
残り 8 割は「ここからここまでブロックがある」と自分に認識させるための重要な儀式だ
Ruby においてブロックはそれだけ特別でなおかつ普遍なのだと思う
0141デフォルトの名無しさん
2010/10/27(水) 09:06:220142デフォルトの名無しさん
2010/10/27(水) 09:13:160143デフォルトの名無しさん
2010/10/27(水) 09:25:24なんか若干がっかりな挙動なんだが
0144デフォルトの名無しさん
2010/10/27(水) 13:41:36ML見れないんだが
0145デフォルトの名無しさん
2010/10/27(水) 13:47:40うん、死亡中。
といいつつMLアーカイブのリンクを張ろうとして手が止まる俺。
[ruby-list:47586] blade 壊れた
Date: Fri, Oct 22, 2010 at 14:34
原です。
ML のアーカイブの blade ですが、昨日午後突然電源が落ちて、起動しなく
なりました。バックアップ用のマシンもあるのですが、そっちもこの前、壊
れたところで、どうやら両者ともマザーボードがいかれているようです。
復旧まで1週間ぐらいかかりそうです。よろしく!
<snip>
0146デフォルトの名無しさん
2010/10/27(水) 13:51:09ttp://permalink.gmane.org/gmane.comp.lang.ruby.japanese/6698
0147デフォルトの名無しさん
2010/10/27(水) 13:51:37ここ5年くらいのならこちらに
ttp://permalink.gmane.org/gmane.comp.lang.ruby.japanese/6698
ttp://blog.gmane.org/gmane.comp.lang.ruby.japanese
0148デフォルトの名無しさん
2010/10/27(水) 15:11:01サンクス
0149デフォルトの名無しさん
2010/10/27(水) 15:59:41IDEならendがいる状況になったら自動で挿入してくれないか?
do書いて改行したらend挿入される
0150デフォルトの名無しさん
2010/10/27(水) 23:09:22発行元の日本Rubyの会にすら無いし
0151デフォルトの名無しさん
2010/10/27(水) 23:37:53ちょうど今、まさにendのエラーがでたので試したけど、今までだったら
エディタの自動インデントとかオートフォーマッタをかけてみて、おかしいところをみつけ、
直したらインデントし直しという作業をしてたけど、その必要がなくなった。
これは地味に便利。
>>149
新規に入力するときだけを考えればそうだろうけど、コードを修正するときは
誤ってendをなくしちゃったりdoを忘れたりする。これはIDEでは防げない。
0152デフォルトの名無しさん
2010/10/27(水) 23:56:28横に間違えてますマークがつくから大丈夫
0153デフォルトの名無しさん
2010/10/28(木) 00:26:36conn.execはPGresultクラスが帰ってくるのでclear必須。
conn.queryの場合はArrayクラスが帰ってくるのでclearはいらない。
0154デフォルトの名無しさん
2010/10/28(木) 09:33:300155デフォルトの名無しさん
2010/10/28(木) 10:02:28それは対応するendを見つけた上で表示されるの?そうだったらすごい。
Emacsでは最後のendのところで間違えてますマークがつくだけだから、
どこで間違えてるかは自力で見つけなきゃいけない。
だから>>134は便利だった。
IDEだったら、たとえば>>134では5行目の横に間違えてますマークがつくの?
それはぜひ初心者に教えたいので、IDE名教えて。
0156デフォルトの名無しさん
2010/10/28(木) 10:50:33doc = Nokogiri::XML(File.read('some_file.xml'))
xslt = Nokogir::XSLT(File.read('some_transformer.xslt'))
puts xslt.transform(doc)
XML が外部サーバーにある場合はどうしたらいいですか?
一旦ローカルにダウンロードして XSLT 適用する…ぐらいしか思いつかないけど、
そんなはずない気がするし。すみません、お願いします。
0157デフォルトの名無しさん
2010/10/28(木) 11:38:000158デフォルトの名無しさん
2010/10/28(木) 11:54:06File.read(path) はファイルパス path の内容をディスクから読み込んで文字列で返す
Nokogiri::XML() は引数に文字列を取るからうまく合致するわけだな
だからやっぱり文字列を返すメソッドの返り値を指定するしかあんめえ
0159デフォルトの名無しさん
2010/10/28(木) 12:12:13なるほど!そうします。
常識レベルのことなのでしょうが、自分にはありがたいです。
ありがとうございます。
>>158
なんとな〜くわかった気がします。
File.read(Path) というカタチにこだわらず、Nokogiri::XML() に
XML ファイルの中身(文字列)を渡してあげればいいということでしょうか。
やり方がわからないので >>157 さんの言われるとおり、標準ライブラリの勉強をしてみます。
ありがとうございます、助かりました。
0160デフォルトの名無しさん
2010/10/28(木) 12:44:43>>158
いちおう解決できました。
実は net/http で XML の内容を取得することは出来ていたのですが、
doc = Nokogiri::XML(response.body)
とやってもうまくいかなかったので、なにか根本的に
間違っているのだろうと思い、質問させていただいたのでした。
おそらく正しいやり方ではないのでしょうが、
response.body をグローバル変数に代入して
doc = Nokogiri::XML($hoge)
とやってみたらとりあえず意図する結果が得られました。
ありがとうございました。
0161デフォルトの名無しさん
2010/10/28(木) 12:45:250162デフォルトの名無しさん
2010/10/28(木) 16:48:23あるサイトにあったソースを実行してみたところ問題が起きました。
def foo(name)
20.times do
print name
print " "
end
end
def test1
t1=Thread.new{foo("a")}
t2=Thread.new{foo("b")}
t1.join
t2.join
end
test1
実行してみると
a a a a a a a a a a a a a a a a a a a a b b b b b b b b b b b b b b b b b b b b
となってしまい、これではThreadにした意味がなく困っています。
rubyのバージョンは1.8.7です。
0163デフォルトの名無しさん
2010/10/28(木) 16:58:19print name
を20回ごとき超一瞬なんだから、
1回ごとにsleepとか入れないとそういう結果になってもおかしくないと思うけど。
0164デフォルトの名無しさん
2010/10/28(木) 17:00:14スレッドt1の実行が終わっちゃうからですよ
処理内容が軽すぎるのが要因
繰り返しを数百以上にするとか
sleep 0.1
をはさんでみるとか
あとはスレッドの切り替わるタイミング
Ruby1.8.7だと混ざらないけど
1.9だとそのままでもちゃんと混ざりますよ
1.9ではスレッドの実装方法が変更されたので
0165デフォルトの名無しさん
2010/10/28(木) 17:04:13標準入力に何かを表示するプログラムはスレッドの検証にまったく向いてない
最初に
$stdout.sync = true
してから試せ
0166デフォルトの名無しさん
2010/10/28(木) 17:07:000167デフォルトの名無しさん
2010/10/28(木) 17:21:36簡潔に説明しようと思い、省いてしまいましたが
timesの回数を10万などに増やしましたがしかし結果は
t1のスレッドの処理が終わってからt2という流れになってしまいます。
sleepを入れたとこ
ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab ab
のような結果になりました。
ただ何度実行してもこの結果というのはrubyのスケジューリングの仕様なんでしょうか?
取り敢えず1.9にしてもう一度試してみます。
>>165
入れたところ処理されるごとに表示されました。
みなさんありがとうございます!!!
0168デフォルトの名無しさん
2010/10/28(木) 17:49:13それはリアルタイムに起きているなにかを確認したいときで
今回のはおなじ出力バッファに書き込んでいく順序をみたいのだから
あまり関係ないんじゃないの
と、$buff = '' でprintの代わりに$buff.concatするようにしたら
文字列に追加するコストが軽すぎるのか
1.9でも a 20個の後に bになってしまった
ここはやはりsleepを入れとけって事で
>>167
ruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mingw32]だと
200.times程度でも混ざるんだけどな
0169デフォルトの名無しさん
2010/10/28(木) 17:55:151.8以前だと実際に動いているのは一つだけで
Ruby自身が適当な間隔でスレッドを切り替えながら実行している
1.9だと複数スレッドがネイティブに複数動いてるけど、GILがあるので
ある一つのスレッド以外のスレッドはGILの開放待ちしてる
IO処理とかの一部Ruby外の処理ではGILを開放するので並列動作するときもある
って理解であってるの?
InfoQのRubinius 1.1の記事読んだら
将来RubiniusもGILを使わないようにするので
Ruby実装の中でGILがあるのはMRIだけになる
と、あったんだけど
JRubyやIronRubyって今でも並列動作するの?
Windows版のMRIしか知らんのもので
0170デフォルトの名無しさん
2010/10/28(木) 19:23:21下記のようにeachで回すと、なぜかhash全体の内容も最後に表示してしまいます。
この場合、指定した coupon_idの数値のみを表示するにはどうすればよいでしょうか?
※view内のコード
<% hash = [{"coupon_id"=>"2247", "coupon_area"=>"東京",},
{"coupon_id"=>"2254", "coupon_area"=>"東京",}] %>
<br>
<%= hash.each do |item| %>
<%= item['coupon_id'] %>
<br>
<% end %>
※結果
2247
2254
[{"coupon_id"=>"2247", "coupon_area"=>"東京"}, (ここがいらない)
{"coupon_id"=>"2254", "coupon_area"=>"東京"}] (ここがいらない)
0171デフォルトの名無しさん
2010/10/28(木) 19:55:544行目が
<%= hash.each do |item| %>
じゃなくて
<% hash.each do |item| %>
じゃないの?
0172デフォルトの名無しさん
2010/10/28(木) 21:42:59ありがとうございました
0173デフォルトの名無しさん
2010/10/29(金) 01:00:27<% %> と <%= %> はたしかに間違えやすい
これはeRuby仕様の失敗だった
0174デフォルトの名無しさん
2010/10/29(金) 01:02:46横からだが>>134のコード試してみた。
NetBeans 6.9では最後にエラーマークが付くだけだったわ、残念
if endやdo endの対応括弧の強調表示もあるけど、
他のエディタにもあるし、それではわかりにくいということだよな
indent-region相当の自動インデント使うと予想通り1つendがないずれたインデントになってわろたw
それよりもヒント機能で式?が1個しか無いからifを後置にするか聞いてきたのがおもしろかった
変化後のプレビュー表示できたりIDEは無駄に豪華な機能あるよな。
リファクタリング系の機能なんだろうけど
0175デフォルトの名無しさん
2010/10/29(金) 01:08:46あまり関係ないが、
Rails 3より前はformやform_forなどform類のヘルパーが<%= %>じゃなくて、<% %>だったり疑問があったが、
Rails 3から<%= %>に統一されたな
どっちにしろ、<%= と <% はちょっとわかりにくい。見かけが
初心者に他のtemplateエンジンをつかえというのもねえ
0176デフォルトの名無しさん
2010/10/29(金) 07:41:29<%print( )%>
これで一目でわかる!
0177デフォルトの名無しさん
2010/10/29(金) 07:46:490178デフォルトの名無しさん
2010/10/29(金) 08:15:260179デフォルトの名無しさん
2010/10/29(金) 08:28:040180デフォルトの名無しさん
2010/10/29(金) 08:29:350181デフォルトの名無しさん
2010/10/29(金) 08:49:58なるほど、それいいな。採用。
0182デフォルトの名無しさん
2010/10/29(金) 09:03:05君のeachはまたforの書き換えのようだな
0183デフォルトの名無しさん
2010/10/29(金) 09:13:35map「(…え?)」
inject「(創立メンバーだよねあの人)」
0185170
2010/10/29(金) 10:57:09そうなんです。Rails3から <%= %>に統一されたと
本に書いていたので、すべて <%= %>で記述してよいと思っていたのです。
0186デフォルトの名無しさん
2010/10/29(金) 11:11:050187デフォルトの名無しさん
2010/10/29(金) 11:22:39どちらがスタンダードなのでしょうか?
netbeansの入力補助では { } のほうが出てきますが、 do end のほうが
よく説明では見るような気がします。
0188デフォルトの名無しさん
2010/10/29(金) 11:23:300189デフォルトの名無しさん
2010/10/29(金) 11:39:240190デフォルトの名無しさん
2010/10/29(金) 11:46:341行で書けるブロックの場合はかなりの割合で { }
直後にドットでメソッドチェーンを繋げる場合はほぼ確実に { }
each の用途的に each do ... end が多くなるとは思う
0191デフォルトの名無しさん
2010/10/29(金) 11:47:39自分ルールでは、1行で収まる場合は、{ }
複数行になる場合は、do end
0192187
2010/10/29(金) 11:53:03みなさんどうもありがとうございます。
0193デフォルトの名無しさん
2010/10/29(金) 13:07:36あったとしてメソッドXがそれを必要とすることをどうやって調べてる?
更にメソッドXがメソッドAにメソッドCを期待してるときもどう判断してんの?
メソッドXをひたすらトレース?
0194デフォルトの名無しさん
2010/10/29(金) 13:10:520195デフォルトの名無しさん
2010/10/29(金) 13:10:54×メソッドAにメソッドCを期待
○メソッドAにメソッドCをもつオブジェクトを返す事を期待
0196デフォルトの名無しさん
2010/10/29(金) 13:21:50書くとしてどう書くのが理想かな。
結局C++のコンセプトみたいになんのかな。
0197デフォルトの名無しさん
2010/10/29(金) 13:31:33s = param.read
s.scan...
end
だとして、メソッド m の引数 param は read メソッドが動作しないと困る、と
これをどう「書き手」へ知らせるかというと、やっぱりマニュアルに書くしかないと思う
メソッド m の名称を read 可能な引数を取りそうな名前にするとか
引数 param の名称を read しそうな名前にするとかもあるが、確実性はかなり低くてオナニーレベル
一応 Ruby スクリプトとしては respond_to? が使用できるが、
複雑な特定の条件分岐をするのでない限り、
「param に read メソッドなんてありませんが何か」という NoMethodError を出すのと本質的にも対処的にも変わらない
def m(param)
if param.respond_to?(:read) then
s = param.read
else
raise ArgumentError "wrong type argument (needs READable)"
end
s.scan...
end
0198デフォルトの名無しさん
2010/10/29(金) 14:47:26「引数○○には××を指定します」と書いてあったので文字列渡したら動かなくて
サンプルコード検索したらシンボルでブチキレ
0199デフォルトの名無しさん
2010/10/29(金) 15:00:380200デフォルトの名無しさん
2010/10/29(金) 15:02:23数十年来の「型チェック」の呪いからは結局逃れられないのですよ
arg.kind_of?
arg.respond_to?
0201デフォルトの名無しさん
2010/10/29(金) 15:07:18>>193
オブジェクトの持っていないメソッドを呼ぶとRubyは例外を発生させて報せるから問題ない
0202デフォルトの名無しさん
2010/10/29(金) 15:14:53正確に言うなら「静的に保証する方法はない」って所か
食わせる引数を雰囲気で想像して、テストにかけろ
かなり適当だが意外にうまくいくのがダックタイピングの経験的根拠
Scalaならできるんだっけ?
0203デフォルトの名無しさん
2010/10/29(金) 15:45:470204デフォルトの名無しさん
2010/10/29(金) 15:55:00ホントはあまりよくないが、別に悪いわけでもない
arg.to_s.dup ... と続くメソッドは意外とある
「極力文字列に変換して処理します」と解説つけてればOK
「String以外が渡ったら内部のどっかでエラーが出るだろう」
という期待をしているスクリプト作者もいることを忘れてはならない
0205デフォルトの名無しさん
2010/10/29(金) 17:05:44下記のようなコードでは上書きされてしまい、最後の値だけ記録されて
しまうのですが、正しいやり方はどうすればよいでしょうか?
def self.get_goods
hash = [{"id" => "500",},{"id" => "60"}]
goods = Hash.new
hash.each do |item|
goods['id'] = item['id']
end
return goods
end
0206205
2010/10/29(金) 17:11:400207デフォルトの名無しさん
2010/10/29(金) 17:12:49Hash オブジェクトに対する登録の仕方を勉強するんだ
0208デフォルトの名無しさん
2010/10/29(金) 17:19:551つのキーに対して複数の値を格納する能力をHashは持ってない。
hash = {"id" => ["500", "60"]}
ていうかよく見たら hash = [{"id" => "500",},{"id" => "60"}] って、中身にハッシュが入ってる配列だよね。
何をどうしようとしてそんなもん作ったわけ?
0209205
2010/10/29(金) 17:32:11もう一度レシピブックを読んで、goods = Hash.new{|h, key| h[key] = [] }
のようなやり方を試してみたところ、一応全部追加できました!
しかし、どうも並び順がおかしい。。
>>208
ありがとうございます。
実は、JSON形式で取得したものを配列に変換したために、
こんな形になっているのです。
なので、中身を配列にすることが無理かもしれません。。
うーむ、どうしようもない。。
0210デフォルトの名無しさん
2010/10/29(金) 18:35:30本来 hash に並び順はないものと理解すべき。
0211デフォルトの名無しさん
2010/10/29(金) 18:51:36順序は保存されます
0212デフォルトの名無しさん
2010/10/29(金) 18:57:510213デフォルトの名無しさん
2010/10/29(金) 19:00:16というかPerl由来とはいえハッシュという命名自体が今となっては以下略
0214デフォルトの名無しさん
2010/10/29(金) 19:08:37> ハッシュという命名自体が
$ irb
irb(main):001:0> p hash
-607941458
…?
というか>>205みたいなスクリプトを見るといつかどっかで爆発しそうで気になって仕方がないw
0215デフォルトの名無しさん
2010/10/29(金) 19:13:49end に至っては同名のローカル変数を end の形で使うことも(ふつうは)できない
0216デフォルトの名無しさん
2010/10/29(金) 21:55:11スクリプト屋じゃないせいかHashか格納領域(コレクション)と
結びつかん。
データが異なることは示すがデータが同じ事は保証しない値。
そういう見方だな。
0217デフォルトの名無しさん
2010/10/30(土) 04:28:54過去の資産を引きずっていない真っ白な初学者こそ
最新の1.9.2から始めるべきでしょうよ。
0218デフォルトの名無しさん
2010/10/30(土) 04:59:13それが正しい、1.9を勧めるおまえは間違ってるからこのスレから去れと言って、
執拗に1.8.7を推奨してたやつ。知らんの?
>>210みたいなやつ。同一人物かもw
0219デフォルトの名無しさん
2010/10/30(土) 05:13:44と結果に表示させた後に3秒後に結果が消えるようにするにはどうすればいいんでしょうか?
0220デフォルトの名無しさん
2010/10/30(土) 05:17:11それをまた同じ八ッシュ内に入れるにはどうすればいい?
0221デフォルトの名無しさん
2010/10/30(土) 05:18:260222220
2010/10/30(土) 05:28:091月 500 400 300
2月 400 200 100
みたいな感じで、
そのデータの月部分がハッシュのキーで、バリューは400 200 300の部分。
で、プログラム上で400足す200足す300の計算をして、
その合計(900)をまたハッシュ[1月]に入れなきゃならないんだ。
ちなみに元の400 200 300はそのまま残したい。
こんなので良いでしょうか?
‥説明下手でごめんねorz
0223デフォルトの名無しさん
2010/10/30(土) 06:04:50合計を "400 200 300 900" と同列にするのか [[400, 200, 300], 900] みたいに別にするのかもわからん
それと{"1月"=>[400, 200, 300]} と {"1月"=> 900} を別にせず同じハッシュに入れる意味も
0224デフォルトの名無しさん
2010/10/30(土) 07:56:34そんな説明じゃわからない。
そのデータでなんで400+200+300を計算するの?
1月なら500+400+300だし、2月なら400+200+100じゃないの?
ハッシュはどんな構造になっているの?かりに
{ "1月" => [500, 400, 300], "2月"=>[400, 200, 100] }
だとして、900を追加したら
{ "1月" => [500, 400, 300, 900], "2月"=>[400, 200, 100] }
になるけど、これでいいの?
#上司がこんな仕様もってきたらぶちきれる。
0225デフォルトの名無しさん
2010/10/30(土) 08:27:51出力データの形式(仕様)が定義されていないいから、適当に作ってみた。
もし明確にしてくれれば、書き直すよ。
def calc(input_data)
Hash[
*input_data.map { |month, items|
[
month,
{
:orig => items,
:sum => items.inject(0) { |result, item| result + item }
}
]
}.flatten
]
end
(irbでの実行例)
$ irb -rcalc.rb
irb(main):001:0> p calc({ 1 => [500, 400, 300], 2 => [400, 300, 200] })
{1=>{:orig=>[500, 400, 300], :sum=>1200}, 2=>{:orig=>[400, 300, 200], :sum=>900}}
=> nil
irb(main):002:0>
0226デフォルトの名無しさん
2010/10/30(土) 08:43:340227225
2010/10/30(土) 08:44:54こちらの方が効率は良いし、おそらく理解し易いと思う。(実行結果は>>224と同じなので省略)
def calc2(input_data)
output_data = Hash.new
input_data.each { |month, items|
sum = 0
items.each { |item| sum += item }
output_data[month] = { :orig => items, :sum => sum}
}
output_data
end
0228デフォルトの名無しさん
2010/10/30(土) 08:46:29Ruby の範疇外だな
ああ、Rubyで3秒待つのは sleep(3) でできる
それ以外のことは「表示した先」のマニュアルをご覧になって、system() あたりで指示してください
0229225
2010/10/30(土) 09:27:15>‥説明下手でごめんねorz
データ構造の仕様を明確に(=形式的に)記述する手法はいくつかある。以下はBNFと呼ばれる書き方。
(もしBNFを知らなければ、Wikipedia等で勉強してね)
<入力データ> ::= <入力レコード>*
<入力レコード> ::= <月> <項目>*
<出力データ> ::= <出力レコード>*
<出力レコード> ::= <月> <出力レコード本体>
<出力レコード本体> ::= <項目>* <合計>
<月> ::= 文字列
< 項目 > ::= 整数
< 合計 > ::= 整数
他にも、今回のケースだと(IntegerやStringといった)基礎オブジェクトの他には
ArrayとHashしか使われていないから、JSONやYAMLのスキーマ定義言語で代用してもいい。
・JSONの可能性がグンと拡がるぞ! JSONスキーマ - 檜山正幸のキマイラ飼育記
http://d.hatena.ne.jp/m-hiyama/20090413/1239581682
・Rubyist Magazine - プログラマーのための YAML 入門 (検証編)
http://jp.rubyist.net/magazine/?0012-YAML
あるいは、MLやHaskellのような「強いデータ型」の言語の記法でもいい。
(ちなみに、Haskellの記法はRubyリファレンスのメソッド定義記法として利用されている)
おそらくこのスレを覗いている人であれば、これらのいずれかで書けば、理解してくれると思うよ。
0230デフォルトの名無しさん
2010/10/30(土) 09:36:18[
5月 => [第1週金額, 第2週金額, 第3週金額, ..],
6月 => [第1週金額, 第2週金額, 第3週金額, ...],
7月 => [第1週金額, 第2週金額, 第3週金額, ...],
}
で月ごとの合計金額を出して
{5月 => 5月合計, 6月 => 6月合計, 7月 => 7月合計, }
というハッシュを作りたいです
とかいうののどこにわかりにくくなる余地があるんだ
0231デフォルトの名無しさん
2010/10/30(土) 11:10:030232220
2010/10/30(土) 11:39:46とりあえず今から参考にして頑張ってきますノシ
ありがとー。
0233デフォルトの名無しさん
2010/10/30(土) 11:40:45さすがエスパー
0234220
2010/10/30(土) 12:01:56{ "1月" => [1週目売上, 2週目売上…], "2月"=>[1週目売上,2週目売上…] }
ってハッシュがあって、
売上合計を求めてそれを
{ "1月" => [1週目売上, 2週目売上…,売上合計], "2月"=>[1週目売上,2週目売上…,売上合計] }
で、最後に
月 1週目売上 2週目売上 〜 売上合計
のように出力したい。
出力の際は売上合計をソートした状態で、売上合計が高い順から表示させる
って感じです。
0235デフォルトの名無しさん
2010/10/30(土) 12:09:56この構造は超無駄
「端っこ」を特別欄扱いする表計算思考は捨てなされ
{ "1月" =>
{売上 => [1週目売上, 2週目売上…],
合計 => 1月合計},
"2月" =>
{売上 => [1週目売上, 2週目売上…],
合計 => 2月合計},
...}
みたいなのがとりあえず妥当
data.each do |month, h|
sales = h[売上].join("\t")
sum = h[合計]
puts "#{month} \t #{sales} \t #{sum}"
end
こんなんでなんとかなんね?
0236デフォルトの名無しさん
2010/10/30(土) 12:19:37data.sort_by{|month, h| h[合計]}.reverse_each do |month, h|
sales = h[売上].join("\t")
sum = h[合計]
puts "#{month} \t #{sales} \t #{sum}"
end
0237デフォルトの名無しさん
2010/10/30(土) 12:23:51するにはどうすればよいでしょうか?
for ($i = 0; $i < $itemNumberLimit; $i++){
$items[$i]["url"] = $currentXml -> Items -> Item[$i] -> DetailPageURL;
$items[$i]["image"] = $currentXml -> Items -> Item[$i] -> LargeImage -> URL;
}
0238デフォルトの名無しさん
2010/10/30(土) 12:28:580239デフォルトの名無しさん
2010/10/30(土) 12:32:46正直、ループ内で値作って追加とかそのへん綺麗に書けなくて苦手なのだ
h = {}
keys = ['k1', 'k2', 'k3']
values = ['v1', 'v2', 'v3']
として
new = Hash[keys.zip(values)]
h.update(new)
とか
keys.each_with_index do |k, index|
h[k] = values[index]
end
とか
0240237
2010/10/30(土) 12:42:33即レス、どうもありがとうございます。
むむむ、結構難しいですね。
ただいま、レシピブックなどを参照して格闘中です。
0241225
2010/10/30(土) 14:16:10最終的な出力形式に合わせて変更してみた。ただし、中間データの形式は、
(>>234の「ハッシュのハッシュ」ではなく、)「ハッシュのリスト」にしている。
def calc3(input_data)
input_data.map { |month, sales|
{
:month => month,
:sales => sales,
:sum => sales.inject(0) { |result, sale| result + sale }
}
}.sort_by { |record|
record[:sum]
}.reverse.each { |record|
month = record[:month]
sales = record[:sales]
sum = record[:sum]
printf("%2d月 %s %4d¥n",
month,
sales.map { |sale| format("%3d", sale) }.join(' '),
sum
)
}
nil
end
(実行結果は次のカキコで)
0242225
2010/10/30(土) 14:17:19$ irb -rcalc3.rb
irb(main):001:0> calc3({ 1 => [500, 400, 300], 2 => [400, 300, 200] })
1月 500 400 300 1200
2月 400 300 200 900
=> nil
irb(main):002:0>
0243デフォルトの名無しさん
2010/10/30(土) 14:29:59いきなりだとワケワカだから
items = []
for i in 0...limit do
items[i] = {}
items[i]['url'] = url
items[i]['image'] = image
end
くらいから始めればいい(上のも ... がちと罠くさいが)
0244デフォルトの名無しさん
2010/10/30(土) 14:41:50コレクションの意味を失わせる上に現状誰も使っていないforにわざわざ誘導する意味は何?
「RubyでHTMLを記述するにはcgi.rbが便利です」とか言われたら怒るだろ
0245デフォルトの名無しさん
2010/10/30(土) 15:18:53全然関係ないが、HTMLがその形式だったら閉じタグもいらないしファイルサイズも減るしいいことづくめだったのにな
HTMLは可読性が最悪になってしまった
0246デフォルトの名無しさん
2010/10/30(土) 15:21:23あまりにも違うと、もとのと対応がとれなくて必要以上に理解が困難になるから。
だから「から始め」と書いてある。
0247220
2010/10/30(土) 15:58:19ありがとうございましたーノシ
0248デフォルトの名無しさん
2010/10/30(土) 18:37:55こんなかで持ってる人どれくらいいる?
0249デフォルトの名無しさん
2010/10/30(土) 18:43:31話のネタになる
それ以上の意味はないが、会話のきっかけを生めるという点でけっこう貴重
他の資格ではなかなかこうはいかない
0250デフォルトの名無しさん
2010/10/30(土) 19:10:11たしかに自分がRubyに興味がある、好きであると伝える手段としてはかなり良さそうですよね
0251デフォルトの名無しさん
2010/10/30(土) 22:12:03会社で5人とってもらってインテグレータになるのを目指してます。
ちょっとした会社の宣伝になる。
0252デフォルトの名無しさん
2010/10/30(土) 22:47:23なるほど、個人としてしか考えてませんでしたが、そういうのもあるんですね
silverが5人でいいのかな?goldだとむずかしそう
0253デフォルトの名無しさん
2010/10/30(土) 22:54:38持ってるから何か能力的に強まるというものではない
「わたしはRubyがすきです」
「Rubyにきょうみがあります(きゃっかんてきないみで)」
という感じか
Rubyライブラリ公開してますURLはここ、とかの軽い代替になるものだな
0254デフォルトの名無しさん
2010/10/30(土) 23:06:38" よく使用されるライブラリ(socket、rdocなど)" ってのがいろいろ不安。
コメントの書き方やドキュメント生成の話ならともかく、
ライブラリとしての rdoc なんてそう使わないだろうに。
rdocと同じレベルで生ソケットの知識が並んでるのも理解しがたい。
0255デフォルトの名無しさん
2010/10/31(日) 08:48:27まだ持っている人も関心ある人も少ない点が貴重
>>254
なんでsocketなんだろうな
だからと言ってRailsだされてもそれだけ別試験作れそうだけど
0256デフォルトの名無しさん
2010/10/31(日) 10:53:03ActiveScriptRubyのリンク先は以降こちらで
ttp://www.artonx.org/data/asr/
0257デフォルトの名無しさん
2010/10/31(日) 11:44:09http://yuzuru.2ch.net/test/read.cgi/lic/1287221892/
0258デフォルトの名無しさん
2010/10/31(日) 13:18:470259デフォルトの名無しさん
2010/10/31(日) 13:22:36breakとcontinueは使うな
他の手段考えろ
以上
0260デフォルトの名無しさん
2010/10/31(日) 13:29:380261デフォルトの名無しさん
2010/10/31(日) 13:30:02マジ?
今読んでいる「Rubyはじめてのプログラミング」って本では
while true から特定のキー入力を判定して
breakで抜ける手法を使いまくりなんだが。
0262デフォルトの名無しさん
2010/10/31(日) 13:34:230263デフォルトの名無しさん
2010/10/31(日) 13:48:10forやwhileではなくブロックの中で使うほうです。
0264デフォルトの名無しさん
2010/10/31(日) 13:57:39next と break はブロックのイテレーションを抜けたり、ブロック付きメソッド呼び出し自体から抜けるもの。
Proc のことはブラックマジックなので考えない。
0265デフォルトの名無しさん
2010/10/31(日) 14:16:150266デフォルトの名無しさん
2010/10/31(日) 18:02:10file.each do |line|
hoge
done
と
file.each {|line|
hoge
}
と二通りの書き方があるようですが、プログラム的にはどちらも同じ意味になるのでしょうか?
違うのならどのような違いがあるのでしょうか?
0267デフォルトの名無しさん
2010/10/31(日) 18:06:02>>187
0268デフォルトの名無しさん
2010/10/31(日) 19:13:36強いて言えば結合の強さが違うので、1つのメソッドの引数に別の
メソッドの返値が必要なケースで、その記述にブロックを付けたい
場合、どっちにつくことになるのかは考える必要がある。
実際に遭遇することはあんまりないけど、予想外の結果になった
ときに原因として疑うべき箇所ではある。
foo bar { ... } は foo(bar { ... })
foo bar do ... end は foo(bar) do ... end
0269デフォルトの名無しさん
2010/10/31(日) 20:24:22急に仕事でJRubyを使用しての開発を行うことになりました。
とりあえず本を探しているところですが、あまりにも本が少なくて・・・。
RubyとJRubyとで命令や書き方が同じであれば、Rubyの本を買ってしまおうかと
思っています。
違いはJavaのフレームワークで動くか位の違いという認識で問題ないでしょうか?
0270デフォルトの名無しさん
2010/11/01(月) 09:03:05Rubyクックブック P.39〜P.40より引用
Rubyには、コードブロックを作成するための構文が2つある。ブロック全体が1行に収まる場合は、
中かっこ( { } )で囲むと読みやすくなる。
[1, 2, 3].each { |i| puts i }
ブロックが1行に収まらない場合は、doキーワードとendキーワードで囲むと読みやすい。
[1, 2, 3].each do |i|
if i % 2 == 0
puts "#{i} is even."
else
puts "#{i} is odd."
end
end
ブロックの戻り値が重要である場合に中かっこを使用し、ブロックの副作用が重要である場合に
do...end構文を使用することもある。中かっこ構文はdo...end構文よりも優先度が高いことに注意しよう。
例として、次の2つのコードについて考えてみよう。
1.upto 3 do |x|
puts x
end
1.upto 3 { |x| puts x } # SyntaxError: compile error
2つ目の例では、コードブロックは関数呼び出し 1.upto 3 ではなく、3にバインドする。スタンドアロン変数に
コードブロックを使用することはできないため、コンパイルエラーになる。疑問に思うなら、かっこを付けてみよう。
1.upto(3) { |x| puts x }
0271デフォルトの名無しさん
2010/11/01(月) 09:14:17空白区切りなんて
「Rubyって空白でもいいんだすげえwwwwwwwww」
と浮ついた人が麻疹のように使うだけ
普通の人はパーサに優しいように括弧をつけてメソッドにくっつけて書くようになる
…稀に凄い人がDSL的読み下し可能な状態で書き綴ることがあるが、
アレは自分でもできそうに見せる奇術師の手品なので真似厳禁
0272デフォルトの名無しさん
2010/11/01(月) 09:20:25ブロックは波括弧
こういうルールで俺はやってる
0273デフォルトの名無しさん
2010/11/01(月) 09:22:26>>269
Rubyでなにか製品を開発する必要がある場合は、ほぼ100パーセントただのRubyが選ばれる
JRubyという指名がある場合は、指名者がただのアホでない限り、実際に必要なのはJavaやJavaとの連携だ
仮にRubyに超絶熟達していても、JRubyではプロダクトを作れない
というわけで最初は素直にJRubyの本買え
この本ではRuby部分がわかんねー、というようになったら、それ用にRubyの解説本でも買うよろし
0274デフォルトの名無しさん
2010/11/01(月) 09:26:26スクリプトファイルやライブラリ単体としてはRubyでもJRubyでも動くんだけどね
開発でJRubyというご指名ならJavaがぐんにょり溶け込んだコードが要るのでしょう
0275デフォルトの名無しさん
2010/11/01(月) 10:11:44達人出版会
ttp://tatsu-zine.com/books/1
とうとう始動したかー。
0276デフォルトの名無しさん
2010/11/01(月) 10:29:020277デフォルトの名無しさん
2010/11/01(月) 11:39:480278デフォルトの名無しさん
2010/11/01(月) 11:54:42usaさんがWin32のサポートやめようとしてるっていうのは全く知らなかったんだけど、 usaさん独りでやるのは
そろそろ辛そうだなあというのは傍で見てて思った。
もちろんなかださんとかもやってくれてるんだけど、基本的なところはみんなusaさんにかぶってるしね。 で、
Windowsのまずいのは、それはWindowsのすごいところでもあるんだけど、 あらゆる組み合わせで動くように
なってるもんで、 たとえば遅い遅いという話が出たとして、ぼくやusaさんではそんな症状はぜんぜん出ないのに、
誰かのところじゃ実際にそういう症状が起こるっていうわけのわかんないのが、やっぱりなんだかんだである。
結局、問題があって文句垂れるやつが100人いて、100人とも文句垂れてるよりは、 こういう企画をやれば、
そのうち10人は何が問題かって自力で調べてくれるかも知れない。要するにサンプルが2/100では発生しないかも
しれないけど、 10/100では再現するかもしれないじゃない。Rubyを使っているってことは開発者なんだから、
とっかかりがあれば、自分でどうにかしようとする可能性が高いよね。でもブラックボックスのユーザーはそんなこと
最初から考えない。ブラックボックスなんだから。というわけで、ああいう企画でブラックボックスに隙間を開ける
くらいのことはできるかなぁと。
ということはどういうことかっていうと、 usaさんも私もいい年だから(笑)、 若い人をWindowsの世界に呼ばないと
いかんなあと。 そういう、まあ、義務感じゃないけど、 なんとなく、Rubyにお世話になってるから。 私がRubyの
ためにできる、要するにディストリビューションを作る以外に、 人間のディストリビューションも手伝おうか、
っていうようなのが一つある。
(続く)
0279デフォルトの名無しさん
2010/11/01(月) 13:20:56【RoR】Rubyについて Part 41【CPAN vs RubyGems】
http://hibari.2ch.net/test/read.cgi/tech/1281473294/
0280デフォルトの名無しさん
2010/11/01(月) 14:15:20rubyではaliasでメソッドの別名を定義できますが
def self.get_area_name( m_area_id, format=:area )
# 処理部分
end
alias name get_area_name
の様に記述すると文法エラーになってしまったのですが
エイリアスを記述する場合は、どうすれば良いのでしょうか?
0281デフォルトの名無しさん
2010/11/01(月) 14:21:47def self.new_mes
self.orig_mes
end
クラスメソッドの文脈で alias を使用する
class C
def self.orig_mes
puts "orig!"
end
class << self
alias :new_mes :orig_mes
end
end
C.new_mes
0282デフォルトの名無しさん
2010/11/01(月) 14:35:27・ 「クラスCのクラスメソッド」とは、C=Class.new した クラスオブジェクトCのインスタンスメソッドである
・ 関数的メソッド alias は、インスタンスメソッドの自動定義しかできない
・ つまり、alias を使用したい場合、alias に「クラスオブジェクトCのインスタンスメソッド」を作成させればよい
ということで、インスタンスメソッド定義の書き方でクラスメソッドを定義できる文脈
class C
class << self
# ここ
end
end
で、alias を記述する
0283デフォルトの名無しさん
2010/11/01(月) 14:54:20シンボルではなくメソッド名そのものを書こう。
alias_method なんてももあるけど。
0284デフォルトの名無しさん
2010/11/01(月) 15:00:54yukihiro_matz: 英語圏でRubyとPythonを比較する記事を見ることが少なくなってきた
のは、RubyとPythonでクラスタが分離してきたからか。逆に日本語でRubyとPythonを
比較 する記事を見かけるのは国内でのPythonの地位が向上したからか。
∩_
〈〈〈 ヽ
____ 〈⊃ }
/⌒ ⌒\ | |
/( ●) (●)\ ! !
/ :::::⌒(__人__)⌒:::::\| l
| |r┬-| | / <こいつ最高にアホだお
\ ` ー'´ //
/ __ /
(___) /
0285デフォルトの名無しさん
2010/11/01(月) 15:12:17∩_
〈〈〈 ヽ
____ 〈⊃ }
/⌒ ⌒\ | |
/( ●) (●)\ ! !
/ :::::⌒(__人__)⌒:::::\| l
| |r┬-| | / <こいつ最高にアホだお
\ ` ー'´ //
/ __ /
(___) /
0286デフォルトの名無しさん
2010/11/01(月) 15:12:51【Perl,PHP】LLバトルロワイヤル13【Ruby,Python】
http://hibari.2ch.net/test/read.cgi/tech/1287944631/292
【RoR】Rubyについて Part 41【CPAN vs RubyGems】
http://hibari.2ch.net/test/read.cgi/tech/1281473294/399
0287デフォルトの名無しさん
2010/11/01(月) 15:20:53〈〈〈 ヽ
____ 〈⊃ }
/⌒ ⌒\ | |
/( ●) (●)\ ! !
/ :::::⌒(__人__)⌒:::::\| l
| |r┬-| | / <全部のスレ貼れおーw
\ ` ー'´ //
/ __ /
(___) /
0288デフォルトの名無しさん
2010/11/01(月) 22:25:14Windows遅い遅いという人は見かけるがコア開発者の環境では遅くないのか、、、
0289デフォルトの名無しさん
2010/11/01(月) 22:44:20【RoR】Rubyについて Part 41【CPAN vs RubyGems】
http://hibari.2ch.net/test/read.cgi/tech/1281473294/
0290デフォルトの名無しさん
2010/11/01(月) 23:19:09Windowsまともに開発する気ないみたいだし
PerlとかPythonに変えたほうがいいよ
0291デフォルトの名無しさん
2010/11/02(火) 01:54:20達人出版会
ttp://tatsu-zine.com/books/1
とうとう始動したかー。
0292デフォルトの名無しさん
2010/11/02(火) 04:52:00買っといた
0293デフォルトの名無しさん
2010/11/02(火) 04:53:21俺しか買ってなかったら特定される、、、
0294デフォルトの名無しさん
2010/11/02(火) 05:08:53やましいことしてるわけじゃないし
で、俺は特定されるのやだから今は買わないけど
自費出版とかならジュンク堂あたり取り扱ってくれないかしら
0295デフォルトの名無しさん
2010/11/02(火) 05:13:06>>275
0296デフォルトの名無しさん
2010/11/02(火) 07:49:340297デフォルトの名無しさん
2010/11/02(火) 07:53:490298デフォルトの名無しさん
2010/11/02(火) 07:56:430299デフォルトの名無しさん
2010/11/02(火) 10:00:23十分致命的ですが?
0300280
2010/11/02(火) 10:11:42解決法どうもありがとうございます
この点に関しては、ちょっと考えるように書ける程にはまだrubyも進歩出来ていない印象でした
とりあえず、その方法で進めていこうと思います
0301デフォルトの名無しさん
2010/11/02(火) 11:09:15「引数がクラスメソッドを表す文字列である場合」とか場合分けしなくていい
あくまで現在のselfに自分の役目で接続すればいい
class C
class << self
attr_accessor :foo
end
end
C.foo = 1
p C.foo #=> 1
p C.instance_variable_get(:@foo) #=> 1
class << slef ... end という記法はもうちょいなんとかならんかったのかと思うことは週一くらいである
0302デフォルトの名無しさん
2010/11/02(火) 11:43:48self.singleton_class.instance_eval { attr_accessor :foo }
end
singleton_class メソッドを使ってもこれがせいぜいか。
0303デフォルトの名無しさん
2010/11/02(火) 11:48:14>class << slef ... end という記法はもうちょいなんとかならんかったのかと思うことは週一くらいである
概念的にはわりとステキな部類だと思うんだけど、この書き方はあんまりきれいじゃないよね
これがクラスインスタンスを呼ぶ書き方だと覚えるのにずいぶん手間取った記憶がある
0304デフォルトの名無しさん
2010/11/03(水) 04:35:37せっかく書籍まで出してくれたしコンパイル環境作って弄ってみるわ
軽くぐぐってみたが、NTFSが遅いやらそうじゃなくてWindowsのファイルIOのAPIが遅いやら
何がなにやら
環境依存そうだし
0305STR ◆qj5zEwXUS.
2010/11/03(水) 10:13:59Array::each_indexは、常に配列の要素番号の若い順に
ブロックが実行されますか?
たとえば、次のコードや、
a = [32, 44, 9]
a.each_index do |i|
puts a[i]
end
このコード
a = [32, 44, 9]
a.each do
puts a[i]
end
の実行結果は、常に
32
44
9
となりますか?
0306デフォルトの名無しさん
2010/11/03(水) 10:30:480307デフォルトの名無しさん
2010/11/03(水) 10:51:56悲惨だな
0308デフォルトの名無しさん
2010/11/03(水) 11:03:40>>305
each_index の仕様が変わらないかぎりそう
ただ下のコードは動かないよ
[32, 44, 9].each{|e| puts e} なら OK
0309デフォルトの名無しさん
2010/11/03(水) 11:35:102ちゃんねるははじめてですか?
0310デフォルトの名無しさん
2010/11/03(水) 11:46:080311デフォルトの名無しさん
2010/11/03(水) 11:55:42そういう人だって道端で叫び回ってる人には話し掛けないだろうに、不可解なことだ
0312デフォルトの名無しさん
2010/11/03(水) 12:01:10君の理屈なら2chに名前欄要らないってことになるが実際にはそうではない
なぜか?
0313デフォルトの名無しさん
2010/11/03(水) 12:05:19>>312だって名前書いてないだろ
0314デフォルトの名無しさん
2010/11/03(水) 12:11:55まあ半年くらいいろんな板やスレをROMってみるといいぞ
0315デフォルトの名無しさん
2010/11/03(水) 12:13:42というか匿名だっておかしいのがいっぱいいるのに
コテというだけで危険とみなすことがおかしい
純粋に書き込みの内容だけで判断すべきだ
いちいちぐぐって身元確認とかばからしすぎる
0316デフォルトの名無しさん
2010/11/03(水) 12:19:37コテハン流用者は基本アンタッチャブル
0317デフォルトの名無しさん
2010/11/03(水) 12:23:15結果として当たりだったんじゃないかね
>>308や>>315を見るに、経験も耐性もない人はこのスレ多そうだ
無邪気に歓待してしまってから、どうしてこうなったのか困惑するタイプ
0318デフォルトの名無しさん
2010/11/03(水) 12:34:30てか他のスレでもコテだろうが質問には普通に答えてるぞ
おかしなこと言い出したらあぼんすればいいだけだ
0319デフォルトの名無しさん
2010/11/03(水) 12:48:07それがRuby流だとかぬかしてるのだがものすごく読み辛い。
俺の美しいコードもこの頭の固い先輩に汚されてしまう。
0320デフォルトの名無しさん
2010/11/03(水) 13:00:530321デフォルトの名無しさん
2010/11/03(水) 13:14:02出来る限り行を少なくするのが
Rubyの思想だから、それで合っているよ。
Rubyに美しさなんて存在しない。
0322デフォルトの名無しさん
2010/11/03(水) 13:34:120323デフォルトの名無しさん
2010/11/03(水) 13:35:38コーディングスタイルにこだわるならRubyは向いてない。
Pythonにでもすれば?
0324デフォルトの名無しさん
2010/11/03(水) 13:52:19b
else c
d
end
var = case a
when b
c
when d
e
end
こういう感じのコードもRurb流ならアリ?
0325デフォルトの名無しさん
2010/11/03(水) 15:07:33意味わからん
0326デフォルトの名無しさん
2010/11/03(水) 17:41:46UNIX の pipe は処理の終わった部分からリアルタイムに流れる
Windows の pipe は全要素を処理しないと次のプロセスに流れない
0327デフォルトの名無しさん
2010/11/03(水) 18:23:47これってCやJavaの三項演算子A ? B : Cと同じようなもんじゃん。
単に君のスタイルでは使わないってだけで、
プログラマならば読みこなさないとな。
ていうか、これは目から鱗が落ちる。他の言語では無理だろ。
やっぱRubyってすげえ。
0328デフォルトの名無しさん
2010/11/03(水) 18:31:21写像が途中で止まる理由はない
0329デフォルトの名無しさん
2010/11/03(水) 18:38:16オートインデントが無闇に深くなるという理由で、使用しない場合がある
long_name_var = if very_very_comlex_condition1 then
b
else
d
end
は
if very_very_comlex_condition1 then
long_name_var = b
else
long_name_var = d
end
のほうが、その場のインデントの深さによってはまだ見やすい
が、基本、条件分岐が値を返すというのをRubyは多用する
0330デフォルトの名無しさん
2010/11/03(水) 18:40:36俺も買ったぜ!
0331デフォルトの名無しさん
2010/11/03(水) 19:38:37そんなの、バックスラッシュで改行すればいいだけじゃないの。
long_name_var = ¥
if ver_very_comlex_condition1
b
else
d
end
これでいいと思うけどなあ。だめ?
もしくはbやdが短い場合は
cond = very_very_complex_condition1
long_name_var = cond ? b : d
0332デフォルトの名無しさん
2010/11/03(水) 19:59:19問題は回避手段がこの世に存在することじゃない
0333デフォルトの名無しさん
2010/11/03(水) 20:12:10は?何を語りだしたの?
0334デフォルトの名無しさん
2010/11/03(水) 21:12:38まれにコテが普通に居る板もあるけどな
まあ技術系の板では何かの作者とかでない限りアンタッチャブルだな
作者とかでも付けるのは作者自らの発言であると示す必要がある場合だけで
雑談では外してたりするし
0335デフォルトの名無しさん
2010/11/03(水) 21:16:01long_name_var = if very_very_comlex_condition1 then
b
else
d
end
まあこれならありかな
0336デフォルトの名無しさん
2010/11/03(水) 21:25:16if very_very_comlex_condition1
then b
else d
end)
とかどうよ
0337デフォルトの名無しさん
2010/11/03(水) 21:31:240338デフォルトの名無しさん
2010/11/03(水) 21:34:21普通行頭からの階層でネストするだろうに
0339デフォルトの名無しさん
2010/11/03(水) 21:39:590340デフォルトの名無しさん
2010/11/03(水) 21:43:56long_name_var = if very_very_comlex_condition1 then
b
else
d
end
と
foo_method_with_keyhash(
:key1 => value1,
:key2 => value2,
:key3 => value3,)
は根っこが一緒だ
long_name_var = if very_very_comlex_condition1 then
b
となって欲しいという場合、
foo_method_with_keyhash(
:key1 => value1,
にもなるはず
0341デフォルトの名無しさん
2010/11/03(水) 21:48:17文法的には可能だが実際はめどいので使用されてないという機能はあるし
0342デフォルトの名無しさん
2010/11/03(水) 22:37:12にはパスを通したのですがrequireでファイルがロードできないというエラーが出ます。
ライブラリのどこにパスを通せばいいですか?
参照しているのはOpenSSLとSHA1などです。よろしくお願いします。
0343デフォルトの名無しさん
2010/11/03(水) 22:52:48rubyのコンパイルオプション見て、必要なファイル全部集めてパス指定して再コンパイルしろ
0344デフォルトの名無しさん
2010/11/03(水) 23:02:380345デフォルトの名無しさん
2010/11/03(水) 23:33:040346デフォルトの名無しさん
2010/11/04(木) 01:04:33if文の結果を変数に突っ込む機会なんて滅多にないわ
aとbが短い時は
long_name_var = very_very_complex_condition1 ? a : b
でいいし
aとbが複式になる時は無理に右辺式にしないで
if very_very_complex_condition
1a
2a
...
long_name_ver = na
else
1b
2b
...
long_name_ver = nb
end
でいい。
0347デフォルトの名無しさん
2010/11/04(木) 01:18:090348デフォルトの名無しさん
2010/11/04(木) 01:32:41議論するほどのことかよ。
自分の好きなように書けばいいんだよ。
Matzの言う楽しいプログラミングって、そういうことだろ。
0349デフォルトの名無しさん
2010/11/04(木) 01:38:11|
/ |
/ |
/ | b
/ |
D∠____□
a
0350デフォルトの名無しさん
2010/11/04(木) 02:12:00あぼんしやすい分まだ親切
0351デフォルトの名無しさん
2010/11/04(木) 02:43:44Math.atan(b/a)
単位はラジアンなので度が欲しいなら180を掛けて円周率で割れ
0352STR ◆qj5zEwXUS.
2010/11/04(木) 06:30:25レスありがと。
Mechanizeを利用してYahoo financeから企業情報
をスクレイプするbotを作ってます。
eachが要素番号が若い順に値を拾える事を明言
するドキュメントを見つける事ができませんので、
訊いてみました。
0353デフォルトの名無しさん
2010/11/04(木) 06:41:07>自分の好きなように書けばいいんだよ。
>Matzの言う楽しいプログラミングって、そういうことだろ。
違います
また自分の都合のいいようにしか考えないから
0354デフォルトの名無しさん
2010/11/04(木) 09:49:56配列をイテレーターで取得すると追加順にならない標準ライブラリをもった言語って何か合ったけ?
RubyでいうHash?いわゆる連想配列になる言語とかかな?
0355デフォルトの名無しさん
2010/11/04(木) 10:04:10ありがとう、超ありがとう
0356デフォルトの名無しさん
2010/11/04(木) 10:08:530357デフォルトの名無しさん
2010/11/04(木) 10:12:12JScriptは配列=連想配列な言語だが
foreachで取得すると番号順に取れない(いやバージョンによって違うかも知れんが)
0から順番に追加したのがバラバラに来るので、追加順でもないってことになる
ハッシュ値順とかなのかな
0358デフォルトの名無しさん
2010/11/04(木) 10:14:06明示的にインデックスを指定するので「追加順」でもないし
イテレータでもないけどこういうことでしょ?
$ cat foo.awk
BEGIN {
a[1] = "foo";
a[2] = "bar";
a[3] = "baz";
for (x in a) {
print a[x];
}
}
$ awk -f foo.awk
bar
baz
foo
0359デフォルトの名無しさん
2010/11/04(木) 10:41:05for-inかな?手元のJScriptだと、{}で作った配列のように使えるObjectも、
Arrayも追加順で列挙された
>>358
foo
bar
baz
になったけど
http://ideone.com/x8wu6
追加順変えても同じ
http://ideone.com/xAMXL
0360デフォルトの名無しさん
2010/11/04(木) 10:56:54arr[1] は文字列 1 というキーで登録されている値を返す
arrの「1番目」ではない
arr[1] arr[2] arr[3] は配列の1番目・2番目・3番目に見えるが、
実際は文字列1で参照される値・文字列2で参照される以下略である
0361デフォルトの名無しさん
2010/11/04(木) 11:03:17for (var in array) で取り出される順番は awk の内部的順番であり、制御できない
たまたまascii順だったりするかもしれない
整数文字列のインデックスで登録されていることがわかっている場合は
for (x = 1; x <= max; x++)
print arr[x]
のように目的順に並んだキー(添え字)で明示的にアクセスすることはできる
枚挙機能がもうすこし強力ならもうちょっと便利に使えたんだが
0362デフォルトの名無しさん
2010/11/04(木) 19:17:32どっちも関数形式での呼び出しを強制するようですが、なにが違うんでしょうか。
0363デフォルトの名無しさん
2010/11/04(木) 19:21:250364デフォルトの名無しさん
2010/11/04(木) 19:49:590365デフォルトの名無しさん
2010/11/04(木) 19:51:320366デフォルトの名無しさん
2010/11/04(木) 20:05:51「ほとんどのマシンでは 31 ビット幅です」とあるけど x86_64 だと違うよね?
0367デフォルトの名無しさん
2010/11/04(木) 21:00:0963だね
0368デフォルトの名無しさん
2010/11/04(木) 21:46:57$ ruby -ve 'p [2**62-1, 2**62,2**63-1,2**63].map(&:class)'
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.4.0]
[Fixnum, Bignum, Bignum, Bignum]
0369デフォルトの名無しさん
2010/11/04(木) 22:09:38タグに2ビット取ってるってこと?
0370デフォルトの名無しさん
2010/11/04(木) 22:36:280371デフォルトの名無しさん
2010/11/05(金) 10:16:030372デフォルトの名無しさん
2010/11/05(金) 10:26:01$ /usr/bin/ruby -e 'p [2**30-1,2**30,2**31-1,2**32].map{|i| i.class}'
[Fixnum, Bignum, Bignum, Bignum]
0373デフォルトの名無しさん
2010/11/05(金) 10:33:34言われてみればというか、なんで忘れてたんだろ……
0374デフォルトの名無しさん
2010/11/05(金) 11:18:540375デフォルトの名無しさん
2010/11/05(金) 11:57:220376デフォルトの名無しさん
2010/11/05(金) 14:59:53p Nokogiri::VERSION #=> "1.4.3.1"
doc = Nokogiri::HTML('<a></a>')
doc.at("a").inner_html = " >"
p doc.at("a").inner_html #=> " >"
doc = Nokogiri::HTML('<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><a></a>')
doc.at("a").inner_html = " >"
p doc.at("a").inner_html #=> " >"
なんで charset の指定があると設定した だけがスペースになるんですか?
0377デフォルトの名無しさん
2010/11/05(金) 15:01:130378376
2010/11/05(金) 15:07:56"&nbsp;&gt;" を inner_html に設定すると
" &gt;" になってしまうという内容でした
0379デフォルトの名無しさん
2010/11/05(金) 15:27:51{"warnings"=>[], "ruby"=>{"engine"=>"mri", "version"=>"1.8.7", "platform"=>"i686-linux"},
"libxml"=>{"loaded"=>"2.7.6", "binding"=>"extension", "compiled"=>"2.7.6"}, "nokogiri"=>"1.4.3.1"}
libxml2 のバージョンが低すぎるのだと思う
0380376
2010/11/05(金) 15:39:23{"warnings"=>[], "ruby"=>{"engine"=>"mri", "version"=>"1.8.7", "platform"=>"i686-darwin10"},
"libxml"=>{"loaded"=>"2.7.7", "binding"=>"extension", "compiled"=>"2.7.7"}, "nokogiri"=>"1.4.3.1"}
んー 2.7.7 からダメなんですかね
とりあえず回避策として を別の文字に置換して to_html のあとで元に戻すか、
Hpricot 使います。(Hpricotだと問題なかったので)
0381デフォルトの名無しさん
2010/11/05(金) 21:28:470382デフォルトの名無しさん
2010/11/05(金) 22:16:340383デフォルトの名無しさん
2010/11/05(金) 22:21:18ブロック省略でEnumeratorを返す方針?になってるので
selectやmapでは意味のあるEnumeratorを返せないことになってしまってるのがすごく残念
ためしに、引数でProcを与えてブロックを省略するとEnumeratorを返すようにしてみたら
(Ruby1.9で)素数を二乗したもののうち1000を超えるのを小さいほうから10個得るとかがこう書ける
require 'prime'
p Prime.instance.map(->x{x**2}).select(->x{x>1000}).take(10)
しかし、ブロックを使わないのはRuby的じゃないなぁ
常にEnumeratorを返す別メソッドを作るのとどちらがいいのか
それと、EnumerableにもArray#productみたいなのが欲しい
Pythonみたいなネストした内包表記やジェネレーター式みたいなのが書きにくい
ついでに、Enumeratorでも列挙数が固定されているものはsizeを取得できるようにならんかな
0384デフォルトの名無しさん
2010/11/05(金) 22:25:34今起こったありのままのことを話すぜ
pacman -S ruby したら 1.9 が入って
0385デフォルトの名無しさん
2010/11/05(金) 23:12:49文字が文字として認識されるのは
使ってみると意外なほど便利に感じる
0386デフォルトの名無しさん
2010/11/06(土) 00:13:06まだ移行途中だけどrvmでサックリ入れて環境変えられたから
Windowsでもpikで入れてみているけど、思っていたよりかなり速い気がする
まだちょっとしたベンチマークしかメタしてないけど
0387デフォルトの名無しさん
2010/11/06(土) 07:26:10...
ruby -x ... # 処理Bを実行
でエントリポイント(メソッド?)を指定して別の処理を指せる方法ってないですか
いまは引数か環境変数でスクリプト側で分岐してますが。
0388デフォルトの名無しさん
2010/11/06(土) 10:59:57引数で渡して、sendするとか
# send.rb
def matz
puts "I LOVE Guido!!"
end
send ARGV[0]
$ ruby send.rb matz
I LOVE Guido!!
0389デフォルトの名無しさん
2010/11/06(土) 11:01:09ようするにsendに文字列かシンボル渡せばメソッド直接呼べる
ただし、意図しないものを変なもの呼ばれないようにね
0390デフォルトの名無しさん
2010/11/06(土) 11:54:05ちょっと話はそれるけど、ruby -s とすると簡単な引数が指定できる。
-------- ファイル名 example.rb ----------
#!/usr/bin/ruby -s
if $foo
foo()
elsif $bar
bar()
end
-------------------------------------
使い方: ./example.rb -foo または ./example.rb -bar
-foo=xxxとかも指定できる
0391デフォルトの名無しさん
2010/11/06(土) 11:58:35Python信者はPython使ってれば?こんなところまででばってくることないだろ。
0392デフォルトの名無しさん
2010/11/06(土) 12:07:11Pythonスレで「Pythonはラムダ書きにくい」とか言って煙たがられたという
輝かしい経歴の持ち主になんてことを
0393デフォルトの名無しさん
2010/11/06(土) 17:10:14違うよ。エキスパートPythonを売るためにRubyとPHPをディスってるPython信者だよ。
ttp://twitter.com/methane/status/16673043960
C++とJavaがある程度分かっていると、Pythonはサラッとチュートリアル読んだだけで、
(メタクラスとか高度な部分を除き)大抵のコードは読むことができた。Rubyはムリ。
ttp://twitter.com/methane/status/16673105203
Rubyの世界では、DRYがよく叫ばれている。Repeatしないために、どんどんルールを作る。
一方、PythonのZenにはDRYがない代わりに、 "Special casesarn't special enough to
break the rules." というものがある。
ttp://twitter.com/methane/status/16673188444
たとえば、Rubyはメソッド呼び出しの括弧を省略できるけど、Pythonは省略できない。
括弧を書くというRepeatを行った分、特殊メソッド以外の呼び出しは一目瞭然。
ttp://twitter.com/methane/status/16673278223
あと、Rubyはsuperの引数を省略すると、自分の引数がそのまま渡される。
Pythonは普通に引数なしで呼び出す。Rubyの方がタイプ数少ないけど、特別な暗黙ルールを
作れば作るほど、一見さんには意味不明になっていく。
ttp://twitter.com/methane/status/17241429240
GREE Fast Processor とか、ぶっちゃけどう考えても非効率なPHPをある程度マトモな形に
無理やり修正しているだけで、最初からPython使っていれば全く問題なく綺麗に効率的な
構成がとれるんですけどね。APCも設定ファイルのコンパイルも、Pythonなら不要。
0394デフォルトの名無しさん
2010/11/06(土) 17:17:21ttp://www.google.co.jp/search?q=%E3%82%A8%E3%82%AD%E3%82%B9%E3%83%91%E3%83%BC%E3%83%88Python
それを翻訳したあるPython信者の意見として暖かく見守ってください。
ttp://twitter.com/methane/status/26559107342
Pythonの名前付き引数は見た瞬間理解して感動したが、Rubyのシンボルは今でも調べてないので
理解できていない。多言語プログラマの共通言語として、Pythonは素晴らしいと思う。
ttp://twitter.com/methane/status/26558926751
self.は見た瞬間意味を理解したが、@はPerlっぽく見えた。Pythonの. は -> だとすぐわかった
が、Rubyの . がメソッド呼び出しなのは判らなかった。"foo bar".split() は判ったが、
%w[foo bar] は判らなかった。
ttp://twitter.com/methane/status/26558636746
Pythonはチュートリアル流し読みしただけで、Web上でみたいろいろなコードを全く問題なく読め
た。Rubyは勉強しないと読めない。
0395デフォルトの名無しさん
2010/11/06(土) 17:18:52他言語で書かれているものを、Rubyだとどう書かけるのかとかやって遊んでると
隣の芝生が青く見える時があるのですよ
内包表記はRubyとは合わない気がするので、内包表記そのものは要らないけど
Enumeratorの使い勝手はもっと充実させて欲しいと思う
遊んでて面白いので
業務でRubyを使う人にはEnumeratorの充実なんて不必要なのかもしれない
Enumeratorでメソッドチェーンとかがんがんしてたら
なんか遅そうな気はするし、一見して何やってるかわかりにくいかもしれない
でもなにせ遊びなもので、人のプログラムを見ることなんてないし
自分で書くのも書き捨ての小さいのばかりなのだから関係ないのだ
JRubyで実現困難なので不採用らしいけどBinding.of_callerとか欲しいなぁ
WindowsユーザーなのでRubiniusとか使えないし(Cygwin使ってまでは使いたくない)
>>391
Pythonはなにか肌に合わない
単にRubyの方を先に覚えたからだけのことかもしれないけど
0396デフォルトの名無しさん
2010/11/06(土) 17:25:580397デフォルトの名無しさん
2010/11/06(土) 17:40:250398デフォルトの名無しさん
2010/11/06(土) 17:53:520399デフォルトの名無しさん
2010/11/06(土) 22:18:21Ruby使うのに参考になるようなことならいいんじゃね?
それを超えるのは本スレでお願いしたいけど
>>393-394
荒らしのつもりなのかも知れないけど、けっこう同意できて泣けた(´;ω;`)
たまにPythonのソース見ると見やすい
> C++とJavaがある程度分かっていると、
これはRuby使っていると、でも同じだな。C++やJava関係ないわ
0400デフォルトの名無しさん
2010/11/06(土) 22:19:220401デフォルトの名無しさん
2010/11/06(土) 22:41:370402デフォルトの名無しさん
2010/11/06(土) 23:17:09頭の悪い俺でも1日で理解できるほど簡潔で美しいと思った。
しかし特異クラスの扱いが中途半端だから初心者が混乱するんだとも思った。
クラスメソッドなんて呼び方はやめた方がいいし、
オブジェクトからは通常のクラスだけでなく特異クラスの参照も辿れる様にすべきだ。
0403デフォルトの名無しさん
2010/11/06(土) 23:24:48読みやすいと思ったのは「たまに」見たからじゃない?
何が言いたいかと言うと、読み方をきちんと覚えればRubyのほうが
読みやすさと書きやすさの2点は上回るんじゃないかってこと。
時間はかかるかも知れないけど、
時間がかかるだけで2点が同時に手に入るならRubyのほうがお得じゃない?
0404デフォルトの名無しさん
2010/11/06(土) 23:29:44> 読みやすさと書きやすさの2点は上回るんじゃないかってこと。
こういう論争ってほとんど意味がないと思う
読みやすさなんて大阪弁と広島弁ほどの差も無いだろう
保守性って点で言えばPythonに分がある
0405デフォルトの名無しさん
2010/11/06(土) 23:30:240406デフォルトの名無しさん
2010/11/06(土) 23:31:520407デフォルトの名無しさん
2010/11/07(日) 00:16:38本スレにレスを書いた。Pythonは本当に現実的な言語だと思う。
0408デフォルトの名無しさん
2010/11/07(日) 00:49:490409デフォルトの名無しさん
2010/11/07(日) 01:10:270410デフォルトの名無しさん
2010/11/07(日) 01:26:470411デフォルトの名無しさん
2010/11/07(日) 01:30:330412デフォルトの名無しさん
2010/11/07(日) 02:15:20BDDのツールCucumberの日本語の電子書籍がでてたから紹介しとく
さらっと前半読んだ限り、かなり基本的なところからスタートしてるが
つくりながら学んでいくタイプなのでBDDって何だよ、Cucumberやってみたいんだがわかんね、という人にいいんじゃないかな。
はじめる! Cucumber - 達人出版会
http://tatsu-zine.com/books/2
ただ、英語だとこの手の本はいくつあるので英語出来る人はそっちのがいいと思うけど
0413デフォルトの名無しさん
2010/11/07(日) 02:16:21Railsスレと間違えた
流してくれ
0414デフォルトの名無しさん
2010/11/07(日) 05:00:050415デフォルトの名無しさん
2010/11/07(日) 17:53:25Python には Zope という完成形が既に存在していたからではないかと思う。
バイソンマニアには自慢の代物だったらしいし、確かに技術的には高度なWebフレームワークだった。
しかもRailsみたいなメタプログラミングを積極活用する思考は、Python界隈では(今なお)否定的だから。
PythonはOOPには向いていない言語。普通の手続き型言語として使えば(LLとしては)保守性の良い言語だけ思うけど。
問題は、Rubyが「Pythonを差し置いて」Webプログラミング言語として定着してしまった現実にあるみたい。
0416225
2010/11/07(日) 18:31:12>業務でRubyを使う人にはEnumeratorの充実なんて不必要なのかもしれない
>Enumeratorでメソッドチェーンとかがんがんしてたら
Enumuratorによるメソッドチェーンって、読みにくいのかな?
例えば>>241のコードは、それをガンガン使った典型的な例だけど、
output_data = input_data.map { .... }.sort_by { .... }.reverse.each { .... }
入力データを変換(map)して、ソート(sort_by)して、反転(reverse)して、結果を処理(each)する、って読める。
UNIX Shellのパイプライン処理や、(業務系アプリの)バッチ処理を見慣れた人なら、理解してもらえると思う。
もちろん慣れは必要だけど、(手続き型プログラミング的な)ループ処理よりも、結果的には簡潔でバグも少ない
プログラミングが可能になる。以下は、>>241を(Perl/Python風の)手続き型に書き直したもの。どう見る?
0417225
2010/11/07(日) 18:34:24def calc3(input_data)
output_data = []
for month, sales in input_data
output_data[:month] = month
output_data[:sales] = sales
sum = 0
for i = 0 to sales.size - 1
sum += sales[i]
end
output_data[:sum] = sum
end
output_data.sort_by! { |record| record[:sum] }
output_data.reverse!
for record in output_data
: (ここは>>241と同じだから省略)
end
nil
end
0418デフォルトの名無しさん
2010/11/08(月) 16:07:22を
puts 'do' if (n == 100 or 200)
のように書きたいのですが、これでは動きません。
スマートに書くにはどうしたらいいですか?
0419デフォルトの名無しさん
2010/11/08(月) 16:13:290420デフォルトの名無しさん
2010/11/08(月) 16:26:360421デフォルトの名無しさん
2010/11/08(月) 16:48:09ただし、or の前が真であった場合に or の後ろを評価(実行)したくないというような場合は or で書くしかない
def one
return 1
end
def two
puts 'two実行されたよやベーよ'
return 2
end
n = 1
puts 'case using or ========='
puts 'do' if (n == one) or (n == two)
puts 'case using find ========='
puts 'do' if [one, two].find{|x| n == x}
の結果は
case using or =========
do
case using find =========
two実行されたよやベーよ
do
になるので注意
find や >>419-420 は比較対象が全て評価されてしまう
0422デフォルトの名無しさん
2010/11/08(月) 17:23:53をスマートに書くには?
0423デフォルトの名無しさん
2010/11/08(月) 17:26:49それが一番スマート
というか数学的処理は数学的処理の得意な言語に任せろ(逆切れ
0424デフォルトの名無しさん
2010/11/08(月) 17:41:38をスマートに書くには?
puts 'do' if (n and m == 100)
みたいに書けない?
0425デフォルトの名無しさん
2010/11/08(月) 17:45:44% begin
% raise unless [100, 200].include?(session['user_id'])
<html>
略
</html>
% rescue
% print CGI.new.header({'location' => 'http://2ch.net/'})
% end
0426デフォルトの名無しさん
2010/11/08(月) 17:49:08Rubyの「ひかくえんざんし」は全てメソッドだ
n == 100
は実際は
n.==(100)
だ
n >= 200
は実際は
n.>=(200)
だ
だから、こういうメソッドで書けないものは根本的に無理
0427デフォルトの名無しさん
2010/11/08(月) 18:04:56if n == m == 100:
print 'do'
0428デフォルトの名無しさん
2010/11/08(月) 18:15:170429デフォルトの名無しさん
2010/11/08(月) 21:33:54リファレンス読んでるけどわからん。どこに書いてある?
0430デフォルトの名無しさん
2010/11/08(月) 21:35:220431デフォルトの名無しさん
2010/11/08(月) 21:36:225. Expressions ? Python v2.7 documentation
http://docs.python.org/reference/expressions.html#notin
5.9 比較 (comparison)
http://www.python.jp/doc/release/ref/comparisons.html
0432デフォルトの名無しさん
2010/11/08(月) 23:24:45とっても基本的なことなんですが、Rubyでのスプリットの書き方を誰か教えてください!!
お願いします!!
0433デフォルトの名無しさん
2010/11/09(火) 01:02:23http://rurema.clear-code.com/version:1.8.7/query:split/
0434デフォルトの名無しさん
2010/11/09(火) 06:39:13python すげー(棒
0435デフォルトの名無しさん
2010/11/09(火) 09:54:11if n = 100 | 200
if 100 < n < 200
ができたような
0436デフォルトの名無しさん
2010/11/09(火) 10:16:46if Math.compare("100 < n #{max}") then ... とか作って書くしかあるまい
compareメソッドが引数文字列をどう分析して比較動作にするかは任せる
0437デフォルトの名無しさん
2010/11/09(火) 13:41:24[n, m].all? 100 とか [100, n, 200].monoinc? とかどうだろう。
単調増加 = monoinc
単調減少 = monodec
等号を含む含まないを言い分ける一般的な用語がないんだなこれ。
0438デフォルトの名無しさん
2010/11/09(火) 13:53:38=> ""
irb> 5.times{num += (%[1 2 3 4 5][rand(5)]).to_s}
=> 5
irb> num
=> "3249514950"
どうして5桁じゃなくて10桁の数字が返るの?
0439デフォルトの名無しさん
2010/11/09(火) 14:25:15irb> p "1 2 3 4 5"[1].to_s
"32"
文字列 "1 2 3 4 5" の0バイト目から5バイト目のアスキーコードを
ランダムに5回選んで文字列にして追記するんだから、そりゃ10文字の数値になるだろ
0440デフォルトの名無しさん
2010/11/09(火) 14:28:04if a in 100, 200
puts 'wonderful'
end
0441デフォルトの名無しさん
2010/11/09(火) 14:29:35"25153"
本当にやりたかったのはこうだろうな
0442438
2010/11/09(火) 16:19:40ふーむ、分かったような分からないようなw
文字コードとか絡むと理解が追いつかなくなる…
>>441
やりたかったのはそれです。使わせていただきます。
ありがとうございます。
0443デフォルトの名無しさん
2010/11/09(火) 17:51:05(n == 100) or (n >= 200)を例に取ると
n.getrange( 100.ソリトン or 200.閉集合右界 )
みたいな表現が必要になるのにそういうのは数学にない。
こういうの言葉でしか説明できない数学が論理的だなんて笑っちゃうよね。アリストテレスかよってのw
0444デフォルトの名無しさん
2010/11/09(火) 18:04:350445デフォルトの名無しさん
2010/11/09(火) 20:05:00>まあ、どちらにしても、比較記号が数値オブジェクトのインスタンスメソッドであるRubyでは無理な相談だな
そんなことないでしょ。
比較記号を連続できるかは、構文解析ががんばれば十分可能。
インスタンスメソッドだからできないというのはおかしい。
0446デフォルトの名無しさん
2010/11/09(火) 20:51:18さもなくば構文をそれ専用に拡張するか。
構文解析は今でも十分かんばり過ぎてるw
0447デフォルトの名無しさん
2010/11/09(火) 20:58:29今でもパーサは演算子をメソッドとしては解釈してない。
演算子がメソッドであることが関わってくるのは、構文解析してASTが作られたあと。
比較演算子をPythonのようにするのは構文解析をつくるところまでの話だから
演算子がメソッドであることは関係してこない。
0448デフォルトの名無しさん
2010/11/09(火) 23:11:08演算子=メソッド という一貫性が崩れるので
比較の連続は導入できないのでしょうね
0449デフォルトの名無しさん
2010/11/10(水) 03:42:08プログラムをどうすれば動かすことが出きるでしょう?
require でファイルを呼び出すことができませんというエラーが出ます。
実効環境はLinux Slackware13.1です。よろしくお願いします。
0450デフォルトの名無しさん
2010/11/10(水) 04:51:31$ ruby -v
ruby 1.9.1p378とかいろいろ
$ ruby -rdigest/sha1 -e ""
で LoadError が出るのなら、ruby コンパイル時に openssl が有効になってない
openssl の開発パッケージのようなものをインストールするか、
通常ソース丸ごとコンパイルしてインストールした後、
ruby のコンパイルオプションで openssl を有効にして再コンパイルしれ
0451デフォルトの名無しさん
2010/11/10(水) 05:07:580452デフォルトの名無しさん
2010/11/10(水) 05:30:10実行時にオプションを指定しないとエラーが出るのでしょうか?
0453デフォルトの名無しさん
2010/11/10(水) 05:48:58個人企業団体の情報が漏れない程度のエラーメッセージを貼ると誰かが気づくかも気づかないかも
0454デフォルトの名無しさん
2010/11/10(水) 05:55:21Ruby1.9では単にインストールされていない説にまとめて10票くらい入れておく
gemライブラリのモジュール名にSHA1とか入ってて勘違いしたのだろう
0455デフォルトの名無しさん
2010/11/10(水) 06:04:340456デフォルトの名無しさん
2010/11/10(水) 07:52:270457デフォルトの名無しさん
2010/11/10(水) 09:45:28digest 使え。
が答えだと思う。
0458418
2010/11/10(水) 10:06:17ttp://d.hatena.ne.jp/ku-ma-me/20100114/p1
include?しかないかなと思ったのですが、1行caseが一番マシそうなのでcaseを使うことにします。
結論
case n when 100, 200
puts 'do'
end
ありがとうございました。
p.s. ほんとは>>440みたいに書きたかったなぁ
0459デフォルトの名無しさん
2010/11/10(水) 10:07:01我々がとやかく口挟むようなレベルのお話ではないと思われます
0460デフォルトの名無しさん
2010/11/10(水) 10:22:39>>420
0461デフォルトの名無しさん
2010/11/10(水) 11:07:38おまえ最後の一行だけ見てレスつけてるだろ
0462デフォルトの名無しさん
2010/11/10(水) 15:06:01配列のつもりで使った表記が文字列になってるからだよ
%[]と%w()は全然違う
0463デフォルトの名無しさん
2010/11/10(水) 15:36:27だから、演算子がメソッドであることは関係ないってんだろ。
構文解析時には、演算子がメソッドであることは関係してこないの。
それが関係してくるのはあくまで構文解析後の話。
> 演算子=メソッドという一貫性が崩れる
そんなわけがない。なにこの頭悪い子。
0464デフォルトの名無しさん
2010/11/10(水) 17:10:590465デフォルトの名無しさん
2010/11/10(水) 18:15:00よく嫁
>>448は
>演算子=メソッド という一貫性が崩れるので
だ「一貫性が崩れる」と書かれてるのであって
if 演算子.is_a?(メソッド)
なんてことは書かれてないぞ
0466デフォルトの名無しさん
2010/11/10(水) 18:32:19ああ、あれか。
「演算子=メソッド」とならない構文を入れちゃえば関係ないって話か。
0467デフォルトの名無しさん
2010/11/10(水) 18:33:120468デフォルトの名無しさん
2010/11/10(水) 19:29:42どうやるのでしょうか?
0469デフォルトの名無しさん
2010/11/10(水) 19:31:390470デフォルトの名無しさん
2010/11/10(水) 19:43:17ncursesか何か
行全体を再度書き出してもいいのなら>>469
irb> 5.times{|i| print "現在の時刻は #{Time.now}\r"; sleep 1};
現在の時刻は Wed Nov 10 19:40:15 +0900 2010
Time.now の部分だけを更新するのは、…まあカーソル移動させればできなくもない気がするが
あと、キャリッジリターンを行改とするターミナルがあっても文句は言わないこと
0471デフォルトの名無しさん
2010/11/10(水) 19:51:27手順 3 of 7
タマネギを炒めます... [OK]
ニンジンを炒めます ... [OK]
肉を炒めます ...
の1行目の「n of 7」の n の部分を書き換えたいとかそういう用途にはあんま向かないな
0472デフォルトの名無しさん
2010/11/10(水) 19:55:24簡単だけど改行した後は戻れない
0473デフォルトの名無しさん
2010/11/10(水) 19:59:27表面に火を通した肉を別皿に取っておくのがめんどいなら別にいいけど
0474デフォルトの名無しさん
2010/11/10(水) 20:04:300476デフォルトの名無しさん
2010/11/10(水) 20:15:20お前じゃねえ
座ってろ
0477デフォルトの名無しさん
2010/11/10(水) 20:19:34ワロタ
0478デフォルトの名無しさん
2010/11/10(水) 20:21:50このページ見ていたんだけど
人生を書き換える者すらいた。: 人材獲得作戦・4 試験問題ほか
http://okajima.air-nifty.com/b/2010/01/post-abc6.html
Re: 人材獲得作戦・4 試験問題ほか - まめめも
http://d.hatena.ne.jp/ku-ma-me/20100112/p1
この最短の経路探索の問題がなんで、下のページのように解けるかがわからないんだけど・・・
どうしたらこういう解き方が短時間でできるようになるんでしょうか?
0479デフォルトの名無しさん
2010/11/10(水) 20:26:380480デフォルトの名無しさん
2010/11/10(水) 22:25:13たぶん
0481デフォルトの名無しさん
2010/11/10(水) 23:05:04この手のアルゴリズムを短い時間でこなせるようになりたいってことじゃなくて?
0482デフォルトの名無しさん
2010/11/10(水) 23:24:02勉強にはなるんだろうけどね
だから読めんw
0483デフォルトの名無しさん
2010/11/11(木) 00:54:52require 'net/http'
Net::HTTP.start('www.example.com', 80) {|http|
response = http.get('/index.html')
puts response.code
}
これだとHTML本文も取得したうえでレスポンスコードを返してますよね
なるべく相手のサーバーに負担をかけたくないのでレスポンスコードだけ取りたいのですが、
そういった事は可能でしょうか?
0484デフォルトの名無しさん
2010/11/11(木) 01:01:51とはいえ、先方の処理が、HEADだったら中身作らずにステータス
だけ返す、という作りになってないと意味ないと思うが。
0485デフォルトの名無しさん
2010/11/11(木) 06:24:33そうそう!そういうこと
経路探索ならA*とかダイクストラとか思いついてもサッと実装できないレベルだと、
ゴルフのコード見たとき置換で解いててギョットした
>>479
読んでみる
0486デフォルトの名無しさん
2010/11/11(木) 09:02:48仮に「レスポンスボディを受け取る前に通信を打ち切る」ようにクライアント動作を作ったとしても、
レスポンスボディを作成するサーバの負担自体はふつう変わらない
200とか304とかレスポンスコード返す時点で既にレスポンスボディは作ってあるか、
作成予約が入ってて取り消せない状態のはずだから
(ここでコネクション切られたことを検知して作成キャンセルするようなサーバ処理してるのは見たことがない)、
単にサーバ側の作り損だ
>>484の言うようにHEAD投げろ
GETの代替として動作するかどうかはサーバ作った人の根性次第だが
0487483
2010/11/11(木) 22:43:23Net::HTTP.get_response(URI.parse(uri_str))
というのも見つけたのですが結局変わり無さそうですね
いい機会なのでHTTPの仕様から勉強し直します
ありがとうございました
0488デフォルトの名無しさん
2010/11/11(木) 23:09:23Net::HTTPだるいし、curb(curl)くらい標準で付けてもいいと思うんだ
taf2's curb at master - GitHub
https://github.com/taf2/curb
0489デフォルトの名無しさん
2010/11/11(木) 23:25:41こんなのか
$ gem install curb
$ ruby -e "require 'curb'; puts Curl::Easy.http_head('http://example.com/').response_code"
200
これ見て適当に書いた
Curb - libcurl bindings for ruby
http://curb.rubyforge.org/
と思ったら、ふつうにNet::HTTPでもできるんじゃ・・
$ ruby -e "require 'net/http'; p Net::HTTP.new('example.com').head('/').code"
"200"
どっちも始めて使ったから知らんので確認して
0490デフォルトの名無しさん
2010/11/12(金) 00:07:400491デフォルトの名無しさん
2010/11/12(金) 00:54:180492デフォルトの名無しさん
2010/11/12(金) 05:44:21curbはlibcurlが必要だということを知らずに言っているわけでもあるまい
あとURIの仕様が拡張されてPOST情報がURIに記述可能になってからまたおいで
writeしてからreadするという方法も考えなかったわけでもないのだが
0493デフォルトの名無しさん
2010/11/12(金) 06:09:46あと名前が紛らわしすぎ
0494デフォルトの名無しさん
2010/11/12(金) 06:36:05ライセンスの問題ならlibcurlはMIT/Xみたいだから大丈夫そうだけど
curb(curl)がまともに使えるのかどうかは知らんw
始めて使ったし
とはいえ>>489の用途だったらnet/httpでも問題ないよね
0495デフォルトの名無しさん
2010/11/12(金) 06:37:160496デフォルトの名無しさん
2010/11/12(金) 06:38:17ハイすいません、出直してきます
0497デフォルトの名無しさん
2010/11/12(金) 07:16:000498デフォルトの名無しさん
2010/11/12(金) 11:39:00rubyならすぐに作れそうですがもしあれば
0499デフォルトの名無しさん
2010/11/12(金) 12:31:57いろいろなサイトからデータを取得して、RSSリーダーや検索エンジンみたいなもの自分で作りたいと勝手に仮定する
Perlにはplaggerという定期的に登録したサイトのRSSやその全文やどこかのxmlやら何やらその他いろいろデータをゲットしてきて
それを自分のメールに送ったりもしくはDBに入れたり、RSSとして再配信したり、いろいろ加工するフレームワークがある。
それのRuby版のpraggerというのがかつてあり、今もメンテがつづいているYapraというのフレームワークがある。
Yapraよりも以前からあるplaggerの方が環境は整っていそうなので、Yapraを選ぶのはRubyに慣れている以外の選択肢はないかもしれない。
参考:
Yapra メモ: コマンド+パイプを使った処理との比較、モジュールの書き方など | anobota
http://haraita9283.blog98.fc2.com/blog-entry-356.html
最新版:
yuanying's yapra at master - GitHub
https://github.com/yuanying/yapra
もしくは、特定のサイトだけでいいなら、
上でもでているopen-uriやらnet/httpやcurbもしくは、定番のnokogiriやmechanizeを併用して、
定期的に指定したサイトを巡回しデータを取得して、ActiveRecrdなりDataMapperなりを使ってDBに入れる。
DBに入れておけば、あとは表示はRails使うなり、静的HTMLではくなりテキストにするなりなんとでもなる。
巡回する部分は「Ruby クロール」「Ruby Webスクレイピング」でググって調べると幸せになれるとおもう。
あと、サイト側でRSSやらWeb APIが提供されているならそれを取得するとサイトデザインの変更に強くなりかなり楽。
また、既存のRSSやWebAPIをxmlやJSONとして取得したり、ちょっとした加工して取得したいだけならYahoo!Pipesを間に入れて
それをRubyから取得して使う手もある。
plaggerやYapraでやるようなフィルタリング的なことでちょっとしたことは、Yahoo!Pipesだけでもできてしまうので。
0500デフォルトの名無しさん
2010/11/12(金) 12:50:57ただし>>499にあることは、普段Rubyを使っていて、こんなライブラリを使えば楽ですよ、すぐにできそうですよ、という面が強い話。
Rubyに慣れていないなら、すぐには作れないかも知れないけど、難しく考えなくてもいい。
最低限の方法ならば、
・HTMLかRSSかWeb APIのxmlかJSONを持ってくる:
open-uriやらnet/httpやcurbもしくは、定番のnokogiriやmechanize
・データベースに保存:
ActiveRecordとかDataMapperとか使うと楽だけど、よくわからないなら別にファイルに直接吐いてもいいし
・条件を指定して、データベースから出力して好きなように吐き出す
ActiveRecordとかDataMapperなどを使ってデータをDBから取り出して、
ERBなりなんなりでHTMLやテキストに吐き出す。ファイルに吐いてあるなら適当に加工する
・定期的に上のスクリプトを実行: cronやタスクマネージャーに登録するか、ループで走らせておいてsleepしておくとか。
というようなことは、Ruby初心者でもそんなに難しくない。とにかく勉強と思わずやりたいことをすぐやったほうがいい。
どかかにサーバーを用意しておいて、寝ている間にデータを取得させて、
表示はRailsやSinatraのアプリを立てておいてWebブラウザでLANから見られるようにもできるが、
そういうのは慣れてからでもいいだろう。
それとWeb APIが予め用意されていてかなり普及しているようなWebサービス、例えば
ソーシャルブックマークやTwitterのようなSNSなどのサイトは、
そのサイトが持っているAPIをサポートするライブラリがすでに結構あるので
データを持ってくるだけならドキュメントとAPI仕様みればある程度簡単にかけるとは思う。
Rubyのライブラリがあるかは http://rubygems.org/ を検索するとわかる。
例としてTwitterのリアルタイムなデータを得るためのstreaming APIを扱うライブラリを探すときはこんな感じ
http://rubygems.org/search?utf8=%E2%9C%93&query=twitter+streaming
また http://github.com/ にもrubygems.orgにあがっていない有志の作ったライブラリが結構ある。
0501デフォルトの名無しさん
2010/11/12(金) 12:58:57ただもっと簡単にシンプルに考えるならば、Rubyすら使わずにもある程度できる。
Yahoo!Pipesでニュースサイトの吐くRSSやHTMLを都合のイイように加工する
(例えば本文テキストと日付だけとか)
↓
wgetやcurlのようなコマンドラインでデータを取得できるプログラムで
作ったYahoo!Pipesのデータにアクセスして、ファイルに落としていく。
↓
必要なら加工して、欲しいフォーマットにする。
検索したいだけなら、あとでgrepをかけるなり、全文検索プログラムにインデックスさせるなりする。
段階を追うならば、これらの作業をRubyで自動化してもよい。
もちろんバッチファイルやシェルスクリプトでも良い。
いきなり簡単にできそうとプログラムに飛びついて悩むことになるよりは、まずは簡単に考えよう。
0502デフォルトの名無しさん
2010/11/12(金) 12:59:250503デフォルトの名無しさん
2010/11/12(金) 13:03:320504デフォルトの名無しさん
2010/11/12(金) 13:05:17大事なのは、好きなサイトのエロ画像や動画を定期的に集めたい、
有名人やキチガイをウォッチしつづけたい、
図書館の検索エンジンが遅いのでオレオレ図書館DBを作りたい、
という欲求とそれを達成することである。
技術や言語はどうでもいいのでとにかく自分の知っている方法で始めていけばいいと思う。
とっかかりをつかめば、自分のしたいことをしやすい言語やライブラリがそのうち見つかる。
0505デフォルトの名無しさん
2010/11/12(金) 13:07:280506デフォルトの名無しさん
2010/11/12(金) 13:09:08>>503が正解。「まずは簡単に考えよう」
以上
0507498
2010/11/12(金) 15:47:51説明していただいた内容とキーワードで調べてみます
他人が作ったものが利用できるかどうかを判断するだけでも大変なので
定番やキーワードだけでも参考になります
0508デフォルトの名無しさん
2010/11/12(金) 22:25:350509デフォルトの名無しさん
2010/11/12(金) 22:48:040510デフォルトの名無しさん
2010/11/12(金) 23:08:202G超のファイルだとオーバーフローして負になるのでは
2.5Gのファイルを試す
Ruby1.8.7 => -1703582628 => 0xffffffff9a75645c
Ruby1.9.2 => 2591384668 => 0x000000009a75645c
4.9Gのファイルだと
Ruby1.8.7 => 982142884 => 0x000000003a8a4fa4
Ruby1.9.2 => 5277110180 => 0x000000013a8a4fa4
正の数だが桁が落ちてる
0511デフォルトの名無しさん
2010/11/12(金) 23:09:520512デフォルトの名無しさん
2010/11/12(金) 23:12:48* off_t 型(signed整数、サイズは環境依存)の限界を超える巨大ファイル
* off_t 型の実体検出結果に間違いがある(もしそうならバグ)
という理由を思いついたが他にもあるだろうか。
0513デフォルトの名無しさん
2010/11/12(金) 23:17:060514デフォルトの名無しさん
2010/11/12(金) 23:24:42ただしInternetExplorerや特殊なアドオン入りFirefoxを常に起動している必要あり
0515デフォルトの名無しさん
2010/11/12(金) 23:27:02>>510
>>512
確かに当該ファイルだけ3G強というサイズでした。
お二人のおっしゃるとおり限界値を越えていたのだろうと思います
ありがとうございました
0516デフォルトの名無しさん
2010/11/12(金) 23:44:22有難うございます!
0517デフォルトの名無しさん
2010/11/13(土) 14:11:326GBくらいのファイルで試した
・Windows
Ruby 1.8.7-p302 -1395916800 ←!!
Ruby 1.9.2-p0 7194017792
Ruby 1.9.2-dev 7194017792
・Linux Ubuntu 32bit
Ruby 1.8.7-p302 7194017792
Ruby 1.9.2-p0 7194017792
昔の32bit intでファイルサイズ扱ってて2GB超えると正しく扱えない処理系思い出した
0518デフォルトの名無しさん
2010/11/13(土) 14:35:10BDDやテスティンフレームワークにから使われるCapybaraというライブラリが
JavaScriptの解釈にSeleniumかCulerityとCelerityを使うので参考になるかも。
CapybaraはDSLでブラウザのテストを自動化するためのもののようだし、
どこまで使えるかわからないけど
0519デフォルトの名無しさん
2010/11/14(日) 07:26:06ttp://www.amazon.co.jp/dp/4864010099/
0520デフォルトの名無しさん
2010/11/14(日) 12:36:38助けてくださいませんでしょうか・・・
【環境】
OS: WindowsXP Home Edition
eclipse: pleiades-e3.6-java-jre_20101025
InstantRails: 2.0(Rubyのバージョンは1.8.6)
Railsプロジェクトを作成すると、
’Replace prject index file’に問題が発生しました。
リソース'/(プロジェクト名)/public'が存在しません
というエラーダイアログが表示されます。
エラーダイアログを閉じ、ジェネレーターでscaffoldを生成しようとしても、
うんともすんとも言いません・・・。
eclipseログには
!MESSAGE 内部エラー
!STACK 1
org.eclipse.core.runtime.CoreException: Local configuration cannot be nested in a directory.
at org.eclipse.debug.internal.core.LaunchConfigurationType.newInstance(LaunchConfigurationType.java:463)
at com.aptana.rdt.internal.core.gems.GemManager.createGemLaunchConfiguration(GemManager.java:374)
at com.aptana.rdt.internal.core.gems.GemManager.launchInBackgroundAndRead(GemManager.java:258)
at com.aptana.rdt.internal.core.gems.GemManager.loadSourceURLs(GemManager.java:850)
at com.aptana.rdt.internal.core.gems.GemManager$2.run(GemManager.java:834)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
!SUBENTRY 1 org.eclipse.debug.core 4 0 2010-11-14 12:17:18.812
!MESSAGE Local configuration cannot be nested in a directory.
が出力されています。
RadRails単体でRailsプロジェクトを作成しても同じエラーが発生していまいました。
0521デフォルトの名無しさん
2010/11/14(日) 12:43:58【Ruby】Ruby on Rails Part10
http://hibari.2ch.net/test/read.cgi/php/1282991262/
0522デフォルトの名無しさん
2010/11/14(日) 12:59:05ごめんなさい。
読んだつもりが見逃していました。
>>4に書いてありましたね。
わざわざありがとうございます。
失礼しました。
0523デフォルトの名無しさん
2010/11/14(日) 15:51:061人や2人じゃないからな、多分構造的な問題
0524デフォルトの名無しさん
2010/11/14(日) 20:44:33typemapというものを勉強する必要があるのでしょうか?
0525デフォルトの名無しさん
2010/11/16(火) 18:48:55ってエラーはどんな時にでるの?
http://www.java2s.com/Code/Ruby/Hash/RuntimeErrorhashmodifiedduringiteration.htm
にあるみたいに
1.upto(100){|x| h[x]=true}
h.keys{|k| h[k*2]=true}
とかしてみたけど起こらなかった
0526デフォルトの名無しさん
2010/11/16(火) 19:02:55foo.each{foo["b"] = 2}
RuntimeError: can't add a new key into hash during iteration
ではなくて?
0527デフォルトの名無しさん
2010/11/16(火) 21:34:28「ruby hash modified during iteration」でぐぐって、最初のページに書いてあった。
hash = {1 => 2, 3 => 4, 5 => 6}
big_hash = {}
64.times { |k| big_hash[k.to_s] = k }
hash.each { hash.merge!(big_hash) }
0528デフォルトの名無しさん
2010/11/16(火) 21:39:47いやまあ Hash オブジェクトがあるのに Object#hash なんて作った Ruby 側が一方的に悪いんだけどさ
これ __hash__ でも全く何の問題もないよね
0529デフォルトの名無しさん
2010/11/16(火) 23:58:06あんなに勢い良かったのに。
0530デフォルトの名無しさん
2010/11/17(水) 00:01:28?
0531デフォルトの名無しさん
2010/11/17(水) 00:01:45【Perl,PHP】LLバトルロワイヤル13【Ruby,Python】
http://hibari.2ch.net/test/read.cgi/tech/1287944631/
0532デフォルトの名無しさん
2010/11/17(水) 00:16:07それまでふつうにRubyを使っていた人は辟易していたよ。
0533デフォルトの名無しさん
2010/11/17(水) 01:07:4263.times { } だとRuntimeErrorにならないけど
0534デフォルトの名無しさん
2010/11/17(水) 01:26:520535デフォルトの名無しさん
2010/11/17(水) 06:03:05ここは雑談スレでもバトロワスレでもない
Rubyを学ぶ者が質問するスレだ
0536デフォルトの名無しさん
2010/11/17(水) 07:25:49たぶんテーブルの再構成が 64 で起きるんだろう。
0537デフォルトの名無しさん
2010/11/17(水) 11:13:300538デフォルトの名無しさん
2010/11/17(水) 11:24:420539デフォルトの名無しさん
2010/11/17(水) 11:43:25わざわざそんなふうに書く必要もない気がするんだが
0540デフォルトの名無しさん
2010/11/17(水) 11:54:580541デフォルトの名無しさん
2010/11/17(水) 12:03:01「数値」以上の意味を求めない場合はxとかnとかいう名前にすることはあるかな
0542デフォルトの名無しさん
2010/11/17(水) 12:08:08そんな話はしていない
0543デフォルトの名無しさん
2010/11/17(水) 18:03:59ってちゃんとエラー出ていてエラーメッセージが現象を表している分にはいいんじゃないの?
他の言語で似たようなことがあってもエラーでずに動いたり、
もしくはたまにエラーでたり大変だったわ。
エラーといってもiteration中に弄るんじゃねえよというエラーではない。
想定されているから出せるエラーだよなこれ
0544デフォルトの名無しさん
2010/11/17(水) 19:33:57iteration中にHashの要素弄るなってこと?
gemで配ってるライブラリの中だから直せないけど
0545デフォルトの名無しさん
2010/11/17(水) 19:47:15対策としてはほんのりsleepさせるとうまくいったりいかなかったり
作者の環境で気が付かないのならおそらくそれで
0546デフォルトの名無しさん
2010/11/17(水) 20:34:24イテレーション中に弄ってもいいの!?
0547デフォルトの名無しさん
2010/11/17(水) 20:38:11githubだったら修正してpull request
0548デフォルトの名無しさん
2010/11/17(水) 22:40:25<ResultSet
xsi:schemaLocation = "urn:yahoo:jp:srch http://search.yahooapis.jp/WebSearchService/V1/WebSearchResponse.xsd"
firstResultPosition = "1"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
totalResultsAvailable = "404000000"
pgr = "22656901"
xmlns = "urn:yahoo:jp:srch"
totalResultsReturned = "1">
<Result>
<Title>Ruby - Wikipedia</Title>
<Summary>Ruby(ルビー)は、まつもとゆきひろ(通称Matz)により開発されたオブジェクト指向スクリプト言語であり、 ... Rubyの公式な実装には、以下の二種類が存在する。 ...</Summary>
<Url>http://ja.wikipedia.org/wiki/Ruby</Url>
〜〜
</Result>
</ResultSet>
というXMLをyahoo apiで取得しているのですが、これから titleとurlを取得しようとしています。
libxmlでurlだけ取得しようと思って
xp=XML::Parser.new
xp.string =xml#上のxml
doc=xp.parse
doc.find('/Url').each do |e|
p e.content
end
としたのですが、無反応でした。rexmlを使っているかたは居たのですが、
大量に処理をしたいと思っているので、速度的に問題があるかなと思っています。
なにか知恵を与えてくださるとありがたいです
0549デフォルトの名無しさん
2010/11/17(水) 22:50:16irb> p doc.at('Title').inner_text
"Ruby - Wikipedia"
irb> p doc.at('Url').inner_text
"http://ja.wikipedia.org/wiki/Ruby"
0550デフォルトの名無しさん
2010/11/17(水) 23:20:40Rubyからlibxml使ったことないからよく知らないけど
findの引数を 'Url', '//Url', '/Result/Url' なんかにして試してみては
あるいは正規表現で /<Url>(.*?)</Url>/ とかでも
0551デフォルトの名無しさん
2010/11/17(水) 23:22:33複数の<Result></Result>になったものを最終的にしようと思ったので
doc.xpath("/ResultSet/Result/Title").each do |e|
p e.inner_text
end
としたのにこれまたダメでした。xpathの書き方あ
http://ja.wikipedia.org/wiki/XML_Path_Language をみたのですが、間違っていますか?
0552デフォルトの名無しさん
2010/11/17(水) 23:55:12<ResultSet>
<Result>TitleとかUrlとかが入ってる検索結果その1</Result>
<Result>TitleとかUrlとかが入ってる検索結果その2</Result>
</ResultSet>
という構造だと勝手に推測、夜遅いし眠いのでXPathの条件記述とか全く使用しない力技
doc.search("Result").each{|res| puts res.at('Title').inner_text, res.at('Url').inner_text}
0553デフォルトの名無しさん
2010/11/18(木) 00:02:12すいませんすいません。簡略化してでも書けば良かったですね><
かかれたものでうまくいきました。
XPATHとNokogiriをキーに勉強して来ます。
0554デフォルトの名無しさん
2010/11/18(木) 01:15:59#!/usr/bin/ruby
require 'rubygems'
require 'xml'
doc = XML::Document.file('resultset.xml')
doc.root.namespaces.default_prefix = 'yapi'
doc.find('yapi:Result').each{|res|
title = res.find('yapi:Title')[0]
url = res.find('yapi:Url')[0]
puts "#{title.content}: #{url.content}"
}
デフォルトの名前空間をうまいこと扱ってくれないのは面倒だね
0555デフォルトの名無しさん
2010/11/18(木) 12:43:47hoge("huga")
def hoge(text)
puts text
end
上のようにメソッド定義前にメソッドを呼び出すとダメだよね?
でも
class SelfTest
def fuga
hoge("success!!")
end
def hoge(text)
puts text
end
end
test = SelfTest.new
test.fuga
これだとうまくいくのはなんでなの?
0556デフォルトの名無しさん
2010/11/18(木) 12:58:16Rubyでの定義文(classやdef)は実行文なので、実行されないと定義もされない。
hoge("huga") # この時点ではまだhoge()の定義文が実行されてないからエラー
def hoge(text)
puts text
end
class SelfTest
def fuga
hoge("success!!")
end
def hoge(text)
puts text
end
end
test = SelfTest.new
test.fuga # この時点でfuga()もhoge()も定義文が実行されているからエラーにならない
0557デフォルトの名無しさん
2010/11/18(木) 13:22:44ぶっちゃけやってやれないこともなかったはずなんだが、誰も覚えてない程度には誰もやらない
0558デフォルトの名無しさん
2010/11/18(木) 13:31:02def はメソッド登録だけすると思ってもらえるといいんだけどさ
def の中身がどうなっているかは def 登録時には関与しない
puts b
def b; "B!!"; end
がアウトで
def a; puts b; end
def b; "B!!"; end
がいいのは理不尽っぽい気がちょっとだけする
0559デフォルトの名無しさん
2010/11/18(木) 13:38:06前方参照じゃなかったっけ
0560デフォルトの名無しさん
2010/11/18(木) 13:47:16紳士協定で誰もやらないってだけで、本来はrequireの順番が重要なはず
今もrequire 'rubygems'なんかが順番依存だけどさ
>>559
そういうのではなく、たぶん
&hello;
sub hello{
print "Hello!\n";
}
で書かれるタイプの「プログラム後半にサブルーチンどかっと定義」のやり方のことだと思う
0561デフォルトの名無しさん
2010/11/18(木) 14:02:280562556
2010/11/18(木) 15:06:45自分もなんだか理不尽に感じて質問したんだよね
javascriptとかならそういうやり方出来るし・・・
とりあえず分かった気がします、ありがとう
0563デフォルトの名無しさん
2010/11/18(木) 18:21:21俺もrubyに来たときその挙動が不思議だった。
「あとで宣言するものを参照できない仕様」くらいに思っていたけど全然違ってた
rubyは上から順に実行していってるだけで、メソッドの中は後でそのときになって実行してると考えたら>>558の挙動はしっくりきた
動的言語でのメソッドの遅延評価というだけなのか知らんが
>>558の例で言えば def a までプログラムが走ったときにそのメソッドの中身は「評価」しないと。
つまりputs bのbがそれまでに定義されているかいないかなんて見てない。そのときは評価しないんだから。
その後でコード外で、どこか別のところでaが呼ばれれば、
その中で始めてbが参照されると
こんな理解でいいの?
0564デフォルトの名無しさん
2010/11/18(木) 18:22:07ウワァァァン
0565デフォルトの名無しさん
2010/11/18(木) 18:26:16後で評価されるから、ではなく、
メソッドの定義をしたときにはメソッドが有るか無いかまでは見ない
実行時に初めて調べるということだな
動的言語だからっと言ったほうがすっきりくるかも
0566デフォルトの名無しさん
2010/11/18(木) 18:52:28$ cat a.rb
def foo
if 1 then
ende
end
$ ruby a.rb
a.rb:5: syntax error, unexpected $end, expecting kEND
これなんかは foo メソッドを実行して初めて
「いやーないわーこのifはないわー(endが無い的な意味で)」
とか言ってくれてもよさそうなもんなのに
0567デフォルトの名無しさん
2010/11/18(木) 19:13:320568デフォルトの名無しさん
2010/11/18(木) 19:59:37そのfooメソッドの範囲はどこまでになるのか考えるといい
endeは無効なんだから、放っておくなら最後のendはif文に対応するわけだが
0569デフォルトの名無しさん
2010/11/18(木) 21:41:33http://www.ustream.tv/channel/careerstream
0570デフォルトの名無しさん
2010/11/19(金) 00:40:03文法チェック以上のチェックは出来ないんよね
def文だって、いわば動的に追加してるだけだし
0571デフォルトの名無しさん
2010/11/20(土) 11:18:16クッキーをブラウザから読み込んだり、書き込んだりしたいのですが
上手く行きませんので、下記の修正お願いします
プログラム初心者のため、ハッシュも分かってない状態です
konomi1 = cgi.cookies['konomi'].first
expires = Time.now + 60*60*24*30
cookies = [CGI::Cookie::new({
'name' => 'konomi',
'value' => konomi1',
'expires' => expires,})
cgi.out("cookie" => cookies)
0572デフォルトの名無しさん
2010/11/20(土) 11:35:38'value' に対応する値 konomi' の最初の ' が欠けている。
以上を直して、コマンドラインから実行
$ /usr/bin/ruby -v test.rb
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
(offline mode: enter name=value pairs on standard input)
^D
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/cgi.rb:706:in `out':
no block given (LocalJumpError)
cgi.out はブロックがないとエラーになることが分かる。
文字列を返すブロック( { '' } でよい)を付ける。
$ /usr/bin/ruby -v test.rb
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
(offline mode: enter name=value pairs on standard input)
^D
Content-Type: text/html
Content-Length: 0
Set-Cookie: konomi=; path=; expires=Mon, 20 Dec 2010 02:34:29 GMT
0573デフォルトの名無しさん
2010/11/20(土) 11:51:50コメント有難うございます。
上手く動かないので、前文載せます。指摘お願いします
#!/usr/bin/ruby
print "Content-Type: text/html\n\n"
require 'cgi'
cgi = CGI.new
konomi = cgi.cookies['konomi'].first
expires = Time.now + 60*60*24*30
cookies = [CGI::Cookie::new({
'name' => 'konomi',
'value' => konomi,
'expires' => expires,})]
cgi.out("cookie" => cookies) do
print <<EOM
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
"<html lang="ja"><body>
<form action="test.cgi" method="get">
このみ:<select name="konomi">
<option>りんご</option>
<option>みかん</option>
</select>
<input type="submit" value="計算">
</form>
あなたの好みは#{konomi}ですね
</body></html>"
EOM
end
0574デフォルトの名無しさん
2010/11/20(土) 12:11:19知識なしでは2重3重に遠くから長い菜箸で物をつまむような感覚に近い
0575デフォルトの名無しさん
2010/11/20(土) 12:46:112行目を削除する必要あるような気がする。
そうするとprint<<EOM以下を大幅変更する必要ありそうだが、分からず。
地道に基礎から学んでいこうと思います。
0576デフォルトの名無しさん
2010/11/20(土) 13:57:140577デフォルトの名無しさん
2010/11/20(土) 15:37:18了解です。
いちごは表示しましたが、りんごは選択しても表示せず。
あと一歩です
#!/usr/bin/ruby
require 'cgi'
cgi = CGI.new
konomi = cgi.cookies['konomi'].first
cookies = [CGI::Cookie::new({
'name' => 'konomi',
'value' => konomi,
'expires' => Time.now + 60*60*24*30,})]
cgi.out("cookie" => cookies) do
"<html><body>
<form action=test.cgi method=post>
好み:<select name=konomi>
<option>いちご</option>
<option>りんご</option>
</select><br>
<input type=submit value=計算></p>
</form>
Cookie test: #{konomi}
</body></html>"
end
0578デフォルトの名無しさん
2010/11/20(土) 15:43:410579デフォルトの名無しさん
2010/11/20(土) 16:15:10・ Rubyの知識
・ CGIの知識
・ HTMLの知識
・ HTTPの知識
これら全てを全く隠蔽せず、剥き出しで求めてくる
これら4つの知識がある人にのみ使用可能
はっきり言って、今のままだと書き換えるたびにこのスレに聞いてくるはずだ
0580デフォルトの名無しさん
2010/11/20(土) 16:37:43まあ簡単に作ってもらっては困るという点で間違ってもいないのか
0581デフォルトの名無しさん
2010/11/20(土) 16:43:01Rackが動かん、Rubyが古い環境ならわかるが
それは新たにCGI.rbの使い方を聞くような状況ではなかろう
0582デフォルトの名無しさん
2010/11/20(土) 16:44:59CGI.rbにたどり着くのか?
Rubyに限らずネットには古い情報もあるし、
まずは期間を1年以内にして検索するというのもテンプレに入れとけや
0583デフォルトの名無しさん
2010/11/20(土) 16:46:380584デフォルトの名無しさん
2010/11/20(土) 17:07:470585デフォルトの名無しさん
2010/11/20(土) 17:44:25ほかに代替がないから仕方ない。
Rack?初心者にはRackは難しいヨ。
0586デフォルトの名無しさん
2010/11/20(土) 18:13:480587デフォルトの名無しさん
2010/11/20(土) 18:19:21よし、日本におけるRuby普及の歴史について400字でまとめていいぞ
0588デフォルトの名無しさん
2010/11/21(日) 19:05:45A.PHPがお勧めですよ。
0589デフォルトの名無しさん
2010/11/22(月) 11:39:58class Turn
# ターン番号
attr_accessor :turn
# ターンごとのキャラごとの行動
attr_accessor :actions
def initialize( turn )
@turn = turn
@actions = []
end
end
こういうコードを書きながら思ったのですが
上のコードを
Struct.new :turn, :actions
とすると1行で収まるけど、変数の初期値が設定できないので
これをハッシュを与えて
Struct.new :turn=nil, :actions=>[]
とできると嬉しいのですが。
0590デフォルトの名無しさん
2010/11/22(月) 12:41:58Struct.new :turn, :actions
は配列を渡していて、これが今の仕様。
Struct.new :turn=>nil, :actions=>[]
だとハッシュを渡すことになって、これだと仕様が変わっちゃうので、多分無理。
#ハッシュを渡すと引数の順番の情報がなくなるから。
#でも1.9だといけそうだね。
0591デフォルトの名無しさん
2010/11/22(月) 13:27:55メソッド定義は冗長になるが、正攻法なコードを。
def initialize(options = {})
@turn = nil
@actions = []
for key, value in options
case key
when :turn
@turn = value
when :actions
@actions = value
else
raise ArgumentError
end
end
end
attr_accessor :turn, :actions
使い方は Turn.new :turn => 1, :actions => [:hoge, :fuga, :foo] で。
このTurnクラスのような単なる構造体/レコードをたくさん定義する必要があるなら、
上のやり方だと面倒に感じるかもしれない。もしメタプログラミングに慣れれば、
自分で(Structのように)クラスを返すnewメソッドを定義できるようになる。
(普通はインスタンスを返すよね?)以下はそんなクラスの例。
Turn1 = MyStruct.new :turn, :action
0592デフォルトの名無しさん
2010/11/22(月) 14:01:290593591
2010/11/22(月) 15:09:31何を言ってるのか意味が読み取れない.....。
>>591では、Ruby標準の組み込みクラスであるStructの仕様は何も変更してないよ。
上段のコードはオプション引数処理を手作業でゴリゴリ書いていく、ごく常識的なもの。
下段のメタプログラミングうんぬんというのは、(Structクラスの挙動を変更するのではなく、)
たとえばMyStructという名前で、目的に応じた独自の(クラスを返す)クラスを
自分で新規に定義するのがいいね、って話なんだけどな。
0594デフォルトの名無しさん
2010/11/22(月) 15:58:26class MyClass1
def self.define_m(name)
define_method(name){
puts name
}
end
define_m :method_a
define_m :method_b
end
class MyClass2
def define_m(name)
define_method(name){
puts name
}
end
define_m :method_a
define_m :method_b
end
上のようなコードを書いてみたけど、
classtest.rb:21: undefined method `define_m' for MyClass2:Class (NoMethodError)
ってエラーが出てきて実行できません
selfがあるのとないのとではどう違うのでしょうか?
0595デフォルトの名無しさん
2010/11/22(月) 16:21:210596デフォルトの名無しさん
2010/11/22(月) 16:23:13# ここ
end
において「インスタンスメソッド形式で記述できる」のは、
定数 C に入ってる Class クラス のオブジェクトのインスタンスメソッドだ
つまり、いわゆる、クラス C のクラスメソッド
Class C
def m; end
m
end
としても、定数 C にはインスタンスメソッド m が定義されてないからエラー
C.new としたものにはインスタンスメソッド m は定義されている
0597デフォルトの名無しさん
2010/11/22(月) 16:34:570598デフォルトの名無しさん
2010/11/22(月) 16:54:00selfの意味は「文脈」によって変わる。たとえば>>594であれば、前半の
class MyClass1
def self.defile_m(name) # 本当に必要な場合を除いて、オヌスメしない
だと self はクラス MyClass1 を指す。言い換えると、上のコードは以下と等しい。
class MyClass1
def MyClass1.defile_m(name) # 慣れぬうちは、(いくらか面倒でも)こちらがオヌヌメ
これは、クラスMyClass1への「クラスメソッド」の定義を意味する。そして、後半の
class MyClass2
def defile_m(name)
は、MyClass2への「インスタンスメソッド」の定義を意味する。
これが、いわゆる普通のメソッド定義と呼ばれるもの。
0599デフォルトの名無しさん
2010/11/22(月) 20:53:000600デフォルトの名無しさん
2010/11/22(月) 21:13:340601デフォルトの名無しさん
2010/11/22(月) 22:06:150602デフォルトの名無しさん
2010/11/22(月) 22:13:34そういう点で>>598は全面的に糞
0603デフォルトの名無しさん
2010/11/22(月) 22:14:480604デフォルトの名無しさん
2010/11/22(月) 23:05:160605デフォルトの名無しさん
2010/11/22(月) 23:22:120606デフォルトの名無しさん
2010/11/22(月) 23:23:39今まで100回以上言ってるようなことを繰り返し出すぞ
0607デフォルトの名無しさん
2010/11/22(月) 23:32:480608デフォルトの名無しさん
2010/11/23(火) 00:01:250609デフォルトの名無しさん
2010/11/23(火) 01:48:260610デフォルトの名無しさん
2010/11/23(火) 03:01:52typhoeusを調べてみれば。使い方わかんないけど
0611デフォルトの名無しさん
2010/11/23(火) 08:57:16誰?
0613デフォルトの名無しさん
2010/11/23(火) 12:41:05yukihiro_matz: 昨日の「遅刻する夢」に引き続いて、今日は「迷子になる夢」を見
た。なんか不安があるんじゃないだろうか、オレ
∩_
〈〈〈 ヽ
____ 〈⊃ }
/⌒ ⌒\ | |
/( ●) (●)\ ! !
/ :::::⌒(__人__)⌒:::::\| l
| |r┬-| | / <こいつ最高に良い勘してるお
\ ` ー'´ //
/ __ /
(___) /
0614デフォルトの名無しさん
2010/11/23(火) 12:51:150615デフォルトの名無しさん
2010/11/23(火) 13:06:35selfの概念なしでRubyプログラミングできるようになってから喋れ
できないというのならselfの存在を意識して身につける機会を初心者から取り上げて悦に浸る自慰行為なんてするな、迷惑だ
0616598
2010/11/23(火) 13:22:32>selfの存在を意識して身につける機会を初心者から取り上げて
取り上げる気なんてぜんぜん無いし、>>598でも「オヌヌメ」と書いただけ。なぜ絡まれるのか訳わからん
0617デフォルトの名無しさん
2010/11/23(火) 13:28:47class〜end 内でプライベート形式でメソッドを書ける理由の説明にすらなってねえ
「クラスメソッドはクラス定義中ではselfなしで、メソッド定義中ではクラス名をつけて書きます」
「インスタンスメソッドはクラス定義中では使えず、メソッド定義中はselfをつけて書くこともできます」
みたいな恐ろしい形式的説明を初心者にしなければならない羽目に陥る危険性が大だ
0618デフォルトの名無しさん
2010/11/23(火) 13:40:480619デフォルトの名無しさん
2010/11/23(火) 13:51:23サランラップは常温や低温でもラップとしてぺったりくっつくことを重視し過ぎた
0620デフォルトの名無しさん
2010/11/23(火) 14:04:00まだまだクレラップに負けていないと思う
0621598
2010/11/23(火) 14:17:42何を指して「いまさら」なのか意味不明だが....。
繰り返しになるけど、>>598で書いたのは
「selfは文脈によって意味が変わるから読みづらいコードになる。だから、(本当に必要な場合を除いて)オヌヌメしない。」
という、ごく単純なお話。
逆に、
>「クラスメソッドはクラス定義中ではselfなしで、メソッド定義中ではクラス名をつけて書きます」
>「インスタンスメソッドはクラス定義中では使えず、メソッド定義中はselfをつけて書くこともできます」
みたいな難解な理屈を初心者相手に振り回して悦に入るほうが、かえって不親切だと思うけど。
>>618
その通りで、基本はselfを避ける。で、本当に必要になった時に(メタプログラミングに挑戦しようとする時に)、
慎重にselfを使うってのがオヌヌメだと思う。
0622デフォルトの名無しさん
2010/11/23(火) 20:54:200623デフォルトの名無しさん
2010/11/23(火) 23:48:58メタプログラミングが気になりだしてからはselfの取り扱いを慎重にならざるを得なかったな
主にRailsでだが
0624デフォルトの名無しさん
2010/11/23(火) 23:58:410625デフォルトの名無しさん
2010/11/24(水) 08:32:470626デフォルトの名無しさん
2010/11/24(水) 13:19:26ttp://bugs.python.org/issue2636
0627デフォルトの名無しさん
2010/11/24(水) 13:46:38みんな両方チェックしてるんだから
0628デフォルトの名無しさん
2010/11/24(水) 16:05:400629デフォルトの名無しさん
2010/11/24(水) 16:24:240630デフォルトの名無しさん
2010/11/24(水) 18:48:100631デフォルトの名無しさん
2010/11/24(水) 19:22:49>>598
うーん、クラス名を変更したときのこと考えてもselfを使う方が素直な書き方のような。
598オヌヌメ方針だと、ついタイプミスして class MyClass1 ... def MyClass2.defile_m とかしてしまいそう:-)
0632デフォルトの名無しさん
2010/11/24(水) 19:39:20Rubyスレ全般で名物的な人なので相手にしなくていいです
0633デフォルトの名無しさん
2010/11/24(水) 19:47:10参照先のインスタンスが変わるだけじゃないの?
0634598
2010/11/25(木) 01:24:20>うーん、クラス名を変更したときのこと考えても
自分も最初はそう考えていたけど、最近のエディタの文字列置換機能や自動補完機能は賢いから
クラス名の一括変更はそれほど苦にはならなかったりすることに気付いた。
>598オヌヌメ方針だと、ついタイプミスして class MyClass1 ... def MyClass2.defile_m とかしてしまいそう:-)
ついタイプミスをしてしまっても、Rubyインタプリタがその場でミスした箇所とミスの内容とを
エラーメッセージという表現で教えてくれる。
なんとなく動いてしまって意図しない最終的な出力結果の矛盾に悩みこむよりも、ずっと楽ができると思う。
>>632
だから「押しつける」気なんて全然無いし....。漏れの個人的なオヌヌメをカキコしてるだけ。
そのオヌヌメが自分に合わないと感じたならスルーすればいい。誰でも自分の考えを発言するのは自由だろ?
0635598
2010/11/25(木) 01:28:48>参照先のインスタンスが変わるだけじゃないの?
たとえば>>594の場合だと、(インスタンスではなく)クラスと表現したほうが適切だろうね。
難しく言えば「クラスオブジェクトであり、その言葉の意味は.....」とかなるけど、初心者スレ向きじゃない。
>文脈によって意味が変わるってどういう場合にどんな意味に変わるんだ?
・定義しようとしているメソッドはクラスメソッドなのかインスタンスメソッドなのか?
・selfの位置はメソッド定義の内側か外側か?
これらの組合せによって、参照先のオブジェクトがインスタンスになったりクラスになったりする、という意味。
さらに(>>594は最も単純なケースだけど)、これに
・モジュールやクラスの定義がネストする(= 入れ子になった)ケース
・includeによるMix-inや、加えてextendによる........
みたいな条件の組合せが絡みだすと、(少なくとも漏れには)もうワカワカメな状態になる。
そんな事で悩むくらいなら、(selfで省略したりせずに)クラス名を明示的に書いたほうが最終的には楽になるカモ、という意味。
難しいことを言う(押し付ける)気はなくて、楽をしよう!!、ズボラなプログラミングで行こうぜ!!っていうお話です。
0636デフォルトの名無しさん
2010/11/25(木) 01:56:07他のクラスにそのままコピペできるじゃん
って話とは違うのか。
0637デフォルトの名無しさん
2010/11/25(木) 06:26:590638デフォルトの名無しさん
2010/11/25(木) 07:42:340639デフォルトの名無しさん
2010/11/25(木) 07:58:450640デフォルトの名無しさん
2010/11/25(木) 11:57:10def MyClass1.func1
...
end
def MyClass1.func2
...
end
と書けばよいのでは?わざわざ class ... end の中に入れる必要はないかと。
0641デフォルトの名無しさん
2010/11/25(木) 13:13:510642デフォルトの名無しさん
2010/11/25(木) 14:06:50したらHTTPエラー302だったんだけどなんで?
0643デフォルトの名無しさん
2010/11/25(木) 14:39:3030分以上メモリ消費とディスクアクセスがハンパないんだが
Rubyライブラリインストールするだけでgem何やってのよ
0644デフォルトの名無しさん
2010/11/25(木) 14:45:46$ gem --version
1.3.7
Linux とかでディストリビューション固有のパッケージを使うとバージョン 0 台がインストールされたりするが
バグしか入ってないので手動で gem コマンドをバージョンアップしろ
0645デフォルトの名無しさん
2010/11/25(木) 14:50:39gem コマンドはしばらく返ってこないよ
空きメモリが2桁MBとかだとしばらくだんまりだ
0646デフォルトの名無しさん
2010/11/25(木) 16:03:00サンクス
前に同じようなことがあって/usr/localにgem1.3.5を入れたの忘れてた
0647デフォルトの名無しさん
2010/11/25(木) 20:40:58Array#mapでチェーン中にオブジェクトの中身を弄りたいときは、
objs.map{|x| x.hoge = "new hoge"; x }
のようにするしかないでしょうか?
0648647
2010/11/25(木) 20:42:24objs.each{|x| x.hoge = "new hoge"}.map{ (以下略
ありがとうございました!!
0649デフォルトの名無しさん
2010/11/25(木) 22:14:53TypeError: can't modify frozen string
OMG!
> URI.parse("ttp://hibari.2ch.net/test/read.cgi/tech/1287623173/").tap{|uri| uri.scheme = uri.scheme.sub(/^ttp$/, "http")}
=> #<URI::Generic:0x5852028 URL:http://hibari.2ch.net/test/read.cgi/tech/1287623173/>
Good!!
Why??????
0650デフォルトの名無しさん
2010/11/25(木) 22:29:28ということで、String が freeze されている
コンテナとしての URI オブジェクトが freeze されているわけではない
URI オブジェクトの scheme= メソッドが操作する格納オブジェクト(配列など)が freeze されているわけではない
irb> a = [1, 2, 3]
irb> a.freeze
irb> a[0] = 'one'
TypeError: can't modify frozen array
irb> str = 'hoge'
irb> str.freeze
irb> str.sub!(/o/){'a'}
RuntimeError: string frozen
0651デフォルトの名無しさん
2010/11/25(木) 22:33:05不整合が生じるからfreezeしてあるのかな、とも思ったが、代入はできてしまうんだな。
もっとイミュータブルにしてもよい気がする。
0652デフォルトの名無しさん
2010/11/25(木) 22:42:55ありがと
気になったのでURI::Genericの実装見たら
たしかにfreezeされてた
scheme=メソッドでcheck_schemeよんで正しいかチェックしてるせいだと思う。
こういう属性に代入するときのチェックにライブラリの仕様が依存している場合、
破壊的メソッドを使えないようにfreezeするのはわかるんだけどなにかしっくり来ない。
0653デフォルトの名無しさん
2010/11/25(木) 22:44:56昔のRubyのライブラリっぽい動作だなあと思った
0654デフォルトの名無しさん
2010/11/26(金) 03:20:57[10, 20, 30, 40].index {|x| x % 3 == 0 } #=> 2
みたいなメソッド。
0655デフォルトの名無しさん
2010/11/26(金) 03:30:420656デフォルトの名無しさん
2010/11/26(金) 17:39:43どうやって実現するのがおすすめでしょうか?
0657デフォルトの名無しさん
2010/11/26(金) 18:05:470658デフォルトの名無しさん
2010/11/26(金) 19:11:230659デフォルトの名無しさん
2010/11/26(金) 19:24:450660デフォルトの名無しさん
2010/11/26(金) 22:26:08ありがとうございました。でも1.8.7以降なのかな。1.8.6にはないや。残念。
0661デフォルトの名無しさん
2010/11/27(土) 01:52:30いい事言うなあお前。
みんなが頭じゃわかっててもなかなか実践できない事を口に出して言えるなんざ大変な自信だよ。
それで出来てなかったらあのインチキ占いのバアさんと一緒だぞお前。
そんなに当たり前の事を言いたかったら尼さんにでもなってから説教したらどうだ。
0662デフォルトの名無しさん
2010/11/27(土) 02:53:080663デフォルトの名無しさん
2010/11/27(土) 03:04:59何気ないあいさつするだけも違うんだよな
お前らもまずこのスレ開いたときと閉じる前にあいさつしていくこと
0664デフォルトの名無しさん
2010/11/27(土) 03:11:46ひろゆきがそういうの面倒だから2chつくったって言ってたろうが
0665デフォルトの名無しさん
2010/11/27(土) 03:24:300666デフォルトの名無しさん
2010/11/27(土) 12:02:520667デフォルトの名無しさん
2010/11/27(土) 15:07:100668デフォルトの名無しさん
2010/11/27(土) 16:14:520669デフォルトの名無しさん
2010/11/27(土) 16:19:17その点に関してmatzさん(というかプログラミング言語開発者として)はどう思ってるのか気になるわぁ。
プログラミング言語は手段であって適材適所に使われるべきであって、不適材不適所に使うのはハッカーだけが許される行為だと、そう思うんです。
じゃないとまわりを不幸にしてしまう。
0670デフォルトの名無しさん
2010/11/27(土) 16:22:59結局東京にしか仕事ないって感じで東京でruby使いを求人しては派遣で顧客企業に送り込んでピンハネしてる感じが。
0671デフォルトの名無しさん
2010/11/27(土) 17:23:13http://hibari.2ch.net/test/read.cgi/tech/1281473294/
0672デフォルトの名無しさん
2010/11/27(土) 18:54:38マニュアルとか充実していてチョーうれしい。
作者さん、ありがとう。
0673デフォルトの名無しさん
2010/11/28(日) 10:23:46...me(0000,データ名){}"\n:
^
from (irb):69
from (null):0
$
氏ね
っていうか文法エラーの位置にマルチバイト文字書いただけでirb自体が終了するのなんとかなんないの
0674デフォルトの名無しさん
2010/11/28(日) 11:29:400675デフォルトの名無しさん
2010/11/28(日) 11:55:15再現できるコードきぼん
前にreadlineが正しく入っていないときに日本語入れたら落ちまくっていたが、そういうことではないだろうし
0676デフォルトの名無しさん
2010/11/28(日) 13:18:22プロンプト実行系はたいていそうだが
0677デフォルトの名無しさん
2010/11/28(日) 14:53:160678デフォルトの名無しさん
2010/11/28(日) 15:55:26間違った動作でしれっと動き続けられるより
キッチリ落ちてくれる方が100倍マシ。
0679デフォルトの七氏
2010/11/28(日) 18:44:021、「食べログ」東京の東京都市区町村一覧のページ(http://r.tabelog.com/tokyo/citylst/)にアクセス。
2、区名を指定してそのリンクをクリック
3、表示された20件のページにアクセスし、「店名」、「ジャンル」、「TEL」、「住所」、「評価」、「最寄駅名」、「営業時間」、「定休日」、「平均利用金額」、「用途」の情報を取得する。
4、次のページがあれば次のページに行き、3を行う。
5、csvファイルに出力。
6、ハッキングと間違われないようにランダムアクセスにする。(食べログ運営者にこのようにするようにと指定を受けた。)
*「食べログ」運営者から公開情報の利用許可を頂いております。
3、の個々のページにおいて情報を取得するところまではできました(コード→http://codepad.org/aW2wDA1d)が、
・それをそれぞれのページで情報取得の操作を行うようにする。
・次のページがあれば次のページに行き行う
のやり方がわかりません。
教えて頂けないでしょうか!?
よろしくお願いします。
環境はOS: Windows vista、バージョン:Ruby 1.8.6
0680デフォルトの名無しさん
2010/11/28(日) 19:10:42まあ普通は
「このページに○○という文字列(またはリンク)があったら次ページが存在するということなので、
リンクを探してアクセス」
というつくりにすると思う
複数ページは、URLに規則性があるなら手元で作って直接アクセスするかなあ
IEみたいな普通のWebブラウザがサイトに対してどういうHTTPリクエストをしてるか調べてみるといいぞ
0681デフォルトの名無しさん
2010/11/28(日) 19:24:340682デフォルトの名無しさん
2010/11/28(日) 19:28:00・それをそれぞれのページで情報取得の操作を行うようにする。
・次のページがあれば次のページに行き行う
次のページへ行くのはどうすればいいか?という意味ですか?
「食べログ」の次のページがどのように実装されているかによりますが、通常のサイトなら
次のページへのリンクを見つけて、それを新たにgetすればいいんじゃないでしょうか。
リンクの見つけ方が分からないとか、getを繰り返す処理の書き方が分からないとか、
もう少し具体的に質問したほうがいいと思いますよ。
0683デフォルトの名無しさん
2010/11/28(日) 19:43:26今ってこんな課題出るのか。
大学のサイトならともかく、一般のサイトにアクセスさせるって…
下手なスクリプト組んで迷惑かけるようなことにならなきゃいいけど。
0684デフォルトの七氏
2010/11/28(日) 19:54:58早いレスありがとうございます。そして、舌足らずですみません。
htmlはFirefoxのFirebugで見ています。
具体的な内容を述べさせていただきます。
方法としてはこのページ(http://r.tabelog.com/tokyo/C13101/)の<span class=rank rank1>の<a>の中のhrefの後に表記されているアドレス取得して、
そのページに飛んで今で着ている処理を行えばいいのであろうと思うのですが、
・hrefの後のアドレス抜き出しの処理
・抜き出したページに行き、取得のプログラムを回す
・これをrank1〜20について繰り返す。
という処理のruby上での記述の仕方がわかりません。
初学者ゆえ、当たり前のことをお聞きしているかもしれませんがひとつよろしくお願いします。
0685デフォルトの名無しさん
2010/11/28(日) 19:58:38そんなことを食べログが許可するとは思えないんだが
まあとりあえずRubyの基本ライブラリ群に関する知識がないのはわかった
ひょっとして全部コピペで作ってないか
0686デフォルトの名無しさん
2010/11/28(日) 20:17:20というかゼミの課題丸投げとかありえないだろう
0687デフォルトの名無しさん
2010/11/28(日) 20:23:25どうせ初級の課題なんだろうし、習ったもので習ったように作らないとだめだろ
0688デフォルトの名無しさん
2010/11/28(日) 20:44:480689デフォルトの七氏
2010/11/28(日) 20:45:48運営者に問い合わせフォームから問い合わせたところ、
「口コミ」や「画像」は著作権が発生するために利用できないとのことでしたが、
上記の項目については許可を頂いています。
コピペというかgoogleで検索して使用できそうなものをつぎはぎで使用しています。
>686さん
すみません。下記の通り、語弊がありました。
課題というより、興味のあることを発表したら、
次のゼミまでにそこら辺までやってきてねっという感じで。。。
おっしゃる通りです。私の力不足が明らかです。
申し訳ありません。少しでもご教示いただければ幸いです。
>687さん
すみません。すこし最初の説明の段階で語弊がありました。
私がゼミの授業と書いているのは、一般で言うゼミ会議みたいなものです。
私の大学ではそれが単位として取り扱われているので授業と書いてしましました。
すみません。
習ったというより、ゼミで上記のようなプログラムをRubyで作ってみて。。
っといった感じで丸投げされまして。
Rubyをやったことがなかったので必死でネットなどを見ながら勉強してみたのですが、
旨く行かず、皆様を頼った次第です。
よければコードを見せて頂けないでしょうか!?
0690デフォルトの名無しさん
2010/11/28(日) 20:49:470691デフォルトの七氏
2010/11/28(日) 20:50:245〜7秒ごとくらいでプロセスを停止して行ってくれとのことでした。
それをもとに色々、検索してみたところ、
「ランダムアクセス」という言葉になってしまいました。
言葉足らずでした。申し訳ありません。
0692デフォルトの名無しさん
2010/11/28(日) 21:39:18その先頭から順番にアクセスするだけでなく
いきなり任意の場所からアクセス可能なことを言う
0693デフォルトの名無しさん
2010/11/28(日) 22:27:200694デフォルトの名無しさん
2010/11/28(日) 22:29:23http://hibari.2ch.net/test/read.cgi/php/1290432735/
http://oshiete.goo.ne.jp/qa/6349817.html
このへんが出るだろ
0695デフォルトの名無しさん
2010/11/28(日) 22:33:370696デフォルトの名無しさん
2010/11/28(日) 22:35:040697デフォルトの名無しさん
2010/11/28(日) 22:44:45変な言い方だが、ここまで自力で書けるならここで詰まるとかありえんのだ
もうちょい先で詰まるはず、というか詰まって欲しい
Rubyそのものの勉強からしていったほうが結局は早い
もしRubyそのものに興味がないのならRuby使わないほうがたぶん手っ取り早い
0698デフォルトの名無しさん
2010/11/28(日) 23:57:09私もそう思う。
晒しているコードをコピペにせよ理解しながら作ったのなら
その知識で十分出来ると思う。
0699デフォルトの名無しさん
2010/11/29(月) 01:04:58スクレイピングにたいして双方共にモラルが欠けてる
スクレイピングで不起訴になったとは言え逮捕されちゃった例もあるんだぞ
ruby初心者に課題を出すならローカルで完結するのにすればいいのに
0700デフォルトの名無しさん
2010/11/29(月) 03:21:55ちょww 高校生なのか大学生なのかはっきりしろw
http://hibari.2ch.net/test/read.cgi/php/1290432735/
1 名前:hirofis[[email protected]] 投稿日:2010/11/22(月) 22:32:15 ID:???
RubyのmechanizeやHpricotを使って「食べログ 東京」内の「東京都の路線・駅から探す」へいき、23区内のすべての飲食店の「店名」「ジャンル」「住所」「電話番号」「星の点数」「営業時間」「平均予算」「席数」「用途
」を取ってきてcsvファイルとして保存するっていうプログラムを創っているのですが、うまくいきません。。
高校生ですが、将来programerに成りたくRubyの勉強を始め、精進しております。
何としてもこの問題を解きたいです。
2chの皆様、ご指導ご鞭撻のほどよろしくお願いします。
rubyでのweb スクレイピングプログラム - Ruby - 教えて!goo
http://oshiete.goo.ne.jp/qa/6349817.html
大学のゼミの授業で以下のプログラムを作らなければならなくなりました。
1、「食べログ」東京の東京都市区町村一覧のページ(http://r.tabelog.com/tokyo/citylst/)にアクセス。
2、区名を指定してそのリンクをクリック
3、表示された20件のページそれぞれにアクセスし、個々のページの「店名」、「ジャンル」、「TEL」、「住所」、「評価」、「最寄駅名」、「営業時間」、「定休日」、「平均利用金額」、「用途」の情報を取得する。
4、次のページがあれば次のページに行き、3を行う。
5、csvファイルに出力。
6、ハッキングと間違われないようにランダムアクセスにする。(食べログ運営者にこのようにするようにと指定を受けた。)
*「食べログ」運営者から公開情報の利用許可を頂いております。
個々のページにおいて情報を取得するところまではできました(コード→http://codepad.org/aW2wDA1d)が、
・それをそれぞれのページで情報取得の操作を行うようにする。
・次のページがあれば次のページに行き行う
のやり方がわかりません。
教えて頂けないでしょうか!?
よろしくお願いします。
環境はOS: Windows vista、バージョン:Ruby 1.8.6
0701デフォルトの名無しさん
2010/11/29(月) 03:25:59http://hibari.2ch.net/test/read.cgi/tech/1200175247/901-904
マルチポストは感心しないという人によってスレが荒れるから、マルチポストは感心しないな
0702デフォルトの名無しさん
2010/11/29(月) 07:55:200703デフォルトの名無しさん
2010/11/29(月) 07:56:440704656
2010/11/29(月) 09:42:35自分が質問したあと、ちょっともめ事?みたいになってて、
書きこむタイミングを見失ってました。放置したみたいになってすみません。
真剣に困っているのでどなたかアドバイスをいただけたらありがたいです。
0705デフォルトの名無しさん
2010/11/29(月) 09:51:04>>657 がアドバイスくれてるじゃないか
(標準添付の REXMLでやってもいいけど)
0706デフォルトの名無しさん
2010/11/29(月) 09:58:04そのあとなんか揉めてあるみたいだったので、Nokogiri について調べつつも、
もしかすると間違ったアドバイスなのかも…と半信半疑の状態で不安に思ってました。
ありがとうございます。がんばって調べてみます。
0707デフォルトの名無しさん
2010/11/29(月) 09:59:48> 2、区名を指定してそのリンクをクリック
> 3、表示された20件のページにアクセスし、「店名」、「ジャンル」、「TEL」、「住所」、「評価」、「最寄駅名」、「営業時間」、「定休日」、「平均利用金額」、「用途」の情報を取得する。
> 4、次のページがあれば次のページに行き、3を行う。
> 5、csvファイルに出力。
> 6、ハッキングと間違われないようにランダムアクセスにする。(食べログ運営者にこのようにするようにと指定を受けた。)
> *「食べログ」運営者から公開情報の利用許可を頂いております。
なんというクソ仕様。
俺が今やってる仕事より要件がハッキリしているとかw
0708デフォルトの名無しさん
2010/11/29(月) 14:52:08もうちょっと寛大にみてやろう。
ここは初心者スレッドということだし、嫌味をゆうのは違う気がするな。
スレッドの最初にある通り、根気よく育てるつもりでいこう。
0709デフォルトの名無しさん
2010/11/29(月) 15:02:57あちこち怪しげなことをしなければ勉強にならないWEB技術は勉強しづらいもんだな
0710デフォルトの名無しさん
2010/11/29(月) 15:07:58小型トラックの運転したことなさそうな人から
「一般家庭へ小包届ける宅配便配送運転手の心得教えてください」とか言われても
「まず住宅街で普通に手足のように運転できるようになってから聞け」としか言えん
0711デフォルトの名無しさん
2010/11/29(月) 15:37:04外部サーバーからXMLを受け取ってページの一部分だけを更新…
というのを実現するにはどうしたらよいでしょうか?
0712デフォルトの名無しさん
2010/11/29(月) 15:40:28っていうかAJAXの本なんか買え
0713デフォルトの名無しさん
2010/11/29(月) 15:41:52手元にサーバ立てて勉強するのが本来デフォだったはずなんだけどね
HTTPとHTMLと若干のTCP/IP、サーバサイド技術についてを広く浅く学んだ上でやるものだったはずなんだが
まあ見かけ「だけ」簡単にしすぎるのも問題なのよね
その裏には重い技術やウンコみたいな泥テクニックやうんざりするコストが山積してるということすら隠してしまう
あなたがニコニコ動画から100MBのなんでもない動画を手元にダウンロードするまでに
誰かがどっかに払ってる金額は合計で30円くらいなんじゃないかなあ
0714デフォルトの名無しさん
2010/11/29(月) 15:46:37ページ内のJavaScriptに
「JavaScriptで表示させてたこの部分のHTMLをサーバと通信した結果を元にして書き換えて表示させる」
ということをさせる
つまり>>712
ブラウザから何か小さい通信を受け取って何か小さいデータを返す、という
サーバサイド部分にはRubyが入る余地がないわけではないが、
結局全体のうち95%はJavaScriptでがりんがりんコード書かなければならないことだろう
0715デフォルトの名無しさん
2010/11/29(月) 15:48:53動画ダウンロードするだけで内需拡大に貢献できるんだね素敵!
バックボーン回線代としては海外に払ってるほうが大きいのかしら
0717デフォルトの名無しさん
2010/11/29(月) 16:32:55言葉遣いは丁寧だが「何か揉めているようなので」とか他人事みたいな態度が意味不明だし、
設定も高校生になってたり大学生になってたり嘘ばかり
つまりどっかの馬鹿が学生のふりして教えてもらおうっていう糞みたいな魂胆
だいたい食べログがスクレイピングしてweb上にデータを表示することを会社として正式に許可するわけがない
ほんとカスだな質問者は
0718デフォルトの名無しさん
2010/11/29(月) 16:36:14しかも学生の宿題を装って人の善意を利用しようとして簡単に嘘が露呈する馬鹿
クズ中のクズだし日本に存在する価値が全くないカス
ここまで頭の悪い人間が日本に存在することに驚きを禁じ得ない
King of kasu
Best of kasu
0719デフォルトの名無しさん
2010/11/29(月) 16:41:40これも焦って削除してるw
馬鹿ってだけなら生暖かい目で見守られるかもしれんが卑怯で小賢しくて嘘ばっかついてるとそのうちリアルでも誰からも相手されなくなるぞ
0720デフォルトの名無しさん
2010/11/29(月) 17:10:160721デフォルトの名無しさん
2010/11/29(月) 17:31:49そこでJSRubyですよ
0722デフォルトの名無しさん
2010/11/29(月) 18:38:52初心者のスレだしさ。
指摘まではいいけど嫌味ゆうのはやっぱ違うって。。
他の初心者の人たちも使いにくくなるよ。
0723デフォルトの名無しさん
2010/11/29(月) 18:45:42まじめな質問であったとしても(今回の質問がどうかはわからないけど)、
こんな風に周りが深読みするから。
ちょっと質問者に同情するな。俺は。
0724デフォルトの名無しさん
2010/11/29(月) 18:57:19そこに書いてある内容が高校生だったり大学生だったりなんだぞ。
普通に信用できないなと思うに決まってるだろ。本人じゃないだろうな。
0725デフォルトの名無しさん
2010/11/29(月) 19:13:00csvに落とすなんて、泥棒と同じじゃないか。
ブラウザで見るように作られているサイトは
ブラウザからアクセスしろ。それがマナーだろ。
0726デフォルトの名無しさん
2010/11/29(月) 19:14:20Googleは泥棒かよ。馬鹿は黙ってろ。
0727デフォルトの名無しさん
2010/11/29(月) 19:21:31プログラムは着々とできてるようだな。最後はRailsでスキャフォールド作って表示か?
0728デフォルトの名無しさん
2010/11/29(月) 19:43:24そういう汚れ仕事4ヶ月ぐらいやらされてたことあるけど虚しかったわ。
Googleにデータ抜かれるのは抜かれる側に大きなメリットがあるが、
俺のやってたのはデメリットしかなかった。ただのDOS攻撃を兼ねた泥棒。
MechanizeやらHpricotに異常に詳しくなったがもう二度とやりたくね
0729デフォルトの名無しさん
2010/11/29(月) 20:15:06まーね
今は「わるいひと」が使っている割合のほうがトラフィック的に多いと思う
だから解説やら説明やらは本来ないほうがいいんだが…
0730デフォルトの名無しさん
2010/11/29(月) 20:25:09mechanizeも早晩弾かれることでしょう
0731デフォルトの名無しさん
2010/11/29(月) 20:35:43やっぱりそうだよね
解説や説明やめよっか? すこしはネットが礼儀正しくなるかな?
0732デフォルトの名無しさん
2010/11/29(月) 20:54:54ユーザーが「ふつう」のWebブラウザ以外でアクセスすることを喜ぶ管理者はまずいないだろう
0733デフォルトの名無しさん
2010/11/29(月) 21:10:27マナーも含めてしっかり解説啓蒙するのはいいんじゃないの?
悪意ないのに無知ゆえに中途半端に迷惑な使い方する奴は減らせるなら減らした方が。
どうせ最初から悪意を持って使う奴は解説しようがしまいが関係なく悪用するんだろうし。
0734デフォルトの名無しさん
2010/11/30(火) 01:12:58おい、こいつの目欄に気付いてるか?あーアンカー付けるのすら汚らわしいわ
0735デフォルトの名無しさん
2010/11/30(火) 01:28:06今まで縦読みを何度スルーされたか
0736デフォルトの名無しさん
2010/11/30(火) 02:22:38心からシネと思った
0737デフォルトの名無しさん
2010/11/30(火) 02:34:100738デフォルトの名無しさん
2010/11/30(火) 09:48:35煽っても騙ってもなにしてもいいと思ってる奴が常駐してるので、そこは判断材料にならん
0739デフォルトの名無しさん
2010/11/30(火) 11:12:29スクレイピングの人と「何か揉めてるようなので」の人は別人。ソースは私です。
自分の質問(>>656)に「Nokogiri」と返ってきたあと、
DTD がどうとか XML Schema がどうとか強めの口調でツッコミが入ってるっぽかったけど、
自分が低レベルすぎて内容がわからなかったので、実際に揉めているのかどうかすら
判別が出来なかったため「ようなので」と曖昧な表現をしました。
0740739
2010/11/30(火) 11:14:080741デフォルトの名無しさん
2010/11/30(火) 11:55:28本来の(オーバーライドする前の)処理を行うにはどうすれば良いでしょうか?
サブクラスの super みたいなことをオーバーライドで行いたいです。
class Array
def pop
0742741
2010/11/30(火) 11:58:01class Array
def pop
hogehoge # 何かする
# ここでpop
end
end
みたいな感じです。
0743デフォルトの名無しさん
2010/11/30(火) 12:01:16alias pop_orig pop
def pop(*args)
puts "popしまーす"
pop_orig(*args)
end
end
[1,2,3].pop
alias でオリジナルを保存して、書き換えた新メソッド内で呼ぶのが一般的
これ以外の記法をされても「いわゆるメソッドのsuper」だと思えず頭が追いつかん
0745デフォルトの名無しさん
2010/11/30(火) 13:03:39アホか
ぐぐって1秒以内に答えが返ってくるために、裏では個人では到底整えられないような設備があったり
人類の英知を積み上げたようなアルゴリズムや優秀な技術者が実装したコードが
もし仮にあろうとも、そんなのいちいち意識してられるかよ
適当につくってそれで動くんならOKだろうが
わざわざ難しく考える奴が多すぎ
0746デフォルトの名無しさん
2010/11/30(火) 13:04:27アンカー間違えた
>>713宛ね
0747デフォルトの名無しさん
2010/11/30(火) 13:05:37意味が解からん。
0748デフォルトの名無しさん
2010/11/30(火) 13:06:180749745
2010/11/30(火) 13:13:080750デフォルトの名無しさん
2010/11/30(火) 18:04:000751デフォルトの名無しさん
2010/11/30(火) 19:33:590752デフォルトの名無しさん
2010/11/30(火) 21:10:180753デフォルトの名無しさん
2010/11/30(火) 22:09:43これ実行するとputsが16回くらい実行されるけどなんで?
0754デフォルトの名無しさん
2010/11/30(火) 22:18:27そりゃ内部のどっかでArray#popが16回くらい実行されてるからだろ
0755デフォルトの名無しさん
2010/11/30(火) 22:23:56popしまーす
popしまーす
popしまーす
popしまーす
popしまーす
=> 3
ということで、Array#size するだけで 6回も呼ばれてるな
宇宙の神秘だね
0756デフォルトの名無しさん
2010/12/01(水) 01:53:280757デフォルトの名無しさん
2010/12/01(水) 16:30:36active_supportのalias_method_chainみたいなパターンだな
https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/module/aliasing.rb
こんなgemもあるが
http://rubygems.org/gems/chainable
こういうメソッド拡張するのをなんていうんだメタプログラミングじゃなくてもっと具体的に、
えっっぇえっとメソッドなんとか
0758デフォルトの名無しさん
2010/12/01(水) 16:37:21目的は読みやすくしたいというくらいなので自分だけのコードなら気にしなければいいし、いつも迷ってあげく拡張しない事が多いんだ
例えば、
require 'yaml' したら、Object#to_yamlが使えるようになるよね。
でもつい、自分で似たような処理をするときに、
YAML.convert_to_yaml(obj)
のようなモジュールやライブラリの作りをしてしまう。
俺の感覚だと標準ライブラリやactive_supportや他人のライブラリでそういうことをやっているのは対して気にならないんだが、
自分が作るときにイマイチ基準がわからなくて躊躇する。
こういう拡張を部分的に適用する方法、もしくはある文脈でだけ module を includeする(もしくはextend)するような方法があれば
思い切って使えるんだけど、いい方法ない?
0759デフォルトの名無しさん
2010/12/01(水) 17:52:25つ ttp://www.nicovideo.jp/watch/sm11901600
0760デフォルトの名無しさん
2010/12/01(水) 18:40:54つ ttp://www.nicovideo.jp/watch/sm11914317
0761デフォルトの名無しさん
2010/12/01(水) 20:13:11こんな風にこのメソッドを使うときは気をつけるとかありますか?
大量のデータを解析しようと思ったので、なるべくオーダーが発散しないように心がけたいのですが。
条件式の順序とか、オブジェクトの初期化などは考えていますが。
再利用する回数は少ないので、高速化をするために、コードかく時間が増えるのも問題ですが。
0762デフォルトの名無しさん
2010/12/01(水) 20:23:57気になるなら最初は全部 sort で実装すればいい
0763761
2010/12/01(水) 21:53:58大量にソートする時にメモリは確かにきになりますね。
まだ、実データをソートさせていないので、実際に解析するまではsortでいってみます。
あと、sort,sort_byとは別にここ、ボトルネックになりそうなものはありますか?
正規表現で|は使わなくてすむならそうするなど…。tipsみたいなものでよいのですが…
0764デフォルトの名無しさん
2010/12/01(水) 21:58:08大量データの一括処理にRubyは向かないよ。
パフォーマンスのよくない言語だから。
なんでRubyを使おうと思ったの?
0765デフォルトの名無しさん
2010/12/02(木) 00:49:40一にも二にもプロファイル
0766デフォルトの名無しさん
2010/12/02(木) 07:21:090767デフォルトの名無しさん
2010/12/02(木) 12:06:02処理時間1分なら問題ないという人も、遅すぎるという人も、そんなの大量処理じゃないという人もいる
0768デフォルトの名無しさん
2010/12/02(木) 15:00:10実行してから2週間たったが初期化が終わらない
Ctrl+Cすべきかどうか悩む
0769デフォルトの名無しさん
2010/12/02(木) 18:38:331時間もある・・・お手数ですがどのあたりを見ればよいか教えてもらえないでしょうか?
0770デフォルトの名無しさん
2010/12/02(木) 19:05:180771デフォルトの名無しさん
2010/12/02(木) 19:08:20オープンクラスっていうみたいだね。
部分的に拡張を適用する話は動画では少ないけど
>>758に関連するところはclassboxに関してかな
0772デフォルトの名無しさん
2010/12/02(木) 19:15:31ttp://www.slideshare.net/yukihiro_matz/rubyconf-2010-keynote-by-matz
48-53枚目
0773デフォルトの名無しさん
2010/12/02(木) 22:03:01global monkey patching の問題点は ruby 2.0 で導入されるかもしれない classbox (仮称)が
http://d.hatena.ne.jp/sumim/20100903/p1
こんなかんじで解決してくれるであろう、というかんじなんでしょうか。
つまり現時点では local monkey patching (?)みたいなことはできない?
0774デフォルトの名無しさん
2010/12/02(木) 22:08:11うん、できない。
問題点であるという認識は存在していて、まさに現在進行形で改修案が俎上に上っている、というレベルだな。
それと、なんでか分からんけど、ruby-devよりもruby-coreのほうが熱心に議論されてる感じ。
0775デフォルトの名無しさん
2010/12/02(木) 22:59:290776デフォルトの名無しさん
2010/12/02(木) 23:23:10面白かった
動画内でMatzが置いてきぼりにならないか危惧していたけど、
Rubyのスレでもたまにでる話題や不満点が解消する方向というか内容が2.0で盛り込まれるようで期待
0777デフォルトの名無しさん
2010/12/03(金) 00:24:36文字起こしたのあった
これだよね
RubyConf2010 -Matz基調講演編- - Everyleaf Lab
http://blog.everyleaf.com/rubyconf2010-matz
0778デフォルトの名無しさん
2010/12/03(金) 00:42:560779デフォルトの名無しさん
2010/12/03(金) 00:51:13これだな
refineだな
Ruby 1.9 - Feature #4085: Refinements and nested methods - Ruby Issue Tracking System
http://redmine.ruby-lang.org/issues/show/4085
0780デフォルトの名無しさん
2010/12/03(金) 02:20:42Javaくらいにはなれるの?
0781デフォルトの名無しさん
2010/12/03(金) 05:51:29Java馬鹿にすんな
0782デフォルトの名無しさん
2010/12/03(金) 07:48:45rubyのフォルダ以下にあるソースコードのクラス名やメソッド名等々の
識別子一覧を取得する方法ないですか。
0783デフォルトの名無しさん
2010/12/03(金) 09:42:510784デフォルトの名無しさん
2010/12/03(金) 15:37:330785デフォルトの名無しさん
2010/12/03(金) 15:46:470786デフォルトの名無しさん
2010/12/03(金) 15:51:57じぶんのぱそこんのなかにはいってまふ
RUBYLIB に設定するしかないと思う
こまいのは RUBYLIB を $HOME/usr/local/lib/ruby/ にして、
$HOME/usr/local/lib/ruby/my/ の下にどっさり入れてる
require 'my/hoge' とか使う
"my/" という接頭詞で普通のライブラリと区別
ある程度大きいのはgemパッケージにしてローカルにインストールしてる
履歴管理とかめんどい
0787784
2010/12/03(金) 17:03:37ありがとう
0788デフォルトの名無しさん
2010/12/03(金) 17:07:24wwww
>>780
数値計算の多い処理ならRuby1.9が速いみたい
ただ、1.8でもバージョンによって違うみたいだし、RubyGemsの有無でも違ってくる
UNIXならrvm、Windowsならpikで簡単に複数のRubyがインストールできて
1つのスクリプトを楽に複数のバージョンのRubyで走らせられるので
自分の必要な範囲での比較はしやすいから試してみたらよいと思う
0789デフォルトの名無しさん
2010/12/03(金) 17:11:53Windowsでrvmって何か問題あるんだっけ…って、そういやbashべったりだったなrvm
0790デフォルトの名無しさん
2010/12/03(金) 17:11:55>>780
> Javaくらいにはなれるの?
1.8がすでにJavaほどにパフォーマンスがあると思っているなら1.9もJava並と言えると思う
が、そうでないと思っているなら>>780にとってはJavaほどのパフォーマンスはないと思えると思う
そのパフォーマンスは人によっては気にならないものであったり、
その他に上回る利点があるからRubyを使うが(実行速度の)パフォーマンスが第一優先ならJavaでいいんじゃないのか
延々と言われていることだがw
0791デフォルトの名無しさん
2010/12/03(金) 17:16:42Cygwinならいけるかも
pikはcmd.exeとmingwのbashが考慮されてる
それとpikはWindowsらしくバイナリでスコッと入るw
前に試したときはcygwinが考慮されていなかったので使いにくかったw
mingwで動く方法だとそのままではCygwinでは動かん
どっちにせよ、mswin32やmingw32のRubyだとCygwin環境からは使いにくいものだけど
0792デフォルトの名無しさん
2010/12/03(金) 17:21:00>>791ミスった・・・
vertiginous's pik at master - GitHub
https://github.com/vertiginous/pik
> Pik is a tool to manage multiple versions of ruby on Windows.
> It can be used from the Windows command line (cmd.exe),
> Windows PowerShell, or Git Bash. I have yet to test on cygwin.
なので
x pikはcmd.exeとmingwのbashが考慮されてる
o pikはcmd.exeとmsysのbashとPowerShellが考慮されてる
x mingwで動く方法だとそのままではCygwinでは動かん
o msysで動く方法だとそのままではCygwinでは動かん
0793デフォルトの名無しさん
2010/12/03(金) 17:26:240794デフォルトの名無しさん
2010/12/03(金) 17:39:580795デフォルトの名無しさん
2010/12/03(金) 17:40:07そりゃそうだろ
絶対的な定量的パフォーマンス値というものがあるなら今すぐ論文にまとめて発表しろ
世界中でニュースになるぞ
0796デフォルトの名無しさん
2010/12/03(金) 17:49:59おまえ「相対的=計測できない」とか思ってない?
そもそもお前の言う定量的パフォーマンス値ってなに?
0797デフォルトの名無しさん
2010/12/03(金) 17:56:210798デフォルトの名無しさん
2010/12/03(金) 18:06:00使う人や測る人にとって許されればそれがパフォーマンスとして正当だって程度だし
0799デフォルトの名無しさん
2010/12/03(金) 18:52:48生産性もJavaと大して変わらないし、保守性に居たってはむしろ悪い部類ですよね。
はー、Rubyのメリットが解かりません。
「好き嫌い」でしか語れない言語ですか?
0800デフォルトの名無しさん
2010/12/03(金) 18:54:270801デフォルトの名無しさん
2010/12/03(金) 19:00:53・生産性は普通
・保守性は悪い
これは事実だと思うよ。
0802デフォルトの名無しさん
2010/12/03(金) 19:14:55誰がそんなこと言ってんの?
0803デフォルトの名無しさん
2010/12/03(金) 19:15:45class Hogeがあったときに"Hoge"が欲しいのですが
0804デフォルトの名無しさん
2010/12/03(金) 19:30:48アホみたいに作ることが可能なのと、市場として見た場合にプログラマがJavaより少ないという話か
>>803
Class オブジェクトを to_s すると文字列で得られる
irb> String.to_s
=> "Strng"
定義されてるクラス名一覧が欲しいなら、その文脈で self.class.constants して定数一覧を得、
それから Class オブジェクトであるものを抜き出す
irb> self.class.constants.delete_if{|c| !self.class.const_get(c).kind_of?(Class)}
=> ["ThreadError", "RubyLex", "Numeric", "String", "Bignum", "Proc",
"IndexError", "SecurityError", "Time", "MatchData", "Exception", "Method",...
あらかじめクラス名がわかってるならもちっと楽
irb> p self.class.constants.include?("Hoge")
false
irb> class Hoge; end
irb> p self.class.constants.include?("Hoge")
true
Hoge という定数があった場合も true になるので本当はもっとチェックが要る
0805デフォルトの名無しさん
2010/12/03(金) 19:39:48Subject: DRM Principle - Don't Repeat Microsoft
0806803
2010/12/03(金) 20:11:34puts hog.to_s
は、#<Hoge:0x7f384f1e1340>と表示されますよね?
そうではなく単なる文字列の"Hoge"が欲しいのです。
0807デフォルトの名無しさん
2010/12/03(金) 20:13:32class オブジェクトを to_s すればいい
つまり
hoge = Hoge.new
p hoge.class
0808803
2010/12/03(金) 20:15:46hoge = Hoge.new
puts hoge.class.to_s
有難うございました。
0809デフォルトの名無しさん
2010/12/03(金) 21:11:060810デフォルトの名無しさん
2010/12/04(土) 00:18:09epollとか使うにはどうすればいいんですかのぅ?
0811デフォルトの名無しさん
2010/12/04(土) 00:58:210812デフォルトの名無しさん
2010/12/04(土) 01:05:51eventmachine gemかな。環境に応じてselect(2)やepoll(4)を使ってくれる。
ioctlにシステムコール番号を直接指定しても出来そうな気がするけど、きっとめんどい。
0813810
2010/12/04(土) 22:32:35かたじけない。
0814デフォルトの名無しさん
2010/12/05(日) 15:04:29main.rb
gems/hoge.gem
gems/fuga.gem
gems/bazz.gem
みたいにmain.rbから各gemを使いたいんだけど…
0815デフォルトの名無しさん
2010/12/05(日) 15:13:38出来ない。
$LOAD_PATHの要素をvirtual化してファイルパス以外が入れられるようにする提案が実装され
たらgemのままとか、URL指定でも使えるようになるかもしれないけど、今は$LOAD_PATHにイ
ンストールしたgemのlib(等)をドカドカ追加して行くだけの仕様。
0816デフォルトの名無しさん
2010/12/05(日) 15:47:27絶対パスで require すればそのファイルだけは緊急避難的に使える
ただ、そのファイル内で require してる他の gem や
そのファイルが require してる他の「そのファイルのあるディレクトリ内のファイル」は動作しない」のでそこでエラーになる
「require 'rubygems' しなくても絶対パスで指定するだけで使えます」というように
作者が慎重に作ったものでない限り、普通は無理
0817デフォルトの名無しさん
2010/12/05(日) 17:30:320818デフォルトの名無しさん
2010/12/05(日) 17:49:240819デフォルトの名無しさん
2010/12/05(日) 18:13:39試しにRubyやってみたら本当に楽しいじゃないか
短いコードでいろいろできるし、VSのIDEの重さからも開放された
丁寧な解説サイトがあるのも初心者にうれしい
小物ツールが作りたいならこれでいいですよね?
0820デフォルトの名無しさん
2010/12/05(日) 19:14:26Rubyがイチオシだと思う
それ以外のことはたいして得意ではないので他の言語使ってくれ
ゲームとかウィンドウアプリとか業務用プログラムとか
0821デフォルトの名無しさん
2010/12/05(日) 21:45:06あるスクリプトでだけ特定のgem使うならbundlerがよさそう
大げさだけどrvmもgem環境を閉じ込める方法あったはず
0822デフォルトの名無しさん
2010/12/05(日) 21:48:21環境変数PATH上にあるコマンドを調べることってできないものでしょうか?
やりたいことは、systemで実行するコマンドがあるかないかで処理を変えたいのです。
例えば、zipコマンドがあるならzipを使って、それ以外なら別のコマンドを使うといったようなことです。
0823デフォルトの名無しさん
2010/12/05(日) 22:46:460824デフォルトの名無しさん
2010/12/06(月) 01:31:57ENV['PATH'].split(':').find { |e| FileTest.executable?("#{e}/zip") }
とか。
0825デフォルトの名無しさん
2010/12/07(火) 01:26:210826デフォルトの名無しさん
2010/12/07(火) 01:38:130827デフォルトの名無しさん
2010/12/07(火) 05:19:32でヒットしたファイルを読み込んでる
そういうふうに $LOAD_PATH と require の引数を設定するといい
$LOAD_PATH に自分でパスを追加するのはカッコよくないと思われているが、追加行為自体は普通のことだ
require に絶対パスっぽい文字列を渡すと絶対パスっぽく探してくれる
require 'rubygems' したあとだと、とりあえず gems の各ディレクトリから "引数-n.m.o/引数.rb" を探す
0828デフォルトの名無しさん
2010/12/07(火) 09:04:36これでなにを作っているの?
サーバーやWEB関連は全くやる気がないので
それ以外での使い道あったらおしえて
0829デフォルトの名無しさん
2010/12/07(火) 09:43:360830デフォルトの名無しさん
2010/12/07(火) 09:57:480831デフォルトの名無しさん
2010/12/07(火) 10:10:161.9系ではrequire_relativeが使えるよ
0832デフォルトの名無しさん
2010/12/07(火) 16:33:02コマンドプロンプトでの作業のお供に使ってる
0833デフォルトの名無しさん
2010/12/07(火) 18:42:54ありがとう。こんな便利なものがあったなんて
>>827
1.9系が使えないときには参考にさせていただきます
0834デフォルトの名無しさん
2010/12/07(火) 20:00:19それとかプログラミングを題材にした萌えアニメとかさぁ。
0835デフォルトの名無しさん
2010/12/07(火) 20:07:08ちなみに擬人化は大昔にやって歴史の暗部に追いやられた
0836デフォルトの名無しさん
2010/12/07(火) 20:09:290837デフォルトの名無しさん
2010/12/07(火) 20:10:440838デフォルトの名無しさん
2010/12/07(火) 20:11:59これは認めて直視しないといかん
「誰にとっても便利」「誰にとっても簡単」「誰にとっても習えばある程度までできる」は幻想
生活の中での扱われ方は絵を描く行為にかなり近い
まあ初心者スレで言うようなことでもないんだが
0839デフォルトの名無しさん
2010/12/07(火) 20:33:50プログラミングのできる人って
体感で1万人に一人くらいのもんだと思うよ。
それくらい特殊な技能。
0840デフォルトの名無しさん
2010/12/07(火) 20:34:42単語が日本語に置き換わっただけだけど。
0841デフォルトの名無しさん
2010/12/07(火) 20:43:06自力でイラストや挿絵を描けるかどうか、とかいうのに近いよね
フツーの人はそんなレベルのプロダクトを作れないという点で
フツーはそれができる人が作ったものを有償無償でもらってきて使うはず
プログラムも、やっぱおんなじなんだと思う
ヘタに「机でお勉強」のスタイルをとることができるもんだからよく勘違いされる
「勉強」したって、それだけじゃできないものはできないのだわ
学校の図工や美術の授業を受けたからといって「絵が描ける」ようにならなかったのと同じ
0842デフォルトの名無しさん
2010/12/07(火) 20:46:420843デフォルトの名無しさん
2010/12/07(火) 21:44:25人によって、クラスのことだったりメソッドのことだったりするので、混乱しています。
0844デフォルトの名無しさん
2010/12/07(火) 21:56:16ナニを以って単体とするか(テストの粒度)はほんとうに様々です
まあとりあえずユーザーに提供するメソッド(パブリックメソッド)のテストさえしとけば最低限なんじゃないのかね
0845デフォルトの名無しさん
2010/12/07(火) 23:32:35何か(ユニット)を結合しない状態でのテストならユニットテストです。
0846デフォルトの名無しさん
2010/12/08(水) 01:05:40といってもネットからAV女優の名前一覧持ってきて加工して自動で動画や画像をダウンロードして私的利用したり、
あわせて名前や関連タグつけてリネームするような便利スクリプトもweb関連だが、それ以外でと申すか・・・
・batやshellスクリプトの延長
・sedやawkの使い方をふと忘れたときのテキストの加工
・batやbashでファイルの列挙やforの書き方を忘れたときの(ry
・irbでGoogle電卓でしにくい計算
0847デフォルトの名無しさん
2010/12/08(水) 01:48:330848デフォルトの名無しさん
2010/12/08(水) 02:08:180849デフォルトの名無しさん
2010/12/08(水) 08:49:47windowsだと毎回
C:\test
を
C:/testに置き換えないとだめなの?
0850デフォルトの名無しさん
2010/12/08(水) 10:00:53俺もそれ思ってた
Rubyの中だけでなら/でいいけど、systemで呼び出したい時にコマンドが\しかうけつけないことあるし
相互変換のメソッドないの?
0851デフォルトの名無しさん
2010/12/08(水) 10:14:15Dir.globeが全く反応せず、エラーもでないから
どうしたものかと小一時間ハマってしまったわw
path.towinpath()みたいなメソッドを自作しろってことなのかねぇ?
なんかぞっとするんだがw
0852デフォルトの名無しさん
2010/12/08(水) 10:43:14つまりユニットとはクラスのこともあるしメソッドのこともあるというわけですか。
じゃあ、ユニットがクラスのことだったりメソッドのことだったりするのは、間違いどころか、正しい使い方だったんですね。
>>845
「何かを結合しない状態でのテスト」というのは、つまり「非結合テスト」という意味なわけですね。なるほど。
ありがとうございました。
0853デフォルトの名無しさん
2010/12/08(水) 12:37:55ただし、mswin/mingw の場合は、'\\' が引数に入っていてもたいていディレクトリ区切りだとみなす
system のように外部シェルを起動するタイプの場合は、
「シェルがそのまま解釈できる文字列」でなければならない
つまり、「2つ上のディレクトリ内容を表示する」場合は
system('ls ../../') か system('dir ..\\..\\') だ
Dir.glob の引数は Ruby パスでもシェル渡し文字列でもない独自規則なので、
それに合った記述を行わなければならない
パス区切りは '/' なので、mswin/mingw でも linux/mac でも '/' で書く
余談だが、ディレクトリを「上らせ」ようとして '../..' というような記述をしても Dir.glob ではそもそも動作しない
で、「二つ上に移動する外部system用引数」をどうやって記述するのがベストかというと、
FIle.join('..', '..') だと思う
これは実行環境が mswin/mingw などの場合は '\\' で、それ以外では '/' で引数を連結する
「Linuxで実行中だけどWindows用のパス区切り文字列が欲しいなあ」という場合は
自力で '../hoge/fuga'.split(/\//).join('\\') したりしろ
0854デフォルトの名無しさん
2010/12/08(水) 12:47:460855デフォルトの名無しさん
2010/12/08(水) 12:50:01> FIle.join('..', '..') だと思う
> これは実行環境が mswin/mingw などの場合は '\\' で、それ以外では '/' で引数を連結する
いや、それは間違い。
どんなプラットフォームでもFile.joinは'/'で引数を連結する。
0856デフォルトの名無しさん
2010/12/08(水) 13:00:56結局はPathname使えバーカバーカという話になるんだろうか
0857デフォルトの名無しさん
2010/12/08(水) 13:19:04ALT_SEPARATORでもrubyは受け付けるよ、以上の意味はないね。
Pathnameも起きることは同じ。
0858デフォルトの名無しさん
2010/12/08(水) 13:28:14File.join は File::SEPARATOR しか使用しない
0859デフォルトの名無しさん
2010/12/08(水) 13:38:250860デフォルトの名無しさん
2010/12/08(水) 13:39:560861デフォルトの名無しさん
2010/12/08(水) 13:51:480862デフォルトの名無しさん
2010/12/08(水) 14:02:32試したんだけどPathnameは元のパスが\区切りだろうが、/で連結しようとするね
それはいいとして、実行環境依存だから
このあたりPythonはどうなっているか調べてみるか
0863デフォルトの名無しさん
2010/12/08(水) 14:12:18RubyはMS嫌いな奴が作った言語だからな
0864デフォルトの名無しさん
2010/12/08(水) 14:36:54スクリプトからファイルパス文字列を「エクスポート」する際に環境依存にするかどうか
0865デフォルトの名無しさん
2010/12/08(水) 14:44:43続けていくともっと大変そうだな
Windowsユーザーはやるべからず
0866デフォルトの名無しさん
2010/12/08(水) 14:45:37「エクスポート」ならデフォルト動作は環境読むべきだろうね
mswin で
path = FilePath.new('../foo/bar')
p path.export
としたら、 '../\\foo\\bar' という文字列になるべき、だろう
でも Ruby のファイルパスは単なる文字列だからなー
0867デフォルトの名無しさん
2010/12/08(水) 14:50:24統一感がまるでなし
ファイル操作なんて間違えたら致命的なのに
そこが安心して使えないなんて終わってる
0868デフォルトの名無しさん
2010/12/08(水) 14:51:56どうでもいいけど Ruby 使ったことのない奴が一人で頑張ってるな
0869デフォルトの名無しさん
2010/12/08(水) 14:53:13そういうのが怖いんだよ
しかもエラー吐かないしww
0870デフォルトの名無しさん
2010/12/08(水) 14:53:57まあファイルパスをエクスポートするようなときは自前で慎重に書けということなんだろう
0871デフォルトの名無しさん
2010/12/08(水) 14:57:02皆様に多大なるご迷惑をおかけしました事を心より深くお詫び申し上げます。
>>859-860,>>865,>>867には厳しく注意しておきますゆえ、
これからもどうかうちのニートをよろしくお願いいたします。
.@@@
(゜´д`) ...((( )))≡ママ〜 ゴメンヨ〜
∪/ ) (´Д` )≡
( .| | ⊂⊂ )≡
..|└┬┘ Y 人≡
.(_)__) (_)__)≡
【Perl,PHP】LLバトルロワイヤル14【Ruby,Python】
http://hibari.2ch.net/test/read.cgi/tech/1290367109/
0872デフォルトの名無しさん
2010/12/08(水) 15:01:31FilePathというクラスは標準で存在しない(Pathnameはあるが)
Rubyの標準クラスが解釈する限り、 / だろうが \ だろうがパス区切りとして動作する
irb> path = Pathname.new('C:\Program Files')
=> #<Pathname:C:\Program Files>
irb> rubypath = path.join('ruby-1.8')
=> #<Pathname:C:\Program Files/ruby-1.8>
irb> p Dir.entries(rubypath)[2]
"bin"
外部シェルが解釈可能な文字列に変換したいときでも、
環境依存の自動処理が行われないという話に過ぎない
0873デフォルトの名無しさん
2010/12/08(水) 15:10:12ただフォルダ内からファイルを検索したいだけ
たったこれだけのことなのに環境依存だとか考えなきゃいけないのが面倒
Dir.globeに至ってはエラーすら出さないので
何がだめなのかすらわからなかった
よく使うであろう関数ですらこれなんだから
統一性のない関数をこれから複数覚えていくと考えるとぞっとする
やっぱりC#が完璧すぎるんだな
0874デフォルトの名無しさん
2010/12/08(水) 15:11:10>>853
0875デフォルトの名無しさん
2010/12/08(水) 15:12:550876デフォルトの名無しさん
2010/12/08(水) 15:13:50だとなぜか数字だらけ
puts pathだとちゃんと表示。
非常にわかりづらい
pだけをみてこういう動作をすると予測できる人間がどれだけいるか
1億人に聞いたとしても予測は無理だろう
0877デフォルトの名無しさん
2010/12/08(水) 15:15:10Dir.globに渡す文字列の話とごっちゃになってるし
つかC#使えるならC#でこう書くのはRubyだとどう書くの?って質問すればいいのに
0878デフォルトの名無しさん
2010/12/08(水) 15:15:40そんな面倒なことをさせる言語ならC#でいい
0879デフォルトの名無しさん
2010/12/08(水) 15:17:46そういうのを寄せ集めてるから統一性がないんだよ
1社でつくれ、個人で作るなと
0880デフォルトの名無しさん
2010/12/08(水) 15:18:03頼んで使っていただこうというのならともかく。
0881デフォルトの名無しさん
2010/12/08(水) 15:18:310882デフォルトの名無しさん
2010/12/08(水) 15:20:02Rubyならどうやって書くの?
<WebBrowser Source="http:..."/>
0883デフォルトの名無しさん
2010/12/08(水) 15:20:31>pだけをみてこういう動作をすると予測できる人間がどれだけいるか
5000万人くらいの人は「よくわかんないけど使用マニュアルとかないの?」と聞くだろうな
Dir.glob が返す Array に含まれる文字列に対して Sting#inspect を呼んでいるに過ぎない
String のマニュアルには $KCODE 設定しろと書いてあるんだから日本語扱うときは $KCODE 設定しろ
>>849-850 とは全く無関係の話だ
0884デフォルトの名無しさん
2010/12/08(水) 15:27:39コードが短いし、文字列に強いと評価があったからやってみたが
その文字列で詰まるとはなw
日本語書くだけでいろいろ設定しなくちゃいけないとか・・・
こうなると、テキストがutf-8かsjisかどうかの判別コードも
自作しなくちゃならないんじゃないの?
C#じゃ自前で判別用のものを作らなきゃならない
しかもそれは完璧ではない
Rubyも同じか
0885デフォルトの名無しさん
2010/12/08(水) 15:27:440886デフォルトの名無しさん
2010/12/08(水) 15:29:10別に p は日本語表示のメソッドじゃないし
日本語を日本語文字として表示してほしいなら puts なり print なり使え
0887デフォルトの名無しさん
2010/12/08(水) 15:30:18Rails の人に多い
0888デフォルトの名無しさん
2010/12/08(水) 15:37:54あー、h とかと同じだと思ってるのか
関数的メソッド p は、対象オブジェクトに設定されたinspect表記を呼び出す
inspect はクラス製作者が設定した、主にデバッグやコード製作に有用な内部表記だ
String#inspect は、何も設定されていなければ文字列のバイト表現を返す
0889デフォルトの名無しさん
2010/12/08(水) 15:40:55あのへんになるとぶっちゃけ $KCODE 設定しないほうがなにかと便利だと思うが
読みたいときだけ puts とかすれば充分
0890デフォルトの名無しさん
2010/12/08(水) 19:28:030891デフォルトの名無しさん
2010/12/08(水) 20:09:580892デフォルトの名無しさん
2010/12/08(水) 20:17:50たとえ、予想が間違っていたとしても、そして理解も間違っていたとしてもだ…
0893デフォルトの名無しさん
2010/12/08(水) 20:18:36と読み飛ばしてしまうかもね。
0894デフォルトの名無しさん
2010/12/08(水) 20:25:32配列は「もともと」
[1, 2, 3]
みたいな構造をして存在してるものだと思うらしい
引数オブジェクトの持つ特定のメソッドを呼んだ結果を表示するだけ、みたいな考えには思い至らない模様
まあわからんでもないのだが
っていうかそういうふうにならないように解説とか慎重に書いてあるんじゃないのと思うんだけどどう
0895デフォルトの名無しさん
2010/12/08(水) 20:32:35@max_value = max
end
をプロが1番かっこよく書くとどうなるでしょうか?
上のでもいいのですが気になって。
0896デフォルトの名無しさん
2010/12/08(水) 20:43:29お前も俺と一緒に作るんだ!
そのためにコミッタが一筆してくれんだろがw
Ruby環境構築講座 Windows編 - 達人出版会
http://tatsu-zine.com/books/winrubybuild
0897デフォルトの名無しさん
2010/12/08(水) 20:43:34@max_value = [max, @max_value].max
0898デフォルトの名無しさん
2010/12/08(水) 20:44:340899デフォルトの名無しさん
2010/12/08(水) 20:45:48#display
#name
#p
#printf
#putc
#puts
#sprintf
#to_s
#to_str
こやつらは整理して理解すべき。初心者スレにも定期的に上がるWADAI。
0900デフォルトの名無しさん
2010/12/08(水) 23:27:50trunkのソースを見てみたけど、CreateProcessくらいしかA系API使ってないように見える。
0901デフォルトの名無しさん
2010/12/09(木) 00:50:19_UNICODE定義してなくて勝手にA系使ってるとかもない?
0902デフォルトの名無しさん
2010/12/09(木) 00:51:570903デフォルトの名無しさん
2010/12/09(木) 00:52:431.9.2だと上手く動いたことあったな。ファイル周りだった気がするが実は対応されているのか
0904デフォルトの名無しさん
2010/12/09(木) 00:55:42正直、業務用途には恐くて使えん。
0905デフォルトの名無しさん
2010/12/09(木) 01:20:530906デフォルトの名無しさん
2010/12/09(木) 01:53:520907デフォルトの名無しさん
2010/12/09(木) 08:52:04ttp://atnd.org/events/10439
参加してやれよ
0908デフォルトの名無しさん
2010/12/09(木) 09:43:110909デフォルトの名無しさん
2010/12/09(木) 10:47:41依存物をtouchするか、名指しもしくはcleanなどで生成物を消去して
再実行が一般的かな。
rake --execute-continue でどうにかするのも無理気味。
0910デフォルトの名無しさん
2010/12/09(木) 11:54:53require 'rake/clean'
これで
clean タスク(中間生成ファイルを掃除)
clobber タスク(最終生成物も掃除)
が追加される。
掃除の対象を増やしたいときはCLEANとCLOBBERというFileListに
#includeで追加すればOK。
0911デフォルトの名無しさん
2010/12/09(木) 14:08:010912デフォルトの名無しさん
2010/12/09(木) 15:51:260913デフォルトの名無しさん
2010/12/09(木) 17:00:51これを"クラス名"だけ取得する方法はありませんか。
0914デフォルトの名無しさん
2010/12/09(木) 17:27:22文字列操作して切り出してください
0915デフォルトの名無しさん
2010/12/09(木) 19:22:560916デフォルトの名無しさん
2010/12/09(木) 19:40:53すいません&&ってなんですか?
0917デフォルトの名無しさん
2010/12/09(木) 19:43:40として、rake cleanが失敗した時は止まるようにしとけ、ということ。
0918デフォルトの名無しさん
2010/12/09(木) 19:46:280919デフォルトの名無しさん
2010/12/09(木) 19:49:38現在はまず無いと思うけどね
0921デフォルトの名無しさん
2010/12/09(木) 21:48:08/::/ で split して、最後の要素を取り出せばいい。
module Foo
module Bar
class Baz; end
end
end
cls = Foo::Bar::Baz
cls.name #=> "Foo::Bar::Baz"
cls.name.split(/::/).last #=> "Baz"
0922デフォルトの名無しさん
2010/12/09(木) 22:07:19>>921
0923デフォルトの名無しさん
2010/12/09(木) 22:15:530924デフォルトの名無しさん
2010/12/09(木) 22:48:38それ初心者スレにふさわしいと思う。
「確認コード蓄積スレ」を兼ねて
コードだけググってここに来れたらイイけど。
0925デフォルトの名無しさん
2010/12/09(木) 23:37:040926デフォルトの名無しさん
2010/12/09(木) 23:38:462ちゃんに貼るとタラコのおっさんのもんになるぞ。
0927デフォルトの名無しさん
2010/12/10(金) 00:23:05あらゆる他人との接触を拒もうってのと大差ないぞ
貼られるコードと利用される分量にもよるが
0928デフォルトの名無しさん
2010/12/10(金) 00:32:110929デフォルトの名無しさん
2010/12/10(金) 02:55:380930デフォルトの名無しさん
2010/12/10(金) 03:08:05Railsのscaffoldでは,CRUDの実装でnewとcreateを分けてるみたいなんですが,これ何か理由あるんですか?
昔cakePHP使ってた時,確かcakeのscaffoldでは,(RoRでいえば)↓みたいなコードが出されてた気がします.
def create
if !params[:mdl]
@mdl=Mdl.new()
else
@mdl=Mdl.new(params[:mdl])
〜以下CREATE処理
end
end
もちろん↑でもできるので,わざわざ分けてる理由がわかりません.
RESTに準拠してstatelessな通信をするためかなって思ったんですが,RoR自体は昨日始めたばかりなので確信が持てなくて,
もしかしてもっと別のpragmaticな理由があるのかもしれないと思ったので質問させていただきました.
0931デフォルトの名無しさん
2010/12/10(金) 03:42:32#create #show #update #destroy
#newは新規作成用の入力画面
#editは編集用の入力画面
#indexは一覧表示画面
たぶん。
0932デフォルトの名無しさん
2010/12/10(金) 07:00:04>Railsのscaffoldでは,CRUDの実装でnewとcreateを分けてるみたいなんですが,これ何か理由あるんですか?
本当のところは作者であるDHHにきかないとわかんないけど、理由を3つ考えてみた。
(A) メソッドは単機能であるべき(作成を行うcreate()と、作成用の画面を表示するnew()は分けるべき)
(B) リクエストメソッド(GET, POST, ...)が異なるならアクションも分けたい(通常、new()はGETでcreate()はPOSTだから、アクションメソッドも別にしたほうが、routingでの割り当てがやりやすい)
(C) アクションはhtml用とjson用とで共通化したい(通常、作成用の画面を表示するnew()はhtml用にだけ用意してjson用は用意しないので、new()の機能をcreate()にいれたくない)
あと1つのメソッドでnew()とcreate()を兼ねるなら、request methodがGETかPOSTかで分けたほうがいいと思うのだがどうか。
0933デフォルトの名無しさん
2010/12/10(金) 08:05:43> Ruby on Rails の質問は Webプログラミング板の Rails スレへ。
0934デフォルトの名無しさん
2010/12/10(金) 15:49:02if 0
# ここは必ず実行される
end
どうも動作がおかしいと思った。
0935デフォルトの名無しさん
2010/12/10(金) 15:56:00>>932
詳しいご解説ありがとうございます.
scaffoldの生成したコードを見ていたら,↓のように
# GET /cntrs/new
# GET /cntrs/new.xml
コントローラの全メソッドに,対応するhttpリクエストのメソッドがコメントされていました.
つまりお二人のおっしゃった理由だったということなんだと思います.
>あと1つのメソッドでnew()とcreate()を兼ねるなら、request methodがGETかPOSTかで分けたほうがいいと思うのだがどうか。
確かにその方がエレガントですね.ありがとうございます.
>>933
すみません,知りませんでした.今後はそっちに書きます.
失礼しました.
0936デフォルトの名無しさん
2010/12/10(金) 16:02:20「評価が偽になるのはfalseとnilだけ」
これ大事
0937デフォルトの名無しさん
2010/12/10(金) 16:14:42危険だから晒せ
0938デフォルトの名無しさん
2010/12/10(金) 16:17:190939デフォルトの名無しさん
2010/12/10(金) 17:35:27他の言語では0が偽になることが多いからってだけでしょ
有名なRubyの落とし穴
http://www.ruby-lang.org/ja/man/html/Ruby_A4CECDEEA4C8A4B7B7EA.html
http://www.ruby-lang.org/ja/man/html/trap_BFBFB5B6C3CD.html
0940デフォルトの名無しさん
2010/12/10(金) 17:40:49>>934みたいな人がいるってことは、そういう説明しない書籍やらサイトがあるってことだろ
0941デフォルトの名無しさん
2010/12/10(金) 17:43:120942デフォルトの名無しさん
2010/12/10(金) 18:42:150943デフォルトの名無しさん
2010/12/10(金) 18:51:11「評価が偽になるのはfalseとnilだけ」
rubyでは偽かそれ以外だから
falseだけを設定しておけばいいのだが、
falseだけじゃバランスが悪いのでtrueも一応用意している。
0が偽だというのは君の思い込みor他のプログラム言語のせい
0944デフォルトの名無しさん
2010/12/10(金) 18:59:09p r.body.encoding
とした結果が
#<Encoding:ASCII-8BIT>
になってしまっていて、bodyをファイルに保存してもUTF-8で開けません。
どうすればいいですか?
0945デフォルトの名無しさん
2010/12/10(金) 19:01:48数学の世界で0は無を意味する。
Rubyの世界でnilは無を意味する。
数学の世界の無と、Rubyの世界の無が、対応取れてないからだと思うよ。
Rubyの世界にはまずオブジェクトの世界がある。その上に数学の世界が構築される。
プログラミング初心者は、数学の世界の上にオブジェクトの世界があると思っている。
0946944
2010/12/10(金) 19:12:090948944
2010/12/10(金) 19:43:45でなおりました。どこが問題だったのかいまだに分かりませんが。
0949デフォルトの名無しさん
2010/12/10(金) 20:26:540950デフォルトの名無しさん
2010/12/10(金) 20:29:36…あ、ちょっと待って自信ない、…うん、利用しないはず、たぶん利用しない
なので、返る HTTP ボディの文字列はまったく変換されないサーバからの生データのままで、
エンコーディング名は「不明なバイナリデータ」を示す ASCII-8BIT だ
ユーザーが何らかの手段で正しい文字エンコーディングを調べて、force_encoding で名づけて欲しいというスタンス
ということで
・ サーバが User-Agent などを読んで、IE などには UTF-8 で返すようになってた
・ どこかで誰かが不正な force_encoding を行ってた
・ ファイル保存時のエンコーディング指定が論理的に変だった
のどれかだと思う
0951デフォルトの名無しさん
2010/12/10(金) 20:34:37見ない
それは Net::HTTP の仕事ではないというかそんな根底部分で余計なことすんなということらしい
open-uri ならヘッダの Content-Type を読んで force_encoding で設定してくれるが、
irb1.9> require 'open-uri'
irb1.9> p open("http://dailynews.yahoo.co.jp/").read.encoding
#<Encoding:EUC-JP>
irb1.9> p open("http://sankei.jp.msn.com/").read.encoding
#<Encoding:Shift_JIS>
irb1.9> p RUBY_VERSION
"1.9.2"
レスポンスヘッダの Content-Type ほど信用ならないものもないのでまあ掛け捨て保険程度
0952デフォルトの名無しさん
2010/12/10(金) 20:46:25Content-Type ヘッダの値を試す(エンコーディングエラーなら無視) … OpenURI
<meta> の charset と Content-Type ヘッダ と NKF.guess を試す … Mechanize
こんな感じだな
まあエンコーディングチェックのコストの関係で事実上の住み分けになってる
Mechanize は HTML を全文パースしてエンコーディング情報候補を探すから動作が他よりずっと重い
HTML が文字エンコーディング情報をヘッダでのみ記述するようになってれば楽だったのですが
http-equiv とかいうドヤ顔機能マジ氏ね
0953デフォルトの名無しさん
2010/12/10(金) 21:31:44つまりRuby 1.9.2から$LOAD_PATHにカレントディレクトリが含まれなくなった。
require'./@@@@'
とするか、
require_relative'@@@@'
としなければならない。
古い参考書を読んでいてはまった。
0954デフォルトの名無しさん
2010/12/10(金) 21:40:18イディオムで
!!(式)
というのがある、これでtrueになるかfalseになるかわかるけど基本は >>936
irb> [-1, 0, 1, true, false, nil, [], "0"].map{|x| !!x}
=> [true, true, true, true, false, false, true, true]
メソッドでtrueかfalseかだけを返すことを明示したい時の使われているけど
記号的だしObject.to_boolがあればいいけど、長いよな
0955デフォルトの名無しさん
2010/12/10(金) 21:48:03def is_true?
!!self
end
end
他の言語で言う if (flag == true) 並に恥ずかしいが
0956デフォルトの名無しさん
2010/12/10(金) 21:49:21is_true?よりもRubyならtrue?の方がいいな
0957デフォルトの名無しさん
2010/12/10(金) 21:55:57それ以外の凄いのない?
0958デフォルトの名無しさん
2010/12/10(金) 21:56:19module Kernel
def true?
!!self
end
end
require 'pp'
pp [-1, 0, 1, 0.0, 0.1, true, false, nil, [], "0", ""].map{|x| [x, x.true?]}
0959デフォルトの名無しさん
2010/12/10(金) 21:57:48irb> p (1 == true)
false
Ruby にとって true という呼び名はあまり意味がないので述語に入れるのは不適当
Object#nil? があっても Object#true? はない
non-nil みたいなもの
0960デフォルトの名無しさん
2010/12/10(金) 21:59:37もはやユニットテストではないかもsれんが
rspecが流行りか
あとはshoulda
受け入れテストはCucumber(とCucumberの記法がウザイ人のためのsteak)
今の流行りはここを参照しる
Testing frameworks in The Ruby Toolbox
http://ruby-toolbox.com/categories/testing_frameworks.html
0961デフォルトの名無しさん
2010/12/10(金) 22:02:31trueではないが、ifでは真と評価されるというくらいか
0962デフォルトの名無しさん
2010/12/10(金) 22:03:58「条件式の所で」つってんだろがw
0963957
2010/12/10(金) 22:04:39でもどれが凄いのかわっぱりわからんw
0964デフォルトの名無しさん
2010/12/10(金) 22:05:29今の標準はminitestじゃね?
標準じゃなくて今は切り離されたTest::Unitは進化してるみたいだぞ
0965デフォルトの名無しさん
2010/12/10(金) 22:07:21BDDやTDDで最近の日付でググっとけ
書き捨てのスクリプトならともかく、テスト書かないとやっとれんし効率的なテスト書く方法しっとくと楽
0966デフォルトの名無しさん
2010/12/11(土) 00:00:45んでnil.to_booleanすると「ぼっ僕は真でもない偽でもないよ!」って例外をあげればいい。
なんでnilも偽なんだからね!とか勝手にになっちゃうのかわからん。
nilさんがかわいそうだろ…そんなつもりじゃないのに偽とか決め付けたら。
0967デフォルトの名無しさん
2010/12/11(土) 00:05:03nil なら ELSE、それ以外は THEN という処理
真偽値で nil と non-nil だけだとわかりにくい人向けに false が作られた感じ、に見える
0968デフォルトの名無しさん
2010/12/11(土) 00:11:51コードの世界2でも出して完全解説ヨロ。>マツモティーヌ
0969デフォルトの名無しさん
2010/12/11(土) 00:14:27Ruby のスクリプトを書いてる人で明示的に false を返してる人は稀だと思う
0970デフォルトの名無しさん
2010/12/11(土) 00:16:28foo? みたいなのはメソッドの名称的に true か false を「返さないといけない」んで、きちんと書く
それ以外の if 条件になるメソッドの返り値なんかは nil かそうでないかの気遣いしかしないなー
0971デフォルトの名無しさん
2010/12/11(土) 00:23:050972デフォルトの名無しさん
2010/12/11(土) 00:26:51ホントは、該当なしなら空文字列や空配列もでいいはずなのよ
でもそうせずに“失敗”時に nil を返すようにすると
foo() || var || baz()
みたいな混成の処理ができる
foo メソッドが空文字列を返すとか var は Hoge::EmptyData オブジェクトが入ってるとか
そういうのだととても困る
まさか false を入れとくわけにもいかないし
undef? ああその手もあるか
0973デフォルトの名無しさん
2010/12/11(土) 00:35:30んー…「該当がなかったらnilを返す」のは駄目なことなの?
例えばHashでキーに対応する値が無かったらnilを返すのは正しいとおもうんだど。
0974デフォルトの名無しさん
2010/12/11(土) 00:37:540975デフォルトの名無しさん
2010/12/11(土) 00:39:170976デフォルトの名無しさん
2010/12/11(土) 00:40:000977デフォルトの名無しさん
2010/12/11(土) 00:42:340978デフォルトの名無しさん
2010/12/11(土) 01:18:10内部テストにRspec
外部テストにcucumber+capybara
0979デフォルトの名無しさん
2010/12/11(土) 01:25:13どこか替わりのサイトはありますか?
0980デフォルトの名無しさん
2010/12/11(土) 01:57:17どこだか覚えてないや、ごめんな。
0981デフォルトの名無しさん
2010/12/11(土) 02:15:13RubyInstaller for Windows
http://rubyinstaller.org/
Downloads
http://rubyinstaller.org/downloads/
0982デフォルトの名無しさん
2010/12/11(土) 02:50:29artonさんのとこ
http://www.artonx.org/
0983デフォルトの名無しさん
2010/12/11(土) 02:51:19移転先は>>256
>>981はMinGWなので初心者には勧めない
0984デフォルトの名無しさん
2010/12/11(土) 03:16:24RubyInstallerのほうはRuby以外にやらなければならないことがちと多すぎるな
Rubyに慣れて「拡張ライブラリ作るぜー」とかいう段になってから改めて乗り換えるので充分間に合う
0985デフォルトの名無しさん
2010/12/11(土) 03:27:21っていうかmingw32対応してないような拡張ライブラリはそろそろ焼却炉で燃やしていい
いまだに RUBY_PLATFORM =~ /mswin/ も残ってるしやんなるな
0986デフォルトの名無しさん
2010/12/11(土) 11:02:11※ただしundefinedは予約語ではない
0987デフォルトの名無しさん
2010/12/11(土) 11:04:44(1) foo.bar = hoge # NG
(2) foo.bar += hoge # 許可
Bar#+ と Foo#bar= を定義すると(2)はOKですが、(1)も同時にOKになってしまうのですが……
方法はない?
0988デフォルトの名無しさん
2010/12/11(土) 11:07:32許可も何も、ユーザーがメソッドを使用することを拒否することはできない
紛らわしい書き方するなと赤字で文書に書いておけ
0989デフォルトの名無しさん
2010/12/11(土) 11:08:040990デフォルトの名無しさん
2010/12/11(土) 11:13:32class Foo
def plus(n)
@bar += n
end
end
0991987
2010/12/11(土) 11:22:53foo.bar += hoge を
foo.bar = (foo.bar + hoge)
で計算してますよね。そうすると代入を禁止することは無理っぽい。
そうだとすると>>989-990が言うように別のメソッドを定義するしかない。
いまいち追加っぽい気がしない?
foo.bar << hoge
0992デフォルトの名無しさん
2010/12/11(土) 11:26:11それ言わないとどうにもならんよ
0993デフォルトの名無しさん
2010/12/11(土) 11:30:25現在こう書いているのを、
@world.add_child node
こう書きたい。
@world.child += node
でもこう書くのは不可能にしたい
@world.child = node
0994987
2010/12/11(土) 11:35:29仕様おかしいよ。matz変えてー
0995デフォルトの名無しさん
2010/12/11(土) 11:41:150996デフォルトの名無しさん
2010/12/11(土) 11:43:36四則演算子の定義は、数値を表現するクラス以外で使わない方が良い
0997987
2010/12/11(土) 11:56:32ar = [1,2,3]
ar += 4
./main.rb:8:in `+': can't convert Fixnum into Array (TypeError)
おとなしく << 使うことにします。ありがとうございました。
0998デフォルトの名無しさん
2010/12/11(土) 12:25:35普通は再代入と破壊で意味ちがうし
0999デフォルトの名無しさん
2010/12/11(土) 13:06:35t += い
t += ろ
t += い
t += ろ
end
ってやって、textが '' だったので3分ほど悩んだなぁ。
1000デフォルトの名無しさん
2010/12/11(土) 13:07:26この場合、<< にしろよ、が正しいと思う
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。