{"id":1118,"date":"2023-04-14T22:23:55","date_gmt":"2023-04-14T20:23:55","guid":{"rendered":"http:\/\/heppg.de\/ikg\/wordpress\/?p=1118"},"modified":"2023-04-16T08:42:15","modified_gmt":"2023-04-16T06:42:15","slug":"auf-die-platze-fertig-los-2","status":"publish","type":"post","link":"https:\/\/heppg.de\/ikg\/wordpress\/?p=1118","title":{"rendered":"Auf die Pl\u00e4tze, fertig, los !"},"content":{"rendered":"\n<p>Mit einem toolgest\u00fctzten Controller Framework f\u00fcr scratch3-Spiele soll die Entwicklung von Spielen mit scratch vereinfacht werden.<\/p>\n\n\n\n<p>Die Ablaufsteuerung eines Scratch-Spieles mit verschiedenen Spielleveln macht Sch\u00fclern der siebten Klasse einige Probleme:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Das Spiel kann einmal gespielt werden, beim zweiten Durchlauf erscheinen die Figuren an unerwarteten Stellen.<\/li><li>Um Fehler zu suchen mu\u00df das Spiel jedesmal vom Anfang an gespielt werden; einzelne Spiellevel k\u00f6nnen nicht separat angesteuert werden.<\/li><li>Das Einf\u00fcgen neuer Level ist sehr aufwendig.<\/li><li>Hilfe f\u00fcr die Sch\u00fcler bei Problemen ist schwierig wenn sich ein Programm zu einem verkn\u00e4ulten Spaghetti entwickelt hat.<\/li><\/ul>\n\n\n\n<p>Bisher wurde ein Controller Framework vorgestellt und die Implementierung auch angeleitet. Die Implementierung war jedoch teilweise papierbasiert und diese Vorgehensweise insgesamt nicht sehr erfolgreich.<\/p>\n\n\n\n<p>Die Arbeitsschritte waren:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Erkl\u00e4rungen der Motivation, Vorgehensweise an der Tafel<\/li><li>Checklisten verteilen<\/li><li>die Abfolge der Spiellevel und der Ereignisse in einem Diagramm aufzeichnen<\/li><li>Anhand einer Beschreibung\/ Checkliste dann die Scripte f\u00fcr den Controller aufbauen<\/li><\/ul>\n\n\n\n<p>Diese manuelle Vorgehensweise war nicht sehr erfolgreich. Der Nutzen f\u00fcr die Entwicklung war nicht sofort ersichtlich und statt endlich mit dem Spiel loszulegen wollte niemand gerne erst mal auf Papier irgendwelche Bilder zeichnen. <\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>die auf Papier erstellten Diagramme wurden nicht an die aktuellen Programm angepasst und konnten so zum Verst\u00e4ndnis des Spieles nicht herangezogen werden. Oder waren dann nicht mehr greifbar, vergessen, nicht abgeheftet.<\/li><li>Die Diagramme wurden im ersten Anlauf &#8216;zu sch\u00f6n&#8217; gezeichnet mit Karopapier und Lineal. Dieser f\u00fcr erste Versionen \u00fcberfl\u00fcssige Aufwand ben\u00f6tigt viel Zeit und sch\u00f6ne Diagramme werden weniger bereitwillig ge\u00e4ndert. <\/li><li>die Diagramme mussten manuell in Skripte und Ereignisse \u00fcbertragen werden, hier gab es Tippfehler, Abweichungen bei gro\u00df-Kleinschreibung, Auslassungen.<\/li><li>Individuelle Abwandlungen der Controller-Skripte f\u00fchren zu einem hohen Aufwand bei der Unterst\u00fctzung der Sch\u00fcler.<\/li><\/ul>\n\n\n\n<p>Mit einem toolunterst\u00fctzten &#8216;Controller-Framework&#8217; sollen diese Probleme vermieden werden. Insbesondere mu\u00df der Planungsschritt &#8220;Ablaufplanung&#8221; schnell und unkompliziert durchgef\u00fchrt werden k\u00f6nnen.<\/p>\n\n\n\n<p>F\u00fcr Sch\u00fcler wird das Framework altersgem\u00e4\u00df als Rezeptsammlung bereitgestellt. Nach einer Einf\u00fchrung soll es im Prinzip m\u00f6glich sein durch einfache \u00dcbernahme der generierten Skripte sehr schnell einen  Fortschritt zu erzielen. Was dann &#8211; hoffentlich &#8211; die Motivation steigert das Framework zu benutzen.<\/p>\n\n\n\n<p>Das Framework soll die folgenden Features aufweisen:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Einzelne Level k\u00f6nnen separat gestartet werden w\u00e4hrend der Entwicklung und Test.<br>Das Durchlaufen komplexer Abl\u00e4ufe bis zu einem bestimmten Fehler wird vermieden. <\/li><li>Supportaufwand wird durch Standardisierung verringert. <\/li><li>Die Ereignisse wie &#8216;gewonnen&#8217;, &#8216;verloren&#8217; k\u00f6nnen simuliert werden und erlauben das einfache Verifizieren der Spielabl\u00e4ufe. <\/li><li>Eine Erweiterung des Spieles um zus\u00e4tzliche Level ist einfach m\u00f6glich.<\/li><li>Der Controller, ein Sprite mit dem Namen &#8216;Dirigent&#8217;, gibt Meldungen aus wenn ein neuer Level gestartet wird. Protokollierung kann ggf. einfach nachger\u00fcstet werden.<\/li><\/ul>\n\n\n\n<p>Mit der Umstellung des Kurses von scratch1.4 zu scratch3 in 2022 wird eine technische Unterst\u00fctzung mit einem grafischen Tool eingef\u00fchrt. Die Sch\u00fcler m\u00fcssen zwar im Moment weiterhin die generierten Skripte abtippen, aber durch die genaue Abbildung wird ein besseres Ergebnis erwartet. <br>Eine automatische Erstellung eines importf\u00e4higen Sprite ist noch nicht umgesetzt.<\/p>\n\n\n\n<p>Der Post ist eine \u00dcberarbeitung eines fr\u00fcheren Artikels \u00fcber die Ablaufsteuerung: <a href=\"http:\/\/heppg.de\/ikg\/wordpress\/?p=1077\">Auf die Pl\u00e4tze, fertig, los !<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Bestandteile des Framework<\/h2>\n\n\n\n<p>Das Framework implementiert eine Controller Pattern bestehend aus einer Zustandmaschine f\u00fcr die Abl\u00e4ufe und Interfaces\/ Templates f\u00fcr Ereignisse im Spielablauf.<\/p>\n\n\n\n<p>Ein zentrale Controller Komponente implementiert als scratch Sprite ist nur f\u00fcr den \u00fcbergeordneten Spielablauf zust\u00e4ndig.<\/p>\n\n\n\n<p>Alle Sprite erhalten standardisierte Ereignisse f\u00fcr die Ablaufsteuerung.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"http:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/ikg_screenflow_2_model-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/ikg_screenflow_2_model-1.png\" alt=\"\" class=\"wp-image-1126\" width=\"634\" height=\"599\" srcset=\"https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/ikg_screenflow_2_model-1.png 859w, https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/ikg_screenflow_2_model-1-300x284.png 300w, https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/ikg_screenflow_2_model-1-768x726.png 768w, https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/ikg_screenflow_2_model-1-624x590.png 624w\" sizes=\"auto, (max-width: 634px) 100vw, 634px\" \/><\/a><figcaption>UML Diagramm f\u00fcr die Messages zwischen Dirigent und einem Sprite f\u00fcr einen Level &#8216;Level_1&#8217;<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Die Ablaufdiagramme sind grafisch vereinfachte UML StateMachineDiagram. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"http:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_state.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_state-1024x431.png\" alt=\"\" class=\"wp-image-1127\" width=\"727\" height=\"305\" srcset=\"https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_state-1024x431.png 1024w, https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_state-300x126.png 300w, https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_state-768x323.png 768w, https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_state-624x263.png 624w, https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_state.png 1085w\" sizes=\"auto, (max-width: 727px) 100vw, 727px\" \/><\/a><\/figure>\n\n\n\n<p>Die Zust\u00e4nde haben links die &#8216;Entry&#8217;-Port, rechts die &#8216;Exit&#8217;-Port so dass die Pfeile an den Events entfallen k\u00f6nnen. <\/p>\n\n\n\n<p>Entry-Aktionen werden in zwei Phasen &#8216;fertig&#8217; und &#8216;los&#8217; aufgeteilt und \u00fcber Messages, scratch-Ereignisse angesteuert.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Werkzeuge, Toolunterst\u00fctzung<\/h2>\n\n\n\n<p>Das Tool besteht aus einem grafischen Editor f\u00fcr Spielabl\u00e4ufe und der M\u00f6glichkeit daraus den Sprite-Skript-Code zu generieren sowie die Templates f\u00fcr die Ereignisse der Sprite-Spielfiguren.<\/p>\n\n\n\n<p>Es wurde wenig Aufwand in eine &#8216;smarte&#8217; Oberfl\u00e4che investiert:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"http:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_simple.screenflow.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_simple.screenflow-1024x338.png\" alt=\"\" class=\"wp-image-1123\" width=\"770\" height=\"254\" srcset=\"https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_simple.screenflow-1024x338.png 1024w, https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_simple.screenflow-300x99.png 300w, https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_simple.screenflow-768x253.png 768w, https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_simple.screenflow-624x206.png 624w, https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_simple.screenflow.png 1297w\" sizes=\"auto, (max-width: 770px) 100vw, 770px\" \/><\/a><\/figure>\n\n\n\n<p>Bedienoberfl\u00e4che des Editor.<\/p>\n\n\n\n<p>Technisch gesehen l\u00e4uft das Tool im Browser, es wird eine javascript-Bibliothek draw-2d verwendet. <br>Aus einer einfachen Palette werden die Elemente auf die Arbeitsfl\u00e4che gezogen. Die Verbindungen werden mit der Maus erstellt.<\/p>\n\n\n\n<p>Undo, Redo werden unterst\u00fctzt. Alle Ver\u00e4nderungen werden in einer lokalen Datenbank persistiert. Mit &#8220;Store&#8221; werden Ergebisse gespeichert und die bis dahin angefallen Zwischenst\u00e4nde dann gel\u00f6scht.<\/p>\n\n\n\n<p>&#8216;Print&#8217; speichert die Grafik als svg-Datei auf dem Rechner. &#8220;skript:dirigent&#8221; und &#8220;skript:sprite&#8221; aktivieren den Generator und die grafische Ausgabe der Skripte. Bisher mu\u00df dann manuell abgetippt werden. F\u00fcr das gezeigte Beispiel sind das im &#8216;Dirigent&#8217; etwa 50 Bl\u00f6cke.<\/p>\n\n\n\n<p>Die Server-Komponente ist in python mit &#8216;tornado&#8217; implementiert, &#8216;sqlite3&#8217; \u00fcbernimmt die lokale Speicherung.<br>Die Generierung der Grafiken erzeugt SVG in Webseiten, hier ein Beispiel f\u00fcr die Ausgabe des &#8220;skript:dirigent&#8221;:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"http:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_simple.dirigent.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_simple.dirigent.png\" alt=\"\" class=\"wp-image-1124\" width=\"349\" height=\"600\" srcset=\"https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_simple.dirigent.png 535w, https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_simple.dirigent-175x300.png 175w\" sizes=\"auto, (max-width: 349px) 100vw, 349px\" \/><\/a><figcaption>Anzeige des generierten Dirigent-scratch-Skript<\/figcaption><\/figure>\n\n\n\n<p>Die Anzeige der Skripte lehnt sich an die aus scratch3 bekannten Formen und Farben an; die schwarze Schrift ist eine Abweichung von der Pastelloptik und besser lesbar.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Das Controller-Framework hat als zentrale Komponente ein scratch-Sprite mit dem Namen &#8216;Dirigent&#8217;. Das ist der &#8216;Controller&#8217; des Spiels.<br>Technisch gesehen implementiert der Controller einen Zustandsautomaten, die Level sind die Zust\u00e4nde und die \u00dcberg\u00e4nge werden \u00fcber Ereignisse gesteuert. GesStartet \u00fcber die gr\u00fcne Flagge.<\/p>\n\n\n\n<p>Die einzelnen Sprites in Scratch (Spielfiguren) erhalten eine standardisierte Schnittstelle aus Ereignissen (Messages).<\/p>\n\n\n\n<p><strong>LEVEL_1_fertig<\/strong>: Dirigent zu Sprites. Setze die Startwerte f\u00fcr den Level wie:<br>&#8211; zeige dich \/ verstecke dich <br>&#8211; Gr\u00f6\u00dfe <br>&#8211; Position <br>&#8211; Variablen<\/p>\n\n\n\n<p><strong>LEVEL_1_los<\/strong>: Dirigent zu Sprites. Hier geht es los. Die Abl\u00e4ufe werden gestarten, Bewegungen aktiviert etc.<\/p>\n\n\n\n<p><strong>LEVEL_1_stop<\/strong>: Dirigent zu Sprite. Der level ist beendet, beende Aktionen des Sprite. Stoppe Schleifen.<\/p>\n\n\n\n<p><strong>gewonnen, verloren, weiter<\/strong> o.\u00e4.: Sprite zu Dirigent. Damit wird der \u00dcbergang zu einem neuen Level gestartet. Hier k\u00f6nnen die Sch\u00fcler (fast) beliebige Namen verwenden.<\/p>\n\n\n\n<p>In den Beispielen werden die Level in Gro\u00dfbuchstaben geschrieben. Das erleichtert die \u00dcbersicht.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"http:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent.sprite.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent.sprite-1024x569.png\" alt=\"\" class=\"wp-image-1122\" width=\"696\" height=\"386\" srcset=\"https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent.sprite-1024x569.png 1024w, https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent.sprite-300x167.png 300w, https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent.sprite-768x427.png 768w, https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent.sprite-624x347.png 624w, https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent.sprite.png 1085w\" sizes=\"auto, (max-width: 696px) 100vw, 696px\" \/><\/a><figcaption>Aus dem Ablaufdiagramm erzeugte Scratch-Snippet f\u00fcr ein Sprite.<\/figcaption><\/figure>\n\n\n\n<p>Die Sch\u00fcler f\u00fcllen &#8211; statt den Kommentaren &#8211; ihre eigenen Abl\u00e4ufe ein.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Spezialfall &#8216;wiederverwendbarer Level&#8217;<\/h2>\n\n\n\n<p>In den von Sch\u00fclern gezeichneten Ablaufdiagrammen tauchen regelm\u00e4ssig Level auf, die wie ein Unterprogramm an verschiedenen Stellen verwendet wurden. Beispiele sind ein Zwischenlevel &#8216;der level wurde gewonnen, weiter mit dem n\u00e4chsten Level oder beenden ?&#8217;<\/p>\n\n\n\n<p>Bisher mussten solche Anforderungen durch spezifische (unique) Level gel\u00f6st werden oder die Programmierung wurde ad hoc erg\u00e4nzt.<\/p>\n\n\n\n<p>Das Tooling unterst\u00fctzt diesen Sonderfall. <\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"http:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_komplex.flow_.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_komplex.flow_-1024x333.png\" alt=\"\" class=\"wp-image-1119\" width=\"738\" height=\"240\" srcset=\"https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_komplex.flow_-1024x333.png 1024w, https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_komplex.flow_-300x98.png 300w, https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_komplex.flow_-768x250.png 768w, https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_komplex.flow_-624x203.png 624w, https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_komplex.flow_.png 1315w\" sizes=\"auto, (max-width: 738px) 100vw, 738px\" \/><\/a><figcaption>Komplexes Beispiel mit Zwischenlevel &#8216;X&#8217;<\/figcaption><\/figure>\n\n\n\n<p>Die Skripte des &#8216;Dirigent&#8217; sind sehr \u00e4hnlich wie des einfachen Beispiels, lediglich an den Stellen wo die Zwischenlevel eingef\u00fcgt sind wird eine weitere Variable &#8216;p_level&#8217; verwendet.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"http:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_komplex.eventhandling.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_komplex.eventhandling.png\" alt=\"\" class=\"wp-image-1120\" width=\"401\" height=\"437\"\/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"http:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_komplex.eventhandling2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_komplex.eventhandling2.png\" alt=\"\" class=\"wp-image-1121\" width=\"389\" height=\"353\" srcset=\"https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_komplex.eventhandling2.png 576w, https:\/\/heppg.de\/ikg\/wordpress\/wp-content\/uploads\/2023\/04\/dirigent_komplex.eventhandling2-300x272.png 300w\" sizes=\"auto, (max-width: 389px) 100vw, 389px\" \/><\/a><figcaption>Sprite &#8216;Dirigent&#8217;, Beispiele f\u00fcr das Verarbeiten von Ereignissen mit &#8216;ZwischenLevel&#8217;.<\/figcaption><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Mit einem toolgest\u00fctzten Controller Framework f\u00fcr scratch3-Spiele soll die Entwicklung von Spielen mit scratch vereinfacht werden. Die Ablaufsteuerung eines Scratch-Spieles mit verschiedenen Spielleveln macht Sch\u00fclern der siebten Klasse einige Probleme: Das Spiel kann einmal gespielt werden, beim zweiten Durchlauf erscheinen die Figuren an unerwarteten Stellen. Um Fehler zu suchen mu\u00df das Spiel jedesmal vom Anfang [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,6],"tags":[31],"class_list":["post-1118","post","type-post","status-publish","format-standard","hentry","category-scratch","category-tools","tag-scratch"],"_links":{"self":[{"href":"https:\/\/heppg.de\/ikg\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1118","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/heppg.de\/ikg\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/heppg.de\/ikg\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/heppg.de\/ikg\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/heppg.de\/ikg\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1118"}],"version-history":[{"count":7,"href":"https:\/\/heppg.de\/ikg\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1118\/revisions"}],"predecessor-version":[{"id":1135,"href":"https:\/\/heppg.de\/ikg\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1118\/revisions\/1135"}],"wp:attachment":[{"href":"https:\/\/heppg.de\/ikg\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1118"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/heppg.de\/ikg\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1118"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/heppg.de\/ikg\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1118"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}