हाथी लव मैंगो, भाग 1/2: विंडोज फोन 7 के लिए एवरनोट का बैकस्टेज लुक

WP7 के लिए एवरनोट क्लाइंट के निर्माता डेमियन मेयर्स द्वारा पोस्ट किया गया

छवि

परिचय


एक साल पहले, मैंने एक बड़ी रिटेल कंपनी के आईटी विभाग में काम किया, जिसमें 11 लोगों की एक टीम थी। सामान्य तौर पर, मेरी किशोरावस्था से ही मैं सॉफ्टवेयर विकास में लगा हुआ था, लेकिन मैं हमेशा खुद को एक प्रबंधकीय स्थिति में आजमाना चाहता था। मैंने अपने दो पहले स्टार्टअप बेच दिए, इससे पहले कि वे बढ़ती कंपनियों में बदल गए, इसलिए प्रबंधन के अनुभव की कमी काम करने के लिए मेरी कमजोर जगह बनी रही।
तब विपरीत परिस्थिति पैदा हुई। मुझे नेतृत्व का काम पसंद आया, यह मेरे लिए काफी सक्षम था, लेकिन मुझे प्रोग्रामिंग की आवश्यकता भी महसूस हुई, ताकि मुझे अपने कौशल को खोना न पड़े।

नतीजतन, अपने खाली समय में मैंने विंडोज मोबाइल 6.5 के लिए एक एवरनोट क्लाइंट लिखा। इसने कई विशेषताएं लागू कीं जो आधिकारिक एप्लिकेशन में उपलब्ध नहीं थीं, जैसे कि ऑफ़लाइन नोट। और जैसे ही मैंने इस पर काम करना शुरू किया, माइक्रोसॉफ्ट ने मोबाइल बाजार में अपनी रणनीति को फिर से लोड करने और विंडोज फोन 7 (डब्ल्यूपी 7) को जारी करने की घोषणा की।

उस समय, मैं पहले से ही यह समझने लगा था कि प्रबंधन मेरे लिए नहीं था और एक नए स्टार्टअप के बारे में सोचना शुरू किया जब एवरनोट के सीईओ फिल लिबिन ने मुझे फोन किया और पूछा कि क्या मैं एवरनोट में शामिल होना चाहूंगा और WP7 के लिए एक सेवा क्लाइंट बनाना चाहूंगा। यह बहुत समय पर था - बेशक, मैं सहमत था। और हाल ही में, हमने इस प्लेटफ़ॉर्म के लिए क्लाइंट का पहला संस्करण पेश किया।

यह एक कहानी है कि क्या लागू किया गया था और क्या नहीं था, क्या WP7 को एक उत्कृष्ट विकास मंच बनाता है, और वहाँ क्या कठिनाइयाँ हैं। मैं उन संभावनाओं पर भी विचार करने की कोशिश करूंगा जो WP7 के अगले संस्करण की रिलीज के साथ खुलेंगे, जिसका नाम मैंगो होगा।


निर्णय विकास मंच



पुरानी जड़ें

WP7 के आधार के रूप में .NET और सिल्वरलाइट का चयन करके, Microsoft ने .NET के लिए मौजूदा डेवलपर्स के एक बड़े समुदाय के लिए तुरंत मंच को आकर्षक बना दिया।

इस तथ्य के बावजूद कि मुझे सिल्वरलाइट के साथ काम करने का बहुत कम अनुभव था, मैं कई सालों से C # में विकसित हो रहा था, और अब नए अधिग्रहण किए गए कौशल को लागू करने का अवसर था। यदि आपके पास पहले से ही भाषा एकीकृत क्वेरी ( LINQ ), लैम्ब्डा और कचरा संग्रह जैसी तकनीकों का उपयोग करके विकास का अनुभव था, तो बाद में उन्हें छोड़ना आपके लिए मुश्किल होगा।

सिल्वरलाइट कई वर्षों से मौजूद है, और यद्यपि तकनीक इंटरनेट पर लोकप्रिय नहीं हुई है, यह कॉर्पोरेट वातावरण के लिए इंट्रानेट विकास में काफी मांग है।
सिल्वरलाइट और मॉडल व्यू व्यूमॉडल ( एमवीवीएम ) विकास पैटर्न का एक साथ उपयोग किया जाता है। आप घोषणा करते हैं कि आपके उपयोगकर्ता इंटरफ़ेस को एक्सएएमएल नामक एक्सएमएल भाषा के रूप में संसाधित किया जाएगा, जो घोषित रूप से आपके ViewModel कोड से जुड़ा होता है। इसका मतलब है कि आप उपयोगकर्ता इंटरफ़ेस का उपयोग किए बिना, अपने ViewModel कोड का अलग-अलग परीक्षण कर सकते हैं। सिल्वरलाइट को एक काल्पनिक रूप से सुविधाजनक एनीमेशन और दृश्य नियंत्रण प्रणाली भी प्राप्त हुई।

सुपीरियर टूलकिट


WP7 डेवलपर्स लाड़ प्यार कर रहे हैं। न केवल इसलिए कि हमारे पास विज़ुअल स्टूडियो में एक शक्तिशाली परिपक्व और कार्यात्मक आईडीई है, जैसे कि रिचार्पर जैसे उत्कृष्ट प्लगइन्स, बल्कि इसलिए भी कि हमारे पास एक तेज़ एमुलेटर है, साथ ही एक्सप्रेशन ब्लेंड में एक पूर्ण-विकसित अलग डिज़ाइन उपयोगिता भी है।

एमुलेटर वास्तव में आपके कंप्यूटर पर हार्डवेयर वर्चुअलाइजेशन क्षमताओं का उपयोग करते हुए एक पूर्ण वर्चुअल मशीन की तरह काम करता है। प्लस यह है कि यह उच्च प्रदर्शन प्रदान करता है, लेकिन एक ही समय में, आप वर्चुअल मशीन के अंदर विकसित नहीं कर पाएंगे, क्योंकि एमुलेटर बस इसमें शुरू नहीं होगा।

ब्लेंड आपको एप्लिकेशन के उपयोगकर्ता इंटरफ़ेस को डिज़ाइन करने, एनिमेशन विकसित करने और अनुकूलित करने की अनुमति देता है। हालाँकि यह मूल रूप से डिजाइनरों के लिए एक भुगतान-योग्य हाई-एंड टूल के रूप में विकसित किया गया था, लेकिन इससे डेवलपर्स के हिस्से पर भावनाओं का तूफान आ गया, इसलिए Microsoft ने WP7 डेवलपर्स के लिए इसे मुफ्त कर दिया। यह काम करना आसान और सुविधाजनक है, क्योंकि ब्लेंड आपको कोड के बारे में चिंता किए बिना अपने इंटरफेस की उपस्थिति और बातचीत पर ध्यान केंद्रित करने और स्टोरीबोर्ड और एनीमेशन में संलग्न होने की अनुमति देता है।

समुदाय


समुदाय
WP7 के लिए विकास के आसपास एक मजबूत समुदाय की उपस्थिति को कुछ अनूठा नहीं कहा जा सकता है, हालांकि, शायद, मंच के युवाओं के कारण समुदाय में उच्च गतिविधि महसूस होती है।

सामान्य स्थानों के अलावा, जैसे स्टैक ओवरफ्लो और माइक्रोसॉफ्ट का अपना फोरम , विंडोज फोन गीक जैसी साइटें हैं जो गुणवत्ता युक्तियों और ट्रिक्स का एक निरंतर प्रवाह प्रदान करती हैं, साथ ही इस विषय पर लेख भी प्रस्तुत करती हैं।

घटकों
चूंकि प्लेटफ़ॉर्म अभी भी नया है, इसलिए लोग विभिन्न स्थानों पर नए फ्रेमवर्क पोस्ट कर रहे हैं, लेकिन आप देख सकते हैं कि लोग WP77ontrib के आसपास इकट्ठा होना शुरू कर रहे हैं।

WP7 के लिए एवरनोट क्लाइंट में, मैंने उपयोग किया:
  1. Microsoft WP7 टूलकिट
  2. एमवीवीएम लाइट टूलकिट लॉरेंट बनियन द्वारा
  3. फोनीटॉल्स से सीक्वन वाइल्डमाउथ का फेडिंगमेसेज घटक
  4. मामूली संशोधनों के साथ कॉलिन एबरहार्ड द्वारा द्रव सूची एनीमेशन


कुछ कठिनाइयाँ


डेटाबेस का अभाव

सभी ने शायद पहले से ही Google पर साक्षात्कारों के बारे में सुना है जब वे आपको विभिन्न हैशिंग और सॉर्टिंग एल्गोरिदम के कार्यान्वयन के बारे में विस्तार से बताने के लिए कहते हैं जो आप अभ्यास में कभी भी उपयोग नहीं करेंगे।

एक ऐसी दुनिया में आपका स्वागत है जहाँ यह ज्ञान काम आ सकता है। WP7 की पहली रिलीज में डेवलपर्स के लिए कोई डेटाबेस तकनीक उपलब्ध नहीं है। वह सब एक अलग भंडारण और फ़ाइलों को खोजने की क्षमता है।

नोटबुक को ऑफ़लाइन संग्रहीत करने का कार्य, क्लाइंट में हजारों नोटों को खोजने की क्षमता के साथ मिलकर, डेटाबेस की कमी को एक संवेदनशील बाधा बनाता है। एक नोट एक ही नोटबुक में है और इसमें शून्य या अधिक टैग जुड़े हो सकते हैं। आप नोटबुक्स या टैग्स द्वारा नोट्स देख सकते हैं, और हेडिंग, डेट और जियोलोकेशन सहित विभिन्न मापदंडों द्वारा नोट्स की सूची को सॉर्ट किया जा सकता है। सामान्य तौर पर, एक डेटाबेस बहुत मददगार होगा।

कई लोग इस खाई के शिकार हो गए हैं और जटिलता और पूर्णता के विभिन्न स्तरों की डेटाबेस तकनीकों का प्रस्ताव किया है। मैंने 2010 के अंत में कई सप्ताह बिताए और 2011 की शुरुआत उन्हें आजमाती रही, और मुझे एक भी ऐसा नहीं मिला, जो मेरी सभी आवश्यकताओं को पूरा करे। अंत में, मैंने फैसला किया कि मेरे लिए अपनी बाइक बनाना आसान था, और मैंने अपना सरल तंत्र बनाया।

प्लेटफ़ॉर्म की त्रुटियां

यह आमतौर पर यह सोचने के लिए उचित है कि आपने प्लेटफॉर्म में बग ढूंढ लिया है - यह बहुत अधिक संभावना है कि समस्या आपके स्वयं के कोड में है। हालांकि, एक नए प्लेटफॉर्म की पहली रिलीज में, जैसे कि विंडोज फोन 7, कभी-कभी गलती वास्तव में उसके साथ होती है।

उदाहरण के लिए, आप ब्राउज़र घटक को फ़ोकस प्राप्त करने के बाद फ़ोकस को अपने पेज पर किसी भी नियंत्रण पर सेट नहीं कर सकते। या जब आप धुरी में तीसरी सूची आइटम के चयन को पुनर्स्थापित करने का प्रयास करते हैं तो आप कैसे दुर्घटनाग्रस्त होते हैं? या आपके लॉग में अप्रत्याशित त्रुटि संदेश? इन सभी चीजों का मुझे सामना करना पड़ा जो कि WP7 की समस्याएं थीं, प्लेटफ़ॉर्म के युवाओं द्वारा काफी व्याख्यात्मक हैं। बस कमोबेश तैयार रहें कि न केवल आपका कोड समस्या का कारण बन सकता है।

कुछ कार्य ऐसे भी होते हैं जिनकी आपको उम्मीद होती है, लेकिन वे केवल मौजूद नहीं होते हैं - उदाहरण के लिए, हालाँकि आप किसी साइट से डेटा स्ट्रीम डाउनलोड कर सकते हैं, आपके पास साइट पर स्ट्रीम को निर्देशित करने की विलोम क्षमता नहीं है। इसका मतलब है कि यदि आप साइट पर डेटा भेजना चाहते हैं, तो भेजने की प्रक्रिया की सभी जानकारी स्मृति में होनी चाहिए। यह एक समस्या है जब आप बहुत बड़ी फ़ाइलों को अपलोड करते हैं।

और अंत में, प्लेटफ़ॉर्म को अप्रत्याशित परिस्थितियों में यूआई स्ट्रीम में विभिन्न कार्यों के लॉन्च की आवश्यकता होती है, जैसे कि आइसोलेटेडस्टोरेज या एक नेटवर्क कनेक्शन तक पहुंच (भले ही यह यूआई स्ट्रीम की भागीदारी के बिना शुरू की गई हो और निश्चित रूप से, वेबरिएंट क्लास का उपयोग नहीं करता है), जो प्रदर्शन को प्रभावित कर सकता है। ।

चिकनी स्क्रॉलिंग

तेज़, उत्तरदायी इंटरफ़ेस प्रदान करने के लिए प्लेटफ़ॉर्म के जोर को देखते हुए, यह अप्रिय रूप से आश्चर्यचकित कर देने वाला था कि सूची में कई तत्व होने के साथ-साथ चित्र और संभावित डायनामिक लोडिंग सहित, वास्तव में चिकनी स्क्रॉल को लागू करना कितना मुश्किल है। अरे हाँ, मैंने उल्लेख किया है कि सूची में ऐसी हजारों वस्तुएं हो सकती हैं?

मैं अंतर्निहित ListBox का उपयोग करता था। यह वर्चुअलाइज़िंगस्टैकपैनल के माध्यम से उपयोगकर्ता इंटरफ़ेस वर्चुअलाइज़ेशन प्रदान करता है, जिसका अर्थ है कि इंटरफ़ेस ऑब्जेक्ट्स केवल दृश्य तत्वों के लिए प्रारंभ किया जाएगा। यह डेटा वर्चुअलाइजेशन की भी अनुमति देता है: यदि सूची जिसमें लिस्टबॉक्स संलग्न इलिस्ट है, तो यह केवल उन तत्वों की एक सूची का अनुरोध करता है जो वर्तमान में आवश्यक हैं, अर्थात आप आवश्यकतानुसार डेटा स्रोत से तत्वों को गतिशील रूप से लोड कर सकते हैं।

इन फायदों के बावजूद, मैं WP7 टूलकिट से लॉन्गिस्टस्टील्टर में भी लाया। इसमें कुछ दिलचस्प विशेषताएं हैं, जैसे समूह और एंकर, जो आपको बताते हैं कि डेटा सूची का उपयोग कब किया जाता है और कब नहीं होता है। यह उपयोगकर्ता इंटरफ़ेस वर्चुअलाइजेशन प्रदान करता है, लेकिन इसमें डेटा वर्चुअलाइजेशन का अभाव है - पहली चीज जो यह करती है वह सूची में प्रत्येक तत्व से गुजरती है जिसके लिए वह बाध्य है ...

चिकनी स्क्रॉलिंग बनाने के लिए कई लेख और तकनीकें हैं। यह पृष्ठभूमि थ्रेड्स से डेटा लोड कर रहा है, और स्क्रॉल करते समय डाउनलोड रोक रहा है। लेकिन आपके पास कई तत्व होने पर भी सब कुछ ठीक करना काफी कठिन है, और ये सभी स्मृति में नहीं हैं।

WP7 के लिए क्लाइंट के अगले संस्करण में, मैंने लिस्टबॉक्स का उपयोग करने के लिए लौटने का फैसला किया क्योंकि IList तत्वों के साथ काम करने के लिए एक विशेष दृष्टिकोण के फायदे, जहां सूची तत्वों से केवल अनुरोध किया जाता है यदि उनके बिना ऐसा करना वास्तव में मुश्किल है।

विस्तार

Source: https://habr.com/ru/post/In123630/


All Articles