Category Archives: API

Yolaget – Hitta till närmaste Systembolag

För någon vecka sedan släpptes en uppdatering till Yo som möjliggör för användare att skicka sin geografiska position till andra användare, eller tjänster. Detta betyder att det är går att bygga tjänster som är klart mer intressanta än tidigare.

Jag hoppade självklart på och högg användarnamnet YOLAGET med tanken att bygga en mikrotjänst med vägbeskrivningar till närmaste Systembolag, och nu är yolaget.iamleft.se uppe i sin första version.

Förutom att visa vägbeskrivningen på en karta (via Google Maps) så skrivs även färdrutten ut, antingen till fots, cykel, eller bil, beroende på sträckan. Man kan som användare byta mellan de tre.

Sidan skriver också ut ifall det närmaste Systembolaget är öppet eller ej, och om de finns öppettider tillgängliga i Systembolagets API så skrivs dessa ut med.

Yolaget - Hitta till närmaste Systembolag med Yo

Vad vi använde för att bygga Stadsvolymer

I går skrev jag om Pontus Willebrands examensprojekt för Forsbergs Skola, Stadsvolymer, och jag tänkte passa på att skriva lite om den hårdvara, mjukvara, och den öppna data som användes under utvecklingen.

Konstruktionen

Själva konstruktionen byggdes av brädor från ett byggvaruhus som skruvades ihop med vinkeljärn, och täcktes med vit foamboard.

Stadsvolymer - Konstruktion

Inuti konstruktionen så monterades olika rörliga delar byggt av LEGO Technic som till stora delar hade inhandlats på auktionssidor på nätet, eller från butiken Model Team i Bandhagen (varning för webbsida från tidigt 90-tal).

Det var även inuti konstruktionen som Arduinon, själva hårdvaran, placerades.

Stadsvolymer - Insida

Hårdvaran

Hårdvaran bestod en Arduino Uno Rev3 som inhandlades som en del av ett Startpaket från Kjell & Co. Hos dem köpte vi också en del extra sensorer och motorer, samt en ethernet shield, och en motor shield.

Arduino Uno Rev3

Vi hade också tusentals bitar LEGO Technic till vårt förfogande.

Stadsvolymer - LEGO Technic

Vi använde oss också av en 4G-router från TP-Link, en TL-MR3420 och ett 4G-abonnemang från Telia för att ha ett dedikerat nätverk för projektet.

Mjukvara

För att hämta data från de APIer jag skrev använde vi oss av Quartz Composer som är en samling  teknologier från Apple som gjorde det möjligt för oss att hämta data via RSS, hantera den, och rendera den som videos.

Projection Mappning genomfördes med Resolume.

Kod och programmering

Webbsidan stadsvolymer.iamleft.se skrevs i PHP mot en MySQL-databas, och Twitter-appen som postade tweets till besökare som angav sitt Twitter-namn använde sig av TwitterOAuth, ett kodbibliotek för att hantera OAuth för Twitters REST API. För enkelthets skull använde jag delar av Twitter Bootstrap för att styla sidan, och jQuery för att hantera formulärpostningar och förfrågningar till servern via AJAX.

Koden för att hämta tunnelbane-information använde APIet SL Realtidsinformation från Trafiklab och jag skrev en egen liten wrapper för att snabba upp anropen och plocka ut delar av datat.

Övrig data som projicerades på konstruktionen hämtades hem i förväg från olika myndigheter som t.ex. Statistiska Centralbyrån eller Stockholm Stad Dataportalen.

Koden som styrde Arduinon och tog emot signaler från de olika sensorerna och ethernet shielden, samt skickade kommandon till motorerna och servomotorerna skrevs i Wiring, det programmeringsramverk för mikrokontroller som bland annat Arduino använder sig av.

Som jag skrev i gårdagens inlägg så kunde vi inte använda oss av den, i Wiring, vanliga delay()-funktionen utan vi fick importera biblioteket elapsedMillis för att kunna skriva funktioner som kunde pausa sig själva utan att stoppa resten av funktionerna från att köras.

Vi använde också tredjepartsbiblioteket VarSpeedServo skrivet av Ewan Branda för att kunna styra hastigheten på servomotorerna som annars har en fast hastighet.

Och eftersom den ethernet shield vi köpte inte var den officiella som bygger på ett Wiznet W5100-chip, utan en annan som bygger på ENC28J60-chipet så fick vi använda ytterligare ett tredjepartsbibliotek för att kunna skriva koden som om det vore en original-shield. Det biblioteket heter UIPEthernet och är skrivet av Norbert Truchsess.

Min kod, utan de inlänkade biblioteken, hamnade på knappt 400 rader (med kommentarer) och var egentligen inget avancerat. Eller så skriver jag helt enkelt funktionell och optimerad kod (troligt).

Och det var det om själva utvecklingsprocessen.

Pyssellördag

I dag har jag hängt på Forsbergs tillsammans med Pontus hela dagen och fortsatt arbeta på hans examensutställning. Det har pysslats en del med LEGO Technic, jag har gjort mindre ändringar i de två APIer jag skrivit, och jag har registrerat en ny domän och satt upp en liten webbsida; men mest har jag försökt få en Ethernet Shield för Arduino, modell VMA04 från Velleman, att koppla upp sig mot internet och hämta data från en webbtjänst jag byggt.

Det visade sig denna Ethernet Shield är baserad på ett ENC28J60-chip, till skillnad från den officiella som är baserad på ett Wiznet W5100 chip, och detta medförde lite komplikationer i början.

Det officiella ethernet-biblioteket som man inkluderar i sina sketch-filer när man ska programmera för Arduino fungerar nämligen inte med ENC28J60-chippet och den informationen saknades i instruktionsmanualen. Så det var först efter ett antal misslyckade försök och lite googlande som jag hittade lite alternativa kodbibliotek.

Det alternativ jag till slut landade på var UIPEthernet som är skrivet att fungera på precis samma sätt om originalbiblioteket, men för ENC28J60-chip, och efter många extra timmar så fick jag någon så när ordning på koden. Det är fortfarande lite problem med nätverket och automatisk tilldelningen av IP via DHCP i nätverket på Forsbergs men jag hoppas kunna lösa detta i dag med en egen router.

Förhoppningsvis kommer jag kunna knyta ihop säcken kring kodbasen för Arduinon i dag, och på fredag är det dags för själva utställningen. Efter det kommer jag posta lite bilder och filmklipp från våra byggsessioner, och skriva en mer utförlig beskrivning av projektet. Jag vill ju inte spoila Pontus examensarbete innan det har ställts ut.

Romregistret och Systembolagets öppna data

Sitter och jobbare vidare på romregistret.se, förutom de tidigare experimentet med Facebook-login och favoritmarkeringar så har jag börjat skissa på ett alternativ till att använda Systembolaget API för datat.

Systembolaget tillhandahåller en del av sin data via öppna API:er, eller snarare som nerladdningsbara XML-filer. Så just nu sitter jag och skriver lite på en funktion för att hämta hem sortimentsfilen, analysera den efter ett antal givna regler, och sedan spara sortimentet i en databas.

Detta gör att jag slipper vara beroende av en tredje part för att hämta datat, och jag kan dessutom spara en kopia av XML-filen varje gång den uppdaterats.

Så kvällen spenderas i soffan, med The Dark Knight på TV, och MacBook:en i knät.

Spara favoriter i romregistret

Jag har fortsatt arbeta lite på romregistret och efter att jag la upp sidan så har jag nu snabbat upp den genom att cacha informationen jag hämtar på Systemet API i en databas som regelbundet hämtar informationen och kollar om något nytt tillkommit.

Utöver detta har jag börjat exprimentera med Facebook’s JavaScript SDK för att göra det möjligt för besökarna att interagera med tjänsten.

Det första steget är att göra det möjligt att favoritmarkera romsorter man tycker om och jag är mer eller mindre klar med detta. Vill du testa att logga in på sidan med ditt Facebook-konto och markera några romsorter så kan du komma åt test-sidan för detta på http://romregistret.se/index.login.php

Var bara medveten om att jag fortfarande jobbar på den funktionen så den sidan kan vara oåtkomlig vid tillfällen, eller slutar fungera då och då. Jag kommer dessutom att rensa tabellerna i databasen med jämna mellanrum under utvecklingen så använd inte sidan för att spara favoriter du vill komma ihåg, utan ebart för att testa tjänsten.

Vi får se vad jag kommer hitta på för andra funktioner, och när de kommer släppas.