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/
0116デフォルトの名無しさん
NGNGString#indexをBM searchでも使って書き直して送るべし。
0117デフォルトの名無しさん
NGNG調べなおしてみたら、文字列が短いときとか最初のほうでマッチするとき
は、index()のほうが速かった。
0118デフォルトの名無しさん
NGNGif text =~ /^hogehoge$/i
大文字小文字無視して等しいか調べるときも、正規表現が速かった。
1.7ではcasecmpというのがあるみたいだけど、入れるのが面倒だから
調べられない。
0119名無しさん
NGNGにrubyのコーディングスタイルについての文章がある。
俺も3スペースインデントしてたけど、最近は2スペースだな。
ま、どんな言語でもその標準ライブラリが何で書かれてるかに
従ったほうがいいと思う。あんまり変なスタイルだと、それだけ
で気も悪がられる気がする。
だからCで外部モジュール書くときもついK&Rで書いてしまう。
0120デフォルトの名無しさん
NGNG0121デフォルトの名無しさん
NGNGインデントをタブ文字で抽象化しないのは何故だ?
0122デフォルトの名無しさん
NGNG0123デフォルトの名無しさん
NGNG0124デフォルトの名無しさん
NGNG0125デフォルトの名無しさん
NGNG0126Rubist@カラアゲマイルド
NGNGHTML>>>>>>>>>>>>>>>>>>rd
0127デフォルトの名無しさん
NGNGで検索できる地形図から2.5万、5万、20万の地形図を合成
して作ろうと思っています。
例えば、5339は東京(20万分1地勢図)で、
5339??(??は00〜77)が東京(1/20万地勢)に含まれる1/2.5万地形図で、計64枚あります。
(メッシュコードの概念はhttp://www.biodic.go.jp/kiso/col_mesh.html参照)
Web上からは以下で落とせます。
for j in {1..4}
do
for i in {00..77}
do
wget -q "http://mapbrowse.gsi.go.jp/mapimagef25k/5339/5339${i}${j}.png"
done
done
このpng画像は1/2.5万地形図を約*4分割したもので、
1→南西、2→南東、3→北西、4→北東となっていて、4枚合わせて2.5万になります。
(*:実は少しダブって分割されています。)
0128デフォルトの名無しさん
NGNG% convert -crop (ca)x(db)+a+b orange.gif blue.gif
の機能を使って、
png画像→1/2.5万
1/2.5万→1/5万
1/2.5万→1/20万
1/5万→1/20万
とする方法が考えられます。
この変換スクリプト、誰か書いてくださいませんでしょうか。
僕にはそこまでできません。
す み ま せ ん が 誰 か 助 け て く だ さ い 。
0129デフォルトの名無しさん
NGNGrubyには無いのでしょうか?
(flockくらいしか方法は無いのでしょうか?)
0130127
NGNGhttp://nlftp.mlit.go.jp/ksj/mesh.html
の方がわかりやすいかも。
% convert -crop
を使うのは2.5万の4分割がダブっているからです。
きれいに分割できればあとはタイルのようにくっつけるだけですが
僕にはできませんでした‥‥‥
0131デフォルトの名無しさん
NGNG↓このように書いてたものを
while true
text.index('hoge')
end
↓このように書き直してみたら、正規表現とほぼ同じ速さになりました。
t = hoge
while true
text.index(t)
end
リテラルがあると遅くなるのかなぁ?
0132デフォルトの名無しさん
NGNGhttp://www.ruby-lang.org/ja/man-1.6/?cmd=view;name=Mutex
これでいいか?thread.rbにあるので、
require 'thread'
して、使ってね。
0133デフォルトの名無しさん
NGNGそれはプロセス内でしか使えないのでは?
0134デフォルトの名無しさん
NGNGRAAで、semaphoreとかSysV IPCとか入れて探してみれば。
0135デフォルトの名無しさん
NGNGあ、勘違いスマソ。
プロセス間ね、スレッド間だと思っていた。
0136デフォルトの名無しさん
NGNG>>134さんが言っているのはたぶん、
http://www.ruby-lang.org/raa/list.rhtml?name=sysvipc
これのことでしょ。
でもプラットフォームによっては使えなさそう…。
flockもプラットフォームによるので、、まあ、UNIX系なら問題ないか。
つか、簡単に使えるのがあったら、CGIがめちゃくちゃ楽になるな〜。
0137デフォルトの名無しさん
NGNG> リテラルがあると遅くなるのかなぁ?
構文解析結果のノードの中の文字列をそのまま使用できないので、
毎回、'hoge'文字列のコピーが行われます。
変数を使用する場合は、その変数の値の文字列が
そのまま使用されます。
0138山崎渉
NGNG0139デフォルトの名無しさん
NGNG> 構文解析結果のノードの中の文字列をそのまま使用できないので、
> 毎回、'hoge'文字列のコピーが行われます。
補足すると、文字列自体はStringオブジェクトの間で共有されるので、
文字列のコピーというよりは、Stringオブジェクトのコピーが
毎回行われるということです。
0140デフォルトの名無しさん
NGNGの|i|を省略可能にしてくれ。
0141デフォルトの名無しさん
NGNG0142デフォルトの名無しさん
NGNGもっと簡潔に書けないでしょうか?
open("log", "w"){|f|
lines.each{|s|
f.puts s
}
}
0143デフォルトの名無しさん
NGNGf.puts lines.join("\n")
0144デフォルトの名無しさん
NGNG★こんなサイト見つけました★
0145デフォルトの名無しさん
NGNG0146デフォルトの名無しさん
NGNGjoinはいらないのでは?
f.puts lines
0147デフォルトの名無しさん
NGNG厨な質問でスマソ
0148デフォルトの名無しさん
NGNG読み込みならそれが終わるまででいいんでないの。
書き出しなら先に終了されたらエラーになるでそ。
どうしてもやりたきゃ pid をとって waitpid。
0149デフォルトの名無しさん
NGNG0150デフォルトの名無しさん
NGNGRubyで実装されたWikiを利用するとしたら、
* Tiki
* asWiki
どちらをオススメしますか? パッと見、似たような感じだけど……。
# RWikiはdaemonが必要だからちょっと敬遠。
amritaを使っているのでaswikiかなあ、とは思っているんですが、
「Tikiのほうがイイってば!」ってなポイントがあれば知りたい。
0151デフォルトの名無しさん
NGNG今月もお小遣いすくなってきたよ・・・トホホ。
そんなあなたにこのサイト!!あなたのお小遣いを
1円でも多くして見せます!!
損はさせません!!早速アクセスをどうぞ!
↓ ↓ ↓
http://finito-web.com/kanemou/index.html
☆★▼▽▲△●○■□◆◇◇◆□■○●△▲▽▼★☆
0152デフォルトの名無しさん
NGNGHikiっていうのもあるよ
http://www.namaraii.com/hiki/
0153デフォルトの名無しさん
NGNGtDiaryのプラグインが使えるってのがちょっと面白い。
0154デフォルトの名無しさん
NGNG合成するって、めちゃくちゃにでかい画像ファイルができそうだが。
Ruby でグラフィックを扱うなら Ruby/GD を使うのがいいよ。
0155デフォルトの名無しさん
NGNG慣れたら簡単やね
0156デフォルトの名無しさん
NGNGオブジェクト(イメージ)の埋め込みが出来てほしい
PODに乗り換えようかと思ったけど、
RDの方が分かりやすかった。
この仕様だけなんだけど。
0157デフォルトの名無しさん
NGNGもともとはテキストの為のフォーマットなので、
画像を扱うというのは考えられていないと思われ。
RWikiとかみたいに自分で拡張する分には自由でしょう。
0158デフォルトの名無しさん
NGNGまつもとさんは以前RDをこれ以上複雑にしたくない、
という趣旨の発言をしていたんで、RDという枠組みでは無理じゃないかな。
んで、拡張するのならRDという名前は捨ててくれ、ということだった。
だから、欲しいのなら君が拡張してRDじゃない名前をつけて発表すれ(w
0159牛丼うまうま
NGNGhttp://ha9.seikyou.ne.jp/home/sweetbasil/topography-get-from-web
rubyとは関係ないので、他スレへ。
0160デフォルトの名無しさん
NGNGサーバー[1] <- クライアント[多]
クライアント(送信がわ)のデータが512バイト以下であれば、
データは交じり合わない(アトミック)であるということは調べたのですが、
RubyのIOバッファはどのくらいの大きさなのでしょうか?
512バイトの書き込みをして、2回に分けて書き込みがなされることはないと
考えてもよいのでしょうか?
data = 512バイト以下のデータ
open('パイプのパス', 'w') do |f|
while ...
f.print data
f.flush
end
end
↑このようにして、手元の環境で、複数のプロセスからパイプに書き込んで、
実験したところ、データが混じりあうことは無かったのですが…
0161160
NGNGsyswrite()でやればOKそうな気がするので、syswrite()でやります。
0162デフォルトの名無しさん
NGNGそういえば、以前、index を速くするパッチ投げたんですけど、
$= 見てなかったりいまいちだったんで、その後放置してたのを思い出しました。
あの頃から実装変わってるのかな?まあどうでもいいか。
0163デフォルトの名無しさん
NGNG-------------------------------
c:/src/hello.rb(↓中身)
def hello()
print("Hello ruby.\n")
end
-------------------------------
c:/src/call.rb(↓中身)
require "hello"
hello()
-------------------------------
c:/bat/hello.bat(↓中身)
ruby c:/temp/call.rb
-------------------------------
上記のような状態で3ファイル有り、
c:/bat>hello.bat(←コマンドプロンプト)
のような状態でバッチファイルを実行するとエラーになります。
そこで次のような形でとりあえず解決しました。
-------------------------------
c:/bat/hello.bat(↓中身)
cd c:
cd temp
ruby call.rb
-------------------------------
もしこれをRubyのみで解決する場合どのようにするのが賢いでしょうか?
どうか教えてください。
よろしくお願いします。
0164デフォルトの名無しさん
NGNGいつもいつも言われることだが、エラーの中身を書け、と。
あと、ruby -vの結果も。ついでにWindows(だよな?)のバージョンも。
ついでなので、環境変数PATHの中身とrubyがインストールされている
場所も書くとなおよいだろう。
0165デフォルトの名無しさん
NGNG環境変数 RUBYLIB に hello.rb のあるディレクトリを記述しる
0166デフォルトの名無しさん
NGNGcall.rbの先頭に次の一行追加する。
$:.unshift(File.dirname($0))
これで、call.rbと同じディレクトリにあるファイルを
requireするようになる。
0167デフォルトの名無しさん
NGNGhello.batの中身を
ruby -IC:/temp C:/temp/call.rb
とするか、
ruby -CC:/temp call.rb
とする。
って、結局、*.rbはC:/srcとC:/tempとどっちにあるんだよ!
0168デフォルトの名無しさん
NGNG0169163
NGNG昨晩の時点でレス無くてあきらめてたんで、なおさらでした。
まず、 >>164-168 皆様回答ありがとうございます。
んで、回答ですが、私の求めていた形は >>166さんのものでした。
私の作った*.rbを他者が使用する場合、
各環境によってbatやPATHを変更するのがどうにも具合が悪かったためです。
たくさん回答していただきありがとうございました。ホント感激です。
2chなめててスマソ。
>>164
まず質問の書き方を知りませんでした。
以後気を付けます。
>>167さん
srcです。tempじゃ無いです。
ごめんなさい、逝ってきます…
>>168さん
Exerbの存在を知りませんでした。
こういう方法もあるのですね。
勉強になります。ありがとうございました。
0170デフォルトの名無しさん
NGNG> そういえば、以前、index を速くするパッチ投げたんですけど、
どこにあるの?
0171デフォルトの名無しさん
NGNG$0より__FILE__の方が良いかも。
0172デフォルトの名無しさん
NGNG0173デフォルトの名無しさん
NGNGhttp://ruby-talk.com/60221
http://home.nownuri.net/~phasis/popen/win32_popen_1.6.8.zip
http://home.nownuri.net/~phasis/popen/win32_popen_1.8.0.zip
0174デフォルトの名無しさん
NGNGなんで?
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 にはそれすらできないんだってさ。
■ このスレッドは過去ログ倉庫に格納されています