Laget eget lagersystem med Swift og PHP

- Den største utfordringen er tid, tid og atter tid, forteller hobbykoder Steffen Gjerding.

Appen lister lagervarer og hva som er utleid. 📸: Le Buzz, Unsplash / Privat
Appen lister lagervarer og hva som er utleid. 📸: Le Buzz, Unsplash / PrivatVis mer

Har du noen gang tenkt: "Her trengs det mer orden, kanskje jeg burde lage et program for å løse det?".

Da er du ikke alene. Rundt om kring i Norge kryr det av skreddersydde løsninger for å holde oversikt over alt fra TV-spill til matlager på fjøs.

33 år gamle Steffen Gjerding jobber som fagarbeider i BaneNOR, men på fritiden er han hobbykoder. I 2017 bestemte han seg for å bruke hobbykode-kunnskapene til å gjøre arbeidsplassen bedre.

#1. Hva har du bygd, og hvorfor?

Som fagarbeider med ansvar for drift, vedlikehold og beredskap over store avstander kan det av og til være veldig praktisk å få vite status på lagerartikler ved å dra opp telefonen, da spesielt når du har lager på flere steder.

Siden jeg har programmering som hobby og allerede hadde pusla litt med Swift bestemte jeg meg for å lage en app ut av det.

Obtain går ut på at en bruker kan se i en liste og få en oversikt over verktøy og materiell på lager. Bruker vil da også se hvem som låner utstyr, og hvor mye ligger på lager av materiell.

Steffen Gjerding er fagarbeider i BaneNOR. 📸: Privat
Steffen Gjerding er fagarbeider i BaneNOR. 📸: Privat Vis mer

På lageret er det klistret QR-kode på reoler, hvor QR-koden inneholder database-nøkkelen for den artikkelen. Bruker kan da skanne koden med appen og velge å låne verktøy eller ta ut antall materiell. Verktøy/materiell legger seg da på deg, som du finner på din side i appen. Materiell tatt ut vil kun oppdatere databasen i henhold til antall på lager. Det er ikke før du på din side kvitterer materiellet som brukt, på prosjekt, at Obtain anser materiellet som brukt. Eller bruker kan levere tilbake materiellet til lager hvis materiellet ikke ble brukt.

På den måten kan planleggere belaste materiell på riktig prosjekt når materiellet er brukt.

Bruker kan også selvsagt søke frem utstyr/materiell og låne/ta ut på den måten i stede for å skanne QR-kode.

Slik ser det ut når Steffen utvikler web-versjonen av lagersystemet. 📸: Privat
Slik ser det ut når Steffen utvikler web-versjonen av lagersystemet. 📸: Privat Vis mer

#2. Hvor lenge har du jobbet med dette hobbyprosjektet?

Appen har blitt utviklet først og fremst hjemme. Det er ikke en offisiell app i BaneNOR. Kun for min egen avdeling og noen få andre.

«Hvor mange timer jeg har brukt er veldig vanskelig å si. En del.»

Ikke noe jeg har fått betalt for. Begynte vel med prosjektet i starten av 2017. Hvor mange timer jeg har brukt er veldig vanskelig å si. En del.

Jeg har ikke jobbet fast med appen i all den tiden. Har lagt på funksjoner etter som behovet har vist seg.

#3. Hvordan henger prosjektet sammen?

Appen snakker med en Linux server via https. Koden den snakker med er PHP. Her skjer alt av sjekker, også autentisering. Alle PHP-filer som kan bli kontaktet tar i mot en hash som ble lagret under registrering/initiering av appen. Bruker må registrere appen sin før bruk.

Server-adresse, brukernavn (du må allerede være registrert i databasen, også med telefonnummer) og avdelings-id må fylles ut. Server sjekker om du er registrert, lager en random 4-siffret kode, og hasher det med annen info som den lagrer i databasen. Bruker får SMS med den 4-siffrede koden som bruker må taste inn i appen. Appen må så hashe på samme måte som server og kontakte server ved aktivering.

Slik ser registreringen ut i appen. 📸: Privat
Slik ser registreringen ut i appen. 📸: Privat Vis mer

Finnes hashen i databasen vil server svare godkjent og appen lagrer info i User Default - en måte å lagre enkle bruker-innstillinger/info i iOS. Det er dog ikke sikkert å lagre passord/sensitiv data i User Defaults. I fremtiden vil jeg kryptere hashen i KeyChain. Appen vil ved enhver request sende med hashen for legitimering. Alt over https selvsagt. SMS løsning leveres av Telenor/link-mobility.

Websiden bruker JWT (JSON web tokens) for autentisering.

#4. Hva har vært den største utfordringen hittil?

Tid, tid og atter tid. Har veldig mange ideer, og mye jeg vil gjøre bedre. Det blir hele tiden et spørsmål om hvor mye tid jeg skal bruke per utfordring.

Ellers så er det vel alle de forskjellige plattformene. I en lang stund så kjøpte jobben kun inn iPhone. Det var bra. Men nå kan man velge mellom iOS og Android. Det kompliserer det hele enda mer. Igjen, tid.

Og hele systemet er jo avhengig av at brukere bruker appen konsekvent. Rimelig demotiverende å bruke et system som ikke gjenspeiler virkeligheten.

En annen forutsetning er at lager er organisert bra, som at utstyr/materiell har tydelige plasser, og er tydelig merket. Blir det vanskelig og vrient sklir systemet ut.

Utviklingen av iPhone-appen skjer på en iMac. 📸: Privat
Utviklingen av iPhone-appen skjer på en iMac. 📸: Privat Vis mer

#5. Hva er du mest stolt av i forbindelse med prosjektet?

At det faktisk ble ett produkt ut av det til slutt. Det er ikke ofte jeg kommer så langt i ett hobbyprosjekt at det blir et produkt som det går an å bruke, ikke bare av meg men også andre.

#6. Bruker du prosjektet til noe spesielt i dag?

Det brukes i dag av min avdeling. Om sommeren er det noe lunken bruk da det er om vinteren at prekært utstyr er mye i bruk.

#7. Hva er fordelene med å ha et hobbyprosjekt?

At du kan bruke tid på det du selv føler du vil bruke tid på. Hvis du har et prosjekt som har klare rammer på et problem det skal løse tror jeg også at et hobby prosjekt er en flott arena for å lære.

Jeg begynte for flere år siden med Java, men klarte aldri å finne et prosjekt som jeg kunne relatere til min hverdag. Da mistet jeg fort motivasjon.

Kjøpte meg min egen fysiske server, lærte meg PHP, JS, Apache og Linux. Det var veldig gøy, og jeg skjønte at det var applikasjoner som bruker internett som var tingen.

Arbeidspulten til Steffen hjemme. 📸: Privat
Arbeidspulten til Steffen hjemme. 📸: Privat Vis mer

#8. Har du noen planer for prosjektet ditt fremover?

Har lyst til å bytte backend fra Apache og PHP til NodeJS fordi det høres gøy ut. Eller Azure da jeg hare noe erfaring med C#/.NET. Jeg har lyst til å bygge webside i VueJS også, fordi det høres gøy ut.

Har noen andre hobby prosjekter hvor jeg har bygget frontend i Angular2 og TypeScript, men vil prøve noe annet enn Angular. Men først må jeg lage en fungerende app til Android, da flere av mine kolleger nå har skaffet seg Samsung. Holder på med det nå. Har brukt opp mange timer, og har begynt på nytt flere ganger. Men tror jeg er på riktig vei nå.

Generelt sett har jeg mange ideer rundt Obtain. Tid tid og atter tid. Og alt for mange prosjekter/hobbyer.

#9. Har du noen planer for å gjøre det tilgjengelig for andre?

Har lyst til det. Nå er Obtain så rettet mot min jobb at det ikke ville være intuitivt mot andre strukturer.

Jeg har lyst til å "universalisere" (hvis det er et ord) systemet slik at det vil være brukbart hos andre også. Har blitt kontaktet av flere som kunne tenkt seg å bruke noe slikt hos seg selv - lærere, snekkere og så videre.