Ruby について Part 3
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGRuby Home Page
http://www.ruby-lang.org/ja/
<前スレ>
Rubyについて Part 2
http://pc3.2ch.net/test/read.cgi/tech/1028906179/
<過去スレ>
Rubyについて
http://pc3.2ch.net/test/read.cgi/tech/1012096319/
0176デフォルトの名無しさん
NGNG$0は最初に与えられたスクリプトファイル名、
__FILE__は現に実行中のファイル名(この場合はcall.rb)。
call.rbを基準にロードしたいなら、>>171のいう通りFile.dirname(__FILE__)。
はっきりいって散々外出。
0177デフォルトの名無しさん
NGNGwin32 環境で rttool を利用する手順です。
(1) rttool をインストール
(2) win32_popen をインストール
(3) rd/tree.rb:20 を以下のように書き換える
TMP_DIR = ENV["TEMP"] || ENV["TMP"] || "/tmp"
0178172 iなので2分割
NGNG#pipe[0] .close だとブロックしてうまくいかなかった。。。
def external_filter (prog)
require "win32_popen"
pipe = IO.win32_popen3(prog)
pipe[0] .print self
pipe[0] .print "\C-z"
pipe[1] .read
end
(5) rt2 を実行する rt2.bat を作る
ruby %YOUR_RUBY_HOME%/bin/rt2 %*
0179デフォルトの名無しさん
NGNGたとえば、a.txtっていうファイルを作って、
そこに I have a pen って内容を書きたかったらどうしたらいいですか?
次の様に書いたら動きませんでした。
new_file = File.new("a.txt")
new_file.print("I have a pen")
new_file.close
0180デフォルトの名無しさん
NGNG> new_file = File.new("a.txt")
open modeを省略すると"r"(読み込み)と解釈されるんで、当然書けない。
0181デフォルトの名無しさん
NGNGこれで2時間悩んでました。
ありがとうございました。
0182デフォルトの名無しさん
NGNG> #pipe[0] .close だとブロックしてうまくいかなかった。。。
win32_popen3は三つのIO全部にpidをセットしてるので、どれかをcloseしよう
とすると子プロセスの終了を待ってしまう。
> def external_filter (prog)
> require "win32_popen"
> pipe = IO.win32_popen3(prog)
stderr垂れ流しでもいいんなら、1.8.0ではIO.popen(prog, "r+")でいけるよ
うになってるはず。
makeの時わざとconfigure消してautoconfigしたらreadlineの所で
エラーになったんだけど、これってreadlineが古いから?(1.??使用)
ちなみに、元々入ってるConfigreで、./configre、make、make test
だと問題無い。
0184デフォルトの名無しさん
NGNGrubiの話は専用スレへ。
autoconfのバージョンとエラーの内容は?
0185デフォルトの名無しさん
NGNG0186デフォルトの名無しさん
NGNG0187デフォルトの名無しさん
NGNGmingwでコンパイルできるはずだが、rbconfig.rbをいじらんと無理だろうな。
0188デフォルトの名無しさん
NGNG0189名無しさん
NGNG#!/usr/bin/env ruby
system('nkf -Ws #{ARGV[0]}')
0190デフォルトの名無しさん
NGNG激しくすれ違い。
java.nio.charsetパッケージのリファレンスを読んで自分で調べろ。
0191デフォルトの名無しさん
NGNGそりゃrubyでやってるとはいわんだろ。
せめてuconvかiconv
0192デフォルトの名無しさん
NGNGしょうがないのでmingw版のバイナリをもってきて、バイナリエディタでruby-mingw32.dllにリンクしている情報をmswinに書き替えちゃったよ。
0193デフォルトの名無しさん
NGNG素直にmingw版を使えばいいのにとは思うが、
1.8ではmingwとmswinは拡張ライブラリを共有できるようになってる。
0194質問スレではスルーされた
NGNGプログラミングなんていう高等技術をやったことがありません。
初心者Rubyプログラマーのポータルサイトなど御座いますでしょうか?
0197デフォルトの名無しさん
NGNG0198デフォルトの名無しさん
NGNG入門って入れればいいのか・・・
何やってんだろう、ずっと初心者とかで検索してた。
すいませんでした。今度から徹底的に検索してから参ります。
0199デフォルトの名無しさん
NGNG0200デフォルトの名無しさん
NGNGExtractFileName: File::basename
ExtractFileExt: File::extname
0201MoonWolf
NGNG使ったことないけど、こんなのもある。
http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/rough/lib/pathname.rb
0202デフォルトの名無しさん
NGNG0203デフォルトの名無しさん
NGNG0204デフォルトの名無しさん
NGNGもうしばらく待つが吉。
0205202
NGNGヒジョーに期待しています。
って、ここに書かないでHikiに書いたほうがいいのかもしれないが、
向こうではガイシュツだからここに書こう。
0206デフォルトの名無しさん
NGNGひとつだけ気になったのが、画像URLがデフォルトで<img>にされて
しまうこと。コピペしたテキストとかの中身に注意を払わないと、
含まれてた画像URLが意図せず埋め込まれちゃいそう。
0207>>Hiki
NGNG0208デフォルトの名無しさん
NGNGSJISのファイル名をちゃんと処理できないんですか?
0209デフォルトの名無しさん
NGNG0210デフォルトの名無しさん
NGNGつかぬことをお聞きしますが、'r+'で開いたファイルを操作する時に、
いままでそのファイルに記述してあったところの途中で、ファイルを終わらせたい場合には、
どのようにすればよいのでしょうか。
部分的に削除をしたいのです。
0211デフォルトの名無しさん
NGNG0212210
NGNGなんとかできたようです。
ありがとうございました。
0213デフォルトの名無しさん
NGNG基本的に、UNIX系の標準ライブラリやシステムコールを知ってると類推できる
ことが多い。
0214デフォルトの名無しさん
NGNGオブジェクト指向っていっても、rubyのは単に .でつなぐだけでしょ?
0215デフォルトの名無しさん
NGNGそうだよ。 Perl にはそれすらできないんだってさ。
0216デフォルトの名無しさん
NGNG日本語変換モジュールのJcodeは
Jcode->new($str, 'sjis')->euc;
みたいにできるのに
同じ作者のEncodeは
encode('euc', decode('sjis', $str));
みたいな仕様にしたのかな?
->を使ってOOっぽく見せるのはやめて
関数型でやるのがPerl的には美しいの?
0217デフォルトの名無しさん
NGNG> Jcode->new($str, 'sjis')->euc;
対応するエンコーディング名があらかじめ決まってないといけないからじゃないの。
0218デフォルトの名無しさん
NGNGEncode->decode($str, 'sjis')->encode('euc')
0219デフォルトの名無しさん
NGNGですです
関数型の方が語順が英語と似るからかな。
ruby本に書いてありましたよね。
0220デフォルトの名無しさん
NGNG0221デフォルトの名無しさん
NGNGどういうとこが失敗だったと思う?
0222デフォルトの名無しさん
NGNG個々のメソッドのインターフェイスがバラバラ。
例えば、下の例の前者は問題なくて後者は実行時エラー
print Jcode->new('文字列')->h2z()->sjis();
print Jcode->new('文字列')->sjis()->h2z();
文字列化演算子をオーバーロードするのなら、
両方の構文をサポートしてもよかったのではないかと思うのだが。
更に、convert()のエンコーディング指定文字列も、
正式名称"EUC-JP"などを受け付けるようにしていれば、もっと便利だったはずだ。
0223デフォルトの名無しさん
NGNGなるほど。
しかしそれはOO風にしたための失敗とはいえないのでは?
0224デフォルトの名無しさん
NGNGいや、まあ、元々不満だったのは「Jcodeのインターフェイス」であって、
「OO風インターフェイス」だから不満だったわけじゃないのだ。
Encode.pmはというと、インターフェイスこそ手続き型だけど、
その実装はOO無しには語れず、ただの関数を多態的に動作させるようになってる。
にもかかわらずあえて公開OOインターフェイスを備えていないのは、
関数の方が楽だから、だと思う。これは想像だが。
Encode->find('EUC-JP')->encode($str); # タイプが面倒
Encode->encode("EUC-JP", $str); # 悪くないが、まだ長い
encode("EUC-JP", "文字列"); # 短い。楽だ。
0225デフォルトの名無しさん
NGNGどうsplitすればいいのでしょうか?
0226デフォルトの名無しさん
NGNG聞く前にRAAとかGoogleを検索しろよ。
cols = text.split(/,/)で駄目なら
http://raa.ruby-lang.org/list.rhtml?name=csv 使えば?
0227デフォルトの名無しさん
NGNGなるほどね。
> Encode->find('EUC-JP')->encode($str); # タイプが面倒
Rubyでいうと、iconvがこのスタイルだな
Iconv.new("shift_jis", "euc-jp").iconv(str)
> Encode->encode("EUC-JP", $str); # 悪くないが、まだ長い
これもあるようだが。
Iconv.iconv("shift_jis", "euc-jp", str)
0228デフォルトの名無しさん
NGNGIconv はストリームを処理する状態機械だから str を引数に渡すのは派生だな
0229デフォルトの名無しさん
NGNG派生?
0230202
NGNGマークアップがぐちゃぐちゃなHTMLをwell-formedなXHTMLに変換してくれ
るようなものを探しています。
html-parser.rbがそうかな?と思ったんですが、
探しているのとちょっと違うような気がするんです……。
0231デフォルトの名無しさん
NGNGつい最近ruby-extにその話題が([ruby-ext:02143]から)
Ruby-TidyLib: http://arika.org/ruby/tidylib
0232デフォルトの名無しさん
NGNG0233デフォルトの名無しさん
NGNGああ「strを引数に渡すの」じゃなくて「クラスメソッド」だったyo
0234202
NGNGありがとうございます。ruby-extはsubscribeしてませんでした。
tidy.rbのAgeが4hoursとはこれまたホットですね。ヲチしたいと思います。
0235202
NGNGttp://www.namaraii.com/hiki/hiki.cgi?%28Hiki%29%A5%C0%A5%A6%A5%F3%A5%ED%A1%BC%A5%C9
0236デフォルトの名無しさん
NGNG教えてね♥
0237デフォルトの名無しさん
NGNG0238デフォルトの名無しさん
NGNGclass Foo; p self; end
0239デフォルトの名無しさん
NGNG1.8なら標準
0240デフォルトの名無しさん
NGNGshim 入れろ。
ていうか、HTML を自分でパースしようと思ったら、strscan ってめっちゃ便利よ。
0241デフォルトの名無しさん
NGNG0242デフォルトの名無しさん
NGNG0243デフォルトの名無しさん
NGNG仕様はイデアである。実装はその影に過ぎない。
従って、イデアを求めて実装は変化するのである。
0244デフォルトの名無しさん
NGNG0245デフォルトの名無しさん
NGNGstrscan って ML みてるとインストールのトラブルがあったりで印象が悪いんだよね。
それに strscan を使わなくても じゅうぶん速く parse できるよ。
pure ruby の xml parser だってあるし。
0246デフォルトの名無しさん
NGNGだから1.8かshimを使えと。
0247デフォルトの名無しさん
NGNG0248デフォルトの名無しさん
NGNG/#{"[\xa1\xa1-\xa2\xfe]"}/eo
かな。
0249デフォルトの名無しさん
NGNGありがとうございます。
これってそのままPerlでも通用するのでしょうか?
0250デフォルトの名無しさん
NGNG独自なのでそのままは動かない。
0251デフォルトの名無しさん
NGNG/[ -◯]/
0252デフォルトの名無しさん
NGNG0253デフォルトの名無しさん
NGNGjperl なら通用するかもしれない。と後ろ向きなアドバイス。
0254デフォルトの名無しさん
NGNG0255デフォルトの名無しさん
NGNG安全で使いやすいのは、
BASIC認証? ruby-shadow? ruby-password?
それともこんな程度のセキュリティでOKなの?
http://www5e.biglobe.ne.jp/~access_r/hp/cgi/rb_light.html
0256デフォルトの名無しさん
NGNG思いっきりスレ違いやんけ!
0257デフォルトの名無しさん
NGNGruby-password は統計的に弱過ぎるパスワードをつける不注意から守る。
BASIC認証は盗聴されない前提で比較的低頻度の総あたり攻撃から守る。
盗聴の危険が高い回線なら、SSLでBASIC認証を使い、
ruby-password で検査するくらいで適当。それでも弱いと思うなら、
BASIC認証を使わず、POSTでより長いパスワードを提供するしかない。
その場合はクッキーなどでセッションを維持することになる。
しかし通常のBBSならSSLでBASIC認証を使えば十分だと思うし、
SSLでなくてもBASIC認証だけでも構わないと思う。
0258_
NGNG0259デフォルトの名無しさん
NGNG他にやり方があるかもしらんが
class Mona
@@val
def val=(v)
@@val = v
end
def val
@@val
end
end
0260デフォルトの名無しさん
NGNGクラス変数をインスタンスメソッドで変更するのはキモくないか?
class Mona
@@val
def self.val=(v)
@@val = v
end
def self.val
@@val
end
end
0261デフォルトの名無しさん
NGNG確かにキモいと思いつつ書いてた。
0262初心者
NGNG文字から文字コードを得るのって、どうすればいいですか?
0263デフォルトの名無しさん
NGNG文字というのがStringオブジェクトだとして
Integer#chr
String#[](index)
を使う
p 64.chr # '@'
p '@'[0] # 64
0264初心者
NGNG0265デフォルトの名無しさん
NGNG0266デフォルトの名無しさん
NGNG0267デフォルトの名無しさん
NGNG一瞬どういうネタだ? と思ったよ(w
0268デフォルトの名無しさん
NGNG0269デフォルトの名無しさん
NGNG0270デフォルトの名無しさん
NGNG0271デフォルトの名無しさん
NGNGprintf('<p class="%s">%d<p>', ck, num)
print '<input name="'+name+'"' 〜
上記のような処理を下記のように全部書き直したら、
表示に6秒ほどかかってたのが3秒ほどになって、ちょっと感動しますた。
print '<p class="',ck,'">',num.to_s,'<p>'
print '<input name="',name,'"' 〜
文字列の連結とか時間がかかるんだなぁ。
0272デフォルトの名無しさん
NGNG前者のprintfはいちいち書式指定文字列をパースしているから。
前者のprint は余計な文字列オブジェクトを生成しているから。
0273デフォルトの名無しさん
NGNG前者だと演算子のたびに新しい文字列オブジェクトを生成するからね。
ま、ふつうは
print %Q(<p class="#{ck}">#{num}<p>)
print %Q(<input name="#{name}"〜)
とか書くわけだが。
0274デフォルトの名無しさん
NGNG実際には DB への問い合わせを行っているものとします。
DB の host 名や user や password などの設定を /etc/personrc に記述したい場合、
Person クラスへこの設定をくべるには、どのような設計にするのが良いでしょうか?
>>273
"#{num}" は新しい String オブジェクトを生成しないんでしょうか?
それとも生成してしまう?
■ このスレッドは過去ログ倉庫に格納されています