हैकाथॉन DevDays'19 (भाग 1): सिफारिशों के साथ एक डायरी, चलने वाले मार्गों और तरल लोकतंत्र का एक जनरेटर

हाल ही में, हमने JetBrains कॉर्पोरेट मास्टर कार्यक्रम और ITMO विश्वविद्यालय के "सॉफ्टवेयर इंजीनियरिंग / सॉफ्टवेयर इंजीनियरिंग" के बारे में बात की। हम सोमवार, 29 अप्रैल को ओपन डे पर रुचि रखने वाले सभी को आमंत्रित करते हैं। हम अपने स्नातक विद्यालय के लाभों के बारे में बात करेंगे, हम छात्रों को किस बोनस की पेशकश करते हैं और बदले में हम क्या मांग करते हैं। इसके अलावा, हम अपने मेहमानों के सवालों का जवाब जरूर देंगे।

टाइम्स बिजनेस सेंटर में JetBrains कार्यालय में एक खुला दिन आयोजित किया जाएगा, जहां हमारे स्नातक छात्र अध्ययन करते हैं। शुरुआत 17:00 बजे। आप सभी विवरण पा सकते हैं और mse.itmo.ru पर घटना के लिए पंजीकरण कर सकते हैं। आओ और इसे पछताओ मत!

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

इस पोस्ट में हम देवदास हैकथॉन के बारे में अधिक बात करना चाहते हैं, जो हर छह महीने में होते हैं। नियम सरल हैं: 3-4 लोगों की टीम इकट्ठा होती है और तीन दिनों के भीतर, छात्र अपने विचारों को जीवन में लाते हैं। इससे क्या आ सकता है? इस सेमेस्टर की हैकाथॉन परियोजनाओं के बारे में कहानियों का पहला भाग छात्रों से स्वयं पढ़ें :)

मूवी की सिफारिशें डायरी




विचार के लेखक
इवान इल्चुक
टीम रचना
इवान इल्चुक - मूवी प्लॉट पार्सिंग, सर्वर
व्लादिस्लाव कोरब्लिनोव - डायरी की निकटता और फिल्म के कथानक की तुलना करने के लिए मॉडल का विकास
दिमित्री वलचुक - यूआई
निकिता विनोक्रोव - यूआई, डिज़ाइन

हमारी परियोजना का उद्देश्य एक डेस्कटॉप एप्लिकेशन लिखना था - एक डायरी जो इसमें प्रविष्टियों के अनुसार उपयोगकर्ता को फिल्मों की सिफारिश करेगी।

यह विचार मेरे दिमाग में तब आया जब मैं विश्वविद्यालय गया और अपनी समस्याओं के बारे में सोचा। "मुझे जो भी समस्या आती है, कुछ क्लासिक पहले ही इस बारे में लिख चुके हैं," मैंने सोचा। "और जब से किसी ने लिखा है, इसका मतलब है कि किसी ने पहले ही फिल्माया है।" तो उसी मानसिक पीड़ा से ग्रसित व्यक्ति के बारे में फिल्म देखने की इच्छा स्वयं प्रकट हुई।

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

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

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

चरण दर चरण, हमने परिणाम की ओर रुख किया, कई समस्याओं को पार करते हुए, इस तथ्य से शुरू किया कि शुरू में मॉडल को बहुत अधिक रैम की आवश्यकता थी, सर्वर पर डेटा स्थानांतरित करने की कठिनाई के साथ समाप्त।

अब, शाम के लिए एक फिल्म खोजने के लिए, आपको बहुत प्रयास करने की आवश्यकता नहीं है: हमारे तीन-दिवसीय कार्य का परिणाम एक डेस्कटॉप एप्लिकेशन और एक सर्वर था जिसे उपयोगकर्ता https के माध्यम से एक्सेस करता है, एक संक्षिप्त विवरण और पोस्टर के साथ 5 फिल्मों का चयन प्राप्त करता है।

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

प्रासंगिक लिंक, इंस्टॉलर और बहुत कुछ यहां पाया जा सकता है

रूट जनरेटर


विचार के लेखक
आर्टेमयेव इरीना
टीम रचना
आर्टेमयेव इरीना - टीम लीड, मुख्य लूप
गोर्डीवा ल्यूडमिला - संगीत
प्लैटनोव व्लादिस्लाव - मार्गों

मुझे वास्तव में शहर में घूमना पसंद है: इमारतों को देखें, लोग, इतिहास के बारे में सोचें। लेकिन, यहां तक ​​कि अपने निवास स्थान को बदलते हुए, जल्दी या बाद में मुझे एक मार्ग चुनने की समस्या का सामना करना पड़ रहा है: वह सब कुछ जो मैं ऊपर आ सकता था। इसलिए मार्गों की पीढ़ी को स्वचालित करने के लिए विचार आया: आप शुरुआती बिंदु और मार्ग की लंबाई निर्दिष्ट करते हैं, और कार्यक्रम एक विकल्प देता है। चलना लंबा हो सकता है, इसलिए विचार का तार्किक विकास "पड़ाव" के लिए मध्यवर्ती बिंदुओं को इंगित करने की क्षमता जोड़ रहा है, जहां आप काट सकते हैं और आराम कर सकते हैं। विकास की एक और शाखा संगीत थी। संगीत में जाना हमेशा अधिक मजेदार होता है, इसलिए उत्पन्न रूट के लिए प्लेलिस्ट का चयन करने की क्षमता को जोड़ना बहुत अच्छा होगा।

मौजूदा अनुप्रयोगों में, ऐसे समाधान नहीं मिल सकते हैं। निकटतम एनालॉग्स किसी भी मार्ग नियोजक हैं: Google मैप्स, 2 जीआईएस, आदि।

फोन पर ऐसा एप्लिकेशन सबसे सुविधाजनक है, इसलिए टेलीग्राम का उपयोग एक अच्छा विकल्प बन गया है। यह आपको मानचित्र प्रदर्शित करने और संगीत चलाने की अनुमति देता है, और आप एक बॉट लिखकर यह सब प्रबंधित कर सकते हैं। नक्शे के साथ मुख्य काम Google मानचित्र एपीआई का उपयोग करके किया गया था। अजगर दोनों प्रौद्योगिकियों के दोस्त बनाना आसान बनाता है।

टीम में तीन लोग थे, इसलिए कार्य को दो असमान उप-वर्गों (कार्ड के साथ काम करना और संगीत के साथ काम करना) में विभाजित किया गया था ताकि लोग स्वतंत्र रूप से काम कर सकें, और मैंने परिणामों का ध्यान रखा।

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

यह अलग से ध्यान देने योग्य है कि कैसे मार्गों के निर्माण का कार्य हल किया गया था। दो स्थानों के बीच एक मार्ग बनाना आसान है, लेकिन केवल मार्ग की लंबाई ज्ञात होने पर उपयोगकर्ता को क्या प्रदान करना है? बता दें कि यूजर 10 किलोमीटर पैदल चलना चाहता है। एक मनमाना दिशा में, एक बिंदु चुना जाता है जिसकी सीधी रेखा में दूरी 10 किलोमीटर है, जिसके बाद वास्तविक सड़कों के साथ वास्तविक बिंदुओं के लिए एक मार्ग का निर्माण किया जाता है। सबसे अधिक संभावना है कि यह प्रत्यक्ष नहीं होगा, इसलिए हम इसे निर्दिष्ट 10 किलोमीटर तक छोटा कर देंगे। ऐसे मार्गों के लिए बहुत सारे विकल्प हैं - हमें एक वास्तविक मार्ग जनरेटर मिला!

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

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

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

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

तरल लोकतंत्र




विचार के लेखक
स्टानिस्लाव साइशेव
टीम रचना
स्टानिस्लाव साइशेव - टीम लीडर, डेटाबेस
निकोले इज़ुमोव - बॉट इंटरफ़ेस
एंटोन रियाबुशेव - बैकेंड

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

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

तरल लोकतंत्र के उपयोग के उदाहरण राजनीति में पाए जाते हैं, और हम लोगों के विभिन्न समूहों के भीतर रोजमर्रा के उपयोग के लिए एक समान विचार लागू करना चाहते थे। अगले DevDays हैकथॉन में, हमने तरल लोकतंत्र के सिद्धांतों पर मतदान करने के लिए एक टेलीग्राम बॉट लिखने का फैसला किया। उसी समय, मैं ऐसे बॉट्स की लगातार समस्या से बचना चाहता था - बॉट के संदेशों के साथ सामान्य चैट को रोकना। समाधान यह है कि व्यक्तिगत बातचीत में अधिक से अधिक कार्यक्षमता डालें।

इस बॉट को बनाने के लिए हमने टेलीग्राम एपीआई का इस्तेमाल किया। मतदान और प्रतिनिधिमंडल के इतिहास को संग्रहीत करने के लिए, PostgreSQL डेटाबेस को चुना गया था। डेटाबेस बॉट के साथ संवाद करने के लिए फ्लास्क-सर्वर उठाया गया था। हमने इन तकनीकों को चुना क्योंकि हमारे पास पहले से ही मजिस्ट्रेट पर अध्ययन के दौरान उनके साथ बातचीत करने का अनुभव था। परियोजना के तीन घटक भागों - डेटाबेस, सर्वर और बॉट - पर काम टीम के सदस्यों के बीच सफलतापूर्वक वितरित किया गया था।

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

काम के उदाहरण के साथ वीडियो

परियोजना पर काम करना दिलचस्प था, हम आधी रात तक विश्वविद्यालय में रहे। यह हमें लगता है कि यह अध्ययन से विचलित करने का एक शानदार तरीका है, हालांकि यह बहुत थकाऊ है। एक नज़दीकी टीम में एक सुखद अनुभव था।

पुनश्च: अगले शैक्षणिक वर्ष के लिए जादूगर के लिए प्रवेश पहले से ही खुला है । अब सम्मिलित हों!

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


All Articles