HOME     メール  

Links:

最近の投稿

カテゴリー

広告

サイト内検索

外部リンク

アーカイブ

広告

お知らせ

ボキャブラ検索 ver.1.31リリース

修正版です
出力ペインの全問題タブの表示不正を修正、処理速度の改善

問題が1000も超えると最初にリストビューに登録するのにえらい時間がかかります。そのため、前バージョンではマルチスレッドにして見かけの応答性を改善していましたが、どうもリストビューはマルチスレッドに対応していなくて、Ver1.30リリース後、表示がおかしくなっていた事に後で気が付きました

それで色々考えて独自コードで改善しようと思っていたのですが、そもそもリストビューを利用して大量表示を行っているエクスプローラやエクセルは表示するのにそんな時間がかからない。何か特別な事をしてるんだろう、何をしているのか?と思い文章で検索を行ったら、解決策として仮想リストビューなるものがあるらしいことを知った。
これはMFCのCListCtrlのリファレンスを見てる限り、全く気にも留めなかった。つまり、仮想リストビューを使って書き換えたのが今回の修正版です。

相変わらずMicrosoftのドキュメントは不親切だと感じずにはいられなかったですね。リファレンスマニュアルでなぜ仮想リストビュー(仮想リストコントロール)なるものが必要か、その必要性を一文でも良いから記述すべきだ。「リストビューの登録が遅い場合は仮想リストビューを使え」と何故書けないのだろうか?直接的表現を書くと彼ら自身のプライドが傷つくから直接的な表現を避けたのだろうか?

 一応、ドキュメント全般を見れば、必要な事は書いてあることは書いてある。でも、これは最初からこのコントロールの説明を最初から丹念に読んで初めて理解できるものだ。Web上のドキュメントは巨大で、リファレンスの説明はそっけなく、その関数やフラグの必要性を説くような文章ではない。だから余計な探索時間と無駄な開発に多大な時間を割いてしまうのだ。今回実装した複数の通知処理の中の一つのコード(具体的にはLVN_ODFINDITEMのメッセージ処理関数)は、Microsoft上のドキュメントにはサンプルコードは見つからなかったので散々悩まされた。結局、他のホームページのコードを読んでやっと理解できた。その後、その通知メッセージのドキュメントを読むと確かに説明はされている事はわかったが、直接的な表現ではなかったので見逃していた。私の英語の読解力の無さも見逃していた理由となっただろう。

だから最低でも関数のリファレンスは、関数ごとに完全に動くサンプルコードをダウンロードできるようにすべき。もちろんプロジェクトファイル込みでだ。加えて、他のサンプルコードも含めた巨大アーカイブファイルの形でなく、一関数ごとに小さなプロジェクトを作って、そのアーカイブファイルを関数の説明ページのすぐ下にダウンロードできるようすべき(買収したGitHubでも大量のサンプルプロジェクトをアーカイブしダウンロードさせる悪いやり方だ)。これは特にCOM(Component Object Model)関連のメソッドでやるべき。一番重要なWindowsの根幹部分を支えているCOMの各インターフェイスの説明がなぜ素っ気なさすぎるのだろうか?

 数十年前、ドラッグアンドドロップ関数がドキュメントされてなく、Microsoftだけその秘密の関数を使っていると糾弾されてその後公開されたが、しかしMicrosoftのドキュメントは公開はしていてもわかりづらいようになっている。仮にMicrosoft自身の有利性を保証するためにドキュメントはわかりづらくさせているとしたら、その意地悪は結局自分たちの首をも絞めている事を認識すべきだ。スマホ隆盛に乗り遅れて大失敗した今となっては後の祭りだが、失敗の原因は、わかりづらいマニュアル、ソフトウェアの設計も大きな原因だったと思う。特にCOMは数あるソフトウェア技術の中でも多分最上位に属するであろう難解なものだ。複数のインターフェイスが複雑に絡み、指定した複雑な作法(あえてそう言っておく)に従わないとまるで使えない。

こまごました説明よりサンプルコードの方がはるかに話が早い。それに言葉による説明だけだと、意味が判然としないことが多い。ドキュメントだけではうかがい知れない関数の挙動もある。設計者には自明でも、それを使う側にとっては、設計者は「何故そんな事もわからないのか」、もしくは「当然知っているだろう」と思い込んでいる内容があることがしばしばだ。

「仮想リストビュー」と言う名称もちょっとわかりづらいし、的を得た名称ではない。これは仮想でも何でもない、オーナー管理リストビューというべきだろう。表示領域だけWindowsが把握して、再描画その他の処理が必要になったときに通知メッセージが出て「後は開発者が全部やってね」という仕組みになっただけだ。
 また、この仮想リストビューを設定した場合、使えない関数がかなりある。しかし、その関数の個別の説明では、仮想リストビューを使う場合はこの関数は使えないと記載されていない。これはあまりにも不親切で、明らかなドキュメントの不備にあたる。このドキュメント不備のために結構時間を食ってしまった。これも一応リストビューの概略説明ページで、使えない関数一覧を列挙されてはいるのだが、「自分たちに不備はないよ」と言い訳されているように感じる