ruby-freedb を使って CDDB の情報を引き出そうと遊んでいた結果、
ruby-freedb は該当する CD (の候補)が複数存在した場合に、
正しくハンドリングできていないことがわかりました。
調べてみた結果、CD 情報検索の際の response code 210 に対応していないようです。
response code 210 は discid に該当する CD が複数ある場合に、
その候補をリストアップして示すためのものです。
以下、その修正パッチ。
--- freedb.rb.orig 2006-12-24 20:52:18.000000000 +0900
+++ freedb.rb 2006-12-24 20:12:16.000000000 +0900
@@ -372,7 +372,7 @@
case resp
when /^200 (.+)/ #single result
@results << $1
- when /^211/ #multiple results
+ when /^211/, /^210/ #multiple results
each_line(@handler) { |l|
@results << l
}
調べる際に CDDB Protocol Specification を探し回ったのですが、
全然見つけることが出来ませんでした。
もしかして GraceNote で developper 登録しないとダメなのかなぁ。
パッチを upstream に投げる前に、ちゃんと仕様を見てからにしたいのだけど…。
@
post it to developper:
調べようと思って後回しにすると放り投げたままになりそうなので、
とりあえずパッチを開発者宛に投げておきました。
それにしても、英語の能力がかなり落ちてしまっています。
用件はどうにか伝えられる程度のメールしか書けなくなってます…。
耳も使っていないから全然聞き取れなくなっているし、あまりよくないなぁ。
大掃除していたら、以前 sscanf() について試してファイルが出てきたので。
sscanf() では format として文字クラス(?)指定が出来るようです。
文字クラスらしきものは %[] で指定します。regexp の [] とやや似ています。
以下、サンプルプログラム。
#include <stdio.h>
int main()
{
char string[] = "123 456 789 abc def ghi";
char read_buff1[1024], read_buff2[1024];
printf("Source String:\n %s\n", string);
sscanf(string, "%s %s", read_buff1, read_buff2);
printf("Scaned String(1):\n '%s', '%s'\n", read_buff1, read_buff2);
sscanf(string, "%[1234567890 ] %s", read_buff1, read_buff2);
printf("Scaned String(2):\n '%s', '%s'\n", read_buff1, read_buff2);
sscanf(string, "%[12] %s", read_buff1, read_buff2);
printf("Scaned String(3):\n '%s', '%s'\n", read_buff1, read_buff2);
return 0;
}
実行結果はこうなります。
% gcc --version
gcc (GCC) 3.3.5 (Debian 1:3.3.5-13)
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
% gcc -o test_sscanf test_sscanf.c
% ./test_sscanf
Source String:
123 456 789 abc def ghi
Scaned String(1):
'123', '456'
Scaned String(2):
'123 456 789 ', 'abc'
Scaned String(3):
'12', '3'
文字クラスらしきものはスペースを含めたり、文字種を限定することが出来ます。
しかし、greedy match しか選べない上、移植性も怪しいので使うのは難しそうです。
前回の Portsmouth 戦と同様 Adebayor が目立っていましたね。
Chelsea 戦やそれ以前からは想像できないような、すばらしいプレーぶりです。
何よりも素晴らしいのは、ボールを引き出す動き。
今まではボールが来るまで動き方がわかっていないかのように、
うろうろしていることが多かったのですが、この 2 試合では呼び込む動きや
飛び込む動きがはっきりと出ていましたね。
得点とともに自信がついてきたのか、ドリブルや体の使い方も見違えるようです。
あとはシュート精度があがるといいかもしれません。
試合の方はいろいろ見るべきところが入り交じった試合でした。
思いついたことを並べておきます。
- 1 点目になる時の CK (2 回目)って、誰が触って出したもの? Arsenal 側のヘディングがバーに当たってたから、Goal kick だと思ってました。
- van Pelsie の PK は Home advantage?
- Gilberto は相変わらず絶好調
- van Pelsie のシュート精度、最近あまりよくないような…
- Cesc は久しぶりに前線に飛び出してくるように。バロメーターの一種なのかも
- 最後はやはり Flamini! 最近登り調子ですばらしいです
- Bently や Pedersen はやはり素晴らしい選手ですね:)
あとはこれを続けることでしょうね。
まずはこの年末年始で結果を残して欲しいものです。
結果: Arsenal 6 - 2 Blackburn