Kodim-pizza

Habari, Habr. Tulishikilia hakathoni yetu ya kwanza ya ndani kwa hiari. Niliamua kushiriki nawe maumivu yangu na hitimisho juu ya kuitayarisha katika wiki 2, pamoja na miradi ambayo iligeuka kuwa.

Kodim-pizza

Sehemu ya boring kwa wale wanaopenda uuzaji

Nitaanza na hadithi kidogo.

Mwanzo wa Aprili. Hackathon ya kwanza ya Jumuiya ya MskDotNet inafanyika katika ofisi yetu. Vita vya Tatooine vinaendelea kikamilifu katika galaksi yetu wakati huu. Jumamosi. Timu 20. Pizza. Kila kitu ni cha dhati (ushahidi) R2-D2 inayoweza kupumua inaelea kuzunguka ukumbi. Timu huandika algoriti sahihi zaidi ili kupita mbio hatari zaidi kwenye ramani. Tunasogeza uzinduzi wa mbio za kwanza. Vidakuzi na kahawa ni viokoa maisha. Mimi na waandaaji tulitarajia kwamba watu wengi wangeondoka baada ya chakula cha mchana Jumamosi. Lakini hapana. Saa 12 za kuweka rekodi nyuma. fainali. Kitu kinaanguka, kitu hakianza. Lakini kila mtu ana furaha. Timu yetu inashinda. Tuna furaha maradufu.

Ninashiriki furaha yangu katika Slack na wazo linakuja akilini: "Tunahitaji kufanya hackathon yetu wenyewe." Ninaandika kwa kituo chetu cha huduma cha Sasha. Kimya.

Asubuhi. Ninakunywa kahawa ofisini. Namuona Sasha akija kwa nyuma. "Lisa, hii ni nzuri! Tuna tarehe muhimu mnamo Aprili 21. Hebu tufanye!" WTF!? Kwa haraka sana? A? Nini? Ninahitaji kuruka hadi Syktyvkar kwa mafunzo ya ndani katikati ya Aprili. Na kuzimu nayo! Hebu.

Wiki 2 zimesalia. Sijawahi kuwa mratibu pekee wa hackathon. Wacha iwe ya ndani. Nilisoma makala juu ya mada hii. Mgumu. Inachukua miezi kadhaa. Watu kadhaa wanahitajika. Unahitaji kufikiria juu ya bidhaa, zawadi, masharti, ratiba, riba, kuelewa lengo, bajeti. Au labda hata kujua maana ya maisha. Hakika sitafanikiwa kwa wakati. Na ulipokuwa ukisoma na kuandaa, wiki ilikuwa tayari imepita. Ni wakati wa kusahau kuhusu makala na kuanza kufanya kitu.

Pata orodha yetu ya kushikilia hackathon ya ndani ndani ya wiki 1

  • Mpango: Unakaa chini kwa utulivu na kuandika orodha ya kile kinachohitajika kufanywa kwa hackathon. Dakika 30.
  • Kazi: Washiriki wanapendekeza na kuchagua miradi wanayotaka kuunda katika Majedwali ya Google. Kazi ya usuli, saa 2.
  • Ratiba: kwa goti unaandika kuvunjika kwa muda mfupi, kwa kuzingatia mapumziko 3 na ya mwisho. Dakika 20.
  • ΠšΠΎΠΌΠ°Π½Π΄Ρ‹: chapisha ujumbe kuhusu hackathon na ratiba kutoka kwa kituo cha huduma katika chaneli za IT katika Slack/mail/nk na uunde chaneli tofauti ya hackathon. Ndani yake, kila mtu amegawanywa katika timu, na wale ambao hawajaamua hufanya hivyo katika dakika 5 za kwanza za hackathon. Kazi ya usuli, saa 2.
  • Mafungu: unakuja na bidhaa na wasanidi wawili, mpe mbuni ili itolewe, na ipokee tayari. Kazi ya usuli, siku 3.
  • Hakathoni: unakuja ofisini, kuratibu kila mtu mwanzoni, fanya biashara yako, soma Reddit, muhimu tangaza kila mapumziko kuhusu pizza safi, piga picha za machweo ya jua, tangaza fainali, piga kura pamoja na uchague mshindi. 1 siku.
  • Chini ya nyota: Bila shaka, mara kwa mara unafikiria kila kitu kinaendelea vizuri. Bila shaka, si kila mtu ataona ujumbe wako na ni bora kuzungumza na baadhi ya kibinafsi. Kwa kweli, ikiwa mtu atakusaidia, kila kitu kitakuwa rahisi mara 2 (Alena wa ajabu alinisaidia).

Sehemu isiyochosha sana kuhusu tarehe ya hackathon

Kwa nini Aprili 21? Siku hii ni muhimu kwetu. Mwaka mmoja uliopita, tarehe 21 Aprili, tulikabiliwa na mzigo mkubwa wikendi ya kwanza baada ya kuanza kwa Kampeni ya Shirikisho ya Utangazaji. Siku iliyofuata, Jumapili, timu yetu ilikuwa kazini kuanzia saa nane asubuhi. Kisha tukaunda bodi ya sundayhackathon huko Trello na wiki ya kazi ya zamu ilianza, masaa 8 kwa siku. Hali ilikuwa mbaya sana hata hatukuwa na wakati wa kula na tulilishwa na wavulana kutoka kwa timu zingine.

Kodim-pizza

Unaweza kusoma hadithi ya kina zaidi Ukurasa wa Fyodor Ovchinnikov (Mkurugenzi Mtendaji wetu). Tangu wakati huo, tumebadilika sana, lakini sasa hatutasahau tarehe.

Mwaka huu, tuliamua kwamba tukio hili lilikuwa na thamani ya kudumu katika kumbukumbu ya vizazi na, katika mila bora, tulipanga hackathon ya kwanza ya ndani katika historia ya Dodo, ambayo ilidumu saa 10.

Sehemu ya boring zaidi kuhusu miradi ya hackathon

Kanusho: maelezo yote yaliandikwa na wavulana wenyewe, kwa hivyo uandishi wa maandishi sio wangu.

Kujifunza kwa Oleg (kujifunza kwa mashine)

Dima Kochnev, Sasha Andronov (@alexandronov)

Walitaka kutengeneza mtandao wa neva ambao ungeamua ni aina gani ya pizza iliyo kwenye picha bila ujuzi wowote. Kama matokeo, tulifanya rahisi sana na ya kuchezea - ​​inatambua pizza 10, tulifikiria takriban jinsi kila kitu kinavyofanya kazi, iwezekanavyo kwa siku (~ masaa 10).

Kodim-pizza

Hasa, tuligundua kuwa tasnia imefikia kiwango ambacho msanidi programu wa kawaida anaweza kuchukua maktaba zilizotengenezwa tayari, kusoma hati na kutoa mafunzo kwa mtandao wake wa neva bila ufahamu wa kina wa somo. Na itafanya kazi vizuri vya kutosha kutatua shida za kweli.

Zana zilizotumika:

  • picha - maktaba rahisi na rahisi ya kufanya kazi na kujifunza kwa mashine na maono ya kompyuta.
  • Tulijaribu mifano miwili - ResNet50, Yolo.
  • Nambari hiyo iliandikwa, kwa kweli, katika Python.

Tulikuwa na picha 11000, lakini karibu 3/4 kati yao iligeuka kuwa takataka, na wengine walikuwa na pembe tofauti, zisizofaa. Matokeo yake, tulichukua mfano uliofanywa tayari (ambao unajua tu jinsi ya kupata pizza) na kwa msaada wake tulitenganisha takataka. Ifuatayo, kichwa cha picha kilijumuisha jina la pizza - kwa hivyo tulipanga kwenye folda, lakini ikawa kwamba majina hayakuendana na ukweli na ilibidi tuitakase kwa mikono yetu. Mwishowe, kulikuwa na picha 500-600 zilizobaki, ni wazi kuwa hii ni kiasi kidogo, lakini hata hivyo, hii ilikuwa ya kutosha kutenganisha pizza 10 kutoka kwa kila mmoja.

Ili kutoa mafunzo kwa gridi ya taifa, tulichukua mashine ya bei rahisi zaidi ya mtandaoni huko Azure kwenye NVIDIA Tesla K80. Walifanya mafunzo juu yake kwa nyakati 100, lakini ilikuwa wazi kuwa mtandao ulikuwa umejaa zaidi baada ya epochs 50, kwa sababu ya ukweli kwamba kulikuwa na hifadhidata ndogo.

Kwa kweli, shida nzima ni ukosefu wa data nzuri.

Kodim-pizza

Huenda tumechanganya maneno kidogo, lakini lazima tuzingatie kwamba hatuna uzoefu hata kidogo katika kufanya kazi na mambo haya yote.

GUI ya NOOBS (console ya kuagiza pizza)

Misha Kumachev (Ceridan), Zhenya Bikkinin, Zhenya Vasiliev

Tumeweka pamoja mfano wa ombi la dashibodi kwa wajinga, shukrani ambayo unaweza kuagiza pizza kupitia terminal au mstari wa amri, au hata kuiunganisha kwenye bomba la usambazaji na, baada ya kutolewa kwa mafanikio, kuwasilisha pizza ofisini.

Kodim-pizza

Kazi iligawanywa katika sehemu kadhaa: tuligundua jinsi API yetu ya programu za rununu inavyofanya kazi, tukakusanya CLI yetu wenyewe kwa kutumia. oclif na kusanidi uchapishaji wa kifurushi tulichokusanya. Kazi ya mwisho ilihusisha dakika chache zisizofurahi kuelekea mwisho wa hackathon. Kila kitu kilifanya kazi ndani yetu, na hata matoleo ya zamani yaliyochapishwa ya kifurushi yalifanya kazi, lakini yale mapya (ambayo yaliongeza vipengele vya baridi na hisia) yalikataa kufanya kazi. Tulitumia kama dakika 40 kujaribu kujua ni nini kilienda vibaya, lakini mwishowe kila kitu kilifanya kazi peke yake).

Programu yetu ya juu zaidi ya hackathon ilikuwa agizo halisi la pizza ofisini kupitia CLI yetu. Tuliendesha kila kitu mara kadhaa kwenye benchi ya majaribio, lakini mikono yangu ilikuwa bado inatetemeka nilipoingiza amri katika uzalishaji.

Kodim-pizza

Matokeo yake, hatimaye tulifanya hivyo!

Kodim-pizza

CourierGo

Anton Bruzhmelev (mwandishi), Vanya Zverev, Gleb Lesnikov (entropy), Andrey Sarafanov

Tulichukua wazo la "Programu ya Courier".

Usuli kuhusu maandalizi.Hapo awali, nilijiuliza ni aina gani ya huduma zinaweza kuwa kwenye programu? Orodha ifuatayo ya utendaji iliibuka:

  • Programu huingia kwenye rejista ya pesa ya uwasilishaji kwa kutumia nambari.
  • Programu inaonyesha mara moja maagizo na maagizo yanayopatikana ambayo yanahitaji kuchukuliwa.
  • Mjumbe anabainisha agizo na kulipeleka safarini.
  • Anaonyeshwa wakati uliokadiriwa na ikiwa yuko kwa wakati au la.
  • Huonyesha mteja kwamba mjumbe ameondoka.
  • Mteja anaanza kuonyeshwa sehemu ya mjumbe kwenye ramani na muda uliokadiriwa.
  • Mjumbe anaweza kumwandikia mteja kwenye gumzo kutoka kwa programu.
  • Mteja anaweza kumwandikia mjumbe kupitia gumzo kutoka kwa programu.
  • Dakika tano kabla ya kuwasili, mteja anapokea ujumbe kwamba mjumbe yuko karibu, jitayarishe.
  • Mjumbe anabainisha katika maombi kwamba amefika na anasubiri.
  • Mjumbe anapiga simu kutoka kwa programu kwa mbofyo mmoja na kuripoti kwamba (inapanda, imefika, n.k.)
  • Mteja hukubali agizo na kuweka nambari ya siri kutoka kwa programu au SMS ili kudhibitisha uwasilishaji (kama saini) Ili msafirishaji asiweze kukamilisha uwasilishaji mapema ikiwa amechelewa.
  • Agizo limetiwa alama kama limetolewa kwenye mfumo.

Pamoja na hali kadhaa mbadala:

  • Mtumishi anaweza kutia alama agizo kuwa halijawasilishwa na kuchagua sababu.
  • Ikiwa umechelewa, mjumbe anaweza kutoa cheti cha elektroniki kupitia SMS na kifungo kimoja. Au cheti hufika kiotomatiki ikiwa tarehe ya mwisho ya uwasilishaji haijafikiwa.

Hisia ya ahadi na umuhimu wa mradi huu ilikuwa, bila shaka, yenye nguvu.

Siku iliyofuata tulienda kula chakula cha mchana na timu na tukajadili jinsi utendakazi wa chini wa programu unavyoweza kuonekana.

Kama matokeo, orodha ifuatayo ya kile kilichopaswa kufanywa kwenye hackathon iliundwa:

  • Ingia kwenye rejista ya pesa ya utoaji.
  • Onyesha nafasi ya sasa.
  • Tuma data kwa API ya nje (kuratibu, kupokea agizo, kuwasilisha agizo).
  • Pokea data kutoka kwa API ya nje (maagizo ya sasa ya barua pepe).
  • Tuma tukio linaloonyesha kuwa umechukua agizo la kuletewa/kuletwa.
  • Onyesha nafasi ya sasa ya mjumbe kwenye ramani kwenye tovuti.

Kazi kuu, kama ilionekana, ilikuwa katika kuunda backend, maombi yenyewe (baada ya majadiliano, tulichagua ReactNative kukuza programu, au tuseme mfumo wake - expo.io, ambayo hukuruhusu usiandike msimbo wa asili hata kidogo). Kwa upande wa hali ya nyuma, hapo awali kulikuwa na tumaini katika Vanya Zverev, kwani alikuwa na uzoefu wa kufanya kazi na templeti yetu ya huduma na k8s (kazi ambayo alichukua). Andrey Sarafanov na mimi tulichukua ReactNative kwa mzunguko.

Niliamua kujaribu mara moja kuunda hifadhi ya kazi kwa mradi yenyewe. Saa 12 usiku nilikutana na ukweli kwamba geolocation kwa nyuma haifanyi kazi vizuri katika ReactNative, ikiwa hutaandika msimbo wa asili, nilichanganyikiwa kidogo. Kisha niliachilia nilipogundua kuwa nilikuwa nikisoma hati sio za mfumo wa expo.io, lakini za ReactNative. Matokeo yake, wakati wa jioni tayari nilielewa jinsi ya kupata nafasi ya sasa katika expo.io na kuchora skrini tofauti (kwa kuingia, kuonyesha utaratibu, nk).

Kodim-pizza

Asubuhi kwenye hackathon, walimvutia Gleb kwenye mradi wao wa kuahidi sana. Haraka haraka wakapanga mpango wa nini kifanyike.

Kodim-pizza

Tulifanya makosa wakati, kwa mujibu wa kiolezo cha mradi, tulipojaribu kuwasiliana si kupitia HTTP, lakini kupitia GRPC, kwa kuwa hakuna mtu aliyejua jinsi ya kuunda mteja wa GRPC kwa JavaScript. Mwishowe, baada ya kutumia kama saa moja na nusu juu ya hili, tuliacha wazo hili. Kwa sababu ya hii, watu walio kwenye sehemu ya nyuma walianza kutengeneza tena seva iliyokamilishwa kutoka GRPC hadi WebApi. Baada ya nusu saa, hatimaye tuliweza kuanzisha mawasiliano kati ya maombi na backend, tazama. Lakini wakati huo huo, Gleb alikuwa karibu kumaliza kupeleka kwa k8s na pamoja na kupeleka kiotomatiki kwa ahadi kwa bwana. πŸ™‚

Tulichagua MySQL kama hifadhi ili tusichukue hatari angalau na hifadhidata (tulikuwa na mawazo kuhusu CosmosDb).

Kodim-pizza

Mwishowe:

  • Imetekelezwa kuhifadhi viwianishi vya sasa vya mjumbe kutoka kwa programu hadi hifadhidata.
  • Tulisakinisha RabbitMQ na kujiandikisha kwa ujumbe kuhusu mjumbe kuchukua agizo ili kuonyesha mara moja agizo kutoka kwa mjumbe kwenye programu.
  • Tulianza kuhifadhi muda wa kuagiza katika hifadhidata yetu baada ya mjumbe kubofya kitufe kwenye programu. Hatukuwa na muda wa kuongeza kutuma tukio kwa kashfa kwamba agizo lilitolewa.
  • Nilifanya onyesho la ramani kwenye ukurasa wa mpangilio wa sasa kwenye wavuti na nafasi ya sasa ya mjumbe. Lakini utendakazi huu ulibakia kidogo bila kukamilika, kwani haikuwezekana kusanidi CORS katika mazingira ili kupokea kuratibu kutoka kwa huduma yetu mpya.

M87

Roma Bukin, Gosha Polevoy (georgepolevoyArtyom Trofimushkin

Tulitaka kutekeleza mtoa huduma wa OpenID Connect, kwa kuwa kwa sasa tunatumia itifaki ya uthibitishaji wa muundo wetu wenyewe, na hii inazua matatizo kadhaa: maktaba za wateja maalum, kazi isiyofaa kwa upande wa washirika wa nje, matatizo ya usalama yanayowezekana (baada ya yote. , OAuth2.0 na OpenID Connect katika utekelezaji wa marejeleo inaweza kuchukuliwa kuwa salama, lakini sina uhakika kuhusu suluhisho letu).

Kodim-pizza

Tulifanya huduma tofauti inayoiga huduma ya kuhifadhi data ya kibinafsi ili kuunda mfano mdogo wa Nchi-Agnostic wa mtoaji wa uthibitishaji ambao utaenda kwa huduma tofauti kwa data ya kibinafsi (hii ingewezekana siku zijazo kuwa na huduma moja na ambayo mtu anaweza kuingia na usajili wa akaunti katika nchi yoyote, na wakati huo huo kuzingatia GDPR na sheria nyingine za shirikisho). Tulifanya sehemu hii, kama alivyofanya mtoa huduma, na tukafanikiwa kuwaunganisha wao kwa wao. Ifuatayo, ilikuwa ni lazima kuunda API ambayo italindwa na tokeni zilizotolewa na mtoaji, kusaidia uchunguzi wao kupitia mtoaji na kurudisha data iliyolindwa ikiwa ombi lilikidhi sera za uidhinishaji (tunaangalia kuwa mtumiaji ameidhinishwa kulingana na mpango wa Bearer. , ishara yake ina upeo fulani + y Mtumiaji mwenyewe ana ruhusa inayoruhusu simu kupigwa). Sehemu hii pia ilikamilika. Sehemu ya mwisho ilikuwa mteja wa JavaScript, ambayo itapewa ishara, kwa msaada ambao ingeita API iliyolindwa. Hatukuwa na wakati wa kufanya sehemu hii. Hiyo ni, sehemu nzima ya kazi ilikuwa tayari, lakini sehemu ya mbele haikuwa tayari kuonyesha utendaji wa mfumo mzima.

E-E-E (kichezeo)

Dima Afonchenko, Sasha Konovalov

Tulifanya toy ndogo kwenye yunka ambapo mikono ya frisky hutupa sausage kwenye pizza. Ikiwa utaweka sausage vibaya, ujumbe wa kusikitisha "Umekataliwa" unaonekana kwenye skrini, na ikiwa sausage yote iliwekwa kwa usahihi, ukweli wa random kuhusu pizza unaonekana.

Kodim-pizza

Tulitaka kufanya kiwango cha pili kwa kutupa nyanya, lakini hatukuwa na muda.

Kodim-pizza

Muendelezo mfupi: nani alishinda?

Kabla ya hackathon, tulizungumza na wavulana na nikauliza ni tuzo gani wangependa kupokea ikiwa watashinda. Ikawa kwamba zawadi yenye thamani zaidi ingekuwa β€œnjia ya kuelekea kwenye chakula.”

Kodim-pizza

Kwa hivyo, tarajia tutangaze mchezo kwa mikono inayoweka peremende kwenye pizza hivi karibuni.

Kama msomaji makini alivyoweza kugundua, timu ya "E-E-E (toy)" ilishinda. Hongereni sana jamani!

Watumiaji waliojiandikisha pekee ndio wanaweza kushiriki katika utafiti. Weka sahihitafadhali.

Je, ni mradi gani ulioupenda zaidi?

  • Kujifunza kwa Oleg (kujifunza kwa mashine)

  • GUI ya NOOBS

  • CourierGo

  • M87

  • E-E-E

Watumiaji 5 walipiga kura. Watumiaji 3 walijizuia.

Chanzo: mapenzi.com

Kuongeza maoni