WindowsAzure 日本DCオープン

WindowsAzureの日本DCがオープンして昨日はイベントが行われるなど、盛り上がりを見せております。
また、これを記念してか専用CMが公開されていまして、Microsoft Virtual Academyでムービーが公開されています。

祝 Azure 日本データセンター by クラウド ガール

此方で、見ることができますが、声にクラウディア (CV: 喜多村英梨) & 安曇瑠璃 (CV: 伊藤かな恵)という豪華仕様w
そしてこれを受講して完了すると
・ 特別コンテンツ 1: クラウディア (CV: 喜多村英梨) & 安曇瑠璃 (CV: 伊藤かな恵) 掛け合いトーク
・ 特別コンテンツ 2: CM 壁紙 ダウンロード
が受け取れます。

これで興味を持っていただけてWindowsAzureがもっと使われるようになるとうれしいなー

WindowsPhone8 OneDrive Upload & Download sample

MSDNのサンプルに「WindowsPhone8 OneDrive Upload & Download sample」として投稿しました

LiveClientIDを入れてファイルを用意すればそのまま動くはずです。
OneDriveにファイルをあげておいて、ダウンロードをすればアップロードのテストもできます。

ご指摘ありましたらよろしくお願いします。

WindowsPhone8でSQLiteを使用するためのメモ3

WindowsPhone8でSQLiteを使用するためのメモ2以後知った新しいことですが、非同期で操作するのが推奨ではあるんですが、これには弱点がありました。

現在WindowsPhone8ではファイルのローミング保存機能が提供されていないため、セーブデータのバックアップとレストアは手動でOneDriveなどへの保存を行ってもらうようにアプリを作成する必要があります。

非同期の際「SQLiteAsyncConnection」でConnectionを行いますが、以降の操作で「SQLiteConnectionPool.Shared.GetConnection」が呼ばれる関数を使用した場合、DBファイルがSQLite3のConnectionにロックされて、Read以外の操作がSQLite3関数以外では不能になります。

そのため、バックアップファイルをリストアしようとすると、排他処理によりアクセスを拒否され、リストアすることができません。
「Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))」が発生します。

これを避けるには非同期の「SQLiteAsyncConnection」ではなく「SQLiteConnection」、つまり同期型の関数ですべての処理を行う必要があります。

アプリによる端末の処理占有量が増えますが、現状この方法で回避するしかないようです。
今後ローミング保存が可能になれば、解消されるかもしれませんが、もしかするとこちらではわからないところでエラーが起きる可能性もあるので、DBファイルの操作でバックアップ/レストア機能を搭載する場合は同期で作成するのが無難なようです。

もちろん、WindowsAzureサービスを使用して、ネットワーク上に保存を行うようにしている場合は必要ないでしょうが、ネットワークがつながらない際の処理を実装する必要がありますので、アプリによっては手間がかかることになります。

今後SQLite3のConnectionをきちんと解除できる関数が実装されれば、いいなと思います。
なお、下手にClearを読んでコネクションを切断するとエラーが起きます。

WindowsPhone8/WindowsストアアプリでのOneDriveへのアップロードとダウンロードをLiveSDKで

LiveSDKは自記事記載時点ではVer5.5となっています。
ダウンロードはLive Connect デベロッパー センターLive SDK downloadsからダウンロードページへ

現在SDKは非同期API化(async/await)されているため、以前のバージョンを元にした説明では動作しないAPIがあります。

ただ、非同期API化されたことで扱いそのものは楽になっているものの、サンプルなどが中途半端でRESTで扱う以外では嵌る箇所が見受けられるというか、嵌りました。

構築メモがてら記事にしようと思います。
WindowsPhone8としていますが、Windowsストアアプリでも基本的に同じように行えるはずです。

アプリでSDKを使用する場合MyApp(マイアプリ)にアプリ登録をして「クライアントID」を取得する必要があります。

myapp

サインインの際に表示される使用許諾ページ(MS標準)に表示されるアプリ名などを指定します。
myapp2

WindowsPhone等のモバイルデバイスを使用する場合は「モバイルクライアントアプリ」を「はい」に指定する必要があります。
myapp3

ここで表示される「クライアントID」をアプリに組み込むことで使用できるようになります。
myapp4

また、各国語対応のための設定もあるので、アプリが多言語の場合は登録しておくことで各国語向けに表示されるようになるはずです。

LiveSDKインストール後、ソリューションの参照設定で「Microsoft.Live」「Microsoft.Live.Controls」を参照します。
コード内では「using Microsoft.Live;」を宣言します。

「サインインボタン」コントロールをXAMLに貼り付けます。
onedriveappimage

<Controls:SignInButton Content="SignInButton" VerticalAlignment="Top" ClientId="取得したクライアントID" Scopes="wl.basic wl.skydrive wl.offline_access wl.signin wl.skydrive_update" SessionChanged="buttonSignin_SessionChanged" Margin="10" />

「Scopes」は「スコープとアクセス許可」で確認可能です。
OneDrive向けなので「wl.basic」「wl.skydrive」「wl.offline_access」「wl.signin」「wl.skydrive_update」を指定しています。

「SessionChanged」にイベント駆動でセッションの状態が返ってきます。
そのため、初期状態でもセッションがないという情報が起動時に発生します。

        private async void buttonSignin_SessionChanged(object sender, Microsoft.Live.Controls.LiveConnectSessionChangedEventArgs e)
        {
            if (e.Session != null && e.Status == LiveConnectSessionStatus.Connected)
            {
                (Application.Current as App).LiveSession = e.Session;

セッションがConnectedになった際にセッションを確保しておく

アップロードのコード

LiveConnectClient client = new LiveConnectClient((Application.Current as App).LiveSession);
var upResult = await client.UploadAsync("/me/skydrive/", "hogehoge", streamData, OverwriteOption.Overwrite);

OneDriveのルートにファイルを作成する。
「OverwriteOption」は上書き指定。

ダウンロードのサンプルコード

            LiveConnectClient client = new LiveConnectClient((Application.Current as App).LiveSession);
            // ファイルの確認
            LiveOperationResult operationResult = await client.GetAsync("me/skydrive/files");

            // [data]から必要な項目を取得する
            dynamic dyResult = ((dynamic)operationResult.Result).data;

            foreach (var item in dyResult)
            {
                // ファイルの有無を確認してOneDrive上のIDを取得してパスとする
                if (((dynamic)item).name == "hogehoge")
                {
                    // idのパラメーターに「/content/」を付けないとDLされない模様
                    path = ((dynamic)item).id + "/content/";
                    _isize = int.Parse(((dynamic)item).size.ToString());
                    break;
                }
            }

            // ファイルの有無を確認
            if (path != null)
            {
                // ファイルがあったのでダウンロードしてストリームへ
                var dlResult = await client.DownloadAsync(path);
                var downloadStream = dlResult.Stream;

                if(downloadStream != null)
                {
                // ストリームをファイルとして保存する
                // 略

// LiveOperationResultで取得した際に「Microsoft.Live.DynamicDictionary」で取得できるデータ
[0] “id” string // OneDrive判別用ID これを元にダウンロードなどを行う
[1] “from” string
[2] “name” string // フォルダ/ファイルの名前
[3] “description” string
[4] “parent_id” string // 親フォルダID
[5] “size” string // ファイルサイズ
[6] “upload_location” string // Upload先
[7] “comments_count” string // コメントの文字数
[8] “comments_enabled” string // コメントの有無
[9] “is_embeddable” string // 組み込めるかどうか
[10] “source” string // DLリンクURL
[11] “link” string // OneDrive上での位置
[12] “type” string // オブジェクトの種類
[13] “shared_with” string
[14] “created_time” string // ファイル作成日時
[15] “updated_time” string // ファイル更新日時
[16] “client_updated_time” string // client上での更新日時

※もう少しいろいろ探る予定です。

Windowsストアアプリの画面デザインに関して

画面デザインはいきなりコントロールを配置していって後で調整という方法もありますが、できれば何をそのアプリで目指すのか、どういったページ構成にするのかを大まかにでも決めて、画面の配置構成などをデザインしておいたほうがいいと思います。

ありがたいことに、MSの「Windows ストア アプリのデザインのダウンロード – Windows デベロッパー センター」というページに「Adobe 用のテンプレート」「PowerPoint 用のテンプレート」「Balsamiq 用のワイヤーフレーム」「ユーザー エクスペリエンス ガイドライン」が置かれています。

また、マイクロソフト エバンジェリストのブログで「Windows 8.1 ユーザー エクスペリエンス ガイドライン(ダウンロード)」が公開されています。

「Adobe 用のテンプレート」「PowerPoint 用のテンプレート」「Balsamiq 用のワイヤーフレーム」で画面の見た目を作成して、バランスやどう操作をしてもらうかを検討できます。

「ユーザー エクスペリエンス ガイドライン」「Windows 8.1 ユーザー エクスペリエンス ガイドライン」にはストアアプリで守ったほうがよいUI/UXの作法がかかれています。
非常にページが多い大作ですが、目を通しておくべきでしょう。
ただ勘違いしてほしくないのは、これが絶対ではないという事。
アプリの中で必然であり必要ならば多少外れていても、それは問題ないものです。
もちろん外れすぎるとユーザー体験を阻害するものですので、まずは基本的なガイドに沿ったうえでアプリとして必要なUI/UXにしましょう。

間違いでした

ごめんなさい、自分のポカでした。
別な所でやらかしているところがあり、その関連で発生していました。
間違った記載をし申し訳ありません

MessageBox.Show(~)でメッセージボックスを出すのはよくやりますが、これを出す際に表記してる関数が「async」だった場合、ボタンクリック後もう一度出てくるようです。
関数内で非同期操作が必要なものがある場合は、別関数に逃がしてそちらを「async」にするなどでMessageBoxがかかれた関数は非同期であるのが必要なようです。
※自分の環境のせいかもしれませんのでおかしかったらご指摘いただければ幸いです。

勉強のとっかかりにMicrosoft Virtual Academyがいいかも

Microsoft Virtual Academy 専門家が提供する無償のマイクロソフト トレーニングというMicrosoft提供の「無償オンライントレーニングサイト」を勉強のとっかかりにどうでしょう?

MCP試験対策やWindowsストアアプリ、Windows Azure等の各種開発情報のトレーニングを無償で受けることができるそうです。

どこから手を付ければや、おさらいをしたい等いろいろなときに見直すのがいいと思いますので、確認してみてはどうでしょうか?

サイドローディングプロダクトキーの購入最低数が緩和

Windowsストアアプリをサイドローディングインストールする場合
・開発者ライセンス
・Windows8/8.1 Enterprise版を使用する(WindowsServer2012/R2も可)
・Windows8/8.1 Pro/Windows RTはサイドローディングプロダクトキーを購入して適用する(無印にはサイドローディング不可)
上記のようになっていました。

サイドローディングの適用に関しては企業向けストアアプリをストアに掲載させずに独自に配布したい場合に必要になっています。

「開発者ライセンス」はデバッグやテスト用としてして割り切るくらいの手段で、残った二通りの方法が一般的なサイドローディングの方法でしたが、「Windows8/8.1 Enterprise版」はボリュームライセンスで大規模導入していないと使いにくいのとすでにあるEnterprise版でないPCは入れ替え/再インストールというハードルがあります。

そこで「サイドローディングプロダクトキー」を購入して適用するという方法が用意されていましたが、購入がOpenLicenseで「100Packから(1Pack 6000円)」となっていました。
これが「2013/12/13」から「10Packから」と要件が緩和され、中小向けや部門用に導入しやすくなりました。

ライセンス購入可能数が変わったということは下記リンク先の「ボリューム ライセンスプログラム共通製品表 (2014 年 2 月版)」でご確認ください。
「Windows 8.1 Enterprise Sideloading (10 Pack)」が追加されているのが確認できます。
マイクロソフト製品使用権、製品一覧およびライセンス トピックス – マイクロソフト ボリューム ライセンス

詳しくはライセンスを取り扱っている各ライセンシーやMicrosoftにご確認ください。

Microsoft Japan MVP OpenDay 終了

二日間にわたって行われたMicrosoft Japan MVP OpenDayが終了しました。
初めてMVPを受賞したため今回が初参加でしたが、非常に濃い二日間でした。

スタッフの皆様、MVPの皆様、ありがとうございます、そしてお疲れ様でした。
どう濃かったのか知りたいという方はMVP受賞して来年のに参加しましょう!

Microsoft Japan MVP OpenDay 1日目

Microsoft Japan MVP OpenDay 1日目に参加しました、
明日は二日目のOpenDayに参加します。

初受賞のため午前中のオリエンテーションから参加して、MS社内のいくつかの場所の見学ツアーを体験して、午後からいくつかのキーノートを拝聴しました。
まだ体験されいない方は是非MVPをとって参加してみてください、
MS MVPは「MVP HP」から自薦、又はMVPやMS関係者からの推薦で審査登録できます。
一定の実績は必要(MS審査なので不明)になりますが、気負わずになんとなくでもいいので、いろいろ発信されている方は審査に応募してみてはいかがでしょうか?
応募自体は年に4回行われており、落ちても再応募可能ですし、MVP受賞者などに話を振って見てはいかがでしょうか?