((META (EMPTY-STRING title "Erste Ideen für DASgo") (WORD role "post") (TAG-SET tags ("#das")) (WORD syntax "zmk") (STRING author "Detlef Stern") (NUMBER box-number "1") (STRING copyright "") (TIMESTAMP created "20231125201324") (WORD lang "de") (EMPTY-STRING license "CC-BY-SA 4.0") (TIMESTAMP modified "20240429150924") (TIMESTAMP published "20240429150924") (WORD visibility "public")) (BLOCK (PARA (FORMAT-QUOTE () (TEXT "DAS")) (ENDNOTE () (TEXT "Die Ähnlichkeit zu GNU ist Absicht")) (TEXT " ist die Software zum Agilen Studieren.") (SOFT) (TEXT "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.") (SOFT) (TEXT "Studierende soll sie helfen, die Arbeit in den Lerngruppen zu vereinfachen.")) (PARA (FORMAT-QUOTE () (TEXT "DASgo")) (TEXT " ist die Neuimplementierung dieser Software.") (SOFT) (TEXT "Die bisherige, noch funktionierende Version (") (FORMAT-QUOTE () (TEXT "DASpy")) (TEXT "), ist mit Hilfe von Python implementiert worden.") (SOFT) (TEXT "Aus Gründen, die ich ") (LINK-EXTERNAL () "https://t73f.de/blog/2023/das/" (TEXT "hier")) (TEXT " beschrieben habe, muss ich die Software neu implementieren.")) (PARA (TEXT "Was sind die ersten Entscheidungen?")) (ORDERED (BLOCK (PARA (TEXT "Die Software wird in Go implementiert.")) (PARA (TEXT "Ich habe mit dem ") (LINK-EXTERNAL () "https://zettelstore.de/" (TEXT "Zettelstore")) (TEXT " sehr gute Erfahrungen mit Go gemacht.") (SOFT) (TEXT "Sie ist auch für Studierenden recht leicht zu erlernen, besonders wenn diese vorher Python erlernt hatten."))) (BLOCK (PARA (TEXT "Als Datenbank verwende ich ") (LINK-EXTERNAL () "https://sqlite.org/" (TEXT "SQLite")) (TEXT ".")) (PARA (TEXT "In DASpy habe ich noch PostgreSQL verwendet.") (SOFT) (TEXT "Das ist ein sehr stabiles, skalierbares Datenbankmanagementsystem.") (SOFT) (TEXT "Ein langes Wort.") (SOFT) (TEXT "Bedeutet auch, dass der Administrationsaufwand allein für PostgreSQL nicht unerheblich ist.") (SOFT) (TEXT "Zudem läuft so nicht nur eine einzige zu betreibende Software, nämlich DASpy, sondern auch noch PostgreSQL.")) (PARA (TEXT "SQLite ist das am verbreitetste Datenbanksystem.") (SOFT) (TEXT "In so gut wie jedem Mobilgerät, jedem Web-Browser, in eingebetteten Systemen.") (SOFT) (TEXT "Es läuft sehr stabil und ist auch für mittlere bis große Lasten geeignet.") (SOFT) (TEXT "SQLite ist nur eine Bibliothek, d.h. es wird in die nutzende Software eingebunden.") (SOFT) (TEXT "Es läuft nicht nebenläufig / parallel zur nutzenden Software.")) (PARA (TEXT "Während viele Programme gleichzeitig auf von PostgreSQL verwalteten Datenbank zugreifen können, sollte auf eine SQLite-Datenbank nur ein Programm zugreifen.") (SOFT) (TEXT "Das ist hier der Fall.") (SOFT) (TEXT "DASgo wird das einzige Programm sein, dass auf die Datenbank zugreift."))) (BLOCK (PARA (TEXT "DASgo ist wie DASpy eine web-basierte Software.")) (PARA (TEXT "Dies hat sich in der Vergangenheit bewährt.") (SOFT) (TEXT "Allerdings werde ich versuchen, die Software etwas einfacher bedienbar zu machen.") (SOFT) (TEXT "In DASpy wird (fast) nur HTML und CSS verwendet.") (SOFT) (TEXT "Lediglich für das Eingabefeld von Lösungsvorschlägen war etwas JavaScript notwendig.") (SOFT) (TEXT "JavaScript ist eine Sprache, in der ich mich nicht besonders wohl fühle.")) (PARA (TEXT "DASgo wird natürlich ebenfalls HTML und CSS verwenden.") (SOFT) (TEXT "Für die Eingabefehler für Lösungsvorschläge wird immer noch das gleiche / ähnliche JavaScript verwendet.") (SOFT) (TEXT "Ansonsten versuche ich, ") (LINK-EXTERNAL () "https://htmx.org/" (TEXT "htmx")) (TEXT " einzusetzen.") (SOFT) (TEXT "Damit muss ich weniger JavaScript-Code erstellen, und erhalte trotzdem eine ansprechende Bedienung."))) (BLOCK (PARA (TEXT "Als Softwarearchitektur nutze ich die ") (LINK-EXTERNAL () "https://alistair.cockburn.us/hexagonal-architecture/" (TEXT "hexagonale Architektur")) (TEXT ".")) (PARA (TEXT "Mit dieser Architektur habe ich bei der Entwicklungs des Zettelstores und einer weiteren Software (zur Gruppeneinteilung) gute Erfahrungen gemacht.") (SOFT) (TEXT "Sie benötigt zwar einigen initialen Zusatzaufwand, bietet aber später eine sehr gute Wartbarkeit."))) (BLOCK (PARA (TEXT "Als Web-Routing-Software verwende ich zunächst ") (LINK-EXTERNAL () "https://go-chi.io/" (TEXT "Chi")) (TEXT ".")) (PARA (TEXT "Langfristig möchte ich die für Go 1.22 angekündigte Routing-Software verwenden.") (SOFT) (TEXT "Allerdings kommt diese Version wahrscheinlich frühestens Februar 2024 heraus.") (SOFT) (TEXT "So lange möchte ich nicht warten.")) (PARA (TEXT "Nach einiger Recherche habe ich mich für Chi entschieden, weil diese Software die geringsten Unterschiede zum Go-Routing aufweist.") (SOFT) (TEXT "Der Umstellungsaufwand sollte gering sein, so hoffe ich.") (SOFT) (TEXT "Andere Bibliotheken / Frameworks waren entweder unnötig komplex, unnötig mächtig oder zu speziell."))) (BLOCK (PARA (TEXT "Für die Generierung von HTML nutze ich meine eigene Software ") (LINK-EXTERNAL () "https://t73f.de/u/sxhtml" (TEXT "SxHTML")) (TEXT ".")) (PARA (TEXT "Mit SxHTML habe ich im Zettelstore sehr gute Erfahrungen gemacht") (ENDNOTE () (TEXT "Hmm, die Erfahrungen mit SxHTML sollte ich mal auf meinem persönlichen Blog beschreiben")) (TEXT ".") (SOFT) (TEXT "Es basiert auf einem kleinen LISP-Interpreter namens ") (LINK-EXTERNAL () "https://t73f.de/r/sx" (TEXT "Sx")) (TEXT ", der für diesen Zweck sehr leistungsfähig ist.")) (PARA (TEXT "Da Sx dann sowieso integriert ist, kann ich es auch für andere Zwecke nutzen.") (SOFT) (TEXT "Zum Beispiel für Konfigurationsdateien.") (SOFT) (TEXT "In einer möglichen Ausbaustufe könnte DASgo sogar auf einen Zettelstore zugreifen, in dem die Aufgabenstellungen und das initiale Lernmaterial abgelegt sind.")))) (PARA (TEXT "Ein erstes Domänenmodell habe ich schon erstellt.") (SOFT) (TEXT "Neugierige finden diesen und den restlichen Quelltext unter ") (LINK-EXTERNAL () "https://t73f.de/r/das-go") (TEXT ".") (SOFT) (TEXT "Noch ist nicht zu viel da, aber das wird sich in Zukunft hoffentlich ändern."))))