Status Update #6 - Chunkli

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

      Status Update #6 - Chunkli

      Hey,

      in der letzten Zeit habe ich an der Weiterentwicklung von Chunkli gearbeitet. Im Folgenden geht es daher um eine Einsicht in die dabei genutzte Hintergrundtechnik und um die üblichen Probleme in der Programmierung bei der Entwicklung. Bei der Weiterentwicklung von Chunkli geht es u.A. darum eine bessere Unterstützung für andere Plugins zu bieten, sowie eine bessere Übersicht für die Nutzer zu haben. Dafür ist unter anderem eine Website in Arbeit und eine Plugin-Schnittstelle, die von anderen Plugins genutzt werden kann (ähnlich wie das Bukkit-Projekt zu CraftBukkit). Im Bild kann man den groben Aufbau der Architektur sehen.

      Backend: Es wird eine NOSQL Datenbank eingesetzt, welche gut skalierbar ist (Couchbase). Diese wird über die das dafür erstellte Java SDK von der API/Middleware angesprochen. Ein Großteil der Abfragen beim Konzept Chunkli sind atomare/eindeutige abfragen. Aus diesem Grund eignet sich eher eine NoSQL-Datenbank als eine relationale Datenbank.

      Middleware: Die Middleware selber ist in Java geschrieben. NoSQL-Datenbanken setzen in der Regel auf JSON-Dokumente und Couchbase selber nutzt auch dafür bereits Jackson. Aus diesem Grund habe ich sowohl im Plugin als auch in der Middleware den Code von Gson auf Jackson umgebaut. Der Kommunikationslayer/API wird über Spring gelöst.

      Website: Als Sprache verwende ich TypeScript und das noch sehr neue Angular2 Framework.

      Plugin: Hier habe ich wie oben geschrieben bisher auf Gson gesetzt für die Verarbeitung von Dokumentdaten und stelle dies aktuell auf Jackson um. Daneben kommt für die Datenkompression Kryo zum Einsatz und ich stelle auf Grund des nun neu in der Middleware verwendeten Spring-Frameworks auch hier das Gegenstück für die Kommunikation ein.








      Einen Großteil der Zeit verbringe ich aktuell mit der Website, weil ich mich hier zunächst selber noch stark einarbeiten muss - eine neue Sprache und Frameworks lernen kostet viel Zeit. Da Angular2 noch sehr neu ist gibt es leider auch nicht so viele Tutorials wie man gerne hätte und viele der Tutorials sind bereits veraltet, weil das Framework verändert wurde.

      Es ist auch nicht einfach von einer Sprache wie Java zu JavaScript zu gehen, die in der Website/Frontend-Enwticklung allgegenwärtig ist. JavaScript war bei der Entwicklung niemals für das gedacht, für das sie heute eingesetzt wird. Daneben fehlen sehr viele Hilfskonstrukte und die Unmengen an Sonderfällen in der Behandlung von Objekten macht die Sache auch nicht einfacher.
      Da JavaScript absolut ungeeignet ist für die Aufgaben, die heutzutage an die Sprache gestellt werden (riesige Applikationen) wurden u.A. von Google und Microsoft Lösungen für diese Probleme entwickelt. Google bastelt hier an 'Dart' und Microsoft an TypeScript.

      Zum aktuellen Zeitpunkt sehe ich zu TypeScript keine wirkliche Konkurrenz. Auch Google selber setzt bei der Entwicklung von Angular 2 auf die Lösung von Microsoft TypeScript . Tausende Zeilen Code gut zu verwalten ist mit JavaScript sonst einfach nicht möglich.


      Für das Projekt Chunkli ist es u.A. nötig Daten der Mojang-API zu cachen, da sonst Fehler/Probleme entstehen können. Auf Kadcon kann man dies z.B. mit FakeStuff direkt merken wenn man versucht innerhalb von 60 Sekunden auf zwei unterschiedlichen Servern den gleichen FPlayer zu setzen. In diesem Zusammengang habe ich dann um die Technologien zu testen/lernen auch einen Status-Tracker für alle Mojang-Services erstellt. Im Bild kann man sehen dass einige der Services für einen kurzen Moment nicht erreichbar waren.






      Daneben wird es dann auch neben vielen anderen Dingen einige Verbesserungen in der Handhabung von gespeicherten Objekten geben. Beispielhaft schlägt die Suchfunktion hier direkt Namen vor und erlaubt eine nachträgliche Filterung. Bis es hier etwas 'fertiges' gibt ist es noch ein langer Weg.






      Die dunkle Seite der Programmierung

      Bei der Programmierung braucht man vor allem sehr viel Geduld. Selbst Dinge die trivial wirken können Tage oder Wochen in Anspruch nehmen. Speziell wenn man wenig Erfahrung in der genutzten Sprache oder allgemein hat kann dies sehr frustrierend sein. Dies ist bei mir auch nicht anders. Beispielhaft hat es mich mehrere Tage gekostet bis die Status-Anzeige für den Mojang-Service so funktioniert hat wie ich es wollte. Dabei musste ich beim Testen diverser Chart-Frameworks immer wieder neu beginnen, weil bestimmte Dinge nicht gut unterstützt wurden. Bis man aber erst mal raus gefunden hat, dass diese Sache, die man gerade probiert mit dem Framework nicht geht können leider Stunden vergehen. Auch wie oben beschrieben macht es einem die genutzte Technologie gerne mal schwieriger als nötig. Die vielen kleinen Probleme/unschönen Seiten einer Sprache wie JavaScript können langes Kopfzerbrechen bereiten.
      Solche Probleme hat jeder Programmierer regelmäßig und es gibt nur eine Lösung: Viel Geduld und am nächsten Tag noch mal probieren.


      Kade
      Bilder
      • flow.png

        53,75 kB, 646×713, 1.129 mal angesehen
      • t7.gif

        1,23 MB, 887×732, 1.147 mal angesehen
      • cl.png

        114,03 kB, 1.200×930, 1.103 mal angesehen
      Bitte möglichst alle Fragen im Forum stellen und nicht mir per Privatnachricht.
      Ich Teile meine Zeit aktuell: 2,5 Tage 1.13, 2,5 Tage Arbeit, 1 Tag Kadcon. Eine PN-Antwort kann entsprechend länger dauern.

      Kademlia schrieb:

      Es ist auch nicht einfach von einer Sprache wie Java zu JavaScript zu gehen, die in der Website/Frontend-Enwticklung allgegenwärtig ist. JavaScript war bei der Entwicklung niemals für das gedacht, für das sie heute eingesetzt wird. Daneben fehlen sehr viele Hilfskonstrukte und die Unmengen an Sonderfällen in der Behandlung von Objekten macht die Sache auch nicht einfacher.
      Da JavaScript absolut ungeeignet ist für die Aufgaben, die heutzutage an die Sprache gestellt werden (riesige Applikationen) wurden

      Da sprichst du mir aus der Seele.


      Kademlia schrieb:

      Dabei musste ich beim Testen diverser Chart-Frameworks immer wieder neu beginnen, weil bestimmte Dinge nicht gut unterstützt wurden. Bis man aber erst mal raus gefunden hat, dass diese Sache, die man gerade probiert mit dem Framework nicht geht können leider Stunden vergehen. Auch wie oben beschrieben macht es einem die genutzte Technologie gerne mal schwieriger als nötig. Die vielen kleinen Probleme/unschönen Seiten einer Sprache wie JavaScript können langes Kopfzerbrechen bereiten.

      Das Problem hatte ich auch schon. Ich bin dann nach 5-6 Fehlversuchen (veraltete Software/Keine Dokumentation) bei ChartJS gelandet. Für welches Framework hast du dich entschieden?

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „d4n1el89“ ()

      Grüß dich Kade[mlia],
      ​uns geneigte LeserInnen an der aktuellen [Weiter-]Entwicklung von Kadcon mit deinen Status-Updates teilhaben zu lassen finde ich sehr gut, immer weiter so!
      Zu meinem eigentlichen Anliegen, dass eine Frage zur Funktionsweise von Chunkli betrifft. Hier im Forum wurde im Kontext verschiedener Themen immer mal wieder der Wunsch geäußert, Chunkli um eine Funktion zu erweitern, die es ermöglicht mit einem der geläufigen Chunkli-Befehle [zB. /land add <Name>] mehrere Chunks gleichzeitig zu beeinflussen. Meine Frage an dich lautet jetzt:

      • Wie hoch ist der Aufwand Chunkli um diese Funktion zu erweitern? Deine Antwort kann gerne auch in technische Details behandeln.

      ​Beste Grüße Dalavar
      Kritisches Denken lernen - [TEDx Talk - 2017]: youtube.com/watch?v=J5A5o9I7rnA&feature=youtu.be
      Big Think - Die großen Fragen 21.Jahrhunderts einfach erklärt: youtube.com/channel/UCvQECJukTDE2i6aCoMnS-Vg
      @Dalavar

      Hey,

      die Verwaltung von Grundstücken macht "Landli". Chunkli kümmert sich im Hintergrund zwar um die schweren Lasten dabei (Boden ersetzen etc.) aber kennt prinzipiell keine Grundstücke.

      Hier ein Auszug aus dem internen Bereich. Wichtig dabei: Das was hier zitiert ist setzt sowohl auf ein umgebautes Chunkli, komplett neuen Server sowie neu geschriebenes /land-Plugin um diverse Probleme zu beheben. Es ist nicht wahrscheinlich, dass dies auf den aktuell laufenden Servern zum Einsatz kommt. Der Post ist über ein Jahr alt und seitdem pausiert. Warum kann man hier lesen: Geburtstag - #665 - 5 Jahre Kadcon


      Edit: Bezüglich technischer Details: Es reicht hier eigentlich schon ein einziger Problemfall. Wenn du 6*6 GS auf einmal kaufst, müssen eine halbe Million Blöcke im Untergrund ersetzt werden; 36 Überweisungen und GSRundstücksdefinitionen erstellt werden und das alles muss auch noch geprüft werden. Du hast also eine extrem komplexe Transaktion die möglichst bei Problemen während der Ausführung auch ein Rollback unterstützt (z.B. wenn eines der Gs in einem ungültigen Zustand ist, welcher aber erst durch die Block-Ersetzung auffallen kann).


      Mehr Infos gibts zu dem Projekt aber nicht :P

      Kademlia schrieb:

      Nach dem Urlaub, bissl Krankheit und dann noch diversem Zeugs an Kadcon selbst (Lags, Updates, Bugfixes). Sitze ich nun wieder etwas an dem Projekt.

      Aktuell wieder viele GS auf einmal verwalten - das ist echt....boah. :wacko:

      Es soll 3 Grundstücksarten geben:
      - Single (wie aktuell überall auf Kadcon)
      - ExtendableCompound (Ein Bereich aus mehreren Grundstücken, der immer nur von einem Spieler besessen werden kann. Der Spieler muss die Grundstücke aber einzeln freikaufen. Gut z.B. für Spawnies. Da macht man dann pro Spieler direkt 4-10 GS, der Spieler kann am Anfang aber nur auf einem der GS bauen und muss den Rest mit der Zeit frei schalten.
      - FullCompound (Ein Bereich aus mehreren GS, der immer nur als Komplettfläche von einem einzigen Spieler zu einem Zeitpunkt gekauft werden kann)

      Für alle diese Flächen gilt natürlich, dass man sie Kaufen,Verkaufen,Aufkaufen,Flags Ändern, Anheben....können muss. Und dies eben Teilweise alles auf einmal. Auch muss offensichtlich sein, welche GS denn nun zu der größeren Fläche gehören - das ist garnicht mal so einfach anzuzeigen in MC.

      Entsprechend geht es ganz langsam vorwärts und die Haare auf meinem Kopf nehmen ganz langsam ab ^^


      Bilder
      • exmp.png

        263,03 kB, 1.280×720, 737 mal angesehen
      Bitte möglichst alle Fragen im Forum stellen und nicht mir per Privatnachricht.
      Ich Teile meine Zeit aktuell: 2,5 Tage 1.13, 2,5 Tage Arbeit, 1 Tag Kadcon. Eine PN-Antwort kann entsprechend länger dauern.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kademlia“ ()