2005年 07月 10日

Perl たんのツンデレの件

Perl で何書けばいいんですがって感じでもうしょっぱなからダメダメです。オープンマインドな Ruby たんが優しすぎるのです。もう黄身無しでは(きもい

2005年 07月 05日

プログラミングの仕方

プログラム書くとき最初になにをすればいいか忘れてしまった……最終的にサイトから PHP を排除したい。ということで日記のスクリプトを Ruby に移植・再編するんだけど、どうすればいいかなぁ。

2005年 02月 03日

ruby-xslt on xrea

ruby-xslt が param に対応したので XREA 上で作ってみようとしたけどあっけなく失敗した。原因究明するのもバカバカしくてやめてしまった。いいや。

ruby-sablot はローカルで動かず、ruby-xslt は鯖上で動かないという素敵な勢い。どうでもいいけど configure, make, make install とかいう手順 (とそれに似た手順) が面倒くさくて死にそうだ。ライブラリがみつかんねーといわれたら検索して場所さがしてオプションの指定方法さがして(ry

C でライブラリ書くのが許されるのは小学生までよねーキャハハ。いや嘘です。すいません。でも Pure Ruby がいいkd

2005年 02月 02日

GUID / UUID

GUID とか UUID はどうやってホンモノと偽者を判断するんだろう?

uuidgen
5b03e77e-e620-4aa3-aba7-03a034b1ea77
[rand(2**128+1).to_s(16)].pack("H*").unpack("h8 h4 h4 h4 h12").join("-")
cf689027-9832-ef63-7983-deb39c8492ed

どっちもソレっぽいじゃん。

Fx Extension

何度やっても環境構築でつまずくっていうかデバッグできる状況までいかないので諦める。なんてか Fx をインスコして以来何度かやろうとしてる罠。別に特別作りたいわけじゃないけど弄ってみたいじゃない? なんかもう完全面倒臭そうなので見るだけにしよう。

どういうシステムで拡張が管理されてるかの最新であることが保証されてる日本語のドキュメントが欲しい。無理なんだけど。

2005年 01月 26日

Segmentation fault

なんか cygwin ruby 1.8.2 の net/protocol.rb がたまに Segmentation fault で落ちる。とりあえず落ちてもすぐ復帰するようにして放置。知らん。

loop do
# Make running process
pid = Process.fork do
# IRC BOT 起動
end
# I am monitoring process.
pid, status = Process.waitpid2(pid)
p status
end

プロセス死んでもとにかく復帰。復帰。復帰。ぐるぐる。

結構頻度が高い。socket 関連でダメだと思うんだけど、どうすればいいんだろ。

2005-01-27 01:45:23 #<Process::Status: pid=12296,signaled(SIGABRT=6)>
2005-01-27 02:19:07 #<Process::Status: pid=15652,signaled(SIGABRT=6)>
2005-01-27 17:32:52 #<Process::Status: pid=13756,signaled(SIGABRT=6)>
2005-01-27 23:23:39 #<Process::Status: pid=19748,signaled(SIGSEGV=11)>

SIGABRT のやつは net/protocol.rb の rbuf_fill メソッド @socket.sysread(1024) でエラー。SIGSEGV は timeout.rb。発生元はたぶん同じメソッド。

2005年 01月 22日

Ruby コードを安全に実行する。

前にも書いたけど完全じゃないので。たぶん、これでいいはず。

def safe(lvl, tm=1)
result = nil
tg = nil
th = Thread.start(lvl) do |level|
tg = ThreadGroup.new.add(Thread.current)
$SAFE = level
result = yield
end.join(tm)
tg.list.each {|t| t.kill}
raise TimeoutError unless th
result
end

ThreadGroup を新しく作り、それにカレント実行スレッドを突っ込んで、信頼できないコードから生成されるスレッドを全てこいつの所属させ、実行終了したら kill! kill! kill!

IRC BOT の Ruby コード実行機能をこれにした。まぁしかし! SEGV されたら終りというどうしようもない脆弱性がありますけれども。

Ruby, ブロック引数をとるメソッド

def foo(a, b)
yield a + b
end
def fop(a, b, &block)
yield a + b
end
def foq(a, b, &block)
block.call a + b
end

引数に &block を書かないとブロックをとるメソッドなのか取らないメソッドなのかわかりにくい。でもなんか &block を書くとダサい。

二番目の方法だと block という引数を使ってなくてキモい。三番目の方法は一般的なコードじゃなくてキモい。

さて、ホントは上のコードの block.call は block.yield (引数のチェックをしない) になるんだろうけど、NoMethodError がでる。なんでだろ。

$ ruby -v -e 'Proc.new {|t| puts t}.yield("foo")'
ruby 1.8.1 (2003-12-25) [i386-cygwin]
-e:1: undefined method 'yield' for #<Proc:0x100e6dd8@-e:1> (NoMethodError)
exit 1
2005年 01月 18日

PHP の簡略化あるいは

PHP の簡略化 PI (<? .. ?>) は好きじゃない。ターゲットが示されてないのがなんか気になるし、XML 宣言実行しようとするのがウザすぎ。それと ASP 方式 (<% .. %>) は問題外。

XML の Processing instruction の仕様を引用する。

Processing Instructions
[16] PI ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>'
[17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))

XMLPI においてターゲットは必須。よってないとキモい。

そんなわけで [ruby-core:04266] ってのは <?erb .. ?> とかにするほうがいいんだけど、それだと目的のタイプのし易さが結局アレになるのでそもそもだめじゃんみたいな。

何が言いたいんですがあたしは。

2005年 01月 14日

chokan の設定

YAML を使うことにした。当初 XML を使うつもりだったけどマップするのがめんどいので保留。obj.to_yaml だけなのは簡単でいい。あんまり文法は好きじゃないんだけど……