ふと、プロジェクトの名前を占うツールとして、 project-name というものを作ってみた。
% project-name template template: google hit : 8300000 sourceforge.net : already registered sourceforge.jp : not registered savannah.gnu.org : not registered
というように、google でのヒット数と、 いくつかのサイトで登録されているかどうかを調べるもの。
ついでに、google だけ調べるのも作る。
% google-hit {a-z}template atemplate 4570 btemplate 1390 ctemplate 481 dtemplate 3410 etemplate 1110 ftemplate 4530 gtemplate 85 htemplate 2480 itemplate 978 jtemplate 375 ktemplate 709 ltemplate 248 mtemplate 484 ntemplate 166 otemplate 280 ptemplate 816 qtemplate 209 rtemplate 84 stemplate 940 ttemplate 980 utemplate 28 vtemplate 858 wtemplate 789 xtemplate 2590 ytemplate 11 ztemplate 185
アンテナの HTML を適当に使って更新を検査する部分も HTree に移行する。 これで Tidy と REXML は不要になった。
これで samidare の非標準なものに対する依存は xtemplate だけになったのだが、 これはどうするか。
新しく作りたいところだが、うまい名前が思いつかない。 htree と対になる htemplate を考えていたのだが、 google で 2480 も hit するのが気にいらない。
結果論ではあるが、 ChangeLog の移動をリリース後にすべき理由として、 リリース前はたてこんでいるからというのをあげておくべきであった。
LIRS の時差を使っているところが実際にあるのかどうかを調べてみる。
とりあえず手元に集まっているので grep -v ,32400, *.lirs としてみる。 ふむ。はなから指定する気がなさそうなの(0)もあれば、 それっぽい値を指定してあるのもあるな。
東京
東京
LIRS を生成してみる。
samidare は後からどこが変化したか調べるために最新の内容とひとつ前の内容の 2つをファイルとして手元に残しておくのだが、 この数を設定可能にしてみる。
とりあえずこれでバ... もとい、tenki.jp のレーダーの日本全図を しばらく貯め、animate で眺めてみる。
雨が動いていくのがなかなか楽しい。 しかし、10分間隔で更新されないことのほうが多いな。
samidare の利点
うぅむ。レーダーにはぜんぜん役にたってないな。
% ruby -e ' h = {} h[0.0/0.0] = 1 h[0.0/0.0] = 2 h[0.0/0.0] = 3 p h' {NaN=>3, NaN=>2, NaN=>1} % ruby -e ' h = {} nan = 0.0/0.0 h[nan] = 1 h[nan] = 2 h[nan] = 3 p h' {NaN=>3} % ruby -e ' nan = 0.0/0.0 p nan.eql?(nan)' false
なん 2940000 ナン 507000 NaN 1550000
雨である。
まぁ、レーダー画像のアニメーションが変化に富んでいるのは面白い。
... 台風来ないかな。
うぅむ。
昨日から頭痛気味なので、十分に眠ってみる。
なんとなく直ったかんじ。
しかし、トラブルがあったらとりあえずいつもの対処を適用し、 症状が消えたっぽくてもちゃんと治ったかどうか今ひとつ判然としないというのは、 なんというか Windows を連想させるものがある。
Software Design 2003年9月号 に「zsh を使ってみよう」という記事を書いたのだが、 中身は Ruby のインストールというかなんというか、 どのくらい受けるのだろうか。
文庫本 4
文庫本 +1
熱海
発表
熱海
文庫本 +7
西早稲田
西早稲田
さくら
西早稲田
aosd-jp: アスペクト指向言語、アスペクト指向ソフトウエア開発など、アスペクト指向に関連した情報交換を行うためのML
HTML で、head 要素の profile 属性に相対 URI を記述した場合、 base 要素は効くのだろうか?
ローカルの HTML ファイル中に form 要素を書き、 action 属性に他のローカルな HTML ファイルを指定してみた。
w3m でも mozilla でも submit すると単に action に指定した HTML ファイルが表示される。
% google-hit {さ,サ,査}{{ど,ド}{く,ク},読} さどく 79 さどク 1 さドく 1 さドク 21 さ読 224 サどく 1 サどク not-found サドく 10 サドク 119 サ読 48 査どく not-found 査どク not-found 査ドく not-found 査ドク not-found 査読 13100
オブジェクトを破壊的に変えるには、 その影響範囲を把握している必要がある。 つまり、破壊的に変更しようとするオブジェクトを参照しているところが どのへんにあるのか把握する必要がある。
しかし、とくに文字列など小さなオブジェクトについて適当に引数に渡していると影響範囲を把握していない状況になることがあり、 その場合は破壊的変更はできない。 (複製して変更するというのは、 影響範囲が把握できるオブジェクトを作って変更するということである)
ここで、 影響範囲を把握している状態から、 把握していない状態に遷移することは可能であるが、 逆方向の遷移には無理がある。
ということは、オブジェクトの生成から回収に至る一生において、 破壊的変更は前半に偏るという可能性があるのではないか。
% google-hit もったいないおばけ もったいないおばけ 848
rna - RSSベースのアンテナ「RNA」
himi さんと、XML って羹に懲りて膾を吹いてる感じ、などという話をする。 (属性の中に < を直接書けないところとか)
うぅむ。Qt は C++ を拡張して使ってんのか。
% google-hit 再帰ん 再帰ん 8
とゆーか、この言い回しを使ってるのは一人の模様。
The RWiki - たむら::日本語文字コードの自動判定
追試してみる。
IPADIC を取ってきて *.dic から見出し語を取り出して... おや、数が合わないな。217338 も出てきた。 まぁいいや、気にしないことにしよう。
元が EUC-JP なので iconv で他のコードに変換して... おや、変換不能な文字が入ってるな。 まぁいいや、そういうのは消してしまおう。
Shift_JIS, UTF-8, ISO-2022-JP のデータをつくって集計してみる。
% ruby -rmconv -e 'ARGF.each {|line| p line.guess_charset }' d.euc|sort|uniq -c 217309 "euc-jp" % ruby -rmconv -e 'ARGF.each {|line| p line.guess_charset }' d.sjis|sort|uniq -c 430 "euc-jp" 216879 "shift_jis" % ruby -rmconv -e 'ARGF.each {|line| p line.guess_charset }' d.utf8|sort|uniq -c 5113 "euc-jp" 117967 "shift_jis" 94229 "utf-8" % ruby -rmconv -e 'ARGF.each {|line| p line.guess_charset }' d.jis|sort|uniq -c 217309 "iso-2022-jp"
ふむ、たしかに UTF-8 の認識率が低い。
判断できなかったときは名前の辞書順で選んでるから、 そこを全部返すようにして、どういう内訳になってるか調べてみる。
% ruby -rmconv -e 'ARGF.each {|line| p line.guess_charset_list }' d.euc|sort|uniq -c 2850 ["euc-jp", "shift_jis", "utf-8"] 133539 ["euc-jp", "shift_jis"] 80920 ["euc-jp"] % ruby -rmconv -e 'ARGF.each {|line| p line.guess_charset_list }' d.sjis|sort|uniq -c 430 ["euc-jp", "shift_jis"] 147 ["shift_jis", "utf-8"] 216732 ["shift_jis"] % ruby -rmconv -e 'ARGF.each {|line| p line.guess_charset_list }' d.utf8|sort|uniq -c 5113 ["euc-jp", "shift_jis", "utf-8"] 117967 ["shift_jis", "utf-8"] 94229 ["utf-8"] % ruby -rmconv -e 'ARGF.each {|line| p line.guess_charset_list }' d.jis|sort|uniq -c 217309 ["iso-2022-jp"]
なかなか面白い。いろんなことがわかる。
ここで興味深いのは、 Shift_JIS を UTF-8 かもしれないと判断することは少いけれど、 UTF-8 を Shift_JIS かもしれないと判断することはかなり多いというところである。 ということは、Shift_JIS と UTF-8 の優先順位をひっくり返せば、 Shift_JIS の認識率をあまり落さずに UTF-8 の認識率を上げられるはず、というわけでひっくり返した。
% ruby -rmconv -e 'ARGF.each {|line| p line.guess_charset }' d.euc|sort|uniq -c 217309 "euc-jp" % ruby -rmconv -e 'ARGF.each {|line| p line.guess_charset }' d.sjis|sort|uniq -c 430 "euc-jp" 216732 "shift_jis" 147 "utf-8" % ruby -rmconv -e 'ARGF.each {|line| p line.guess_charset }' d.utf8|sort|uniq -c 5113 "euc-jp" 212196 "utf-8" % ruby -rmconv -e 'ARGF.each {|line| p line.guess_charset }' d.jis|sort|uniq -c 217309 "iso-2022-jp"
つまり、 Shift_JIS の認識率が 99.8% から 99.7% に落ちるのと引き替えに、 UTF-8 の認識率を 43.4% から 97.6% に上げられたことになる。
ちょっと並べ直してみる。
["euc-jp", "shift_jis", "utf-8"] utf-8:5113 ["euc-jp", "shift_jis", "utf-8"] euc-jp:2850 ["shift_jis", "utf-8"] utf-8:117967 ["shift_jis", "utf-8"] shift_jis:147 ["euc-jp", "shift_jis"] euc-jp:133539 ["euc-jp", "shift_jis"] shift_jis:430 ["iso-2022-jp"] iso-2022-jp:217309 ["shift_jis"] shift_jis:216732 ["utf-8"] utf-8:94229 ["euc-jp"] euc-jp:80920
一般にこういうので全てのデータと矛盾しない優先順位が存在するとはかぎらないわけだが、 この場合には存在するようだ。
そういう優先順位にするためには、 EUC-JP よりも UTF-8 を優先することになるようで、 そうすればこのデータに関しては結果が少し良くなるのだろう。
しかし、最終的な認識率は、 実世界で扱うデータの中での EUC-JP と UTF-8 の量に依存するわけで、 UTF-8 のデータよりも EUC-JP のデータが 5113/2850 倍よりも多ければ、 EUC-JP を優先したほうが多くの場合で正しく認識することになるわけである。
まぁ、なんとなくそんな気がするので現時点では EUC-JP 優先にしておくことにする。
いや、「実世界で扱うデータの中での EUC-JP と UTF-8 の量」ではなく、 「実世界で扱うデータの中での EUC-JP と UTF-8 のうち、EUC-JP としても UTF-8 としても正しいものの量」か。
TextCat is an implementation of the text categorization algorithm presented in Cavnar, W. B. and J. M. Trenkle, ``N-Gram-Based Text Categorization''
[latest]