{"id":34626,"date":"2019-10-31T21:59:30","date_gmt":"2019-10-31T18:59:30","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kodim-pitstsa\/"},"modified":"2019-10-31T21:59:30","modified_gmt":"2019-10-31T18:59:30","slug":"kodim-pitstsa","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/novosti-interneta\/kodim-pitstsa","title":{"rendered":"Koodime\u2013pitsa","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tere, Habr. Me korraldasime spontaanselt esimese sisemise hackathoni. Tahtsin jagada teiega oma muresid ja j\u00e4reldusi selle kahe n\u00e4dalase ettevalmistuse kohta, samuti projekte, mis selle k\u00e4igus tekkisid.<\/p>\n<p><img decoding=\"async\" alt=\"Koodime\u2013pitsa\" src=\"\/wp-content\/uploads\/2019\/05\/938168da11e489bcf2112a11bc3f220e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Igav osa neile, kes huvituvad turundusest<\/h2>\n<p>\nAlustan v\u00e4ikese looga. <\/p>\n<p>Aprilli algus. Meie kontoris toimub esimene hackathon MskDotNet Community. Tatuini lahing on k\u00e4imas, meie galaktikas seekord. Laup\u00e4ev. 20 meeskonda. Pizza. K\u00f5ik on v\u00e4ga kodune (<noindex><a rel=\"nofollow\" href=\"https:\/\/vk.com\/album-125321990_262572840\">t\u00f5endid<\/a><\/noindex>). \u00d5hupall R2-D2 piilub saalis. Meeskonnad kirjutavad k\u00f5ige \u00f5iget algoritmi, et l\u00e4bida k\u00f5ige ohtlikum v\u00f5idus\u00f5it kaardil. Me l\u00fckkame esimesed s\u00f5idud edasi. K\u00fcpsised ja kohv p\u00e4\u00e4stavad p\u00e4eva. Ootasime korraldajatega, et laup\u00e4eval lahkub palju inimesi p\u00e4rast l\u00f5una. Aga ei. 12 tundi kodeerimist on m\u00f6\u00f6das. Finaal. Midagi l\u00e4heb katki, midagi ei k\u00e4ivitu. Kuid k\u00f5ik on \u00f5nnelikud. Meie meeskond v\u00f5idab. Oleme kahe korda \u00f5nnelikud. <\/p>\n<p>Jagame r\u00f5\u00f5mu Slacks ja mulle tuleb m\u00f5te: \"Peame korraldama oma hackathoni.\" Kirjutan oma CTO-le Sa\u0161ale. Vaikus. <\/p>\n<p>Hommik. Joon kohvi kontoris. N\u00e4en selja tagant tulemas Sashat. \"Liza, see on suurep\u00e4rane! 21. aprillil on meil oluline kuup\u00e4ev. Alustame!\" Mis? Nii kiiresti? Mida? Olen keset aprilli Syktyvkarisse praktikale s\u00f5itmas. Ja olgu selle k\u00f5igega. Teeme \u00e4ra.<\/p>\n<p>Kaks n\u00e4dalat on j\u00e4\u00e4nud. Ma pole kunagi olnud ainu\u00fcksi hacketoni korraldaja. Isegi mitte sise\u00fcrituse puhul. Loe artikleid selle teema kohta. Kohutav. Vaja on mitu kuud. Vaja on mitu inimest. Tuleb v\u00e4lja m\u00f5elda m\u00e4lestusesemed, auhinnad, tingimused, ajakava, kaasata inimesi, m\u00f5ista eesm\u00e4rki, eelarvet. V\u00f5ib-olla isegi elut\u00e4henduses selguse saamiseks. Ma kindlasti ei saa hakkama. Ja kuni sina lugesid ja valmistusid, on juba n\u00e4dal m\u00f6\u00f6dunud. On viimane aeg j\u00e4tta artiklid k\u00f5rvale ja midagi ette v\u00f5tta. <\/p>\n<p><b class=\"spoiler_title\">Siin on meie kontrollnimekiri sise\u00fcrituse hacketoni l\u00e4biviimiseks \u00fche n\u00e4dalaga.<\/b><\/p>\n<ul>\n<li><b>Plaani<\/b>: rahulikult istud ja kirjutad nimekirja sellest, mida on hacketoni jaoks vajalik teha. <i>30 minutit<\/i>.<\/li>\n<li><b>\u00dclesanne<\/b>: osalejad esitavad ja valivad ise projektid, mida nad tahavad luua Google Sheetsis. <i>Taustateenus, 2 tundi<\/i>.<\/li>\n<li><b>Ajakava<\/b>: kirjutad kiire ajajaotuse, arvestades 3 pausi ja l\u00f5petamist. <i>20 minutit<\/i>.<\/li>\n<li><b>Meeskonnad<\/b>: postitat s\u00f5num hackathonist koos CDO ajakava ja IT-kanalitega Slackis\/e-kirjades jne ning lood eraldi kanali hackathoniks. Seal k\u00f5ik jagunevad meeskondadesse, samas kui m\u00e4\u00e4ramata j\u00e4\u00e4nud teevad seda hackathoni esimeses 5 minutit. <i>Taustateenus, 2 tundi<\/i>.<\/li>\n<li><b>Tee mudelid<\/b>: m\u00f5tleme merchandise'i kahe arendajaga, saadame disainerile joonistamiseks, saad valmis. <i>Taustaprojekt, 3 p\u00e4eva<\/i>.<\/li>\n<li><b>Hackathon<\/b>: tuled kontorisse, koordineerid alguses k\u00f5iki, teed oma asju, loed Redditi, r\u00e4\u00e4gid uhke n\u00e4oga igast pausist v\u00e4rskest pitsast, pildistad p\u00e4ikeseloojangut, kuulutad finaali v\u00e4lja, h\u00e4\u00e4lestate koos ja valite v\u00f5itja. <i>1 p\u00e4ev<\/i>.<\/li>\n<li><b>T\u00e4htede all<\/b>: muidugi m\u00f5tled pidevalt sellele, et k\u00f5ik l\u00e4heks h\u00e4sti. Loomulikult ei n\u00e4e k\u00f5ik sinu s\u00f5numit ja m\u00f5nega on parem isiklikult r\u00e4\u00e4kida. Loomulikult, kui keegi sind aitaks, oleks k\u00f5ik ka kaks korda lihtsam (mind aitas imeline Aljona).<\/li>\n<\/ul>\n<h2>Mugavam osa hackathoni kuup\u00e4evast<\/h2>\n<p>\nMiks 21. aprill? See p\u00e4ev on meie jaoks eriline. T\u00e4pselt aasta tagasi, 21. aprillil, kukkusime koormuse all esmakordselt p\u00e4rast F\u00f6deraalse Reklaamikampaania k\u00e4ivitamist. J\u00e4rgmisel p\u00e4eval, p\u00fchap\u00e4eval, oli meie meeskond t\u00f6\u00f6l alates kella 8. Siis l\u00f5ime Trello's tahvli `sundayhackathon` ja algas n\u00e4dal, mil t\u00f6\u00f6tasime vahetustega 12 tundi p\u00e4evas. Olukord oli nii kriitiline, et meil ei olnud isegi aega s\u00fc\u00fca, ja meid toitsid teised meeskonna liikmed.<\/p>\n<p><img decoding=\"async\" alt=\"Koodime\u2013pitsa\" src=\"\/wp-content\/uploads\/2019\/05\/9d611c134267d1377a95f21a57c69687.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nRohkem detailset juttu saate lugeda <noindex><a rel=\"nofollow\" href=\"https:\/\/www.facebook.com\/story.php?story_fbid=10215961419809495&amp;id=1267477281\">Fjodor Ov\u010dinnikovi lehelt<\/a><\/noindex> (meie CEO). Alates sellest ajast on palju muutunud, kuid seda kuup\u00e4eva me kindlasti ei unusta.<\/p>\n<p>Sel aastal otsustasime, et see s\u00fcndmus v\u00e4\u00e4rib m\u00e4lestamiseks j\u00e4\u00e4dvustamist ning parimates traditsioonides korraldasime esmakordselt Dodo sisemise hackathon'i, mis kestis 10 tundi. <\/p>\n<h2>Selle hackathon'i projektide k\u00f5ige v\u00e4hem igav osa<\/h2>\n<p>\n<i>Disclaimer: k\u00f5ik kirjeldused on kirjutanud meie inimesed, seega ei ole teksti autorlus minu.<\/i><\/p>\n<h4>Oleg L\u0451rnigin (masin\u00f5pe)<\/h4>\n<p>\n<i>Dima Kochnjev, Sasha Andronov (@alexandronov)<\/i><\/p>\n<p>Soovisime luua n\u00e4rviv\u00f5rku, mis suudaks pildi pealt teada saada, milline pits on. L\u00f5puks tegime v\u00e4ga lihtsa ja m\u00e4ngulise \u2013 see tuvastab 10 pitsat, saime umbes p\u00e4evaga (~10 tundi) asja toimimise osas p\u00e4ris h\u00e4sti aru.<\/p>\n<p><img decoding=\"async\" alt=\"Koodime\u2013pitsa\" src=\"\/wp-content\/uploads\/2019\/05\/361e89bc6084abdc0e3ac3fdfb7863d2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMe m\u00f5istsime, et t\u00f6\u00f6stus on j\u00f5udnud tasemele, kus tavaline arendaja v\u00f5ib v\u00f5tta valmis raamatukogud, lugeda dokumentatsiooni ja koolitada oma n\u00e4rviv\u00f5rku ilma s\u00fcgavate teadmiste omamata. Ja see t\u00f6\u00f6tab piisavalt h\u00e4sti reaalses probleemide lahendamiseks.<\/p>\n<p>Kasutasime t\u00f6\u00f6riistu: <\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/imageai.readthedocs.io\/en\/latest\/index.html\">imageai<\/a><\/noindex> \u2014 mugav ja lihtne raamatukogu masin\u00f5ppe ja nutika n\u00e4gemise jaoks.<\/li>\n<li>Proovisime kahte mudelit \u2013 ResNet50, Yolo.<\/li>\n<li>Koodi kirjutasime loomulikult Pythonis.<\/li>\n<\/ul>\n<p>\nMeil oli 11000 fotot, kuid nende seas osutus peaaegu 3\/4 pr\u00fcgi. J\u00e4\u00e4nud piltides olid erinevad, sobimatud nurgad. L\u00f5puks valisime v\u00e4lja valmis mudeli (mis lihtsalt oskab pitsat leida) ja selle abil eemaldasime k\u00f5ige halvemad. Seej\u00e4rel, pildi nimetuses oli pitsanimi - nii korraldasime need kaustadesse, kuid selgus, et nimed ei lange kokku tegelikkusega ja tuli juba k\u00e4sitsi puhastada. L\u00f5puks j\u00e4i umbes 500-600 fotot, m\u00f5istetavalt on see t\u00fchine kogus, kuid siiski oli seda piisavalt, et 10 pitsat \u00fcksteisest eristada.<\/p>\n<p>Ketta treenimiseks kasutasime Azure'is odavaimat virtuaalmasinat NVIDIA Tesla K80-l. Sellel treenisime 100 ajast, kuid oli selge, et v\u00f5rk oli juba p\u00e4rast 50 ajast k\u00fcllastunud, kuna andmestik oli liiga v\u00e4ike.<\/p>\n<p>Tegelikult on kogu probleem hea andmete puudumine.<\/p>\n<p><img decoding=\"async\" alt=\"Koodime\u2013pitsa\" src=\"\/wp-content\/uploads\/2019\/05\/b89ba378674df1b3e899a93fc0fce86c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMe, v\u00f5ib-olla, segasime natuke termineid, kuid tuleb arvesse v\u00f5tta, et meil pole \u00fcldse kogemust k\u00f5igi nende asjadega t\u00f6\u00f6tamisel.<\/p>\n<h4>GUI for NOOBS (pitsade tellimise konsool)<\/h4>\n<p>\n<i>Misha Kumachyov (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/ceridan\/\" class=\"user_link\">Ceridan<\/a><\/noindex>), Zhena Bikkinin, Zhena Vasiliev<\/i><\/p>\n<p>Me olime valmis loonud konsooli rakenduse protot\u00fc\u00fcbi, mille abil saab tellida pitsat terminali v\u00f5i k\u00e4surea kaudu, v\u00f5i isegi integreerida selle deploy pipeline'i, et edukal v\u00e4ljalaskmisel tuua pitsat kontorisse.<\/p>\n<p><img decoding=\"async\" alt=\"Koodime\u2013pitsa\" src=\"\/wp-content\/uploads\/2019\/05\/14186ccb66d074923f89c1da47d594a1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nT\u00f6\u00f6 jagunes mitmeks osaks: uurisime, kuidas meie API mobiilirakendustele toimib, ja viisime kokku oma CLI kasutades <noindex><a rel=\"nofollow\" href=\"https:\/\/oclif.io\">oclif<\/a><\/noindex> ja seadistasime loodud paketi avaldamise. Viimase \u00fclesandega seotud m\u00f5ned ebameeldivad minutid hakathon'i l\u00f5pus. K\u00f5ik t\u00f6\u00f6tas meil kohapeal ning isegi vanad avaldatud versioonid t\u00f6\u00f6tasid, kuid uued (kus oli lisatud rohkem \u00e4gedaid funktsioone ja emotikone) ei hakanud t\u00f6\u00f6le. Me kulutasime umbes 40 minutit, et m\u00f5ista, mis valesti l\u00e4ks, kuid l\u00f5puks hakkas k\u00f5ik maagiliselt ise t\u00f6\u00f6tama).<\/p>\n<p>Meie maksimaalsed eesm\u00e4rgid hakathon'iks olid t\u00f5eline pitsatellimus meie CLI kaudu. Testisime seda k\u00fcmneid kordi katse keskkonnas, kuid mul olid siiski k\u00e4ed v\u00e4risevad, kui ma tellimusi tootmisesse sisestasin.<\/p>\n<p><img decoding=\"async\" alt=\"Koodime\u2013pitsa\" src=\"\/wp-content\/uploads\/2019\/05\/5392e269446fcd09ceb9e16a8f9c4101.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKokkuv\u00f5ttes \u2014 me saime sellega hakkama!<\/p>\n<p><img decoding=\"async\" alt=\"Koodime\u2013pitsa\" src=\"\/wp-content\/uploads\/2019\/05\/c966b190a6fe8a2f88a3973305cd03fb.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>CourierGo<\/h4>\n<p>\n<i>Anton Bru\u017emel\u00ebv (autor), Vanja Zverevi, Gleb Lesnikov (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/entropy\/\" class=\"user_link\">entropy<\/a><\/noindex>), Andrej Sarafanov<\/i><\/p>\n<p>V\u00f5tsime inspiratsiooni \"Kuriiri rakendusest\".<\/p>\n<p><b class=\"spoiler_title\">Eellugu ettevalmistusest.<\/b>Alguses m\u00f5tlesin, millised funktsioonid v\u00f5iks rakenduses olla? Tekkis selline funktsioonide nimekiri:<\/p>\n<ul>\n<li>Rakendus logib sisse kohaletoimetamise kassasse koodi abil.<\/li>\n<li>Rakenduses on kohe n\u00e4htavad saadaval olevad tellimused ja tellimused, mida tuleb v\u00f5tta.<\/li>\n<li>Kuriir m\u00e4rgib tellimuse ja v\u00f5tab selle s\u00f5iduks.<\/li>\n<li>Kuriirile kuvatakse arvutatud aeg ja kas ta j\u00f5uab kohale v\u00f5i mitte.<\/li>\n<li>Klient n\u00e4eb, et kuriir on teele asunud.<\/li>\n<li>Kliendile hakkab kuvatakse kuriiri asukoht kaardil ja arvutatud aeg.<\/li>\n<li>Kuriir saab rakendusest kirjutada kliendile vestluses.<\/li>\n<li>Klient saab rakendusest kirjutada kuriirile vestluses.<\/li>\n<li>Viie minuti jooksul enne saabumist saab klient s\u00f5numi, et kuriir on l\u00e4hedal, olge valmis.<\/li>\n<li>Kuriir m\u00e4rgib rakenduses, et ta on kohal ja ootab.<\/li>\n<li>Kuriir helistab rakendusest \u00fche klikkiga ja teatab, et (tuleb, on l\u00e4henemas jne).<\/li>\n<li>Klient aktsepteerib tellimuse ja sisestab rakendusest v\u00f5i SMS-iga saadud PIN-koodi, et kinnitada kohaletoimetamist (nagu allkiri). Et kuriir ei saaks kohaletoimetamist enne t\u00e4htaega l\u00f5petada, kui viibib.<\/li>\n<li>Tellimus m\u00e4rgitakse s\u00fcsteemis kohaletoimetatuks.<\/li>\n<\/ul>\n<p>Lisaks paar alternatiivset stsenaariumi:<\/p>\n<ul>\n<li>Kuller saab tellimuse m\u00e4rgata kui mitte kohale toimetatud ning valida p\u00f5hjuse.<\/li>\n<li>Kuller v\u00f5ib hilinemise korral \u00fche nupuvajutusega saata elektroonilise sertifikaadi SMS-i kaudu. V\u00f5i sertifikaat saadetakse automaatselt, kui tarne t\u00e4htaega ei t\u00e4ideta.<\/li>\n<\/ul>\n<p>\nTunde perspektiivsuse ja projekti vajalikkusest laadis kindlasti energiat.<\/p>\n<p>J\u00e4rgmisel p\u00e4eval k\u00e4isime meeskonnaga l\u00f5unal ja arutasime, milline v\u00f5iks olla rakenduse minimaalne funktsionaalsus. <\/p>\n<p>Tulemuseks tekkis j\u00e4rgmine nimekiri asjadest, mida hackathonil pidime \u00e4ra tegema:<\/p>\n<ul>\n<li>Logi sisse kohaletoimetamise kassasse.<\/li>\n<li>Kuva praegune asukoht.<\/li>\n<li>Saata andmed v\u00e4lishaudele (koordinaadid, tellimus v\u00f5etud, tellimus toimetatud).<\/li>\n<li>Saada andmed v\u00e4lishaudele (kulleri praegused tellimused).<\/li>\n<li>Saada teade, et tellimus on v\u00f5etud toimetamiseks\/toimetatud.<\/li>\n<li>Kuva kulleri praegune asukoht kaardil veebisaidil.<\/li>\n<\/ul>\n<p>\nP\u00f5hit\u00f6\u00f6, nagu tundus, seisnes tagaplaani loomises, rakenduse endi (p\u00e4rast arutelusid valisime rakenduse arendamiseks ReactNative, t\u00e4psemalt \u00fcmber selle \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/expo.io\/\">expo.io<\/a><\/noindex>, mis ei vaja kirjutada natiivset koodi). Backend'i osas oli alguses lootus Vanya Zverevi peale, kes oli meie teenuse ja k8s'i malli osas kogenud (mida ta endale ka v\u00f5ttis). ReactNative'i katsuda hakkasime mina ja Andrei Sarafanov.<\/p>\n<p>Otsustasin kohe proovida luua t\u00f6\u00f6tavat repot projekti jaoks. Kell 12 \u00f6\u00f6sel sattusin sellele, et ReactNative'is t\u00f6\u00f6tab geolokatsioon taustal halvasti, kui ei kirjuta natiivset koodi, ja olin pisut frustreeritud. Siis m\u00f5istsin, et loen mitte expo.io raamistikku, vaid ReactNative'i dokumentatsiooni. L\u00f5puks sain \u00f5htuks juba aru, kuidas saada expo.io kaudu praegust asukohta ja joonistada eraldi ekraanid (nt sisselogimise, tellimuse kuvamiseks jne).<\/p>\n<p><img decoding=\"async\" alt=\"Koodime\u2013pitsa\" src=\"\/wp-content\/uploads\/2019\/05\/2412edc5937b44e141d719269565dfee.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHommikul hackathon'il meelitasime Gleb'i oma \u00fclipotentsiaalsesse projekti. Kiirelt koostasime plaani, mida teha.<\/p>\n<p><img decoding=\"async\" alt=\"Koodime\u2013pitsa\" src=\"\/wp-content\/uploads\/2019\/05\/4bc0ebef3ed6b661bd25ef75ac6d536d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTehtud viga, kui proovisime projekti malliga suhtlust korraldada mitte HTTP kaudu, vaid GRPC kaudu, kuna keegi ei osanud JavaScripti jaoks GRPC-klienti kokku panna. L\u00f5puks, kulutades sellele umbes poolteist tundi, loobusime sellest ideest. Selle t\u00f5ttu asusid poisid ka backendis valmis GRPC-serveri \u00fcmber tegema WebApi peale. Poolteise tunni p\u00e4rast saime l\u00f5puks rakenduse suhtlemise backendiga seadistatud, imet. Kuid sel ajal l\u00f5petas Gleb peaaegu k8s-is deploy'i ja lisaks automaatse deploy'i masterisse commitide p\u00f5hjal. \ud83d\ude42<\/p>\n<p>Andmehoidjana valisime MySQL, et v\u00e4hemalt andmebaasi osas ei riskiks (olid m\u00f5tted CosmosDb peale).<\/p>\n<p><img decoding=\"async\" alt=\"Koodime\u2013pitsa\" src=\"\/wp-content\/uploads\/2019\/05\/2ae381b2006330915ae38d55f2ac08cd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKokkuv\u00f5ttes: <\/p>\n<ul>\n<li>Realisime kohalike koordinaatide salvestamise kullerist rakenduses andmebaasi.<\/li>\n<li>Lisatud on RabbitMQ ja tellitud teated kulleri tellimuse v\u00f5tmise kohta, et kuvada tellimus kohe rakenduses kullerile.<\/li>\n<li>Alustasime tellimuse kohaletoimetamise aja salvestamist andmebaasi, p\u00e4rast seda kui kuller vajutas rakenduses nuppu. Ei j\u00f5udnud lisada s\u00fcndmuste edastamist tagasi Rabbiti, et tellimus on kohaletoimetatud.<\/li>\n<li>Tehtud on kaartide kuvamine lehe currentorder peal, kus on kuvatud kulleri praegune asukoht. Kuid see funktsionaalsus j\u00e4i veidi poolikuks, kuna keskkonnas ei \u00f5nnestunud CORS-i seadistada, et saada koordinaate meie uuest teenusest.<\/li>\n<\/ul>\n<p><\/p>\n<h4>M87<\/h4>\n<p>\n<i>Roma Bukin, Gosha Polevoy (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/georgepolevoy\/\" class=\"user_link\">georgepolevoy<\/a><\/noindex>), Artyom Trofimushkin<\/i><\/p>\n<p>Soovisime rakendada OpenID Connect pakkujat, kuna hetkel kasutame enda arendatud autentimise protokolli, mis toob kaasa mitmeid raskusi: kohandatud klienditeegid, ebamugav koost\u00f6\u00f6 v\u00e4liste partneritega ja v\u00f5imalikud turvaprobleemid (ikka on OAuth2.0 ja OpenID Connect standardse rakenduse puhul ohutud, meie lahenduse osas pole ma kindel).<\/p>\n<p><img decoding=\"async\" alt=\"Koodime\u2013pitsa\" src=\"\/wp-content\/uploads\/2019\/05\/b7247acfc91045f1040535d1f404c64a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOleme loonud eraldi teenuse, mis j\u00e4ljendab isikuandmete salvestamisteenust, et luua v\u00e4ike Country-Agnostic autentimise teenuse mudel, mis k\u00e4sitleks isikuandmeid eraldi teenuses (see looks tulevikus v\u00f5imaluse luua \u00fcks teenus, mille abil saaks logida sisse mis tahes riigis ning samal ajal vastata GDPR-ile ja teistele seadustele). Selle osa tegime nagu teenusepakkuja ja seostasime need edukalt. Edasi pidi olema loodud API, mis oleks kaitstud teenusepakkuja v\u00e4ljastatud tokenitega, toetama nende introspektsiooni teenusepakkuja kaudu ja edastama kaitstud andmeid, kui p\u00e4ring vastas autoriseerimise poliitikatele (kontrollime, et kasutaja on autentitud Bearer skeemi j\u00e4rgi, tema tokenis on m\u00e4\u00e4ratud ulatus ja kasutajal on luba, mis lubab kutse tegemist). See osa tehti samuti \u00e4ra. Viimaseks komponendiks oli JavaScripti klient, kellele v\u00e4ljastati token, millega ta kutsus esile kaitstud API. Seda osa me teha ei j\u00f5udnud. See t\u00e4hendab, et kogu funktsionaalne osa oli valmis, kuid esik\u00fclg, et demonstreerida kogu s\u00fcsteemi toimimist, ei olnud valmis.<\/p>\n<h4>E-E-E (m\u00e4ng)<\/h4>\n<p>\n<i>Dima Afont\u0161enko, Sasha Konovalov<\/i><\/p>\n<p>Loome v\u00e4ikse m\u00e4ngu, kus sinised k\u00e4ed viskavad viili pitsale. Kui viskad viili valesti, ilmub ekraanile kurb tekst \u201eTagasi l\u00fckatud\u201d, ja kui viil on \u00f5igesti visatud, siis kuulete juhuslikku fakti pitsa kohta.<\/p>\n<p><img decoding=\"async\" alt=\"Koodime\u2013pitsa\" src=\"\/wp-content\/uploads\/2019\/05\/1c9daf62d4907f9a13de07ac0dd2a14e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSoovisime teha teise taseme tomatite viskamiseks, aga ei j\u00f5udnud.<\/p>\n<p><img decoding=\"async\" alt=\"Koodime\u2013pitsa\" src=\"\/wp-content\/uploads\/2019\/05\/e3d5028c8043ab1192bbb8cb31918def.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>L\u00fchike j\u00e4tk: kes v\u00f5itis?<\/h2>\n<p>\nEnne hackathonit r\u00e4\u00e4kisime noortega ja k\u00fcsisin, millist auhinda nad sooviksid saada, kui nad v\u00f5idavad. Selgus, et k\u00f5ige v\u00e4\u00e4rtuslikum auhind oleks \u201etee produktsiooni\u201d. <\/p>\n<p><img decoding=\"async\" alt=\"Koodime\u2013pitsa\" src=\"\/wp-content\/uploads\/2019\/05\/814f28de3020cc16ce0108efdbbd963d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSeega oodake varsti meilt m\u00e4ngu, kus k\u00e4ed viskavad pepperoni pitsale.<\/p>\n<blockquote><p>Kuidas t\u00e4helepanelik lugeja on m\u00e4rganud, v\u00f5itis meeskond \u201eE-E-E (m\u00e4ng)\u201d. Palju \u00f5nne neile!<\/p><\/blockquote>\n<p class=\"for_users_only_msg\">Ainult registreeritud kasutajad saavad k\u00fcsitluses osaleda. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Logige sisse<\/a><\/noindex>, palun.<\/p>\n<h2 class=\"default-block__polling-title\">Milline projekt meeldis teile k\u00f5ige rohkem?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Oleg L\u0451rnigin (masin\u00f5pe)<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    GUI for NOOBS<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    CourierGo<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    M87<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    E-E-E<\/p>\n<\/li>\n<\/ul>\n<p>    H\u00e4\u00e4letas 5 kasutajat. 3 kasutajat eemaldasid end.<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzaio\/blog\/449344\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041c\u044b \u0441\u043f\u043e\u043d\u0442\u0430\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0445\u0430\u043a\u0430\u0442\u043e\u043d. \u0420\u0435\u0448\u0438\u043b\u0430 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u0441\u0432\u043e\u0438\u043c\u0438 \u0431\u043e\u043b\u044f\u043c\u0438 \u0438 \u0432\u044b\u0432\u043e\u0434\u0430\u043c\u0438 \u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u043a \u043d\u0435\u043c\u0443 \u0437\u0430 2 \u043d\u0435\u0434\u0435\u043b\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438\u0441\u044c. \u0421\u043a\u0443\u0447\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442\u0441\u044f \u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u043e\u043c \u041d\u0430\u0447\u043d\u0443 \u0441 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438. \u041d\u0430\u0447\u0430\u043b\u043e \u0430\u043f\u0440\u0435\u043b\u044f. \u0412 \u043d\u0430\u0448\u0435\u043c \u0432 \u043e\u0444\u0438\u0441\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u0445\u0430\u043a\u0430\u0442\u043e\u043d MskDotNet Community. \u0411\u0438\u0442\u0432\u0430 \u0437\u0430 \u0422\u0430\u0442\u0443\u0438\u043d \u0432 \u0440\u0430\u0437\u0433\u0430\u0440\u0435, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26093,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-34626","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-novosti-interneta"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041c\u044b \u0441\u043f\u043e\u043d\u0442\u0430\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0445\u0430\u043a\u0430\u0442\u043e\u043d. \u0420\u0435\u0448\u0438\u043b\u0430 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u0441\u0432\u043e\u0438\u043c\u0438 \u0431\u043e\u043b\u044f\u043c\u0438 \u0438 \u0432\u044b\u0432\u043e\u0434\u0430\u043c\u0438 \u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u043a \u043d\u0435\u043c\u0443 \u0437\u0430 2 \u043d\u0435\u0434\u0435\u043b\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438\u0441\u044c. \u0421\u043a\u0443\u0447\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442\u0441\u044f \u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u043e\u043c \u041d\u0430\u0447\u043d\u0443 \u0441 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438. \u041d\u0430\u0447\u0430\u043b\u043e \u0430\u043f\u0440\u0435\u043b\u044f. \u0412 \u043d\u0430\u0448\u0435\u043c \u0432 \u043e\u0444\u0438\u0441\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u0445\u0430\u043a\u0430\u0442\u043e\u043d MskDotNet Community. \u0411\u0438\u0442\u0432\u0430 \u0437\u0430 \u0422\u0430\u0442\u0443\u0438\u043d \u0432 \u0440\u0430\u0437\u0433\u0430\u0440\u0435,\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/novosti-interneta\/kodim-pitstsa\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u043e\u0434\u0438\u043c\u2013\u043f\u0438\u0446\u0446\u0430 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041c\u044b \u0441\u043f\u043e\u043d\u0442\u0430\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0445\u0430\u043a\u0430\u0442\u043e\u043d. \u0420\u0435\u0448\u0438\u043b\u0430 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u0441\u0432\u043e\u0438\u043c\u0438 \u0431\u043e\u043b\u044f\u043c\u0438 \u0438 \u0432\u044b\u0432\u043e\u0434\u0430\u043c\u0438 \u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u043a \u043d\u0435\u043c\u0443 \u0437\u0430 2 \u043d\u0435\u0434\u0435\u043b\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438\u0441\u044c. \u0421\u043a\u0443\u0447\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442\u0441\u044f \u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u043e\u043c \u041d\u0430\u0447\u043d\u0443 \u0441 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438. \u041d\u0430\u0447\u0430\u043b\u043e \u0430\u043f\u0440\u0435\u043b\u044f. \u0412 \u043d\u0430\u0448\u0435\u043c \u0432 \u043e\u0444\u0438\u0441\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u0445\u0430\u043a\u0430\u0442\u043e\u043d MskDotNet Community. \u0411\u0438\u0442\u0432\u0430 \u0437\u0430 \u0422\u0430\u0442\u0443\u0438\u043d \u0432 \u0440\u0430\u0437\u0433\u0430\u0440\u0435,\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/novosti-interneta\/kodim-pitstsa\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:59:30+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:59:30+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Koodime\u2013pitsat | ProHoster","description":"Tere, Habr. Me korraldasime spontaanselt oma esimese sisemise hackathoni. Otsustasin teie jaoks jagada oma valusid ja j\u00e4reldusi selle ettevalmistamisest kahe n\u00e4dala jooksul ning ka projekte, mis valminud on. Igav osa neile, keda huvitab turundus. Alustan v\u00e4ikese looga. Aprilli algus. Meie kontoris toimub esimene hackathon MskDotNet Community. V\u00f5itlus Tatooine'i nimel on k\u00e4imas,","canonical_url":"https:\/\/prohoster.info\/et\/blog\/novosti-interneta\/kodim-pitstsa","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u043e\u0434\u0438\u043c\u2013\u043f\u0438\u0446\u0446\u0430 | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041c\u044b \u0441\u043f\u043e\u043d\u0442\u0430\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0445\u0430\u043a\u0430\u0442\u043e\u043d. \u0420\u0435\u0448\u0438\u043b\u0430 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u0441\u0432\u043e\u0438\u043c\u0438 \u0431\u043e\u043b\u044f\u043c\u0438 \u0438 \u0432\u044b\u0432\u043e\u0434\u0430\u043c\u0438 \u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u043a \u043d\u0435\u043c\u0443 \u0437\u0430 2 \u043d\u0435\u0434\u0435\u043b\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438\u0441\u044c. \u0421\u043a\u0443\u0447\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442\u0441\u044f \u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u043e\u043c \u041d\u0430\u0447\u043d\u0443 \u0441 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438. \u041d\u0430\u0447\u0430\u043b\u043e \u0430\u043f\u0440\u0435\u043b\u044f. \u0412 \u043d\u0430\u0448\u0435\u043c \u0432 \u043e\u0444\u0438\u0441\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u0445\u0430\u043a\u0430\u0442\u043e\u043d MskDotNet Community. \u0411\u0438\u0442\u0432\u0430 \u0437\u0430 \u0422\u0430\u0442\u0443\u0438\u043d \u0432 \u0440\u0430\u0437\u0433\u0430\u0440\u0435,","og:url":"https:\/\/prohoster.info\/et\/blog\/novosti-interneta\/kodim-pitstsa","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:59:30+00:00","article:modified_time":"2019-10-31T18:59:30+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"34626","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 19:59:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:17:24","updated":"2026-01-21 19:59:19"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/34626","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=34626"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/34626\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/26093"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=34626"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=34626"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=34626"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}