Hatena::ブログ(Diary)

Kazzzの日記 このページをアンテナに追加 RSSフィード

2013-05-08

[][]Parallels Desktop® 8上でWindowsIME On/Offを行う

遅ればせながらVMを使うことが多くなり、Mac上でWindows8を動かすためにParallels Desktop® 8 for Macを使用している。
Parallels Desktop® 8 for Mac - Mac で Windows を使うために Mac ユーザに選ばれて No.1
仕事場ではMacに16GBのメモリを搭載しており、WindowsPCよりも遥かに快適なので、Windows開発環境をParalles仮想マシン上に作ろうと思っているのだ。

Parallels Desktop® 8は仮想化ソフトウェアとしてよくできており、Mac上でWindowsをネィティブ並に軽く動かせる。※

特に"Coherence Mode"と呼ばれる、仮想マシンのスクリーンを消してまるでWindowsアプリケーションがMac上で動作しているような操作感を提供するモードや、Macにマウントされているボリウム上に置かれたWindowsバイナリを起動すると、関連付けられたWindows仮想マシン上で起動される(仮想マシンが起動されていない場合は起動される)、USBデバイスをMacに接続するか仮想マシンに接続するかを選べる、等、この手の仮想化ソフトウェアとしては非常によく作りこまれている印象だ。

ただ、さすがにキーボードバインドだけはそのままとはいかず、特にIMEを切替えではMacではカナ、英数キーと呼ばれるスパースパーの両端にあるキーを使用するのだが、Windowsでは対応するキーではなく全角/半角等を使うため、インストールしたままでは仮想マシン上でIMEをうまく切り替えることができない。

幸いにもMac上の「英数」キーはWindows上の「無変換」キーにマップされており、このキーをIME切替用のキーとして登録することで作業がスムースに行く。
f:id:Kazzz:20130508191547p:image


※誇張ではなく、仮想マシンを使っているのを忘れる位に軽く動作する。

2013-04-17

[]MeiryoUIが好きになれない、かといってMeiryoは幅広すぎ

なので適当フォントを弄ってみた。
f:id:Kazzz:20130416210952p:image:w480
といってもSegoeUIにしただけ。Visual StudioEclipseファイル名部分(アイコン)が大きいのが嫌いなのだ。
ただしメニューはフォントリンクが上手くいかず(Tahomaが無いから?)英語コードページのメニューが化けるので、メニューだけはMeiryoUIに戻した。

2013-04-12

[][][]忘却の彼方

CreateWindowExの戻り値が0になってしまう件だが、コメントでご指摘頂いた通りパラメタの型が64bitプラットホームを考慮していないのが原因だった。
その後、シグネチャを以下のように修正して、Windows8 64bitのVisual Studio上でも動作している。

修正前
    [DllImport("USER32.DLL", EntryPoint = "CreateWindowExW", SetLastError = true)]
    public static extern IntPtr CreateWindowEx(int dwExStyle, [MarshalAs(UnmanagedType.LPWStr)] string lpClassName,
                           [MarshalAs(UnmanagedType.LPWStr)] string lpWindowName, int dwStyle, int x, int y,
                           int nWidth, int nHeight, uint hWndParent, int hMenu, int hInstance,
                           int lpParam);

修正後
    [DllImport("USER32.DLL", EntryPoint = "CreateWindowExW", SetLastError = true)]
    public static extern IntPtr CreateWindowEx(int dwExStyle, [MarshalAs(UnmanagedType.LPWStr)] string lpClassName,
                           [MarshalAs(UnmanagedType.LPWStr)] string lpWindowName, int dwStyle, int x, int y,
                           int nWidth, int nHeight, IntPtr hWndParent, IntPtr hMenu, IntPtr hInstance,
                           IntPtr lpParam);

それにしても、Visual Studioではなく普通に実行する分においては修正前のシグネチャでも動くのとどうしてだろう。
上手くマーシャリングしてくれるのな。

それにしても情けないのは今回の問題、過去に自分で「32bit/64bitのどちらでも動作するように、パラメタの型には注意しなくてはならならい」という啓蒙のためのエントリを書いていることだ

2005-11-02 [.NET]64ビット時代 編集

このように書いておくと、64ビットプラットホームになっても正しく動作するのだそうだ。引数が本当にintを必要とするか、IntPtr(UIntPtr)を必要とするかは一見では解らないので、まずはAPIリファレンスを引く必要がありそうだな。

7年前ではあるが、自分の忘れっぷりがまったくもって情けない。

2013-04-11

[][]CreateWindowEx

以下のようなシグネチャで定義されたWin32APIのInterOpをコードから呼び出しているのだが、Windows8 64bit上のVisual Studio 2012上で実行すると、失敗してしまう。(常時0でリターンする)

    [DllImport("USER32.DLL", EntryPoint = "CreateWindowExW", SetLastError = true)]
    public static extern IntPtr CreateWindowEx(int dwExStyle, [MarshalAs(UnmanagedType.LPWStr)] string lpClassName,
                           [MarshalAs(UnmanagedType.LPWStr)] string lpWindowName, int dwStyle, int x, int y,
                           int nWidth, int nHeight, uint hWndParent, int hMenu, int hInstance,
                           int lpParam);

32Bitプラットホームでは問題なし。64bitでもデバッガを通さずデバッグビルドしたバイナリを実行すると問題は発生しないので、Visual Studioのホスティングプロセスに問題がありそうなのだが、今のところ不明。 (多分私がわからないだけ)

2013-03-30

[]64bit化の恩恵

急遽iOSアプリ修正の仕事が入ったのでMac OS Xでの作業に戻ることになった。

現在担当しているiOSアプリはWebサービスに接続して様々な処理を行うものなのだが、パブリックなテスト用サーバは用意されていないので、必要であれば自分でサーバを建てなくてはならない。といっても、VMという便利なものがある現在では一からサーバーを構成する必要も無く、VMWare Playerをインストールして対象OSこみのWebサーバ(Appサーバ)とDBサーバのイメージを動かせば良いだけである。嗚呼なんて便利なんだ。

Windows8 64bitをインストールしてから改めてVMWare Playerをインストールすることになったのだが、そもそも64bit版は大丈夫なのかと思ったが、現在のVMWare Playerは32bit/64bitのインストーラが兼用になっており、どちらでもインストールできる。
VMware Player for Windows 32-bit and 64-bit

当たり前なのだが、VMはプラットホーム全体を仮想化して動かすのでPCの中のもう一台PCを起動するのと相似であり、リソースの消費ももう一台PCがあるようなものだ。私の場合はWebサーバとDBサーバ合わせて2GB程度の消費だが、32bit版 Windows7ではこれで殆どの物理メモリが消費されてしまうため、VMを起動すると他の事が殆ど出来なかったが、今は12GBと当時の4倍の物理メモリを使えるので同じVMで環境を違うものを二つ起動しても余裕である。

にしてもノートPCであるMacは既に64bitプラットホーム、物理メモリ16GBな訳で、能力的にはデスクトップPCより上な訳で、こんなことになるとは予想もしなかったなと、しみじみ思う。

2013-03-23

[]strict allocate = yes

f:id:Kazzz:20130316210409p:image
Windows8でシステムイメージの作成を行ったときにエラーが発生する件だが、NASがUNIX(Linux)ベースでSambaサーバを使用している際に発生することが分かった。
Backup failed with "The version does not support this version of the file format" 0xc03a0005

対処としては、sparseイメージを生成すめオプションである"strict allocate = yes"をSambaの設定ファイルであるsmb.confに記述することらしいのだが、そもそもメーカーが提供しているNASがSambaの設定を公開しているはずもなく、メーカの対応待ちとなるのだろう。 残念だ。

って原因がNAS側にあるのであれば、Windows7はどうして大丈夫だったんだ?

2013-03-19

[][]今日からまた初学者

前にも書いたがひょんなことからWindows7〜8でアプリケーションを組むことになり、それを理由にWindows8インストールして、Visual Studio 2012をインストールした。
アプリケーションの開発テクノロジに関しては、これからのプラットホーム、アプリケーションでWindowsFormsもないだろうということでWPFを選択することにしたのだが※、私がWindowsアプリケーションを最後に組んだのはC#、WindowsFormsでありWPFは全くといっていいほど知らない。

また1から勉強が始まるということだ。

幸いにもWindows Phone 7.xのプログラミングを勉強したときにSilverlightとXAMLは少々かじっているのと、C#は3.0までなら一通り書けるので完全に0からではないのが有難い。 無駄な勉強なんて一つもないんだなと思う。

※Windows8用にHTMLアプリケーションも予定している