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受賞者などに話を振って見てはいかがでしょうか?

Open Hack Day Japan2プレカンファレンスに参加してきました

Yahoo Japan主催のOpen Hack Day Japan 2のプレカンファレンス(事前説明会)に参加してきました。

自分は諸所あって本選には参加できないので何かネタを見つけられないかと勉強を兼ねて参加してきました。

1:気象庁
  「降水ナウ」や「気象防災データ」を元に提供いただけるそうです。
  データはAITCが協力をしてOpen Hack Day Japan 2のために用意されているそうです。
2:NHK
  NHK番組APIが利用可能だそうです。
  このAPIはちょうど提供が一般公開されたばかりだそうです。
3:Mozilla Japan
  FirefoxOS向けにHTML5開発を募集とのこと
  開発の際にはZTEの端末かVIAのFirefoxPCを提供いただける模様
4:VIA APC FirefoxOS
5:東芝
  「360°IPカメラモジュール」、4つのカメラユニットが付いたモジュール
  顔認識機能などが付いている、会議に使用するなどを想定してるが、新しい何かをとのこと。
6:IDCフロンティア
  開発環境用にクラウドサーバをHack Day用にご用意いただけるそうです。
  かなり豪華な構成も可能な30日版を用意&Hack Dayの賞として叙々苑10万円お食事券プレゼントという会場が一番沸いた提供でした。
7:Afrel
  「LEGOマインドストームEV3」につながるものをとのこと。
  EV3自体は貸し出していただけるそうですが、申し込みは1/31締切だそうです。
8:EPSON
  CESで発表された「New Moverio BT-200」をターゲットとしたものをとのことです。
  今までと違った大画面&真のARを!
  詳しくは火曜日(1/28)発表だそうです。
9:docomo
  docomoが提供しているAPIを利用したものをぜひとの事
  「Deverloper Application Contest」もやっているので応募してねだそうです。
  Hack Dayに合わせて応募期間を延長したので、こちらにもどうぞだそうです。
10:Twilio(KDDIウェブコミュニケーションズ)
  自動電話応答&SMSシステムだそうです。
  このシステムで提供されている「Twilio API」を利用したものだそうです。
11:東京電力
  リアルタイムではなく過去のCSV風のデータ(HPでも提供中)の物を活かしてほしいとのこと。
  また、「でんき予報」「でんき家計簿」も提供される模様。
12:東京ミッドタウン
  ミッドタウンで行っている「ユビキタス・アートツアー」をもっと良いものに
  データは後日Hack Dayのページで提供だそうです。
13:楽天
  現在提供している「楽天API」を利用したもの
14:リクルート
  リクルートが提供しているAPIを利用したもの
  MA9/MA10のアピールも、MA10は賞金額上がるかも?とのこと
  Hack Dayの成果物で応募するのもOKだそうです。
15:ワコール
  ワコールがこれまで研究用に溜めていたデータの平均データなどを提供。
  女性を美しくするための何かをとのこと
16:マイクロソフト
  Windowsとつながる様々なデバイスを利用したものを
  BT接続、UDM multicast、WindowsAzureMobile、SignalR等を利用したWEB連携
  FEZ Cerbuino Netを開発される方に提供とのこと、、、会場ではけたかなさすがに?
17:AmazonJapan
  AWSに関してだったようですが、諸事情でMSのところで帰宅しました。

いい刺激と勉強になったので、今後生かせるといいなと思います。
個人的にはEPSONさんの「BT-200」に惹かれるものはありました。

Open Hack Day Japan 2 Conference (2014) まとめ #openhackday」に当日の様子がまとまっているようです。

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

WindowsPhone8でSQLiteを使用するためのメモの続き的なメモ

最後にインサートしたテーブルを知りたい場合は

var table = await db.QueryAsync<T>("select * from T where ROWID = last_insert_rowid();");

で取得できます。

テーブルから指定したデータを取得する際

await db.Table<T>().Where(x => x.Id == id);

のように取得しますが、複数の条件の場合には

await db.Table<T>().Where(x => x.Id == id).Where(x => x.A == a);

と「Where」を重ねる形で取得できます(所謂チェインで行う」)。

※気が付いたメモをここに追記していきます。

対人戦用囲碁アプリ

対人戦用囲碁アプリ
対人で囲碁を打ったり、一人で思索で打つための囲碁アプリで、CPU対戦機能は搭載していません。

対応言語:日本語, German, Spanish, Russian, Romanian

IGO APP

WindowsStoreBanner

*IGo PvP app
It is not equipped with the CPU play function.
*IGo PvP приложение
Она не оснащена функцией игры процессора.
*IGo PvP aplicacion
No esta equipado con la funcion de reproduccion de la CPU.
*IGO PvP app
Acesta nu este echipat cu func?ia de redare CPU.