विंडोज स्टोर पर कांटेदार पथ

कई प्रोग्रामर की तरह, मैं विंडोज 8 के लिए सतर्क (और संबंधित) था, लेकिन विंडोज स्टोर के लिए कुछ प्रोग्राम लिखने की कोशिश करने का विरोध नहीं कर सका। फिर भी, यह एक फैशनेबल प्रवृत्ति है: .Net 4.5, C # 5, XAML।

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


पूरी तरह से अलग सी #


MonoTouch / MonoDroid के लिए कोड C # में लिखा गया है, लेकिन यह सामान्य है, "Canonical" C # के साथ System.Drawing, System.Xml, System.IO, आदि। मुझे उम्मीद है कि विंडोज 8 के तहत सभी को बोनस ब्रिज और वकीलों के साथ समान होगा, लेकिन वास्तविकता इससे बाहर हो गई। क्रूर: सूचीबद्ध नाम स्थान मूल रूप से अनुपस्थित हैं। कोई अधिक पॉइंटफ़, एक्सएमएलनोड को पार नहीं किया, कोई फ़ाइल नहीं। ReadAllText () किया जा सकता है, कोई फ़ाइलस्ट्रीम और इसके साथ संगत कुछ भी नहीं। छवियों के साथ भी, आप केवल एक क्रिया कर सकते हैं - लोड, और फिर भी एसिंक्रोनस रूप से, अर्थात्। यहां तक ​​कि लोड करने के तुरंत बाद पिक्सल में आकार, हम एक टैम्बोरिन के बिना पता लगाने में सक्षम नहीं होंगे।
वास्तव में, सामान्य रूप से, बाहरी दुनिया के साथ सभी I / O संचालन अतुल्यकालिक हो गए, खोजशब्दों के साथ async और प्रतीक्षा, जो कई घंटों के काम के बाद मुझे बेकाबू क्रोध के हमलों का कारण बना। वास्तव में, यह एक अच्छा नवाचार और एक दिलचस्प दृष्टिकोण है, लेकिन अगर एक स्थिर और सत्यापित कोड में 500 बाइट्स की एक पाठ फ़ाइल (खेल, एक स्क्रिप्ट, आदि में स्तरों का क्रम) पढ़ा गया था, तो अब कोड का एक महत्वपूर्ण परिवर्तन निहित है, और कॉल की पूरी श्रृंखला के साथ। async के रूप में चिह्नित किया जाना चाहिए। एक अन्य विकल्प एक आवरण लिखना है जो पुराने सिंटैक्स का अनुकरण करता है, जिसके अंदर असिंक्रोनस विधि का एक गैर-कोषेर तुल्यकालिक आह्वान होता है (भविष्य के समर्थकों के लिए नमस्ते!)।

सामान्य तौर पर, मैं कोड फ्रीजिंग का समर्थक हूं: व्यापार तर्क एक बार लिखा जाता है, डीबग किया जाता है, और फिर बिल्कुल भी नहीं छुआ जाता है, और परिवर्तन केवल उपयोगकर्ता इंटरैक्शन से संबंधित होते हैं। इसलिए, घृणा के एक हमले को दूर करने के बाद, मैं अपनी बाइक के रैपर बनाने के लिए बैठ गया।
आधे दिन में, पॉइंटफ़, रेक्टैंगलएफ, एक्सएमएलडिमेंटमेंट, सिस्टम.आईओ. फ़ाइल, इत्यादि के उनके कार्यान्वयन किए गए, जो कि वाक्यविन्यास में समान हैं। नेट 2.0-4.0, लेकिन पहले से ही अंदर विंडोज स्टोर का उपयोग करें। संसाधनों के साथ काम करने के लिए, मुझे "अतुल्यकालिक तुल्यकालन" के लिए बैसाखी के साथ आना पड़ा:
public static string ReadAllText(string path) { IAsyncOperation<StorageFile> file = StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///" + path)); file.AsTask<StorageFile>().Wait(); IAsyncOperation<string> result = FileIO.ReadTextAsync(file.GetResults()); result.AsTask<string>().Wait(); return result.GetResults(); } 


यह XmlDocument और XmlElement के साथ अधिक जटिल निकला, Windows.Data.Xml.Dom नाम स्थान में ऐसे वर्ग "लाइट" रूप में मौजूद हैं, लेकिन अब वे XmlNode से विरासत में नहीं मिलते हैं, लेकिन कुछ सिंटैक्स परिवर्तनों के साथ IXmlNode इंटरफ़ेस को लागू करते हैं। मेरा रैपर बहुत सुंदर नहीं है, एक्सपीथ और कई अन्य विशेषताओं के साथ काम करना नहीं जानता है, लेकिन उन्होंने सबसे सरल कार्यों के लिए पूरी तरह से काम किया। अगर किसी को रिक्त के रूप में इसकी आवश्यकता है, तो यहां कोड है: paste2.org/p/2664348

ग्राफिक्स


IOS / Android पर, हमारे खेल OpenGL ES 1.1 के माध्यम से स्प्राइट बनाते हैं। कोई शेड्स, कोई ट्रांसफ़ॉर्मेशन, कोई VBO - glDrawTexiOES कॉल के साथ। विंडोज में, निश्चित रूप से, जीएल गंध नहीं करता है, क्योंकि मैंने एक्सएनए और स्प्राइटबैच पर गिना था, लेकिन ... यह वहां नहीं था। विंडोज स्टोर की दुनिया में, अपने शुद्ध रूप में कोई XNA नहीं है, केवल इसके मोनोक्रोम के क्रॉस-प्लेटफॉर्म कार्यान्वयन के कारण है! उत्पाद काफी मनोरंजक है, लेकिन मैं मंच की क्षमताओं के साथ प्राप्त करना चाहता था, और भविष्य में मुझे सिल्वरलाइट पोर्ट विकल्प में दिलचस्पी थी। WPF / XAML समाधान होमब्रेव दिखता है, लेकिन यह लगभग उसी तरह काम करता है जैसे: प्रत्येक स्प्राइट के लिए मैं कैनवस पर सही आकार का आयत बनाता हूं और इसे एक ImageBrush असाइन करता हूं जो वांछित बनावट को संदर्भित करता है, और इसके केवल भाग को परिवर्तनों के माध्यम से निकाला जाता है। तकनीकी रूप से, WPF प्रतिपादन के लिए DirectX का उपयोग करता है, क्योंकि इस पद्धति में जीवन का अधिकार है और यह अच्छा प्रदर्शन देता है।
मुझे केवल एक ही नुकसान हुआ जब बंदरगाह लगभग समाप्त हो गया था: सिद्धांत रूप में, स्प्राइट के रंग को बदलने की कोई विधि नहीं है। उदाहरण के लिए, रंगों के साथ एक पहेली में, हमने glColor4f (1.0f, 0.0f, 0.0f, 1.0f) के माध्यम से लाल और नीले रंग में विभिन्न भागों को चित्रित किया। पसंद के सभी धन के साथ, मुझे कोई विकल्प नहीं मिला (मोनोमेग पर पुनर्लेखन को छोड़कर), इसलिए मुझे तीन अलग-अलग बनावट के साथ काम करना पड़ा। इसी तरह की समस्या हड्डियों के साथ पहेली में हुई थी, लेकिन यहां मैं पारदर्शिता के साथ कर सकता था - निश्चित हड्डियां अब "ग्रे" (दाईं ओर) हैं, न कि "पीली", अन्य प्लेटफार्मों पर (बाईं ओर)।



मोबाइल / टैबलेट से विंडोज स्टोर गेम के बीच ध्यान देने योग्य अंतर यह भी है कि उन्हें विशाल स्क्रीन और रिज़ॉल्यूशन पर प्रदर्शित किया जा सकता है। उदाहरण के लिए, iPhone 3GS के लिए ग्राफिक्स 2560x1440 के रिज़ॉल्यूशन के साथ 27 "मॉनिटर पर बहुत अच्छे नहीं लगते हैं। सौभाग्य से, आईपैड 3 के लिए एक निश्चित मात्रा में हाय-रेस सामग्री तैयार की गई थी, लेकिन साथ ही यह कुछ स्तरों और नियंत्रणों को फिर से तैयार करने का समय था, क्योंकि मैं कलाकार नहीं हूं, क्योंकि। पोर्टिंग की तुलना में मुझे लगभग अधिक समय लगा।

बाजार में लाना


कुल मिलाकर, 6 दिसंबर को सुबह-सुबह कार्यक्रम को प्रमाणन के लिए भेजने की तैयारी थी। प्रतियोगिता की समय सीमा, 10 दिसंबर तक बहुत समय नहीं बचा था, लेकिन मैं सर्वश्रेष्ठ की उम्मीद कर रहा था। विंडोज स्टोर के लिए स्क्रीनशॉट को सिम्युलेटर में png प्रारूप में 1366x768 के रिज़ॉल्यूशन के साथ बनाया जाना चाहिए, जो कि Microsoft की सर्वश्रेष्ठ परंपराओं में असंभवता के लिए फूला हुआ है। आकार एक ही प्रकार के ग्राफिक्स के लिए स्वीकार्य है, लेकिन तस्वीरों या चित्रों के लिए नहीं: दल्ली के काम के साथ ऊपर दिखाए गए स्क्रीनशॉट ने 2.9 मेगाबाइट लिया। यह आधुनिक इंटरनेट के लिए कोई समस्या नहीं है, लेकिन प्रोग्राम सबमिशन फॉर्म 2 एमबी से बड़ी फ़ाइलों को स्वीकार नहीं करता है। यह JPEG नहीं लेगा, क्योंकि मैंने पहले ऑप्टिपंग के माध्यम से स्क्रीन को पास किया था, जिससे यह नेत्रहीन रूप से अपरिवर्तित हो गया, लेकिन यह मेगाबाइट छोटा हो गया।

असफलता


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

परीक्षण


आईट्यून्स स्टोर / सैमसंग स्टोर / अमेज़ॅन ऐपस्टोर में अक्सर परीक्षक कार्यक्रम के मूल गुणों को देखते हैं: क्या कोई स्पष्ट बग, टाइम बम, नग्न सुंदरियां, कीगलर हैं। विंडोज स्टोर में प्रमाणन मेरे अन्य उत्पादों के लिए कोई अपवाद नहीं था और एक, अधिकतम दो दिन लगे। लेकिन इस बार, जैसा कि मैंने इसे समझा, परीक्षकों ने खेल को पूरा करने का फैसला किया, अन्यथा मुझे समझ नहीं आता कि वे 11 (!!) कैलेंडर दिनों में क्या कर सकते थे। या बस पहली पहेली को पारित नहीं कर सका।
समर्थन सेवा ने उत्तर दिया कि केवल 7 कार्य दिवस तकनीकी रूप से पारित हुए हैं और यह इतना डरावना नहीं है, हमें अभी भी धैर्य रखना है। यह स्वीकार करते हुए कि मुझे गलती से रोगी कहा गया था, मैंने प्रतियोगिता के आयोजकों के साथ बात की और पता चला कि आवेदन पत्र भरने की समय सीमा 10 दिसंबर से 28 दिसंबर तक स्थानांतरित कर दी गई थी। यह उत्साहजनक था, हालांकि यह पहले से ही स्पष्ट था कि प्रतियोगिता में शामिल होने की संभावना कम थी।
17-18 दिसंबर की रात को, मुझे एक सूचना मिली कि कार्यक्रम प्रमाणित है और 4 घंटे बाद स्टोर में दिखाई देगा।

हानि


कुछ दिनों बाद, कार्यक्रम स्टोर में दिखाई नहीं दिया। इन दिनों, Microsoft, लगभग पूरी तरह से, एक सप्ताह की छुट्टी पर जाने की योजना बना रहा था (या परिवार में सीओपी से मिलने के लिए), इसलिए मैंने अलार्म की आवाज़ सुनी और जल्दी से समर्थन सेवा से संपर्क किया। एक सुंदर नाम ब्रांडी (या एक खराब नाम वाला लड़का) के साथ एक लड़की ने बताया कि दुर्भाग्यवश, प्रमाणीकरण प्रक्रिया के दौरान मेरे सभी स्क्रीनशॉट अनियमित रूप से खो गए थे! प्रस्तावित अवकाश और साइड इवेंट से एक दिन पहले 20 दिसंबर था। प्रक्रिया में देरी न करने के लिए, मैंने तुरंत तीन विकल्प प्रस्तावित किए: स्क्रीनशॉट को मेल से भेजें, कार्यक्रम का प्रमाणन रद्द करें, उसी गेम के मुफ्त संस्करण से स्क्रीनशॉट लें, जिसे पहले ही विचार के लिए भेजा गया है। निर्णय, जाहिरा तौर पर, सरल नहीं निकला, क्योंकि 23 दिसंबर को उन्होंने मुझे जवाब दिया कि मुझे संभवतः मेल द्वारा स्क्रीनशॉट भेजने की आवश्यकता है ...
यह कहा जाता है - किया, मैंने स्क्रीनशॉट का एक सेट संलग्न किया, रूसी और अंग्रेजी में विवरण लिखा, भेजा और 15 मिनट के भीतर मुझे जवाब मिला:

2012 के अंत में, मेयन कैलेंडर के अंत के बाद, उस युग में जब हिग्स बोसोन पाया गया था, और एक जिज्ञासु रोबोट वास्तविक समय में मंगल ग्रह से चित्र भेजता है, फोन 41 मेगापिक्सेल लेते हैं, और कंपनियां पेटाबाइट डेटा स्टोरेज खरीदती हैं, एमएस में मेल संदेशों की सीमा 14 हो गई। मेगाबाइट ...
मैंने एक नया पत्र लिखा, कुछ स्क्रीनशॉट निकाले और ... एक अन्य रोबोट से प्रतिक्रिया मिली:

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

प्रतियोगिता


इस बीच, प्रतियोगिता को "8 सर्वश्रेष्ठ नववर्ष कार्यक्रमों" से सम्मानित किया गया । उन्होंने "सलाद" और साइकेडेलिक गेम लाइटहाउस जीता, जो नए साल की थीम और सामान्य ज्ञान से कुछ दूर है।
अब मेरा उत्पाद भी प्रतिभागियों की सूची में है, क्योंकि मैं एक ही कार्यक्रम के नि: शुल्क संस्करण के प्रमाणन के लिए आवेदन करने में कामयाब रहा और एक दिन में प्रमाणीकरण पारित किया गया। यह एक भुगतान किए गए बैनर से भिन्न होता है, जो भुगतान की गई खरीदारी की ओर ले जाता है, जिसका अर्थ कहीं नहीं है :)
दुर्भाग्य से, मुख्य पुरस्कार - विंडोज 8 के साथ एक टैबलेट - प्रचार और 4k बैनर के साथ तुलना नहीं की जा सकती है जो दिखाता है कि सलाद प्राप्त होगा, इसलिए भागीदारी का अर्थ कुछ हद तक खो गया है। फाइनल दूसरे दिन होगा, और साथ ही वे नामांकन में विजेता को "एक प्रतिभागी द्वारा प्रकाशित आवेदनों की सबसे बड़ी संख्या" प्रदान करेंगे। कुछ ने इस नामांकन को कार्रवाई के लिए एक कॉल के रूप में माना और दो नंबर जोड़ने या घटाने वाले प्रोग्राम बनाने लगे। मैं ऐसी कुछ कृतियों का विज्ञापन कर रहा हूँ:

मैं उन कार्यक्रमों के लेखक और एमएस कर्मचारियों को दोष नहीं दूंगा, जिन्होंने इसे बाजार में याद किया है, लेकिन मुझे उम्मीद है कि प्रतियोगिता आयोजकों के लिए जीत की घोषणा करना और 12345 और सलाद की तुलना में कट द रोप जैसी किसी चीज को बढ़ावा देना अधिक सुखद होगा।

यह कहानी का अंत है, हालांकि वास्तव में अभी फाइनल आना बाकी है: दुनिया का अंत नहीं आया है, लेकिन कार्यक्रम अभी तक स्टोर तक नहीं पहुंचा है, प्रतियोगिता अभी तक पूरी नहीं हुई है, और विंडोज स्टोर में तकनीकी समस्याओं का समाधान नहीं हुआ है।

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


All Articles