エンジニアが発信する【2008年01月】の記事です

エンジニアが作る最新ITブログ トップ>【2008年01月】

2008年01月05日

[ ニッキ ] IME のユーザ辞書がまた飛んだ

MS-IME 2007 の変換辞書がまた飛びました。

え~~っと、たしか Office2007 SP1 で修正されたんじゃなかったっけ?
IME 2007 のユーザ辞書が吹っ飛ぶバグ。

ImpressWatch にも書かれている気がするんだよね。

現実を見る限りはまだ破損する可能性が残っているみたいだね。

2008年01月04日

Flash Player インストールトラブル

先日まで仕事場で使っていた自分のノートPC、仕事場でハイスペックマシンが貸与されてお役ご免となり、しばらく眠っていたが、正月休みに自宅作業用として復帰。
その時点から次のようなメッセージが出て困っている。


FlashPlayerインストール失敗

これに関するAdobeの日本語サイトはまだなく、英語サイトを見て対策を取ったが改善されない。ブラウザの設定、ウィルス対策ソフトの影響、権限も確認したが駄目である。


今の仕事でFlashを使うことはないから致命的ではないのだが、Flashコンテンツが使えない、ということがこれほど不便だなんて・・。それほど浸透しているということでもある。

さて、いつ解決する事やら。

2008年01月04日

[思]あけましたね.おめでとう

大晦日から元日にかけては,しょこたんの貪欲☆まつりのDVDを満喫したり,しょこたんが初出場となったNHKの紅白歌合戦を観たり,新春隠し芸でしょこたんのダブルぬんちゃくを観て笑って過ごした.勿論酒は鱈腹喰らった.元日からの三が日は酒と録画した儘の映画などを消化して過ごした.ま,簡素に表現するなら自堕落な日々を過ごしたという訳ですね.本当に楽しかったです.

三が日も過ぎたので真人間へ戻るべく今日からはリハビリモードへ突入した.きちんと何時も通りの時間に起きて,珈琲を喰らって,朝飯喰ってと.先ずは生活のリズムを通常モードへ戻した.本格的な仕事始めは来週からなので,本年の抱負などを考えてみた.

仕事の面では先ずは開発効率を高めること.此はソフト開発では永遠のテーマだろう.永遠のテーマだけに毎年色んな抱負やアイディアを出して,実践して効果を確認している.今年はテストフェーズでの効率の向上と品質向上に努めたいと思っている.テストツールにばかり頼らずに,テスト手法等を見直してリリース後に不具合が発生しないソフトウェアを提供できるようにしたいと思う.

仕事面での第二の課題は.NET Framework 3.5への対応だろう.Visual Studio 2008日本語版が正式にリリースされたので,.NET Framework 3.5用のPCが準備でき次第インストールして学習に取り込もうと思っている.但し実際の業務で.NET Framework 3.5を用いたアプリをリリースすることは無いだろう.此はターゲットシステムのO/SがWindows Vistaではなく,未だにWindows XPの方が多いからだ.その理由は業務用では既存のアプリケーションの動作検証などが必要となるので未だに古いO/Sを選択するケースが多々あるためだ.よって.NET Framework 3.5の学習は将来へ向けての先行投資という訳.時代に取り残されるのは,この業界では致命的だから.

私生活の面では,ありきたりだが家内安全であり家内円満なことだろう.大きな病気や喧嘩をせずに,平穏な日々を過ごせることが一番の幸せだと思っている.

趣味の方へ目を向けると,時間を有効に活用し今年も沢山の本を読み,沢山の音楽を聴き,沢山の映画を観たいと思っている.あとは花粉症の季節が過ぎたら山登り.公私のバランスが取れた時間配分を心がけよう.

ということで皆様,今年も一年間宜しくお願いします.

2008年01月04日

[Tech]Time Magazine’s 50 Best Websites 2007

良いか悪いかは別にして、参考にあとで眺めてみよう。 http://www.time.com/time/specials/2007/0,28757,1633488,00.html

2008年01月04日

standard と web の比較

web 2008 に DNS が無くて驚いたので、
他にどんな違いがあるか調べた。

servermanagercmd.exe -query の結果をテキストに落として
windiff 等で比較。

(多数違いは有るけど)
自分に関係ありそうなのは・・・

・web には application server ロール (って何するの?) がない。
・web には DNS が無い。
・web には file server ロールが無いけど、
例外的に FSRM (クォータ設定するやつ) は web にも存在する。
・indexing-service は web にも存在する。
・web には RRAS が無い。



安いという理由で web 買うつもりだったけど、
後で不足に気が付いたらイヤだな・・・

困った。



2008年01月04日

[ book ] C# 3.0 の本

Programming C# 3.0, 5th EDC# 3.0 CookBook が出版されてた。

うわ~、まだ Programming C# 第四版読み終わってないよ (>_<;)

Programming C# のほうは目次を見る限りでは Parallel Extensions を使ったプログラミングの解説はされていないっぽい。C# CookBook でも、目次を見る限りでは、PLINQ とか TPL を使ったプログラミングには触れられていないようだ。

個人的に興味があるのは追加された型推論、Reflection, Lambda Expression, LINQ, Anonymous Type あたり。
買うかどうかは中身を見て決めよう。

2008年01月03日

[PAL]PALポータルの新しいUI

ちょっと前に、ポートレットのタイトルバーをつかんで動かせるようにしたけど、今回はより使いやすくするために、ポートレットやページなどの追加を別ページに移動することなく、そのページ上でできるように修正した。というわけで、iGoogle とか使ったことがあれば、おそらく、違和感なく、使える UI になっていると思う。これをベースにしたやつを 1.0.2 として、リリースを目指すことにしよう。っで、リリースまでにやることは、 Teeda 1.0.12-rc* が出たら、pal-admin のリリース(pal-a ...

2008年01月03日

新 PC、ようやく Vista

2007-12-20 頃に届いた新しい PC について。

・キーボードとマウスの端子が無い! USB 接続になってる。
・なので KVM 切り替え装置が使えない。
・以前の DELL キーボードはよかったが、今回の下膨れキーボードはだめ。
どうしても慣れる事が出来ない。発狂しそう。

・Virtual PC 使うつもりだったが、Vista Home には入らないのですね。

・IIS 7 マネージャの最新版を Vista に入れようとしたら、
Vista SP1 が必要、とインストールを拒否されてしまった。
(まだ SP1 出てないし)

・職場の詳しい人に教えてもらって、Hyper-V 対応なハードにした(つもり)。

2008年01月03日

Web 2008 RC1 には DNS サーバーが無い


Web 2008 RC1 で DNS サーバーの Feature を追加しようと思ったら
一覧に DNS が存在しないことに気が付いた。

2003 の Web (Enhanced じゃない普通の Web) には DNS 有ったのに。
困る、とても困る。



Windows Server 2008 Server Roles



Windows Server 2003 各バージョンの比較
Web には DNS サーバー無いかのように書いて有るけど、実は有るのだ。

2008年01月03日

ブラウザ別EUC-JP補助漢字などのサポート状況(2)



EUC-JP補助漢字(JIS X 212)の処理をPHPやPerlなどにてどのように処理すべきかを考えるために、ここで、補助漢字の各種ブラウザ別対応状況を引き続き調べてみたいと思います。

Windows版IEは補助漢字に関して、数値文字参照や文字実体参照で全て処理しようとしますが、そのようにして送信されたデータがデーベースに保存され、それを使って表示しているWEBサイトを想定してみます。この際、他のブラウザが見たときに正しく表示されるのかをまとめてみたいと思います。

実験2-1:各種ブラウザは、補助漢字や補助漢字外の韓国語や記号に関して、Windows版IE形式で符合された文字列を意図通りに表示できるか?(EUC-JPのページで)
「鷗外」「髙﨑」「möchte」「안녕하세요?」「©♦」でテストしました。
IE7(Vista)※1これは当たり前。
IE6(XP SP2)
IE5.5(Windows 2000)
Firefox 2.0.0.11
(Vista)
※1IEの「言葉」をFirefoxは理解できます。
Firefox 3.0β2
(Vista)
Firefox 1.0.8
(XP SP2)
Netscape 7.1
(Vista)
Opera 9.25(Vista)※1Opera 9.25の符号方法はWindows版IEと全く同じなので、これも当たり前。
Opera 9.5β1
(Vista)
※1IEの「言葉」をOpera 9.5は理解できます。
Safari 3.0.5
(Vista)
一部×「髙﨑」については×。
(ただし、フォントの設定によって表示できるようになる可能性もあるかもしれません。フォント依存文字の可能性があるかもしれません。)
Safari 3.0.5
(Tiger 10.4.11)
IE 5.2.3
(Tiger 10.4.11)
一部×「髙﨑」については×。ただし、ここで注目すべきは、Mac版IEではこれらの補助漢字を自身では入力することが全く駄目だったのに、表示に関してはかなりの部分クリアできていることです。
Firefox 2.0.0.11
(Tiger 10.4.11)
※1ダイヤのマーク(♦)だけが期待通りに表示されませんが、コピーして調べたりしてみると別の文字に文字化けしているわけではなく、コードポイントに変化はないようです。フォントを適切に設定することで表示されるのかも?
Safari 2.0.4
(Tiger 10.4.8)
一部×「髙﨑」については×。

※1 ただし、多くのWEBアプリケーションで「&」をエスケープします(このこと自体は正しい処理です。)が、数値文字参照や文字実体参照の存在を考慮していないことがほとんどのため、これらの文字は意図通りに表示されないことが多いのも事実です。

これがhtmlspecialcharsの仕様について、ここ数日間いろいろ調べていたきっかけであり、いろいろ書きなぐってきた記事の最初の出発点です。そもそも、「&」をエスケープしなければならないのはなぜか?に始まって、やっぱりエスケープしないといけないんだという結論に至るまで相当の時間が必要だったのですが、「HTMLの仕様がそうなんだから」とかいう理由ではなく、実例で理解したかったので、これはこれでよかったと思います。


実験2-2:各種ブラウザは、補助漢字や補助漢字外の韓国語や記号に関して、Firefox形式で符合された文字列を意図通りに表示できるか?(EUC-JPのページで)
「鷗外」「髙﨑」「möchte」「안녕하세요?」「©♦」でテストしました。
IE7(Vista)×IEは、Firefoxの「言葉」が理解できません。これは痛すぎます。

「鷗外」は「乗ス外」に文字化けします。(この文字化けのメカニズムについては、森山先生の解説をお読みください。)

「möchte」は「m醇rchte」に文字化けします。「©♦」は「潤・」に文字化けしますが、本来は問題の無い次の文字(♦)まで道連れにして文字化けします。

「髙﨑」に関しては、FirefoxがWindows版IEに仕様を合わせてくれているので(「合わせている」気持ちはないかもしれませんが・・・)、文字化けしません。補助漢字にも入らない韓国語は文字化けしないという皮肉な結果に。
IE6(XP SP2)
IE5.5(Windows 2000)
Firefox 2.0.0.11
(Vista)
これは当たり前。
Firefox 3.0β2
(Vista)
Firefox 1.0.8
(XP SP2)
Netscape 7.1
(Vista)
Opera 9.25(Vista)× 文字化けの仕方は、Windows版IEとは違いますが、文字化けします。
Opera 9.5β1
(Vista)
Firefoxと同じ仕様なので、○です。
Safari 3.0.5
(Vista)
× 自分自身は、0x8Fを使った3バイト文字での補助漢字の符号を行っていながら、どういうわけか、そのような文字を正しく表示できません。(フォントの設定の問題なのか、豆腐のような文字化けになります。
Safari 3.0.5
(Tiger 10.4.11)
一部× 自分自身は、0x8Fを使った3バイト文字での補助漢字の符号を行っていながら、どういうわけか、そのような文字を正しく表示できません。(Safari 2.0.4では起こらないので、これって退化? Windows版の文字化けはフォントの問題の可能性もありますが、Mac版Safari 3での現象は解せません。)
IE 5.2.3
(Tiger 10.4.11)
×補助漢字外のハングル文字及びダイヤマークだけOKという皮肉な結果に。

Firefoxの「言葉」をMac版IEでは理解できません。
Firefox 2.0.0.11
(Tiger 10.4.11)
ダイヤのマーク(♦)だけが期待通りに表示されませんが、コピーして調べたりしてみると別の文字に文字化けしているわけではなく、コードポイントに変化はないようです。フォントを適切に設定することで表示されるのかも?
Safari 2.0.4
(Tiger 10.4.8)
一部×「髙﨑」については×。

以上の結果を踏まえて、どちらの方式にプログラム側でデータを統一するかということを考えた場合、私には一目瞭然に思えます。Windows版IEの方式に合わせるべきでしょう。これは、単にWindows版IEのシェアの方がFirefoxより圧倒的に多いということだけではありません。

ブラウザ(Windows版IEとFirefoxのいずれか)の開発チームに仕様を変えるように言うことも選択肢かもしれませんが、そう簡単に仕様変更があるとは思えません。両者それぞれ深い考えがあってのことだと思います。ブラウザの側で統一されないなら、結局は、プログラム側で対応しなければならないでしょう。

ここで、Windows版IE派であれFirefox派であれ、「何でブラウザのバグなのにプログラムで対応しなければならないの?」 という疑問を持つ人もおられるかもしれません。非標準のバグっている仕様に敢えて対応することで、その悪しきバグを延命させるというか、認めてしまう結果になるとかいう発想も理解はできます。ただ、どちらの仕様が正しいかということも重要かもしれませんが、趣味のプログラマーやRFCそのものの研究家ならいざ知らず、実際に稼動している(or 稼動することを想定している)サイトのプログラムを作成されている人なら、どちらの仕様が正しいかということよりも、
  • 「サイトの利用者の利便を考えたときに、どうするのが一番いいか?」 を考えれば、どういう結論になるでしょうか?(「(ブラウザのバグだから)対処しなくてもいいでしょう?、社長!」といように社長に弁明する際に、「ブラウザのバグ(実装ミス)」を盾にすることは私も以前はよくありましたが・・・、私の場合、「対処すべきでない」という発想を自分自身が持ったことはなかったですね。)

  • 上記1は良い子ぶっているかもしれませんが、プログラマーの力の見せ所として、できるだけ他のサイトでは対応していないこともやってみたいと思う人なら、ブラウザのバグであれば、なおさら燃えないでしょうか? (もしくは、サイト訪問者からのクレームを受けたくない(馬鹿にされたくない)、というような後ろ向きの動機という場合もあるかもしれません。)

  • ビジネス的な観点(≒お金)から言っても、できるだけサイト利用者にとって嬉しい仕様のほうにしたいと考えた場合、ブラウザのバグだからとか言っておれないのではないでしょうか?

という疑問を持ってしまいます。

この際に、上記のテストでも明らかなように、補助漢字に対応しようとするのであれば※2Windows版IEの言葉はFirefoxは理解できるが、Firefoxの言葉はWindows版IEは理解できないのですから、Windows版IEの仕様に合わせるべきでしょう。そのようにすれば、文字化けになる確率がずっと減るのですから・・・(数値文字参照の「&問題」を解決できた場合)。Firefoxの方が賢いのですから、Windows版IEの仕様に合わせるべきだと思うのです。これは、別にFirefoxの開発チームに求めていることではなく、プログラマーがそのように仕様を合わせるべきだと思うのです。

※2 これを言ってしまえば終わりということになり、今更な発言ですが、補助漢字の処理で問題になるケースは実際にはそれほどないはずであり、対応しないというのも十分ありうる判断であるとは思います。

日本語や英語以外の言語で掲示板やブログでの書き込みをしたいという場合、及び「鷗外」「♦♠」などの記号を入れたい場合にのみ問題になりうることであり、ぶっちゃけた話、滅多にはないと思われるからです。ただ、ここでの議論は、もし「対応しようとするのであれば」という話になります。

PHPやPerlが標準で、そのような対応(2つの仕様のすり合わせ)をしてくれていたらベスト(≒「楽」)ですが、そうでないなら、プログラマーが自力で対応するしかないでしょう。(自分で作れないなら、補助漢字などの処理で問題になるケースははっきり言ってレアなケースでしょうから対応しないことにするか、他の献身的で優秀な方が既にライブラリーなどを公開していないか探すしかないでしょう。)

私が調べた限りでは、PHPやPerlが標準で、Firefoxなどの0x8F~の符号方法を数値文字参照にするような処理をしてくれる関数は準備されていないようです。ですから、対応しようとするのであれば、自力で対応するしかなさそうです。

具体的には、
  • 「髙・﨑・德・彅」などCP51932で対応できる漢字以外の補助漢字や、補助漢字にも入らない記号や外国語に関しては、数値文字参照で対応することとになるのですが、PHPで言うとhtmlspecialchars関数を通すと、「&」が「&amp;」になって数値参照文字が破壊される問題がありますから、それに対応しなければなりません。これがまず第一点。

  • また、Firefoxの0x8Fで始まるデータを数値文字参照方式に変換しなければなりません。これが第二点です。

この際、「&」が「&amp;」になって数値参照文字が破壊される問題を解決するために、そもそも「&」を「&amp;」にする意味はどこにあるのか? というのを調べたのが「【PHPネタ】htmlspecialchars関数はサニタイズ関数? 」(昨年12月25日)の記事でした。

&」を「&amp;」にする意味が例えば、セキュリティ的な理由であるならば、不用意に数値文字参照や文字実体参照を普通の文字に変換するのは危険かもしれません。最終結論的には、「【PHP関連】「&」(アンパサンド)をエスケープしなければならない実例」(昨年12月31日)の記事で書きましたように、表示上の問題だけでなく、セキュリティ的な意味でも「&#数字;」や「&アルファベット;」、「&#x16進数文字列;」をpreg_replace関数などで一律変換するのは危険だと書きました。

そのような意味で、「&」を「&amp;」の処理を入れるのはホワイトリスト方式にするのが良いです。これが私が出した結論です。

リストは徐々に拡大させていくこともできるでしょうし、リストが多くなれば多くなるほど処理時間がかさみますし、その結果、ブラウザに出力表示されるのが遅くなり、サイト訪問者を待たせる結果になりますので、少なくとも最初はリストのサイズを抑えたほうがいいでしょう。

リストの作成は今回は手動でやりましたが、例えば、韓国語のコードポイントは一定の箇所に集中して現れますので、ここの部分はプログラムで変換用データを作成することは可能だと思います(ずいぶん前のことであり、遠い記憶なのですが、誰かが韓国語用のライブラリを公開していたと思ったのですが、見つけることができませんでした。)。

各自のサイトの仕様に合わせたホワイトリストを作成すれば、ブラウザでの表示レベルにおいては、文字化けが減るでしょう(テストはしていませんが、メール送信が絡んでくると、JISでメールを送信する仕様にしている限りは、文字化けを回避することは難しいと思います)。

実際にプログラムしてみると、下記のような感じになると思います。



● ホワイトリスト方式でやってみた正直な感想:
無茶苦茶面倒です。ブラックリスト方式でやってみたい誘惑に駆られましたが、これは駄目ですね。ホワイトリストの作成を効率的にできる方法も模索しないと駄目なようです。



エンジニアが作る最新ITブログ トップ>【2008年01月】

メンバー紹介

タグパネル

ランキング

エンジニアが作る最新ITブログ DODA