roundabout
非常に興味深い。補償金制度ってそんなにひどいものだったのか! 広告費なんかのために著作権料を払っているつもりなんてないぞ! とか今さら言ってみたりして。しかし去年から今年にかけて、複製防止技術を施している場合は補償金を受け取るべきではないっていう議論が表に出てきたことは、やや時間がかかりすぎかとは思うものの、喜ばしいことだ。4年くらい前からずっと30条1項2号は全く根拠に欠けると言ってきたので…
Konfabulator買収というのも興味深い。へぇ、Yahooですか。記事を読むと確かに納得させられる。
もいっこ興味深い記事があった。と言っても、分かりきっているXML Schemaの方ではなくて、EJBの方が、なのだけど。最近ほとんどJavaをヲチってないので…
Windows Vistaの名前を巡ってVista社が法的措置をとるという話が出ている。うーん、MicrosoftはVista単体で商標を取ろうとしているのだろうか。XPとかMeという名前では商標は(少なくとも日本の実務では)登録できないのだけど、Windows XPやWindows Meは商標登録できるのだから、Windows Vistaだって問題ないと思うのだけどなあ。さすがに不正の目的であの名前に決めたわけではないだろうから、例のXimian商標などとは違って、混同の可能性が無ければ問題ないんだよね…って日本の商標法とは要件が違うのかな。もちろん混同の可能性があるという主張をしているのだろうけど。
頭痛が厳しかったので夕方に一眠りしていたら、目が冴えてしまった。
ほんで炎上している@ITのASP.NETのスレを眺めて、結局誰一人として1,2名を除いて(僕のことではない)まともなコメントを残していないことに失望しながら、.NETに乗り換えた10の理由(懐かし)の最後の奴を思い出していた。.NETはJavaと同じ道を辿っているのか。
ちなみに命題自体は面白いもので、僕が思いつきで書いたことは上手くいかなかった。HttpWorkerRequest.SetEndOfSendNotificationまで取り出してもダメだったので、XSPWorker辺りからチェックしないとダメそうだ(この時点でもはや元の議論はどうでも良くなっている)。もちろん、ここまで来るとHttpWorkerRequestを生成する部分からチェックする話なので、IHttpHandlerをいじればどうのこうのなど、全くお話にならないレベルである。
しかしxspのソースは綺麗だなあ。僕は他人のソースを読むのがとっても苦手なタイプなのだけど、xspのソースはサクサク読めて爽快である。
CompareOptions.IgnoreWidth
collation tableをランタイムのヘッダにしたらまずいだろう、って書いてたら、むしろランタイムのヘッダじゃないとエンディアンネスまわりで問題がある、というツッコミが入ってしまった。うーむ、確かにその通りだ。MS.NETってそういうところはお気楽だよなぁ。Windows環境だけ考えてりゃいいわけだし。
というわけでCヘッダを出力するコードをざっくりと書いてから、ふとushortの配列なんて実は消せるんじゃん?と思いついて、テーブルデザインの方を変えたら上手いことほぼ全部消えた。ていうかIgnoreWidthで影響を受ける文字が意外と少ない。あまりにも少ないのでロジックでコーディングしてしまった。
public static int ToWidthCompat (int i)
{
if (i < 0x2190) return i;
if (i > 0xFF00) {
if (i <= 0xFF5E) return i - 0xFF00 + 0x20;
switch (i) {
case 0xFFE0: return 0xA2;
case 0xFFE1: return 0xA3;
case 0xFFE2: return 0xAC;
case 0xFFE3: return 0xAF;
case 0xFFE4: return 0xA6;
case 0xFFE5: return 0xA5;
case 0xFFE6: return 0x20A9;
}
}
if (i > 0x32FE) return i;
if (i <= 0x2193) return 0xFFE9 - 0x2190 + i;
if (i < 0x2502) return i;
if (i <= 0x25CB) {
switch (i) {
case 0x2502: return 0xFFE8;
case 0x25A0: return 0xFFED;
case 0x25CB: return 0xFFEE;
default: return i;
}
}
if (i < 0x3000) return i;
if (i < 0x3131) {
switch (i) {
case 0x3000: return 0x20;
case 0x3001: return 0xFF64;
case 0x3002: return 0xFF61;
case 0x300C: return 0xFF62;
case 0x300D: return 0xFF63;
case 0x30FB: return 0xFF65;
default: return i;
}
}
if (i < 0x3164) return i - 0x3130 + 0xFFA0;
if (i == 0x3164) return 0xFFA0;
return i;
}
ただしこの中にはひらがなは含まれない。ひらがなの重みはIgnoreWidthの守備範囲だが、sortkeyのデータ領域はspecial weightなので、この関数の守備範囲外だ。ちなみにU+32D0-U+32FEのCircled HiraganaもIgnoreWidthの守備範囲内だったりする。謎だ。あともっと謎なのがSurrogate領域のsortkeyの値がなぜか変わってしまうことだ。
実はなぜなのかは分かっている。IgnoreWidthを指定されると、sortkeyのLevel 3の値から最後のビットが下りるのである。Level 3はcase weightなどとも言われているが、実際にはcaseとwidthの内容が共存している。一部のSurrogate文字はLevel 3の値が奇数なので、1削られてしまうということなのだ。
コメント
iks — 07/26/2005 10:02:31
@ITのASP.NET
アクセス制限やファイル送出はHttpModuleで簡単にできそうな気が・・・
読むのが大変なので後半読んでませんが、別のリクエストで送出中(IsClientConnectedはダメ?)かどうかの判定ができない・・・というところが問題???
(このレベルでは話にならないのかも)
xspのソースは綺麗
あまり注目されていないような気がするXSPですが、やはりそう思われます?
私もXSPのソースがお気に入りです。
ASP.Net周りを調べるときは、XSPのソースから入ります。
他人の成果をタダでもらっているようなものですが、恐ろしく効率が良いです。
atsushieno — 07/26/2005 11:50:31
アクセス制限は大した問題じゃないですね。問題はファイル送出の正常終了を検出することだと思います。で、僕があんまし詳しくないこともあるんですが、content-disposition: attachmentの場合どうなるのかが自明ではないのです(RFC2616でも規定していないのですが)。HttpContextは1つしかないはずなので、別のリクエストといってももっと下層のレイヤーになると思います。
他人の成果をタダでもらっているような
全く問題ないですよ。ばんばん盗んじゃってください(笑