本記事では、WindowsのCOMライブラリを扱いやすくしてくれるcom_ptr_tクラスを紹介したいと思います。
com_ptr_tは、IUnknownインターフェースのQueryInterface、AddRef、Releaseメンバ関数周りを隠蔽してくれるテンプレートクラスで、いわゆるスマートポインタの一種です。
_com_ptr_tは、単体でもそれなりに便利ですが、これがVisual C++の色々な機能と結びついてさらに便利になっています。
例えばMSXML3を使ってXMLファイルを読み込むコードが、_com_ptr_tを使ってどのように簡単になるのかを見てみましょう。
#import "msxml3.dll" named_guids int main(int argc, char* argv[]) { // COMライブラリ初期化 ::CoInitialize(NULL); try { MSXML2::IXMLDOMDocument2Ptr pDoc; pDoc.CreateInstance(MSXML2::CLSID_DOMDocument); pDoc->async = false; if (pDoc->load(L"test.xml")) { // Root要素名を表示する printf("RootNodeName: %s\n",static_cast<const char*>(pDoc->documentElement->nodeName)); // Root要素の子要素一覧 MSXML2::IXMLDOMNodeListPtr pList = pDoc->documentElement->childNodes; for (long i = 0, n = pList->length; i < n; ++i) { MSXML2::IXMLDOMElementPtr pElement = pList->Getitem(i); if (pElement) { // 子ノードが要素の場合のみ処理する printf("ChildNodeName: %s\n",static_cast<const char*>(pElement->nodeName)); } } } }catch (_com_error& e) { // 例外ハンドラ printf("Error: %s\n", e.ErrorMessage()); } // COMライブラリ終了 ::CoUninitialize(); return 0; }
面倒なQueryInterface、AddRef、Releaseが綺麗に消えていることが分かると思います。VBScriptに近いお手軽さです。
ところで、上記コードには、_com_ptr_tという文字列は存在しないということに注意して下さい。
_com_ptr_tが使われているのは、上記#importによって自動生成されるmsxml3.tlhというヘッダファイルの中です。ここに、
typedef _com_ptr_t<IXMLDOMDocument2, &__uuidof(IXMLDOMDocument2)> IXMLDOMDocument2Ptr; typedef _com_ptr_t<IXMLDOMElement, &__uuidof(IXMLDOMElement)> IXMLDOMDocument2Ptr;
というような感じの定義があるのです。
何か不都合があると、_com_error例外を投げてくれるのもありがたいところです。例外処理がシンプルになります。
一度COM周りのコードを書いた人なら分かると思いますが、_com_ptr_tを使わずに上記のコードを書いてみると、相当大変です。_com_ptr_t万歳。
一応最後に書いておきますが、_com_ptr_tは、MSXML3に限らず、他のCOMインターフェースに対しても使えます。例えば、CreateStreamOnHGlobalで取得したIStreamをIStreamPtrに代入して・・・ということもできますし、DirectX9周りで活用することもできます。色々と試してみて下さい。
但し、_com_ptr_tは、Visual C++の独自機能を相当使っているはずです。移植性が必要な場合は、使わない方が良いでしょう。
Heimdallr 1.07alpha2をリリースします。
安定版ではありません。
Heimdallr 1.07alpha2
安定版はHeimdallr 1.06です。
1.07alpha1→1.07alpha2の変更点は以下の通りです。
今回の変更のメインはinit.xml強化です。
init.xmlを強化してどんな良いことがあるのかと言いますと、Heimdallrのカスタマイズ版、通称OEM版Heimdallrを簡単に作ることができるようになります。
つまり、
スキンとinit.xmlを作成し、Heimdallrのinit.xmlとスキンを置き換えて、別の名称のソフトとしてリリースすることが誰でもできるようになります。
おっと、リリースするのはまだ待って下さい。
というのも、
Heimdallrの中には、私が開発したものではないライブラリやスキンが含まれています。
これらはあくまでHeimdallrで使うために著作権者から許可を頂いているのであって、OEM版Heimdallrで使うために許可を頂いているわけではありません。OEM版Heimdallrでこれらのライブラリやスキンを使うためには、著作権者から別途使用許可を頂く必要があります。
どのファイルの著作権が誰にあるかというのはreadme.txtに書いてありますので、今すぐOEM版Heimdallrをリリースしたい方(はいないような気もしますが)は、readme.txtを熟読の上、しっかりと判断してOEM版Heimdallrを作成して下さい。
そのうちOEM版Heimdallrを簡単に作成するためのガイドラインを書こうとは思っていますが、これはしばらく先になりそうです。
ちなみに法人利用歓迎です。商用利用でも何でも良いです。ご自由にビジネスにお使い下さい。使い物になるかどうかはまったく保証しませんが。
でもたぶんビジネスに使えるソフトは無いかと探している人はたぶんこんなサイトは見ないでしょうね・・・
今回の記事はFirefoxブラウザのユーザ向けの記事です。
Heimdallrは、1.07alpha1でFeed Protocolに対応しました。
Feed Protocolとはなんぞや?という話はさておき、一体何ができるのか?ということを書いてみます。
最初に、以下のソフトをインストールしておきます。
上記ソフトのバージョン番号は私が試したバージョンです。
これより新しいバージョンであれば同じようなことはできると思いますが、下記の画像とは異なる結果になるかもしれません。
また、今までFirefoxの拡張機能を導入したことが無い人はFeed Your Readerのインストールでちょっと戸惑うかもしれません。Feed Your Readerの導入方法がさっぱり分からない人が居ましたらそこも詳しく説明しますのでコメント下さい。
準備ができたところで、まだHeimdallrを起動していない人は、起動しましょう。
起動したら、タスクトレイのアイコンからシステム設定を選択します。
まずはFeed Protocol登録ボタンを押します。
確認用の画面が出てきますので、OKボタンを押しましょう。
Feed Protocolの登録が終わりましたので、OKボタンを押してシステム設定画面を閉じます。
以上の作業は、もう二度と行う必要がありません。
重要なのは、何度も繰り返すことになる以下の作業です。
では、このサイト(MASATOの開発日記)をFirefoxで開きましょう。
今Firefoxで見ているよっていう方はそのままで良いです。
Firefoxの画面の右下の方にこんな感じのアイコンがあります。
MASATOの開発日記に限らず、RSS対応のサイトはこのアイコンが表示されることが多いです(表示されないこともあります)。
このアイコンを左クリックすると、以下のメニューが表示されますので、「RSSをライブブックマークに追加」を選択します。
ライブブックマークに追加を選択しましたが、本当にライブブックマークに登録されるわけではありません。ここでFeed Your Readerが働き、ライブブックマークの代わりにHeimdallrに登録されます。
こんな感じでHeimdallrへの登録用の画面が出てきたら成功です。
おめでとうございます。
ここでOKを押せば本当にHeimdallrに登録されますが、これは練習ですのでキャンセルしておきましょう。
MASATOの開発日記以外の他のサイトでも、右下にRSSのアイコンがあればこんな感じで登録できます。
結構便利だと思うのですが、どうでしょう?
Heimdallr 1.07alpha1をリリースします。
安定版ではありません。
Heimdallr 1.07alpha1
安定版はHeimdallr 1.06です。
1.07alpha1は、Windows9x系では動作しません。Windows9x系の方は1.06をご利用願います。
1.07alpha1の変更点は以下の通りです。
システム設定ダイアログからFeed Protocolを有効にできます。
有効にした後、
feed://http://www.sutosoft.com/room/index.rdf
といったリンクをクリックすると、このURLをHeimdallrに登録できます。
しかしこういったリンクって世の中にほとんど無いんです。
よってこれだけではあまり役に立ちません。
Firefoxをお使いの方は、 Feed Your ReaderというFirefox Extensionを使うことにより
多少役に立つようになります。
詳細はまた後ほど・・・
VectorライブラリをRSSで検索してみたところ、現時点でHeimdallrがトップです。
過去の記事のHeimdallr普及のマイルストーンである
を達成したことになります。
と言っても、このVectorライブラリの検索結果は、ソフトをバージョンアップすると最下位まで落とされます。
Heimdallrがトップになったのは、Heimdallrが躍進したというよりも、他の有力なソフトがのきなみバージョンアップして最下位まで落ちていった、ということにあるようです。
うーむ喜んでいいのやら悪いのやら。
でも上記Vectorの検索結果は、一応人気順でソートした結果の検索結果です。
バージョンアップすると最下位まで落ちるということは、頻繁にバージョンアップするソフトはいつも最下位周辺でしょう。人気をちゃんと表した検索結果になっていないような気がします。
Vectorにはこのあたりもうちょっと考えて欲しいなぁ。
次のHeimdallrのバージョンである1.07で何を実装するのか考えてみたいと思います。
Heimdallrに追加する大きな機能は、それそれプロジェクト名をつけて、仕様検討を行っております。
プロジェクトには、SkinSystemプロジェクトと、WordWatchプロジェクトと、SiteExtensionプロジェクトの3つがあります。
詳細はこちらをご覧下さい。
SkinSystemプロジェクトとWordWatchプロジェクトは、既に保守・拡張フェーズにあり、今後大きな動きがあることは無いでしょう。
残りはSiteExtensionプロジェクト(そのうちChannelExtensionプロジェクトに改名予定)ですが、
これは今設計フェーズにあります。でもまだ設計が終わってないので1.07にはちょっと間に合わないでしょう。
というわけで1.07ではあまり大きい変更を行う予定はありません。
Feed Protocol対応、記事表示順入れ替え現象対応、init.xml強化、といったあたりが主な変更になる予定です。
どれもインパクトは小さいですが、そういうときがあっても良いでしょう。
最後に現状の要望リスト一覧を載せておきます
上に書いてあるものから優先的に実装していきます。上からいくつか実装した時点でバージョン1.07としてリリースします。
実装する際の難易度を難、普、易の三段階で評価し、効果を大、中、小の三段階で評価します。
CEATEC2004に行ってきました。
印象に残ったのはSHARPのブース。
大画面液晶テレビAQUOSの宣伝をするとともにステージ上でダンスを踊る人達。すばらしい。
左端の人がAQUOSの説明をしているんだけれど、みんな踊る人を見ていて誰もテレビを見ていない。(そしてたぶん説明も聞いていない。)
でもAQUOSの名前だけは印象に残りました。宣伝効果はばっちりです。
こんな感じで各所で踊りまくるコンパニオンのおねーさま方を見ていると、
CEATECは、各社が自社の技術をアピールする場というよりも、CMを見ているような気分になります。
たぶん昔は違ったと思うのですが、いつ頃からこんな感じになったのでしょうね。
いやこんな感じが悪いというわけではないです。怪しげな機器の内部構造を見るより踊るおねーさま方を見ていたいですしね。でもこういう機会ですから怪しげな機器の内部構造も見たいとは思うんです。難しいところですね・・・。
Heimdallrの初版がリリースされたのは、2004年1月11です。
その開発開始がいつ頃かと言いますと、大体2003年の8月か9月あたりです。
よって、今日はHeimdallrの開発を始めてほぼ1年になります。
いや正確には1年強なんですが。キリが良いので1年と言うことにします。
開発当初、マルチビュー+自動学習機能を持ったRSSリーダーが欲しいなぁと思って作ったのがHeimdallrですので、自動学習機能を実装した1.06がリリースされた今、Heimdallrは開発当初考えていた通りの姿になりました。
これを機会に、Heimdallrの技術的に優れた点ってなんだろう、ということを考えてみることにします。
といっても「技術的に優れた」というのはなかなか判断が難しい問題です。
何がどうなっていれば「技術的に優れた」と言えるのでしょうか?
実はこの件に関しては比較的客観的な指標があります。それは特許です。
特許を取れるような技術であれば、「技術的に優れた」と言っても問題無いでしょう。
さて、Heimdallrに特許が取れるような技術があるかと言いますと・・・
無いですね。
そもそも、Heimdallrは、私がどこかで見たようなものを繋ぎ合わせてできたソフトウェアなので、私が考えたオリジナルのネタがほとんど無いのです。
優れた知財技術者ならばもしかしたら特許が取れるようなネタを掘り起こせるのかも知れませんが、私にはできそうもないです。
でもあえて言えば、
HeimdallrのGUIの特徴的な要素である既読ボタンの「ドラッグするとまとめて記事が消せる」という点と、自動学習機能とキーワード検索機能を裏で支えている高速文字列マッチング処理は、私の頭の中から生まれたアイデアです。ですのでこれはもしかしたら特許が取れるかもしれません。
しかし、私の頭の中から生まれたアイデアではあっても、たぶんどこかで使われているでしょう。
既読ボタンのようなGUIは、私が見たことが無いだけであって、世の中のどこにも無いとは考え難いですし、文字列マッチング処理も、たぶん正規表現コンパイラのあたりで既に使われているでしょう。
というわけで・・・たぶんHeimdallrに技術的に優れた点はありません。
うーむなんか自虐的な記事になってしまいましたねぇ。やぇやぇ。
でもまだ開発が終わったわけではありません。これからが勝負です。
一年前に考えた姿にはなりましたが、開発中の一年間で思いついたアイデアは、まだ形になっていません。
その中には特許になりそうなアイデアもありそうな・・・ないかも・・・。
でもどのRSSリーダーにも備わっていなさそうな機能のアイデアはありますので、そこらへんを形にしていけたらいいなぁ~と思います。
暇な土曜日なので調子にのって下書きしておいた記事をほこほこ投稿。
先日紹介したブラウザFirefoxの拡張機能の一つに、Feed Your Readerというものがあります。
どんなことができるのかはこちらの記事が参考になります。
この記事では、HepCatに登録できる旨が書いてありますが、どうやらFeed Protocolというものに対応したアプリケーションであれば何でも良いようです。
でも肝心のFeed Protocolというのが何か分からなかったのでちょっと調べてみました。
どうやら、Feed Protocolを使えば、
feed:http://www.sutosoft.com/room/index.rdf
こんな感じのリンクをクリックするだけで、RSSリーダーにこのRSS Feedを登録する、ということができるようになるようです。但しRSSリーダーがFeed Protocolに対応している必要があります。
以下は、開発者向けのお話です。
Feed Protocolの仕様はこちら(英語)です。で、こちら(英語)がFeed Protocolの拡張仕様です。
アプリケーションがFeed Protocolに対応するための具体的な方法については、こちらの記事が参考になるでしょう。
また、上記Feed Protocolの拡張仕様にFeed Protocol URIの解析手順が載っています。こちらも参考になるかと思います。
しかし、この解析手順、ちょっとバグがあるようなので、修正して日本語訳して書いてみます。
こんな感じですかね。
ところで、HeimdallrはFeed Protocolに対応しているの?ということについてですが、
今まで私が知らなかったのですから、HeimdallrはもちろんFeed Protocolに対応していません。でも面白そうなので次のバージョンでは対応してみたいと思います。
でもFeed Protocolに対応するようになると、他のFeed Protocol対応アプリケーションと競合してしまうんですよね。そこらへんをうまく問題がないようにやってのけるにはどうすればいいのかなぁ・・・。
イチロー最多安打記録達成おめでとう。
まあそれは置いておいて。
以前書いたHeimdallrのポリシーというエントリが微妙に反響があったので、調子にのって他のポリシーも書いて見ます。
以下のポリシーは、Heimdallrのポリシーというより、私が開発するフリーソフトのポリシーといった感じのものです。
インストールは簡単にすること
インストールは、ユーザが行う最初の作業です。
これが大変だと、ユーザはそこでソフトを使うことを諦めて次のソフトを試します。
だからインストーラーを付けてインストールは簡単にしたつもりです。
インストーラーも「次へ」ボタンをぽちぽち押していくだけで適切な設定でインストールされるようになっている・・・はずです。たぶん。
古いバージョンに対する上書きインストールもそこそこ拘りました。マイドキュメント\SutoSoft\Heimdallrフォルダにあるような、設定ファイルのフォーマットは、時々変わっていますが、Heimdallrは、古いフォーマットからの変換を行うプログラムが組み込まれているので、どんな古いバージョンに対しても上書きインストールして問題が無いはずです。
開発を停止しても問題がないようにすること
Heimdallrは私が定期的にメンテナンスしなくても問題が発生しにくいように設計しています。定期的なメンテナンスが無ければ、開発を停止しても問題は発生しにくいからです。
例えば、私が管理しているサーバ(www.sutosoft.com)に一切依存しないようにしています。サーバと連携するようなサービスを提供することは不可能ではないのですが、そのようなサービスを提供してしまうと、永遠にサーバを維持しなければならない(これは定期的なメンテナンスが必要になる)という呪いが降りかかってきてしまいます。
他のサーバにも深く依存するようなことはありません。RSS Feedを提供しているサーバが潰れたらそのFeedの情報は更新できなくなりますが(これはどうしようもありませんでした)、他のFeedには影響がなく、またユーザにより取得できなくなったRSS Feedを切り捨てることもできます。ですので、どこかのサーバが潰れたり復活したりすることがあっても、私がHeimdallrを修正する必要はありません。
個人情報はできるだけ集めない
私が収集している個人情報は、Heimdallrをダウンロードした人のIPアドレスだけです。早い話がWebサーバのログです。
個人情報を集めると、それを守らなければならないという呪いが降りかかってきます。会社組織ならともかく、へたれ技術者の私では守れるはずもありません。よって、何も集めないことにしました。
Heimdallrに、Heimdallrリリース案内RSS Feedがデフォルトで登録されていないのも、「現在Heimdallrを使用している人のIPアドレス」という個人情報を集めないためです。
でもユーザ数位は把握しておきたいんですけどねぇ・・・難しい・・・。
Heimdallr 1.06をリリースします。
安定版です。
Heimdallr 1.06
Heimdallr 1.06ソースコード(Visual C++.NET 2003用)
1.05aからの大きな変更点は自動学習機能と猫スキン4点の追加です。
詳細な変更点は以下の通りです。