Kodim-pizza

Hello, Habr. Kusang idinaos namin ang aming unang panloob na hackathon. Napagpasyahan kong ibahagi sa iyo ang aking mga pasakit at konklusyon tungkol sa paghahanda para dito sa loob ng 2 linggo, pati na rin ang mga proyekto na naging.

Kodim-pizza

Ang boring para sa mga interesado sa marketing

Magsisimula ako sa isang maliit na kwento.

Simula ng Abril. Ang unang MskDotNet Community hackathon ay nagaganap sa aming opisina. Ang Labanan ng Tatooine ay puspusan na sa ating kalawakan sa oras na ito. Sabado. 20 koponan. Pizza. Lahat ay taos-puso (mga patunay). Isang inflatable R2-D2 ang lumulutang sa paligid ng bulwagan. Isinulat ng mga koponan ang mga pinakatamang algorithm upang maipasa ang pinaka-mapanganib na karera sa mapa. Inilipat namin ang paglulunsad ng mga unang karera. Ang cookies at kape ay lifesaver. Inasahan namin ng mga organizer na maraming tao ang aalis pagkatapos ng tanghalian sa Sabado. Pero hindi. 12 oras ng coding sa likod. Ang final. May nahuhulog, may hindi nagsisimula. Pero masaya ang lahat. Panalo ang team namin. Doble ang saya natin.

Ibinabahagi ko ang aking kagalakan sa Slack at ang ideya ay pumasok sa isip: "Kailangan nating gumawa ng sarili nating hackathon." Sumulat ako sa aming service station na si Sasha. Katahimikan.

Umaga. Umiinom ako ng kape sa opisina. Nakita ko si Sasha na papalapit sa likod. "Lisa, ang galing! May mahalagang petsa tayo sa Abril 21. Gawin natin!" WTF!? Sobrang bilis? A? Ano? Kailangan kong lumipad sa Syktyvkar para sa isang internship sa kalagitnaan ng Abril. At sa impiyerno kasama nito! tayo.

2 linggo ang natitira. Hindi pa ako naging nag-iisang organizer ng isang hackathon. Hayaan itong maging panloob. Nagbasa ako ng mga artikulo sa paksang ito. Matigas. Ito ay tumatagal ng ilang buwan. Maraming tao ang kailangan. Kailangan mong isipin ang tungkol sa merch, premyo, kundisyon, iskedyul, interes, unawain ang layunin, mga badyet. O baka malaman pa ang kahulugan ng buhay. Tiyak na hindi ako aabot sa oras. At habang nagbabasa ka at naghahanda, lumipas na ang isang linggo. Panahon na upang kalimutan ang tungkol sa mga artikulo at magsimulang gumawa ng isang bagay.

Abangan ang aming checklist para sa pagdaraos ng internal hackathon sa loob ng 1 linggo

  • Plano: Umupo ka nang mahinahon at sumulat ng listahan ng mga dapat gawin para sa hackathon. 30 minuto.
  • Gawain: Ang mga kalahok ay nagmumungkahi at pumili ng mga proyektong gusto nilang gawin sa Google Sheets. Gawain sa background, 2 oras.
  • Timetable: sa iyong tuhod sumulat ka ng isang maikling breakdown ng oras, isinasaalang-alang ang 3 break at ang pangwakas. 20 minuto.
  • Mga Koponan: mag-publish ng mensahe tungkol sa hackathon na may iskedyul mula sa service station sa mga IT channel sa Slack/mail/etc at lumikha ng hiwalay na channel para sa hackathon. Sa loob nito, ang lahat ay nahahati sa mga koponan, at ang mga hindi nakapagpasya ay ginagawa ito sa unang 5 minuto ng hackathon. Gawain sa background, 2 oras.
  • Mga tinapay: makabuo ka ng merch na may dalawang developer, ibigay ito sa designer para sa pag-render, at tanggapin ito nang handa. Gawain sa background, 3 araw.
  • Hackathon: pumunta ka sa opisina, i-coordinate ang lahat sa simula, gawin ang iyong negosyo, basahin ang Reddit, mahalagang ipahayag ang bawat pahinga tungkol sa sariwang pizza, kumuha ng mga larawan ng paglubog ng araw, ipahayag ang pangwakas, bumoto nang magkasama at piliin ang mananalo. 1 araw.
  • Sa ilalim ng asterisk: Syempre, palagi mong iniisip na maayos ang lahat. Siyempre, hindi lahat ay makikita ang iyong mensahe at mas mahusay na makipag-usap sa ilan nang personal. Siyempre, kung may tumulong sa iyo, ang lahat ay magiging 2 beses na mas madali (tinulungan ako ng kahanga-hangang Alena).

Ang hindi gaanong nakakainip na bahagi tungkol sa petsa ng hackathon

Bakit April 21? Ang araw na ito ay makabuluhan para sa atin. Eksaktong isang taon na ang nakalipas, noong Abril 21, nahulog kami sa ilalim ng load sa unang katapusan ng linggo pagkatapos ng pagsisimula ng Federal Advertising Campaign. Kinabukasan, Linggo, ang aming koponan ay nasa trabaho mula 8 am. Pagkatapos ay gumawa kami ng sundayhackathon board sa Trello at nagsimula ang isang linggo ng shift work, 12 oras sa isang araw. Ang sitwasyon ay napaka-kritikal na wala kaming oras upang kumain at kami ay pinakain ng mga lalaki mula sa ibang mga koponan.

Kodim-pizza

Maaari kang magbasa ng mas detalyadong kuwento sa Pahina ni Fyodor Ovchinnikov (ang aming CEO). Simula noon, marami na kaming pinagbago, pero ngayon ay siguradong hindi namin makakalimutan ang petsa.

Sa taong ito, napagpasyahan namin na ang kaganapang ito ay nagkakahalaga ng pagpapanatili sa memorya ng mga inapo at, sa pinakamahusay na mga tradisyon, inayos namin ang unang panloob na hackathon sa kasaysayan ng Dodo, na tumagal ng 10 oras.

Ang pinaka-boring na bahagi tungkol sa mga proyekto ng hackathon

Disclaimer: ang lahat ng mga paglalarawan ay isinulat ng mga lalaki mismo, kaya ang may-akda ng teksto ay hindi sa akin.

Oleg Learning (pag-aaral ng makina)

Dima Kochnev, Sasha Andronov (@alexandronov)

Nais nilang gumawa ng neural network na tutukuyin kung anong uri ng pizza ang nasa isang larawan nang walang anumang kaalaman. Bilang resulta, gumawa kami ng napakasimple at laruan - kinikilala nito ang 10 pizza, halos naisip namin kung paano gumagana ang lahat, hangga't maaari sa isang araw (~10 oras).

Kodim-pizza

Sa partikular, napagtanto namin na ang industriya ay umabot sa antas kung saan ang isang ordinaryong developer ay maaaring kumuha ng mga handa na aklatan, basahin ang dokumentasyon at sanayin ang kanyang neural network nang walang malalim na kaalaman sa paksa. At ito ay gagana nang maayos upang malutas ang mga tunay na problema.

Mga tool na ginamit:

  • imageai β€” isang maginhawa at simpleng library para sa pagtatrabaho sa machine learning at computer vision.
  • Sinubukan namin ang dalawang modelo - ResNet50, Yolo.
  • Ang code ay isinulat, siyempre, sa Python.

Mayroon kaming 11000 mga larawan, ngunit halos 3/4 ng mga ito ay naging basura, at ang iba ay may iba't ibang, hindi naaangkop na mga anggulo. Bilang resulta, kumuha kami ng isang yari na modelo (na alam lang kung paano maghanap ng pizza) at sa tulong nito ay pinaghiwalay namin ang basura. Susunod, kasama sa pamagat ng larawan ang pangalan ng pizza - kaya inayos namin ito sa mga folder, ngunit lumabas na ang mga pangalan ay hindi nag-tutugma sa katotohanan at kailangan naming linisin ito gamit ang aming mga kamay. Sa huli, may mga 500-600 na larawan ang natitira, malinaw na ito ay isang hindi gaanong halaga, ngunit gayunpaman, ito ay sapat na upang paghiwalayin ang 10 pizza mula sa isa't isa.

Upang sanayin ang grid, kinuha namin ang pinakamurang virtual machine sa Azure sa isang NVIDIA Tesla K80. Sinanay nila ito sa loob ng 100 epoch, ngunit malinaw na ang network ay oversaturated pagkatapos ng 50 epoch, dahil sa katotohanan na mayroong maliit na dataset.

Sa totoo lang, ang buong problema ay ang kakulangan ng magandang data.

Kodim-pizza

Maaaring nalito natin nang kaunti ang mga termino, ngunit dapat nating isaalang-alang na wala tayong anumang karanasan sa pagtatrabaho sa lahat ng mga bagay na ito.

GUI para sa NOOBS (console para sa pag-order ng pizza)

Misha Kumachev (Ceridan), Zhenya Bikkinin, Zhenya Vasiliev

Pinagsama-sama namin ang isang prototype ng isang console application para sa mga geeks, salamat sa kung saan maaari kang mag-order ng pizza sa pamamagitan ng terminal o command line, o kahit na isama ito sa pipeline ng deployment at, sa matagumpay na paglabas, maghatid ng pizza sa opisina.

Kodim-pizza

Ang gawain ay nahahati sa ilang bahagi: nalaman namin kung paano gumagana ang aming API para sa mga mobile application, binuo ang aming sariling CLI gamit ang oclif at na-configure ang paglalathala ng package na aming nakolekta. Ang huling gawain ay nagsasangkot ng ilang hindi kasiya-siyang minuto patungo sa pagtatapos ng hackathon. Lahat ay gumana nang lokal para sa amin, at kahit na ang mga lumang nai-publish na bersyon ng package ay gumana, ngunit ang mga bago (na nagdagdag ng mas cool na mga tampok at emoticon) ay tumangging gumana. Humigit-kumulang 40 minuto kaming nagsusumikap na malaman kung ano ang nangyari, ngunit sa huli ang lahat ay gumana nang mag-isa).

Ang aming maximum na programa para sa hackathon ay isang tunay na order ng pizza sa opisina sa pamamagitan ng aming CLI. Pinatakbo namin ang lahat ng isang dosenang beses sa test bench, ngunit nanginginig pa rin ang aking mga kamay nang pumasok ako sa mga utos sa produksyon.

Kodim-pizza

Bilang isang resulta, sa wakas ay nagawa namin ito!

Kodim-pizza

CourierGo

Anton Bruzhmelev (may-akda), Vanya Zverev, Gleb Lesnikov (entropy), Andrey Sarafanov

Kinuha namin ang ideya ng isang "App for Courier".

Background tungkol sa paghahanda.Sa una, iniisip ko kung anong uri ng mga tampok ang maaaring nasa application? Ang sumusunod na listahan ng pag-andar ay lumitaw:

  • Nagla-log in ang application sa delivery cash register gamit ang code.
  • Ang application ay agad na nagpapakita ng magagamit na mga order at mga order na kailangang kunin.
  • Itinatala ng courier ang order at dinadala ito sa paglalakbay.
  • Ipinakita sa kanya ang tinatayang oras at kung siya ay nasa oras o hindi.
  • Ipinapakita sa kliyente na umalis na ang courier.
  • Nagsisimulang ipakita sa kliyente ang punto ng courier sa mapa at ang tinantyang oras.
  • Maaaring sumulat ang courier sa kliyente sa chat mula sa application.
  • Maaaring sumulat ang kliyente sa courier sa pamamagitan ng chat mula sa application.
  • Limang minuto bago dumating, nakatanggap ang kliyente ng mensahe na malapit na ang courier, maghanda.
  • Ang mga tala ng courier sa aplikasyon ay dumating na siya at naghihintay.
  • Tumatawag ang courier mula sa application sa isang pag-click at iniulat na (tumataas, dumating na, atbp.)
  • Tinatanggap ng kliyente ang order at nagpasok ng PIN code mula sa aplikasyon o SMS upang kumpirmahin ang paghahatid. (bilang isang lagda) Upang hindi makumpleto ng courier ang paghahatid nang maaga kung siya ay huli.
  • Ang order ay minarkahan bilang naihatid sa system.

Dagdag pa ng ilang alternatibong sitwasyon:

  • Maaaring markahan ng courier ang order bilang hindi naihatid at piliin ang dahilan.
  • Kung huli ka, maaaring mag-isyu ang courier ng electronic certificate sa pamamagitan ng SMS na may isang button. O awtomatikong darating ang sertipiko kung hindi naabot ang deadline ng paghahatid.

Ang pakiramdam ng pangako at pangangailangan ng proyektong ito ay, siyempre, nagpapasigla.

Kinabukasan nagpunta kami sa tanghalian kasama ang koponan at tinalakay kung ano ang magiging hitsura ng minimum na functionality ng application.

Bilang resulta, nabuo ang sumusunod na listahan ng mga dapat gawin sa hackathon:

  • Mag-login sa delivery cash register.
  • Ipakita ang kasalukuyang posisyon.
  • Magpadala ng data sa isang panlabas na API (mga coordinate, natanggap ang order, naihatid ang order).
  • Tumanggap ng data mula sa panlabas na API (kasalukuyang mga courier order).
  • Magpadala ng kaganapan na nagsasaad na kinuha mo ang order para sa paghahatid/paghatid.
  • Ipakita ang kasalukuyang posisyon ng courier sa mapa sa website.

Ang pangunahing gawain, tulad ng tila, ay nakasalalay sa paglikha ng backend, ang application mismo (pagkatapos ng mga talakayan, pinili namin ang ReactNative upang bumuo ng application, o sa halip ang balangkas para dito - expo.io, na nagpapahintulot sa iyo na huwag magsulat ng katutubong code sa lahat). Sa mga tuntunin ng backend, sa una ay nagkaroon ng pag-asa kay Vanya Zverev, dahil naranasan niya ang pagtatrabaho sa aming template ng serbisyo at mga k8 (kung aling trabaho ang kinuha niya). Kinuha namin ni Andrey Sarafanov ang ReactNative para sa isang spin.

Nagpasya akong subukan na agad na lumikha ng isang gumaganang imbakan para sa proyekto mismo. Sa 12 ng gabi ay nakita ko ang katotohanan na ang geolocation sa background ay hindi gumagana nang maayos sa ReactNative, kung hindi ka sumulat ng katutubong code, medyo nabigo ako. Pagkatapos ay bumitaw ako nang mapagtanto kong binabasa ko ang dokumentasyon hindi ng expo.io framework, ngunit ng ReactNative. Bilang resulta, sa paglipas ng gabi ay naunawaan ko na kung paano makuha ang kasalukuyang posisyon sa expo.io at gumuhit ng hiwalay na mga screen (para sa pag-login, pagpapakita ng order, atbp.).

Kodim-pizza

Sa umaga sa hackathon, hinikayat nila si Gleb sa kanilang super-promising na proyekto. Mabilis silang nakabuo ng plano kung ano ang dapat gawin.

Kodim-pizza

Nagkamali kami nang, alinsunod sa template ng proyekto, sinubukan naming makipag-ugnayan hindi sa pamamagitan ng HTTP, ngunit sa pamamagitan ng GRPC, dahil walang nakakaalam kung paano bumuo ng GRPC client para sa JavaScript. Sa huli, pagkatapos na gumugol ng halos isang oras at kalahati dito, tinalikuran namin ang ideyang ito. Dahil dito, nagsimulang gawing muli ng mga nasa back-end ang natapos na server mula GRPC hanggang WebApi. Pagkalipas ng kalahating oras, sa wakas ay nakapag-set up kami ng komunikasyon sa pagitan ng application at ng backend, tingnan mo. Ngunit kasabay nito, halos tapusin na ni Gleb ang pag-deploy sa mga k8 at kasama ang awtomatikong pag-deploy ng isang commit sa master. πŸ™‚

Pinili namin ang MySQL bilang isang imbakan upang hindi makipagsapalaran kahit man lang sa database (mayroon kaming mga iniisip tungkol sa CosmosDb).

Kodim-pizza

Sa buod:

  • Ipinatupad ang pag-save ng kasalukuyang mga coordinate ng courier mula sa application patungo sa database.
  • Nag-install kami ng RabbitMQ at nag-subscribe sa mga mensahe tungkol sa pagkuha ng courier ng isang order upang agad na maipakita ang order mula sa courier sa application.
  • Sinimulan naming i-save ang oras ng paghahatid ng order sa aming database pagkatapos na pinindot ng courier ang isang pindutan sa application. Wala kaming oras upang magdagdag ng pagpapadala ng isang kaganapan pabalik sa rebbit na ang order ay naihatid.
  • Gumawa ako ng display ng mapa sa page ng currentorder sa website na may kasalukuyang posisyon ng courier. Ngunit ang pagpapaandar na ito ay nanatiling medyo hindi natapos, dahil hindi posible na i-configure ang CORS sa kapaligiran upang makatanggap ng mga coordinate mula sa aming bagong serbisyo.

M87

Roma Bukin, Gosha Polevoy (georgepolevoy), Artyom Trofimushkin

Nais naming magpatupad ng isang OpenID Connect provider, dahil sa ngayon ay gumagamit kami ng isang authentication protocol ng aming sariling disenyo, at ito ay lumilikha ng ilang mga paghihirap: mga custom na library ng kliyente, hindi maginhawang trabaho sa bahagi ng mga panlabas na kasosyo, posibleng mga problema sa seguridad (pagkatapos ng lahat , OAuth2.0 at OpenID Connect sa pagpapatupad ng reference ay maaaring ituring na ligtas, ngunit hindi ako sigurado sa aming solusyon).

Kodim-pizza

Gumawa kami ng isang hiwalay na serbisyo na tumutulad sa isang serbisyo para sa pag-iimbak ng personal na data upang lumikha ng isang maliit na Country-Agnostic na modelo ng isang provider ng pagpapatotoo na pupunta sa isang hiwalay na serbisyo para sa personal na data (ito ay magiging posible sa hinaharap na magkaroon ng isang serbisyo na may na maaaring mag-log in gamit ang pagpaparehistro ng account sa anumang bansa, at kasabay nito ay sumusunod sa GDPR at iba pang mga pederal na batas). Ginawa namin ang bahaging ito, tulad ng ginawa ng provider, at matagumpay na naiugnay ang mga ito sa isa't isa. Susunod, kinailangan na gumawa ng API na mapoprotektahan ng mga token na ibinibigay ng provider, suportahan ang kanilang pagsisiyasat sa sarili sa pamamagitan ng provider at ibalik ang protektadong data kung ang kahilingan ay nasiyahan sa mga patakaran sa awtorisasyon (tinitingnan namin na ang user ay napatotohanan ayon sa Bearer scheme , ang kanyang token ay naglalaman ng isang tiyak na saklaw + y Ang user mismo ay may pahintulot na nagpapahintulot sa tawag na gawin). Natapos din ang bahaging ito. Ang huling bahagi ay isang JavaScript client, na bibigyan ng isang token, sa tulong kung saan ito ay tatawag ng isang protektadong API. Wala kaming oras para gawin ang bahaging ito. Iyon ay, ang buong functional na bahagi ay handa na, ngunit ang front-end na bahagi ay hindi handa upang ipakita ang pag-andar ng buong system.

E-E-E (laruan)

Dima Afonchenko, Sasha Konovalov

Gumawa kami ng mini-toy sa yunka kung saan itinapon ng mga malikot na kamay ang sausage sa pizza. Kung mali ang pagkakalagay mo ng sausage, may lalabas na malungkot na mensaheng "Tinanggihan" sa screen, at kung nailagay nang tama ang lahat ng sausage, lilitaw ang isang random na katotohanan tungkol sa pizza.

Kodim-pizza

Nais naming gumawa ng pangalawang antas sa paghagis ng mga kamatis, ngunit wala kaming oras.

Kodim-pizza

Maikling pagpapatuloy: sino ang nanalo?

Bago ang hackathon, nag-usap kami ng mga lalaki at tinanong ko kung anong premyo ang gusto nilang matanggap kung sila ay manalo. Lumalabas na ang pinakamahalagang premyo ay β€œang daan patungo sa pagkain.”

Kodim-pizza

Samakatuwid, asahan na mag-anunsyo kami ng isang laro na may mga kamay na naglalagay ng mga pepperon sa pizza sa lalong madaling panahon.

Bilang isang matulungin na mambabasa ay maaaring napansin, ang koponan na "E-E-E (laruan)" ay nanalo. Congratulations guys!

Ang mga rehistradong user lamang ang maaaring lumahok sa survey. Mag-sign in, pakiusap

Aling proyekto ang pinakanagustuhan mo?

  • Oleg Learning (pag-aaral ng makina)

  • GUI para sa NOOBS

  • CourierGo

  • M87

  • E-E-E

5 mga gumagamit ang bumoto. 3 user ang umiwas.

Pinagmulan: www.habr.com

Magdagdag ng komento