Elephants Love Mango、Part 2/2:Backstage Look in Evernote for Windows Phone 7

WP7のEvernoteクライアントの作成者、Damian Meyersによる投稿



画像



前のパートでは、Windows Phone 7用のEvernoteクライアントを作成する背景について説明し、開発者の観点からプラットフォームの概要を説明し、作成者が対処しなければならない問題について説明しました。 以下に、WP7用のEvernoteの開発に関する彼の話を続けます。



解決可能な課題



パネル要素の遅延読み込み

Evernote for WP7の最初のパノラマインターフェイスには、いくつかのパネルがあります。 作業を開始したときに最初に表示されるパネルには、すべてのメモのリストが含まれています。 以下は、ノートブック、タグ、および最近のメモのリストです。



アプリケーションを開いたときに読み込みを最適化するために、すべてのノートのリストを除くすべてのパネル要素の読み込みを遅らせます。 他のパネルにはXAMLコンテンツはありませんが、ロードされたイベントに適切なパネル要素が必要な場合、アニメーションをロードして目的のパネルのインターフェイス要素を含むコントロールを動的にロードします。これにより、インターフェイスの抑制感が回避されます。





テキストを操作するときにバンドルを実行する

メモのリストでは、日付を太字で表示し、次にテキストの断片を別の色で表示したかった-すべて単一のテキストブロックで。



リッチテキストを作成するには、子の実行を使用してTextBlockを定義する必要があります。 各Runは、対応するRun内のテキストのフォーマットを定義します。



XAMLのすべての作業は、リンクの構築を通じて行われます。 宣言型マークアップ言語を使用してユーザーインターフェイスを定義し、インターフェイス要素のプロパティを.NETオブジェクトのプロパティに関連付けます。 たとえば、TextBlock要素のTextプロパティは、Note .NETオブジェクトのタイトルに関連付けられています。



問題の要点は、簡単に言えば、TextBlockのRun要素のデータをバインドできないことです。そのため、最初のRunのテキストをノートのdateプロパティに、2番目のテキストをそのフラグメントのプロパティにバインドできません。



その結果、私はバインディングメカニズムを作成しました。これは、判明したとおり、 Stack Overflowで非常に人気がありましたが、これはもちろん、開発にそれほど時間をかけたいものではありません。



オーディオヘッダー

WP7でのマイク経由の録音はかなりまともですが、録音されたデータストリームで何かをしたい場合、たとえばファイルとして保存したい場合は運が悪いです。 単純な保存では、生データストリームファイルのみが提供されます。



任意のアプリケーションでこのデータを再現するには、適切なヘッダーが必要です。 どうやら、これがWAVにタイトルを追加する方法を説明する私のブログへの投稿が最も人気のあるものの1つである理由です。



分離ストレージパフォーマンス

すべてのメモ、ノートブック、タグなどのメタデータ(見出し、日付など)を単一の「データベース」ファイルに保存しますが、実際にはコンテンツは別のファイルに保存されます。 これらには、メモの本文と、添付ファイル、画像、音声記録などの関連する「リソース」データが含まれます。



また、ノートの内容をキャッシュし、ローカル表示用にHTMLに変換します。 したがって、3つのイメージが添付されているメモの場合、分離ストレージに6つのファイルが必要になります。



多くのファイルが同じフォルダーにある場合、分離ストレージからファイルを開く速度は大幅に低下します。 そのため、すべてのメモのファイルをファイル名としてメモ識別子を使用して単一のフォルダに保存する代わりに、その名前がメモ識別子の2桁のハッシュによって決定されるサブフォルダにコンテンツを配置します。



私が遭遇した別の問題は、ユーザーがアカウントからログアウトするとき、タスクは分離されたストレージ内の数千の異なるファイルを削除することであるということでした。 特にプロセスには数時間かかるため、これが発生するまでユーザーを待たせたくありません。 実際には、APIには「フォルダーの削除」の呼び出しがなく、再帰的な削除に頼らなければならないということです。フォルダーツリーを調べて、各ファイルを個別に削除する必要があります。



私の解決策は、すべてのデータを一意の識別子(Guid)でルートフォルダーに保存し、設定ディクショナリでこのフォルダーにアクセスすることでした。 ログアウトすると、このリンクはクリアされ、再認証すると、新しい識別子(および対応するフォルダー)が取得されます。 現在のユーザーIDと一致しないすべてのファイルを削除するバックグラウンドスレッドがあります。 彼はバックグラウンドで静かに自分自身を試すことができ、以前の承認の痕跡をすべて排除します。



マンゴーを待っています



ウィキペディアは、マンゴーが世界で最も広く消費されている果物であると主張しています。WindowsPhoneの次のリリース(コード名Mango)がプラットフォームの無条件の成功を保証するかどうかはわかりませんが、明らかにそれはユーザーだけでなく開発者にとっても重要なイベントになるでしょう。



上記の問題の大部分(すべてではないにしても)を解決することに加えて、この更新プログラムは、開発者の生活を単純化するだけでなく、今日よりもはるかに高いレベルで機能と使いやすさを確保するのに役立つ多くの機能をもたらします。



私が楽しみにしていることのいくつかを以下に示します。



データベース

このイノベーションはユーザーにはほとんど見えませんが、私にとっては、ネイティブにサポートされているデータベースの出現が重要です。 大量のコードを数行で置き換えます。コードを減らし、潜在的なバグを減らします。



Silverlight 4

現在のバージョンのWindows Phoneで回避しなければならなかった多くの問題は、たとえばRuns要素からTextBlockにデータをバインドできないなど、Silverlight 4で対処できます。 したがって、開発者は多くの不便を取り除きますが、実際には基本的に解決する必要があります。



インライン検索

Windows PhoneのEvernoteアプリケーションのユーザーにとって理解できない瞬間の1つは、Evernoteクライアントの実行中に電話自体の検索ボタンをクリックすると、Evernoteの検索ではなくBingに切り替えるという事実です。 2番目にアクセスするには、アプリケーションインターフェイスの特別なボタンをクリックする必要があります。



Mangoでは、アプリケーションが1つまたは別の垂直検索(製品、映画、場所、またはイベント)の演算子であることを示すことができる場合、状況が変わることがあります。 メモにはジオタグを付けることができるため、Evernoteの最も明らかな選択肢は場所です。 週末を過ごす場所に関する情報を探しているときに、証明された場所の1つが思い浮かぶと、検索を使用して、最後に作成されたメモのリストを見つけることができます。



深い統合

Evernoteを使用して今すぐ新しいノートを作成するには、まずアプリケーションを起動してから、[新しいノート]ボタンをクリックする必要があります。 このプロセスは、深い統合を使用してワンクリックに短縮できます。 特定の機能(たとえば、写真のメモを作成)または特定のコンテンツ(個別のノートブックまたはメモ)に関連付けられたタイル(メイン画面のタイルウィジェット)を作成できます。



タイル

おそらく非同期のコンテンツをヘルプで表示したり、未解決の問題の数をTo Doリストに表示したりするために、Mangoでタイルの新しい機能を使用する可能性を検討します。



バックグラウンド同期

Windows Phoneの現在のバージョンでは、アプリケーションをバックグラウンドで実行することは許可されていません。Mangoはこの方向に一定の措置を講じていますが、Microsoftはアプリケーションをバックグラウンドで実行し続ける期間については控えめに黙っています。 ただし、電話とWi-Fiがある場合、強力な接続を使用してバックグラウンドでEvernoteアカウントを同期することを妨げる本当の理由はありません。



おわりに



Windows Phone 7は多くの点で優れたプログラミングプラットフォームであり、.NETフレームワークとC#の使用をSilverlightと組み合わせています。 それでも、データベースなどのOSに固有の基本的な機能を使用せずに、相互接続された数千のエンティティを含むデータ指向アプリケーションを作成するのは十分に複雑に思えました。



Windows Phone Mangoの次のバージョンの可能性を楽しみにしています。開発者やデザイナーとして、私たちのアイデアやアイデアを実践するプロセスを簡素化して、私たちにとってより多くの機会を開くでしょう。



All Articles