カレンダーを表示するガジェット nDigiCalendar.gadget をリリースした。
ほかのガジェットとともに次のURLからダウンロードできる。http://www6.plala.or.jp/nyk/files/gadgetsbynyk.zip
[追記] 9月1日になって早速バグを発見したので修正した。今日の日付の赤色着色処理がおかしかった。

カレンダーを表示するガジェット nDigiCalendar.gadget をリリースした。
ほかのガジェットとともに次のURLからダウンロードできる。http://www6.plala.or.jp/nyk/files/gadgetsbynyk.zip
[追記] 9月1日になって早速バグを発見したので修正した。今日の日付の赤色着色処理がおかしかった。

Windows Vista 用サイドバー・ガジェットを二つ追加した。

http://www6.plala.or.jp/nyk/files/gadgetsbynyk.zip から、上記の2つを含む7つのガジェットをまとめてダウンロードすることができる。なお SunCal.gadget に保存した設定(緯度・経度)を次の起動時に読み出せていないバグがあったので修正した。
[追記] nDigiFeed.gadget による RSS フィードの受信だが、RSS2.0 ではうまくいかない。よって goo や livedoor の天気予報は受信できなかった。これは明日にでも直すとして、天気予報のガジェットは別に作ったほうがよさそうだ。とりあえず、
というようなガジェットをたくさん作りたいと思っている。
Windows Vista 用サイドバー・ガジェットを二つリリースする。
http://www6.plala.or.jp/nyk/files/gadgetsbynyk.zip より、これまで作ったガジェットとともにダウンロードすることができる。

SunCal.gadget nDigiClock.gadget nDigiDate.gadget のデザインを修正。
角を丸め、ドロップシャドウを追加した。
http://www6.plala.or.jp/nyk/files/gadgetsbynyk.zip からダウンロード可能。Windows Vista 専用。

nDigiClock.gadget / nDigiDate.gadget をリリースした。シンプルな時計のガジェット。Vistaのサイドバーガジェット。
ところで、いつも Firefox を使っているので気がつかなかったのだが、IEから*.gadgetファイルをダウンロードしようとすると *.zip に名前が勝手に書き換わるようだ。確かに中身は ZIP ファイルなのだが、拡張子が .gadget のままでないとインストールできない。昔からこういう仕様だったのだろうか。ちなみに Picea では問題なくダウンロードできた。
というわけで、IEでガジェットをダウンロードして名前が *.zip になってしまったら *.gadget に戻してほしい。さもないとダブルクリックによるインストールができない。IEのせいにしているが自分のパッケージングのミスかもしれない。
IEでうまくいかない人用に http://www6.plala.or.jp/nyk/files/gadgetsbynyk.zip を置いた。3種類のガジェットが入っている。

SunCal.gadget 0.01 を公開した。
http://www6.plala.or.jp/nyk よりダウンロードが可能。
SunCal.gadget は日の出入り時刻を計算する Windows Vista Beta2 専用のサイドバーガジェット。デジタル時計ガジェットとしても使える。
天文演算はローカルでおこなわれる(この手のツールでは普通はサーバーからデータを拾ってくる)
x86ネイティブ版 SunCal の計算コードをそのまま JavaScript に移植している。
x64版Vistaでしか動作確認していないが、多分x86版でも問題ないと思う。もしかするとx86版では重いかもしれない。
Vista用サイドバーガジェットを作ってみての感想:
(注:自分はBeta2しか持っていない。この後の版がどうなっているかは知らない)

アイコン

作者アイコン

スクリーンショット
ビデオのリピート再生機能などの追加とミラーの細かい修正をした。

ビデオ再生中の画面(デジタルカメラによるキャプチャ)
やっとビデオの再生機能を追加した。DirectX.AudioVideoPlayback.Video のテクスチャに対するレンダリングは、Dispose時に例外が発生するバグがあるためあきらめて、コントロールに対する描画とした。このためエフェクト要素は全くない。ミラーは別個に同期をとりながら再生し見かけ上おかしくないようにするという強引な方法で実現した。
プレゼン中のビデオの使い方としてはインタビュー映像と、何かの瞬間およびその前後が重要な映像を想定している。
Managed DirectX の AudioVideoPlayBack 名前空間の Video がいろいろとおかしい。ここ一週間ほど、DXPresentationでビデオの再生を実現させるため、いろいろ作業したのだが、いちばん悩んだのはターゲットをテクスチャにしている場合、Dispose()するとよくわからないタイミングで停止バグが発生することだ。ターゲットをコントロールにしている場合は停止はしないが、プロパティが謎の値を示す。調べた結果これは、Managed DirectX のバグであると結論した。直してほしいが直るのだろうか。
Web上で参考になるリンクを以下に示す。
コントロールに対して AudioVideoPlayback でビデオを再生するとこんなに問題がありますよ、という投稿。コントロールに対する描画の場合はここに書いてある対処法でなんとかなる。
Fun with AudioVideoPlayback
http://blogs.msdn.com/toub/archive/2004/04/16/114630.aspx
AudioVideoPlayback のさまざまなおかしなところを指摘する記事。
Wrapping up Managed DirectX AudioVideoPlayback
http://www.codeproject.com/useritems/AudioDX.asp
ここにあるサンプルでは、ムービーテクスチャをポリゴンに張っている。Dispose時の問題は、なんとDisposingイベントのハンドラで無限ループさせることにより解決している。このため一度しかビデオを読みこまないプログラムとなっている。
Requested: Video texture in MDX
http://hundev.blogspot.com/2006/07/requested-video-texture-in-mdx.html
この記事では私と全く同じ場所ではまっている。
| disposing of Video class in MDX1 |
この投稿でも私と全く同じ場所ではまっている。
disposing of video when using "RenderToTexture"
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=267957&SiteID=1
私が悩んでいた Video.Dispose() の悩みに対して、It is a bug, but we have no plans to update this API.とマイクロソフトの人?が書いている。
Managed DirectX (その 2 AudioVideoPlayback) ~ Cutting Edge DX 9 - 第 3 回目 ~http://www.microsoft.com/japan/msdn/directx/japan/dx9/AVCS.aspx#AVCS1
日本語で書かれた記事。ムービーテクスチャのサンプルが置いてある。試してないがきちんと動くのだろうか。
Fun with DVR-MS
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnxpmce/html/dvr-ms.asp
コントロールに対してビデオを再生している。ほかに WMP、Quartz を使った再生を示している。
で、DXPresentation ではどうするのか?
選択肢はいくつかある。
1.は多分時間の無駄。3.は簡単に実現できると思うのでとりあえず実装するかもしれないが、ビデオのスポットライト、ライン書き込み、クローズアップができないしミラーリングのパフォーマンスが悪そうなのでよくない。4.は選択したくない。
というわけで 2. が真っ当な方法であるが、C#+.NET に慣れすぎてしまい、なんだかやる気がでない。
ちなみに、Managed DirectShow というプロジェクトがあるようだが、これについてはよく調べていない。これを選択した場合は GPL による配布に切り替える。
BGMやナレーションの再生ができるように、オーディオストリーム(MP3、WMA等)をサポートした
オーディオに関しては、スライドをまたぐことが可能なオーディオストリーム機能(MP3、WMA等に対応)と、スライド移動時にワンショットで鳴るサウンド機能(WAVに対応)の2系統が独立して利用することができるようになった。
ところで Web に掲載している、サンプルビデオが内容的に古くなったので更新したい。クローズアップ、WEB、オーディオなどが追加されている。あとビデオ再生の対応だがあいかわらず、どこかではまっている。多分単純なところでつまっている。
WEB を DXPresentation 中で再生する機能を追加した。

ローカルのhtmlファイルを指定し、FLASHコンテンツを開いています
「次のスライドに進む」機能のマウスボタンへの割り当てが、DXPresentation、Flash、WEB上のPowerPointなどでバラバラであり、検討の余地がある。
次の細かい不具合を修正した
約2か月ぶりの更新となる。
Managed DirectX の日本語による解説書というのは出版されているのだろうか。Amazon で探してみたがないようだ(洋書ではいくつかみつかったので注文した)。Web においても日本語による解説は少なく、特に網羅的なものは発見できなかった。Windows Vista の WPF 以降も 3D に関しては DirectX を使うのが便利なはずで、本来多くの需要がある書籍だと思うのだが。
Managed DirectX + C# + .NET Framework は、手軽さとパフォーマンスのバランスがそれなりに良い。なおかつ開発効率がとても高いので、短期間で楽しみながら作りたいときは最高の組み合わせになると思う。Windows 上でなら。
解説書で思い出したが、長いサンプルが掲載されているタイプの入門書は苦手だ。サンプルの扱っている内容に興味が持てないとわかった途端に読み進める気を無くすからだ。短く一般的な内容のサンプルと、細分化された単元なら入門書でも我慢ができる。
それよりも辞書のような本が好きなのだ。理科年表、MSDNライブラリ、平凡社の百科事典、広辞苑などは私の愛読書だ。辞書構成の楽しいところとして、読み進めた分だけ確実に未知の領域を減らすことができることを実感できる点がある。たとえばある程度その分野に詳しければランダムにページを開いたとしても、そのページに書いてあることが既知となる体験ができるだろう。ついでにいうと、ランダムにページを開いたり、グラフィックによるメモ書き・検索をする機能が紙媒体以外の書籍には不足している。まあ Adobe Reader のことを言っているのだが、この分野のソフトウェアは紙媒体でできることが全てできていないので、今後に期待する。
それから、教科書のような本は構成が練りこまれているのはいいのだが、長期間に渡って通読する以外の読み方をしようとすると苦痛を感じる。たとえば数学の教科書を読むよりも、数学事典を飛ばし読みするほうがずっと楽しく感じる。これは、教科書が常に backreferences を前提としていて、自由なシークをほとんど許さない構成になっているからだ。
そういうわけで話を戻すが、もっと使われて良いはずの Managed DirectX の本を誰か書いてくれないだろうか。
ビデオ再生機能がうまくいかない。ビデオにもライン書き込みやクローズアップ、スポットライトを有効にするために、テクスチャにムービーをレンダリングしている。メインのスレッドから描画するのをやめて、また戻したり、いろいろ試しているが、ビデオ切り替え時に停止することがある。リソースの衝突に関係したバグかと思ってここ数日かなり苦労したのだがうまくいかない。なんとなくだが別のところに原因があるような気もする。 Managed DirectX の AudioVideoPlayback 名前空間のクラスを使っているのだが、これの利用方法が根本的に違っているのかもしれない。小さなムービープレイヤーを作ってこのクラスの挙動をテストしようと思う。
![]()
スライド挿入バー : プレゼン中にその場で新しいスライドを作成できます
質疑応答などで話があらぬ方向にいったときなどに役立つかもしれません
変更点は以下のとおり

ビデオのコントローラ(まだ使用できません)
メモリリークによる停止など致命的なバグを修正した。
ビデオの再生はだいたいできたのだが、Managed 環境のくせに Access Violation がたまに出るので悩んでいる。

実際にセカンダリディスプレイ出力からスクリーンに投影してみるテスト
打ち合わせ先で、MetaSynth というソフトを見せてもらった。サウンドエフェクトを作るソフトになると思うのだが、その素晴らしいUIに衝撃を受けた。ユーザは画像を編集することで音を創造する。画像は横軸が時間、縦軸が音高、ピクセルの濃度が音量、色相は定位を意味する。この画像をペイントソフト感覚でブラシで塗ったり、範囲指定して回転させたりすることにより音を編集する。また、音響的なエフェクトをかけるとその画像が変化する。音程に対するいろいろな粒度のクォンタイズ機能が素晴らしい。
見ているだけで楽しくなるツールだ。このツールのアイディアは製品のものとしては、見たことがない気がするのだが、ほかにあるのだろうか。技術的にはFFTで画像を作り、画像から音へは逆変換すればよいだけの話だと思うが、なぜ自分は今まで気がつかなかったのだろう。
非常に残念なのは Mac 版しか発売されていないことだ。このアイディアだけ借用可能なら、サウンドエフェクトを作るソフトを作ってみたい。Keynote も そうだが、Windows 版が発売されたら是非購入したいソフトだ。
スライドの移動ウィンドウを追加した。

移動ウィンドウ+タイムキーパーウィンドウ+メインウィンドウ
この状態でセカンダリディスプレイにミラーウィンドウを配置し、プロジェクターで投影すると便利です。
細かな修正。
更新したアイコン
大きなマウスカーソル(原寸大)
マウスカーソルの根本的変更と、クローズアップ機能の追加
スポットライトで照らしたくなるほとんどの場合、そこを拡大したくなることに気が付いたので、クローズアップ機能を追加した。クローズアップするためにはスポットライトで範囲を決めてから左クリックする。ホイール付マウスのみで操作できるようにするため、多少操作が複雑になってきた。これまではほぼモードレスオペレーションだったが、そうでなくなった。
マウスカーソルの巨大化は、後ろの方の席から小さいカーソルが見えないのに、まるでカーソルを特定部位を指し示すように使用されることが考えられるのでやってみた。とりあえず64x64のポインタを DirectX から直に描いている。巨大化の弊害として、今度はカーソルが邪魔になりそうなので、邪魔になりそうなシチュエーションでは透明度を上げて目立たなくさせた。

巨大化したマウスカーソル
DXPresentation サンプルビデオを新しくした。http://nyk.jf.land.to/dxpresentation/dxp.mov から見ることができる。
ここ最近、プレゼンをやる機会はないのだが、見る機会は何度かあった。どのプレゼンも内容は良いのだが、いくつか気になることがあった。まずプレゼンターがスクリーンに近づいて何かを指し示すときに何を示しているのかよくわからない問題。これは差し棒を使えば大体解決できるのだが、腕だけでやろうとする。そのとき、スクリーンと指先のZ値が合わないので、聴衆の視点からではスクリーン上の何を指しているかわからない。このため聴衆の脳内でunprojection処理をする余分なコストが発生する。
次に、いつプレゼンが終わったのか明確な合図がない問題。拍手ができない。これは「ご清聴ありがとうございました」と発言するか、そういったスライドを明示すれば簡単に解決する。この合図は非常に重要で、全体の印象も変えることがあるだろう。
さて、以前から書いているが、今一度DXPresentation に追加したい機能をメモしておく。
やりたい順に書いた。この中で実現が簡単そうなのは、オーディオ・ビデオ・フラッシュ・PDF・WEBの再生だ。難しそうなのはフラッシュ・PDF書き出しだ。グラフのビルディングアニメーションは仕様次第で難しくも簡単にもなる。
次の変更をおこなった。

マルチディスプレイ環境で便利なツールの開発を始めた

ミラーのパフォーマンスがかなり悪いのでなんとかしよう。
メッシュファイル(.xファイル)の読み込みをサポートした。

致命的なバグが 0.31 にあったので修正した。変更点は次のとおり。
ところで、新しい機能の「ツリー構造を持ったスライドのためのノードボタン」だが、マインドマップの記事を読んだりFreeMindを試してみていて木構造も必要かな、と思ってつけたものだ。木構造をビジュアル的にどう表現するかが問題なわけだが、真っ先に思いついたのは SGI の IRIX のデモプラグラムランチャーの「Buttonfly」だった。
Buttonfly は親ボタンの裏側に子ボタンが乗っている再帰的な構造を持っている。子ボタンをクリックするとそれが裏返るアニメーションが再生され、孫ボタンが現れるという、シンプルでわかりやすく、しかもビジュアル的にインパクトがあるものだった。最後にButtonfly を見たのが1998年くらいだったと思う。
木構造を持つボタンアイテムを作るにあたり、まずUS特許商標局でButtonflyのアイディアが保護されていないか調べてみた。Buttonflyをそのまま再現するのがいちばん楽でしかも良い結果が出せると思ったからだ。いろいろなキーワードで検索してみたがみつからなかった。いろいろ考えたが、やはりそのままのビジュアルでは危険に思えたので(良いアイディアなのに他で使われているのを見たことがなかった)、結局オリジナルの方法を考えてコーディングした。