Benutzer-Werkzeuge

Webseiten-Werkzeuge


javaonline:changelog

Java-Online: Changelog

  • 01.08.2019 - 31.07.2020: Entwicklung der Grundfunktionalität
    Meinen 10. Klassen im Schuljahr 2019/2020 möchte ich an dieser Stelle herzlich danken für die vielen Verbesserungsvorschläge und für ihre Geduld beim Arbeiten mit den allerersten - oft noch ziemlich fehlerbehafteten - Programmversionen!
  • 01.08.2020 - 01.09.2020
    • Fertigstellung des Backends zur Benutzerverwaltung für Lehrkräfte und Administratoren
  • 09.09.2020 - 23.09.2020:
    • Möglichkeit zum Austeilen von Workspaces an Klassen (Rechtsklick auf einen Workspace, dann "An Klasse austeilen…")
    • "Klammerwarnung": Sobald eine inkonsistente Klammerung vorliegt, warnt der Compiler durch ein großes blinkendes Icon im rechten unteren Bildschirmbereich. Da der Editor beim Tippen einer öffnenden Klammer auch immer gleich die schließende hinzufügt und den Cursor dazwischensetzt, können die Schüler mit etwas Achtsamkeit erreichen, dass nie eine inkonsistent Klammerung vorliegt. Das Warnlicht (und der Undo-Button gleich darunter) sollen sie mit vertretbarer Aufdringlichkeit dazu anhalten.
    • Einführung von zwei weiteren Error-Levels ("Warnung" und "Info" zusätzlich zu "Fehler"). Programme können trotz Warnungen und Infos gestartet werden.
    • Warnung bei leeren Loops, z.B.
while(i < 10);{
   println(i); 
}
  • Info, falls eine lokale Variable verwendet wird, bevor sie initialisiert wurde; Glühbirne zum Beheben des Problems am Rand.
  • Automatisches Setzen von Strichpunkten: Fehlt am Ende einer Zeile ein Strichpunkt und befindet sich der Cursor mindestens zwei Zeilen weiter oben oder unten, so ergänzt der Editor den Strichpunkt automatisch.
  • Info, falls der Wert eines Terms berechnet, aber dann nicht weiter verwendet wird, z.B. bei:
int i = 0;
while(i < 10){
   println(i);
   i + 1;
}
  • Verbesserungen am Auto-Formatter:
    • Auto-Einrücken bei switch … case ist jetzt deutlich schöner
    • Zieht sich ein Term über mehrere Zeilen, so werden die zweite und alle nachfolgenden Zeilen eingerückt. Das funktioniert bisher aber nur, wenn direkt vor oder nach den Zeilenumbruch ein binärer Operator steht.
    • Die Funktionen zur Benutzerverwaltung wurden verschoben nach Datei → Schulen/Klassen/Benutzer. Kleinere Bugs in der Benutzerverwaltung wurden gefixt.
    • Buttons zum Umschalten zwischen Präsentations- und Monitormodus neben dem Geschwindigkeitsregler. Für jeden Modus wird der gewählte Theme und die Editor-Schriftgröße gespeichert.
  • 23.09.2020 - 01.10.2020
    • Die Code-Snippets zum Einfügen von for(){…}, while(){…} usw. enthielten Platzhalter, mit denen die Schüler im Editor nicht gut zurechtkamen. Ich habe die Platzhalter jetzt entfernt und dafür Parameter-Hints missbraucht, um unaufdringlich Hilfen für die verschiedenen Bestandteile der Ablaufstrukturen zu bieten.
    • BugFix: im hellen Theme waren der Cursor und die Schrift im Eingabebereich von Input.readInt() usw. nicht zu sehen.
    • BugFix: die Farben im Dialog von Refactor→Rename (F2) hatten zu wenig Kontrast.
    • BugFix: Die Eingabe von "while();" führte zum Absturz des Compilers.
    • BugFix: Beim Hovern über Variablen erstreckte sich der aktive Hover-Bereich noch über den Variablenbezeichner hinaus eine Buchstaben nach rechts und überdeckte dadurch den Hover-Bereich des nächstfolgenden Tokens. Bsp.: im Fall von a++ bekam man die Kontexthilfe zum Operator ++ nur beim Hovern über das rechte +. Beim linken + bekam man noch die Kontexthilfe zur Variable a.
    • BugFix: Input.readInt() scrollte die Eingabezeile an das obere Ende des derzeit sichtbaren Bereichs. Das ließ bei einigen Browsern den kompletten Fensterinhalt um ca. 10px nach oben schieben.
    • Doku: In der Übersichtsseite zu den Tastaturkommandos standen noch die falschen F-Tasten für die Funktionen Start, Pause und Einzelschritt.
  • 07.10.2020:
    • Die Methode, in der der Cursor gerade steht, wird blau unterlegt.
    • Bugfix: Der Compiler überprüfte bei der Implementierung von abstrakten Methoden nicht, ob der Rückgabeparameter der Signatur übereinstimmt.
    • Bugfix: Die Ausgabe hat jetzt wieder einen automatischen Zeilenumbruch.
      Ziel für später: konfigurierbarer Zeilenumbruch, evtl. durch Methodenauf ein-/ausschaltbar
    • Bugfix: System.clearScreen() löschte nicht alles
  • 13.10.2020:
    • BugFix: Wenn ein Programm Emojis enthielt, wurde es nicht gespeichert.
    • BugFix: Der Server hatte zwei(!) Memory Leaks. ⇒ Servercode umfangreich überarbeitet, Leaks gestopft, Konsole zur Überwachung der Systemauslastung programmiert
    • Der Lexer akzeptiert jetzt auch Zahlenkonstanten (Literals) in binary, octal und hexadecimal (siehe auch hier)
    • BugFix: Wenige Stunden lang hatte ein Fehler im Lexer (s.o.) zur Folge, dass die Zahlenkonstante 0 nicht richtig geparst wurde und bspw. 0 == 0 den Wert false ergab.
    • Wenn ein Programm an einer Anweisung wie Input.readInt("Geben Sie eine Zahl ein"); hält, werden jetzt die Variablenbelegungen im Debugger-Fenster angezeigt.
  • 26.10.2020:
    • BugFix: implementierte eine Klasse ein Interface, so wurden die Methoden nicht richtig zugeordnet und angemahnt, dass die Methoden des Interfaces noch implementiert werden müssen.
    • Neuer Button zum Erweitern des Editors auf die volle Fensterbreite
    • Falls der Browser länger inaktiv ist (z.B. weil ein Laptop zugeklappt wurde oder der Rechner in den Energiesparmodus geht), wird der Benutzer automatisch abgemeldet, auch wenn Java-Online im Browser noch offen ist. Kehrt man wieder zur Arbeit zurück, so wird der Benutzer jetzt wieder automatisch angemeldet.
    • weitere kleine Bugfixes…
  • 14.12.2020:
    • Einige Bugfixes und kleinere Verbesserungen
    • Die Funktionalitäten rund ums Repository sind jetzt erstmals produktiv verfügbar (Vorsicht: Beta-Ware!)
    • Schüler können per Rechtsklick Dateien als "Hausaufgabe markieren". Sie werden der Lehrkraft unten im Hausaufgaben-Tab zur Auswahl gestellt. Hier eine Demonstration der Funktionalität anhand kurzer animierter gifs.
    • Korrekturen der Lehrkraft werden den Schülern wahlweise im Diff-View gezeigt.
  • 17.12.2020:
    • Workspaces können jetzt auch an einzelne Schüler/innen ausgeteilt werden
    • Klasse LocalDateTime zur Verwendung der Systemuhr und zum Rechnen mit Datumswerten.
  • 21.12.2020:
    • Wichtige Bugfixes: Generische Typen können jetzt auch mit Enums parametrisiert werden, daher ist jetzt auch enum test{}; ArrayList<test> t = new ArrayList<>(); möglich.
    • Enthält eine Klasse Attribute, die direkt bei der Deklaration initialisiert werden, so wird diese Initialisierung nicht mehr übergangen, wenn eine Kindklasse von dieser Klasse erbt.
    • Der Compiler lässt es jetzt nicht mehr zu, dass Objekte einer abstrakten Klasse instanziert werden.
  • 22.12.2020:
    • Klasse Vector2 zur 2D-Vektorrechnung begonnen
    • MouseListener-Klasse zum Reagieren auf Mausereignisse, die die gesamte Zeichenfläche betreffen (MouseUp, MouseDown, MouseMove, MouseEnter, MouseLeave)
    • Generation von Bounding-Polynomen für die Sprites optimiert
    • Line-Klasse zum Zeichnen von Strecken
  • 26.12.2020
    • Mittels der Navigationsbuttons des Browsers oder durch <Alt> + Pfeil links bzw. <Alt> + Pfeil lässt sich jetzt in der Historie der Bearbeitungsstellen zurück- und vorwärts springen
    • Tippt der Benutzer "class" und gibt es in der Datei noch keine Klasse, so schlägt der Computer vor: "class <Dateiname> { }"
  • 08.01.2021
    • Die Netzwerkfunktionalität ist bis zu einem ersten funktionsfähigen Stand entwickelt und auch schon recht weitgehend getestet. Clientseitig wird sie durch die Klassen WebSocket und WebSocketClient repräsentiert.
    • Die Repository-Funktionalität ist grob getestet, alle bisher bekannten Bug sind gefixt
    • Viele weitere Bugfixes
  • 26.01.2021
    • Ein großer Teil der Processing-Bibliothek (genauer: p5.js) ist jetzt integriert. Alles steht hübsch gekapselt in der Klasse PApplet zur Verfügung. Hier finden Sie Anleitung zum Programmieren mit Beispielen.
    • Das Klassendiagramm wurde überarbeitet und erweitert:
      • Beim Klick auf die Bezeichner der Klassen, Methoden und Attribute innerhalb der Klassenkästen zeigt der Editor jeweils die Stelle der Deklaration.
      • Defaultmäßig werden ab jetzt nur die selbst programmierten Klassen angezeigt. Per Klick auf den Menübutton links oben (drei horizontale Linien) sind aber auch die Systemklassen einblendbar.
      • Alle Klassen werden initial minimiert (ohne Attribute und Methoden) dargestellt.
      • Per Mausklick auf den Hintergrund des Diagramms lässt sich die Diagrammfläche scrollen (Panning).
    • Der Parser verarbeitet jetzt auch JavaDoc-Kommentare direkt vor der Definition einer Klasse/Methode/eines Attributes, so dass sie beim Hovering über einem Typen/einem Methodenbezeichner/einem Attributbezeichner mit angezeigt werden.
  • 01.02.2021
    • Mehrere Bugfixes bei der Verwaltung von Repositories, insbesondere beim Übertragen der Eigentümerschaft von einem Nutzer auf einen anderen.
    • Beim Anlegen neuer Nutzer wurde es ab dem 6. Benutzer unerträglich langsam (40 s pro neuem Nutzer…). Schuld war ein Problem des Zufallszahlengenerators in Linux.
  • 09.02.2021
    • Beim Anlegen von Benutzern ist jetzt der Import von Schülerdaten aus Tabellen (z.B. von Excel her) möglich.
  • 17.04.2021
    • Der Compiler kennt jetzt auch bitweise Operatoren (&, |, ^, ~, », «, »> und die entsprechenden Zuweisungsoperatoren &=, |= usw.).
      @Ralf Rachinger: Danke für den Pull-Request!
    • Bessere Kollisionserkennung bei FilledShape-Unterklassen
  • 07.05.2021
    • Zwei neue Grafikklassen: Arc (Kreisbogen, ggf. auch gefüllt) und Sector (Kreissektor)
    • Mehrere Anzeigeprobleme bei Safari und Firefox wurden behoben
    • Bessere Unterstützung für Touch Devices (z.B. iPad)
  • 12.05.2021
    • Bessere Unterstützung von Texturen: Group.renderAsStaticBitmap, new Sprite(shape), new Polygon(shape). Die Klasse Bitmap ist jetzt doppelt so schnell und verbraucht viel weniger Speicher
    • Umstellung der Tabellen auf der Admin-Seite von selectType "cell" zu "row"
    • Color.fromHSL und Color.fromHSLA
  • 22.05.2021
    • Integration der Bibliothek "Graphics and Games"
    • Klasse Random mit Methoden nextInt, randInt und randDouble
  • 11.06.2021
    • In der Liste der Wokspaces können jetzt Ordner angelegt werden. Sowohl Workspaces als auch Dateien können dupliziert, kopiert und verschoben werden
    • Viele neue Sprites
    • Mit Shape.setActive(false) kann bewirkt werden, dass graphische Objekte von Transformationen der Welt (World.move, World.rotate, World.scale) ausgenommen werden. Damit lässt sich z.B. eine Punkteanzeige verwirklichen, die nicht mit dem Hintergrund mitscrollt
    • Shape.moveBackFrom(otherShape, keepColliding) macht den letzten Aufruf von Shape.move teilweise rückgängig, so dass sich die Shapes gerade nicht mehr bzw. gerade noch berühren.
    • Shape.directionRelativeTo(otherShape) liefert die grobe Richtung (rechts/links/oben/unten), in der das andere Shape liegt.
    • In der Klasse MathTools werden ab sofort alle mathematischen Hilfsfunktionen gesammelt, die nicht Teil der Java-Standardklasse Math sind. Den Anfang machen einige Funktionen zur Bestimmung von Schnittpunkten von 2D-Figuren (Kreis, Polygon, …)
    • Die Methode collidesWith näherte bisher alle Figuren (auch Kreise) als Polygone an. Neu: Die Kollision zweier Kreise miteinander wird jetzt exakt berechnet.
  • 14.06.2021
    • Alle Unterklassen von Actor (und damit auch die Unterklassen aller graphischen Objekte) besitzen jetzt Methoden zur Abfrage von Gamepads:
      • isGamepadConnected(int gamepadIndex) gibt true zurück, wenn das Gamepad mit dem angegebenen Index eingesteckt ist (Erstes Gamepad: gamepadIndex == 0)
      • isGamepadButtonDown(int gamepadIndex, int buttonIndex) gibt true zurück, wenn der Button mit dem angegebenen Index gerade heruntergedrückt ist
      • getGamepadAxis(int gamepadIndex, int axisIndex) gibt den Wert der Steuerknüppel-Achse mit dem Index axisIndex zurück. Der Wert ist eine Zahl aus [-1; 1], wobei 0 der Mittelstellung entspricht.
  • 21.06.21
    • Komplettüberarbeitung der Welt-Transformationen (World.move, World.scale, World.rotate). Die Umsetzung ist jetzt klarer und wesentlich performanter.
    • Die Methode Sprite.makeTiling(double width, double height) macht aus einem Sprite eine "Kachelwand" mit lauter identischen, aneinandergereihten Bildern. Mittels Sprite.getTileImage bekommt man ein Objekt, mithilfe dessen man die Kachelbilder verschieben/strecken kann. Dies wirkt sich gleichzeitig auf alle Kacheln aus, so dass sich damit ein zyklischer Scroll-Effekt erzielen lässt.
  • 25.06.2021
    • Verbesserung der GUI der Workspaceliste; Button "Alle Ordner zuklappen"
  • Juli/August 2021
    • Erweiterung der Server-Komponente um eine Caching-Schicht ⇒ deutlich bessere Performance beim Abarbeiten der Requests
    • Programmierung eines Portal-Servers, der die Startseite anzeigt, die Login-Daten der Benutzer entgegennimmt und dann zu einem von mehreren Backend-Servern weiterleitet ⇒ Ab jetzt echte Verteilung der Last auf mehrere Server möglich
    • SQL-IDE:
      • Einlesen der Datenbankstruktur von SQLite
      • Lexer, Type-System (aufbauend auf der eingelesenen Datenbankstruktur), Parser, Symbol-Resolver für einen Kern-Teil der SQL-Syntax
      • Editor: Syntax-Highlighting, Anzeige der Fehler, Code-Vervollständigung
  • September 2021
    • Einfärben der Klammern im Quelltext: Zusammengehörige Klammern bekommen die selbe Farbe.
    • Nach dem Einloggen erscheinen die Ordner in der Workspace-Liste jetzt initial zugeklappt (bis auf die Ordner, die den zuletzt geöffneten Workspace enthalten).
    • Methode System.exit hinzugefügt
javaonline/changelog.txt · Zuletzt geändert: 2021/10/15 08:03 von Martin Pabst