Appleの白い奴が...

| コメント(0) | トラックバック(0)
iPhone4がいないそうです!

脱PHS後の初携帯電話として手にした820Pもスーパーボーナスの24ヶ月を過ぎ、iPhone4に乗り換えるはずでしたが、白が延期を続けています。Apple製品を買う時は白か銀と決めているので、困ったことです。

私の場合、電車通勤でのFMラジオ環境にも関係してきます。ポケットラジオの金額でiFMが買えてしまうので、一台で済ませられるこちらの方が本命だからです。iPod nano 3Gに装着して先行導入する手もありますが。

秋葉原では保守部品として白の外装部品を販売している店が出現していますから、生産上の問題などではないでしょう。やはりアンテナ問題の解決策と同時に量産するつもりでいると考えるが自然です。

黒のiPhone4は触らせてもらいましたが、私の初代iPod touchとは比較にならない滑らかさでした。やはり、ハイテク製品を買うなら新しい方が良いですね。

共同アンテナでFM

| コメント(0) | トラックバック(0)
加須から浦和に引っ越して、FMの室内T字アンテナを張ったら、ちっとも入りませんでした。浦和でNACK5もNHK FMもノイズが入るとは、鉄筋を甘く見ていました。

しかし、テレビで放送局を自動検索させたらJ:COMが入っていたのですが、そのJ:COMがFM再送信をしていると知り、接続したところ良好に受信できるようになりました。周波数は少し変わります(NACK5が79MHzなど)。

加須に住んでいた頃は綺麗に入るのがNACK5だけだったのに、FM横浜からベイFMから、正式カバー局は全て綺麗に入ります。車の方はよく入感したのですが、自宅で良好に聞けるのは長らく味わっていない感動です。

その配線の話。地デジチューナーへのケーブルをVHF/UHF分波で分けるのが理想的ですが、この種のものはUHFが300Ωのものばかりのため断念。素直に分配器を使いました。後は直接なり、300Ω整合器なり、バラ線なら先を切断して被覆を剥くなり。

大昔に実家にあったテレビは確か、VHFが75/300Ω両対応、UHFが75Ωのみだったと記憶しています。周波数が高い方がリボンフィーダーには不向きなので、UHFが300Ωの分波器が多く現存しているのは、理屈に合わない気もします。

ともあれ、これで素敵なラジオ環境が整いました。

VS2010と愉快な仲間たち

| コメント(0) | トラックバック(0)
入れたのは純粋にVisual C++だけ(ヘルプも無し)ですが、Visual Studio 2010 Professional (評価版)をインストールした時に入るソフト一覧を記しておきます。

Dotfuscator Software Services - Community Edition - JPN
Microsoft .NET Framework 4 Client Profile
Microsoft .NET Framework 4 Client Profile Language Pack - 日本語
Microsoft .NET Framework 4 Extended
Microsoft .NET Framework 4 Extended Language Pack - 日本語
Microsoft .NET Framework 4 Multi-Targeting Pack
Microsoft Help Viewer 1.0
Microsoft SQL Server 2008 R2 Data-Tier Application Project
Microsoft SQL Server 2008 R2 Transact-SQL Language Service
Microsoft SQL Server 2008 R2 データ層アプリケーションフレームワーク
Microsoft SQL Server 2008 R2 管理オブジェクト
Microsoft SQL Server Compact 3.5 SP2 JPN
Microsoft SQL Server Database Publishing Wizard 1.4
Microsoft SQL Server System CLR Types
Microsoft Team Foundation Server 2010 オブジェクト モデル - 日本語
Microsoft Visual C++ 2008 Redistributable - x86 9.0.30729.4974
Microsoft Visual C++ 2010 x86 Runtime - 10.0.30319
Microsoft Visual Studio 2010 Professional - 日本語
Microsoft Visual Studio 2010 Tools for Office Runtime (x86)
Microsoft Visual Studio 2010 Tools for Office Runtime (x86) Language Pack - 日本語
Microsoft Visual Studio Macro Tools
Microsoft Visual Studio Macro Tools - JPN Language Pack

最低でもこれだけは入ってしまいます。

Vistaの言語パック

| コメント(0) | トラックバック(0)
Vista Ultimateに臨時で入れた言語パックをアンインストールしようとして、大量の時間を空費しました。

削除時に複数を選択できるように見えるのですが、最初の一つ以外は失敗しました。これが世間に言う「一つずつしか削除できない」ということのようです。

入れる時は複数同時に入るのに、効率が悪いことこの上ありません。しかも再起動しないと続行できず、またバッチ処理もできません。ただでさえ切り替えだけでも時間がかかるのに。

Vista/7の言語切り替えは、実際には非Unicode部の切り替えも必要になることが多く、再起動が必須になります。そしてVistaの再起動は遅いノートでは5~10分かかります。

人件費...外注の場合で1人月100万でしたか。全部合算すれば自社社員でもそれぐらいでしょうが、再起動1回で\1000が飛ぶわけです。もちろん他の作業を別のPCでするといった運用面でのカバーはしますが、本質的に効率が悪いことに変わりはありません。

Mac OS Xの言語切り替えはログアウトだけででき、大変ありがたいのですが、Windowsはこの部分に関してはXPから進化していないのです。

言語パックの削除に関しては、全部入れたままにできればよいのですが、残念ながらHDDに余裕がありません。容量があっても切り替えでの再起動は問題なので、仕事が軽い時期に7200rpmのものにでも交換したいところです。

BootCamp環境で双方を移行する方法は、ディスクユーティリティとWinCloneの組み合わせが良さそうなので、折を見て挑戦してみます。

タブキーで確定同時タブ入力

| コメント(0) | トラックバック(0)
DFJ2を真似したキー設定で使い続けること14年、流れ流れてATOK。

DFJ2/WINがどうだったかは記憶の彼方ですが、VJE-Deltaでは確定前にタブキーを押すと、確定と同時にタブが入力されました。2.0/2.5/4.0共通の仕様だったはずです。

どうなるかというと、Webブラウザのフォームで日本語入力している時に便利なのです。例えば姓を変換してタブを押すと、姓を確定しつつ名の欄に移動する具合になります。

しかしATOK2008では、どう設定してもこれは実現できないようでした。

この場合、とりあえずタブに全文確定を割り当て、確定を検出してVK_TABを発行すれば良いわけです。

Spy++を眺めたところ、確定すると下記のようなメッセージが来ていました。

WM_IME_NOTIFY / IMN_PRIVATE / lParam:0x04
WM_IME_NOTIFY / IMN_PRIVATE / lParam:0x13
WM_IME_ENDCOMPOSITION

IMN_PRIVATEは必ず0x04~0x13の順ですが、変換してから確定するとWM_IME_ENDCOMPOSITIONが二つのIMN_PRIVATEより後(上記のままの順序)、変換前に確定するとWM_IME_ENDCOMPOSITIONが先になります。

Vista/7上のATOK2008とFirefoxの組み合わせではWM_IME_ENDCOMPOSITIONが来ず、また二度目以降の確定の場合は0x13のIMN_PRIVATEも来ませんでした。ということで、0x04のIMN_PRIVATEを処理すれば良いことになります。
XP上でVJE-Delta4.0とFirefoxの組み合わせだとWM_IME_ENDCOMPOSITIONは普通に来るのですが。

DeltaEndにこの仕組みを入れたテスト版で動作を確認できましたが、現在のメイン環境は64ビットです。64ビットEXEとDLLも用意しないと、64ビットアプリにフックが届きませんし、その場合はそれぞれDLLを別名にしなければならないということでした。

# Webブラウザぐらいでしか使わない機能だと割り切る選択肢もあり

32ビットをメインとし、64ビット動作用の子プロセスを呼ぶとして、設定の同期が課題です。まずは32ビットEXE~32ビットDLL間を共有メモリにしてみましょうか。

キーボードフィルタ

| コメント(0) | トラックバック(0)
キーボードフィルタドライバの使い方がわかってきました。いくらでも試して操作不能にできる仮想PC環境のおかげです。

例えば無変換キーを
  • KEYDOWNでKEYUPも発行
  • KEYUPは無視
  • リピート却下
とする場合、後述のようなコードになっています。

ベースのkbfiltrはWDK 6001.18002です。スキャンコード一覧はこちらにあります。その他、ここここここを参考にしまし た。

レイアウトドライバで無変換にVK_KANAを割り当てれば、遜色ないカナキーにすることができるわけです。

ローレベルの制御をドライバで完了できれば、管理者権限のユーティリティが不要になります。一般権限では管理者権限アプリをフックできませんが、カナインジケータ程度の監視ならポーリングのような、より普通の実装にすべきなのでしょう。

VOID
KbFilter_ServiceCallback(
  IN PDEVICE_OBJECT DeviceObject,
  IN PKEYBOARD_INPUT_DATA InputDataStart,
  IN PKEYBOARD_INPUT_DATA InputDataEnd,
  IN OUT PULONG InputDataConsumed
  )
{
  PDEVICE_EXTENSION  devExt;
  KEYBOARD_INPUT_DATA kana[1] = {0};
  PKEYBOARD_INPUT_DATA curInputData = InputDataStart;
  ULONG tempConsumed = 0;
  static int bInKana = 0;

  devExt = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;

  while( curInputData < InputDataEnd )
  {
    switch ( curInputData->MakeCode )
    {
    case 0x7b:
      if ( ( InputDataStart->Flags & KEY_BREAK ) == 0 ) {
        if ( bInKana == 0 ) {
          bInKana = 1;

          kana[0].MakeCode = 0x7b;
          kana[0].Flags = KEY_MAKE;
          tempConsumed = 0;

          (*(PSERVICE_CALLBACK_ROUTINE) devExt->UpperConnectData.ClassService)(
            devExt->UpperConnectData.ClassDeviceObject,
            &kana[0],
            &kana[1],
            &tempConsumed);

          kana[0].Flags = KEY_BREAK;
          tempConsumed = 0;

          (*(PSERVICE_CALLBACK_ROUTINE) devExt->UpperConnectData.ClassService)(
            devExt->UpperConnectData.ClassDeviceObject,
            &kana[0],
            &kana[1],
            &tempConsumed );
        }
        else {
          curInputData++;
          continue;
        }
      }
      else {
        bInKana = 0;

        curInputData++;
        continue;
      }
      break;
    
    default:
      tempConsumed = 0;
      (*(PSERVICE_CALLBACK_ROUTINE) devExt->UpperConnectData.ClassService)(
        devExt->UpperConnectData.ClassDeviceObject,
        curInputData,
        curInputData + 1,
        &tempConsumed );
    }
    curInputData++;
  }

  *InputDataConsumed = ( InputDataEnd - InputDataStart );
}

iPhone 4

| コメント(0) | トラックバック(0)
iPhone 4が発表されました。6月24日発売だそうです。

個人的に最大の関心事だったFMチューナーは搭載されていませんでした。これはチューナー内蔵ヘッドフォンと組み合わせるのが良いのでしょう。

そうなると敢えて3GSを購入するという選択肢も出てきますが、機能に無頓着な私がiPhone 4を選ぶ理由があるとしたら、下記のような点です。

  • iOS 4で従来機種のスペック不足が予想される
  • ノイズキャンセル機能が付いた
  • アンテナの一部が外枠と一体化して感度が向上
  • 割れているのを見たことがあるので強化ガラスは丈夫そう

ソフトバンクの電波は勤め先のあたりで少し弱いので、外枠アンテナは実は必須かもしれません。また同僚のiPhoneが割れているので、強化ガラスも地味に効果があるかもしれません。

何はともあれ820Pのスーパーボーナスが終わる来月ということで。

デバッグシンボル

| コメント(0) | トラックバック(0)
何となく、ドライバ類からデバッグ用シンボル情報を削除する話をまとめます。

まず、rebaseする方法。Windows 2000 DDKぐらいまではこれ。Free Buildでも入るのでこうしたKBがあります。
[NT DDK] デバイス ドライバからシンボルを削除する方法

Server 2003 SP1 DDKはmakefile.newの修正が必要です。
LINKER_FLAGSにLINKER_DBG_SECTIONを追加している部分をFree Buildの場合に除外します。

LINKER_FLAGS = $(LINKER_FLAGS) $(LINKER_DBG_SECTION) -debugtype:cv $(LINK_OS_VERSIONS)
これを
!if $(FREEBUILD)
LINKER_FLAGS = $(LINKER_FLAGS) $(LINK_OS_VERSIONS)
!else
LINKER_FLAGS = $(LINKER_FLAGS) $(LINKER_DBG_SECTION) -debugtype:cv $(LINK_OS_VERSIONS)
!endif
こう。

WDKもmakefile.new修正ですが少し変わりました。6001.18002と7600.16385.1で共通です。

LINKER_FLAGS = $(LINKER_FLAGS) $(LINKER_DBG_SECTION) $(LINK_OS_VERSIONS)
これを
!if $(FREEBUILD)
LINKER_FLAGS = $(LINKER_FLAGS) $(LINK_OS_VERSIONS)
!else
LINKER_FLAGS = $(LINKER_FLAGS) $(LINKER_DBG_SECTION) $(LINK_OS_VERSIONS)
!endif
こんな感じに。

ただし2003 DDK以降は派手には残らず、pdbファイルへのフルパスが残る程度のものとなっています。ちょうどVisual C++でデフォルト設定のままReleaseビルドした状態に相当ですので、気にしない人には問題ありません。

VK_F

| コメント(0) | トラックバック(0)
時々Windowsのキーボードレイアウトドライバを弄っていますが、VK_F構造体(タグ名_VK_TO_FUNCTION_TABLE)の意味が何となくわかってきました。

# MSDNででも聞けば教えてくれるのでしょうが

NLSFEProcTypeがKBDNLS_TYPE_TOGGLEの場合、NLSFEProcSwitchが8ビットのフラグとしてNLSFEProc[8]の各状態に対応し、その組み合わせでキーが押されると、ビットが立っている状態に関してのみNLSFEProcAltと切り替わるようです。

NLSFEProcCurrentは初期状態をNLSFEProcかNLSFEProcAltのどちらにするか、でしょう。試していませんが2択なので変更する必要性もありません。

WDKのkbd106サンプルの場合、「英数」のNLSFEProcSwitchは2ですから、Shift同時押しでトグル動作です。
このShift同時押しでKBDNLS_SEND_PARAM_VKに従いVK_CAPITALを発行し、同時にNLSFEProcAlt側に切り替わります。次のShift同時押しはNLSFEProcAlt側が参照され、VK_CAPITAL発行と同時にNLSFEProcに戻ってくる、と。
NLSFEProcAltには同時押しのない単体(Base)にもVK_CAPITALが書かれていますが、発行されないことから、Shift同時押しだけが切り替わったものと考えられます。

「ひらがな」はNLSFEProcSwitchが8なのでShift+Ctrl同時押しが対応。VK_KANAと同時にNLSFEProcAltに切り替わり、同様に次にShift+Ctrl同時押しで戻ってきます。

ということに気付いたのは、無変換VK_KANAをKBDNLS_TYPE_TOGGLEで試している途中、NLSFEProcAlt側を全部KBDNLS_NULLのままにしていたら、戻って来られなくなったためですが(汗)。

しかしKBDNLS_TYPE_TOGGLEにしても、少なくともVK_KANAに関して御利益はないようで、相変わらずKEYUPまでON/OFFが変化しません。KEYDOWNで変化するのはCapsLock、NumLock、ScrollLockの特権のようです。

98配列USBキーボードでは、KEYDOWNで切り替えるためのフィルタドライバを別途用意していますが、この部分の書き方についてはまだ理解できていません。

夢喰いメリー

| コメント(0) | トラックバック(0)
yumekui.jpg牛木義隆氏はローゼンメイデンのファンアートで知った名前です。顔の表情がとても好きなのですが、プロデビューしていたと知り単行本を買ってみました。

夢をテーマとする作品です。スタイルはバトルものですし、ネタとしてもそう珍しくはありませんが、キャラがよく立っています。ストーリーも起伏があって良いですよ。

特に人外キャラがいい感じです。極端なディフォルメであれ、全く現世にないものであれ、現実から離れれば離れるほど、独自のリズムで形を整えなければなりません。そこに何となく王ドロボウを感じたのですが、熊倉裕一氏がお好きだそうで。

夢の世界で人外いっぱい、というと「風のクロノア」というこれまた大好きな作品がありますが、この路線は胸がときめくのです。

「追跡者」ジョン・ドゥが素敵です。こういうトリックスターは元々好きなのですが、マントとか仮面とかしゃべり方とか主人公へのちょっかいとか、ツボ突かれまくりですよ。一巻冒頭ではまだそれほどではありませんが、再登場する度に格好良くなっています。牛木氏も好きなのでしょう。取り巻きの猫が大勢いるのですが、直立してたりケモノ好きにはたまりません。

「迷宮」ランズボローは子分らしい小物ですが、表情豊かですし、主人公らを絶望に落としてみたりと活躍しています。一方で、悪の親玉である「灯台」エルクレスは人外というほどではありません。素顔が兜で完全に隠れていたら、好みから完全に外れるところでした。もっとも、夢魔が全部人外というわけでもないので、その方向に期待しすぎてもいけませんが。

1巻を買ってから2巻がなかなか手に入らず、ようやく見つけた書店で4巻までまとめ買いしてしまいましたが、いいとこで終わってますね。5巻は半年後ぐらいでしょうか。単行本派はこういう時に困ります。
1234567891011