Closed AMatutat closed 1 year ago
Wie heute diskutiert:
Es macht für mich viel Sinn, über ein Mono-Repo nachzudenken, in dem verschiedene (IntelliJ-) Projekte auf Root-Ebene parallel leben:
Wenn ich es richtig verstanden habe, müssen für den PM-Dungeon (das Framework) eigentlich keine Änderungen erfolgen - es könnten/sollten aber nicht mehr benötigte Strukturen entfernt werden. Das ECS-Package würde vermutlich nach dem Merge dann direkt in das Framework wandern. Vielleicht gibt es noch weitere Packages im Dungeon, die dann in den PM-Dungeon-Source-Tree wandern (nach dem Merge!)?
Die Ordnerstrukturen müssten vorher in beiden Repos so angepasst werden, dass sie gewissermaßen "übereinandergelegt" werden können. Dann kann man den Master-Tree vom Dungeon nehmen und als neue zusätzliche Wurzel im PM-Dungeon reinziehen und beide mergen. So bleiben sowohl die Historie als auch die Contributors erhalten.
Die Issue und evtl. die Discussions können verschoben werden. PRs sind dann verloren, aber vielleicht ist das auch langfristig unrelevant. Meilensteine müssten neu im PM-Dungeon angelegt werden (geht auch über die API, aber vermutlich ist es schneller manuell gemacht) - am besten vor dem Verschieben der Issues.
Im resultierenden Mono-Repo sollten die Strukturen (Projekte und Packages) so aufgeteilt werden, dass man mit einem git subtree split
den Kram ggf. auch wieder einfach trennen kann.
Die GH-Workflows müssen ggf. angepasst werden. Der PM-Dungeon-Tree sollte mind. ein Tag bekommen; vielleicht sollte man sich aber auch von der aktuellen Versionsnummerngeschichte bei der Gelegenheit verabschieden und einfach Semesterweise ein Tag vergeben (tbd[^1]). Dito könnte man bei der Gelegenheit nochmal Maven Central überdenken und ob man nicht auch Github als Provider für das PM-Dungeon-JAR in Gradle nutzen kann.
Für die Studierenden würden wir ein neues Repo anlegen mit einer minimalen Konfiguration (Gradle), die sich ein JAR vom PM-Dungeon-Teil zieht und wo die Studis dann ihre Implementierung erledigen. Wenn sich jemand unser Repo nimmt, passiert das auf eigene Gefahr.
Ein möglicher Nachteil ist, dass die Studierenden im Teil (Projekt? Package?) für die vorimplementierten Basisfunktionen Dinge sehen könnten, die sie eigentlich selbst implementieren sollen. Aber vielleicht kann man das so ummünzen, dass sie hier ein Codestudium machen und so eine bessere Idee bekommen, wie etwas umgesetzt werden kann und auf der Basis ihre eigenen Implementierungen machen.
[^1]: Im Semester sollen die Studis einfach immer die aktuelle Version im master
[^2] einsetzen, hier werden ausschließlich Bugs gefixt. Neue Features gibt es im Semester nicht bzw. nur in einem parallelen Branch, der erst nach dem Semester gemergt wird[^3]. So sollten die Studis immer die beste Version haben und keine Probleme mit nicht kompatiblen Änderungen bekommen.[^4]
[^2]: Nach jedem Merge in den master
wird das JAR als Artefakt neu gebaut - es ist also egal, ob die Studis mit dem JAR oder dem Source im master
arbeiten.
[^3]: Diesen Feature-Branch sollte man dann auch immer regelmäßig auf die Spitze des aktuellen masters
rebasen, damit dort dann auch die Bugfixes drin sind.
[^4]: Falls wir doch Versionen brauchen, weil man sonst kein GH-Release hinkriegt, dann wäre das sowas wie S23.1
, also "Semester.lfdeNummer".
Hier mal eine Liste an Klassen die aus dem PM-Dungeon entfernt werden könnten (kein Anspruch auf Korrektheit und/oder Vollständigkeit)
basiselement.AnimatableElement
AnimatableComponent
basiselement.DungeonElement
Entity
controller.EntityController
SystemController
basiselement.Removeable
controller.AbstractController
(hier bin ich mir nicht ganz sicher)controller.ControllerLayer
(hier bin ich mir nicht ganz sicher, vielleicht ist das für die UI nötig)Und hier eine Liste an Systemen und Components die ich aus dem ECS übertragen würde:
Systeme:
ECS_System
DrawSystem
CollisionSystem
VelocitySystem
SystemController
Components:
Component
AnimationComponent
HitboxComponent
PositionComponent
VelocityComponent
Die basis Entität Entity
wird auch vorgegeben.
Was ich nicht vorgeben würde:
AISystem
und AIComponent
SkillSystem
und SkillComponent
KeyboardSystem
und PlayableComponent
(denke das wäre wieder Inhalt des Quickstarts) Hmmm. Ein Überblick wäre hilfreich, also sowas wie ein Diagramm?
AI kann ich verstehen, das geht über den Bedarf für PM hinaus. Andererseits, wenn es drin ist: Was schadet es? Sollen die Studis da nicht eher die Components für sich sinnvoll nutzen und/oder erweitern?
Skills und Keyboard: Wo liegt der Mehrwert, wenn wir das die Studis selbst machen lassen, ggf. durch Kopieren aus einem Quick-Start? Von hier aus erscheint es mir sinnvoll, diese Dinge ebenfalls vorzugeben, und im Quick-Start zu zeigen, wie man sie einbindet und nutzt und erweitert?
Für das Dungeon- Projekt wäre es hilfreich, wenn es mit im Repo drin wäre - das würde uns die Hilfskonstruktionen mit privaten Zusatz-Repos ersparen. Und für PM würde es vermutlich nicht schaden, wenn die Sachen schon da sind und von den Studis zusammengebaut werden (statt "selbst erstellt" durch Kopieren aus einem Dokument).
Grade mal was gecheckt: scheinbar kann man über die GitHub API keine issues transferieren. Das geht nur über die UI. Man kann alle issues exportieren und dann ein Skript über die so bekommene Json laufen lassen, welches dann neue Issues erstellt. Aber dann gehen bestimmt irgendwelche Diskussionen und Meta Daten verloren
Grade mal was gecheckt: scheinbar kann man über die GitHub API keine issues transferieren. Das geht nur über die UI. Man kann alle issues exportieren und dann ein Skript über die so bekommene Json laufen lassen, welches dann neue Issues erstellt. Aber dann gehen bestimmt irgendwelche Diskussionen und Meta Daten verloren
Das ist bitter - ich ärgere mich ja schon über die mit Sicherheit nicht übertragbaren PRs. Müssen wir mal überlegen, wieviele Klicks pro Ticket-Verschiebung notwendig sind und ob das dann ggf. über SHK und Praktikum verteilt werden kann?
und ob das dann ggf. über SHK und Praktikum verteilt werden kann?
Uff.... du bist böse.... Weiß auch nicht, ob ich das abgeben wollen würde. In meinen Kopf muss das alles in einer Nacht und Nebel Aktion passieren, um den Arbeitsbetrieb nicht zum stocken zu bringen. Da sind mehr Beteilige irgendwie auch eine größere Fehlerquelle
Es macht für mich viel Sinn, über ein Mono-Repo nachzudenken, in dem verschiedene (IntelliJ-) Projekte auf Root-Ebene parallel leben: PM-Dungeon (Framework) DSL-Anbindung (Dungeon/game/dslToGame) DSL und Compiler (Dungeon/dsl) Vorimplementierte Basisfunktionen, die für die Generierung der Rätsel benötigt werden (Hitbox, ...)
Das wäre das Endziel. Für den Umzug würde ich DSL-Anbindung ([Dungeon/game/dslToGame] und PM-Dungeon (Framework) und Vorimplementierte Basisfunktionen, die für die Generierung der Rätsel benötigt werden (Hitbox, ...) zusammen gesteckt lassen und im Anschluss aufteilen. Da müssen dann noch Gradle-Files (um)geschrieben werden und irgendwelche Abhängikeiten beachten werden etc. Das kostet einfach etwas Zeit und verzögert den Umzug nur.
Die Ordnerstrukturen müssten vorher in beiden Repos so angepasst werden, dass sie gewissermaßen "übereinandergelegt" werden können. Dann kann man den Master-Tree vom Dungeon nehmen und als neue zusätzliche Wurzel im PM-Dungeon reinziehen und beide mergen. So bleiben sowohl die Historie als auch die Contributors erhalten.
Muss es der Master-Tree sein? Als Fallback Ebene würde ich lieber einen Branch nehmen, die umstrukturierung durchführen und den Dungeon-master unangetastet lassen.
Nachdem der kram verein ist, würde für mich das große sauber machen anfangen.
und ob das dann ggf. über SHK und Praktikum verteilt werden kann?
Uff.... du bist böse....
ja, aber realistisch ist alles andere einfach zu teuer. und man kann das auch mehrere köpfe verteilen.
Weiß auch nicht, ob ich das abgeben wollen würde. In meinen Kopf muss das alles in einer Nacht und Nebel Aktion passieren, um den Arbeitsbetrieb nicht zum stocken zu bringen. Da sind mehr Beteilige irgendwie auch eine größere Fehlerquelle
Die Tickets müssten nicht in einem Zug rüber: jeder kann "seine" Arbeitstickets rüberschieben plus die für die Woche geplanten. Danach dann inkrementell weiter, und zuletzt alle geschlossenen Issues.
Es macht für mich viel Sinn, über ein Mono-Repo nachzudenken, in dem verschiedene (IntelliJ-) Projekte auf Root-Ebene parallel leben:
PM-Dungeon (Framework)
DSL-Anbindung (Dungeon/game/dslToGame)
DSL und Compiler (Dungeon/dsl)
Vorimplementierte Basisfunktionen, die für die Generierung der Rätsel benötigt werden (Hitbox, ...)
Das wäre das Endziel. Für den Umzug würde ich DSL-Anbindung ([Dungeon/game/dslToGame] und PM-Dungeon (Framework) und Vorimplementierte Basisfunktionen, die für die Generierung der Rätsel benötigt werden (Hitbox, ...) zusammen gesteckt lassen und im Anschluss aufteilen. Da müssen dann noch Gradle-Files (um)geschrieben werden und irgendwelche Abhängikeiten beachten werden etc. Das kostet einfach etwas Zeit und verzögert den Umzug nur.
ja, von mir aus. dennoch muss ein klares konzept bzgl. der ordnerstruktur her und beide repos müssen entsprechend vorbereitet werden.
und das gradle-zeugs wird man eh anfassen müssen, aber gut.
Die Ordnerstrukturen müssten vorher in beiden Repos so angepasst werden, dass sie gewissermaßen "übereinandergelegt" werden können. Dann kann man den Master-Tree vom Dungeon nehmen und als neue zusätzliche Wurzel im PM-Dungeon reinziehen und beide mergen. So bleiben sowohl die Historie als auch die Contributors erhalten.
Muss es der Master-Tree sein? Als Fallback Ebene würde ich lieber einen Branch nehmen, die umstrukturierung durchführen und den Dungeon-master unangetastet lassen.
wegen mir in einem hilfsbranch vorbereiten.
aber: das vereinigen der trees an sich würde ich im master machen wollen, das kommt über bande nicht gut. das ist eh frickelig, und dann in einem hilfsbranch mit squash-merge? eher nicht.
Nachdem der kram verein ist, würde für mich das große sauber machen anfangen.
ja, das kann ja such wieder ein hilfsbranch sein.
@AMatutat
Idee: Den PM-Dungeon aufbereiten und die Branches master
und hamster
hier in den Dungeon integrieren und die restlichen offenen Tickets aus PM-Dungeon hierher verschieben. => also die Richtung umkehren.
TODO:
.
-Dateien und Konfigdateien löschen, die sich hier sonst doppeln würden (master
).master
)hamster
-Branch nochmal auf den (aktualisierten) master
rebasenmaster
des PM-Dungeon in den master
des Dungeon mergen (Option: keine gemeinsame Wurzel)hamster
des PM-Dungeon auf den dann neuen master
des Dungeon rebasenIch erstell mir hier mal eine Checkliste, und wenn wir hier fertig sind tranferiere ich dieses Issue nach drüben und generier mir Issues aus der Checkliste
@AMatutat Die noch offenen Tickets hier kommen noch rüber oder sind die für das Löschen vorgesehen? Teilweise sind die ja veraltet (Quickstart anpassen), aber sowas wie Checkstyle/Spotbugs und Testabdeckung ist ja immer noch relevant?
Ich würde die löschen.
Ich würde die löschen.
hmmm: "sowas wie Checkstyle/Spotbugs und Testabdeckung ist ja immer noch relevant?"
Ich meine, das sind halt tatsächlich offene/unerledigte Aufgaben, die auch den ECS-Dungeon betreffen (vermutlich).
Andererseits werden die im Rahmen des Projekts wohl realistisch von niemandem angefasst werden, zumal das ja teilweise auch in die Architektur reinspielt. D.h. das sind dann Reminder, die auf ewig offen bleiben.
Checkstyle und spotless sind eigentlich nur dann relevant, wenn wir uns an die Tools halten würden. Das funktioniert in der Praxis leider nicht. Was die Frage aufwirft, warum wir es noch haben.
Testabdeckung könnte man mitnehmen ich fürchte die Realität wird das Ding aber auf ein "later" also nie Schieben.
Checkstyle und spotless sind eigentlich nur dann relevant, wenn wir uns an die Tools halten würden. Das funktioniert in der Praxis leider nicht. Was die Frage aufwirft, warum wir es noch haben.
Das finde ich grad deutlich zu kurz gedacht (zumal, wenn es von einem wiss. MA kommt).
Die Sachen stelle ich im Unterricht vor. Die Studis bekommen diese Richtlinien, grad bzgl. Checkstyle, als Vorgabe. Da finde ich es etwas kurz gesprungen, wenn wir das mit unserem eigenen Code, den wir den Studis ebenfalls als Vorgabe geben, nicht mal versuchen einzuhalten und einfach sagen "geht irgendwie nicht".
Die Fragen müssten sein:
Testabdeckung könnte man mitnehmen ich fürchte die Realität wird das Ding aber auf ein "later" also nie Schieben.
Meine Rede. Aber man hätte halt den Marker und die Erinnerung. Eigentlich nicht verkehrt.
Sorry, aber das ist ein hartes No-Go für mich. Die drei Tickets (#304, Programmiermethoden/Dungeon#317, Programmiermethoden/Dungeon#316) kommen mit rüber.
Da zuletzt wieder nach Raspberry gefragt wurde: Das Programmiermethoden/Dungeon#315 geht auch rüber.
Sorry, aber das ist ein hartes No-Go für mich. Die drei Tickets (https://github.com/Programmiermethoden/Dungeon/issues/318, https://github.com/Programmiermethoden/Dungeon/issues/317, https://github.com/Programmiermethoden/Dungeon/issues/316) kommen mit rüber.
Dann ist das doch geklärt.
Da zuletzt wieder nach Raspberry gefragt wurde: Das https://github.com/Programmiermethoden/Dungeon/issues/315 geht auch rüber.
Alles klar. Ich bin immernoch der Meinung dass das jetzt gehen müsste, aber mir fehlt jemand der es testet.
Dann gibt es noch die mit "SHK"-Label (sogar alle "high prio"). Sind die wirklich obsolet? Die sind teilweise relativ neu?
Dann gibt es noch die mit "SHK"-Label (sogar alle "high prio"). Sind die wirklich obsolet? Die sind teilweise relativ neu?
Ja. Das gehört alles zum Quickstart und der muss für das ECS ja eh neu gemacht werden. Obwohl ich versuchen werde, die ECS-Dokumentation zu zu schreiben, dass es als Einstiegspunkt auch für 2. Semester funktioniert.
Dann gibt es noch die mit "SHK"-Label (sogar alle "high prio"). Sind die wirklich obsolet? Die sind teilweise relativ neu?
Ja. Das gehört alles zum Quickstart und der muss für das ECS ja eh neu gemacht werden. Obwohl ich versuchen werde, die ECS-Dokumentation zu zu schreiben, dass es als Einstiegspunkt auch für 2. Semester funktioniert.
Ah, stimmt, das ist fast alles Dokumentation (erstellen/anpassen) und einmal "Pathfinding durchblicken". Im Dungeon ist das Ticket "Alle Doku und Quickstart neu schreiben" oder so?
Im Dungeon ist das Ticket "Alle Doku und Quickstart neu schreiben" oder so?
Für mich ist (wenn wir fertig sind) Framework==ECS, daher gehört das alles zu https://github.com/Programmiermethoden/Dungeon/issues/187
Ich mach hier zu. Das Issue kommt aus dem alten Repo und ich wollte es nur nutzen, um meine Checkboxen zu Isseus transferieren zu können. Jetzt ist das hier ehr ein Sammelissue
Im Dungeon haben wir dieses Framework genutzt, um eine ECS basierte Struktur aufzusetzen. Das hat gut Funktioniert und das entwickeln neuer Features im ECS ist deutlich angenehmer. Zusätzlich ist die Lesbarkeit der Strukturen und des Codes deutlich einfacher.
Es wäre denkbar, das Framework vollständig auf dieses ECS System umzubauen. Dafür könnten wir viel des Codes im Dungeon übernehmen. Nach einer erster Einschätzung müsste kein/nur wenig Code neu geschrieben werden, einige Strukturen könnten sogar entfernt werden.
Was mir besonders gut gefällt ist, das wir im Dungeon bereits einiges an Basisfunktionen implementiert haben und dann direkt mit vorgeben könnten. Ich denke da z.B an das Hitbox-System, welches das Spiel stark aufwertet aber einfach doof zu implementieren ist und für Studis auch nicht grade motivieren ist. Die Studis könnten sich also mehr auf "sichtbare" Spielinhalte konzentrieren.
Edit:
Ich erstell mir hier mal eine Checkliste, und wenn wir hier fertig sind tranferiere ich dieses Issue nach drüben und generier mir Issues aus der Checkliste