Bericht mehr aufgaben
kate kate@breadlabs.de
Tue, 24 Mar 2026 13:41:16 +0100
1 files changed,
34 insertions(+),
1 deletions(-)
M
uni/Praktikum/Praktikumsbericht.typ
→
uni/Praktikum/Praktikumsbericht.typ
@@ -1,11 +1,16 @@
#import "@preview/meander:0.4.1" +#set text( + size: 12pt, +) + #set par( justify: true, - leading: 1em, + leading: 12pt, ) #set page( + paper: "a4", margin: (x: 1.75in, y: 1.25in), )@@ -41,7 +46,19 @@
#pagebreak() = Aufgaben == Analyse einer Verkehrs-Datenschnittstelle +Im Umfang eine meiner Ersten Aufgaben durfte ich eine Verkehrs-Datenschnittstelle von TomTom analysieren um durch das Abrufen dieser möglicherweise Verkehrsdaten nutzbar zu machen. + +\ == Schnittstelle an Daten-Pipeline anbinden +Eine bereits zum Teil bestehende Daten-Pipeline musste mit der Funktion erweitert werden, Daten direkt aus den DWD Archiven zu sammeln. Dafür gab es eine bereits zum Teil implementierte Lösung, welche ich erweitert habe. +Im Anschluss mussten im Rahmen dieser Daten-Pipeline die gesammelten Daten in eine RabbitMQ geladen werden damit diese von den nächsten Schritten der Pipeline aufgegriffen werden können. + +Diese Pipeline war so aufgebaut, das die Daten erst aus verschiedenen Quellen gesammelt werden und dann durch andere Services verarbeitet werden um diese als stimmigen Datensatz nutzbar zu machen. +Für die DWD Daten habe ich dann auch im Anschluss einen dieser weiteren Services gebaut welche die Daten aus der RabbitMQ empfängt und zu einem einheitlichen Datenformat bereinigt. + +Um das erfolgreich zu erzielen mussten allerdings noch Änderungen am grundsätzlichen Datenformat welches in die RabbitMQ geladen wurde vorgenommen werden um dem System welche diese bereinigt sagen zu können um welche Art von Daten es sich handelt. + +\ == Entwicklung, Bereitstellung sowie Administration eines Services Als Teil einer Aufgabe war es nötig einen Service auf einem Raspberry Pi 4B zu deployen. Dabei war es wichtig eine Stabile und zuverlässige Ausführung zu gewährleisten, so das selbst bei Internet Verbindungsproblemen oder spontanen Stromausfällen das Programm sich selbst rettet und schnell normale Operation wiederaufnimmt. Dieses Problem könnte mit einer großen Anzahl verschiedenster Herangehensweisen besser oder schlechter gelöst werden, aber ich habe mich am Ende für eine Umsetzung für einen Softwarestack von Golang als Programmiersprache und NixOS als Betriebssystem entschieden.@@ -84,8 +101,24 @@ Um dieses Problem zu lösen habe ich das Tool gomod2nix genutzt welche die `go.mod` Datei eines Go-Projektes ausliest und diese für den vorhin genannten Prozess zur Verfügung stellt.
\ Am Ende konnte der Service erfolgreich auf dem Raspberry Pi 4B deployed werden und mit minimalem Wartungsaufwand operational gehalten werden. + +\ == Frontend-Entwicklung +Für die weiterentwicklung einer Webapplikation war es nötig ein neues modernes Frontend zu planen und entwickeln. Das habe ich in einem Team machen dürfen welche sich um das Projekt gekümmert hatte. + +Als ersten Schritt bei einer solchen Aufgabe hat es sich angeboten das UI mit einem Tool wie Figma zu designen. Da ich allerdings in der Vergangenheit schlechte Erfahrungen mit Figma gemacht habe und grundsätzlich Freie und Offene Software bevorzuge habe ich mich für die Alternative Penpot entschieden welches ähnliche Funktionalitäten zum erstellen von Mockups hat. + +Nachdem das Frontend geplant war, wurden die geplanten Aspekte nach und nach mit Next.js, einem React Framework umgesetzt. + +\ == Datenaufbereitung +Im Rahmen eines Prozesses zur Verarbeitung von Kundendaten mussten diese aus dem Ursprungsformat welches uns zur Verfügung gestellt wurde in ein von unseren Programmen nutzbares Format konvertiert werden. Dabei handelte es sich nicht nur um eine simple Dateiformat Konvertierung da einige Daten ergänzt oder mit einer Anfrage an andere bereits bestehende Datensätze angepasst werden mussten. + +Das Skript welches diese Aufgabe erledigen sollte habe ich in Python geschrieben, da es sich als simple Skript-Sprache super für eine solche Aufgabe anbietet und dank dynamischer Typisierung die Deserialisierung der Daten leicht macht, was sich in statischen typisierten Programmiersprachen wie Go oft nur umständlich implementieren lässt. Eine Umsetzung in Go würde das Programm tendenziell schneller und möglicherweise robuster machen aber wegen der nicht zuverlässigen Natur der Daten hat sich eine solche Umsetzung als für diesen fall zu umständlich herausgestellt. + +Da ich bei diesem Praktikum oft mit der Deserialisierung von Daten aus meist JSON oder CSV zu tun hatte war das ein häufig vorkommendes Dilemma: Eine Umsetzung in Go ist etwas, was ich generell bevorzuge, aber kann sich manchmal als zu Umständlich herausstellen, da Go als statisch typisierte Sprache bei der Deserialisierung eine feste Zuweisung von Feld zu Typ erwartet. Bei Eingangsdaten wo sich die Felder-namen oder Typen dessen je nach Bedingung ändern, wird eine saubere Typisierung schnell sehr verbos oder unklar, da entweder jedes Ergebnis einzeln als Typ abgebildet werden muss oder mit der Hilfe von Interfaces die Typisierung generalisiert wird, was die Vorteile der statischen Typisierung zum großteil zu Nichte macht. + +\ == Middleware Entwicklung #pagebreak()