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

WP7のEvernoteクラむアントの䜜成者、Damian Meyersによる投皿



画像



はじめに



1幎前、私は倧芏暡な小売䌁業のIT郚門で働き、11人のチヌムを管理しおいたした。 䞀般的に、私は10代の頃から゜フトりェア開発に埓事しおいたしたが、私は垞に管理職になりたいず思っおいたした。 成長䌁業になる前に、2぀の最初のスタヌトアップを売华したので、管理経隓の䞍足が䜜業の匱点のたたでした。

その埌、逆の状況が発生したした。 私はリヌダヌシップの仕事が奜きで、それは私にずっお非垞に有胜でしたが、スキルを倱わないようにプログラミングの必芁性も感じたした。



その結果、暇なずきにWindows Mobile 6.5甚のEvernoteクラむアントを䜜成したした。 オフラむンメモなど、公匏アプリケヌションでは利甚できなかった倚くの機胜を実装したした。 そしお、䜜業を終えるずすぐに、マむクロ゜フトはモバむル垂堎での戊略のリロヌドずWindows Phone 7WP7のリリヌスを発衚したした。



その時、私はすでに経営陣が私のためではないこずを理解し始めおいたので、EvernoteのCEOであるPhil Libinから電話があり、Evernoteに参加しおWP7のサヌビスクラむアントを䜜成したいかどうか尋ねられたずき、新しいスタヌトアップに぀いお考え始めたした。 それは非垞に時間通りでした-もちろん、私は同意したした。 そしお最近、このプラットフォヌム甚のクラむアントの最初のバヌゞョンを導入したした。



これは、䜕が実装され、䜕が実装されなかったのか、WP7を優れた開発プラットフォヌムにしおいるのか、どのような困難があるのか​​に぀いおの物語です。 たた、コヌドネヌムMangoのWP7の次のバヌゞョンのリリヌスで開かれる可胜性に぀いおも怜蚎したす。





たずもな開発プラットフォヌム





叀いルヌツ


.NETずSilverlightをWP7の基盀ずしお遞択するこずで、Microsoftは.NETの既存の開発者の倧芏暡なコミュニティにずっおプラットフォヌムをすぐに魅力的なものにしたした。



Silverlightの䜿甚経隓がほずんどなかったにもかかわらず、私は長幎Cで開発を続けおいたしたが、今では新しく獲埗したスキルを適甚する機䌚がありたした。 Language Integrated Query LINQ 、 ラムダ、ガベヌゞコレクションなどの技術を䜿甚した開発経隓がある堎合、それらを埌で攟棄するこずは困難です。



Silverlightは数幎前から存圚しおおり、この技術はむンタヌネット䞊で普及しおいたせんが、䌁業環境向けのむントラネット開発では非垞に需芁がありたす。

SilverlightずModel View ViewModel MVVM 開発パタヌンが䞀緒に䜿甚されたす。 ナヌザヌむンタヌフェむスがXAMLず呌ばれるXML蚀語ずしお凊理されるこずを宣蚀したす。XAMLは、ViewModelコヌドに宣蚀的にバむンドされたす。 これは、ナヌザヌむンタヌフェむスを䜿甚せずに、ViewModelコヌドを個別にテストできるこずを意味したす。 たた、Silverlightは非垞に䟿利なアニメヌションおよび芖芚制埡システムを受け取りたした。



優れたツヌルキット



WP7開発者は甘やかされおいたす。 Visual StudioにResharperなどの優れたプラグむンを備えた匷力で成熟した機胜的なIDEがあるだけでなく、Expression Blendの高速な゚ミュレヌタヌず独立した蚭蚈ナヌティリティもあるためです。



゚ミュレヌタヌは、コンピュヌタヌのハヌドりェア仮想化機胜を䜿甚しお、本栌的な仮想マシンのように動䜜したす。 プラスは、高いパフォヌマンスを提䟛したすが、同時に、゚ミュレヌタは単に起動しないため、仮想マシン内で開発するこずはできたせん。



Blendを䜿甚するず、アニメヌションを蚭蚈、開発し、アプリケヌションのナヌザヌむンタヌフェむスをカスタマむズできたす。 元々はデザむナヌ向けの有料のハむ゚ンドツヌルずしお開発されたものの、開発者偎からの感情の嵐を匕き起こしたため、MicrosoftはWP7開発者向けに無料で提䟛したした。 Blendを䜿甚するず、むンタヌフェむスの倖芳ず盞互䜜甚に集䞭し、コヌドを気にせずにストヌリヌボヌドずアニメヌションに取り組むこずができるため、操䜜が簡単で䟿利です。



コミュニティ



コミュニティ

WP7の開発に関する匷力なコミュニティの存圚はナニヌクなものずは蚀えたせんが、おそらくプラットフォヌムの若さのために、コミュニティで高い掻動が感じられたす。



Stack OverflowやMicrosoft 独自のフォヌラムなどの通垞の堎所に加えお、 Windows Phone Geekなどのサむトでは、品質に関するヒントやコツ、テヌマに関する蚘事が絶えず流入しおいたす。



コンポヌネント

プラットフォヌムはただ新しいため、人々はさたざたな堎所に新しいフレヌムワヌクを投皿しおいたすが、 WP7Contribの呚りに人々が集たり始めおいるこずがわかりたす。



WP7のEvernoteクラむアントでは、次を䜿甚したした。

  1. Microsoft WP7 ツヌルキット
  2. Laurent BunionによるMVVM Light Toolkit
  3. PhoneyToolsのSequen WildermouthのFadingMessageコンポヌネント
  4. Colin Eberhardtによる流䜓リストアニメヌション 。




いく぀かの困難



デヌタベヌスの䞍足


Googleでのむンタビュヌに぀いおは、実際には決しお䜿甚しないさたざたなハッシュアルゎリズムず゜ヌトアルゎリズムの実装に぀いお詳しくお尋ねになるず、誰もが既に聞いたこずがあるでしょう。



この知識が圹立぀䞖界ぞようこそ。 WP7の最初のリリヌスでは、開発者が利甚できるデヌタベヌステクノロゞヌはありたせん。 それは、隔離されたストレヌゞずファむルを怜玢する機胜です。



ノヌトブックをオフラむンで保存する機胜は、クラむアントで数千のノヌトを怜玢する機胜ず盞たっお、デヌタベヌスの欠劂を敏感な障害にしたす。 メモは同じノヌトブック内にあり、それに関連付けられた0個以䞊のタグがある堎合がありたす。 ノヌトはノヌトブックたたはタグで衚瀺でき、ノヌトのリストは、芋出し、日付、䜍眮情報などのさたざたなパラメヌタヌで゜ヌトできたす。 䞀般的に、デヌタベヌスは非垞に圹立ちたす。



数人がこのギャップに倢䞭になり、さたざたなレベルの耇雑さず完党性のデヌタベヌス技術を提案しおいたす。 2010幎の終わりず2011幎の初めに数週間かけおそれらを詊したしたが、私の芁件をすべお満たすものは芋぀かりたせんでした。 最終的に、私は自分の自転車を䜜る方が簡単だず刀断し、独自のシンプルなメカニズムを䜜成したした。



プラットフォヌム゚ラヌ


通垞、プラットフォヌムでバグを発芋したず考えるのはかなり予想倖です。問題が自分のコヌドにある可胜性がはるかに高くなりたす。 ただし、Windows Phone 7などの新しいプラットフォヌムの最初のリリヌスでは、問題が本圓に圌女にあるこずがありたす。



たずえば、ブラりザコンポヌネントをフォヌカスが受け取った埌は、ペヌゞ䞊のコントロヌルにフォヌカスを蚭定できたせん。 たたは、ピボット内の3番目のリストアむテムの遞択を埩元しようずするず、どのようにクラッシュしたすか たたは、ログに予期しない゚ラヌメッセヌゞがありたすか 私が遭遇したこれらすべおのこずはWP7の問題であるこずが刀明し、プラットフォヌムの若者によっお非垞に説明できたした。 あなたのコヌドだけが問題を匕き起こしおいるのではないこずを、倚かれ少なかれ準備しおください。



あなたがそこに芋぀けるず期埅したいく぀かの機胜もありたすが、それらは単に存圚したせん-䟋えば、あなたはサむトからデヌタストリヌムをダりンロヌドできたすが、あなたはサむトにストリヌムを向ける逆の胜力を持っおいたせん。 これは、サむトにデヌタを送信する堎合、送信プロセスのすべおの情報がメモリにある必芁があるこずを意味したす。 非垞に倧きなファむルをアップロヌドする堎合、これは問題です。



そしお最埌に、プラットフォヌム自䜓は、IsolatedStorageたたはネットワヌク接続ぞのアクセスなどUIストリヌムの参加なしで開始され、もちろんWebClientクラスを䜿甚しない堎合でも、予期しない状況でUIストリヌム内のさたざたな機胜の起動を必芁ずしたす。 。



スムヌズなスクロヌル


プラットフォヌムが高速でレスポンシブなむンタヌフェヌスを提䟛するこずに重点を眮いおいるこずを考えるず、画像や可胜なダむナミックロヌディングなど、リストに倚くの芁玠がある堎合、本圓にスムヌズなスクロヌルを実装するのがどれほど難しいかは䞍思議でした。 そうそう、リストには䜕千ものそのようなアむテムがあるかもしれないず蚀った



組み蟌みのListBoxを䜿甚したした。 VirtualizingStackPanelを介しおナヌザヌむンタヌフェむスの仮想化を提䟛したす。぀たり、むンタヌフェむスオブゞェクトは、衚瀺される芁玠に察しおのみ初期化されたす。 たた、デヌタの仮想化も可胜です。ListBoxが関連付けられおいるリストにIListが実装されおいる堎合、珟圚必芁な芁玠のリストを照䌚するだけです。぀たり、必芁に応じおデヌタ゜ヌスから芁玠を動的にロヌドできたす。



これらの利点にもかかわらず、私はWP7ツヌルキットからLongListSelectorも導入したした。 グルヌプ化やアンカヌなど、デヌタリストがい぀䜿甚され、い぀䜿甚されなくなったかを瀺す興味深い機胜がありたす。 ナヌザヌむンタヌフェむスの仮想化を提䟛したすが、デヌタの仮想化が欠けおいたす-最初に行うこずは、リスト内の各芁玠をバむンドするこずです...



スムヌズなスクロヌルを䜜成するための倚くの蚘事ずテクニックがありたす。 これは、バックグラりンドスレッドからデヌタをロヌドし、スクロヌル䞭にダりンロヌドを䞀時停止しおいたす。 しかし、倚くの芁玠がある堎合、すべおを正しく行うこずは䟝然ずしお非垞に難しく、すべおの芁玠がメモリ内にあるわけではありたせん。



WP7のクラむアントの次のバヌゞョンでは、IList芁玠を操䜜する特別なアプロヌチの利点があるため、ListBoxの䜿甚に戻るこずにしたした。



継続



All Articles