Hackathon DevDays'19 (1-qism): tavsiyalar bilan kundalik, yurish marshruti generatori va suyuq demokratiya

Yaqinda biz dedi JetBrains va ITMO universitetining "Dasturiy ta'minotni ishlab chiqish / dasturiy ta'minot muhandisligi" korporativ magistratura dasturi haqida. Barcha qiziquvchilarni 29 aprel, dushanba kuni bo'lib o'tadigan ochiq eshiklar kuniga taklif qilamiz. Magistratura dasturimizning afzalliklari, talabalarga qanday bonuslar taklif qilishimiz va buning evaziga nimani talab qilishimiz haqida aytib beramiz. Bundan tashqari, mehmonlarimizning savollariga albatta javob beramiz.

Hackathon DevDays'19 (1-qism): tavsiyalar bilan kundalik, yurish marshruti generatori va suyuq demokratiyaOchiq eshiklar kuni magistrantlarimiz tahsil olayotgan Times biznes markazidagi JetBrains ofisida bo‘lib o‘tadi. 17:00 da boshlanadi. Saytda barcha tafsilotlarni bilib olishingiz va tadbirga ro'yxatdan o'tishingiz mumkin mse.itmo.ru. Keling va bundan afsuslanmaysiz!

Dasturning asosiy tarkibiy qismlaridan biri bu amaliyotdir. Talabalarda ko'p narsa bor: haftalik uy vazifalari, semestr loyihalari va xakatonlar. O'qish davrida zamonaviy rivojlanish metodologiyalari va texnologiyalariga to'liq singib ketish tufayli bitiruvchilar yirik IT-kompaniyalarning ish jarayonlariga tezda integratsiyalashadi.

Ushbu postda biz har olti oyda o'tkaziladigan DevDays xakatonlari haqida batafsilroq gaplashmoqchimiz. Qoidalar oddiy: 3-4 kishidan iborat jamoalar yig‘iladi va uch kun davomida talabalar o‘z g‘oyalarini hayotga tatbiq etadilar. Bundan nima kelib chiqishi mumkin? Ushbu semestrdagi xakaton loyihalari haqidagi hikoyalarning birinchi qismini talabalarning o'zidan o'qing :)

Kino tavsiyalar bilan kundalik

Hackathon DevDays'19 (1-qism): tavsiyalar bilan kundalik, yurish marshruti generatori va suyuq demokratiya

Fikr muallifi
Ivan Ilchuk
Jamoa tarkibi
Ivan Ilchuk - film syujetini tahlil qilish, server
Vladislav Korablinov - kundalik yozuvning yaqinligini va film syujetini taqqoslash uchun modellarni ishlab chiqish
Dmitriy Valchuk - UI
Nikita Vinokurov - UI, dizayn

Loyihamizning maqsadi ish stoli ilovasini - undagi yozuvlar asosida foydalanuvchiga filmlarni tavsiya qiladigan kundalik yozish edi.

Bu fikr men universitetga ketayotganimda va muammolarim haqida o'ylaganimda paydo bo'ldi. “Odam qanday muammoga duch kelmasin, qaysidir mumtoz yozuvchi bu haqda yozgan”, deb o‘yladim men. "Va kimdir yozgan bo'lsa, demak, kimdir uni allaqachon suratga olgan." Shunday qilib, xuddi shunday ruhiy azobga duchor bo'lgan odam haqidagi filmni tomosha qilish istagi tabiiy ravishda paydo bo'ldi.

Shubhasiz, alohida kundaliklar va alohida tavsiyalar xizmatlarining keng assortimenti mavjud (lekin odatda tavsiyalar avvalroq odamga yoqqan narsaga asoslanadi). Asosan, ushbu loyiha filmni asosiy nuqtalar bo'yicha qidirish bilan umumiy narsaga ega, ammo baribir, birinchi navbatda, bizning ilovamiz kundalikning funksionalligini ta'minlaydi.

Hackathon DevDays'19 (1-qism): tavsiyalar bilan kundalik, yurish marshruti generatori va suyuq demokratiyaBiz buni qanday amalga oshirdik? Sehrli tugmani bosganingizda, kundalik serverga yozuv yuboradi, u erda film Vikipediyadan olingan tavsif asosida tanlanadi. Bizning frontendimiz Electron-da yaratilgan (biz undan veb-sayt emas, balki foydalanamiz, chunki biz dastlab foydalanuvchi ma'lumotlarini serverda emas, balki mahalliy kompyuterda saqlashga qaror qildik) va server va tavsiyalar tizimining o'zi Pythonda yaratilgan: TF'lar Tavsiflardan olingan -IDF vektorlari kundalik yozuv vektoriga yaqinlik uchun solishtirilgan.

Bir guruh a'zosi faqat model ustida ishlagan, ikkinchisi to'liq front-endda ishlagan (dastlab uchinchi a'zo bilan birga, keyinchalik testga o'tgan). Men Vikipediya va serverdan film syujetlarini tahlil qilish bilan shug'ullanganman.

Biz bosqichma-bosqich natijaga yaqinlashdik, bir qator muammolarni yengib chiqdik, model dastlab juda ko'p operativ xotirani talab qilganidan boshlab, serverga ma'lumotlarni uzatish qiyinligi bilan yakunlandi.

Endi, kechqurun filmni topish uchun sizga ko'p kuch kerak emas: bizning uch kunlik ishimiz natijasi ish stoli ilovasi va server bo'lib, unga foydalanuvchi https orqali kiriladi va javob sifatida 5 ta filmdan iborat tanlovni oladi. qisqacha tavsif va plakat.

Loyiha haqidagi taassurotlarim juda ijobiy: ish erta tongdan kechgacha hayratlanarli edi va natijada olingan dastur vaqti-vaqti bilan universitetdagi uy vazifalari yoki film haqida kundalik yozish uchun "Uyqusiz tun" uslubida juda kulgili natijalar beradi. kafedradagi birinchi kun haqida hikoya qilish uchun maktabning birinchi kuni haqida.

Tegishli havolalar, o'rnatuvchilar va boshqalarni topish mumkin shu yerda.

Yo'nalish generatori

Hackathon DevDays'19 (1-qism): tavsiyalar bilan kundalik, yurish marshruti generatori va suyuq demokratiyaFikr muallifi
Artemyeva Irina
Jamoa tarkibi
Artemyeva Irina - jamoa etakchisi, asosiy halqa
Gordeeva Lyudmila - musiqa
Platonov Vladislav - marshrutlar

Menga shahar bo'ylab sayr qilish juda yoqadi: binolarga, odamlarga qarash, tarix haqida o'ylash. Ammo, yashash joyimni o'zgartirganimda ham, ertami-kechmi marshrutni tanlash muammosiga duch kelaman: men o'ylagan barcha narsalarni tugatdim. Marshrutlarni yaratishni avtomatlashtirish g'oyasi shunday paydo bo'ldi: siz marshrutning boshlang'ich nuqtasi va uzunligini ko'rsatasiz va dastur sizga imkoniyat beradi. Yurishlar uzoq bo'lishi mumkin, shuning uchun g'oyaning mantiqiy rivojlanishi "to'xtash" uchun oraliq nuqtalarni ko'rsatish qobiliyatini qo'shayotganga o'xshaydi, bu erda siz gazak va dam olishingiz mumkin. Rivojlanishning yana bir sohasi musiqa edi. Musiqa ostida yurish har doim qiziqarliroq, shuning uchun yaratilgan marshrut asosida pleylistni tanlash qobiliyatini qo'shish ajoyib bo'lar edi.

Mavjud ilovalar orasida bunday echimlarni topish mumkin emas edi. Eng yaqin analoglar har qanday marshrutni rejalashtiruvchilardir: Google Maps, 2GIS va boshqalar.

Telefoningizda bunday dastur bo'lishi eng qulay, shuning uchun Telegramdan foydalanish yaxshi variant edi. Bu sizga xaritalarni ko'rsatish va musiqa tinglash imkonini beradi va bularning barchasini bot yozish orqali boshqarishingiz mumkin. Xaritalar bilan asosiy ish Google Map API yordamida amalga oshirildi. Python ikkala texnologiyani birlashtirishni osonlashtiradi.

Jamoada uch kishi bor edi, shuning uchun yigitlar mustaqil ishlashlari uchun vazifa bir-biriga mos kelmaydigan ikkita kichik vazifaga (xarita bilan ishlash va musiqa bilan ishlash) bo'lingan va men natijalarni birlashtirishni o'z zimmasiga oldim.

Hackathon DevDays'19 (1-qism): tavsiyalar bilan kundalik, yurish marshruti generatori va suyuq demokratiyaHech birimiz Google Map API yoki Telegram botlarini yozmaganmiz, shuning uchun asosiy muammo loyihani amalga oshirish uchun ajratilgan vaqt miqdori edi: biror narsani tushunish yaxshi bilgan narsani qilishdan ko'ra har doim ko'proq vaqt talab etadi. Telegram bot API-ni tanlash ham qiyin bo'ldi: blokirovka tufayli ularning hammasi ham ishlamayapti va men hammasini sozlashda qiynalganman.

Marshrutlarni yaratish muammosi qanday hal qilinganligini alohida aytib o'tish kerak. Ikki joy o'rtasida marshrut qurish oson, lekin faqat marshrut uzunligi ma'lum bo'lsa, foydalanuvchiga nima taklif qila olasiz? Foydalanuvchi 10 kilometr piyoda yurishni xohlasin. Nuqta ixtiyoriy yo'nalishda tanlanadi, uning masofasi to'g'ri chiziq bo'ylab 10 kilometrni tashkil etadi, shundan so'ng bu nuqtaga haqiqiy yo'llar bo'ylab marshrut quriladi. Katta ehtimol bilan u tekis bo'lmaydi, shuning uchun biz uni belgilangan 10 kilometrga qisqartiramiz. Bunday marshrutlar uchun juda ko'p variantlar mavjud - bizda haqiqiy marshrut generatori bor!

Dastlab men xaritani yashil hududlarga mos keladigan hududlarga bo'lishni xohladim: qirg'oqlar, hovlilar, ko'chalar, sayr qilish uchun eng yoqimli marshrutni olish, shuningdek, ushbu hududlarga muvofiq musiqa yaratish uchun. Ammo buni Google Map API yordamida qilish qiyin bo'lib chiqdi (bizda bu muammoni hal qilishga vaqtimiz yo'q edi). Shu bilan birga, ma'lum turdagi joylar (do'kon, park, kutubxona) orqali marshrut qurishni amalga oshirish mumkin edi: agar marshrut belgilangan barcha joylarni aylanib o'tgan bo'lsa-da, lekin kerakli masofa hali bosib o'tilmagan bo'lsa, u tugallanadi. tasodifiy yo'nalishda foydalanuvchi tomonidan belgilangan masofa. Google Map API shuningdek, taxminiy sayohat vaqtini hisoblash imkonini beradi, bu esa butun yurish uchun aniq pleylistni tanlashga yordam beradi.

Natijada avlod yaratishga muvaffaq bo‘ldi boshlang'ich nuqtasi, masofasi va oraliq punktlari bo'yicha marshrutlar; hamma narsa musiqani marshrutning bo'limlari bo'yicha tasniflash uchun tayyorlangan, ammo vaqt yo'qligi sababli, pleylistni oddiygina qo'shimcha UI filiali sifatida tanlash imkoniyatini qoldirishga qaror qilindi. Shunday qilib, foydalanuvchi tinglash uchun musiqani mustaqil tanlash imkoniyatiga ega bo'ldi.

Musiqa bilan ishlashning asosiy muammosi, foydalanuvchidan biron-bir xizmatda hisob qaydnomasiga ega bo'lishni talab qilmasdan, mp3 fayllarni qayerdan olishni bilmaslik edi. Foydalanuvchidan musiqa so'rashga qaror qilindi (UserMusic rejimi). Bu yangi muammoni keltirib chiqaradi: hamma ham treklarni yuklab olish imkoniyatiga ega emas. Yechimlardan biri foydalanuvchilar musiqasi bilan omborni yaratish (BotMusic rejimi) - undan siz xizmatlardan qat'i nazar musiqa yaratishingiz mumkin.

Garchi mukammal bo'lmasa-da, biz vazifani bajardik: biz foydalanmoqchi bo'lgan dastur bilan yakunlandik. Umuman olganda, bu juda zo'r: uch kun oldin sizda faqat g'oya bor edi va uni qanday amalga oshirish haqida birorta ham fikr yo'q edi, ammo hozir ishchi yechim bor. Bu men uchun juda muhim uch kun bo'ldi.Men endi amalga oshirish uchun yetarli bilimga ega bo'lmagan narsani o'ylab topishdan qo'rqmayman, jamoa rahbari bo'lish nihoyatda qiziqarli edi va men jamoamga qo'shilgan ajoyib yigitlar bilan tanishdim. yaxshiroq!

Suyuq demokratiya

Hackathon DevDays'19 (1-qism): tavsiyalar bilan kundalik, yurish marshruti generatori va suyuq demokratiya

Fikr muallifi
Stanislav Sychev
Jamoa tarkibi
Stanislav Sychev - jamoa rahbari, ma'lumotlar bazasi
Nikolay Izyumov - bot interfeysi
Anton Ryabushev - orqa tomon

Turli guruhlar ichida ko'pincha qaror qabul qilish yoki ovoz berish zarurati paydo bo'ladi. Odatda bunday hollarda ular murojaat qilishadi to'g'ridan-to'g'ri demokratiya, ammo, guruh kattalashganda, muammolar paydo bo'lishi mumkin. Misol uchun, guruhdagi odam savollarga tez-tez javob berishni yoki muayyan mavzular bo'yicha savollarga javob berishni xohlamasligi mumkin. Katta guruhlarda, ular murojaat qiladigan muammolardan qochish uchun vakillik demokratiyasi, qolganlarini tanlash yukidan ozod qiladigan barcha odamlar orasidan alohida "deputatlar" guruhi tanlanganida. Ammo bunday deputat bo'lish juda qiyin va deputat bo'lgan odam saylovchilarga ko'ringandek halol va hurmatli bo'lishi shart emas.

Ikkala tizimning muammolarini hal qilish uchun Brayan Ford kontseptsiyani taklif qildi suyuq demokratiya. Bunday tizimda har bir kishi oddiy foydalanuvchi yoki delegat rolini tanlashda erkindir, shunchaki o'z xohishini bildiradi. Har kim mustaqil ovoz berishi yoki bir yoki bir nechta masala bo'yicha delegatga ovoz berishi mumkin. Delegat ham o‘z ovozini berishi mumkin. Bundan tashqari, agar delegat saylovchiga mos kelmasa, ovoz istalgan vaqtda qaytarib olinishi mumkin.

Suyuq demokratiyadan foydalanish misollari siyosatda topiladi va biz shunga o'xshash g'oyani har xil turdagi odamlar guruhlarida kundalik foydalanish uchun amalga oshirmoqchi edik. Navbatdagi DevDays hakathonida biz likvid demokratiya tamoyillari asosida ovoz berish uchun Telegram botini yozishga qaror qildik. Shu bilan birga, men bunday botlarning umumiy muammosidan qochishni xohlardim - umumiy suhbatni botdan kelgan xabarlar bilan yopish. Yechim shaxsiy suhbatga imkon qadar ko'proq funksionallikni jalb qilishdir.

Hackathon DevDays'19 (1-qism): tavsiyalar bilan kundalik, yurish marshruti generatori va suyuq demokratiyaUshbu botni yaratish uchun biz foydalandik Telegram'dan API. Ovoz berish va delegatsiyalar tarixini saqlash uchun PostgreSQL ma'lumotlar bazasi tanlandi. Bot bilan bog'lanish uchun Flask serveri o'rnatildi. Biz bu texnologiyalarni tanladik, chunki... biz magistraturada o'qish paytida ular bilan muloqot qilish tajribasiga ega edik. Loyihaning uchta komponenti - ma'lumotlar bazasi, server va bot ustida ishlash jamoa a'zolari o'rtasida muvaffaqiyatli taqsimlandi.

Albatta, uch kun qisqa vaqt, shuning uchun xakaton davomida biz g'oyani prototip darajasiga olib chiqdik. Natijada biz umumiy chatga faqat ovoz berishning ochilishi va uning anonim natijalari haqidagi ma’lumotlarni yozadigan bot yaratdik. Ovoz berish va so'rovnoma yaratish qobiliyati bot bilan shaxsiy yozishmalar orqali amalga oshiriladi. Ovoz berish uchun to'g'ridan-to'g'ri e'tibor talab qiladigan muammolar ro'yxatini ko'rsatadigan buyruqni kiriting. Shaxsiy yozishmalarda siz delegatlar roʻyxatini va ularning oldingi ovozlarini koʻrishingiz, shuningdek, ularga mavzulardan biri boʻyicha ovoz berishingiz mumkin.

Ish namunasi bilan video.

Loyiha ustida ishlash qiziqarli bo'ldi, biz universitetda yarim tungacha qoldik.O'ylaymizki, bu juda charchagan bo'lsa-da, o'qishdan tanaffus qilishning ajoyib usuli. Bir-biriga yaqin jamoada ishlash yoqimli tajriba edi.

PS. Kelgusi oʻquv yili uchun magistraturaga roʻyxatdan oʻtish allaqachon boshlangan ochiq. Hoziroq qo'shil!

Manba: www.habr.com

a Izoh qo'shish