1. Experiment 1: [Zig-ics-merger]
Datum: [04.04.2024] Thema: [Zig-ics-merger]
1.1. Einleitung
Zur Organisation von Vorlesungen verwenden die meisten Studierenden Tools wie Units, um ihre Termine zu verwalten. Normalerweise wird für jeden Studiengang ein eigener Kalender erstellt, der dann in gängige Kalenderanwendungen wie Google, Microsoft oder Apple importiert werden kann. Allerdings funktioniert dies nur für Pflichtveranstaltungen. Wahlveranstaltungen müssen weiterhin manuell aus Untis ausgewählt und separat in den eigenen Kalender eingetragen werden.
1.2. Motivation
Der Beginn eines neuen Semesters bedeutet oft, den eigenen Kalender neu zu organisieren und sich einen Überblick über alle Vorlesungen zu verschaffen. Unser Ziel ist es, ein Tool zu entwickeln, das es ermöglicht, alle Vorlesungen, die der Studierende in diesem Semester belegt, aus Untis in den eigenen Kalender zu importieren. Dabei liegt der Schwerpunkt auf der Nutzung der Programmiersprache Zig als Mittel, um sowohl die Funktionalitäten des Tools zu realisieren als auch die Programmiersprache selbst kennenzulernen.
1.3. Aufgabenstellung
Die Hauptaufgabe besteht darin, ein Tool zu entwickeln, das es ermöglicht, alle Vorlesungen, die ein Studierender in diesem Semester belegt, aus Untis heruntergeladene iCal-Dateien zu verwenden und sie miteinander zu fusionieren. Dabei soll das Tool in der Programmiersprache Zig implementiert werden. Die genauen Schritte umfassen:
Analyse der Struktur und des Inhalts der heruntergeladenen iCal-Dateien.
Entwicklung eines Algorithmus zum Zusammenführen mehrerer iCal-Dateien unter Berücksichtigung von Überschneidungen und Duplikaten.
Implementierung des Tools unter Verwendung der Zig-Programmiersprache.
Testen des entwickelten Tools mit verschiedenen Szenarien und Datensätzen.
Dokumentation der Implementierungsschritte sowie der Ergebnisse und Erkenntnisse aus den Tests.
1.4. Grundlagen
Für die Umsetzung des Tools wird die Programmiersprache Zig verwendet. Anstelle der Nutzung einer REST-API und dem direkten Zugriff auf Stundenpläne in Untis werden bereits heruntergeladene iCal-Dateien verwendet und miteinander fusioniert. Die iCal-Dateien enthalten die Kalenderdaten im Standardformat und werden mittels geeigneter Bibliotheken bearbeitet.Versuchsdurchführung
1.5. Versuchsdurchführung
Es musste sich zuerst mit dem grundlegenden Projektaufbau von Zig befasst werden. Zum späteren Vergleich wurde das Programm in Rust umgesetzt, und später in Zig überführt. Die Rust implementieren stellte sich als relativ einfach und unkompliziert herraus, wohingegen die selben Prozesse in Zig anders und komplizierter durchzuführen waren. So wurde zum Beispiel in beiden Implementierungen eine Bibliothek benutzt die das parsen von Kommandozeileargumenten ermöglicht. In rust geschieht dies durch den Package-Manager cargo, der sein eigenes Repository besitzt und somit durch ein einzelnes Kommando das Paket hinzufügt. Zig besitzt ebenfalls einen eingebauten Package-Manager namens Zon, welcher allerdings kein eigenes Repository besitzt. Hier ist es nötig in der Datei „build.zig.zon“ den Download zu einem tar.gz Archiv anzugeben, und dessen Hashwert zu ermitteln. Die einfachste möglichkeit dies zu tun ist es seltsamerweise einen zufälligen falschen Hashwert anzugeben, und diesen später durch den vom Compilerfehler gegebenen zu ersetzen. Nachdem man nun auch das Paket in der „build.zig“ Datei ins Scope hinzugefügt hat, kann man es ganz normal nutzen.
Die reine Implementation und Lösung des ursprünglichen Problems, lies sich in beiden fällen relativ leicht durch vorgefertigte code snippets umsetzen. Generell lässt sich aber sagen dass sich für uns Zig deutlich rudimentärer angefühlt hat als Rust. Es gibt keine generellen String typen und auch die Dokumentation war wesentlich geringfügiger als die von Rust. Es wurde absichtlich auf eine kompliziertere Implementierung verzichted, um den Fokus auf die allgemeine Projektorganisation zu legen.