Ruby 初心者スレッド Part 23
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/11/20(木) 04:30:21【Ruby1.9 は不安定な開発版であり初心者には全く向きません】
【最新安定版の Ruby1.8.7 の使用をお勧めします】
※1.8.7 は1.8 と 1.9 の橋渡しをするためのリリースです。
1.9 の新機能の一部が利用可能なので初学者にお勧めです。
※ただし十分安定しているとは言えないので
プロダクション環境での利用にはお勧めしません。
関連スレやURLは>>2-8あたりを見てください。Ruby on Railsの質問は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デフォルトの名無しさん
2008/11/20(木) 06:26:43Q:
いちからRubyを始める初心者向けのRuby入門書は何がおすすめでしょうか?
A:
プログラム作成の初心者だったら
「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
http://www.amazon.co.jp/dp/4797336617/
他の言語経験があるんだったら
「プログラミングRuby 第2版 言語編」
http://www.amazon.co.jp/dp/4274066428/
「初めてのRuby」
http://www.amazon.co.jp/dp/4873113679/
「Ruby Way 第2版」
http://www.amazon.co.jp/dp/4798115339/
0003デフォルトの名無しさん
2008/11/20(木) 06:32:31Ruby 初心者スレッド Part 22
http://pc11.2ch.net/test/read.cgi/tech/1221467121/
■関連スレ
Rubyについて Part 33
http://pc11.2ch.net/test/read.cgi/tech/1223709050/
Rubyの宿題教えてください。2限目
http://pc11.2ch.net/test/read.cgi/tech/1200175247/
RubyCocoa 初心者質問【Leopardバンドル記念】
http://pc11.2ch.net/test/read.cgi/mac/1193373811/
【ActiveScript】RubyをWindowsで使うスレ【GUI】
http://pc11.2ch.net/test/read.cgi/tech/1155031689/
デザパタ + Python/Ruby/Smalltalk part2
http://pc11.2ch.net/test/read.cgi/tech/1175959706/
魁け! Ruby 1.9.X
http://pc11.2ch.net/test/read.cgi/tech/1201603546/
Rubyについて(アンチ専用) Part003
http://pc11.2ch.net/test/read.cgi/tech/1207233348/
【Ruby/SDL他】Rubyでゲーム制作・総合スレッド
http://pc11.2ch.net/test/read.cgi/gamedev/1207069887/
【Ruby】RubyonRailsPart6
http://pc11.2ch.net/test/read.cgi/php/1224838013/
0004デフォルトの名無しさん
2008/11/20(木) 06:33:07http://pc11.2ch.net/test/read.cgi/tech/1216829388/
0005デフォルトの名無しさん
2008/11/20(木) 06:33:54Ruby Home Page
http://www.ruby-lang.org/ja/
Rubyリファレンス(よくサーバーエラーになります)
http://www.ruby-lang.org/ja/man/
http://www.ruby-doc.org/ (英語)
リファレンスのHTMLヘルプ版配布
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
# Windowsで便利
Ruby FAQ
http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
Programming Ruby - The Pragmatic Programmer's Guide
http://www.ruby-doc.org/docs/ProgrammingRuby/
# 好評書籍をWebで公開中、ただし英語
逆引きRuby
http://www.namaraii.com/rubytips/
0006デフォルトの名無しさん
2008/11/20(木) 06:34:30http://raa.ruby-lang.org/
RubyForge
http://www.rubyforge.org/
# Rubyのアプリやライブラリが検索できる
GitHub RubyGems
http://gems.github.com/
http://github.com/
# 最近は RubyForge より GitHub が人気
日本Rubyの会 公式Wiki
http://jp.rubyist.net/
# メニューに表示されていない埋もれた情報ページ多数
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
# コードレビューが好評
Ruby hotlinks 五月雨版(日記やblogのアンテナ)
http://www.rubyist.net/~kazu/samidare/
Rubyの本一覧
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Ruby%A4%CB%B4%D8%A4%B9%A4%EB%BD%F1%C0%D2
<rubyXML/>
http://www.rubyxml.com/
Matzにっき(Ruby作者の日記)
http://www.rubyist.net/~matz/
0007デフォルトの名無しさん
2008/11/20(木) 06:38:34Ruby 初心者スレッド Hiki
http://starlet.s145.xrea.com/ruby/hiki/
Ruby Portal
http://ruby.morphball.net/portal/
■プレゼンテーション
Ruby会議2008
http://jp.rubyist.net/RubyKaigi2008/
http://www.nicovideo.jp/tag/rubykaigi2008
Ruby会議2007
http://jp.rubyist.net/RubyKaigi2007/
http://www.nicovideo.jp/tag/RubyKaigi2007
00082-7
2008/11/20(木) 06:40:230009デフォルトの名無しさん
2008/11/20(木) 08:38:130010デフォルトの名無しさん
2008/11/20(木) 08:52:17RubyのソースやCで書かれた拡張ライブラリをさっくり読むとよいかも。
それ自身が、CとRubyの連携のサンプルになってます。
0011デフォルトの名無しさん
2008/11/20(木) 09:53:52ttp://eto.com/d/EmbededRuby.html
ここからリンクされてる先を見れ
0012デフォルトの名無しさん
2008/11/20(木) 11:00:07YAMLは読み込んだらツリーな連想配列になっていて簡単に使えますよね?
そのように、XMLを読み込んだら連想配列になっていて欲しいのですが・・・
もちろん、XMLは単純な構造を想定しています。
0013デフォルトの名無しさん
2008/11/20(木) 11:05:44ttp://xml-simple.rubyforge.org/
0014デフォルトの名無しさん
2008/11/20(木) 11:48:47おお!ありがとう。検索でもそのライブラリがひっかかりました。
使ってみたいと思います。
---以下チラシのウラ---
Ruby MagazineでYAMLの説明で、
「データを配列とハッシュとスカラーだけで表現する簡易性こそが YAML 」
なんていう名言?がありまして、YAMLはデータ記述(マークアップではなく)に
向いていて感激したのですが、プログラマさん以外には
(HTMLに似ている)XMLの方が馴染み深かったりするのですよ。
それでYAML感覚でXMLを使えたら置き換えできそうと思ったしだい
0015デフォルトの名無しさん
2008/11/20(木) 22:10:43excel = WIN32OLE.new('Excel.Application')
excel.visible = false
excel.displayAlerts = false
などの定義の部分をクラス化し、使いまわそうと思っているんですが、
変数の"excel"や"sheet"辺りの変数について困っています。
というのも定義はクラスに任せ、実際の操作はメインソースでやろうと思っているのですが、
複数のインスタンスを作る際に変数をどうするかで悩んでいます。
何かうまい方法がありましたらご教授お願いします。
0016デフォルトの名無しさん
2008/11/20(木) 22:24:17定型的な初期化処理をまとめるってことだよね?
def new_excel
excel = WIN32OLE.new('Excel.Application')
excel.visible = false
excel.displayAlerts = false
return excel
end
ex1 = new_excel
ex2 = new_excel
0017デフォルトの名無しさん
2008/11/20(木) 23:30:32クラスじゃなくてモジュールだけど
module ExcelApplication
def self.new
app = WIN32OLE.new('Excel.Application')
app.visible = false
app.displayAlerts = false
app.extend(self)
return app
end
def hello ; p :hello ; end
end
excel = ExcelApplication.new
excel.hello
workbook = excel.workbooks.open(file)
sheet = workbook.sheets(1)
W32のapiは知らないんで前スレのを参考にした
001815
2008/11/21(金) 00:43:35ありがとうございます。とても参考になりました。
excel以外にもworkbookとsheetも定義する必要があり、教えていただいた方法のように個別にメソッドを定義しました。
一応WIN32OLEの定義部分のクラス化は出来たのですが、できればメインソースでインスタンスを生成するたびに
何度も(excel,workbook,sheet)を定義するのは避けたいのです。
現在↓
insname = NewExcel.new #インスタンス生成
excel1 = insname.new_excel
workbook1 = insname.new_workbook
sheet1 = insname.new_sheet
まとめて定義する方法はありません・・・よね?
試しに・・・と思って以下のような物を書いてみましたがダメでした。
def new_excel(excel,workbook,sheet)
excel = WIN32OLE.new('Excel.Application')
excel.visible = false
excel.displayAlerts = false
excel.workbooks.open(file)
workbook = excel.workbooks(1)
sheet = workbook.sheets(1)
return excel,workbook,sheet
end
>>17
ありがとうございます。モジュールですか。
メモリ節約などに役立ちそうですね。参考にさせていただきます。
0019デフォルトの名無しさん
2008/11/21(金) 04:46:10あと引数に代入しても、それはローカル変数だから意味がないよ。
def new_excel(file)
excel = WIN32OLE.new('Excel.Application')
excel.visible = false
excel.displayAlerts = false
excel.workbooks.open(file)
workbook = excel.workbooks(1)
sheet = workbook.sheets(1)
return excel, workbook, sheet
end
excel, workbook, sheet = new_excel()
002015
2008/11/21(金) 05:19:17すみません、fileは上には書かなかったんですがちゃんと渡してます^^;
なるほど、メインソースの方で定義するときにnew_excelの引数として3つ定義するんじゃなく、
左辺に並べて定義するんですね!引数と変数ってのがちゃんと分かってなかったみたいです。
ありがとうございます。
0021デフォルトの名無しさん
2008/11/21(金) 14:18:55webフレームワークを使おうとするとやっぱり、Railsとかになってしまうんでしょうか?
Railsはちょっと重そうだなーと思っていたのですが・・・
イメージとしてはベイジアンフィルタのPopFileのようなものです。
窓の杜 - POPFile
http://www.forest.impress.co.jp/lib/inet/mail/antispam/popfile.html
参考になるページはありませんでしょうか?
こういうのをやっている人っていないのかな・・・?
0022デフォルトの名無しさん
2008/11/21(金) 18:40:270023デフォルトの名無しさん
2008/11/21(金) 19:14:41>>21
その程度なら、Railsとか使わず、素のCGIでいいと思う。
サーバはWEBrickを使えば、Apacheとかいらないし。
つうか、現状ではクライアントサイドアプリなら、Rails以外を考えたほうがいいんじゃないかな。
0024デフォルトの名無しさん
2008/11/21(金) 19:16:180025デフォルトの名無しさん
2008/11/21(金) 19:41:32WEBrick使うのなら、それこそ素のCGIじゃなくてwebrick/cgiとか使えば良いと思うんだが・・・
Rackを薦めたのはミドルウェアが便利なのと、後からWEBrickやFastCGI等への対応が楽だから
逆に、なぜ今あえて素のCGI(cgi.rbだよね?)を薦めるのかが疑問
0026デフォルトの名無しさん
2008/11/21(金) 21:47:13これ超オススメ。
Ruby による Win32OLE プログラミング
http://www.morijp.com/masarl/homepage3.nifty.com/masarl/article/ruby-win32ole.html
石井さんありがとう・・・
0027デフォルトの名無しさん
2008/11/21(金) 22:05:56もとの>>21を読もうよ。
>Rubyにて、デスクトップで使うツールのインターフェスを作りたいと思っています。
...
>イメージとしてはベイジアンフィルタのPopFileのようなものです。
RackとかFastCGIとかまったく関係ないよね?
002815
2008/11/21(金) 23:24:16お勧め紹介thxです。
ネットサーフィン中に偶然訪問してましたが、読みませんでした。
気合い入れて読んでみようと思います。
ありがとうございます。
0029デフォルトの名無しさん
2008/11/22(土) 00:44:54俺もそこを紹介しようとしてた。
>28
読め。
0030デフォルトの名無しさん
2008/11/22(土) 02:24:39#!/usr/bin/ruby
#html => openuriで取れた値。値が入っていることは p html で確認済み
html = "<html><head>AA 2バイト文字とか改行とかいろいろ</head><body></body></html>"
/<head>(.+)<\/head>/ =~ html
p $1
::Console::
nil
まったくわかりません。
よろしくお願いします。
0031デフォルトの名無しさん
2008/11/22(土) 02:26:29× /<head>(.+)<\/head>/ =~ html
以下どちらのパターンも同じ結果です。
○ /<head>(.+)<\/head>/imo =~ html
○ html =~ /<head>(.+)<\/head>/imo
0032デフォルトの名無しさん
2008/11/22(土) 03:11:58irbにコピペしたらちゃんと動いたよ?
irb(main):001:0> html = "<html><head>AA 2バイト文字とか改行とかいろいろ</head><body></body></html>"
=> "<html><head>AA 2バイト文字とか改行とかいろいろ</head><body></body></html>"
irb(main):002:0> /<head>(.+)<\/head>/ =~ html
=> 6
irb(main):003:0> p $1
"AA 2バイト文字とか改行とかいろいろ"
=> nil
0033デフォルトの名無しさん
2008/11/22(土) 06:15:54そうか、FastCGIの必要性はあんまり無かったな
じゃあメリットはミドルウェアだけか
0034デフォルトの名無しさん
2008/11/22(土) 09:08:58ん?>>31で動くパタンを自分で書いているけど、以下じゃ動かない理由を知りたいってこと?
/<head>(.+)<\/head>/ =~ html
答えは正規表現リテラルの m オプション。//imo の m ね。
m をつけるとピリオドが改行にマッチするようになる。
つけないと「AA 2バイト文字とか改行とかいろいろ」の「改行とか」にマッチしない。
http://www.ruby-lang.org/ja/man/html/_A5EAA5C6A5E9A5EB.html#a.c0.b5.b5.ac.c9.bd.b8.bd.a5.ea.a5.c6.a5.e9.a5.eb
Regexp.MULTILINE も参照。
003530
2008/11/22(土) 12:51:43>>32
すいません、何故かnilなんです
>>34
>>30に書いたとき、実際に付けているimoオプションを書き込み付け加えるのを忘れていて、訂正として>>31に追加しました。
>>31のプログラムでもマッチしない状態です。
こんな感じで動かしても、htmlには取得したHTMLがちゃんと表示されていますが、$1はnilになります。
#!/usr/bin/ruby
response = (〜net/httpで取得したやつ〜)
html = response.body #net/httpのbody部分を取得
p html #取得したURL先のHTMLファイルが正常に表示される
html =~ /<head>(.+)<\/head>/imo
header = $1
p header #-> nil
なんです。改行とか文字コードの違いとかって落ちかなと思っているのですが
不特定多数な文字コードからUTF8に統一する、ってことできますか?
0036デフォルトの名無しさん
2008/11/22(土) 13:15:28require 'net/http'
html = ""
Net::HTTP.start("www.yahoo.co.jp", 80){|http|
html = http.get("/").body
}
html =~ /<head>(.+)<\/head>/imo
header = $1
やっぱ動くって。
ruby -vと、変な省略をしない最小のコードを提示して。
ちなみにこっちは
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
003730
2008/11/22(土) 14:07:35#ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
website ={
"protocol" => "http",
"hostname" => "e-words.jp",
"parameter" => "",
"pathname" => "/w/EZweb.html"
}
require 'net/http'
Net::HTTP.version_1_2
port = 80
resp = ""
Net::HTTP.start(website["hostname"], port) {|http|
resp = http.head(website["pathname"] + website["parameter"])
if resp['content-type'] =~ /text/i
resp = http.get(website["pathname"] + website["parameter"])
end
}
p resp.body
resp.body =~ /<head>(.+)<\/head>/imo
head = "<html><head>#{$1}</head></html>"
p head #-> "<html><head></head></html>"
0038デフォルトの名無しさん
2008/11/22(土) 14:08:16hostname => "www.yahoo.co.jp",
pathname => "/"
では正常に動きます。
0039デフォルトの名無しさん
2008/11/22(土) 14:10:57どうも正規表現にとらわれすぎて視野が一直線になってしまっていたようです。
すいません。
0040デフォルトの名無しさん
2008/11/25(火) 01:03:09じゃあ、sortメソッドは何の為に存在するのでしょうか?
0041デフォルトの名無しさん
2008/11/25(火) 01:21:310042デフォルトの名無しさん
2008/11/25(火) 02:20:09とか。
0043デフォルトの名無しさん
2008/11/25(火) 02:28:07x.foo==y.foo ? x.bar<=>y.bar : x.foo<=>y.foo
とかも書くね
0044デフォルトの名無しさん
2008/11/25(火) 03:19:53map{|e| [e,yield(e)]}.sort{|a,b|a.last<=>b.last}.map(&:first)
end
0045デフォルトの名無しさん
2008/11/25(火) 12:07:52Rubyって1000分の1秒単位でsleepするにはどのように書くのでしょうか?
0046デフォルトの名無しさん
2008/11/25(火) 12:29:51じゃあPOSIXな環境ではselectのようなタイムアウトを
ミリ秒などで指定できるシステムコールを使うのが
常套手段かな。
Windowsだとどうするのか知らないけど。
0047デフォルトの名無しさん
2008/11/25(火) 12:42:17とかじゃダメ?
0048デフォルトの名無しさん
2008/11/25(火) 17:27:58配列をCSVに書き込む際、配列の要素数がわかっていて例えば3個の場合は
csv << [ array[0], array[1], array[2] ]
とすれば大丈夫だったのですが、
要素数がその時々で変わる場合はどうすればいいんでしょうか?
0049デフォルトの名無しさん
2008/11/25(火) 17:54:49難しく考えちゃってるんだろうけど、Arrayクラスで渡せばいいんだから
csv << array
0050デフォルトの名無しさん
2008/11/25(火) 18:19:17そのまま渡せばいいだけだったんですね
場所指定が必要なものだと思い込んでいました。
ご返答ありがとうございました。
0051デフォルトの名無しさん
2008/11/25(火) 22:53:39100分の1の指定はできるですね。
1000分の1の指定は出来ないですね。
>>46
無料のレン鯖で動かす時に使うつもりです。
0052デフォルトの名無しさん
2008/11/25(火) 23:22:19いや、普通に指定できるでしょ?
ただ、期待した長さで帰ってこないだけじゃないの?
1000分の1秒単位で正確にsleepさせたいときはOS選びから始めるしかないよ。
0053デフォルトの名無しさん
2008/11/26(水) 00:04:030054デフォルトの名無しさん
2008/11/26(水) 00:07:160055デフォルトの名無しさん
2008/11/26(水) 06:53:361000分の1秒単位でCPUのタイムスライスもらえるわけないでしょ。
ざらに1秒返ってこない。
0056デフォルトの名無しさん
2008/11/26(水) 10:12:580057デフォルトの名無しさん
2008/11/26(水) 16:16:51NotImplementedErrorで突っ返される。代替案はないの?
0058デフォルトの名無しさん
2008/11/26(水) 18:20:050059デフォルトの名無しさん
2008/11/26(水) 19:29:07Win32APIの使い方がまったく分からんorz
MSDNを読むとOpenProcessのプロトタイプ宣言がこれだから
HANDLE OpenProcess(
DWORD dwDesiredAccess, // アクセスフラグ
BOOL bInheritHandle, // ハンドルの継承オプション
DWORD dwProcessId // プロセス識別子
);
どう指定しろと
0060デフォルトの名無しさん
2008/11/26(水) 19:45:54あとは根性で
0061デフォルトの名無しさん
2008/11/26(水) 20:04:12定数の値が分からん\(^o^)/
0062デフォルトの名無しさん
2008/11/26(水) 20:23:46Platform SDKを手に入れてヘッダの中を探すんだ
0063デフォルトの名無しさん
2008/11/26(水) 21:36:30ぐぐれ
0064デフォルトの名無しさん
2008/11/27(木) 10:43:40http://gist.github.com/29658
0065デフォルトの名無しさん
2008/11/27(木) 13:13:54CSVのエンコーディングを明示的に指定したいときは、
一回KConvかまして$KCODEで指定したエンコードに変換後に
CSVクラスへ渡すしかないかな?
0066デフォルトの名無しさん
2008/11/27(木) 18:42:36http://www.moongift.jp/2008/11/ruby_on_rails_portable/
からダウンロードした RailsPortable っていうフォルダを
PCのハードディスクに展開すると170MB程度の大きさなのですが
そのフォルダをUSBメモリにコピーすると900MBを超える大きさになります
なぜでしょう?
ちなみにこのアプリでRubyの勉強をすることは可能ですよね?
自宅外(自分専用のPC持ってません)のPCを使って学習出来ればと思いまして
■ このスレッドは過去ログ倉庫に格納されています