JavaWorldとLinuxWorldのメモリアルDVDブック

投稿者: shuichi, カテゴリ: プログラミング, 日記, 投稿日時: 2007/06/22 21:43:56

今日発売のJavaWorldメモリアルDVDブックLinuxWorldメモリアルDVDブックを買ってきました。約5年分の記事が読めます。実際には全部読めませんけどね。

Visual Studio 2005 Service Pack 1 適用済みディスクを作成

投稿者: shuichi, カテゴリ: ソフトウェア, プログラミング, 投稿日時: 2007/03/12 00:25:50

Visual Studio 2005 Service Pack 1をインストールするためには数GBのハードディスク容量が必要でインストールにかかる時間がパソコンのスペックにもよりますが1時間ほどかかります。OSインストールの次に時間がかかる作業ではないかと。再インストール時の手間を考えてSP1適用済みインストールディスクを作成しておきました。

SP1適用作業はSlipstreaming Visual Studio 2005 Service Pack 1の手順どおりに行うことで成功。DVDに記録する場合はボリュームラベルをオリジナルインストールディスクのものと同じにする必要があるので注意。

MSDNライブラリ2006年12月版

投稿者: shuichi, カテゴリ: ソフトウェア, プログラミング, 投稿日時: 2007/03/10 17:26:33

いつのまにかMSDNライブラリ2006年12月版が公開されてる。今回はDVDイメージとしてダウンロードできるみたいです。これでMSDNライブラリのCDをDVDにまとめる必要がなくなったわけですね。

ContextMenuStripをタスクバー上に表示する

投稿者: shuichi, カテゴリ: プログラミング, 投稿日時: 2006/10/28 04:38:23

.NET Framework 2.0では.NET Framework 1.xのContextMenuの代わりにContextMenuStripというコントロールが追加されました。このContextMenuStripは多機能で便利ですが、タスクバー上に表示させようとするとうまく表示できません(タスクバーに重ならないように表示される)。SHAppBarMessageでデスクトップツールバーを作成したときなどは困るんじゃないかと。ということでContextMenuStripをタスクバー上に表示させるためにいろいろと調べてみました。

最初に注目したのはNotifyIcon。NotifyIconにContextMenuStripを設定すると正常にタスクバー上に表示されます。MSIL逆アセンブラでNotifyIconを覗いてみると、ContextMenuStripのShowInTaskbarというプライベートメソッドを呼び出していることが分かります。とりあえず、

contextMenuStrip.GetType().InvokeMember(
    "ShowInTaskbar",
    System.Reflection.BindingFlags.NonPublic |
    System.Reflection.BindingFlags.InvokeMethod |
    System.Reflection.BindingFlags.Instance,
    null,
    contextMenuStrip,
    new Object[] { Cursor.Position.X, Cursor.Position.Y } );

とすることでcontextMenuStripをタスクバー上に表示させることができました。

ただし、この方法では何故かメニューが常にマウスポインタの右上に表示されるようです。いまいちスッキリしないのでShowInTaskbarメソッドの中をさらに覗いてみると、ToolStripDropDownにWorkingAreaConstrainedプロパティが存在するらしい。強制的に作業領域に表示させるという意味なので、

contextMenuStrip.GetType().InvokeMember(
    "WorkingAreaConstrained",
    System.Reflection.BindingFlags.NonPublic |
    System.Reflection.BindingFlags.SetProperty |
    System.Reflection.BindingFlags.Instance,
    null,
    contextMenuStrip,
    new Object[] { false } );
contextMenuStrip.Show( Cursor.Position );

としてみるとうまく表示させることができました。ただし、メニューが表示されるとWorkingAreaConstrainedがtrueに設定されるようなので、表示させる前に毎回WorkingAreaConstrainedをfalseに設定しないと駄目なようです。

これらの方法は本来アクセスできないメソッドやプロパティに強引にアクセスしているわけで、実際はこのような方法は好ましくありません。とりあえずこのような方法もあるというだけです。

Firefox 2用のPHPマニュアル検索プラグイン

投稿者: shuichi, カテゴリ: Firefox, ソフトウェア, プログラミング, 投稿日時: 2006/07/22 13:45:20

Firefox 2では検索プラグインのフォーマットが変更となり、MozSearchというフォーマットが採用されました。MozSearchはAmazonの検索エンジンA9のOpenSearchを簡略化したものです。MozSearchでは検索キーワードの候補をリスト表示するサジェスト機能もサポートされています。MozSearch検索プラグインについてはCreating MozSearch pluginsを参照してください。

上で示した記事をざっと読んでみると簡単に作れそうだったので、PHPマニュアル検索プラグインを作成してみました。PHPマニュアル検索プラグインは探せばいくらでもあると思いますが、今回私が作成したものではいくつかの検索キーワードが追加されており(PHP本家の検索フォームではうまく検索できないキーワードをサポート)、サジェスト機能もサポートしています。またOpenSearch Autodiscoveryに対応しているのでインストールも簡単です。インストールするにはPHPマニュアル検索プラグインを開いてFirefoxの検索バーのドロップダウンリストを表示して「”PHP Manual Search”を追加」をクリックしてください。

検索キーワードに対応するマニュアルページへのリダイレクトとサジェスト機能はこのサーバのPHPとSQLiteを利用しています。PHPのキーワードのデータベースはPHP 5.1.6で自動生成しました。PHPにロードされていたモジュールの有無によってキーワードに対応するマニュアルが存在しない、またはマニュアルは存在するがそれに対応するキーワードがデータベースに登録されていない場合があります。

サジェスト機能はFirefoxからのリクエストに対してキーワードの候補リストをJSONという形式で返すことで実現できます。JSONの処理にはJsphonを使わせてもらいました。以下のURL先を開くと”get”というキーワードに対するキーワードの候補リストがJSON形式で表示されると思います。

http://sks.s101.xrea.com/mozsearch/php/json/?q=get

Firefox 1.5以前のような検索プラグインを作成するのは簡単ですが、サジェスト機能をサポートするとなるとけっこう面倒です。

追記(2006/08/13): キーワードのデータベースに関係のないキーワード(私が定義していたクラスや関数…)が混入していましたので削除しました。

PHP Manual Search