F1 Rennergebnisse

1983 - ZX81 .. die ersten Programme

1983 bekam ich den ersten Computer, einen Sinclair ZX81. Den gibt es heute noch (siehe Bild). Er wurde in BASIC programmiert und hatte ab Werk 1 KByte RAM. Die Erweiterung (MEMOPAK) auf 64KByte war ein echter Schritt nach vorne. Er hat einen UHF Ausgang und wurde mit einem Koax-Antennenkabel an einen kleinen Schwarz-Weiss Fernseher angeschlossen. Dann musste man dann noch die Frequenz suchen auf dem der kleine Echner sein Signal ausgab. Gespeichert wurden Programme und Daten auf Audio Kassetten(!!). Ein kleiner Thermodrucker komplettierte das Set. Es war die Welt damals ...

zx81

Mein Vater gab mir eine Reihe von Radarkeulenberechnungen zum programmieren. Ich weiss nicht, ob er sie bei der Arbeit gebraucht hat, er sagt das zwar, aber wirklich wichtig wird es nicht gewesen sein. Rückblickend hat er so gar keinen Einfluss auf meine Berufswahl genommen, nein hat er nicht. Er hat vermutlich das richtig getan - ich wusste mit 17, 18 nicht, was ich mit meiner Lebenszeit machen will. Und ich hatte keine Vorstellung davon, wie und mit was ich meinen Lebensunterhalt bestreiten könnte und möchte.

Eines meiner ersten eigenmotivierten Programme drehte sich um die Formel 1. Mit den Programmen konnte ich Rennergebnisse saisonweise eingeben, speichern, abfragen und ausgeben. Nach 40 Jahren wollte ich das mal wieder bauen - und dabei die Daten nicht als BASIC Arrays auf einer Audiokassette speichern, sondern die POSTGRES Datenbank und den Web Server nutzen ;-)

Formel 1 - Datenbasis

Im Internet finden sich einige Datenquellen zu allen Formel 1 Rennen. F1.com stellt die Daten ab 2015 zur Verfügung. Auf kaggle.com gibt es eine bis 1950 zurückreichende und vollständig normalisierte Datenbasis im csv Format.

kagle

Bei näheren Hinsehen stellte sich heraus dass die *.csv Dateien eigentlich von ergast.com sind. Dort gibt es eine API zum abfragen, aber vor allem werden die Daten nach jedem Rennen aktualisiert. Ein ER-Diagram gibt es auch:

kagle

Mit der Anwendung "Postico" habe ich die Tabellen (mit Primärschlüsseln und Indexen) in einer POSTGRES DB angelegt und dann jeweils die *.csv Datein in die Postgres DB geladen. Im csv Format beinhatet die erste Zeile die Namen der Spalten. In Postico kann man die Spalten der csv Daten den entsprechenden Spalten der DB Tabellen zuordnen, und dann die Daten aus der csv Datei importieren. In Summe waren es 11 Tabellen zu Rennen, Qualifiying, Fahrern und Konstrukteuren. Das funktionierte tadellos. Bei Updates müssen jeweils die neuen Datensätze, mit dem gleichen Verfahren, eingelesen werden.

data

Java Programme

Der nächsten Schritte waren es dann, SQL Queries für die Rennsresultate zu formulieren, die Queries zu testen, und dann JAVA Programme zu schreiben, welche die Queries absetzen und die Ergebnisse in brauchbaren HTML/CSS Seiten formatieren. Ist gelungen ... finde ich ganz unbescheiden. Die Normalisierung der Daten war erstmal wieder "lästig" - bei den INNER JOINS auf den Fremdschlüsseln musste ich doch nachdenken und nachschlagen. Aber auch für SQL gbt es wirklich gute Tutorials im Netz. Vor 30 Jahren hatte ich nur das Vorlesungsskript von Prof. Reuter.

f1results

Trickreich war es, bei der Seite für jedes einzelne Rennen die Tabulatoren in HTML zu programmieren, so das man die Startaufstellung und den jeweiligen Stand der Fahrer bzw.Konstrukteurs WM auf die Seite kriegt.

f1results2

An den Programmen werde ich einiges refactoren müssen. Die langen SQL Statemensts als Strings in JAVA sind keine dauerhafte Lösung, und auch die erste Umsetzung der HTML Generierung ist noch etwas sehr "hard-wired". Bei Updates an der der DB muss man jedesmal "neue" statische Seiten generieren, ein nächster Aus-/Umbauschritt wird es sein, das mit einem Applikationsserver und als JSP Programmierung dynamisch umzusetzen. Das gibt dann doch eher ein Folgeprojekt.