Bombshells face an eksistensial risk

Som del av prosjektet med å kartlegge trusler i Oslofjorden er det også viktig å kartlegge artsmangfoldet i fjorden for å vurdere hvilke arter som potensielt er truet og på den måten kartlegge risiko. I sensor-hubene har Bombshells satt inn kamera som trigges av sonarsensoren for å ta bilder av dyrelivet i området. Ved å bruke AI gjenkjenner vi ulike arter av skillpadder som potensielt vil være sårbare for vannforurensning og heve alvorlighetsgraden ved en hendelse.

Vi har trent opp en AI model i Power Apps til og identifisere tre ulike typer skilpadder, landskilpadder, havskilpadder og sumpskilpadder. Vi har matet AI med bilder av tre typer skillpadder i sine respektive miljø.

Vi bruker bilder for og trene modellen minimum 256 x 256 piksler som er kravet for og trene modellen. Bildet nedenfor viser hvordan bildene med ulike typer markeres og kategoriseres.

Treningsgrensesnitt
Landskilpadde
Sumpskillpadde
Havskilpadde

Etter vi har markert alle bildene vi ønsker og bruke som treningsgrunnlag, trener vi modellen og får en ytelse score. Her er den publiserte modellen etter den er ferdig trent.

Til slutt for å teste systemet har vi bygget en PowerApp som holder på en enkel komponent som laster inn et bilde og sender det til AI for identifisering. Resulatet vises i form av at et gjenkjent objekt markeres og betegnes med riktig kategori i grensesnittet, sammen med en score på hvor sikker AI er på at resultatet er riktig.

Kilde til risikoanalyse

Med disse dataene knyttet opp mot lokasjonsdata vil man kunne hente inn og sammenstille beregninger som brukes i risikovurdering av en hendelse.

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 😉

Those pesky accountants are at our throats

We have dumped historical events into a blobstorage for simple storage over time. The accountants at TMNT hq want to known what expenses each event incurred.

To facilitate them a simple search for cost by parameter we have built an azure search on top of the blobstorage. The blobs are indexed every hour so that any new events added to the search and the accountants can perform their accounting on the cost facet of the events.

The image below demonstrates how the backend search looks, the query in question returns the cost facet for every event where the triggering factor have been a loud sound (100dB).

If the search had returned two events for 100dB where the cost was equal, the count value would be 2.

Simple searching can also provide quick overviews over how a triggering event relates to the other data our sensors capture. Below we can see that all the events that triggered for 100dB triggered at a distance of 144cm from the sensorrig.

Clean good practices during development

MaMNT are aiming to keep technical debt to a minimum, and to maximize agility, extensibility, security and maintainability. Sure, we could rush ahead, building a quivering monolith on the brink of collapse. But this is about putting pride in your craft!

Code Repository

The code repository is hosted in GitHub as a mono-repo, split into individual subdirectories for different parts of our solution. Mono-repo is used by software giants such as Google and Microsoft, to make testing and development easier across apps and products.

Continuous Delivery

Continuous delivery is achieved through GitHub Actions: The gRPC server and Registration app are built and deployed to Azure App Service whenever changes to the apps are pushed to the main branch.

The Github Actions workflow (steps are minimized to save space)
Deployment complete!

Secure secret storage

Of course, client secrets are kept out of the code. Secrets are kept in Azure Key Vault, and are injected as environment variables in the App Service.

The appsettings.json file does not include the Client Secret.
The secret (Azure__ClientSecret) is added in Azure Web App through a reference to Key Vault, where the secret is stored.

Inversion of Control

Following Microsoft and industry best practices, the software project uses Dependency Injection to achieve Inversion of Control. Our classes are stateless, and dependencies are injected from the service provider. Classes depend on abstractions instead of implementations, to make the solution more “plug-and-play” and simplify unit testing.

The GrpcClient class takes a StatusUpdateHandler as well as a Logger from the service collection. Appsettings are injected as well.
The GrpcClient installer.
Adding the required services in an app that uses the GrpcClient.

SOLID principles

We adhere to all “SOLID principles”. All classes and methods do one thing and do them well. Classes depend on abstractions instead of implementations. Interfaces are small and interchangeable.

BombShells – right now or later

I Oslofjorden er det plassert ut sensorer for å detekere forurensing.

Sensorene er koblet til en pc og kommuniserer mot port COM3. Vi har derfor utviklet en tjeneste som kjører lokalt på pcen og lytter på COM3. Når sensorene detekterer en hendelse så sendes det en melding over port COM3 og servicen våkner, validerer input og sender informasjonen til Azure Event Hub.

Årsaken til at vi har valgt å benytte Azure Eventhub
1) Vi ser for oss at vi på sikt skal motta mye sensor data i realtime
2) Kommuniksajonen skal kun gå en vei, dvs fra sensorer til eventhub

Det utføres en validering om Turtels skal sendes ut og redde miljøet.

Når turtels er ute på oppdrag ønsker vi at de skal kunne kommunisere med hverandre. Derfor hatr vi tatt utgangspunkt i eksempel app og modifisert denne til å funger fort vårt case.

azure-signalr/v1.md at dev · Azure/azure-signalr · GitHub

og satt opp infrastrukt i azure

Med dette ønsker vi badges right Now

Registration in Portal to contact in DataVerse

Using Portals we have created a registration form, which will include all information we need for the customer record in DataVerse.

Once the form is submitted a contact record is created in DataVerse. Using a Cloud Flow we create an approval on this creation before assigning the record a contract/deal.

Because of legal reasoning around the power of attorney we have implemented, we have to manually approve each contact as off now. But this is a one-time process for each customer after they are validated.

Once they are approved we update the contact with a new status, and as of that, we assign a contract.

Of course, no problem, we got your back!

When we, three NoCode/LowCode people register for a Hackaton, we kind of figured out that maybe writing code wasn’t the way to help other teams. But, that doesn’t stop us, we’ll help you out in any way we can! And, when someone needs something cut with scissors, we’re there! It’s our pleasure, and the sign looks amazing!

And of course, enjoy a cold coke while you see us working hard to acchive what you need <3

The True Risk to our Existence

Who can pick up the mantel after we retire? Who is truly a ninja!? We need to recruit the future of TMNT and the best to do it is through AI. We will use AI Builder and a custom model to identify our future ninjas, in return we offer cheap pizza, a full 5% discount on your purchase!

Only the customers masked as a TMNT will be offered the precious discount!

Code – commit – MAGIC – live

We are using best practicing development and deployment for out Web Api solution hosted on Azure.

We code it with .NET 6 in Visual Studio 2022:

We do sensible commits using Git towards GitHub:

In Azure our app is wired up to listen to this repository and do build, log and deployment to our resource in Azure:

And it’s all accessible here:

We claim: