I fjor ble syv av oss i Bouvet, alle utviklere, inviterte til å delta på et 24 timers hackathon. På det tidspunktet visste ingen av oss noen ting om den ambisiøse oppgaven som lå foran oss noen måneder frem i tid.
Slik arrangerer du et vellykka hackathon
Bouvet arrangerer hackathon med livestream, og har noen tips.
Forslag til problemstillinger for hackathonet ble innsamlet og stemt frem internt, og vi satt igjen med tre oppgaver. Det ble satt opp en offentlig avstemningsside, og på denne siden fikk de som ønsket muligheten til å stemme på hvilken oppgave vi skulle løse.
Til slutt endte vi opp med kanskje den vanskeligste oppgaven av de alle, nemlig: hvordan bidra til mindre plast i havet.
Fredag 1. februar var den store dagen kommet, og fra kl.12:00 kunne alle som var interessert følge med på hvert sekund av prosessen. Vi ville prøve å lage en webapplikasjon for panting av plast.
For å gi dere som ikke så på en oppsummering av det utfordrende døgnet og webapplikasjonen, vil vi nå presentere et sammendrag av prosessen fram til resultatet. Vi er veldig fornøyde med hva vi klarte å få til på de 24 timene, og håper og tror at dette kan være noe som i lengden vil kunne bidra til mindre plast både i hav og på land.
Slik ble PLUKK til
Det ble fort enighet om at en plastpanteordning var veien å gå, selv om det også kom frem flere andre gode ideer under idémyldringen som sparket i gang hackathonet.
I begynnelsen diskuterte vi frem og tilbake mellom flere forskjellige løsninger. Alt i fra ryddeapp og ingrediensliste-skanner, til sensorer i havet og droner som plukker søppel. Utfordringen var å finne en idé som både ville være mulig å levere på 24 timer, og som alle var motiverte til å jobbe med. Det måtte være en applikasjon som var enklest mulig for sluttbruker, som kunne nå ut til et stort publikum og som ville være realiserbart i etterkant.
Da plastpanteideen kom på bordet, var det raskt stor enighet om at det var en realiserbar idé. I tillegg hjalp det mye at både publikum og plastkoordinator fra Bymiljøetaten i Oslo kommune, Anja Stokkan (som kom for å bistå teamet med sin ekspertise), støttet denne ideen.
Dette er PLUKK
Først og fremst er PLUKK en webapplikasjon, som ved hjelp av QR-kode skal kunne registrere sekker med plast som leveres til avfallsmottak eller gjenvinning.
Når posen leveres og registreres på det aktuelle avfall- eller gjenvinningsmottaket, skal du få en økonomisk belønning basert på vekten av plast som leveres. Implementering av løsning og levering av plast er tenkt å kunne knyttes opp til et eksisterende avfall- eller pantesystem.
Den overordnede tanken er at vi ønsket å lage et system som er så lettfattelig som mulig, der du får økonomisk belønning for pant av plast.
Versjonskontroll, bygg og deploy
Vi startet med å legge kodeprosjektene på en åpen GitHub-konto, hvor kun vi i teamet hadde contributor-tilgang. Dette gjorde vi for å sikre at publikum kunne legge inn forslag til endringer og funksjonalitet ved bruk av «pull requests».
Azure Pipelines ble konfigurert og brukt til bygging og deploy av løsningen, slik at det var mulig å teste underveis.
Teknisk implementasjon
Overordnet besto løsningen av to webapplikasjoner: en klientapplikasjon og en mottaksapplikasjon.
Identitetskrise i frontend-utvikling
Må man kunne alt i 2019?
Grunnlaget til begge webapplikasjonene ble laget i React ved hjelp av npm-kommandoen create-react-app. Det gjorde at vi kunne komme kjapt i gang med utviklingen. For å kunne scanne QR-koder brukte vi en ferdig pakke som heter react-qr-code. Ikonene som ble brukt kom fra pakken react-icons.
Mens en del av arbeidskraften i teamet tok seg av front-end-løsningen, satte andre i gang med backend-løsningen - i form av et Rest API i .NET Core. Her samlet vi endepunkter med logikk som genererer QR-koder, aktiverer QR-koder på plastsekkene og som gir mulighet for et eventuelt mottak å registrere at sekken er kommet inn ved å skanne samme QR-kode.
API henter ut saldo og annen statistikk for mengde plast som er skannet både for bruker og gitt lokasjon. API håndterer anonyme eller innloggede profiler, brukerregistrering, samt utføring av utbetaling til en person eller valgfri veldedig organisasjon.
Karl velger C#, .NET Core og Xamarin
- For meg er det et naturlig språk å velge først.
Vi brukte en NoSQL Cosmos-database i Azure Storage, for lagring av QR koder og brukerdata. Det er en enkel og rask måte å komme i gang med datalaget, siden data som persisteres kan komme inn i form av json – uten krav til initiell struktur. Dessuten ble GDPR ivaretatt på en enkel og håndterlig måte, siden "partition", eller nøkkelen i databasen, er selve bruker-Id'en.
Slik skal den brukes:
- PLUKK-webapplikasjon skal først generere QR-koder som skal benyttes på PLUKK-plastsekk. QR-kodene ligger registrert i en database som "inaktiv"
- Sluttbrukers oppgave er først å samle inn plast i en plastsekk med PLUKK-QR-kode, og deretter skanne koden med kamera eller QR-leser på sin telefon. Når sluttbruker gjør dette, blir QR-koden "aktivert" i databasen, og dermed koblet til brukeren. Det er kun mulig å aktivere den samme QR-koden én gang.
- Sluttbrukerne er ikke avhengig av å lage profil, men må opprette en profil når de ønsker å ta ut saldoen som er opparbeidet, eller gi til veldedig formål om de ønsker det.
- Videre leverer sluttbruker plastsekken til et eksisterende mottak som har implementert PLUKK. Dette kan være alt i fra vanlige søppelordninger, flaskepant-stasjoner, avfallsmottak eller resirkuleringsstasjoner.
- Når plastsekken mottas og skannes, blir informasjonen som er knyttet til plastsekk oppdatert. Dette innebærer verdi basert på vekt av plastsekken, lokasjon for mottak og annen data av interesse.
- Bruker ser til slutt oppdatert informasjon om sin saldo i webapplikasjonen, samt annen informasjon om pantet plast. Tanken er også at denne informasjonen skal kunne deles i sosiale medier.
Det famøse sideprosjektet
Som om ikke det var nok jobb å lage PLUKK i løpet av de 24 timene, satte vi i tillegg i gang et sideprosjekt. Litt fordi det var en idé som var godt likt av gruppa i idéfasen, og litt fordi to av oss, Martin G og Nikhil André, hadde et stort ønske om å dra inn Labben (vårt makerspace) på en eller annen måte.
Kort forklart gikk sideprosjektet ut på å lage en type lotterimaskin som gir deg en belønning dersom du putter sneip, snus eller tyggis oppi. Dette er de tre verstingene som blir kastet på bakken daglig, og de inneholder alle plast. Tanken bak denne maskinen var at vi ønsket å lage noe morsomt, men som også hjelper på å redusere plastforsøpling. Maskinen er bemerkelsesverdig, og vi tror at om den brukes i rett miljø, så kan den øke bevisstheten rundt håndtering av plast.
Mer spesifikt består maskinen av en ESP8266 mikrokontroller, 7-segment 8-bit display, steppermotor og IR-sensorer for å detektere at en sigarett blir sluppet nedi. De vitale delene av maskinen ble selvsagt produsert i vår egen 3d printer. Det hele ble montert inni en resirkulert konfekteske. Vi elsker jo å lage slike ting på Labben vår, og vi visste vi kunne få til artig innslag her med hjelp av Jesper!
Takk for god hjelp!
I løpet av hackathonet støtte vi på flere «humper i veien», og flere av disse ville vi løst mye lettere om vi satt på kontoret og hadde en vanlig arbeidsdag. Men med tanke på at flere av oss brukte nye teknologier som vi ikke hadde like stor erfaring med, var det veldig nyttig med hjelp fra publikum.
Slik bygger du et smartspeil
HackTechGo! forklarer hva du må kjøpe inn og hvordan du setter det sammen.
Det kom nemlig inn hjelp på både store og små problemer fra erfarne og dyktige folk som hadde lyst til å hjelpe. Noe av den viktigste hjelpen vi fikk, var likevel fra noen interne UX-designere. Denne hjelpen dro virkelig løsningen i land. I den fasen gikk applikasjonen fra å være en standard svart/hvit webapplikasjon uten noen wow-faktor, til å bli et produkt man kunne være stolt av. Vi ønsker å benytte anledningen til å takke alle som så på og som bidro.
Veien videre
For øyeblikket jobber vi med å se på hvordan PLUKK kan testes ut i praksis, og når det kan settes i gang videre arbeid. Vi har stor tro på at dette kan være interessant for flere aktører, fordi det ikke er nødvendig med store investeringer i verken system eller ny infrastruktur for å implementere en slik panteordning for plast.
Forhåpentligvis kan tiltak som PLUKK bevise at IT kan gjøre store utfordringer som plast-forurensning mer overkommelig og mindre håpløst. Panting av flasker er en velfungerende ordning i Norge, og det er nærliggende å tenke at en panteordning for plast ville ført til bedre håndtering av plast, både fra private husholdninger og fra næringslivet. Vi tror også at en panteordning vil gi ytterligere motivasjon for å rydde plast som er kommet på avveie i naturen.
9 JavaScript-nyheter i ES2019
Flatmapping, strengtrimming, array-konvertering, valgfri fanging av feil og mye mer!