Kort oppsummert… 😎

Som vi tidligere har beskrevet i bloggen, er pruduktet vårt tenkt som en B2C-løsning.
Vi selger det som en all-in-one-package. Med på kjøpet får du et kjøleskap med integrert tech, samt en cloud-tjeneste for behandling av data og til slutt men ikke minst… To apper!
Extreme Business Value i praksis!

En app for oversikt over alle middager som er mulig å lage basert på hva du har i kjøleskapet. Her kan du se hva du har og hva du eventuelt trenger for å lage din favorittpizza, eller favoritten til noen andre i kollektivet. Personlig tilpasset, med mulighet for å velge din egen favoritt.

Her mangler det ingredienser for alle favorittene. Men frykt ikke automatisk handleliste er allerede generert

Som du ser av bildene mangler det en hel del ingredienser til favorittmiddagen, men det gjør ingenting. For vår mobilapp har allerede handlelisten klar.

Bare huk av på det du har kjøpt for å minne deg selv på hva som mangler.

Når varer er handlet inn, og satt inn i kjøleskapet fjernes de automatisk fra handlelisten.
Her snakker vi killer app-magi kombinert med excellent user experience!

Vi har brukt mye forskjellig teknologi og materialer.
Vi snakker papp, gaffa tape, 3D-printing, matvarer, Arduino, Raspberry PI, Azure Cognitive services, Power Automate, PowerApps, React.js, Python, HTML5 osv. osv. osv.
Hele pakka er techy tech og rett og slett Rock Solid Geeknes!

Branch policies, infrastructure as code with Pulumi and CICD as code with yaml

👾🤓✋🏻😎✌🏻👾

Det er opprettet to brancher i vårt github repo.
Develop branch som holder kode for dev miljøet.
Master branch som holder kode for test og prod miljøet.
Det er implementert regler som krever at man setter opp PR,
og for å kunne merge koden til develop må en annen utvikler godkjenne koden.
Det er også implementert build check som starter automatisk når man setter opp PR, slik at man unngår å merge inn kode som vil feile i CICD.

Github branch policy
PR to master with build check

Mappestruktur

/nINjas

Inneholder vår SPA applikasjon med React og .NET6

/nINjas.Infrastructure

Inneholder ASP.NET med Pulumi

/python

Inneholder pyton kode for å ta bilde med rasbery pi og analysering av bilde

Infrastructure as code with Pulumi

Pulumi with ASP.NET

CICD as code with yaml


Deployment with the power of the shell

Vi har jobbet med å kjøre CICD i azure devops men har noen rettighetsproblemer så deployment er gjort med powershell:

Deploy infrastructure with pulumi commands in powershell
Failed deployment in AzureDevops but with more time it will work!

Kjører på en app service i azure: https://ninjas.azurewebsites.net/

Kjøleskapet… Fridgitoid 9000.. Kjøkkenapparat eller din venn i hverdagen?

Ideen om verdens beste kjøleskap ble unnfanget få dager før ACDC gikk av stabelen, men vi hadde et kjempeproblem… Vi manglet jo et faktisk kjøleskap å «smartifisere». Heldigvis sitter teammedlemmene på enorme kunnskaper innen papp- og gaffateipkonstruksjon. Med en 3D-printer, semi-god kjennskap til 3D modellering en livlig fantasi klarte vi å lappe sammen en pappeske som absolutt minner om ekte vare.

Her er en video som viser vår fantastiske kjøleskapslogo som spinner rundt og indikerer at det er liv. Når døren åpnes trigges vår knappesensor som gjør at kamera tar bilde.
Dette oppsettet hadde ikke vært mulig uten den trofaste Arduinoen, som bygger på det eldgamle programmeringsspråket C som først brukt i 1972. Some things never change, og hvorfor bytte ut noe som fungerer?

Bildet sendes til Azure Cognitive services. Responsen kan du se på skjermen i videoen. Helt klart og tydelig en appelsin der altså. Deretter sendes dette til Power Automate for å oppdatere innholdet i ingredients-tabellen som beskriver hva som finnes i kjøleskapet. Orange = True!

Her har vi et flott B2C-produkt som forenkler hverdagen til alle mennesker og skillpadder med middagskvaler! Det beste av alt, latterlig lave produksjonskostnader! Hvis ikke det er Business Value så vet ikke jeg 😉

Deling er å bry seg!

I løpet av gårsdagen slet vi mye med å få knappen til kjøleskapsdøren vår til å fungere. Vår eminente Arduino-utvikler, Mats, jobbet iherdig med å kode seg rundt alle problemer. Det viste seg at han manglet en motstand… Nærmere bestemt 10 000 ohm…

Undertegnede var ute på en runde rundt i lokalet, for å se om det var noen som trengte hjelp med ett eller annet. Etter en liten stund var jeg i kontakt med @infoninjas og kom i en god prat om løsning. Plutselig la jeg merke til en remse med motstander på bordet. Kunne det være 10 kΩ??? Jammen var det det!
Uten å spørre, fikk vi tilbudt en liten resistor. Og vipps, så funket knappen! Tusen takk til @infoninjas!

Som gjengjeld sent i går kveld satt det samme teamet og slet med Power Appen sin. De fikk ikke skjemaet sitt til å sende inn et bilde. Vi sendte øyeblikkelig vår beste PowerApps-utvikler Henrik. Han oppdaget fort at feltet lå uten for formet, fikk lagt det inn på rett måte, og vipps der funket det!

Hvis alle deler av sin kompetanse, og tid, vil alle komme godt ut av det. Motivasjonen er tilbake på topp hos vår Arduino-utvikler, og hos InfoNinjas PowerApps-utvikler! Vinn-vinn!

La resistance

DocType HTML5 🤓🖐️

I vår SPA applikasjon for å hente ut handleliste til manglende matvarer i kjøleskapet har vi implementert HTML5 med HTML5 tags.

Definer dokument som HTML5
HTML5 <picture> tag

Sharing is caring <3

C# 10 introduserer en liten men smud feature som lar deg fjerne klammeparentesene fra namespacedefinisjonen i filene dine. Da får du et lag mindre med indentering og ryddigere kode. I kunnskapsdelingens navn, lagde vi en pull request til Bouvet shredders som takk for de gode tipsene de ga oss kvelden før.

Her kan dere sjekke ut repoet deres: https://github.com/bricenocar/acdc-2022

Vi har selvfølgelig også et public repository tilgjengelig her:
https://github.com/TommyBakkenMydland/nINjas

En samhandlingsapplikasjon i Pizzasentralen

For å øke effektiviseringen av bruken med den flotte PowerAppen vår, og dermed forenkle pizza-tilgangen, har vi valgt å legge til muligheten for å benytte oss av denne gjennom Teams.

Applikasjonen er lagt til i løsningen gjennom «Microsoft Teams admin center», og distribuert til ninjaene gjennom «Setup policies» og er pinnet til venstre menyen i Teams-applikasjonen.

Manifes.json:

Her snakker vi samhandling og one app to rule them all!

Måtte Fridgitator 9000 være med deg!

Kjøleskapet kan se pt. 2

Nå har vi bygget videre og kommet opp med et mye mer robust kjøleskap. Flytteesker kan brukes til så mangt 😎 Fortsatt en del testing med forskjellige frukter (man tager hva man haver). Responsen er så som så, men vi er på god vei. Klementin ble tidligere eple (ref. https://acdc.blog/in2022/kjoleskapet-kan-se/), nå er appelsin appelsin, og eple er eple 🎉

Her har vi en appelsin innendørs i et kjøleskap med både vegger og gulv. Imponerende? Yes!!!
Og her er hva som ble tatt bilde av. 1-0 til AI

Oppsettet er som følger:
Webkamera montert i kjøleskapsdør, koblet til Raspberry PI.
Arduino med knapp (les mye frustrasjon med KNAPP!!!!) som trigger kamerabilde ved åpning av kjøleskapsdør.
Arduino styrer i tillegg en trinnmotor som spinner en kul 3D-printet bling på toppen av kjøleskapet (bling kommer, men se bilde).
Alt på Arduino styres av den samme Raspberry PI’en ved hjelp av Python.
Når bilde er tatt, sendes det til Azure Cognitive services for analyse, og responsen kommer som oppdagede objekter. Deretter matcher vi dette med vår egen ingrediensdatabase i Dataverse via en Power Automate flow (kjøres via en HTTP request trigger i flowen) som oppdaterer ingredienser med attributtet “In fridge” = True/False.

Bildet under viser flowen som trigges fra kjøleskaps-raspberryen. Deretter oppdateres status på hva vi har i kjøleskapet. Dette er deilig å slippe og gjøre manuelt.

Her har vi integrert rubbel og bit, og det fungerer!

Det vi frykter nå er at maskinene skal vende seg mot oss, og si at kjøleskapet er tomt til en hver tid. Da kan vi risikere å sulte i hjel foran kjøleskapsdøren.
Men inntil videre velger vi å stole på vår kjære Fridgitoid 9000