{"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\/de\/blog\/novosti-interneta\/kodim-pitstsa","title":{"rendered":"Coden \u2013 Pizza","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hallo, Habr. Wir haben spontan unser erstes internes Hackathon veranstaltet. Ich m\u00f6chte meine Erfahrungen und Erkenntnisse \u00fcber die Vorbereitung in den letzten zwei Wochen sowie die entstandenen Projekte mit euch teilen.<\/p>\n<p><img decoding=\"async\" alt=\"Coden \u2013 Pizza\" 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>Der langweilige Teil f\u00fcr diejenigen, die sich f\u00fcr Marketing interessieren.<\/h2>\n<p>\nIch fange mit einer kleinen Geschichte an. <\/p>\n<p>Anfang April. In unserem B\u00fcro findet das erste Hackathon der MskDotNet Community statt. Der Kampf um Tatooine ist in vollem Gange, diesmal in unserer Galaxie. Samstag. 20 Teams. Pizza. Alles sehr herzlich (<noindex><a rel=\"nofollow\" href=\"https:\/\/vk.com\/album-125321990_262572840\">Beweise<\/a><\/noindex>). Ein aufblasbarer R2-D2 schwebt durch den Raum. Die Teams entwickeln die besten Algorithmen, um das gef\u00e4hrlichste Rennen auf der Karte zu gewinnen. Wir verschieben den Start der ersten Rennen. Kekse und Kaffee helfen uns. Wir hatten von den Organisatoren erwartet, dass viele am Samstag nachmittags gehen w\u00fcrden. Aber das passierte nicht. 12 Stunden Programmierung sind vorbei. Das Finale. Etwas f\u00e4llt aus, etwas l\u00e4sst sich nicht starten. Aber alle sind gl\u00fccklich. Unser Team gewinnt. Wir sind doppelt gl\u00fccklich. <\/p>\n<p>Ich teile die Freude im Slack und mir kommt die Idee: \u201eWir sollten unser eigenes Hackathon veranstalten\u201c. Ich schreibe unserem CTO Sascha. Stille. <\/p>\n<p>Morgen. Ich trinke Kaffee im B\u00fcro. Ich sehe Sasha, die von hinten n\u00e4herkommt. \u201eLisa, das ist gro\u00dfartig! Am 21. April steht uns ein wichtiges Datum bevor. Lass uns das angehen!\u201c Was zum Teufel!? So schnell? H\u00e4h? Ich muss Mitte April nach Syktyvkar f\u00fcr mein Praktikum fliegen. Aber egal! Lass uns loslegen.<\/p>\n<p>Es bleiben noch 2 Wochen. Ich war noch nie der alleinige Organisator eines Hackathons. Auch nicht intern. Ich lese Artikel zu diesem Thema. Das ist verr\u00fcckt. Man braucht Monate. Man braucht ein paar Leute. Man muss Merchandise, Preise, Bedingungen, den Zeitplan durchdenken, die Leute begeistern, das Ziel verstehen, Budgets festlegen. Vielleicht sogar \u00fcber den Sinn des Lebens nachdenken. Ich werde es auf keinen Fall schaffen. W\u00e4hrend du gelesen und dich vorbereitet hast, ist bereits eine Woche vergangen. Es ist h\u00f6chste Zeit, die Artikel zu ignorieren und endlich etwas zu unternehmen. <\/p>\n<p><b class=\"spoiler_title\">Hier ist unsere Checkliste zur Durchf\u00fchrung eines internen Hackathons in 1 Woche.<\/b><\/p>\n<ul>\n<li><b>Gliederung<\/b>: Du setzt dich entspannt hin und schreibst eine Liste der Dinge, die f\u00fcr den Hackathon erledigt werden m\u00fcssen. <i>30 Minuten<\/i>.<\/li>\n<li><b>Ziel<\/b>: Die Teilnehmer schlagen selbst Projekte vor und w\u00e4hlen, an denen sie in Google Sheets arbeiten m\u00f6chten. <i>Hintergrundaufgabe, 2 Stunden<\/i>.<\/li>\n<li><b>Zeitplan<\/b>: Du schreibst schnell eine kurze Zeitaufteilung mit Ber\u00fccksichtigung von 3 Pausen und dem Finale. <i>20 Minuten<\/i>.<\/li>\n<li><b>Befehle<\/b>: Du ver\u00f6ffentlichst eine Nachricht \u00fcber den Hackathon mit dem Zeitplan vom CTO in IT-Kan\u00e4len auf Slack\/E-Mail\/etc. und erstellst einen eigenen Kanal f\u00fcr den Hackathon. Dort bilden sich die Teams, w\u00e4hrend die Unentschlossenen dies in den ersten 5 Minuten des Hackathons erledigen. <i>Hintergrundaufgabe, 2 Stunden<\/i>.<\/li>\n<li><b>Extras<\/b>: Du entwickelst Merchandise mit zwei Entwicklern, gibst es dem Designer zur Illustration und erh\u00e4ltst das fertige Produkt. <i>Hintergrundaufgabe, 3 Tage<\/i>.<\/li>\n<li><b>Hackathon<\/b>: Du kommst ins B\u00fcro, koordinierst zu Beginn alle, k\u00fcmmerst dich um deine Aufgaben, liest Reddit, informierst mit wichtiger Miene in jeder Pause \u00fcber frische Pizza, machst Fotos vom Sonnenuntergang, k\u00fcndigst das Finale an, w\u00e4hlt gemeinsam aus und k\u00fcrt den Gewinner. <i>1 Tag<\/i>.<\/li>\n<li><b>Unter dem Sternchen<\/b>: Nat\u00fcrlich denkst du st\u00e4ndig dar\u00fcber nach, dass alles gut laufen sollte. Sicherlich werden nicht alle deine Nachricht sehen, und mit einigen ist es besser, pers\u00f6nlich zu sprechen. Nat\u00fcrlich wird es doppelt so einfach, wenn dir jemand hilft (die wunderbare Alena hat mir geholfen).<\/li>\n<\/ul>\n<h2>Weniger langweiligen Teil \u00fcber das Datum des Hackathons<\/h2>\n<p>\nWarum der 21. April? Dieser Tag ist bedeutend f\u00fcr uns. Vor genau einem Jahr, am 21. April, sind wir unter der Last w\u00e4hrend des ersten Wochenendes nach dem Start der Bundeswerbung zusammengebrochen. Am n\u00e4chsten Tag, am Sonntag, war unser Team ab 8 Uhr morgens bei der Arbeit. Da haben wir im Trello ein Board namens sundayhackathon erstellt und eine Woche mit 12-Stunden-Schichten begonnen. Die Situation war so kritisch, dass wir nicht einmal Zeit zum Essen hatten und von anderen Teams versorgt wurden.<\/p>\n<p><img decoding=\"async\" alt=\"Coden \u2013 Pizza\" src=\"\/wp-content\/uploads\/2019\/05\/9d611c134267d1377a95f21a57c69687.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEine detaillierte Erz\u00e4hlung k\u00f6nnen Sie lesen auf <noindex><a rel=\"nofollow\" href=\"https:\/\/www.facebook.com\/story.php?story_fbid=10215961419809495&amp;id=1267477281\">Fjodor Ovchinnikovs Seite<\/a><\/noindex> (unserem CEO). Seitdem haben wir viel ge\u00e4ndert, aber dieses Datum werden wir sicher nicht vergessen.<\/p>\n<p>In diesem Jahr haben wir beschlossen, dieses Ereignis f\u00fcr die Nachwelt festzuhalten und haben in besten Traditionen den ersten internen Hackathon in der Geschichte von Dodo veranstaltet, der 10 Stunden dauerte. <\/p>\n<h2>Der interessanteste Teil \u00fcber die Projekte des Hackathons<\/h2>\n<p>\n<i>Disclaimer: Alle Beschreibungen wurden von den Teilnehmern selbst verfasst, daher ist der Text nicht von mir.<\/i><\/p>\n<h4>Oleg Learning (Machine Learning)<\/h4>\n<p>\n<i>Dima Kochnev, Sasha Andronov (@alexandronov)<\/i><\/p>\n<p>Wir wollten ein neuronales Netzwerk entwickeln, das ohne jegliches Wissen erkennen kann, um welche Pizza es sich auf einem Foto handelt. Am Ende haben wir eine sehr einfache und spielerische Version geschaffen \u2013 sie erkennt 10 Pizzas und wir haben grob verstanden, wie alles funktioniert, so weit dies an einem Tag (~10 Stunden) m\u00f6glich ist.<\/p>\n<p><img decoding=\"async\" alt=\"Coden \u2013 Pizza\" src=\"\/wp-content\/uploads\/2019\/05\/361e89bc6084abdc0e3ac3fdfb7863d2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nInsbesondere haben wir festgestellt, dass die Branche ein Niveau erreicht hat, bei dem ein normaler Entwickler fertige Bibliotheken nutzen, die Dokumentation lesen und sein eigenes neuronales Netzwerk ohne tiefgehende Kenntnisse des Themas trainieren kann. Und es wird ausreichend gut funktionieren, um reale Probleme zu l\u00f6sen.<\/p>\n<p>Verwendete Werkzeuge: <\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/imageai.readthedocs.io\/en\/latest\/index.html\">imageai<\/a><\/noindex> \u2013 eine benutzerfreundliche und einfache Bibliothek f\u00fcr maschinelles Lernen und Computer Vision.<\/li>\n<li>Wir haben zwei Modelle ausprobiert \u2013 ResNet50 und Yolo.<\/li>\n<li>Den Code haben wir, wie sich versteht, in Python geschrieben.<\/li>\n<\/ul>\n<p>\nWir hatten 11.000 Fotos, aber fast 3\/4 davon waren unbrauchbar, und die verbleibenden hatten verschiedene, ungeeignete Perspektiven. Schlie\u00dflich haben wir ein fertiges Modell verwendet (das einfach in der Lage ist, Pizza zu finden), um den gr\u00f6\u00dften M\u00fcll herauszufiltern. Dann haben wir die Fotos mit dem Namen der Pizza sortiert \u2013 aber es stellte sich heraus, dass die Bezeichnungen nicht mit der Realit\u00e4t \u00fcbereinstimmten, also mussten wir manuell nachbearbeiten. Am Ende blieben etwa 500-600 Fotos \u00fcbrig, was nat\u00fcrlich eine sehr geringe Anzahl ist, aber dennoch genug, um 10 Pizzen voneinander zu unterscheiden.<\/p>\n<p>F\u00fcr das Training des Netzwerks haben wir die g\u00fcnstigste virtuelle Maschine in Azure mit NVIDIA Tesla K80 genommen. Damit haben wir in 100 Epochen trainiert, aber es war bereits nach 50 Epochen zu erkennen, dass das Netzwerk ges\u00e4ttigt war, da der Datensatz zu klein war.<\/p>\n<p>Die eigentliche Problematik liegt im Fehlen guter Daten.<\/p>\n<p><img decoding=\"async\" alt=\"Coden \u2013 Pizza\" src=\"\/wp-content\/uploads\/2019\/05\/b89ba378674df1b3e899a93fc0fce86c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWir haben vielleicht die Begriffe etwas durcheinandergebracht, aber man muss ber\u00fccksichtigen, dass wir \u00fcberhaupt keine Erfahrung mit all diesen Dingen haben.<\/p>\n<h4>GUI f\u00fcr Anf\u00e4nger (Konsole zum Bestellen von Pizza)<\/h4>\n<p>\n<i>Misha Kumachev (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/ceridan\/\" class=\"user_link\">Ceridan<\/a><\/noindex>), Zhenya Bikkinin, Zhenya Vasiliev<\/i><\/p>\n<p>Wir haben einen Prototyp einer Konsolenanwendung f\u00fcr Enthusiasten entwickelt, mit dem man Pizza \u00fcber das Terminal oder die Kommandozeile bestellen kann, oder sogar in den Deploy-Pipeline integrieren und bei erfolgreichem Release Pizza ins B\u00fcro liefern lassen kann.<\/p>\n<p><img decoding=\"async\" alt=\"Coden \u2013 Pizza\" src=\"\/wp-content\/uploads\/2019\/05\/14186ccb66d074923f89c1da47d594a1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDie Arbeit wurde in mehrere Teile gegliedert: Wir haben uns damit besch\u00e4ftigt, wie unsere API f\u00fcr mobile Anwendungen funktioniert, und haben unser eigenes CLI mit Hilfe von <noindex><a rel=\"nofollow\" href=\"https:\/\/oclif.io\">oclif<\/a><\/noindex> erstellt und die Ver\u00f6ffentlichung unseres Pakets konfiguriert. Bei dieser letzten Aufgabe hatten wir einige unangenehme Momente gegen Ende des Hackathons. Alles funktionierte lokal, und sogar \u00e4ltere ver\u00f6ffentlichte Versionen des Pakets liefen, aber die neuen (die mehr coole Funktionen und Emojis enthielten) weigerten sich zu arbeiten. Wir haben etwa 40 Minuten damit verbracht, herauszufinden, was schiefgelaufen war, aber schlie\u00dflich funktionierte alles auf magische Weise von selbst.)<\/p>\n<p>Unser maximales Ziel beim Hackathon war eine echte Bestellung von Pizza ins B\u00fcro \u00fcber unser CLI. Wir haben alles ein Dutzend Mal auf dem Teststand durchgespielt, aber ich hatte trotzdem zitternde H\u00e4nde, als ich die Befehle im Produktivsystem eingab.<\/p>\n<p><img decoding=\"async\" alt=\"Coden \u2013 Pizza\" src=\"\/wp-content\/uploads\/2019\/05\/5392e269446fcd09ceb9e16a8f9c4101.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAls Ergebnis \u2013 wir haben es tats\u00e4chlich geschafft!<\/p>\n<p><img decoding=\"async\" alt=\"Coden \u2013 Pizza\" 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 Bruzhmelov (Autor), Vanya Zverev, Gleb Lesnikov (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/entropy\/\" class=\"user_link\">entropy<\/a><\/noindex>), Andrey Sarafanov<\/i><\/p>\n<p>Wir haben die Idee f\u00fcr die \u201eKurier-App\u201c aufgegriffen.<\/p>\n<p><b class=\"spoiler_title\">Hintergrund zur Vorbereitung.<\/b>Zun\u00e4chst habe ich \u00fcberlegt, welche Funktionen die App haben k\u00f6nnte. Dabei entstand ungef\u00e4hr folgende Liste an Funktionen:<\/p>\n<ul>\n<li>Die App loggt sich mit einem Code in das Liefersystem ein.<\/li>\n<li>In der App sind die verf\u00fcgbaren Auftr\u00e4ge sowie die Auftr\u00e4ge, die \u00fcbernommen werden m\u00fcssen, sofort sichtbar.<\/li>\n<li>Der Kurier markiert den Auftrag und \u00fcbernimmt ihn f\u00fcr die Fahrt.<\/li>\n<li>Es wird ihm die voraussichtliche Ankunftszeit angezeigt und ob er es rechtzeitig schafft oder nicht.<\/li>\n<li>Dem Kunden wird angezeigt, dass der Kurier aufgebrochen ist.<\/li>\n<li>Der Kunde sieht den Standort des Kuriers auf der Karte und die voraussichtliche Ankunftszeit.<\/li>\n<li>Der Kurier kann dem Kunden \u00fcber den Chat in der App schreiben.<\/li>\n<li>Der Kunde kann dem Kurier \u00fcber den Chat in der App schreiben.<\/li>\n<li>F\u00fcnf Minuten vor der Ankunft erh\u00e4lt der Kunde eine Nachricht, dass der Kurier bald da ist, er sollte bereit sein.<\/li>\n<li>Der Kurier markiert in der App, dass er angekommen ist und wartet.<\/li>\n<li>Der Kurier kann mit einem Klick aus der App anrufen und mitteilen, dass er (angekommen ist, sich n\u00e4hert usw.).<\/li>\n<li>Der Kunde nimmt den Auftrag an und gibt den PIN-Code aus der App oder SMS zur Best\u00e4tigung der Lieferung ein (wie eine Unterschrift). Damit der Kurier die Lieferung nicht vorzeitig abschlie\u00dfen kann, falls er versp\u00e4tet ist.<\/li>\n<li>Der Auftrag wird im System als geliefert gekennzeichnet.<\/li>\n<\/ul>\n<p>Zus\u00e4tzlich einige alternative Szenarien:<\/p>\n<ul>\n<li>Der Kurier kann die Bestellung als nicht zugestellt markieren und einen Grund w\u00e4hlen.<\/li>\n<li>Wenn der Kurier versp\u00e4tet ist, kann er mit einem Klick ein elektronisches Zertifikat per SMS ausstellen. Oder das Zertifikat wird automatisch verschickt, wenn die Lieferfrist nicht eingehalten wird.<\/li>\n<\/ul>\n<p>\nDas Gef\u00fchl der Perspektive und Notwendigkeit dieses Projekts hat nat\u00fcrlich motiviert.<\/p>\n<p>Am n\u00e4chsten Tag gingen wir mit dem Team zum Mittagessen und besprachen, wie das minimale Funktional des Apps aussehen w\u00fcrde. <\/p>\n<p>Insgesamt entstand die folgende Liste von Aufgaben, die wir w\u00e4hrend des Hackathons erledigen wollten:<\/p>\n<ul>\n<li>Einloggen in die Lieferkasse.<\/li>\n<li>Aktuellen Standort anzeigen.<\/li>\n<li>Daten an eine externe API senden (Koordinaten, Bestellung abgeholt, Bestellung geliefert).<\/li>\n<li>Daten von einer externen API abrufen (aktuelle Bestellungen des Kuriers).<\/li>\n<li>Event senden, dass die Bestellung zur Lieferung abgeholt wurde \/ geliefert wurde.<\/li>\n<li>Den aktuellen Standort des Kuriers auf der Karte auf der Website anzeigen.<\/li>\n<\/ul>\n<p>\nDie Hauptarbeit lag, wie es schien, in der Erstellung des Backends und der Anwendung (nach Diskussionen w\u00e4hlten wir ReactNative f\u00fcr die Entwicklung der App, genauer gesagt das Binding dar\u00fcber \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/expo.io\/\">expo.io<\/a><\/noindex>, die es erm\u00f6glicht, \u00fcberhaupt keinen nativen Code zu schreiben). Im Backend gab es zun\u00e4chst die Hoffnung auf Wanja Zvereve, der erfahren mit unserem Service-Template und k8s ist (welche Arbeit er sich auch gleich vorgenommen hat). ReactNative haben Andrej Sarafanov und ich uns angeschaut.<\/p>\n<p>Ich habe beschlossen, sofort ein Arbeitsrepository f\u00fcr das Projekt zu erstellen. Um Mitternacht stie\u00df ich darauf, dass die Geolokalisierung in ReactNative im Hintergrund schlecht funktioniert, wenn man keinen nativen Code schreibt, was mich etwas frustrierte. Dann beruhigte ich mich, als ich erkannte, dass ich die Dokumentation des Frames von expo.io anstatt von ReactNative las. Am Ende des Abends war mir schon klar, wie ich in expo.io meinen aktuellen Standort erhalten und separate Bildschirme gestalten kann (f\u00fcr den Login, die Anzeige der Bestellung usw.).<\/p>\n<p><img decoding=\"async\" alt=\"Coden \u2013 Pizza\" src=\"\/wp-content\/uploads\/2019\/05\/2412edc5937b44e141d719269565dfee.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAm Morgen des Hackathons wurde Gleb f\u00fcr unser vielversprechendes Projekt gewonnen. Wir haben schnell einen Plan f\u00fcr die notwendigen Aufgaben aufgestellt.<\/p>\n<p><img decoding=\"async\" alt=\"Coden \u2013 Pizza\" src=\"\/wp-content\/uploads\/2019\/05\/4bc0ebef3ed6b661bd25ef75ac6d536d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWir haben einen Fehler gemacht, als wir versuchten, die Kommunikation nicht \u00fcber HTTP, sondern \u00fcber gRPC gem\u00e4\u00df dem Projektschablone aufzubauen, da niemand wusste, wie man einen gRPC-Client f\u00fcr JavaScript erstellt. Letztendlich haben wir etwa anderthalb Stunden damit verbracht und die Idee verworfen. Deshalb begannen die Kollegen, den fertigen Server von gRPC auf WebApi umzustellen. Nach einer halben Stunde gelang es uns schlie\u00dflich, die Kommunikation zwischen der Anwendung und dem Backend einzurichten. O Wunder. Gleichzeitig war Gleb fast mit dem Deployment in k8s fertig und hatte zudem das Auto-Deployment bei jedem Commit in den Master eingerichtet. \ud83d\ude42<\/p>\n<p>Als Datenbank haben wir MySQL gew\u00e4hlt, um zumindest mit der Datenbank kein Risiko einzugehen (wir hatten auch \u00fcber CosmosDb nachgedacht).<\/p>\n<p><img decoding=\"async\" alt=\"Coden \u2013 Pizza\" src=\"\/wp-content\/uploads\/2019\/05\/2ae381b2006330915ae38d55f2ac08cd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nErgebnis: <\/p>\n<ul>\n<li>Wir haben die aktuellen Koordinaten des Kuriers aus der Anwendung in der Datenbank gespeichert.<\/li>\n<li>Wir haben RabbitMQ integriert und uns f\u00fcr die Nachrichten \u00fcber die Annahme von Bestellungen durch den Kurier angemeldet, um die Bestellung sofort im Anwendungsfenster des Kuriers anzuzeigen.<\/li>\n<li>Wir haben begonnen, die Lieferzeiten in unserer Datenbank zu speichern, nachdem der Kurier auf die Schaltfl\u00e4che in der Anwendung gedr\u00fcckt hatte. Wir haben es nicht geschafft, das Ereignis zur\u00fcck an RabbitMQ zu senden, dass die Bestellung geliefert wurde.<\/li>\n<li>Ich habe auf der Seite currentorder eine Kartenansicht mit dem aktuellen Standort des Kurriers implementiert. Dieser Funktionsumfang ist jedoch noch nicht ganz vollst\u00e4ndig, da es in der Umgebung nicht gelungen ist, CORS f\u00fcr den Zugriff auf die Koordinaten aus unserem neuen Dienst einzurichten.<\/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>Wir wollten einen OpenID Connect-Provider implementieren, da wir derzeit ein selbst entwickeltes Authentifizierungsprotokoll verwenden, was einige Schwierigkeiten mit sich bringt: benutzerdefinierte Clientbibliotheken, unkomfortable Zusammenarbeit mit externen Partnern und m\u00f6glicherweise Sicherheitsprobleme (denn OAuth2.0 und OpenID Connect gelten in ihrer Referenzimplementierung als sicher, w\u00e4hrend ich bei unserer L\u00f6sung nicht ganz sicher bin).<\/p>\n<p><img decoding=\"async\" alt=\"Coden \u2013 Pizza\" src=\"\/wp-content\/uploads\/2019\/05\/b7247acfc91045f1040535d1f404c64a.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWir haben einen separaten Dienst erstellt, der einen Service zur Speicherung personenbezogener Daten emuliert, um ein kleines Modell eines l\u00e4nderunabh\u00e4ngigen Authentifizierungsanbieters zu schaffen. Dieser w\u00fcrde personenbezogene Daten an einen separaten Dienst weiterleiten (langfristig w\u00fcrde dies die M\u00f6glichkeit bieten, einen einzigen Dienst zu nutzen, mit dem man sich mit einem Konto in jedem Land anmelden und dabei die GDPR sowie andere gesetzliche Anforderungen einhalten k\u00f6nnte). Diese Komponente haben wir erfolgreich mit dem Anbieter verkn\u00fcpft. Der n\u00e4chste Schritt war die Erstellung einer API, die durch Tokens gesch\u00fctzt ist, welche der Anbieter ausstellt, sowie die Introspektion dieser Tokens \u00fcber den Anbieter. Gesch\u00fctzte Daten sollten nur ausgegeben werden, wenn die Anfragen den Autorisierungsrichtlinien entsprachen (wir \u00fcberpr\u00fcfen, ob der Benutzer gem\u00e4\u00df dem Bearer-Schema authentifiziert ist, ob sein Token einen bestimmten Scope enth\u00e4lt und ob der Benutzer die Berechtigung zur Durchf\u00fchrung des Aufrufs hat). Auch dieser Teil wurde umgesetzt. Der letzte Bestandteil war ein JavaScript-Client, dem ein Token zugewiesen werden sollte, um den gesch\u00fctzten API-Aufruf durchzuf\u00fchren. Dieser Teil konnte nicht rechtzeitig abgeschlossen werden. Das komplette funktionale Modul war zwar fertig, jedoch die Frontend-Komponente zur Demonstration der gesamten Systemfunktionalit\u00e4t nicht.<\/p>\n<h4>E-E-E (Spiel)<\/h4>\n<p>\n<i>Dima Afonchenko, Sasha Konovalov<\/i><\/p>\n<p>Wir haben ein Mini-Spiel auf Unity erstellt, bei dem flinke H\u00e4nde Wurstst\u00fccke auf die Pizza werfen. Wenn du die Wurst falsch wirfst, erscheint auf dem Bildschirm der traurige Hinweis \u201eAbgelehnt\u201c. Wenn jedoch die Wurstst\u00fcckchen richtig platziert sind, wird ein zuf\u00e4lliger Fakt \u00fcber Pizza angezeigt.<\/p>\n<p><img decoding=\"async\" alt=\"Coden \u2013 Pizza\" src=\"\/wp-content\/uploads\/2019\/05\/1c9daf62d4907f9a13de07ac0dd2a14e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWir wollten ein zweites Level mit dem Werfen von Tomaten machen, hatten aber nicht genug Zeit.<\/p>\n<p><img decoding=\"async\" alt=\"Coden \u2013 Pizza\" src=\"\/wp-content\/uploads\/2019\/05\/e3d5028c8043ab1192bbb8cb31918def.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Kurze Fortsetzung: Wer hat gewonnen?<\/h2>\n<p>\nVor dem Hackathon haben wir mit den Teilnehmern gesprochen und ich fragte sie, welcher Preis sie bei einem Sieg gerne erhalten w\u00fcrden. Es stellte sich heraus, dass der wertvollste Preis \u201edie Reise ins Prod\u201c sein w\u00fcrde. <\/p>\n<p><img decoding=\"async\" alt=\"Coden \u2013 Pizza\" src=\"\/wp-content\/uploads\/2019\/05\/814f28de3020cc16ce0108efdbbd963d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nErwartet also bald von uns die Ank\u00fcndigung eines Spiels, in dem H\u00e4nde Peperoni auf die Pizza werfen.<\/p>\n<blockquote><p>Wie aufmerksame Leser bemerkt haben, hat das Team \u201eE-E-E (Spiel)\u201c gewonnen. Herzlichen Gl\u00fcckwunsch an die Jungs!<\/p><\/blockquote>\n<p class=\"for_users_only_msg\">Nur registrierte Benutzer k\u00f6nnen an der Umfrage teilnehmen. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Bitte melden Sie sich an.<\/a><\/noindex>Sind Sie an Contour interessiert?<\/p>\n<h2 class=\"default-block__polling-title\">Welches Projekt hat Ihnen am besten gefallen?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Oleg Learning (Machine Learning)<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    GUI f\u00fcr 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>    5 Benutzer haben abgestimmt. 3 Benutzer haben sich enthalten.<br \/>\n<br \/>Quelle: <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\/de\/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=\"de_DE\" \/>\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\/de\/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\udd47Code und Pizza | ProHoster","description":"Hallo, Habr. Wir haben spontan unser erstes internes Hackathon veranstaltet. Ich m\u00f6chte meine Erfahrungen und Erkenntnisse \u00fcber die Vorbereitung in den letzten 2 Wochen sowie die entstandenen Projekte mit euch teilen. Der langweilige Teil f\u00fcr diejenigen, die sich f\u00fcr Marketing interessieren: Ich beginne mit einer kleinen Geschichte. Anfang April. In unserem B\u00fcro findet das erste Hackathon der MskDotNet Community statt. Der Kampf um Tatooine ist in vollem Gange,","canonical_url":"https:\/\/prohoster.info\/de\/blog\/novosti-interneta\/kodim-pitstsa","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/34626","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=34626"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/34626\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/26093"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=34626"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=34626"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=34626"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}