zt日記

書いているのは Kazuhiro NISHIYAMA a.k.a. ZnZです。
2001|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|
2012|04|05|06|09|

この日記にはツッコミを入れられます。 ツッコミを入れたい日付をクリックすると、フォームが現れます。

xreaでtDiaryを使う方法はxrea.com で tDiary を使う方法インストールメモXREA + tDiary + Namazuをどうぞ。


2004年12月01日(Wed)

[web] by ゴッゴルうさぎ?

Bloglinesで見ていたら「*このエントリは、こうさぎの「ゴッゴルうさぎ」が書きました。」とついているのに、「[Ruby] Ruby/SVGX(こうさぎ) By MoonWolf on Ruby」となっていることに気がついた。

[web] メタデータ

WikiRPCをRWiki2に入れてみようとしたときに気づいたけど、古いものを残していないWikiの場合はversionに対応できなくて困ると思った。authorも保存していないと取り出しようがない。そういう不足しているメタデータを補うのはどうすればいいんだろう。

RWiki2の場合はサーバ側はCGI interfaceのURLをCGI interfaceからアクセスがあったときしか知らないので、WikiRPC interfaceからのアクセスの時にwiki.listLinksのhrefも埋められなくて困ってしまった。この場合はどこかにURLを生成できる情報を設定できればいいだけなんだけど、CGI interface自体とは別に管理しないといけないというのは二重管理になって変更し忘れの可能性が出てくるのでうれしくない。


2004年12月03日(Fri)

[web] マウス操作と色の変化

マウスオーバでのハイライトを正しく扱うのハイライトする部分とクリックできる部分が違うというのは確かにわかりにくい。

疑似クラスの指定がおかしいものとしては他に本文をクリックすると意味もなく色が変わるというのを時々見かける。フォーカスを移動しようとして色が変わって驚くことがたまにあって気づく。

えむもじらの本文にマウスカーソルをあわせると上のh3の背景色が変わるというのも、操作したのとは関係ないところが変化しているように見えるので気持ちの良いものではない。

[web] Bloglines日本語化

オプション設定に日本語はないと思ったのにそんなところで設定するとは。

しかし翻訳に問題があるところが。「(titleの入ったh3要素) by (author)」だったのが、「(titleの入ったh3要素) で (author)」になってるのはどうかと。「"read" になることはできませんでした」のひみつのような問題なんだろうけど。

オプション設定とかは日本語になってわかりやすくなったので全体的にはいい感じ。


2004年12月05日(Sun)

[web] My Diamond Baby - ビジュアルノベルゲーム

どうしてもわからないところはMy Diamond Baby -攻略-をみてクリアした。

[net] irc.fujisawa.wide.ad.jp 計画停電によるサービス停止

IRC users in Japan Web Siteに書いてある通り停止中らしい。停止時間になる前にnadokaとplumのサーバリストからはずしてつなぎ直していたので直接の影響は無し。


2004年12月06日(Mon)

[web][BTS] やさしいバグトラッキング

むアンテナより。

BTSは運用が重要っぽいけど、そういうことを書いてるドキュメントはBTSのソフトのドキュメントとしてはついてなさそう。インストールして設定だけ出来てもどう使っていくかがわからないと結局放置されてしまう。

[net] RFC3548 The Base16, Base32, and Base64 Data Encodingsの4. Base 64 Encoding with URL and Filename Safe Alphabet

URLやファイル名として安全な文字列に変換するという話。

既存のものを流用するのならBase64して「+」と「/」を「-」と「_」に置き換えれば良さそう。


2004年12月08日(Wed)

[debian][grub] savedefault

/usr/share/doc/grub/README.Debian.gzの通りに設定しているとupdate-grubが自動で設定してくれるエントリにsavedefaultがついているが、/usr/share/doc/grub/examples/menu.lstにあったものを最初にコピーして不要なものを削っていたので、default 0になっていて、savedefaultで保存した値が使われていなかった。savedefaultで保存されているエントリが選ばれるようにするにはdefault savedにしておく必要がある。

[ruby] test_cond(TestMonitor)

ruby 1.9.0 (2004-12-08) [i686-linux]でこんなFailureが。もう一回runner.rbを実行しても再現しないし。
  2) Failure:
test_cond(TestMonitor)
    [/home/kazu/fromcvs/ruby/lang/ruby-HEAD/test/monitor/test_monitor.rb:111:in `test_cond'
     /home/kazu/fromcvs/ruby/lang/ruby-HEAD/test/monitor/test_monitor.rb:107:in `synchronize'
     /home/kazu/fromcvs/ruby/lang/ruby-HEAD/test/monitor/test_monitor.rb:107:in `test_cond']:
<true> expected but was
<false>.

2004年12月13日(Mon)

[Meadow][TRAMP] Meadow 2.10でTRAMP

最新版っぽい2.1.2はtramp-debug-bufferをtにしてデバッグ用のバッファを見てみたところ、plinkが起動できなくてcmd.exeのプロンプトのままいろいろコマンドを実行しようとしていたので、以前動いていたはずの2.0系の最新版の2.0.45にしてみた。それでもなんか変なところで止まっているようだったので、hΛlの変わりゆくログ - Meadow + PuTTY + TRAMP で SSHを参考にして以下のように modify-coding-system-alistとtramp-completion-without-shell-pを設定して解決した。 けど肝心の編集したかったファイルはsvn管理だったのでvc-svnがこけて結局開けず。他のCVS管理のファイルなどは普通に開けました。
    (modify-coding-system-alist 'process "plink" 'euc-jp-unix)
    (modify-coding-system-alist 'process "pscp" 'euc-jp-unix)
    (setq tramp-completion-without-shell-p t)
    (setq tramp-default-method "pscp")

2004年12月14日(Tue)

[subversion] 本

勘違いしている?人もいるみたいだけど、Subversion によるバージョン管理と本の「Subversion解説書」は全く別物。目次から推測すると月刊LinuxWorldの2004年8月号から10月号に載っていた記事とほぼ同じ内容っぽいけど確認はしていない。

(2004-12-19追記)[Subversion-jp] Re: バージョン管理システム「Subversion」解説書の話は「上平さんは書籍の製作には関わっていないようです。ライセンスがアレなので勝手に出版できてしまうのです。ライセンスの性質と実物の改変具合を実際に見ないとこの辺の事情が理解しづらいですね。」ということで、勘違いしていたのはこっちだったらしい。

本日のツッコミ(全1件) [ツッコミを入れる]

名誉毀損さん [「Subversion解説書」は上平さんが訳した「Subversion によるバージョン管理」そのものです。 少量の..]


2004年12月15日(Wed)

[debian] ~/.fonts.conf

DOCTYPEが"fonts.dtd"のままになっている例があるけど、ちゃんと"/etc/fonts/fonts.dtd"のように存在するファイルを指定するようにした方が良い。/etc/fonts/*.confの方もfonts.dtdを/usr/share/sgml/dtdあたりに移動してもらってフルパスにしてもらうといいのかもしれない。


2004年12月17日(Fri)

[Ruby] Rubyist Magazine - 0004号

リリースされているようです。


2004年12月18日(Sat)

[Ruby hotlinks] www.rubyist.netに移転

rrrでmod_pythonを使うためにapacheが入れ替わったらしく、その影響でCGIが動かなくなっていて、せっかくなのでwww.rubyist.netに移転した。

そもそもrrrで動かしていたのは当時のsamidareが古いrubyだとcoreをはくことが多くてHEADを追いかけているrrrの方が安定して動きそうだったから。

noreferer.cgiを使っているのは更新日時付きのURLにするためでrefererをつけなくするのが目的ではなくて、当時たまたまリダイレクトに使えるCGIとして話題になっていたから、そのまま流用したという話。

[web] data scheme

xpmファイルを手書きで用意して、convert -depth 2 extlink.xpm extlink.pngでpngファイルに変換して、cutpng.rbで不要そうなチャンクを削ったpngファイルにして、ruby18 -e 'puts([File.read("extlink-small.png")].pack("m").delete("\n"))'でbase64エンコードして、dataスキームとしてFirefoxのuserContent.cssに埋め込んでみた。
/* XPM */
static char * extlink_xpm = {
"10 10 2 1",
"X      c #FFFF00000000",
".      c None",
"..........",
".....X....",
"....X.X...",
"...X...X..",
"..XXX.XXX.",
"....X.X...",
".XXXX.X...",
".X....X...",
".XXXXXX...",
".........."};
#!/usr/bin/env ruby
# cutpng.rb
png = File.open('extlink.png', 'rb')
out_png = File.open('extlink-small.png', 'wb')
filesig = png.read(8)
out_png.write(filesig)
puts filesig.dump
 
until png.eof?
  out = ''
  len = png.read(4)
  out << len
  len = len.unpack('N')[0]
  puts "len=#{len}"
  chunk_type = png.read(4)
  out << chunk_type
  puts "chunk_type=#{chunk_type.dump}"
  data = png.read(len)
  out << data
  puts "data=#{data.dump}"
  crc = png.read(4)
  out << crc
  crc = crc.unpack('N')[0]
  puts "crc=#{crc}"
 
  case chunk_type
  when 'bKGD', 'pHYs'
    # カットする。
  else
    out_png.write(out)
  end
end
/* RWikiなどの外部リンク */
a.external:after {
    content: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAL0lEQVR42mNgoAT8Z2D4T7QivIrRJZH5jDgEGdH5RFvNQqzjWfAaj00hUUFCDAAAyOEV/uB3OHAAAAAASUVORK5CYII=");
}

[cygwin][Tk] cygwinのXとRuby/Tk

cygwinでstartxwin.shで起動したxtermの中からssh -X woodyhostで入った先でrequire 'tk'するとBadAtomとでて落ちてしまう。wishでも同じメッセージがでるのでTkの問題か。
% ruby -rtk -e 0
X Error of failed request:  BadAtom (invalid Atom parameter)
  Major opcode of failed request:  18 (X_ChangeProperty)
  Atom id in failed request:  0x12d
  Serial number of failed request:  12
  Current serial number in output stream:  15
%

2004年12月19日(Sun)

[web] 追記

つっこみのあったSubversionの本の話に追記。

[Windows] 窓の杜 - 【NEWS】「Word」や「Excel」ファイルを閲覧・印刷できるMS製フリーソフト

これで最近のWordで作られたファイルも問題なく閲覧できるようになるのかな。一太郎ビューアやOpenOffice.orgはページの変わり目や表や図が完全には再現できなかったし、Word Viewer 97はdocファイルによっては終了するときに確実に落ちていてあまり使いたくなかったので。


2004年12月20日(Mon)

[ruby] NKF

長い間更新していなかったwoodyマシンのruby 1.8を更新したら、NKF::guess("")の結果が0から1に変わっていてはまった。とりあえずguess1を使うように変更してしのぐことにした。
unless NKF.respond_to?(:guess1)
  NKF.instance_eval { alias guess1 guess }
end

2004年12月21日(Tue) 冬至

[ruby] NKF.guess

昨日のNKF.guessの件は[ruby-list:40445] NKF.guess fails on 1.8.2(snapshot)と同じ問題っぽい。IRCでの話によると内部状態に依存するとか。

試しにirb上ではなく直接ruby18 -rnkf -e 'p NKF.guess("")'で確認したら0を期待しているのに5になったり、NKF.guess("\xA4\xA2\xA4\xA4\xA4\xA6")もeuc-jpで"あいう"のはずなのにirb上で1になったりコマンドライン上で直接だと5になったりして、短い文字列だとNKF.guessは使いものにならなくなってしまってる気がする。

NKF.guess1の範囲の値しか返ってこないと思っているプログラムがあったら誤動作しそうだから1.8のNKF.guessはNKF.guess1に戻してもらった方が良いのかもしれない。

[ruby] soap4r

SOAP::RPC::Driver.newの第1引数のendpoint_urlにURIオブジェクトを渡してはまった。

[ruby][UPnP] GetExternalIPAddress

以前に実装していたSSDPとβえんどるふぃん UPnP対応ルーター(IGD)をいじくるを参考にして、GetExternalIPAddressまでの処理を実装した。
#!/usr/bin/ruby1.8
 
require 'open-uri'
require 'rexml/document'
require 'socket'
require 'timeout'
require 'uri'
 
class SSDP < UDPSocket
  SSDP_HOST = '239.255.255.250'
  SSDP_PORT = 1900
 
  def bind(my_ipaddr = Socket.gethostname, my_port = 20000, my_port_max = my_port + 100)
    ret = super(my_ipaddr, my_port)
    p ret if $DEBUG
    return ret
  rescue Errno::EADDRINUSE
    if my_port < my_port_max
      myport += 1
      retry
    end
  end
 
  def send_discover(st, mx=3)
    send(<<HTTP_REQUEST.gsub(/\r?\n/, "\r\n")+"\r\n", 0, SSDP_HOST, SSDP_PORT)
M-SEARCH * HTTP/1.1
HOST: #{SSDP_HOST}:#{SSDP_PORT}
MAN: "ssdp:discover"
MX: #{mx}
ST: #{st}
HTTP_REQUEST
  end
 
  def discover_rootdevice
    send_discover("upnp:rootdevice")
  end
 
  def discover_all
    send_discover("ssdp:all")
  end
 
  def discover_wan_ppp_connection
    send_discover("urn:schemas-upnp-org:service:WANPPPConnection:1")
  end
 
  def discover_wan_ip_connection
    send_discover("urn:schemas-upnp-org:service:WANIPConnection:1")
  end
end
 
def get_locations
  ssdp = SSDP.open
  ssdp.bind
  ssdp.discover_wan_ip_connection
  ssdp.discover_wan_ppp_connection
  locations = []
  begin
    while true
      timeout(3) do
        response = ssdp.recvfrom(1024)
        p response if $DEBUG
        if /^Location:\s*(http\S+)/i =~ response[0]
          locations.push($1)
        end
      end
    end
  rescue TimeoutError
  end
  ssdp.close
  locations.uniq!
  locations
end
 
def location_to_controlURL(location)
  open(location) do |fp|
    doc = REXML::Document.new(fp)
    controlURL = URI.parse(doc.elements["//URLBase"].texts.to_s) +
      doc.elements["//service[(serviceType='urn:schemas-upnp-org:service:WANIPConnection:1') or (serviceType='urn:schemas-upnp-org:service:WANPPPConnection:1')]/controlURL[1]"].texts.to_s
    p controlURL if $DEBUG
    return controlURL
  end
end
 
if __FILE__ == $0
  locations = get_locations
  p locations if $DEBUG
 
  controlURLs = locations.collect do |location|
    location_to_controlURL(location)
  end
  p controlURLs if $DEBUG
 
  require 'soap/rpc/driver'
  namespace = 'urn:schemas-upnp-org:service:WANPPPConnection:1'
  method_name = 'GetExternalIPAddress'
  controlURLs.each do |endpoint|
    client = SOAP::RPC::Driver.new(endpoint.to_s, namespace, "#{namespace}\##{method_name}")
    client.wiredump_dev = STDERR if $DEBUG
    client.add_method(method_name)
    puts client.GetExternalIPAddress
  end
end

2004年12月22日(Wed)

[Windows] Adobe Reader 7.0

いれてみた。環境設定でJavaScriptとPDFをブラウザに表示をオフにした。

[UPnP] パスワード丸見え?

昨日のUPnPの件をもうちょっと調べていたら見つけた話。

UPnP_IGD_WANPPPConnection 1.0.pdfをみて、それっぽいのを試してみたけど、試したルータは対応していなかった。optionalとなってるから意図的に対応していない可能性が高そう。

検索して見つけたSecurityFocus BUGTRAQ Mailing List: BugTraqだとfirewallに穴が開けられるということも問題視してるみたい。実際にMSN Messengerなどで必要になるまではそのことが気になって有効にしたくなかったけど、UPnPを有効にする場合って現状はほとんどがそのためだけのような気がするから難しい。


2004年12月24日(Fri)

[Linux][gdb] 出力途中で一時停止しないようにするには?

Debugging with GDB - GDBの制御の画面サイズの説明によるとset height 0とすれば---Type <return> to continue, or q <return> to quit---で止まることがなくなるらしい。

コマンド・ファイルの~/.gdbinitに書いておけば毎回手動で設定する必要もない。ちなみに.gdbinitはカレントディレクトリのも読み込むらしいので、共有マシンの/tmpとかでgdbを起動するのは危険そう。


copyright © 2001-2013 ZnZ
Key fingerprint = 6E14 2C9C DBD7 874D 8B3C CAA8 9B58 5538 ED7E 1B73