Challenges im Überblick
“Eine Hackathon-Variante zur Evaluation der Klickdaten des KI-Tools ‘HaNS’”
1 Challenge 1
Daten verstehen
Betrachten Sie die (chronologisch) erste Datendatei und beantworten Sie folgende Fragen:
- Was ist die Anzahl von Zeilen und Spalten?
- Es gibt ein Muster in den Spaltennamen. Was fällt Ihnen dazu auf?
- Welche verschiedenen Spaltennamen gibt es, wenn man die Zahlen (fortlaufenden Nummern in den Spaltennamen) außer Acht lässt? Wie heißen diese (uniquen) Spalten?
- Was fällt Ihnen zur Anteil und zum Muster der fehlenden Werte auf?
- Was sind ID-Variablen und welche finden Sie im Datensatz?
- Sei \(X\) die Anzahl der Buchstaben Ihres Vornamens und \(Y\) die Anzahl der Buchstaben Ihres Nachnamens. Was steht in Zelle \((X,Y)\), also in der X. Spalte und Y. Zeile?
- Wie viele unique Werte finden sind in den Spalte
idVisit,visitip,visitorid,fingerprint,actiondetails_0_type,actiondetails_0_url,actiondetails_0_subtitle,actiondetail_0_eventcategory? - Listen Sie die unique Werte der o.g. Spalten auf (von der letzten Aufgabe).
- Was ist der häufigste Wert in der Spalte
actiondetails_0_typeund wie oft kommt dieser vor? - Vergleichen Sie die Spalten
actiondetails_0_subtitleundactiondetails_0_type. Was fällt Ihnen auf? - Nennen Sie drei Forschungsfragen, die sich mit diesem Datensatz beantworten lassen könnten.
Wickham, Çetinkaya-Rundel, und Grolemund (2023) stellt Schulungsmaterial auch für String-Verarbeitung bereit (im Kapitel 11) und (fortgeschrittener) im folgenden Kapitel. Mit dem R-Paket lubridate kann man recht bequem mit Datums- und Zeitangaben arbeiten. Möchte man einen Teil eines Strings entfernen, so ist die Funktion str_remove hilfreich. Da hilft das Paket stringr. Möchte man mehrere Spalten auf einmal (mit summarise) zusammenfassen, so hilft u.a. die Funktion across, die die Summarise-Operation “durch”, “hinweg”, “über” (engl. across) mehrere Spalten durchführt, s. Kap. 26 in Wickham, Çetinkaya-Rundel, und Grolemund (2023).
Ausgabeformat: Quarto (Bericht)
2 Challenge 2
Daten einlesen und aufbereiten
- Importieren Sie alle CSV-Dateien aus folgenden in R als Data Frames und binden Sie (zeilenweise) sie zu einem “langen” Data Frame: 2025-07-07 bis 2025-07-14
- Wandeln Sie leere Strings in NAs um (für alle Spalten).
- Entfernen Sie alle leeren Zeilen und Spalten.
- Entfernen Sie alle konstanten Zeilen und Spalten.
- Entfernen Sie alle redundanten Zeilen und Spalten, d.h. Duplikate, also sich wiederholende Zeilen und Spalten.
- Überlegen Sie die Vor- und Nachteile, wenn Sie diese Aufgaben mit Excel lösen würden.
- Exportieren Sie die Datentabelle als Excel-Datei. Prüfen Sie dann die Excel-Datei; fällt Ihnen etwas Besonderes auf?
- Welche Spalten halten Sie für nicht relevant, um das Nutzerverhalten besser zu verstehen?. Begründen Sie die Auswahl.
- Entfernen Sie redundante Spalten (nach eigenem Ermessen und mit Begründung).
- Behalten Sie - neben allgemeinen Informationen zum Nutzer - nur die Spalten mit
subtitleundtimestampim Namen. - Reparieren Sie die Spalten mit Datumsangaben.
- Entfernen Sie Spalten, die Bilddaten enthalten.
- Entfernen Sie Zeilen, die Daten von Admins, Developern oder
lecturers enthalten.
Ausgabeformat: Quarto-Dokument (Bericht)
3 Challenge 3
Datensatz pivotieren
Aufbauend auf dem Ergebnis der letzten Challenge:
Pivotieren Sie den Datensatz in das Langformat. Aber nehmen Sie ID-Variable
idvisitvom Pivotieren aus; d.h. Sie nehmen alle Spalten bis aufidvisitin das Pivotieren auf. Es sollen also drei Spalten resultieren:idvisit,nameundvalue.Jetzt pivotieren Sie den Datensatz erneut in das Langformat. Aber dieses Mal verwenden Sie eine andere ID-Variablen, nämlich
fingerprint. Ansonsten bleibt alles gleich. Es sollen also drei Spalten resultieren:fingerprint,nameundvalue.Jetzt pivotieren Sie den Datensatz erneut in das Langformat. Aber dieses Mal verwenden Sie zwei ID-Variaben: Die ID-Variable
idvisitund auchfingerprint. Ansonsten bleibt alles gleich. Es sollen also vier Spalten resultieren:idvisit,fingerprint,nameundvalue.Begrenzen Sie beim Pivotieren die Spalten auf die Spaltentypen mit dem Namen vom Typ
subtitle; d.h. Sie pivotieren nur diese genannten Spaltentypen. Es sollen also drei Spalten resultieren:idvisit,nameundvalue.Jetzt begrenzen Sie das Pivotieren wie in der vorherigen Aufgabe. Aber dieses Mal verwenden Sie die ID-Variable
fingerprint. Es sollen also drei Spalten resultieren:fingerprint,nameundvalue.Jetzt begrenzen Sie das Pivotieren wie in der vorherigen Aufgabe. Aber dieses Mal verwenden Sie zwei ID-Variablen:
idvisitundfingerprint. Es sollen also vier Spalten resultieren:idvisit,fingerprint,nameundvalue.Prüfen Sie, ob es stimmt, dass in der Spalte
namedie enthaltene Zahl die einzige Information ist. Anders gesagt: Außer der Zahl in den Wertennamesind alle Teile der Werte konstant.Die Spalten, die die Werte wie
actionDetails_0_subtitlenennen Sie inidum. Aus den Werten (wieactionDetails_0_subtitle) extrahieren Sie die Zahl in der Mitte des Textes (den Rest des jeweiligen Spaltennamens löschen).Erläutern Sie die Funktionen zum Lang-Pivotieren aus dem Tidyverse sowie aus einem anderen R-Paket, welches angibt, schneller zu sein als die Tidyverse-Funktion (also größere Datenmengen in der gleichen Zeit schafft). Geben Sie auch einen Faktor an, um diese Funktion angibt, schneller zu sein.
4 Challenge 4
Targets-Pipeline
- Schreiben Sie Ihre Analyse-Pipeline als Targets-Pipeline. Beginnen Sie mit dem Auflisten der Datendateien (wie in Challenge 02), gefolgt vom Einlesen, etc. Anders gesagt: Übertragen Sie Ihre Lösungen von Challenges 02 und 03 in die Targets-Pipeline.
- Pivotieren Sie dieses Mal wie folgt: Entfernen Sie alle Spalten außer den ID-Variablen
id_visitundfingerprintsowie allen Spalten, dieactionDetailsenthalten. Pivotieren Sie dann nur Spalten mit dem Namen vom TypactionDetails; d.h. Sie pivotieren nur diese genannten Spaltentypen. Es sollen also vier Spalten resultieren:idvisit,fingerprintnameundvalue. - Optional: Schreiben Sie ein Target, um den Datensatz am Ende der Pipeline als Excel-Datei zu exportieren.
- Diskutieren Sie Vor- und Nachteile der Targets-Pipeline.
Tipps:
- Lesen Sie sich die targets-Dokumentation durch.
- Diese Präsentation gibt einen guten Überblick über die Funktionsweise von Targets.
- Nutzen Sie ggf. das Template für die Lösung dieser Challenge (liegt im Repo im Root-Folder).
- Beim Importieren können sich die Spaltennamen ändern, z.B. von
actionDetails_XXXzuaction_details_XXX. - Nutzen Sie die Funktion
pivot_longer()aus dem Pakettidyrfür die Pivotierung. Bei Performanzproblemen könnte sich das Paketcollapseanbieten oder das Paketdata.table, wo es auch eine Pivotierungsfunktionen gibt. Auch das Paketpolarist für hohe Performanz bekannt.
Ausgabeformat: R-Syntax (Targets-Pipeline).
5 Challenge 5
Großer Datensatz
Arbeiten Sie mit Ihrer Pipeline weiter:
- Importieren Sie alle eingestellten Daten; lassen Sie die Pipeline auf dieser Basis neu durchlaufen.
- Gab es Probleme beim Importieren? Wenn ja, welche? Wie haben Sie diese gelöst? Beschreiben Sie.
- Wie viel Rechenzeit hat die Pipeline beansprucht?
- Stellen Sie sicher, dass die Spaltennamen einheitlich und im Tidyverse-Stil benannt sind.
- Berechnen Sie die wie viele Visits Ihr Datensatz umfasst.
- Berechnen Sie die Anzahl der Aktionen pro Visit.
- Berechnen Sie die Anzahl der Aktionen pro uniquen Besucher.
- Berechnen Sie außerdem , wie viele Aktionen pro Visit und pro uniqen Besucher stattfanden.
- Welche Betriebsysteme (Name und Version) und Browser werden von den Besuchern verwendet?
- Berechnen Sie die Anzahl der Tage seit dem letzten Besuch (pro Visit und pro uniquen Besucher).
- Berechnen Sie die Anzahl der Tage seit dem letzten Besuch pro Modul/Lehrveranstaltung (pro Visit und pro uniquen Besucher).
- Für alle in dieser Challenge berechneten Statistiken: Visualisieren Sie diese (mit ggplot), aber nicht in der Targets-Pipeline, sondern in einem Quarto-Dokument. Dieses Dokument können Sie als Target der Pipeline darstellen oder unabhängig von der Pipeline definieren. In jedem Fall aber greifen Sie auf die Objekte zurück, die Sie in der Pipeline berechnet haben.
- Fügen Sie zu Ihrem Quarto-Dokument auch eine “Selbstvergewisserung des Programmierers” hinzu: Visualisieren Sie das Targets-Netzwerk; berichten Sie die verwendeten R-Pakete und Ihr Betriebsystem.
Hinweise:
freadausdata.tableist ähnlich zuread.csv, aber schneller.- Bei Problemen während des Importieren kann es zu Problemen kommen, wenn die Spaltentypen der CSV-Dateien als unterschiedlich erkannt werden. Ein Workaround ist es, alle Spalten auf Typ “
character” zu setzen. Funktionen wiefreadundread_csvbieten dafür einen Parameter. rbindlistausdata.tableist ähnlich zurbind, was vonmap_dfraufgerufen wird, aber schneller und weniger streng, produziert also weniger Fehlermeldungen (was von Vorteil, aber auch von Nachteil sein kann).- Wenn Sie beim Importieren keinen Erfolg haben, dann überspringen Sie diesen Schritt und arbeiten Sie mit den Daten, die Sie bereits haben (als zweitbeste Lösung).
- Wenn Sie Probleme mit der Performance haben, dann reduzieren Sie zunächst die Datenmenge, indem Sie nur die ersten paar Dateien importieren. Kleinere Datenmengen sind auch für das Debuggen nützlich. Später erhöhen Sie dann wieder die Datenmenge.
- Mit einer “sessioninfo” kann man die im Durchlauf verwendeten R-Pakete und weitere Spezifika des verwendeten Computers (wie R-Version und Betriebsystem) angeben.
- Ein “visit” bezeichner auf Deutsch als “Besuch (der Webseite)”.
- Die Verteilung der Visits ist möglicherweise zensiert (“abgeschnitten”). Diskutieren Sie diesen Sachverhalt (im Quarto-Bericht).
Ausgabeformat: Quarto (Bericht) und R-Syntax (Targets-Pipeline). Reichen Sie auch etwaigen ausgelagerten R-Code ein (etwa Funktionen, die Sie sourcen).
6 Challenge 6
Zeiten und Verweildauer
Für alle folgenden Aufgaben dieser Challenge: Berichten Sie zentrale deskriptive Statistiken zu Lage und Streuung. Visualisieren Sie deren Verteilung.
- Berechnen Sie die Verweildauer: Wieviel Zeit verbringen die Nutzer pro Visit?
- Berechnen Sie die Verweildauer pro Nutzer. Berichten Sie die Verteilung.
- Berechnen Sie die Anzahl der Besuche im Zeitverlauf (pro Woche).
- An welchen Tagen und zu welcher Zeit kommen die Besucher zu HaNS?
- An welchen Wochentagen wird die Seite bevorzugt besucht?
- Zu welchen Uhrzeiten wird die Seite bevorzugt besucht?
- Geben Sie den Zeitraum der Nutzung an (von
bis ). Hier geht es um insgesamte erste (bzw. letzte) Nutzung über alle User hinweg. Gefragt ist der älteste und neueste Time Stamp, den der Server insgesamt/überhaupt protokolliert hat. - Wie ist die Verteilung der Visits?
- Brechen Sie die Verteilung der Visits auf nach folgenden Untergruppen: Module und Hochschule.
- Unterscheiden sich die Anzahl der Visits zwischen Vorlesungszeit und Semesterferien?
- Verändert sich die Verweildauer im Zeitverlauf (nimmt sie zu oder ab?)? Analysebasis: Woche. Berechnen Sie eine Regression dazu.
- Gibt es einen statistischen Zusammenhang von Modul/Lehrveranstaltung und Verweildauer?
- Gibt es einen statistischen Zusammenhang von Modul/Lehrveranstaltung und der Anzahl der Visits?
Ausgabeformat: Quarto (Bericht) und R-Syntax (Targets-Pipeline). Rendern Sie den Bericht im Format typst. Reichen Sie auch etwaigen ausgelagerten R-Code ein (etwa Funktionen, die Sie sourcen).
Hinweise:
- Bitte beachten Sie Hinweise zum Programmieren.
- Bei Fragen, die eine statistische Verteilung als Antwort haben, sollten Sie die Verteilung mit statistischen Methoden beschreiben. Beispiel: “Was ist die typische Verweildauer?” - Beispielhafte Antwort: “Die mittlere Verweildauer beträgt 3 Minuten, mit einer Standardabweichung von 2 Minuten. Die Verteilung ist rechtsschief.” Eine Visualisierung der Verteilung ist geboten (z.B. mit einem Histogramm).
7 Challenge 7
Interaktion mit dem LLM
- Auf welche Art und wie oft wird mit dem LLM interagiert? Suchen Sie dafür nach
eventcategory"llm"– zählen Sie die Werte der verschiedenen Kategorien. - Wie viele Nachrichten werden an das LLM gesendet von den Besuchern? (Tipp:
"message_to_llm"). - Wie groß ist der Anteil der Besucher, die mit dem LLM interagieren? (Tipp: Suchen Sie nach
"llm"in den Aktionen eines Besuchers). - Wie groß ist der Anteil der Besucher, die mit dem LLM interagieren, pro Kunde (Hochschule)?
- Verändert sich der Anteil der Besucher, die mit dem LLM interagieren, im Zeitverlauf?
- Die Länge der Prompts an das LLM ist wichtig zu wissen (da potenziell teuer). Werten Sie die Länge der Prompts an das LLM pro Visit aus. Messen Sie die Länge der Prompts in Tokens. (Tipp: R-Paket
tokenizers) - Unterscheidet sich die Token-Länge zwischen den Kunden (d.h. Hochschulen)?
- Unterscheidet sich die Token-Länge zwischen den Modulen?
- Unterscheidet sich die Token-Länge im Zeitverlauf?
- Wie oft wird wird auf ein Wort im LLM-Transkript geklickt? (Tipp: Suche nach
click_transcript_word.) - Wie verändert sich dieser Wert im Zeitverlauf?
- Wie lang ist der Output des LLMs (in Tokens)?
- Gruppieren Sie die Länge des Outputs des LLMs nach Kunden (Hochschulen).
Ausgabeformat: Quarto (Bericht) und R-Syntax (Targets-Pipeline). Reichen Sie auch etwaigen ausgelagerten R-Code ein (etwa Funktionen, die Sie sourcen).
Hinweise:
- Nutzen Sie Typst als Ausgabeformat.
- Bitte beachten Sie Hinweise zum Programmieren.
- Wenn Sie Statistiken berichten, geben Sie Hinweise nicht zur zu Lagemaßen, sondern auch zur Streuung. Wählen Sie robuste Statistiken. Visualisieren Sie wo sinnvoll.
8 Challenge 8
Videonutzung
- Werten Sie die Top-10-Tätigkeiten aus, die die Besucher (
idvisit) auf der Website durchführen. Tipp: Zählen Sie dafür, welche Werte wie oft beisubtitlestehen. Auf welchem Platz steht Videonutzung? - Berechnen Sie die Videonutzung (“Glotzdauer”), d.h. die Zeit, wie lange die Besucher (
idvisit) sich Videos anschauen. Tipp: Die Videodauer lässt sich mit Hilfe voneventactionund dazuplay(Beginn Video schauen) bzw.pause(Ende) annähernd berechnen. Allerdings darf man auf diese Werte keine exakten Lösungen erwarten. - Untersuchen und visualisieren Sie, ob sich das Verhalten in Bezug auf die Videos verändert hat im Laufe der Zeit (Wochen und Monate) im Hinblick auf die Glotzdauer.
- Berechnen Sie die Videonutzung pro Kunde (Hochschule).
- Zum Quarto-Bericht:
- Wie kann man die Größe eines Diagramms in Quarto einstellen?
- Wie kann man Diagramme referenzieren (z.B. “Diagramm <3> zeigt blabla”, wobei “Diagramm 3” verlinkt ist zum Diagramm).
- Wie kann man eine Gliederung zum Quarto-Bericht hinzufügen.
- Welche Code-Chunk-Optionen gibt es in Quarto? Nennen Sie zumindest 3. Wie ist die Syntax aufgebaut?
- Beschreiben Sie das Ausgabeformat “Typst” (ca. 5 Sätze)
Hinweise:
- Ausgabeformat: Quarto-Dokument (Bericht) und R-Syntax (Targets-Pipeline).
- Reichen Sie immer auch etwaigen ausgelagerten R-Code ein (etwa Funktionen, die Sie
sourcen). - Berichten Sie relevante Statistiken. Visualisieren Sie die Statistiken.
- Bitte beachten Sie Hinweise zum Programmieren.
9 Challenge 9
Optimierung
- Optimieren Sie Ihre Analyse-Pipeline (mit Blick auf alle Aufgaben des Hackathon) mit Blick auf Geschwindigkeit (des Durchlaufs der Pipeline). Berichten Sie die Laufzeit vor und nach der Optimierung. (ca. 3 Punkte mit jeweils 5 Sätzen)
- Optimieren Sie Ihre Analyse-Pipeline mit Blick auf Robustheit. (ca. 3 Punkte mit jeweils 5 Sätzen)
- Optimieren Sie Ihre Analyse-Pipeline mit Blick auf Allgemeinheit und Flexibilität. (ca. 3 Punkte mit jeweils 5 Sätzen)
- Diskutieren Sie Pro und Contra der Versionierungssoftware
git. (ca. 5 Sätze) - Diskutieren Sie Pro und Contra der Notizen-Software
Obsidian. (ca. 5 Sätze) - Erläutern Sie Ihre Datensicherheit und Backup-Strategie während des Projekts. Wie schützen Sie sich vor Datenverlust? (ca. 5 Sätze)
- Welche “Life-Hacks” haben Ihnen geholfen, sich während des Projekts zu strukturieren und effizient zu arbeiten? (ca. 5 Sätze)
- Welchen Text-Editor bzw. Programmier-Oberfläche haben Sie benutzt und warum? Welche anderen Optionen ziehen Sie in Erwägung? (ca. 5 Sätze)
- Angenommen, Sie könnten nicht R und Quarto verwenden. Mit welchen Alternativen und wie würden Sie dann arbeiten? (ca. 5 Sätze)
- Vergleichen Sie Ihre Lösung mit dieser Musterlösung: https://sebastiansauer.github.io/hans/. Berichten Sie einen Aspekt, den Sie von dieser Lösung lernen können und einen Aspekt, den Sie besser umgesetzt haben als in der Musterlösung.
Hinweise:
- Erläutern und Begründen Sie jeweils Ihr Vorgehen.
- Hier finden Sie Hinweise zu Obsidian:
- https://www.hannaliebl.com/blog/using-obsidian-for-software-development-notes/
- https://www.faesel.com/blog/why-every-developer-needs-to-use-obsidian
- https://www.samjulien.com/get-started-with-obsidian-as-a-developer/
- No Boilerplate - Obsidian Part 1
- Ausgabeformat: Quarto (Bericht) und R-Syntax (Targets-Pipeline). Nutzen Sie den Quarto-Bericht, um Ihr Vorgehen der Optimierung zu erläutern und begründen.
- Reichen Sie auch etwaigen ausgelagerten R-Code ein (etwa Funktionen, die Sie
sourcen). - Bitte beachten Sie Hinweise zum Programmieren.
- Um mehrere Dateien einzureichen (z.B. mehrere Funktionen in mehreren Dateien), bietet es sich an, diese Dateien zu zippen.
10 Challenge 10
Reflexion
Reflektieren Sie Ihr Vorgehen, Ihre Schwierigkeiten und Ihren Lernerfolg:
- Wählen Sie 3 Aufgaben aus dem Hackathon, die für Sie besonders herausfordernd waren und reflektieren Sie: Erläutern Sie jeweils Ihre Schwierigkeiten, Ihr Vorgehen, was Sie beim nächsten Mal anders machen würden und was Sie dabei gelernt haben. (ca. 3 Mal 3 Sätze)
- Dieses Modul ist ein angewandtes Projekt in dem Sinne, dass es wenig Theorie gab. Der Fokus lag stattdessen auf Problemlösung mit Kompetenzorientierung. Damit ist der didaktische Fokus ganz anders als in anderen Modulen, z.B. in QM2. Diskutieren Sie das Für und Wider von einer Didaktik wie in diesem Modul. Diskutieren Sie auch den Anspruch des Moduls mit Blick auf Zeitaufwand und (intellektueller) Schwierigkeit. Berücksichtigen Sie, dass es sich um 10-ECTS-Modul handelt. (ca. 10 Sätze)
- Dieses Modul verlangt höhere R- bzw. Datenanalyse- bzw. Programmierkompetenz als in den anderen Fächern Ihres Studiengangs. Stimmen Sie zu? Vergleichen Sie den Anspruch in diesem Modul mit anderen Modulen und diskutieren Sie Ihren Kompetenzzuwachs in Programmiertechniken. (ca. 10 Sätze)
- Einige Aufgaben dieses Hackathons waren mehrdeutig in dem Sinne, dass mehrere Lösungsansätze denkbar sind. Wie sind Sie damit umgegangen? (ca. 5 Sätze)
- Auf welche Art kann Ihnen das Gelernte in der Zukunft nützlich sein? (ca. 5 Sätze)
- An welchen Aspekten im Bereich Datenanalyse und Programmieren würden Sie gerne weiterarbeiten bzw. Sehen Sie Nutzen für sich, wenn Sie sich dort weiterentwickeln? (ca. 5-10 Sätze)
- Suchen Sie ein Beispiel für einen R-Code heraus, den man als “schön” (ästhetisch ansprechend) bezeichnen kann. “Schön” als Attribut für Software kann man als ambiguen Begriff betrachten. Auf der anderen Seite wird dieses Attribut auch für mathematische Formeln verwendet. Wenn Sie möchten, interpretieren Sie “schön” z.B. als “prägnant” oder “hoch abstrakt” oder “gute Balance zwischen abstrakt und konkret”. Diskutieren Sie, inwiefern Ihr Code-Beispiel als “schön” zu betrachten ist. (ca. 10 Sätze)
- Diskutieren Sie, welche Kompetenzen Arbeitgeber von Berufseinsteigern erwarten und inwieweit Sie diese Kompetenzen aus diesem Modul schöpfen können. (ca. 10 Sätze)
- Erläutern Sie, wie Sie KI in diesem Modul genutzt haben. Gehen Sie auch darauf ein, welche Kompetenz eine Arbeitskraft im Bereich Datenanalyse haben muss (Stand heute), um einen Mehrwert gegenüber einer KI zu bieten (bzw. einer KI, die von einer menschlichen Arbeitskraft ohne Kenntnisse in Datenanalyse und Programmierung gesteuert wird). (ca. 5 Sätze)
- Fassen Sie die (für Sie) wichtigste Erkenntnis des Moduls in einem einzelnen Satz zusammen.
Hinweise:
- Reichen Sie eine PDF-Datei ein, die Sie mit Quarto im Typst-Format erstellt haben.
- Nutzen Sie folgende Markdown-Features: Überschriften, Aufzählungen, Code-Chunks, Links, Gliederung, Author- und Datum-Angabe.
Literatur
Wiederverwendung
Zitat
@online{sauer2026,
author = {Sauer, Sebastian},
title = {Challenges im Überblick},
date = {2026-01-12},
url = {https://sebastiansauer.github.io/hans-hackathon2025/challenges.html},
langid = {de-DE}
}