WP7 私的 Dev ノート

2014/02/14

DietMemo 1.4 Released

Filed under: リリース情報 — ichiohta @ 7:54 am

Release Note

  • Fixed authentication issue to connect to OneDrive.

DietMemo 1.4 Released

Filed under: リリース情報 — ichiohta @ 7:51 am

リリース情報

  • OneDriveに接続できない不具合を修正。

2012/05/01

async で LiveConnect SDK を使ってみる

Filed under: メモ — ichiohta @ 4:12 am

LiveConnect SDK に含まれる Microsoft.Live.LiveConnectionClient は Event-based Asynchnronous Programming (EAP) のモデルを採用しています。たとえばLiveConnectionClient.GetAsync(string path) を呼び出すと path に対するデータの取得が非同期に行われ、それが完了した時点で GetCompleted イベントが発生します。正直なところ SkyDrive に EAP でアクセスするのは大変かったるいのです。こういう時こそ async です。Task-based Asynchronous Pattern にあるように TaskCompletionSource を使って、以下のような wrapper クラスを作ってみました。

using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Live;

namespace AsyncLiveClient
{
    public class LiveClient
    {
        public LiveConnectSession Session
        {
            private set;
            get;
        }

        public LiveClient(LiveConnectSession session)
        {
            this.Session = session;
        }

        public async Task GetAsync(string path)
        {
            var client = new LiveConnectClient(Session);
            var tcs = new TaskCompletionSource();

            client.GetCompleted += (o, args) => { tcs.TrySetResult(args); };
            client.GetAsync(path);

            return await tcs.Task;
        }

        public async Task UploadAsync(
            string path, string fileName, bool overwrite, Stream stream, object state)
        {
            LiveConnectClient client = new LiveConnectClient(Session);
            var tcs = new TaskCompletionSource();

            client.UploadCompleted += (o, args) => { tcs.TrySetResult(args); };
            client.UploadAsync(path, fileName, overwrite, stream, state);

            return await tcs.Task;
        }

        public async Task DownloadAsync(string path)
        {
            LiveConnectClient client = new LiveConnectClient(Session);
            var tcs = new TaskCompletionSource();

            client.DownloadCompleted += (o, args) => { tcs.TrySetResult(args); };
            client.DownloadAsync(path);

            return await tcs.Task;
        }
    }
}

以下のスクリーンショットは DietMemo で SkyDrive に保存しているバックアップを確認&表示しているページです。

image

‘Latest backup available’ で表示されている日付を更新している処理は、上記の LiveClient を使って以下のように書いています。

public async void CheckSavedData()
{
    IsChecking = true;

    try
    {
        var client = new LiveClient(Session);
        var status = await client.GetAsync("me/skydrive");

        if (status.Error != null)
        {
            // ちょっと省略
            return;
        }

        status = await client.GetAsync(string.Format("{0}/files", status.Result["id"]));

        if (status.Error != null)
        {
            // ちょっと省略
            return;
        }

        var files = (status.Result["data"] as List)
           .Select<object, Dictionary>(o => { return o as Dictionary; });

        var file = files.FirstOrDefault(
            f =>
            {
                return f["name"].ToString().Equals(
                    BackupFileName,
                    StringComparison.InvariantCultureIgnoreCase
                );
            }
        );

        if (file != null)
        {
            // DateTimeLastUpdated の値がビューにバインドされています
            DateTimeLastUpdated = DateTime.Parse(file["updated_time"] as string);
            // 後でダウンロードできるようにファイルの id も記録しています
            BackupFileId = file["id"] as string;
        }
    }
    finally
    {
        IsChecking = false;
    }
}

2012/02/02

DietMemo 1.1 Released

Filed under: リリース情報 — ichiohta @ 7:41 am

DietMemo helps you keep your diet on track!

EASY and SIMPLE

Not like many other feature-rich diet applications, this application focuses on just ONE thing: keeping records of your weight.

JUST to KEEP YOUR RECORDS

You can record your weight every day and you can see the trend with a nice encouraging line chart.

SAVE YOUR RECORDS to SkyDrive™

You can take a backup of your records and save it to SkyDrive. No worry to lose your phone and records.

Download DietMemo

EnUrlDietMemo

2012/01/29

エミュレータで実行されているか確認する

Filed under: メモ — ichiohta @ 12:54 am

アプリケーションの中で、エミュレータで実行されているのかどうかを確認したい時があります。たとえばエミュレータで実行されている時だけ表示される項目を作りたい、とかですね。

そういう場合は Microsoft.Devices.Environment クラスの DeviceType プロパティでチェックできます。以下は、ビューモデルのプロパティとして定義した例です。

public bool IsRunningInEmulator
{
    get
    {
        return Microsoft.Devices.Environment.DeviceType == Microsoft.Devices.DeviceType.Emulator;
    }
}

このままコントロールの IsEnabled プロパティにバインドしてもいいのですが、そうするとコントロール自体は表示されてしまう(グレーアウトして無効状態になる)ので、bool → Visibility のコンバータを書いて、Visibility プロパティにバインドするのがよいかと思います。

2012/01/27

DietMemo 1.1 Released

Filed under: リリース情報 — ichiohta @ 8:08 am

リリース情報

DietMemo は、毎日の体重を手軽に記録することだけに特化したダイエット支援アプリです。

  • 毎日の体重を記録するだけ。
  • 2 ~ 8 週間の傾向を折れ線グラフで確認できます。
  • 保存した記録は SkyDrive にバックアップ可能。

お詫び

DietMemo 1.0 を奇跡的にダウンロードされた方、一点注意事項があります。DietMemo 1.0 で SkyDrive に保存したデータは 1.1 で読み込めません。データをバックアップするという観点から、1.1 にアップデート後、上書き保存を実行するようにしてください。

裏話的なもの

Infragistics NetAdvantage for Windows Phone を使って何かアプリが書けないか、とアイデアを練っていたところ、折りよくダイエットしないといけない事が判明したため、サクサクと書いてみたという……

NetAdvantage は使い込めば、もうちょっと綺麗なグラフを表示できると思うんですが、このあたりは今後の課題ということで、バージョンアップの際にフォローしていきたいですね。

Download-EN-Med

JaUrlDietMemo

2012/01/02

Custom Behavior を書く

Filed under: メモ — ichiohta @ 2:15 am

いつも忘れるので自分用にメモ。

  1. 参照アセンブリに Microsoft.Expression.Interactions を追加
    %prgramfiles(x86)%\Microsoft SDKs\Expression\Blend\Windows Phone\v7.1\Libraries
  2. System.Windows.Interactivity.Behavior<T> を継承してクラスを作成

2011/11/19

Page.Language を設定する Behavior

Filed under: メモ — ichiohta @ 7:08 am

PhoneApplicationPage の Language 属性を現在のロケール設定に自動的にあわせる Tips を @ChiiAyano さんが紹介されていました。

日本語フォントが中華フォントにならないために

これを参考に、Page.Language を設定するカスタム Behavior を書いてみました。

using System.Globalization;
using System.Windows.Interactivity;
using System.Windows.Markup;
using Microsoft.Phone.Controls;

namespace Akka.Views.Action
{
    public class DefaultCultureBehavior : Behavior
    {
        protected override void OnAttached()
        {
            AssociatedObject.Language = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.Name);
        }
    }
}

なんの捻りもないわけですが(汗)、XAML で以下のようにかけるようになります。


    

ま、参考程度ということで……

追記 – xmlns の i: と va: はそれぞれ以下のような感じで

xmlns:i='clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity'
xmlns:va='clr-namespace:Akka.Views.Action'

追記 II  – CurrentCulture より CurrentUICulture の方がよい(@mecab さん

追記 III – 個人的には高橋さんのブログで紹介されていた @tmyt さんの静的リソースとして定義する方法が一番しっくりする気がしますね。

2011/07/08

Monalith 1.1 リリース

Filed under: Uncategorized — ichiohta @ 6:30 am

1.0 のリリースから約一ヵ月半ぶりの更新となる 1.1 をリリースしました。

実際に作ってみていろいろ分かることがある、というか、大半は作ってみて初めてわかることばかりです。そういうわけで 1.0 をリリースしたものの

いちから設計&コーディングし直したくなり

この一ヵ月半ばかり、ちまちまと最初から書き直していたのでした。

そんなわけで、あまり多くは無い変更及び追加点を簡単に紹介しておきますと。。。

  • ロードしたログほかのキャッシングの挙動が安定(したはず)
  • About ページを追加してみた(っていうか無かったの?)
  • レス一覧ページに PageUp / Page Down っぽいボタン追加
  • お気に入り掲示板のカテゴリを追加(たぶんこれが一番実用的な機能追加)
  • 最近見た掲示板のカテゴリも追加

スレッド一覧ページ、「ねる」にちょっと影響されて Long List を使おうかな、とも思ったんですが、自分的 Monalith 利用のユーザシナリオがどうも思い浮かばなかったので、保留することにしました。

要望を直接いただいたので、次は書き込みに挑戦したいと思います。

Download-EN-Med

2011/07/03

Isolated Storage Explorer Tool を使う

Filed under: メモ — ichiohta @ 6:38 am

Windows Phone SDK 7.1 Beta2 には分離ストレージの内容を確認するためのコマンドラインツール ISETool.exe が同梱されています。このツールを用いると、実機およびエミュレータの分離ストレージに対して、以下の操作を行うことができます。

  • 指定したディレクトリのファイル/サブディレクトリ一覧を確認する
  • 分離ストレージのスナップショットを PC に取得
  • 取得したスナップショットを分離ストレージにリストア

準備
使用にあたっては ISETool.exe が存在する以下のディレクトリを環境変数 PATH に追加しておくと便利です(もちろん毎回フルパスで指定しても OK ですが)。

  • %ProgramFiles%\Microsoft SDKs\Windows Phone\v7.1\tools\IsolatedStorageExplorerTool (32bit 環境の場合)
  • %ProgramFiles(x86)%\Microsoft SDKs\Windows Phone\v7.1\tools\IsolatedStorageExplorerTool (64bit 環境の場合)

次に、分離ストレージの内容を確認したいアプリのプロダクトId をチェックしておきます。WMAppManifest.xml の App タグの属性 ProductId をメモるなりクリップボードにコピーするなりしておいてください。

image

注意: ProductId 前後の { と } はプロダクト Id に含まれません。

ディレクトリの一覧
エミュレータ上アプリの分離ストレージの内容を確認するには以下のように ISETool を起動します。

isetool dir:パス xd プロダクトId

スナップショットの取得と復元
エミュレータ上アプリの分離ストレージのスナップショットを取得するには以下のように ISETool を起動します。

isetool ts xd プロダクトID スナップショットを保存するパス

取得したスナップショットを分離ストレージに書き戻す場合は ts を rs に変えるだけです。

実機に対しての操作
実機の分離ストレージに対する操作も基本的には同じです。コマンドライン中の xd を de に変えるだけです。

Older Posts »

WordPress.com で無料サイトやブログを作成.