みんないろいろ書いているようですがとりあえずほかのことが先なので後回しと書きつつ結局いろいろは書いてしまう。
3日目の時にごとけんさんの話を聞いているうちに忘れてしまっていて質問できなかった話とか帰りの地下鉄の中でnokadaさんと話したことや帰りの電車の中でRubyプログラミング入門の続きを読んだときに気づいたことなどのメモ。 ruby-listに投げた方がよさそうなこともあるけどとりあえずここにメモ。
Rubyプログラミング入門
p.125
p.127
p.130
=> 変数名のことを追記。
入力ファイルがsjisでデフォルト引数のところが文字列だと文字化けというかvarのマークアップが壊れる。 ruby -Ks rd2にしてもダメでした。 *1
文字化けする入力例: =begin --- Klass#meth(arg='デフォルト引数') =end
<URL:http://members.linuxstart.com/~sunnyone/cgi-bin/diary/?200012a&to=200012032#200012032>より。 そのまま使ってるのはMailerListまでかも(^^;
ちなみに-oをつけるとOtherに何があるのかも出力します。
#!/usr/bin/ruby -s
# mailer-count.rb by Yoichi Imai <yoichi@silver-forest.com> 2000/12/03
# を ZnZ <zn@mbf.nifty.com> が書き直し。(2000/12/04)
# mailer-count.rb [-o] mailers
MailerList = [
"AL-Mail",
"AOL",
"ARENA",
"Becky!",
"Chameleon",
"Cue",
"Cyberdog",
"Danshin",
"Datula",
"Denshin 8 Go",
"DreamPassport",
"ELM",
"EdMax",
"Eudora",
"Exchange Server Internet Mail Connector",
"Excite Inbox",
"ExciteMail",
"Forte Agent",
"Gnus",
"Gokinjo Mail Program",
"HandStamp Pro",
"IMP/PHP IMAP webmail program",
"INTERWAY",
"Inet_Mail_Out",
"Internet Mail Service",
"JsvMail",
"Juno",
"KMail",
"MH",
"MIME-tools",
"MUSASHI",
"MailCity Service",
"Mailer \\(tentative name\\)",
"Mew",
"Microsoft Internet E-mail/MAPI",
"Microsoft Internet Mail",
"Microsoft Mail",
"Mozilla",
"Musashi",
"Mutt",
"Mvw",
"NIFTY MANAGER",
"Nmail",
"Novell GroupWise",
"Outlook Express",
"Outlook",
"Outlook-Express-Macintosh-Edition",
"Pegasus Mail",
"PostPet",
"Quarterdeck Message Center",
"SiR-Mail",
"Sylpheed",
"The Bat!",
"Turnpike",
"TuruKame",
"USANET web-mailer",
"VM",
"WZ MAIL",
"Wanderlust",
"WeMail32",
"Winbiff",
"YAM",
"akira32Gold",
"cmail",
"cur",
"dtmail",
"exmh",
"mail.com",
"mnews",
"sesna",
"vmail",
]
rawhash = Hash.new(0)
ARGF.each do |line|
if /^(?:X-Mailer|User-Agent):\s*/i =~ line
rawhash[$'] += 1
end
end
mailerhash = Hash.new(0)
rawhash.each do |k,v|
matched = false
MailerList.each do |mailer|
if /#{mailer}/ =~ k
mailerhash[mailer] += v
matched = true
end
end
rawhash[k]=0 if matched
end
mailerlist = mailerhash.sort{|a,b|
b[1] <=> a[1]
}
other = 0
rawhash.each do |k,v|
puts "#{v} #{k}" if $o && v!=0
other += v
end
mailerlist << ['Other', other]
maxlen,maxcount = 5,1
mailerlist.each do |mailer,count|
if maxlen < mailer.length
maxlen = mailer.length
end
if maxcount < count
maxcount = count
end
end
countlen = Math.log10(maxcount).to_i+1
mailerlist.each {|k,v|
puts "#{k.ljust(maxlen)} #{v.to_s.rjust(countlen)}"
}
とりあえずSolaris 2.6でも動くことを確認できたので1.10にしてみた。 インストールされてるかどうかの確認はwhich raccからracc --versionに変更してみた。 他はawkのsubとreadにも問題があったので修正した。
$WORK関係を色々いじったので古いのも<URL:rwiki-installer-1.02.tar.gz>に残してます。
RWikiで見かけて思い出したので忘れないうちにパッチを送ってみた。
致命的な不具合修正は.を覚えるとwakanu.datが壊れると言うことだけだったと思う。
FPROGORGのRTCで実際に運用してるのは私ではないですが。
ローマ字入力っていうタイトルと言うことはかな入力にするというのはもっと思いつかないんでしょうか:-)
それはさておき私はどちらかというとどこでも使えることを重視したいので基本的にはそのまま使ってます。最近はノートパソコンがどこでも使える端末になってて101配列のキーボードをほとんど使ってないのがちょっと気になりますが…。
RWiki-installerのバージョンのところを1.10になおした。 それからWORK関係の変更をしてからの動作確認が少ないので、Statusをstableからreleaseに変更した。
<URL:http://www.yoshidam.net/diary/200012.html#07_3>のRuby Hotlinksへのリンクのjaが抜けてるみたい。
永久保存希望なら自分で引用して残しておくという手もありかも。
引用って公開されたものからなら、翌日に消えてしまってたり別途お金を払わないとみられないものからだったりしても問題ないはず。
nplantはcygwin版rubyではcursesがないってことで動かなかったので、Linuxでやってみた。 DOSのは押した間しか動かなかったと思うけど、同時押しがきかないから動き続けるようになってるのかな?
CVSのレポジトリをおいているマシンの名前が変わってしまったのでCVSの中の管理ファイルを直接書き換えた。
Rootの方は
ruby -e "Dir['**/Root'].each{|fn|open(fn,'w'){|f|f.puts '//machine/user/cvsroot'}}"
で良かったが、Repositoryの方はcvsrootより後は元々あるものを残さないといけないのと長さが短くなることもあって、
長くなってしまったのでcommand.comの行編集バッファに入り切らなくなったのでバッチファイルで
ruby -e "Dir['**/Repository'].each{|fn|open(fn,'r+'){|f|c=f.gets.sub(/.+cvsroot/,'//machine/user/cvsroot');p c;f.rewind;f.puts c;f.truncate(f.tell)}}"
を実行した。
f.truncateがf.truncate(f.tell)と同じだったらもうちょっと短くなってたけどそれでもバッチファイルにしないと入りきらない長さだった。
完全に公開されている(と思われる)日記用スクリプト。
nDiaryがなかなか見つからなかったのはWWWCに登録してなかったからというのもあるけど、それ以上にリンクが少なかったからというのが大きかった気がする。 RAAに登録されてないのは作者の自由だから別にいいけど(もったいない気はするけど)、Hotlinksには登録されてても良さそうな気が。 Hotlinksって基本的には勝手にリンクみたいだし。 ってwebmaster@ruby-lang.orgに推薦文書を送れば追加される?
リンクがないと思ってたら<URL:http://www14.cds.ne.jp/~not/tawagoto/200012.html#01_t2_1>をみてよしだむメモがnDiaryだったことに気づいた。 全部XMLとXSLTでやってるのかと思って何を使ってるのかちゃんとチェックしてなかった(^^;
cvs....わからんというのをみたのでメモ。
~/.cvsrcにcvs -z3と書いておく。
~/.cvspassにこの情報が残る。)
「$_.strip!じゃないのは、!は''の中で使ってしまうとEvent not foundとか言ってくるから…」というのをみて、読みやすくするためのEnglish.rbみたいに(!の扱いが腐ったシェルでの)onelinerのためにhoge!をhoge_bangとかにaliasするものがあったら便利かも、と思って書いてみた。
# bang.rb
ObjectSpace.each_object(Module) do |mod|
mod.instance_methods.grep(/\!$/).each do |meth|
mod.module_eval "alias #{meth.sub(/\!/, '_bang')} #{meth}"
end
end
instance_methodsのところをmethodsにしてもKernelのsub!などやProcessのexit!がうまくいかなかったし、methodsもやろうとするとかなり遅くなったのでとりあえずinstance_methodsだけ。
Amikaiってクッキーでセッション管理してるみたいで最初の日英翻訳が必ず文字化けしてしまうので、一度目の結果を捨てて2回目の結果を使ってるんですがどうにかなりませんか。 ってクライアントではどうにもなりそうにないですが。
たぶん同じ理由でクッキー非対応のw3mでも日英翻訳が使えませんでした。
RDで「excite翻訳クライアント」と「Amikai翻訳クライアント」のところがエラーになったのでverbにしてみた。 RDtoolってShift_JISと相性悪い?
RD syntax error: line 297: ...|URL:excite_world_text.rb>))を更新。 ^
rd2とShift JISですが、特別なことをしていないのなら-Ksをつければ大丈夫のはず…って思ったらつけてなかったのでMakefile修正。
修正してverbをはずしたらやっぱりエラーに。
全部euc-jpに変換してもいいんだけど、今から変換するとCVSでほとんど変更扱いになるのであまりしたくないし。
VisualuRuby計画(仮称)からリンクされてたAlexsiさんのところの中にRWiki-installerを発見。
英語ページからもリンクされてるってことで変えよう "Japanese Only"を思い出したので、ちょっと書き加えてみた。
そういえばnplantが元のままで動かなかった前田さんの使ってる環境って何なんだろう? [ruby-list:26429]でruby -vと-vがついてればわかったのに…。
Errataってこのタイトルだと何のErrataかわかりませんが、「Rubyプログラミング入門」正誤表です。
/\bs\w*?x\b/って後ろにも\bがあるのなら\w*?を\w*にしても同じものにマッチするような気が。
どこまで手元の本に反映させたのかを調べやすくするためにwgetしたファイルをCVSに入れてみた。CVS便利。
そういえばRWiki-installerは今は専用アカウントでRCS管理だからこれもCVSに入れた方が良いのかも。
<URL:http://ruri.csys.ce.hiroshima-cu.ac.jp/~masato/diary/diary.html>の12月14日の 多量のオブジェクトが生き残るようなアプリケーション って人工無能が良さそうな気が。 学習内容で大量のStringとRegexpが生き残ってるはず。
電話しかも携帯となったら電話代が障壁と思っていたのに、実はPHS(DDI POCKETのお気軽コース、今はこのコースへの変更や新規契約ができないらしい)からだと固定電話にかけるよりも携帯電話に書ける方が安かったことが。特に長距離電話だと距離が関係なくなるので携帯電話にかけた方がかなり安い。 お気軽コースの罠としては10秒までは10円で10秒を越えると一気に2倍ということで40円になる、というのがあるのですが、携帯電話への通話だとこの2倍がおこらないようなのです。
"jewel box"が見れないんですけど工事中ですか?ってことですが、時間を気にするのを忘れてて0時頃に更新しようとしたら@niftyのftpサーバが重くて送信できなかったのです。 後で転送し直そうと思ってて忘れてただけです。 23時から1時頃までは更新しようとしないように何かチェックするような仕組みが必要かも。
shugo.netの日記をWWWCに追加してチェック開始。
全然意味はないけどdfib.rbというのを作ってみて、分散計算してみたら、100や200とか500ぐらいの増加なら大丈夫だったのに1000ぐらい一気にやってみたら、
~/lib/ruby/drb/drb.rb:166:in `method_missing': invalid header (TypeError)
from dfib.rb:21:in `fib'
from dfib.rb:40
となった原因がよくわからない。
1000の時だと送受信で2つポートを使ったとしても2000、多めに考えても10000はいきそうにない気がするので、ポート番号が足りないと言うことはなさそう。
もしかしてファイルディスクリプタが足りない?
ちなみにdfib.rbは以下の通り。
これを2つ起動して最初の1行目はそれぞれ相手のURIを入力して2行目以降は求めたいfib(n)のnを入力する。
RubyUnitを使ってみたかったけど、それぞれ相手のURIが必要なのでどうやってそれを渡すのか悩んだのでとりあえず今回はまだ使っていない。
#!/usr/bin/ruby
require 'thread'
require 'drb/drb'
class DFib
include DRbUndumped
def initialize
@h = Hash.new
@h[0] = 1
@h[1] = 1
end
attr :other, true
def fib(n)
raise if n < 0
unless @h[n]
@h[n-1] = @other.fib(n-1)
@h[n] = fib(n-2) + @h[n-1]
end
puts "fib(#{n})=#{@h[n]}"
@h[n]
end
end
if __FILE__ == $0
o = DFib.new
DRb.start_service(nil, o)
puts DRb.uri
there = gets
o.other = DRbObject.new(nil, there)
while num = gets
puts "result=#{o.fib num.to_i}"
end
DRb.thread.join
end
(11/18) プログラムの法則その 256:ヒマになったとたんバグ報告がくる。 プログラムの法則その 257:忙しさが頂点に達するとバグ報告がくる。
256から始まったんだろうか…。255以前があるのなら見てみたいなぁ。 忙しいときって本当に忙しかったらバグ報告がきてても見る暇がなくて気がつかないかも。 暇になったときだといじって逆にエンバグしてるとか…。
近況 00/12/22より 「あとZnZさんの所にあるexciteの翻訳サービススクリプトでやってみたいことが。 プロトコルがhttpとはいえ、分散コンピューティングな雰囲気。雰囲気だけ?」 ってもしかして使われてますか。 @niftyだとアクセスログとかさっぱりなので使われてるんだかどうだかさっぱりわからないです。 と言ってもダウンロードされたからと言って使われてるとは限らないわけですが。
ちなみに<URL:excite_world_text.rb>はtimeout処理とかしていないので必要なら呼び出し側でtimeoutでくくるとかする必要があります。
通信するライブラリってこういうのをライブラリの中で処理しようとするとどうすればいいのかが難しい気がする。
*1気づいたのはかなり前なのに書き忘れてたような気が。
*2私はその前に rsync -avC ruby/ rでrというディレクトリにCVS以外の内容をコピーしている。