1 名前:730 [2008/09/15(月) 17:25:21 ] プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 【Ruby1.9 は不安定な開発版であり初心者には全く向きません】 【最新安定版の Ruby1.8.7 の使用をお勧めします】 ※1.8.7 は1.8 と 1.9 の橋渡しをするためのリリースです。 1.9 の新機能の一部が利用可能なので初学者にお勧めです。 ※ただし十分安定しているとは言えないので プロダクション環境での利用にはお勧めしません。 関連スレやURLは>>2-8 あたりを見てください。Ruby on Railsの質問はRailsスレへ。 ■質問する人へ 質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。 ・モジュール名やエラーメッセージでググる ・マニュアルで引っかかったクラスの記述を探す www.ruby-lang.org/ja/man/ ・FAQを一応読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ 質問には以下を書くこと。へたくそな質問は再提出を要求される。 ・詳しい内容(「動きません」「うまくできません」では回答しようがない) ・エラーメッセージ(自力で訳さずなるべくそのままで) ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる)) ・最終的にやりたいこと(もっとよい方法がある場合が多いので) 回答してくれた人には「ありがとう」のひとことをいってあげて。 ■回答する人へ 相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。 それができないならこないこと(だって初心者スレだもん)。 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
267 名前:デフォルトの名無しさん [2008/09/27(土) 01:13:27 ] TkcItem.newはrequire 'tk' だけでできるのに TkcItemのサブクラスを作ろうとするとrequire 'tk/canvas'が必要になるのはなぜ?
268 名前:デフォルトの名無しさん [2008/09/28(日) 03:56:41 ] rubyをつかって刑務所からプログラミングしてるんですか?
269 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 14:35:51 ] Rubyでバイナリを16進数文字列に変換するのはどうしたらできますか。 packとかunpackがわかりくすぎて、理解できません
270 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 14:55:34 ] packとか使え packはC参考にしれ
271 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 15:22:39 ] open(ARGV[0], 'rb'){|f| while bin = f.read(16) bin.each_byte{|byte| print '%02X ' % byte } puts end }
272 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 15:46:05 ] class XY attr_reader :x, :y def xy=(x, y=nil) @x = x @y = y || x end end a = XY.new a.xy=(1, 2) というのを実行すると、 SyntaxError: compile error syntax error, unexpected ',', expecting ')' となってしまいます。 普通にメソッド呼んでいるだけなんですが、何が悪いんでしょうか。。 =のつかないメソッド名だと大丈夫なんですが…
273 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 17:00:00 ] www.ruby-lang.org/ja/man/html/_A5AFA5E9A5B9A1BFA5E1A5BDA5C3A5C9A4CEC4EAB5C1.html#a.b1.e9.bb.bb.bb.d2.bc.b0.a4.ce.c4.ea.b5.c1 リファレンスマニュアルによると、代入演算子は次の形で再定義できるという def foo=(value) # obj.foo = value なので、xy=(x, y=nil) のメソッドを呼ぶには次のようにする a.xy = 式 そのエラーは式の部分が (1,2) なので文法エラーになっているということ。 value = (1, 2) という式はRubyでは解釈できない。 という話だと思う。 たぶん。 信用度 80% くらい。
274 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 18:47:03 ] RoR動くレンタルサーバーって 高いところしかないの? さくらのライトプランで動かないの? なるべく月500円以下のところを 紹介してほしいんだけど。
275 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 18:58:38 ] 500円以下はありえない そもそものRoR動かすこと自体がかなりサーバ負荷の高い行為だから、 収容人数の多い安いレンタルサーバでは実用的な速度ではまず動作しない 専用サーバと呼ばれる、少人数あるいは自分たちだけの買い取りサーバを使うんだね
276 名前:272 mailto:sage [2008/09/28(日) 19:02:27 ] >>273 ありがとうございます。 a.xy=(何か) という形は単なるメソッド呼び出しだと思っていたのですが、 実際には代入用の特別な呼び出しで、「何か」の部分は代入の右辺に 使えるような式である必要があり、普通のメソッドと同じようには いかない、ってことなんでしょうか。 結局、調査の末これならできるということがわかりました。。 a.send(:xy=, 1, 2) 実際は ActiveRecord::Base#attributes= なんですが。
277 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 19:09:56 ] a.xy=1, 2とかa.xy=*[1, 2]でもよさそうに思う
278 名前:272 mailto:sage [2008/09/28(日) 19:41:41 ] >>277 それだと @x が [1, 2] になっちゃうんです… ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin8]
279 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 20:17:45 ] class XY attr_reader :x, :y def xy=(v) @x, @y = v end end a = XY.new a.xy = 1, 2
280 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 20:55:34 ] Rubyで、パイプのようなものを実現するにはどうしたらいいですか input = "aaa¥nbbb¥nccc¥n" output = open("|cat -n", "r+b") do |io| io.write(input) if input io.read end でいけるかなと思ったのですが、io.read()でブロックされるようで、うまくいきません。
281 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 21:06:48 ] >>280 io.close_write()をいれるとできました。 input = "aaa¥nbbb¥nccc¥n" output = open("|cat -n", "r+b") do |io| io.write(input) if input io.close_write() ## 追加 io.read end
282 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 21:17:08 ] popen
283 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 21:29:15 ] じゃあ俺はreadpartialを推しておく
284 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 21:41:56 ] windows版のrubyが起動に物凄く時間がかかるんですがなぜでしょうか・・・?
285 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 21:57:46 ] rubygems読み込んでるんだろ
286 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 22:18:04 ] >>276 www.ruby-lang.org/ja/man/html/_B1E9BBBBBBD2BCB0.html >プログラミングの利便のために一部のメソッド呼び出しと制御構造は演算子形式をとります。 >ほとんどの演算子は特別な形式のメソッド呼び出しですが、(後略) ということだそうだから、普通のメソッド呼び出しとは違うんだろう。 だいたい2項演算子の引数が複数だったりすると混乱の元にしかならんしな。 f( a + 1, 2) と書いたら、実は f( a+(1, 2) ) でしたとか。
287 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 04:05:45 ] ちょっと質問なのですが、Vistorパターンがいまいちわかっていません。 サンプルコードを見ても実際にどんな時につかうのかが? Rubyのライブラリなんかで、Vistorパターンを実際に使っているソースはありませんでしょうか?
288 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 04:09:01 ] >>274 安いRailsのホスティングサーバー - Core d.hatena.ne.jp/core/20080906/1220715811#c 野ログはノロキュアMaxHeart - SlicehostでそれなりにRailsを使っている感想 , Rails動かす環境が欲しい人必見 cureblack.com/20080909.html#p01 まともに動かすには、VPSぐらいでないと無理くさいです。 レンサバでRamaze動かしている人(CGI駆動でw)はいた。 rubyの軽いWebアプリケーションフレームワークを試してみた - NAT’s Programming Champloo d.hatena.ne.jp/NAT_programming/20080817/1218957113 さくらのレンタルサーバでramazeを動かしてみた - NAT’s Programming Champloo d.hatena.ne.jp/NAT_programming/20080817/1218962624
289 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 04:14:09 ] >>227 C/C++とか触れそうにないなw あなたには選択肢が少ない、ひまわりとかDelphiがオススメ
290 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 08:23:51 ] >>287 Visitorははまるときはピッタリはまるんだけどね。 Visitorパターンの例題として見るだけなら少し大きめだが、RDのパーサとか rubyforge.org/projects/rdtool/
291 名前:デフォルトの名無しさん [2008/09/30(火) 00:28:47 ] Mac OSXにRails環境を作ってみたのですが、プロジェクトを作成すると ファイルの文字コードが全て iso-2022-jp-3で作成されてしまいます。 プロジェクト作成時にutf8でファイル生成するオプションなどはありますか?
292 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 08:23:04 ] railsコマンドが作る初期プロジェクトに使われる文字の範囲では ISO-2022-JP-3(初期ASCIIでスタート)とUTF-8は同じだと思うんだが。
293 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 10:00:53 ] どんなソフトやらでISO-2022-JPでなくISO-2022-JP-3だと判定されたのかはちょっと気になるな cat > hoge.txt とかで作ったファイルも同じ判定ならコンソールか何かの設定の問題か、その判定ソフトの癖だな
294 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 11:52:43 ] RoR のフォームヘルパには Smarty でいう html_options みたいなヤツはないの?
295 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 14:09:23 ] >>294 html_optionsみたいなのがなにかを説明しないと、わかるわけがない
296 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 14:20:57 ] >>295 ttp://www.smarty.net/manual/ja/language.function.html.options.php
297 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 15:39:13 ] まずは「rails select option」でぐぐろうぜ
298 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 17:10:47 ] うぉーあった。ありがとうございます >>297 Rails入門(本)には text とか radio は載ってたのにこれは載ってない。 でもないのはおかしいなと思ってた。date_select まであるじゃんかよ…。
299 名前:287 mailto:sage [2008/09/30(火) 17:21:04 ] >>290 thanx 見てみます。
300 名前:デフォルトの名無しさん [2008/09/30(火) 23:36:49 ] >>292 特に気にする必要はないっていうことですか? 今のところ特に問題はないですが、聞いたことない文字コードだったので そのうち何か問題がでないかと心配です。 >>293 vimに読み込ませた時の文字コードがiso-2022-jp-3で表示されてます。 linux上で作成したutf8のファイルは、問題なくutf8で表示されていますし 他の文字コードに関しても作成時と同じように表示されてるので ファイルの認識自体は特に問題ないと思いますが。。。 catで作成したファイルもiso-2022-jp-31で作成されているようですし FInder上で作成したファイルもiso-2022-jp-3なので、たぶんMacOSXでは 指定がない限り、その文字コードで作成してしまうのではないでしょうか。 なにぶん昨日Macにはじめて触りまして。。。詳しいことが。。。 とりあえずOS側の問題のような気もするので、そっちで聞いてみます。
301 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 08:21:11 ] >>300 とりあえずodなどで問題のテキストをバイナリダンプしてみては?
302 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 11:09:10 ] >>300 文字エンコード自動評価の順が iso-2022-jp-3 が最初なんだろう vimrcの文字エンコード推測設定がMacOSX向きじゃないんだと思う きっとどっかのサイトのを意味もわからず丸コピペしたのだと推測
303 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 12:05:42 ] >>298 書名をさらして著者に改善を要求しよう
304 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 12:13:37 ] バージョンアップ後のフォローを求めるアホもいるので注意 ちゃんと冒頭に「バージョン○○を対象にします」って書いてあんじゃんよ
305 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 15:00:25 ] >>304 今回の select option に限って言えば、どのバージョンでもあるわな
306 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 19:14:46 ] ruby gemsでdescriptionで検索することってできないのでしょうか? gem search --details --both --all hoge とやっても、名前でしか検索ができません。 説明欄も検索したいのですが・・・
307 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 21:24:06 ] searchは最終的にSourceIndex#searchに処理を委譲してて、 そこでは名前がマッチするモノを探しているだけのようだ。 rubygems/source_index.rbの spec.name =~ gem_pattern and というところ(手元だと272行め)を (spec.name =~ gem_pattern or spec.description =~ gem_pattern) and のように変更すればdescriptionも検索対象にできる。 他にsummaryなども、orで連結して探すようにできるはず。 残念ながら、--detailは出力をkwskするためのオプションだな。
308 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 11:44:41 ] OSはXP Home SP3、Rubyは1.8.6(最終版)です。 以下のプログラムを実行してもうまく動かず、何がいけないのか分からず困っています。 sum =0 puts "点数を入力してください。" a=0 ←なんとなく初期化してみた。あってもなくてもダメ for i in 1..5 print i, "番:" a = gets.chomp sum += a ←ここが鬼門。ためしにforのiにするとちゃんと動く # print a,"\n" # sleep 1 end print "sum=#{sum}" おそらく7行目のsum += aが問題なのですが何がいけないんでしょうか・・・? 助言頂けるとありがたいです。
309 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 11:49:49 ] "うまく動かず"を出し惜しめせずに書けw
310 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 11:51:06 ] sum += a.to_i かな
311 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 12:07:40 ] >>309 コマンドプロンプトだと1つ目の数値を入れたとたん終了・・・ >>310 できた!thx! getsで入力した数値を文字列だと思ってたのか・・・orz ほんとありがとう、数値ひとつ入力するのに1時間奮闘してた・・・
312 名前:311 mailto:sage [2008/10/02(木) 12:26:45 ] またすぐに聞きに来てごめんなさい・・・orz aを配列にしたとたん動かなくなりました・・・ 実行しても「点数を入力してください」すら表示されず終わります。 sum =0 puts "点数を入力してください。" a[] ←いらなそうだけど一応宣言 for i in 1..5 print i, "番:" a[i] = gets.chomp sum += a[i].to_i end .to_iの使い方がおかしいのかもと思い、その行をコメント化してみたりしましたがうまくいかず・・・ gets辺りで躓いてると思います。 お手数ですがどなたかアドバイスください。 入力で躓きまくってる私はRuby向いてないのかなぁ・・・orz
313 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 12:34:11 ] sum = 0 ary = [] puts "点数を入力してください" for i in 1..5 print i, "番: " ary[i-1] = gets.chomp.to_i end sum = ary.inject(0) {|a, x| a + x } print "合計: ", sum, "\n"
314 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 12:37:37 ] どういう勉強の仕方をしてるのか気になる。
315 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 12:39:51 ] >>312 「実行」って、コマンドプロンプトから ruby hoge.rb とかしてる? 普通はこうなる > ruby hoge.rb 点数を入力してください。 hoge.rb:3: undefined local variable or method `a' for main:Object (NameError) あと入門書嫁
316 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 12:49:11 ] 本題に関係ないとはいえ一応書いておくが、Rubyでforはめったに使わない 普通はブロックを使う
317 名前:312 mailto:sage [2008/10/02(木) 12:50:02 ] >>313 おお・・・ちゃんと動く・・・ありがとです。 for文の中でsumに足していかないとは・・・! sum周りが初見なんで調べないとですね。 ともあれthxです。 >>314 Cは多少やってたのでCの頃に書いた簡単なプログラムをRubyに書き直してみてるところです。 文法がずいぶん違って躓きまくりです・・・ >>315 いや、「.rb」をそのままダブルクリックで実行してます。 だからsleep入れたりしてすぐに消えないようにしてたり・・・ 基本はRDEで実行してます。 「たのしいRuby 第2版」を参考にしてますが、必要な所だけ探して読んでるのがいけないかもですね・・・
318 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 13:19:11 ] コマンドライン実行のスクリプトをダブルクリックしてどうする 正常終了でウィンドウ閉じるだろ
319 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 13:36:57 ] 最後にsystem('pause')入れたりする
320 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 14:02:52 ] >>317 RDE使ってるなら、プログラムを実行した後 下の出力ウインドウにエラーメッセージとか出てるんじゃないか? それを貼り付けるべし 出ないようならコンソールから実行
321 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 14:22:57 ] >>318 いやだからsleep入れたりしてるんですが、エラーの時は関係なく終わるんです。 >>319 Rubyの場合はスタンダードライブラリを読み込まなくても使えるんですね。(Rubyには存在しない? 活用させていただきます。 >>320 一応出ますね。以後貼り付けます。 みなさんありがとうございます。またすぐに来そうで心配ですが、その時はよろしくお願いします。
322 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 18:02:43 ] バッチファイルにしてやればエラーが出てもポーズさせるようにできるよ。 ruby -x "%~0" || pause と書けばエラーが出たときに限ってとまる。 test.bat ruby -x "%~0" pause goto :eof #!ruby put "hello"
323 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 19:08:34 ] >>322 横からだがサンクス これを.rbに関連付けしておけばよいのか・・・ || でエラー時だけ止まるのかいいな、これ
324 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 22:15:24 ] rdocで#:nodoc:と指定されてる要素も無理矢理ドキュメント化するような オプションとか方法とかってありますか?
325 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 23:44:42 ] >>324 そんなのはないから自分で #:nodoc:を消せばいいじゃん cp -pr src1 src2 find src2 -type f | xargs perl -pi 's/:nodoc://'
326 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 01:37:13 ] >>325 なるほど 参考にさせていただきます ありがとうございました
327 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 02:38:35 ] >>325 そこでrubyでもsedでもなくperlかよw
328 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 11:54:46 ] >>327 1 linerでの置換ならrubyよりperlのほうが便利 sedは-pオプションがない
329 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 12:52:51 ] www.goto.info.waseda.ac.jp/~fukusima/ruby/python-j.html これ教えてもらってpythonから宗旨替えするのを検討してるんだけど 本当にpythonのモジュールが問題なくつかえるの? ctypes boost.python numpy matplotlib PIL が使えるかが一番問題なんだけど
330 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 13:02:03 ] >>329 現在の Ruby は 1.8.7 です
331 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 13:09:37 ] (いろいろとpython側もruby側も追随してないだろうから、やめるのが吉、ってことか...)
332 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 15:59:38 ] >>329 作者に聞くか、自分で試してみるしかない。 つうか、PerlやPHPならまだしも、Pythonから宗旨替えする理由って何?
333 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:24:32 ] >>332 借りてるレンタルサーバーでRubyは動くけど pythonが動かない railsが便利なら使ってみたい
334 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:30:26 ] >>333 Railsを実用的な速度で使うなら、 別プロセスのサービス(MongrelやFastCGI)か Apache組込のPassengerが必要になる。 レンタルサーバではどちらもできないことが多いので、注意。
335 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 21:35:41 ] Windowsで、text ディレクトリのテキストファイルに対して start コマンドを使おうと require 'shell' sh = Shell.new Dir.glob("text/*.txt").each do |path| path.gsub!(/\//,"\\") sh.system("start", "#{path}") end というスクリプトを作りましたが c:/ruby/lib/ruby/1.8/shell/command-processor.rb:352:in `find_system_command': Command not found(start). (Shell::Error::CommandNotFound) というエラーが出ます。どうしたもんでしょうか。
336 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 21:46:08 ] 普通にsystem使ったら?
337 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 22:09:57 ] >>328 sedのデフォルトの動作が -p 指定時のPerlと同じだろ。 おまえさんが言いたいのは -i じゃないのか? でもこれも GNU sedならあるけどね。
338 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 22:12:47 ] >>335 gsub!の置換後の文字列だけどそれでいいのか? あと startはcmd.exe の内部コマンドだからそれだとまずいだろう
339 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 23:13:37 ] >>337 >おまえさんが言いたいのは -i じゃないのか? その通りだ orz エスパーさんくす
340 名前:デフォルトの名無しさん [2008/10/03(金) 23:40:05 ] nanoc: a Ruby CMS that generates static HTML ≫ home nanoc.stoneship.org/ nanocというRuby製のCMSを使ってみています。 nanoc autocompileコマンド時にhttpdサーバーが立ち上がります。 しかし、ブラウザでlocalhost:3000/ というデフォルトのアドレスにアクセスしても 画像が何故か読まれません。 そこで、autocompileコマンドのソースを追って調べていたのですが、 nanoc: lib/nanoc/extra/auto_compiler.rb@55a1480e2719 nanoc.stoneship.org/hg/nanoc/file/55a1480e2719/lib/nanoc/extra/auto_compiler.rb (ちょうど上記ソース)、255行目の File.read(path) ってもしかして、 Window環境だとバイナリ読めなくないですか? irbで試しましたが、pngを読むと、 irb(main):028:0> a = File.read "gradient-nav-white.png" => "\211PNG\n" みたいになってしまいます。
341 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 23:58:19 ] >>340 ソース読んでないけど、たぶんその通り UNIX畑の人間が書いたスクリプトには、バイナリモードを考慮してないものがある 最近だとRackでも見た
342 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 00:00:57 ] nanoc は面白そうだと思ってはいるんだが >>340 読めませんねえ module Nanoc::Extra class AutoCompiler def serve_file(path) [ 200, 'Content-Type' => mime_type_of(path, 'application/octet-stream') }, [ File.open(path,'rw'){|f| f.read} ] ] end end end をスクリプトの前に書いて再チャレンジだ >>341 ある意味とてもカッコ悪いよな
343 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 00:01:14 ] PNGのマジックナンバーに含まれるEOF文字で止まっているようですね。 バイナリモードのopenを使うように書き換えないといかんのかな。
344 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 00:03:24 ] なんか足りなかった module Nanoc::Extra class AutoCompiler def serve_file(path) [ 200, {'Content-Type' => mime_type_of(path, 'application/octet-stream') }, [ File.open(path,'rw'){|f| f.read} ] ] end end end Ruby のモジュールの多くは自前のスクリプトの先頭で書き換えることができる きっとこれから何度もお世話になると思うので覚えておくといい けっこう明確なバグ(で、自前で何とかなるもの)が残ってたりするもんだ
345 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 00:07:32 ] あれ、アクセスフラグrbじゃなくてrwなの?
346 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 00:10:45 ] rb だな
347 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 00:16:27 ] msっていつになったらテキストモードをなくすの?
348 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 00:24:32 ] >>347 Cやれ
349 名前:340 [2008/10/04(土) 00:48:47 ] みなさんありがとう。上手くいきました trap::IO - Rubyリファレンスマニュアル www.sakalab.org/prog-ruby/ruby-man-html-20080121/trap_IO.html > IO.readはファイルを開くときにバイナリモードにしないので、 > バイナリモードの存在する環境でバイナリファイルの読み込みに使うと 内容が壊れることがあります。 これかい!しかし何でこんな罠があるんだ。 罠ってのはバイナリモードじゃなくてIO.readのことだけど。 nanocの作者 mac っぽいし? -----lib/binary_patch.rb----- module Nanoc::Extra class AutoCompiler def serve_file(path) # Build response [ 200, { 'Content-Type' => mime_type_of(path, 'application/octet-stream') }, [ File.open(path, 'rb'){|f| f.read } ] ] end end end ------------------- >>344 参考に、これをサイトデータの lib 以下に放り込んでおくとOK的な。 後でさくーしゃにパッチ投げるか…… しかし、grepかけたら、他にも File.read あったり、 File.openでバイナリモードにしてないところがあるから、 直すところがいくつもありそうw
350 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 01:18:38 ] これはホントは標準添付の便利メソッドのフリしてバイナリモードガン無視の File.read が悪いんだよね ライブラリ作者はあんまり悪くない(注意不足なだけ) 2.0 では直ってたりするのかしら
351 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 01:29:27 ] 1.9にはIO.binreadというのがあるようだ。 あと、1.9以降はstdioと絶縁したんだっけか?
352 名前:デフォルトの名無しさん [2008/10/04(土) 01:48:42 ] ついでに別の質問があります。 nanoc で nanoc autocompile コマンド時にhttpサーバーと一緒にブラウザも起動したいのだけど、 httpサーバー起動前にブラウザが立ち上がりきってしまって上手くいかない・・・。 gemにあった launchyで起動させているんだけども、httpサーバー(デフォではThin) 起動後かもしくは、数秒後に起動することはできないでしょうか? 当初はこんなコードです。 require 'rubygems' require 'launchy' module Nanoc::Extra class AutoCompiler alias original_start start # :nodoc: # Boot web browser before original start def start(port, handler_name) port ||= 3000 Launchy.open("localhost:#{port}/ ") if defined?(Launchy) original_start(port, handler_name) end end end
353 名前:デフォルトの名無しさん [2008/10/04(土) 01:51:50 ] で、Threadを使ってみようとしたんだけどもネイティブスレッドじゃないせいか 上手くいきませんでした。何かよい方法はないものでしょうか? def start(port, handler_name) port ||= 3000 t = Thread.new do Sleep(3) Launchy.open("localhost:#{port}/ ") if defined?(Launchy) end original_start(port, handler_name) t.join end
354 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 02:37:21 ] >>352 while (3000ポートに接続できない) sleep(1) # 1秒待つ end
355 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 02:44:59 ] >>335 WindowsでRubyならWIN32OLEで一択. require 'win32ole' fso = WIN32OLE.new('Scripting.FileSystemObject') shell = WIN32OLE.new('WScript.Shell') Dir.glob('text/*.txt').each do |path| shell.Run(fso.GetAbsolutePathName(path)) end 下記記事も参照すると吉 ttp://jp.rubyist.net/magazine/?0004-Win32OLE
356 名前:352 [2008/10/04(土) 02:52:37 ] >>354 どうも original_start() でキー入力待ちになってしまうのです。 sleepするところだけメインと平行して走らせることができないかな、と思ったしだいです。 gemにあった win32-thread もつかって見ましたが、 > nanoc autocompile win32 thread mode (rubyパス)/lib/ruby/gems/1.8/gems/launchy-0.3.2/lib/launchy/b rowser.rb:25: [BUG] cross-thread violation on rb_thread_schedule() ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32] This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information. とか出るしダメポ……
357 名前:デフォルトの名無しさん [2008/10/04(土) 02:53:16 ] >>355 「全部WSHで書けばいいじゃん」って思うよね? うん,俺もそう思う. Jscriptとかも使ってみると意外と便利なんだよなぁ.
358 名前:352 mailto:sage [2008/10/04(土) 02:57:28 ] 深夜に何度もすいません。 キー入力待ちでもsleep後に平行してブラウザが起動してくれました。大丈夫でした。 httpdの起動が遅いせいか、どうもタイミングが悪かったようです。 >>354 を実装してみたいと思います。ありがとうございます。
359 名前:352 mailto:sage [2008/10/04(土) 03:33:52 ] # Boot web browser before original start def start(port, handler_name) require 'open-uri' require 'resolv-replace' require_gem('launchy', true) port ||= 3000 t = Thread.new do uri = "localhost:#{port}/ " loop do begin exit_loop = false open(uri) do |f| puts "Eureka #{uri} !"; exit_loop = true end break if exit_loop rescue end sleep(1) end puts "Launching browser..." Launchy.open(uri) if defined?(Launchy) end original_start(port, handler_name) t.join end >>354 をこんな感じで行けました。 もっと短くかければよかったのですが。
360 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 04:06:35 ] テキストモードとか意味不明。 ただこういうバグを生むために存在するとしか考えられん。 まあでもそういうのを考慮する環境がクライアント機では90%以上を占めてるので仕方ないか。。
361 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 04:10:20 ] だからCやれって テキストモードが生まれたわけがわかるから
362 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 04:35:54 ] >>361 Cは平素より使用しているが、どうしてテキストモードなるものが存在する必要があるかは理解できない。 ここで、「ググレ」やリンクを貼る行為ではなく、あなたの言葉での説明希望。
363 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 07:12:40 ] ちゃんとした文責のある文章を拒否して、名無しさんの言葉だけ求めるってw 「知りたい」んじゃなくて「追い込みたい」のが丸わかり。 土曜の早朝から何を厨臭いことを。
364 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 07:17:11 ] 隔離スレにお帰り
365 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 08:31:49 ] むしろCのstdioがマシンごとに改行の内部表現が異なることを意識して テキストモードとバイナリモードを用意して抽象性を確保してるんだから UNIX使いもちゃんと使い分けろって話になりはしないの?
366 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 09:50:05 ] >>363 煽るだけならCスレへお帰りください
367 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 10:23:42 ] >>362 >Cは平素より使用しているが、どうしてテキストモードなるものが存在する必要があるかは理解できない。 たんに、プラットフォームによって改行を表す記号が違うので、それを隠蔽して互換性を確保するモードを用意しただけ。 >ここで、「ググレ」やリンクを貼る行為ではなく、あなたの言葉での説明希望。 ほんとにCやってるなら、このくらい分かるだろ。 まずは「教えてください」という言葉を覚えような。