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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
684 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 20:12:44 ] パスは通しておいてね
685 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 20:12:47 ] >>682 パス通して#!rubyでいいんじゃね
686 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 20:13:15 ] > パスは通しておいてね Ruby本体をインスコしたディレクトリにパスは通しておいてね
687 名前:675 mailto:sage [2008/10/26(日) 20:20:11 ] 実験は成功した。普通に動いた。 今度は書き込みを実行したとき何も出力されないバグが出てきたが
688 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 20:34:55 ] cgi-exception入れとけ ttp://cgi-exception.rubyforge.org/
689 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:02:28 ] >>688 ローカルでは動く。リモートでは動かない cgi-exceptionをrequireしても(もちろんそのファイルごとアップロード済み) まったくダメ。
690 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:07:27 ] この分だと向こうで拡張ライブラリの一部が欠損しているというオチの可能性が 高そう。標準添付のライブラリ(cgi,nkf)しか使ってないのに…
691 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:24:01 ] CGI.unescape(cgi.params['うんこ']) を CGI.unescape(cgi.params['うんこ'][0]) にするとかさ、 NKF,nkf(略) を NKF.nkf(略) にするとかさ、 変数名やGET/POSTパラメタの名前に誤りがないかよく見るとかさ。
692 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:26:19 ] 環境を疑うよりは、まず自分のスクリプトを徹底的に疑うべき CGI-Exceptionでエラーが出ないなら次はprintfデバッグだ スクリプト中の適当な位置で、テキストファイルにログを書き出していけば たいていエラー箇所を特定できる (スクリプトが全く実行されない場合は、syntax errorかrubyパス絡みの可能性が高い)
693 名前:692 mailto:sage [2008/10/26(日) 21:37:21 ] あ、重要なこと書き忘れてた 初心者は(初心者じゃなくても一緒だけど)まず最小限のCGIスクリプトから書き始めろ 小さなスクリプトが動いてから、徐々に機能追加していかないと ただでさえ特定しづらいCGIのエラーが、余計に特定しづらくなる 少なくとも、そこそこの長さがあって環境変数が関わるような掲示板スクリプトを 一気に書き上げるべきではない
694 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:55:34 ] >>691 それにはすでに気づいて直した。直したが治らない。 >>692 syntax errorがらみはありえない(-cオプションで検査済み) パスもチェック済み(/usr/local/bin/ruby) >>693 一応ローカルで動作確認済みなので
695 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 21:59:42 ] これはRubyの問題ではない(まだ) >>694 だからその方法が間違ってると指摘されてるだろう CGIは「ブラウザでInternalServerErrorが出なくなるまで書き直す」という手法で開発してはいけない エラーメッセージを確認しない開発手法は糞だ
696 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:02:14 ] > 一応ローカルで動作確認済みなので 最小限のCGIスクリプトをサーバー上で動かさないとダメ 「環境変数自分で入れて、systemで実行して動いたから」というのではあまり意味がない
697 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:03:11 ] 結論: ・ 馬鹿にCGIを渡すな
698 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:04:18 ] >>695 とりあえずちょいと方法が思い浮かんだので実験してみる 1.まずは単なるテストスクリプトが動くか確かめる それすら動かないようならとりあえずこの環境での動作はあきらめたほうがよい 2.次にちょっとした工夫のなされたテストスクリプトを使って実験を行う 3.最後にその結果を見て検証する
699 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:04:55 ] RubyでWin32弄くる場合に必要な知識はRubyそのものではないのと同様に RubyでCGIやる場合に必要な知識はRubyそのものではないのだな ライブラリで吸収隠蔽すべきかどうかというのは悩ましいとこだと思う
700 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:05:14 ] >>696 Apacheでも動作確認済み 1時間以上前に実験した。
701 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:06:11 ] bbs.cgi:57: cgi.params['content']をCGI.unescapeに渡している Arrayが渡ったりしてNoMethodError -> あぼーん bbs:cgi:58: NKF,nkf('-s',content) カンマとドットのtypo とりあえず2つみっけ 動作確認済みとは笑わせるな それともHPのzipからまた弄ってるのか?
702 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:09:26 ] >>700 どう動作確認したのかkwsk 俺の環境でApache立ち上げて試してみたが、普通にアクセスしただけでエラーが出る 具体的には>>701
703 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:09:46 ] #!/usr/local/bin/ruby -Ks print "Content-type: text/html\n\n" print "<html><head><title>テスト</title></head><body><p>テスト</p></body></html>" このスクリプトすら動作してないのでもはやお手上げ
704 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:10:02 ] >>699 だねえ >>700 小出しにするな 自分で話をまとめられないなら諦めれ
705 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:11:17 ] > 小出しにするな > 自分で話をまとめられないなら諦めれ に一票 そして離脱
706 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:17:59 ] >最小限のCGIスクリプトをサーバー上で動かさないとダメ に対して >Apacheでも動作確認済み >1時間以上前に実験した。 って…明らかに話噛み合ってないな
707 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:19:34 ] >>703 自分でApache立ち上げて試すときは、そのパスじゃまず起動しないぞ #!ruby -Ks にして試してみ。それでも駄目ならお手上げ
708 名前:675 mailto:sage [2008/10/26(日) 22:21:49 ] >>706 まったくかみ合わない上に、どうやらこちらの問題ではなさそうだと 判明したのでたぶんこれ以上話し合っても結論が出る可能性は0(正確には) ただ、根本的バグが見つかったのは皆さんのおかげです。 皆さん、ご協力どうもありがとうございました。
709 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:24:45 ] >>707 もちろんローカルでやるときはそのためのパスにするわけですけどね。
710 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:31:12 ] >>707 Rubyの絶対パスを指定して動いてるので、いえるのは もはやここでは対処しようのない問題だということです。 とりあえずテストスクリプトすら動かないということは 他のところに持っていったのでこれ以上の深入りは 避けたいと思います。
711 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:32:04 ] >>703 ステータスコード書いてないから動かなくて当然 あと\n\nだとサーバが非winのとき困るんじゃないか?
712 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:33:31 ] てゆーかbbs.cgi自体も割りと…たぶん2、3個の虫食いじゃないよな、 斜め読みした感じでも
713 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:01:23 ] パーミッションの設定してませんでした><
714 名前:707 mailto:sage [2008/10/26(日) 23:10:02 ] >>711 あ、そうか NPH環境だとステータスコード無しでは動かないのか…
715 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:38:16 ] 超遅レスだけど >>656 >>668 >>669 ここら辺の話って本当なんですか? Rubyのライブラリのレファレンスでクラスの説明とか見るとよく::が使われてるけど あれは本当は間違いなんですか?
716 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:48:43 ] >>656 以外の使い方してるやつなんてあんのか 具体的になんてライブラリのリファレンスのどの部分よ
717 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 00:17:15 ] >>676 「vlookupのようなもの」ってのが、一体どんなのか分からんのだが vpreとvpstではさんで比較してるってことは、ソート済みだと仮定してもいいの? 良いなら二分探索が使える コードについて ・Range#eachがあるんだからeachを使う。Rubyでforは(めったに)使わない ・不要なbreakが見られる ・異常入力に対して99.9とかを返すのは、これでいいの?
718 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 01:26:18 ] >715 マニュアル内でのその記述はクラスの親子関係じゃなくて、大抵モジュールの定数のハズ。
719 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 01:33:20 ] 例えば、Objectクラス、IOクラス、Fileクラス、File::Statクラスの関係は IO と File::Stat の直接の親は Object クラス File は IO の子クラス File::Stat は File の子クラスではない File::Stat は File 内のクラス Rubyのコードで書くとこんな関係。 class Object end class IO < Object end class File < IO class Stat end end
720 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 01:34:23 ] 言うなれば :: でクラス同士を繋いでいたら、それは親子じゃなくて入れ子の関係ってところか。
721 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 01:47:29 ] Railsの質問はここでいいんでしょうっか? Web画面を共有出来るアプリが作りたいので 実験で5分で動くshootingstar使ったchatのテストアプリみたいなのを 動かしたんですけど自分でブラウザを更新しないと表示画面が更新されません。 バージョンは、shooting_star (3.2.7)とrailsは2.1.2でOSはUbuntuなんですけど。。
722 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 02:10:00 ] WebProg板にRailsスレあるよ 【Ruby】Ruby on Rails Part6 pc11.2ch.net/test/read.cgi/php/1224838013/
723 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 05:38:49 ] >>676 >>677-678 の気になる点。 1.vの1列目の値が小さい順で並んでいないと動かない 以後は1列目は昇順ソート済みであるものとする 2.vs == v[0][0], vs < v[1][0] なら (vs>vpre) && (vs<=vpst) は常に偽 forの最終ループでvpstがvの範囲外となりエラーを起こす vpst = v[v.size][0] => vpst = nil[0] 3.VLOOKUPと検索の仕様が違う VLOOKUPは完全一致検索または検索値を超えない最大値の検索 こちらは四捨五入もどきというか、小さい側優先の再近接値検索? (ちなみに四捨五入は中間値切り上げ丸め、つまり大きい側優先) 4.VLOOKUPと違って返値の列が2列目固定 それならMATCH関数にした方がまだ使いやすくない?
724 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 05:45:45 ] >>677 を問題点もそのままで、ちょっとRubyぽく書き直してみた def Vlookup(vs,v) vx = vs.to_f return -99.9 if vx < v[0][0] return 99.9 if vx > v[-1][0] v.each_cons(2) do |vpre, vpst| if vx>vpre[0] && vx<=vpst[0] # *1 return vx-vpre[0] <= vpst[0]-vx ? vpre[1] : vpst[1] # *2 end end nil[0] # *3 end *1 検索対象が昇順なら"vx>vpre[0] && " 部分は不要 というか、ここを削れば問題点2は解消する *2 3項演算子といってexcelのif関数のようなもの (cond ? retA : retB) *3 問題点2のエラーを発生させるためのもの。 *1の対策を実施すればこの行には到達しないので削除してよし 高速化とか一切していないので悪しからず。 >>717 の言うとおり、二分検索するのがいいんでない。 適当にコード見て書いただけなんで、バグとか指摘の間違いとかあるやも。
725 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 05:51:25 ] >>711 ほぼ参考書のままです。 とりあえずステータスコードをつけて動くか確かめてみます
726 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 05:59:36 ] 結局Content-typeの改行コードを\r\nにしたら動きました
727 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 06:22:47 ] >>726 それは誤りだ
728 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 07:26:44 ] >>727 一応めでたく完成して新しい追加機能2つ(日付表示・連投規制)を 付け加えました。たぶんこれで実運用上、書き込みがぶつからなければ なんとかなると思います。タグ検索機能はなんか変ですが おいおい何とかします。
729 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 08:20:38 ] >>727 誤りではないだろう、HTTPの標準改行コードは\r\nだ 出力先がバイナリモードでさえあれば問題はない
730 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 21:40:37 ] >>716 >>718 >>719 Java出身のruby初心者だったものでクラスライブラリはクラスの継承で繋がってると思い込んでました。 なるほど、rubyはモジュールや入れ子のクラスを多用するんですね。 勉強になりました。ありがとうございました。
731 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 22:15:18 ] Javaだってよく使うだろう。
732 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 22:25:44 ] RubyやPerlって一体なにに使う言語なんですか? Htmlに組み込む言語という解釈でいいんですか?
733 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 22:41:28 ] >>732 だいたい何にでも使う
734 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 23:02:23 ] テキスト処理をするのに使う テキスト処理と聞いて何も思いつかない場合はまだスクリプト言語に用がないということなので PerlやRubyのことはすっぱり忘れて別なことを楽しみましょう
735 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 00:49:43 ] rubyはrailsのために使います。 フリーだと現時点で一番効率よく稼げるのrailsです。 3人月の案件で700は固いから月給200万ですよ。
736 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 17:05:00 ] 日本語でおk
737 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 19:13:55 ] >>732 >Htmlに組み込む言語 それはPHP
738 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 20:26:14 ] >>737 HTMLがPHPになるんですか? PHPがHTMLになるんですか? 組み込むってそういうことですよね?
739 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 20:54:46 ] 画面分割はどうやればいいんですか? 自動的に隠したり、分割を×ボタンで消したりする機能のパックになったコントロールとかあるんですか?
740 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 20:57:37 ] >>739 Webクライアントの仕組みについて理解してから来なさい。
741 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 20:58:32 ] >>739 えーと… Rubyの仕事ではないので、GUIに何を使ってるか調べて、それに関するスレなりサイトなりに行くといい
742 名前:デフォルトの名無しさん mailto:sage [2008/10/28(火) 21:18:58 ] @蠣←これを右クリでコピーする Aスタート→すべてのプログラム→アクセサリ→メモ帳を起動 B編集→貼り付け C編集→すべて選択 D変換キーを押す
743 名前:676 mailto:sage [2008/10/28(火) 23:44:49 ] >>717 説明不足でした。私がやりたいのは、以下のものです。 ・1列目にソート済みの数値が入っている ・2列目には1列目の各行に対応する数値が入っている ・ある数値(入力値)が来た時に1列目の中から最も近い値を探し、それに対応する2列目の値を返す ・もし入力値が1列目の数値の上下限から外れていたら、それぞれ99.9か-99.9を返す です。 >・Range#eachがあるんだからeachを使う。Rubyでforは(めったに)使わない 始めたばかりなもので。。。今後はeachを使います。(ちなみに速度に差はありますか?) >・不要なbreakが見られる 入力値が上下限から外れていたら、関数の中のif文より後のfor文にいれたくなかったので使いました。これを見てからelseに書き換えました。 (一般的にbreakは多用しない方がよいのですか?) >・異常入力に対して99.9とかを返すのは、これでいいの? 異常を示す文字列にしようかとしましたが、今、私がやりたいことにおいて99.9で十分なのでこうしました。
744 名前:676 mailto:sage [2008/10/28(火) 23:45:30 ] >>723 >1. 書き忘れていましたが、ご指摘のとおりソート済みを仮定しています。 >2. ちょうどそのエラーに出くわしていたところでした。。。 >3. 事前に一応調べてはみたのですが、ちゃんと理解できていなかったです。 また数学がよくわかっていないため、2の事態が発生しました。 >4. MATCH関数を知らなかったので調べてみましたが、どのように適用すればよいかわかりませんでした。もう少し詳しく教えていただけないでしょうか。 >>724 知らない事がありすぎるのですが、みやすくなったので使ってみたいと思います。 速くなるのも教えていただけると助かります。。。
745 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 05:33:04 ] forは内部的にeachを呼び出すそうだから、速度差など無いに等しい。 どうしても気になるなら一億回くらい空ループ回して計ってみるといい。 まぁ、仮に10倍の速度差があったとしても、今は気にする必要ない。 プログラムの高速化はまず何よりもアルゴリズムが最優先。 小手先の最適化に手をつけるのはその後だね。 breakは単に使い方が悪い。 >>677 の最初の2つは先にreturnするので、絶対に到達しない。 最後のはbreak後returnしかしていないので、returnで置き換え可能。 breakせずに抜けるパターンの場合、必ず範囲外アクセスで落ちる。 つまりすべての箇所で何の役にも立っていないというわけ。 異常入力にマジックナンバーを返すのもありだけど、発生頻度が低く 検査箇所が多いようなら例外(Exception)を発生させたほうがいいよ。 コードの見通しがまるで違ってくるから。 VLOOKUPは検査値に対応する行と指定した列が交差するセルの値を 返すのに対し、MATCHは検査値に対応する値の位置を返す。 VLOOKUPでは検索範囲が左端の列で、かつ対応する値の列の高さと 縦位置が完全に一致しなければいけない。 MATCHとINDEXまたはOFFSETとの組み合わせなら、検査列に対応 する値の列が左にあってもよいし、縦にずれていてもよいし、列でなく 行(対応する値が横に並ぶ)でもよい。 その気になれば対応する値をnマスおきに飛び飛びにだってできる。 それに比べると列指定不可のVLOOKUPなんてあまりに不便すぎる。
746 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 05:37:23 ] MATCH関数もどき。 返値は0を起点とする点が異なる。 直近値検索方法は>>677 と同じ。 def match_liner(val, array) # >>677 と同等 array[0...-1].each_index do |i| if val <= array[i+1] return val-array[i] <= array[i+1]-val ? i : i+1 end end array.size - 1 end def match_recursive(val, array) case array.size when 0 nil when 1 0 when 2 val-array[0] <= array[1]-val ? 0 : 1 else # ↑↓ 不等号に注意のこと i = array.size / 2 val < array[i] ? match_recursive(val,array[0..i]) : match_recursive(val,array[i..-1]) + i end end
747 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 05:40:31 ] ベンチマーク srand 1.0 * 2008/10/29 * 3*14 * 0xdeadbeaf # 乱数の種を設定 lookup = Array.new(100000){ rand }.sort! data = Array.new(2000) { rand } Benchmark.bm do |x| x.report { data.each do |v| match_liner v, lookup end } x.report { data.each do |v| match_recursive v, lookup end } x.report { data.each do |v| match_loop v, lookup end } end user system total real 221.528000 0.040000 221.568000 (237.392000) # 線形検索 0.501000 0.000000 0.501000 ( 0.550000) # 二分検索(再帰) 0.140000 0.000000 0.140000 ( 0.141000) # 二分検索(ループ)
748 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 05:57:19 ] >>746 の二分検索は再帰で実装してあるけど、ループに展開すると もうちょっと高速化できる。(ベンチ中のmatch_loopがそれ) どうやって展開するのかは自分で考えてみてほしい。 うまく書ければ20行かそこらで済むはず。 ついでにおまけ。 (>>747 続き、 match_なんたらはmatchと定義しておく) def vlookup(val, range, column) # 指定列は0を起点とする val = val.to_f if val < range.first[0] or val > range.last[0] raise ArgumentError, "value out of range" end row = match val, range.map(&:first) # range[row][column] と同じだが、範囲外では例外を起こす。 range[row].fetch column end pairs = lookup.zip(Array.new(lookup.size) { rand 100000 }) data.take(10).each do |v| puts vlookup(v, pairs, 1) end
749 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 07:00:09 ] 全角空白厨は何を言っても説得力がない
750 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 09:42:12 ] そこが気になるというのは、もしやコードをテストしてみようとしたわけか? 朝早くから実に殊勝な心がけだ。 大変すばらしい。 それだけ向上心があるなら、更なる技術向上のための課題として、全角半角の 変換フィルタでもチャレンジしていただきたい。 (もちろんワンライナーな)
751 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:08:41 ] >>750 コードは全く読んでない 全角空白かどうかだけをブラウザ上でチェックした それで充分
752 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:21:12 ] >>749 ,751 俺もコード張るときはwebブラウザとかJaneのこと考えて 全角に変換してから張るんだけど何かまずいの?
753 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:21:57 ] 書き込む際に見やすいように、という理由でいわゆる全角スペースを使うのは 割とよくあることだと思うんだが、それをどういう切り口で転がすと「厨」になるんだろ。 それこそ「説得力が無い」よ。
754 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:26:48 ] 全角空白なんて危険なもの使わなくたって があるだろう 初心者がコピペで実行する初心者スレで全角空白みたいなのをコードに混ぜるのはあまりいい気はしない arr.each do |e| puts e end
755 名前:752 mailto:sage [2008/10/29(水) 10:31:22 ] >>754 ああなるほどな、サンクス
756 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:34:41 ] >>754 本人? よりよい方法がある、という話ならわかるけど、そんなことで厨呼ばわりした上で、 コードなんか見なくても十分とか言ってのけたわけ? 「あまりいい気はしない」とか、なんか急にトーン下がってるけど。
757 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:40:23 ] >>756 いや全然 検証のために irb にコピペして全角空白でエラーになってピキッとなったことはないか? せっかく書き込み前に置換する手間を割いてるのに置換先が全角空白だというのはバカっぽいだろ なんでわざわざ実行不可能なコードにさせるんだよ
758 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 10:46:17 ] 他人が実行するかもしれないことに気が回らない俺スゴイ系の人は 2chでは厨呼ばわりされても仕方ないかな、という気はちょっとだけする
759 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 11:01:39 ] だが、ム板では普通に見かけるけどな。 インデントを全角空白で、ってのは。
760 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 11:24:51 ] ソース見れば普通に半角空白残ってるんだお
761 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 11:35:27 ] 置換の手間は割けなくても長文粘着はありなんだよねこういう人ってw
762 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 11:47:31 ] CSV::Writer.generateを使ってCSV出力をしているようなんですが 出力されたCSVを見ると AAA,BBB,CCC,DDD と出力されており1データに改行が含まれている場合に正常に解析できなくなってます。 AAA,BBB,CCC,DD D 本来ですと "AAA","BBB","CCC","DD D" のようにデータが""で囲われてほしいのですが何か方法は無いでしょうか? ソースは↓な感じですです。 def issues_to_csv(issues, project = nil) ic = Iconv.new(l(:general_csv_encoding), 'UTF-8') export = StringIO.new CSV::Writer.generate(export, l(:general_csv_separator)) do |csv| # csv header fields headers = [ "#", l(:my_data1), l(:my_data2), l(:my_data3), ] csv << headers.collect {|c| begin; ic.iconv(c.to_s); rescue; c.to_s; end } end export.rewind export end
763 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 11:55:24 ] 投稿者1人が半角スペースなコードをエディタに書く ↓ 書き込み時に全角スペースに置換する ↓ 参照者複数人が各々のコピペ時に全角スペースを置換する ↓ エディタに半角スペースなコードができる まあ、プロトコル的に無駄ではあるな 投稿者が半角スペースを に置換してくれさえすれば参照者はコピペだけでおkなのに 2chブラウザによっては半角スペースを投稿時に に変換してくれるものもあるけどな navi2ch使いあたりはこのへん全く意識しないはず というか、全角スペース混じってると範囲実行のM-|ができなくてイラつく(w いちいち 1 [1,2,3].each do |e| 2 puts e 3 end と行番号つきで書かれるくらいムカつく
764 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 12:05:00 ] Jane Doe Styleで >>754 をコピーすると 半角スペースの箇所はクリップボードには &#160 (&#は半角)で保存されるぞ アプリケーション( 2ch 含む)によって文字参照の扱いなんてまちまちなんだから 文字参照に変換してから貼れって主張にはあまり魅力を感じないんだよな
765 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 12:09:49 ] コピペ内容に関して意識してる2chブラウザはそう多くないよね どうレンダリングするかとかはRFCに記述ないんだっけ?
766 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 13:14:44 ] なにやらえらい騒ぎになってしまったな。 全角半角が問題になるのはコピペする人間だけなのだが、実際それをする人間がどれ ほどいるのか。 他の板ならともかく、いかに初心者スレとはいえここはム板なんだから、一括置換な んぞ5秒でこなす くらいの能力は期待できないものなのか。 学校のセンセじゃあるまいし、その程度は勘弁していただきたい。 まぁ、全角を使っているのは書き込みログが読みにくくなるから、というしょーもな い理由なので、 こちらも置換すれば済む話ではあるし、専ブラで対処できるものなら導入を検討する よ。 と、ここで新着見たら、そんな簡単な話しでもないのか。 確かに>>764 は以前くらったことがあるな。 どうしたもんかね。
767 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 13:17:44 ] ノンブレイカブルスペースは \x20 とは別物。常識
768 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 16:32:30 ] おれも つかってたけど、>>764 と同じことがあって、 結局全角スペースのほうが害がすくないと判断してる。 >>767 そうなんだよね。しかも が半角スペースにならない環境だと、 置換が全角スペースより面倒なんだよな。 まあ2chの仕様がクソということで。
769 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 16:33:42 ] >>762 CSVやめて、FasterCSVを使ってみたらどうでしょうか。 「ruby fastercsv」でぐぐってみてください。
770 名前:デフォルトの名無しさん [2008/10/29(水) 17:08:50 ] >>769 実は先ほどソースはredmineのものなんです ファイル名app\helpers\issues_helper.rb なので簡単にFasterCSVに置き換えて大丈夫なものなのか判断しにくいんです。 変更は簡単ですかね?
771 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 22:43:51 ] >>762 CSV::Writer ならエスケープが必要なフィールドだけエスケープされるので、 以下のようになるはずだけど。 AAA,BBB,CCC,"DD D" DD\nDだけじゃなくてAAAとかもクォートして欲しいってこと?
772 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 13:30:47 ] >749-768 先頭の空白に関しては、まだRubyは良いほうでしょ Pythonなんて先頭の空白が纏められたら話にならんかと
773 名前:デフォルトの名無しさん [2008/10/30(木) 16:17:11 ] while文の中にif文入れられる?
774 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 16:22:19 ] a = [1, 2, 3] while if n = a.shift n else false end p n end # => 1 # => 2 # => 3
775 名前:デフォルトの名無しさん [2008/10/30(木) 18:36:04 ] msg = "(1+2+3)*2/3" などのように数式の入った変数を プログラムの構文として処理することは可能でしょうか? val = 構文評価(msg) のようなイメージで、 任意の数式をRubyで処理することを期待してるのですが
776 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 18:53:18 ] >>775 手っ取り早いのはeval。 でも数式に限らずなんでも実行できてしまうから 四則演算だけ処理したいならraccとそのサンプルのcalc.yあたりとか。
777 名前:775 mailto:sage [2008/10/30(木) 19:31:22 ] >>776 ありがとうございます。助かりました。
778 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 22:51:35 ] >>776 > 四則演算だけ処理したいならraccとそのサンプルのcalc.yあたりとか。 正規表現で入力を検査してokならevalに渡す方が楽でない?
779 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 22:58:30 ] そのへんは入力元がどのくらい信用できてどのくらい調教可能かによるな
780 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 23:07:18 ] 信用できないから検査する。 何によるかというならどれくらい受理する式の文法を限定できるかだろう。 君、バカでしょ。
781 名前:デフォルトの名無しさん mailto:sage [2008/10/30(木) 23:18:40 ] 検査が必要かどうかという話だろ 自分で電卓代わりに使いたいだけなら入力検査は不要 こんなの完璧にやるか全くやらないかの2択なんだから信用度は重要 2//3 で エラー吐いて落ちるのは困るだろうし 1 2 + 3 で エラー吐いて落ちるのは困るだろうし 1/3*3 で 0 が返るのも困るだろうし (1..2) で Range オブジェクトが返るのも困るだろう
782 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 00:02:44 ] >>781 君はバカさ加減の露出癖でもあるのかね。 > こんなの完璧にやるか全くやらないかの2択なんだから信用度は重要 不測の動作をさせないことが保証できればいいんだよ。 エラーはevalのすぐ外で捕捉すりゃいい話。 > (1..2) で Range オブジェクトが返るのも困るだろう そうならないように検査するんだろうが。
783 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 00:03:55 ] じゃあraccでやれよ
784 名前:デフォルトの名無しさん mailto:sage [2008/10/31(金) 00:06:22 ] は?