--- /dev/null
+<!DOCTYPE html>\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+ <title></title>\r
+ <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css">\r
+ <style>\r
+ table\r
+ {\r
+ border: 1px solid #000000;\r
+ border-collapse: collapse;\r
+ border-spacing: 0px;\r
+ }\r
+ table td\r
+ {\r
+ padding: 8px 8px;\r
+ }\r
+ </style>\r
+ <script src="http://code.jquery.com/jquery-1.9.1.js"></script>\r
+ <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>\r
+ <script type="text/javascript">\r
+ var Stations = new Array();\r
+ $(document).ready(function () {\r
+ $.support.cors = true; // Enable Cross domain requests\r
+ try {\r
+ $.ajaxSetup({\r
+ url: "http://api.trafikinfo.trafikverket.se/v1/data.json",\r
+ error: function (msg) {\r
+ if (msg.statusText == "abort") return;\r
+ alert("Request failed: " + msg.statusText + "\n" + msg.responseText);\r
+ }\r
+ });\r
+ }\r
+ catch (e) { alert("Ett fel uppstod vid initialisering."); }\r
+ // Create an ajax loading indicator\r
+ var loadingTimer;\r
+ $("#loader").hide();\r
+ $(document).ajaxStart(function () {\r
+ loadingTimer = setTimeout(function () {\r
+ $("#loader").show();\r
+ }, 200);\r
+ }).ajaxStop(function () {\r
+ clearTimeout(loadingTimer);\r
+ $("#loader").hide();\r
+ });\r
+ // Load stations\r
+ PreloadTrainStations();\r
+ });\r
+\r
+ function PreloadTrainStations() {\r
+ // Request to load all stations\r
+ var xmlRequest = "<REQUEST>" +\r
+ // Use your valid authenticationkey\r
+ "<LOGIN authenticationkey='d5c9638b906b45a9876c7f7192b9e11d' />" +\r
+ "<QUERY objecttype='TrainStation'>" +\r
+ "<FILTER/>" +\r
+ "<INCLUDE>Prognosticated</INCLUDE>" +\r
+ "<INCLUDE>AdvertisedLocationName</INCLUDE>" +\r
+ "<INCLUDE>LocationSignature</INCLUDE>" +\r
+ "</QUERY>" +\r
+ "</REQUEST>";\r
+ $.ajax({\r
+ type: "POST",\r
+ contentType: "text/xml",\r
+ dataType: "json",\r
+ data: xmlRequest,\r
+ success: function (response) {\r
+ if (response == null) return;\r
+ try {\r
+ var stationlist = [];\r
+ $(response.RESPONSE.RESULT[0].TrainStation).each(function (iterator, item)\r
+ {\r
+ // Save a key/value list of stations\r
+ Stations[item.LocationSignature] = item.AdvertisedLocationName;\r
+ // Create an array to fill the search field autocomplete.\r
+ if (item.Prognosticated == true)\r
+ stationlist.push({ label: item.AdvertisedLocationName, value: item.LocationSignature });\r
+ });\r
+ fillSearchWidget(stationlist);\r
+ }\r
+ catch (ex) { }\r
+ }\r
+ });\r
+ }\r
+\r
+ function fillSearchWidget(data) {\r
+ $("#station").val("");\r
+ $("#station").autocomplete({\r
+ // Make the autocomplete fill with matches that "starts with" only\r
+ source: function (request, response) {\r
+ var matches = $.map(data, function (tag) {\r
+ if (tag.label.toUpperCase().indexOf(request.term.toUpperCase()) === 0) {\r
+ return {\r
+ label: tag.label,\r
+ value: tag.value\r
+ }\r
+ }\r
+ });\r
+ response(matches);\r
+ },\r
+ select: function (event, ui) {\r
+ var selectedObj = ui.item;\r
+ $("#station").val(selectedObj.label);\r
+ // Save selected stations signature\r
+ $("#station").data("sign", selectedObj.value);\r
+ return false;\r
+ },\r
+ focus: function (event, ui) {\r
+ var selectedObj = ui.item;\r
+ // Show station name in search field\r
+ $("#station").val(selectedObj.label);\r
+ return false;\r
+ }\r
+ });\r
+ }\r
+\r
+ function Search() {\r
+ var sign = $("#station").data("sign");\r
+ // Clear html table\r
+ $('#timeTableDeparture tr:not(:first)').remove();\r
+\r
+ // Request to load announcements for a station by its signature\r
+ var xmlRequest = "<REQUEST version='1.0'>" +\r
+ "<LOGIN authenticationkey='d5c9638b906b45a9876c7f7192b9e11d' />" +\r
+ "<QUERY objecttype='TrainAnnouncement' " +\r
+ "orderby='AdvertisedTimeAtLocation' >" +\r
+ "<FILTER>" +\r
+ "<AND>" +\r
+ "<OR>" +\r
+ "<AND>" +\r
+ "<GT name='AdvertisedTimeAtLocation' " +\r
+ "value='$dateadd(-00:15:00)' />" +\r
+ "<LT name='AdvertisedTimeAtLocation' " +\r
+ "value='$dateadd(14:00:00)' />" +\r
+ "</AND>" +\r
+ "<GT name='EstimatedTimeAtLocation' value='$now' />" +\r
+ "</OR>" +\r
+ "<EQ name='LocationSignature' value='" + sign + "' />" +\r
+ "<EQ name='ActivityType' value='Avgang' />" +\r
+ "</AND>" +\r
+ "</FILTER>" +\r
+ // Just include wanted fields to reduce response size.\r
+ "<INCLUDE>InformationOwner</INCLUDE>" +\r
+ "<INCLUDE>AdvertisedTimeAtLocation</INCLUDE>" +\r
+ "<INCLUDE>TrackAtLocation</INCLUDE>" +\r
+ "<INCLUDE>FromLocation</INCLUDE>" +\r
+ "<INCLUDE>ToLocation</INCLUDE>" +\r
+ "</QUERY>" +\r
+ "</REQUEST>";\r
+ $.ajax({\r
+ type: "POST",\r
+ contentType: "text/xml",\r
+ dataType: "json",\r
+ data: xmlRequest,\r
+ success: function (response) {\r
+ if (response == null) return;\r
+ if (response.RESPONSE.RESULT[0].TrainAnnouncement == null)\r
+ jQuery("#timeTableDeparture tr:last").\r
+ after("<tr><td colspan='4'>Inga avgångar hittades</td></tr>");\r
+ try {\r
+ renderTrainAnnouncement(response.RESPONSE.RESULT[0].TrainAnnouncement);\r
+ }\r
+ catch (ex) { }\r
+ }\r
+ });\r
+ }\r
+\r
+ function renderTrainAnnouncement(announcement) {\r
+ $(announcement).each(function (iterator, item) {\r
+ var advertisedtime = new Date(item.AdvertisedTimeAtLocation);\r
+ var hours = advertisedtime.getHours()\r
+ var minutes = advertisedtime.getMinutes()\r
+ if (minutes < 10) minutes = "0" + minutes\r
+ var toList = new Array();\r
+ $(item.ToLocation).each(function (iterator, toItem) {\r
+ toList.push(Stations[toItem]);\r
+ });\r
+ var owner = "";\r
+ if (item.InformationOwner != null) owner = item.InformationOwner;\r
+ jQuery("#timeTableDeparture tr:last").\r
+ after("<tr><td>" + hours + ":" + minutes + "</td><td>" + toList.join(', ') +\r
+ "</td><td>" + owner + "</td><td style='text-align: center'>" + item.TrackAtLocation +\r
+ "</td></tr>");\r
+ });\r
+ }\r
+\r
+ </script>\r
+</head>\r
+<body>\r
+ <div>\r
+ <input id="station" type="text" />\r
+ <input type="button" value="Visa" onclick="javascript: Search()" />\r
+ <span id="loader" style="margin-left: 10px">Laddar data ...</span>\r
+ </div>\r
+ <div id="result">\r
+ <h3>Avgående tåg</h3>\r
+ <table border="1" id="timeTableDeparture">\r
+ <tr>\r
+ <th scope="col" style="width:40px;">Tid</th>\r
+ <th scope="col" style="width:200px;">Till</th>\r
+ <th scope="col" style="width:80px;"></th>\r
+ <th scope="col" style="width:80px;">Spår</th>\r
+ </tr>\r
+ </table>\r
+ </div>\r
+</body>\r
+</html>\r
--- /dev/null
+# Titel
+
+"Hacking economy, economy hacked"
+
+"Hacking travelling,
+
+"Enforcing co-produced travel experience"
+
+"Progression on rails; co-travelling hacked"
+
+"Restablishing the cotravelling best practicies"
+
+"Spårad utveckling"
+
+"Ur spår är tiden"
+
+"Ur spår med tiden"
+
+"Res gement: med(-)resenär ur spår"
+
+"Hackar resandets upplevelse"
+
+"Vi reser gemen-samt"
+
+"Att resa gement"
+
+"Gement resande"
+
+"Kollektivt resande med spår i tiden"
+
+# Åtgärder
+
+ * TODO Ta bilder
+
+# Syftet
+
+**Trainhack.** Sprida kunskap om data och API.
+
+(Främja nätverkande)
+
+Unique challeging hack, tjänster, som gör resande och kollektivtrafik
+enklare, och ger en positiv upplevelse.
+
+**Vårt projekt.**
+
+Vi vill ta det ett steg till
+
+<center>
+Världsrevolution
+</center>
+
+Mer än kunder: medresenärer.
+
+Tekniken suger ut aktiviteten och kreativiteten och frukten i
+dialog. Man blir ickenärvarande. Men eftersom vi vill använda tekniken
+för att resenärerna ska närma sig varandra.
+
+Förslaget var att skapa lösningar som hanterar det oförutsedda i
+trafiken. Vi påstår att tekniken i sig har stort inflytande över
+människorna, många gånger konserverande (konservativt, (Varför vill
+man ha incheckning på tåget?)). Istället tycker vi tekniken kan skapa
+det oförutsedda och agera progressivt.
+
+Heads up
+
+Telefonen
+
+Får inte bli identitets-grejen
+
+
+
+
+# Orten
+
+Uppsala eller Byske? Åsträsk? Jörn?
+
+Tåg 92 Göteborg--Luleå stannar i Vindeln, Bastuträsk, Jörn, Älvsbyn,
+Boden, och Sunderby
+
+# Datakällor och frågor
+
+Frågorna
+
+ * Vad skulle huset kosta?
+ * Vilka är mina grannar?
+ * Vad jobbar man med här?
+ * Vad röstar mina grannar på här?
+ * Avstånd till skola?
+ * Avstånd till bio?
+ * Vad mer?
+ * Frekvens tågavgångar (Trafikverkets öppna? TODO verifiera)
+ * Rekreation
+
+Kartkällorna
+
+ * Valmyndighen
+ * Lantmäteriet
+ * Trafikverket -- Lastkajen, vilket Jonas presenterade.
+ * (TODO För huspriser)
+ * (TODO För skola och hus)
+
+Andra API:er
+
+ * Trafikverkets öppna
+
+ * Avgångsfrekvens
+ * Antalet olika linjer
+
+ * Resrobbot
+
+ * Antal byten till "storstad"
+ * Total bytesväntestid
+ * Total ombordtid på tåg (ju mer desto bättre)
+ * Risk för att inte få sittplats?
+
+Andra källor
+
+ * Statistiska Centralbyråns (SCB) arbetsplatsregistret
+
+ * Information om skolornas placering -- Istället medelavstånd
+ eller medianavstånd i kommunen
+
+
+# Interaktion med medresenärer per aparatstöd
+
+Heads up
+
+Kupe: Tågförsening blir giftemål (TODO kolla artikeln)
+
+Martin: Vänner som blev tillsammans: Tåget kom inte. Tyst. 30
+minuter. Tyst. "Tycker du om pankakor?"
+
+Hur provocera (TODO term? "uppmuntra", "vecka intresse", ...) till
+interaktion? Nyfikenhet centralt. Uppmärksamhet. Alternativa köandet.
+
+Inspiration:
+
+ * Som kösystem, alternativ till att stå i kö eller ännu värre
+ nummerlappar där man får sig en plats enkom genom interaktion med
+ apparaten.
+
+
+# Utveckla egna källor
+
+ *
+
+(TODO kolla upp MashUp)
+
+# Resekvalitet
+
+Det är värt att åka tåg. Dock risk för att inte få sittplats?
+T.ex. Uppsalapendeln, där män ofta får stå.
+
+# Presentation
+
+
+Upplägg -- Bildspel? A3? Teater?
+
+ 1. Teaterdialogen
+
+ * Bakgrund och syfte ingår
+
+ 2. Övergång bildspel (fortsatt dialogform)
+
+ * Vad det faktiskt är tekniskt
+
+ * Återkoppla till syfte (täck in fulständigt)
+
+ * Bilder, fotografier
+
+ * "Heads up" -- Vad är det.
+
+ * Datakällor (alla vi tänkt på)
+
+ * Vilka vi faktiskt verifierat
+
+ * Utökningsbarhet
+
+ 3. Fördjupad demonstration
+
+
+Bilder på frågorna?
+
+ * Rekreation ... Vad är värde i livet? Hur vill vi leva våra liv?
+ * Vad skulle huset kosta?
+ * Vad röstar mina grannar på här?
+ * Avstånd till skola?
+ * Avstånd till bio?
+ * Frekvens tågavgångar (Trafikverkets öppna? TODO verifiera)
+
+(Får inte bli identitets-grejen)
+
+
+**Älvsbyn-dialogen**
+
+ C: Två medresenärer kring tågfönstret. "Pling!" Huvet ner i
+ telefonen. Trist? Inte då: Teknik kan också främja interaktion med
+ medresenärer. A kollar ner i telefonen
+
+ A: "Jaha, vi är i Älvsbyn."
+
+ B: (Någon observation)
+
+ A: (Något svar)
+
+ B: "Kan man bo här (?) Hur många gör det?"
+
+ A: "Närmare 5 000 personer -- tendensen är att det minskar. Peak var 1980: 5 500 pers."
+
+Paus
+
+ A: Och folk flyttar runt rätt bra. 47 villaförsäljningar bara i år
+ enligt mäklarstatistiken. Slutpris 0.7302 MSEK i genomsnitt. Och
+ de ligger ute för 0.801 MSEK
+
+ B: Jaha, så priserna går ner i försäljningen.
+
+ A: Ja, men inte mycket: ner 9 % vid försäljning.
+
+ A forts: Motsvarande i Uppsala från när vi passerade var upp 5.5 %
+ där var genomsnittliga slutpriset för villa 5.90 MSEK
+
+ B: Vad sa vi? 107 försäljningar? Bara dubbelt så många (!!) Och i
+ Uppsala bor 150 000: 30 gånger fler: 0.7 mot 8 promille i
+ villaomsättning per befolkning.
+
+Villor lanen 1417 vs 1856 14463 vs 25637 pkvm
+
+
+TODO Täck in närigslivet
+
+
+**Noter**
+
+* Bef:utv. ([Älvsbyn](https://sv.wikipedia.org/wiki/Älvsbyn)) (1900,
+ 974; 1950, 2787; 1960, 2832; 1965, 3590; 1970, 3902; 1975, 4707;
+ 1980, 5445; 1990, 5328; 1995, 5365; 2000, 5176; 2005, 5042; 2010,
+ 4967; 2015, 4976)
+
+* Bef:utv. ([Uppsala](https://sv.wikipedia.org/wiki/Uppsala#Befolkningsutveckling))
+ (1950, 56052; 1960, 72978; 1965, 82450; 1970, 92624; 1975, 101850;
+ 1980, 102102; 1990, 109497; 1995, 119979; 2000, 124036; 2005,
+ 128409; 2010, 140454; 2015, 149245)
+
+* Villamarknaden Älvsbyn ([Hemnet](http://hemnet.se/salda/bostader))
+
+ * 6 till salu, men 47 slutpriser i år
+
+ * Till salupris medel 0.801 MSEK (1.09, 0.95, 0.55, (3.25), 0.49,
+ 0.925)
+
+ * Slutpris medel 0.7302 MSEK (0.725, 0.450, 0.840, 0.46, 0.50,
+ 0.50, 1.75, 0.60, 0.70, 0.95, 0.49, 0.39, 0.97, 0.85, 1.10, 0.80,
+ 0.58, 0.84, 0.48, 0.50, 0.62, .32, .74, .60, 1.50)
+
+* Uppsala
+
+ * 39 till salu 107 slutpriser
+
+ * Upp 5.5 % vid försäljning
+
+ * Till salupriser medel 5.59 MSEK (5.35, 4.80, 4.35, 4.29, 6.99,
+ 6.50, 5.60, 3.90, 5.50, 5.45, 7.48, 5.95, 8.25, 5.90, 5.40, 3.60,
+ 5.99, 5.49, 5.35, (22.0))
+
+ * Slutpriser medel 5.90 MSEK (5.35, (9.19), 5.75, 5.46, 4.98, 7.30,
+ 5.70, 9.50, 4.05, 6.40, 6.0, 8.49, 8.68, 4.39, 4.10, 6.69, 6.50,
+ 6.10, 5.25, 6.78, 4.12, 4.0, 4.31)
+
+
+
+**Byske-dialogen.** "Pling!" Huvet ner i telefonen. Trist? Inte då: Teknik
+kan också främja interaktion med medresenärer. A kollar ner i
+telefonen
+
+ A: "Jaha, vi är i Byske."
+
+
+ B: "Byske, jaha. Stationen är fin."
+
+ A: "Huset blev modell för flera längs sträckan: Åsträsk, Tvärålund,
+ Brännberg ... många. Byskemodellen är en typ av
+ järnvägsstationshus av VI-klassen ritat av chefsarkitekten vid
+ Statens Järnvägars arkitektkontor Adolf W. Edelsvärd."
+
+ B: "Kan man bo här (?) Hur många gör det?"
+
+ A: "Närmare 1800 personer -- ökande sedan 2015. Peak var 1980: 2000 pers."
+
+Paus
+
+ A: Enligt mäklarstatistiken var slutpris villa 1.6 i genomsnitt. De ligger ute för 0.9825
+
+ B: Det är en ganska stor skillnad
+
+ A: X % !! Motsvarande i Uppsala när vi passerade var Y %
+
+
+
+Källorna
+
+ * [Bysekmodellen](https://sv.wikipedia.org/wiki/Byskemodellen)
+
+ * Bef:utv. (1960, 1143; 1965, 1345; 1970, 1551; 1975, 1710; 1980,
+ 1999; 1990, 1932; 1995, 1852; 2000, 1738; 2005, 1731; 2010, 1728;
+ 2015, 1785) [Byske](https://sv.wikipedia.org/wiki/Byske)
+
+ * Mäklarstatistik, Byske, annonsering (1.25, 1.2, 0.89, 0.59) MSEK
+ och slutpris (1.67, 0.92, 1.8, 1.5, 2.15) MSEK
+