この日記にはツッコミを入れられます。 ツッコミを入れたい日付をクリックすると、フォームが現れます。
xreaでtDiaryを使う方法はxrea.com で tDiary を使う方法やインストールメモやXREA + tDiary + Namazuをどうぞ。
Bloglinesで見ていたら「*このエントリは、こうさぎの「ゴッゴルうさぎ」が書きました。
」とついているのに、「[Ruby] Ruby/SVGX(こうさぎ) By MoonWolf on Ruby」となっていることに気がついた。
WikiRPCをRWiki2に入れてみようとしたときに気づいたけど、古いものを残していないWikiの場合はversionに対応できなくて困ると思った。authorも保存していないと取り出しようがない。そういう不足しているメタデータを補うのはどうすればいいんだろう。
RWiki2の場合はサーバ側はCGI interfaceのURLをCGI interfaceからアクセスがあったときしか知らないので、WikiRPC interfaceからのアクセスの時にwiki.listLinksのhrefも埋められなくて困ってしまった。この場合はどこかにURLを生成できる情報を設定できればいいだけなんだけど、CGI interface自体とは別に管理しないといけないというのは二重管理になって変更し忘れの可能性が出てくるのでうれしくない。
マウスオーバでのハイライトを正しく扱うのハイライトする部分とクリックできる部分が違うというのは確かにわかりにくい。
疑似クラスの指定がおかしいものとしては他に本文をクリックすると意味もなく色が変わるというのを時々見かける。フォーカスを移動しようとして色が変わって驚くことがたまにあって気づく。
えむもじらの本文にマウスカーソルをあわせると上のh3の背景色が変わるというのも、操作したのとは関係ないところが変化しているように見えるので気持ちの良いものではない。
オプション設定に日本語はないと思ったのにそんなところで設定するとは。
しかし翻訳に問題があるところが。「(titleの入ったh3要素) by (author)」だったのが、「(titleの入ったh3要素) で (author)」になってるのはどうかと。「"read" になることはできませんでした」のひみつのような問題なんだろうけど。
オプション設定とかは日本語になってわかりやすくなったので全体的にはいい感じ。
どうしてもわからないところはMy Diamond Baby -攻略-をみてクリアした。
IRC users in Japan Web Siteに書いてある通り停止中らしい。停止時間になる前にnadokaとplumのサーバリストからはずしてつなぎ直していたので直接の影響は無し。
むアンテナより。
BTSは運用が重要っぽいけど、そういうことを書いてるドキュメントはBTSのソフトのドキュメントとしてはついてなさそう。インストールして設定だけ出来てもどう使っていくかがわからないと結局放置されてしまう。
URLやファイル名として安全な文字列に変換するという話。
既存のものを流用するのならBase64して「+」と「/」を「-」と「_」に置き換えれば良さそう。
/usr/share/doc/grub/README.Debian.gzの通りに設定しているとupdate-grubが自動で設定してくれるエントリにsavedefaultがついているが、/usr/share/doc/grub/examples/menu.lstにあったものを最初にコピーして不要なものを削っていたので、default 0になっていて、savedefaultで保存した値が使われていなかった。savedefaultで保存されているエントリが選ばれるようにするにはdefault savedにしておく必要がある。
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>.
(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")
勘違いしている?人もいるみたいだけど、Subversion によるバージョン管理と本の「Subversion解説書」は全く別物。目次から推測すると月刊LinuxWorldの2004年8月号から10月号に載っていた記事とほぼ同じ内容っぽいけど確認はしていない。
(2004-12-19追記)[Subversion-jp] Re: バージョン管理システム「Subversion」解説書の話は「上平さんは書籍の製作には関わっていないようです。ライセンスがアレなので勝手に出版できてしまうのです。ライセンスの性質と実物の改変具合を実際に見ないとこの辺の事情が理解しづらいですね。」ということで、勘違いしていたのはこっちだったらしい。
rrrでmod_pythonを使うためにapacheが入れ替わったらしく、その影響でCGIが動かなくなっていて、せっかくなのでwww.rubyist.netに移転した。
そもそもrrrで動かしていたのは当時のsamidareが古いrubyだとcoreをはくことが多くてHEADを追いかけているrrrの方が安定して動きそうだったから。
noreferer.cgiを使っているのは更新日時付きのURLにするためでrefererをつけなくするのが目的ではなくて、当時たまたまリダイレクトに使えるCGIとして話題になっていたから、そのまま流用したという話。
/* 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=");
}
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 %
つっこみのあったSubversionの本の話に追記。
これで最近のWordで作られたファイルも問題なく閲覧できるようになるのかな。一太郎ビューアやOpenOffice.orgはページの変わり目や表や図が完全には再現できなかったし、Word Viewer 97はdocファイルによっては終了するときに確実に落ちていてあまり使いたくなかったので。
昨日の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に戻してもらった方が良いのかもしれない。
#!/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
昨日のUPnPの件をもうちょっと調べていたら見つけた話。
UPnP_IGD_WANPPPConnection 1.0.pdfをみて、それっぽいのを試してみたけど、試したルータは対応していなかった。optionalとなってるから意図的に対応していない可能性が高そう。
検索して見つけたSecurityFocus BUGTRAQ Mailing List: BugTraqだとfirewallに穴が開けられるということも問題視してるみたい。実際にMSN Messengerなどで必要になるまではそのことが気になって有効にしたくなかったけど、UPnPを有効にする場合って現状はほとんどがそのためだけのような気がするから難しい。
Debugging with GDB - GDBの制御の画面サイズの説明によるとset height 0とすれば---Type <return> to continue, or q <return> to quit---で止まることがなくなるらしい。
コマンド・ファイルの~/.gdbinitに書いておけば毎回手動で設定する必要もない。ちなみに.gdbinitはカレントディレクトリのも読み込むらしいので、共有マシンの/tmpとかでgdbを起動するのは危険そう。
✑ 名誉毀損さん [「Subversion解説書」は上平さんが訳した「Subversion によるバージョン管理」そのものです。 少量の..]