Det finns en chrome extension på chrome web store. Den gör att det dyker upp försenings-statistik på SJ:s biljettbokningssida.
Sidan har snart varit igång ett och ett halvt år. Det börjar bli hög tid att gallra i databasen så att användare inte får sin statistik baserad på tåg som gick förra vintern. Jag tror inte att det är så representativt. Jag får nog flytta över den datan till någon slags arkiv, för jag vill inte bli av med det.
Har ett nytt litet vansinnesprojekt på gång. Det handlar inte om tåg, utan satelliter. Det finns på https://orbit.forsenad.nu/
Vill man hakontakt med mig finns jag på bluesky som @forsenad.nu
Api-klient
Varje timme är det en liten java spring boot-snurra som hämtar förseningar från Trafikverkets api.
Varför java? För att jag hade en api-klient färdig från ett tidigare projekt.
Persistens
Data sparas i en elasticsearch-databas.
Varför elasticsearch? I teorin är det ju bättre än en relationell databas för att hantera
tidsserieinformation, men när det rör sig om så pass små volymer spelar det nog egentligen ingen roll. Jag
tror det skulle vara möjligt att göra detta med en cvs-fil på disk. (Det skulle kanske bli lite krångligt
pga data måste uppdateras ibland). Det skulle vara lite små-intressant att provköra med en relationell
databas någon gång. Det får vänta tills jag har åtminstone ett års data. Hursomhelst är kibana ett gott skäl
att använda elasticsearch. Genom att dra fram en massa grafer och tabeller kan jag snabbt se om jag missat
något när jag persisterar data. Det är olyckligt att det inte finns något smidigt sätt att publicera
kibana-dashboards till allmänheten. Jag kanske kommer på något i framtiden.
Tabeller i GUI
Alla tabeller med förseningar genereras en gång i timmen av en snurra med python, elasticsearch-dsl och
jinja2. Varför python? För att man använder json för att kommunicera med elasticsearch och det är krånligt
med json i starkt typade språk.
Reseplanerare
Reseplaneraren är en snurra i java med spring boot. Python-snurran som genererar html genererar också en
sammanfattnings-json, så reseplaneraren behöver aldrig gå direkt till elasticsearch-databasen. Varför java
här? För att python är ett dåligt språk för dåliga människor. För att generera html i svaret används
thymeleaf och det är väldigt otrevligt att jobba med. Det har i alla fall en betydligt högre tröskel än
jinja2, men det är möjligt att det är mer korrekt.