Tågtavlan – hur och varför (gästinlägg)

Tågtavlan är en app till iPhone, iPad och Android som visar aktuellt tågtrafikläge vid svenska tågstationer. Jag släppte den första versionen våren 2010, dels för att jag var nyfiken på apputveckling och dels för att jag som tågpendlare sedan många år tillbaks hade ett behov av en bra tågapp. Jag hade några månader tidigare byggt sajten Tåg.info som är en databas över aktuellt och historiskt tågläge, eftersom jag under vintern 2010 hade sällsynt mycket obeställd fritid på tåg.

Andreas Krohn har gett mig möjlighet att med detta gästinlägg berätta lite om hur Tågtavlan är konstruerad och dela med mig av några erfarenheter från projektet för den som är nyfiken.

Teknik

Tågtavlan är skriven i HTML5 ovanpå ramverket Phonegap, och körs alltså i mobilens webbläsare men har samtidigt tillgång till mobilens nativefunktionalitet via Phonegaps abstraktionslager. Det innebär dels att appen funkar på ett flertal olika smartphonefabrikat (iPhone/iPad och Android finns publikt tillgängligt idag, versioner för Blackberry, Symbian och WebOS finns byggda men ej testade) och dels att den – åtminstone i begränsad omfattning – även kan köras i en webbläsare.

För ungefär ett år sedan kontaktades jag av cafékedjan Espresso House, som hade sett appen och undrade om det gick att fixa en tågtavla på en stor skärm. Resultatet blev [Tågtavlan Jumbo (http://www.tagtavlan.se/2011/08/tagtavlan-jumbo-pa-espresso-house/), som består av en minidator som kör Linux och webbläsaren Google Chrome.

Givetvis finns det nackdelar med att inte utveckla appen native. Framförallt är det som vanligt med browsers: de uppför sig lite olika på olika plattformar vilket innebär att speciallösningar ibland behövs för vissa mobilmodeller eller operativsystemversioner. Man får dessutom se till att hålla sig till någon form av minsta gemensam nämnare för alla plattformar vad gäller gränssnittets utformning, men detta är något som främst andra utvecklare brukar kommentera. Den övervägande majoriteten av användarna verkar inte bry sig nämnvärt om det är Javascript eller Objective C som driver programlogiken, eller om en GUI-element är native eller “ser webbigt ut”.

I och med releasen av Phonegap 1.3 kan man som ensam utvecklare skapa en app som funkar på iOS, Android, Blackberry, WebOS, Windows Phone 7, Symbian och Bada(?) utan att behöva bolla med sju parallella kodbaser. Även om man får göra visst avkall på “look & feel” och HTML5 ännu inte lämpar sig för alla typer av tillämpningar, så pekar det mesta på att HTML5 kommer ta allt mer mark på appmarknaden. Phonegap köptes för övrigt upp av Adobe i början av oktober i år.

API:er

Tågtavlan hämtar data från Tåg.Info, som i sin tur skrapar Trafikverkets HTML-sidor med tågtrafikinformation. I brist på ett öppet, officiellt API från Trafikverket så har jag alltså skapat ett eget. Jag har en löpande dialog med Trafikverket som fungerar väldigt bra, och för mig är det tydligt att deras avsaknad av ett öppet API inte beror på bristande vilja utan huvudsakligen beror på att alla API:er Trafikverket tillhandahåller omgärdas av avtal gentemot tågoperatörerna.Med tanke på dessa omständigheter upplever jag dem som väldigt tillmötesgående och måna om att inte sätta käppar i hjulen för Tåg.Info och andra som skrapar deras HTML-sidor. Innan deras nya trafikinformation skulle tas fram ringde de till och med för att försäkra sig om att de inte gjorde någon förändring på serversidan som skulle hindra Tåg.Info från att inhämta data.

Jag har förstås ändå sneglat litegrann på det privata API som deras nya trafikinformation använder och fått beskedet att de inte kan godkänna att APIet används av tredjepartsutvecklare, så tills vidare kommer jag fortsätta skrapa HTML-sidorna i väntan på ett publikt API. Jag tror inte det är en bra idé att försöka “tvinga” fram publika APIer genom att olovligen jacka in sig på privata sådana (även om program som Charles Proxy gör det barnsligt enkelt att kartlägga HTTP(S)-API:er), det tror jag snarare får rakt motsatt effekt hos dataägaren. I synnerhet tror jag det är riskabelt, inte bara juridiskt, om det är ett företags API man exponerar – jag vet att SJ:s IT-avdelning så sent som i somras diskuterade att erbjuda ett öppet API i samband med releasen av deras app, så med facit i hand hade vi nog alla tjänat på om vi hade hanterat höstens “avslöjande” av bristerna i deras API lite snyggare gentemot SJ. Men det är lätt att vara efterklok…

En dörröppnare

Jag blev enormt förvånad när Tågtavlan åkte direkt upp på App Stores topp-10-lista när den släpptes, och tyckte 10 000 användare efter de första två månaderna var helt otroligt. Idag närmar sig siffran den tiodubbla, och Tåg.Info och Tågtavlan har öppnat upp nya dörrar för mig. Jag är idag anlitad av myndigheten Trafikanalys för att ta fram ett tågdata-relaterat statistiksystem efter att projektledaren hittat Tåg.Info, och blev för några veckor ombedd att prata om tågförseningar ur mitt resenärsperspektiv inför ett hundratal åhörare från Trafikverket, näringsdepartementet, transportstyrelsen, tågbolag, universitet och branschfolk (se presentation på slideshare.

Tågtavlan har förstås vidareutvecklats successivt i takt med att användarnas feedback har kommit in, och känns ganska mogen nu. I den senaste versionen finns funktionen “Mina Resor” som sammanställer information om alla tåg man checkar in på. Denna funktion är än så länge väldigt basic, men det är nog där jag ser störst utvecklingspotential i

dagsläget. Efter årsskiftet är det dags att köpa ett årskort hos SJ igen…