2013/10/10

Unable to invoke library 'KinectBackgroundRemoval180_64.dll'. の対処法

Kinect SDK 1.8ではBackgroundRemovalBasics-WPFというサンプルが追加されました。
このサンプルでは、カメラ画像から人物を抽出し背景を削除することができます。

このサンプルをそのままカスタマイズしていけば問題は起きなかったのですが、 参考にしながら作成していると、BackgroundRemovedColorStreamのインスタンスを作成するときに、

Unable to invoke library 'KinectBackgroundRemoval180_64.dll'.

が発生しました。

原因は、参照にKinectBackgroundRemoval.dllを追加するだけでは足りず、DLL自体をプロジェクトに追加する必要がありました。

  1. 'KinectBackgroundRemoval180_32.dll'と'KinectBackgroundRemoval180_64.dll'をプロジェクトに追加する
  2. 1で追加したDLLのプロパティを開き、「出力ディレクトリにコピー」の項目に「新しい場合はコピーする(または、常にコピーする)」を選択する
以上で、エラーは解消されました。

'KinectBackgroundRemoval.dll'は、
C:\Program Files\Microsoft SDKs\Kinect\Developer Toolkit v1.8.0\Redist\Microsoft.Kinect.Toolkit.BackgroundRemoval.dll

'KinectBackgroundRemoval180_64.dll'は、
C:\Program Files\Microsoft SDKs\Kinect\Developer Toolkit v1.8.0\Redist\amd64

'KinectBackgroundRemoval180_32.dll'は、
C:\Program Files\Microsoft SDKs\Kinect\Developer Toolkit v1.8.0\Redist\x86

にあります。


余談ですが、Kinectを用いてC#で開発していたときに、Kinectを制御する部分ではないWPF周りで手こずっていました。
Xamlでデータバインディングの仕方やDependencyPropertyがいまいち要領をつかめず。。
Android開発のようにレイアウトはXMLで書いているので似ているのですが。。

そこでXamlについて書かれた本を探したのですが、Xamlでデータバインディングの仕方やDependencyPropertyなどを理解するのに下記の本が非常に分かりやすかったです。
Windowsストアアプリにも興味があったので、ちょうど良いかと思って購入しました。


2013/09/08

Movie Studio Platinum 12が10から良くなったところ

Movie Studio Platinum 12が10から良くなったところのメモを掘り起こしたので公開(2012年11月のものですが、あまり検索しても情報がなかったので) 。

・動画ファイルが増えても快適に編集できる

1番良くなったポイントは、Movie Studio Platinum 12から64bitにも正式(?)に対応したようで、FullHD動画を多く追加しても正常に編集でき、エンコードできるようになったこと。
Vegas Movie Studio HD Platinum 10ではあるライン(*)を超えると編集もままならず(私の環境ではプレビュー画面が赤背景になる)強制終了し、エンコードもできない状態だったので、編集作業が大変楽になった。

(*)あるラインはメモリに関係していると見られ、動画を少なくすると編集が可能でした。仕方がないので、プロジェクトを3つに分け、それぞれエンコードして結合するという手間と時間がかかったことがあります。


・編集時の動作が軽い

Movie Studio Platinum 12の場合、
別のアプリケーションにフォーカスが移ったり、戻ったりしても動作が軽い。
(実行メモリに変動がない)

Vegas Movie Studio HD Platinum 10の場合、
別のアプリケーションからフォーカスが戻ったときに再読み込みするため、扱っている動画が多いほど編集できるまでに時間がかかる。
(待機メモリや実行メモリに変動が大きい)


以上が使ってみて気付いたことです。 
12でメモリの問題が解決されたことが非常に助かったので、アップデートして良かったです。


2013/05/20

【翻訳】Google Play Game Services の設定をGoogle Play デベロッパーコンソール上で行う

Google I/O 2013にて発表されたGoogle Play Game Services について書かれている下記のサイトを翻訳してみました。

Setting Up Google Play Game Services with the Google Play Developer Console
https://developers.google.com/games/services/console/enabling



この資料は、あなたのAndroid, iOS, またはウェブ上のゲームに向けて、デベロッパーコンソールで ゲームサービスを設定する方法を取り扱っています。


ゲームサービスを設定するには、まずデベロッパーコンソールにあなたのゲームを追加する必要があります。ゲームを登録する際、ゲームの名前や説明などの詳細を指定できます。

また、あなたのゲームがゲームサービスにアクセスするためには、ゲームを認証および許可するために必要な証明書を生成する必要があります。

デベロッパーコンソールに登録したゲームは、Android, iOS, またはウェブ版のゲームを関連付けることができるため、プレイヤー達はこれらのプラットフォームで同じゲームの詳細を見たり、同じゲームサービスを共有することができます。


ステップ1.デベロッパーコンソールにサインインする


再インするためには、Google Playデベロッパーコンソールに行きます。もし、これまでにデベロッパーコンソールを登録していなければ、そうするように(=登録するように)求めるメッセージが表示されます。


ステップ2.デベロッパーコンソールにゲームを追加する


デベロッパーコンソールにゲームを追加するためには:
  1. Google Playゲームサービスページを開き、ゲームを追加します。
    • 左側にあるゲームサービスタブを選択します。
    • Google Play ゲームをセットアップボタンをクリックします。
  2. Google APIを既に使用しているゲームを追加しようとしているかどうかを指定します。
    • ゲームをScratchから作ろうとしている場合、または、以前にGoogle APIを設定したことがない場合、ゲームで Google API をまだ使用していませんタブのままでいいです。あなたのゲームの名前を入力し、カテゴリを選択し、そのあと、次へボタンをクリックします。
    • このゲームが既に一つ以上のGoogle API(例えば、Google+ sign-in)を設定している場合は、ゲームで Google API を既に使用していますタブを選択してください。あなたが開発者としてリストされているGoogle APIコンソールからプロジェクトリストを見れます。このリストからプロジェクトを選択し、ゲームのカテゴリを選択し、そのあと、次へボタンをクリックします。

  3. ゲームの詳細フォーム内で、ゲームの説明、カテゴリ、画像アセットを追加します。テスト目的のためでも表示名だけは必須です。その他の項目は、ゲームを公開するときには記入する必要があります。

    • ゲームの表示名と説明は、同じゲームサービスを共有する全てのバージョンに適用するのに十分な、汎用的なものであるべきです。
    • 画像アセットを作成するガイドラインとして、Google Play for Developers guide 及び Google Play Featured-Image Guidelines を参照してください.

  4. デベロッパーコンソール内にゲームのための新しいエントリーを作成するには、保存ボタンをクリックします。

ステップ3.OAuth 2.0クライアントIDを生成する

ゲームにGoogle PlayゲームサービスSDKを使用できるようにするには、まず初めに、あなたのゲームを認証および許可するOAuth 2.0クライアントIDを設定する必要があります。

過去にGoogle APIを使用している場合、既にGoogle APIコンソールでのOAuth 2.0クライアントIDを作成するために使用されるかもしれません。新しいデベロッパーコンソールでは、Google APIコンソールを開くことなく、OAuth 2.0クライアントIDを生成することができます。これを行うには、デベロッパーコンソール内のゲームをGoogle APIコンソールで自動的に生成された対応するエントリーとリンクする必要があります。
OAuth 2.0クライアントIDの生成する方法の詳細については、Google APIs Console helpを参照してください。

警告:あなたのクライアントIDを直接手作業で追加してGoogle APIコンソールを開かないでください。ゲームサービスにリクエストを送信するときにエラーを引き起こす可能性があります。

ゲームのためにOAuth 2.0クライアントIDを生成するには、以下の手順に従います:

a. リンク済みアプリケーションを作成する

Google APIコンソールプロジェクトにゲームをリンクするには、リンク済みアプリページを開き、そしてプラットフォームごとの手順に従います。

以下の手順はAndroidのみの翻訳です。

  1. Android アプリのリンクボタンをクリックします。
  2. アプリ名はプレイヤーに表示されることがあります。そのため、実際のAndroidゲームの名前と一致する名前を指定します。
  3. アプリのパッケージ名を追加します。
  4. ゲームサービスのリアルタイムマルチプレイヤーサポートを使用するには、マルチプレイヤー設定を許可します。
  5. 著作権侵害対策をオンにするかどうかを選択します。
  6. 保存して次へをクリックし、それから下のクライアントIDの作成するセクションの手順に従います。
ここまで。

b. クライアントIDの作成する

  1. ステップ2:アプリの承認画面で、今すぐアプリの承認ボタンをクリックすると、OAuth 2.0クライアントIDを生成する処理が始まります。
  1. オプションとして製品ロゴのほかプロジェクト名を入力するプロンプトが表示されます。この情報は、ユーザーがあなたのゲームを許可するよう求められたとき、OAuth 2.0パーミッションダイアログボックスに表示されます。デフォルトでは、ゲームの名前はプロジェクト名のフィールドに置かれます。
  2. Continueをクリックし、それから下のクライアントID設定を指定するセクションの手順に従います。

c. クライアントID設定を指定する

次に、プラットフォームごとの手順に従って、クライアントID設定を指定します。

以下の手順はAndroidのみの翻訳です。

  1. Application typeとしてInstalled applicationを選び、Installed application typeとしてAndroidを選択します(これらは唯一の選択肢でなければなりません)。
  2. Package nameフィールドには、アンドロイドアプリのパッケージ名を入力します。
  3. ターミナルを開き、SHA-1 フィンガープリント証明書を取得するためにKeytool utilityを実行します。
  4. keytool -exportcert -alias androiddebugkey -keystore <path-to-debug-or-production-keystore> -list -v
    注意:Eclipse用のデバッグキーストアは通常 ~/.android/debug.keystore にあります。

  5. keytoolはキーストアのためのパスワード入力するプロンプトを表示します。デバッグキーストアのデフォルトパスワードは android です。keytoolはターミナルにフィンガープリントを出力します。
  6. 例:
    Certificate fingerprint: SHA1: DA:39:A3:EE:5E:6B:4B:0D:32:55:BF:EF:95:60:18:90:AF:D8:07:09
  7. SHA-1フィンガープリントをSigning certificate fingerprintフィールド内に貼り付けます。
  8. Create clientボタンをクリックし、それから下の資格情報を収集するセクションの手順に従います。
Android上のOAuth 2.0についてさらなる情報については、Authenticating to OAuth2 Services
を参照してください。

注意:あなたのアプリを公開する準備ができたら、デベロッパーコンソール内で新しいクライアントIDを作成する必要があります。次に、リリースに証明書に署名すると、再度次の手順を実行しなければなりません。証明書の署名については、Signing your Applicationを参照してください。

警告:パッケージ名およびこの手順で設定した署名証明書を記録していることを確認してください。アプリケーション内の別の証明書またはパッケージ名を使用すると、認証失敗の原因となります。

注意:デベロッパーコンソール内に同じゲームエントリに複数のAndroidアプリを追加することができます。とはいえ、同じゲームの別のバージョン(例えば、無料版と有料版)がある場合に行われるべきです。このケースでは、常に有料版を無料版(またはデモ/体験版の前にフルバージョン)の前にリストアップします。これは将来のリリースで不正な動作を引き起こす可能性があるので、別のゲームを同じプロジェクトにリンクしないでください。代わりに、デベロッパーコンソールで公開するゲーム毎にゲームエントリを分けて作成します。


ここまで。

d. 認証と承認のための資格情報を収集する

あなたが開発しているプラットフォームに応じて、次の資格情報を見つけて記録する必要があるかもしれません。

クライアントID

Create Clientボタンをクリックすると、このアプリのために新しいクライアントIDが表示されるはずです。後でこの情報が必要になるので、クライアントIDをメモしておいてください。あなたはプラットフォームごとに異なるクライアントIDを持つことになります。



注意:Androidでは、アプリケーションIDから自動的に取得されるように、アプリケーション内の全てのクライアントIDを含める必要はありません。

リンク済みアプリページを再訪問し、あなたのプラットフォームのクライアントIDと関連付けられているリンク済みアプリをクリックすることで、いつでもこの情報を見つけることができます。


クライアントIDはページの下部に記載されています。


Client secret(Webベースのゲームのみ)

webベースのアプリケーションを構築する場合、サーバーベースのAPIクライアントを認証するために、Client secretもまた必要とするかもしれません。Webアプリケーションのリンク済みアプリのエントリーをクリックして、client secretを見つけることができます。

アプリケーションID

また、適切にサインインをセットアップするにはアプリケーションIDを知っておく必要があるかもしれません。それは、ページの上部にゲームの表示名の隣に12または13桁の番号を探すことで、見つけることができます。


e. (オプション)マルチクライアントIDを生成する

マルチプラットフォームで動作するゲームを作っている場合、それぞれのプラットフォーム毎(Web, Android, iOS)のクライアントIDを分けて生成する必要があります。これらを行うには、リンク済みアプリページの別のアプリをリンクボタンをクリックし、リンク済みアプリケーションを作成するセクションから始まる手順を繰り返します。

次の手順

さらに進む前に、テスト用アカウントを有効にするで説明しているように、あなたのゲームにテストアカウントを追加するべきでしょう。許可されたテストアカウントを持つユーザーは、Google Playに未公開のゲームにアクセスし、設定したゲームサービスが正しく機能していることをテストすることができます。

一度上記の初期設定タスクを完了したら、リーダーボードや実績など、あなたのゲームにゲームサービスを構成する手順に進むことができます。、詳しくは、Configuring Google Play Game Serviesを参照してください。

2013/04/30

ThinkPad X201sのHDDを インテル335 Series SSD 240GB に換装しました

ThinkPad X201sのHDDをインテル335 Series SSD 240GB(SSDSC2CT240A4K5)を換装しました。
 OSはWindows 7 Professional SP1(64bit)です。

2年半以上使用してきて、OSの起動にだいぶ時間がかかるようになり、またHDDの応答も悪いことがたまに起こります。そして、SSDの価格に手ごろ感があることから、ついにSSDに交換することにしましたので、交換に至るまでに行った作業をまとめました。


1.不要なファイルを削除する
HDDの中身をSSDにクローンコピーする前にHDDの余分なファイルを削除し、ほとんど使う機会がないデータファイルなどは外付けHDDなどにコピーし、削除しておきます。


2.デフラグを行う
SSDでは基本的に不要のようですが、とりあえず移行前のHDDにデフラグを行っておきました。


3.チェックディスクを行う
チェックディスクをやっておくとコピー時の思わぬトラブルを回避できるのでやっておくのが吉です。
  • チェックディスクは、対象のドライブのプロパティを開き、ツールタブ->エラーチェックの「チェックする」ボタンを押します。
  • 不良セクターをスキャンし、回復するにチェックを入れ、「開始」ボタンを押せば実行できます。
  • Cドライブの場合は再起動が必要です。

チェックディスクを行わずにクローンコピーを行ったら、途中で読み込みできないセクターがあると出て「再試行、無視、すべて無視(?)、キャンセル」のコマンドを選べました。「すべて無視」を選択してコピー作業を継続できましたが、念のためチェックディスクを行って再度クローンコピーを行うことにしました。


4.クローンコピー
クローンコピーには、IntelR Data Migration Softwareを利用しました。HDD 250GB ->SSD 240GBと容量は小さくなりますが、元の使用している容量を240GBより小さくしておけば特に問題なくできました。

HDDの交換方法(ラップトップ本体への取り付け)はこちらのサイトを参考にしました(写真があって分かりやすいです)。
カイカイカウカウ: ThinkPad X201のHDDをSSDに換装した。

一つ付け加えると、HDDを取り出すときにHDDトレイの黒いベロの部分を取り出すのに手こずったので、細いドライバーを間に挟んで取り出しました。


■結果
ベンチマークソフトのビフォー/アフターの結果は以下のようになりました。




・左  :HDD(250GB ハード・ディスク・ドライブ, 7200rpm/FDE対応)
・中央:SSD(インテル335 Series SSD 240GB)
・右  :SSD(Intel SSD Toolboxオプティマイズ後)
HDD(左)と比べSSD(中央)は格段に早くなっています。読み込み/書き込みともに2.4倍以上になっており、実際にこれまで起動に3分かかっていたものが、1分~1分30秒で起動するようになり快適になりました。大変満足です。

そして、Intel SSD Toolboxを使ってオプティマイズしてみた結果は右のようになりました。
あまり変わらない、というかむしろ全体的に下がってる印象なので通常のスコアが特に低くなければ使わなくても良いかも(誤差の範囲内と思うことにしています)。


ちなみに、これまでのHDDはウルトラベースのハードディスクドライブ・ベイアダプターに載せて使い、しばらくしたらフォーマットをかける予定です。
レノボ・ジャパン ThinkPadシリアルATA HD・ベイ・アダプターII 43R1980はSATA HDD・ベイアダプターIII 43N3412の画像になって少し不安になりますが、購入した結果はベイアダプターでした)


2012/11/21

DVD Architect Studio 5.0 をアップデートしたらソフトを起動できなくなった

Vegas Movie Studio HD Platinum 10 Production Suite(パッケージ版)から Movie Studio Platinum 12 Suite(ダウンロード版)にアップデートした際、Sound Forge Audio Studio 10.0 や DVD Architect Studio 5.0 もついでにアップデートを行いました。

Sound Forge Audio StudioやDVD Architect Studioは、Buildバージョンが少し上がってる程度です。

■Sound Forge Audio Studioのアップデート
"audiostudio10.0.178.exe"をダウンロードし、実行するとアップデートが行われます。
 新しいシリアル番号を入力することなく使えました。

■DVD Architect Studioのアップデート
  1. "dvdarchitectstudio5.0.161.exe"をダウンロードし、実行するとアップデートが行われます。しかし、実行ファイルが消えて、DVD Architect Studioソフトウェアを起動できなくなりました
  2. 仕方がないので、コントロールパネルからアンインストールを行い、再びインストーラを起動してインストールを行うことで正常にアップデート(実際にはインストール)できました。
  3. 再インストールの形になったので、新しいシリアル番号を入力して使えるようになりました。

Sound Forge Audio StudioやDVD Architect Studioの2つのソフトウェアをアップデートする利点はバグ修正ぐらいだと思いますが、Vegas Movie Studio HD Platinum 10 Production SuiteからMovie Studio Platinum 12 Suiteへのアップデートを行う利点は64bit対応など大きいものがありますのでそちらはオススメです。


2012/11/06

[Google App Engine Java] Bad version number in .class file エラーを解決する

Google Plugin for Eclipse を利用してプロジェクトを作成した際、java.lang.UnsupportedClassVersionError: Bad version number in .class file
が発生したので、その修正方法をさっくりと記します。


■環境
  • Windows 7 Professional 64bit
  • eclipse 3.6.2
  • Google App Engine Java SDK 1.7.3 Bundle for Eclipse
  • Google Plugin for Eclipse 3.6(3.1.1.v201210291355-rel-r36) 

■解決法
  1. 「プロジェクト」を右クリックし、「プロパティ」を選択します。
  2. 「Java コンパイラー」を選択し、「コンパイラー準拠レベル」が1.6であることを確認します。下の方にエラーが出ていたら、その指示に従ってエラーを修正します。
  3. 今回の場合、Java のビルド・パスに jre1.5が設定されていたために起こったエラーだったので、ビルド・パスを「インストール済みのJRE[jre1.6]」に変更しました。

以上の手順でエラーを解消しました。

2012/10/29

Google App Engine では M2Crypto は使えない?

Android のアプリ内課金(In-App Billing)はサーバー認証を行うべきだというのは書かれているのですが、その方法は日本語サイトではあまり見かけません(セキュリティに関することなので、出てこないのかもしれません)。
そこで、Google App Engine(GAE) を使って、サーバー認証しようと思いました。GAEではPythonとJavaとGOが利用できるので、今回はPythonで作ろうと思いました。

PHPで作成するなら以下のサイトが参考になります。
In-app Billingでsignatureの検証をサーバサイドで行う - isherの日記
android in-app Billingのサーバ側チェック - 私事ですが……


さて、本題。

環境:Windows 7 Professional 64bit, Python2.7(64bit), App Engine SDK 1.7.2

Python でのサーバー認証の方法は以下を参考に M2Crypto を使用してみましたが、
Verifying signature on android in-app purchase message in Python on Google App Engine - Stack Overflow


File "C:\dev\gae\appName\M2Crypto\__init__.py", line 22, in
ImportError: No module named __m2crypto


と、M2Crypto のインポートエラーが出ます。調べてみると、

python - importing m2crypto to google app engine - Stack Overflow
  m2crypto contains C code and won't work on GAE(C言語を含むm2cryptoはGAE上では動かない。)
 と書かれていました。

■結論
 __m2crypto.pyd はC言語で書かれた拡張モジュール(=pyd)なので、GAEでは利用できないのだと思います。
(が、参考にしたソースは「この方法でできたよ(Here's how i did it)」って書かれてるので、できるのかな~という気はしますが。。)



■余談
Pythonの基礎については以下のサイトでPDFを無料で公開されていますので、こちらも利用しています。
みんなのPython Webアプリ編 | Lindoc