[2000/12/02]

Perl/Ruby Con.

みんないろいろ書いているようですがとりあえずほかのことが先なので後回しと書きつつ結局いろいろは書いてしまう。

メモ

3日目の時にごとけんさんの話を聞いているうちに忘れてしまっていて質問できなかった話とか帰りの地下鉄の中でnokadaさんと話したことや帰りの電車の中でRubyプログラミング入門の続きを読んだときに気づいたことなどのメモ。 ruby-listに投げた方がよさそうなこともあるけどとりあえずここにメモ。

rwiki-installer 1.02

[2000/12/03]

メモ追記

RWikiつついたメモ

rd2で文字化け

入力ファイルがsjisでデフォルト引数のところが文字列だと文字化けというかvarのマークアップが壊れる。 ruby -Ks rd2にしてもダメでした。 *1

文字化けする入力例:
=begin
--- Klass#meth(arg='デフォルト引数')
=end

[2000/12/04]

mailer-count.rb

<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)}"
}

[2000/12/06]

rwiki-installer 1.10

とりあえずSolaris 2.6でも動くことを確認できたので1.10にしてみた。 インストールされてるかどうかの確認はwhich raccからracc --versionに変更してみた。 他はawkのsubとreadにも問題があったので修正した。

$WORK関係を色々いじったので古いのも<URL:rwiki-installer-1.02.tar.gz>に残してます。

wakanu.rb

RWikiで見かけて思い出したので忘れないうちにパッチを送ってみた。

致命的な不具合修正は.を覚えるとwakanu.datが壊れると言うことだけだったと思う。

FPROGORGのRTCで実際に運用してるのは私ではないですが。

[2000/12/07]

ローマ字入力

ローマ字入力っていうタイトルと言うことはかな入力にするというのはもっと思いつかないんでしょうか:-)

それはさておき私はどちらかというとどこでも使えることを重視したいので基本的にはそのまま使ってます。最近はノートパソコンがどこでも使える端末になってて101配列のキーボードをほとんど使ってないのがちょっと気になりますが…。

[2000/12/08]

ruby

RAA

RWiki-installerのバージョンのところを1.10になおした。 それからWORK関係の変更をしてからの動作確認が少ないので、Statusをstableからreleaseに変更した。

リンクミス

<URL:http://www.yoshidam.net/diary/200012.html#07_3>Ruby Hotlinksへのリンクのjaが抜けてるみたい。

消滅する日記とか引用とか

永久保存希望なら自分で引用して残しておくという手もありかも。

引用って公開されたものからなら、翌日に消えてしまってたり別途お金を払わないとみられないものからだったりしても問題ないはず。

nplant

nplantはcygwin版rubyではcursesがないってことで動かなかったので、Linuxでやってみた。 DOSのは押した間しか動かなかったと思うけど、同時押しがきかないから動き続けるようになってるのかな?

oneliner

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.truncatef.truncate(f.tell)と同じだったらもうちょっと短くなってたけどそれでもバッチファイルにしないと入りきらない長さだった。

diary

完全に公開されている(と思われる)日記用スクリプト。

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でやってるのかと思って何を使ってるのかちゃんとチェックしてなかった(^^;

[2000/12/10]

ruby

CVS

cvs....わからんというのをみたのでメモ。

  1. echo cvs -z3 >> ~/.cvsrc などで~/.cvsrccvs -z3と書いておく。
  2. cvs -d :pserver:anonymous@cvs.netlab.co.jp:/home/cvs login でpasswordをきかれるのでguestと入れる。(これで~/.cvspassにこの情報が残る。)
  3. cvs -d :pserver:anonymous@cvs.netlab.co.jp:/home/cvs checkout ruby でcheckoutする。するとcheckoutを実行したディレクトリの下にrubyというディレクトリができてその中にrubyのソースが入っている。(その中の各ディレクトリの中のCVSというディレクトリにどこからとってきたのかなどの情報が入っているのでupdateなどではpserverを指定しなくても良い。)
  4. rubyディレクトリに入る。*2
  5. autoconfでconfigureを作成する。(autoconfがないのならftp://ftp.netlab.co.jp/pub/lang/ruby/1.6/ruby-1.6.2-preview3.tar.gzのような最近のtarballからconfigureだけ取り出しても大丈夫だと思います。)
  6. 後は普通にtarballをとってきたときと同じように ./configure --enable-shared; make; make install などを実行する。
  7. 最新にしたいなと思ったら今度はcheckoutではなくrubyディレクトリで cvs update -dP を実行する。すると最新版になるので再び make; make install をする。
  8. なんだかよくわからないけどうまくmakeできないことがあったら質問する前にとりあえずcheckoutからやり直してみるとうまくいくことがあった。

for oneliner

$_.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だけ。

[平成12年12月12日]

翻訳サービス

Amikaiってクッキーでセッション管理してるみたいで最初の日英翻訳が必ず文字化けしてしまうので、一度目の結果を捨てて2回目の結果を使ってるんですがどうにかなりませんか。 ってクライアントではどうにもなりそうにないですが。

たぶん同じ理由でクッキー非対応のw3mでも日英翻訳が使えませんでした。

RD syntax error

RDで「excite翻訳クライアント」と「Amikai翻訳クライアント」のところがエラーになったのでverbにしてみた。 RDtoolってShift_JISと相性悪い?

RD syntax error: line 297:
 ...|URL:excite_world_text.rb>))を更新。
   ^

[2000/12/13]

rd2とShift_JIS

rd2とShift JISですが、特別なことをしていないのなら-Ksをつければ大丈夫のはず…って思ったらつけてなかったのでMakefile修正。

修正してverbをはずしたらやっぱりエラーに。

全部euc-jpに変換してもいいんだけど、今から変換するとCVSでほとんど変更扱いになるのであまりしたくないし。

nyasuさんとこ

英語のページから

VisualuRuby計画(仮称)からリンクされてたAlexsiさんのところの中にRWiki-installerを発見。

英語ページからもリンクされてるってことで変えよう "Japanese Only"を思い出したので、ちょっと書き加えてみた。

nplant

そういえばnplantが元のままで動かなかった前田さんの使ってる環境って何なんだろう? [ruby-list:26429]ruby -v-vがついてればわかったのに…。

Errata

Errataってこのタイトルだと何のErrataかわかりませんが、「Rubyプログラミング入門」正誤表です。

どこまで手元の本に反映させたのかを調べやすくするためにwgetしたファイルをCVSに入れてみた。CVS便利。

そういえばRWiki-installerは今は専用アカウントでRCS管理だからこれもCVSに入れた方が良いのかも。

[2000/12/15]

多量のオブジェクトが生き残るようなアプリケーション

<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時頃までは更新しようとしないように何かチェックするような仕組みが必要かも。

[2000/12/22]

日記

shugo.netの日記WWWCに追加してチェック開始。

dRuby

全然意味はないけど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

プログラムの法則

Project Softicaより。

(11/18)
プログラムの法則その 256:ヒマになったとたんバグ報告がくる。
プログラムの法則その 257:忙しさが頂点に達するとバグ報告がくる。

256から始まったんだろうか…。255以前があるのなら見てみたいなぁ。 忙しいときって本当に忙しかったらバグ報告がきてても見る暇がなくて気がつかないかも。 暇になったときだといじって逆にエンバグしてるとか…。

[2000/12/25]

exciteの翻訳サービススクリプト

近況 00/12/22より 「あとZnZさんの所にあるexciteの翻訳サービススクリプトでやってみたいことが。 プロトコルがhttpとはいえ、分散コンピューティングな雰囲気。雰囲気だけ?」 ってもしかして使われてますか。 @niftyだとアクセスログとかさっぱりなので使われてるんだかどうだかさっぱりわからないです。 と言ってもダウンロードされたからと言って使われてるとは限らないわけですが。

ちなみに<URL:excite_world_text.rb>はtimeout処理とかしていないので必要なら呼び出し側でtimeoutでくくるとかする必要があります。

通信するライブラリってこういうのをライブラリの中で処理しようとするとどうすればいいのかが難しい気がする。


上へ indexへ
copyright © 2000 ZnZ

*1気づいたのはかなり前なのに書き忘れてたような気が。
*2私はその前に rsync -avC ruby/ rでrというディレクトリにCVS以外の内容をコピーしている。