((p (@L (@H "„") "DAS" (@H "“")) (sup (@ (id . "fnref:1")) (a (@ (class . "zs-noteref") (href . "#fn:1") (role . "doc-noteref")) "1")) " ist die Software zum Agilen Studieren." " " "Sie soll Lehrende helfen, sich auf die Arbeit mit den Gruppen konzentrieren zu können, ohne zu sehr mit Verwaltung der Abgaben beschäftigt zu sein." " " "Studierende soll sie helfen, die Arbeit in den Lerngruppen zu vereinfachen.") (p (@L (@H "„") "DASgo" (@H "“")) " ist die Neuimplementierung dieser Software." " " "Die bisherige, noch funktionierende Version (" (@L (@H "„") "DASpy" (@H "“")) "), ist mit Hilfe von Python implementiert worden." " " "Aus Gründen, die ich " (a (@ (class . "external") (href . "https://t73f.de/blog/2023/das/")) "hier") " beschrieben habe, muss ich die Software neu implementieren.") (p "Was sind die ersten Entscheidungen?") (ol (li (p "Die Software wird in Go implementiert.") (p "Ich habe mit dem " (a (@ (class . "external") (href . "https://zettelstore.de/")) "Zettelstore") " sehr gute Erfahrungen mit Go gemacht." " " "Sie ist auch für Studierenden recht leicht zu erlernen, besonders wenn diese vorher Python erlernt hatten.")) (li (p "Als Datenbank verwende ich " (a (@ (class . "external") (href . "https://sqlite.org/")) "SQLite") ".") (p "In DASpy habe ich noch PostgreSQL verwendet." " " "Das ist ein sehr stabiles, skalierbares Datenbankmanagementsystem." " " "Ein langes Wort." " " "Bedeutet auch, dass der Administrationsaufwand allein für PostgreSQL nicht unerheblich ist." " " "Zudem läuft so nicht nur eine einzige zu betreibende Software, nämlich DASpy, sondern auch noch PostgreSQL.") (p "SQLite ist das am verbreitetste Datenbanksystem." " " "In so gut wie jedem Mobilgerät, jedem Web-Browser, in eingebetteten Systemen." " " "Es läuft sehr stabil und ist auch für mittlere bis große Lasten geeignet." " " "SQLite ist nur eine Bibliothek, d.h. es wird in die nutzende Software eingebunden." " " "Es läuft nicht nebenläufig / parallel zur nutzenden Software.") (p "Während viele Programme gleichzeitig auf von PostgreSQL verwalteten Datenbank zugreifen können, sollte auf eine SQLite-Datenbank nur ein Programm zugreifen." " " "Das ist hier der Fall." " " "DASgo wird das einzige Programm sein, dass auf die Datenbank zugreift.")) (li (p "DASgo ist wie DASpy eine web-basierte Software.") (p "Dies hat sich in der Vergangenheit bewährt." " " "Allerdings werde ich versuchen, die Software etwas einfacher bedienbar zu machen." " " "In DASpy wird (fast) nur HTML und CSS verwendet." " " "Lediglich für das Eingabefeld von Lösungsvorschlägen war etwas JavaScript notwendig." " " "JavaScript ist eine Sprache, in der ich mich nicht besonders wohl fühle.") (p "DASgo wird natürlich ebenfalls HTML und CSS verwenden." " " "Für die Eingabefehler für Lösungsvorschläge wird immer noch das gleiche / ähnliche JavaScript verwendet." " " "Ansonsten versuche ich, " (a (@ (class . "external") (href . "https://htmx.org/")) "htmx") " einzusetzen." " " "Damit muss ich weniger JavaScript-Code erstellen, und erhalte trotzdem eine ansprechende Bedienung.")) (li (p "Als Softwarearchitektur nutze ich die " (a (@ (class . "external") (href . "https://alistair.cockburn.us/hexagonal-architecture/")) "hexagonale Architektur") ".") (p "Mit dieser Architektur habe ich bei der Entwicklungs des Zettelstores und einer weiteren Software (zur Gruppeneinteilung) gute Erfahrungen gemacht." " " "Sie benötigt zwar einigen initialen Zusatzaufwand, bietet aber später eine sehr gute Wartbarkeit.")) (li (p "Als Web-Routing-Software verwende ich zunächst " (a (@ (class . "external") (href . "https://go-chi.io/")) "Chi") ".") (p "Langfristig möchte ich die für Go 1.22 angekündigte Routing-Software verwenden." " " "Allerdings kommt diese Version wahrscheinlich frühestens Februar 2024 heraus." " " "So lange möchte ich nicht warten.") (p "Nach einiger Recherche habe ich mich für Chi entschieden, weil diese Software die geringsten Unterschiede zum Go-Routing aufweist." " " "Der Umstellungsaufwand sollte gering sein, so hoffe ich." " " "Andere Bibliotheken / Frameworks waren entweder unnötig komplex, unnötig mächtig oder zu speziell.")) (li (p "Für die Generierung von HTML nutze ich meine eigene Software " (a (@ (class . "external") (href . "https://t73f.de/u/sxhtml")) "SxHTML") ".") (p "Mit SxHTML habe ich im Zettelstore sehr gute Erfahrungen gemacht" (sup (@ (id . "fnref:2")) (a (@ (class . "zs-noteref") (href . "#fn:2") (role . "doc-noteref")) "2")) "." " " "Es basiert auf einem kleinen LISP-Interpreter namens " (a (@ (class . "external") (href . "https://t73f.de/r/sx")) "Sx") ", der für diesen Zweck sehr leistungsfähig ist.") (p "Da Sx dann sowieso integriert ist, kann ich es auch für andere Zwecke nutzen." " " "Zum Beispiel für Konfigurationsdateien." " " "In einer möglichen Ausbaustufe könnte DASgo sogar auf einen Zettelstore zugreifen, in dem die Aufgabenstellungen und das initiale Lernmaterial abgelegt sind."))) (p "Ein erstes Domänenmodell habe ich schon erstellt." " " "Neugierige finden diesen und den restlichen Quelltext unter " (a (@ (class . "external") (href . "https://t73f.de/r/das-go")) "https://t73f.de/r/das-go") "." " " "Noch ist nicht zu viel da, aber das wird sich in Zukunft hoffentlich ändern."))