The Pirates 365 Recruit Terminal – Glossy pixels & Thieving Bastards

Shiny, glossy user interfaces would earn this badge, it won’t break on small screens right?

So, at the request of the judges, we will shed some more light on our app, its UI and super glossy pixels.

The app is made in vue.js and contains three main components:

  • The ThreeD component, responsible for rendering our 3d parrot
  • The FormUI component, responsible for rendering text and input
  • The Camera component, responsible for gathering camera input, object detecting and debug interface

The ThreeD Component

In this component we use troisjs and three to setup a scene containing camera, lights, our parrot model, and positioning this to match the rest of the UI.

As the model we are using contains all the different animations inside on animation sequence, we have to split it up into different actions, like idle, scream, takeoff etc.

The FormUI Component

Adhering to the shadow first(tm) principle

In this component we use vue template logic in combination with CSS and stolen borrowed texture to create the interface for providing instructions and gather inputs. We also managed to sneak in the actual font borrowed from The Secret of Monkey Island, after battling with getting ttfs converted to woff🐶.

The Camera component

The camera component is not seen on the screen and does not directly contribute to the UI. However when for debugging we’ve build a little UI to show the detected objects.

The Existential Risk – using AI to detect potential recruits and giving them proper pirate names

Pirates 365 uses several AI components

TensionFlow

We are using Tensorflow to detect passing pirates

Tensorflow can run in the web browser, and is able to both detect persons and other objects like bottles.

Hooking up the webcamera with the frame analyzer
Detecting bottles and pirates

ChatGPT to create PirateNames

We have already blogged about how we are usting OpenAI’s DaVinci model to generate Pirate Names here

Here we use the following prompt

Create a creative and cool pirate name from the name "{firstname lastname}".  Do not use the word "captain". Answer only with the name - max 3 words. Only output text characters a-z, no special characters!

Hipster-ish technology

Making this we leveraged vue.js, pinia, three, troisjs, tensorflow, ChatGPT. The list goes on 😉. All pretty hip, (almost) non-ms technology.

Badges

We hope this sholud be sufficient for getting the AI- and Hipster badge 🏴‍☠️✌️🦜

🦜Awesome community champions – helping our good friends at ❤️PowerPirates of AxData ❤️

When we went to the dinner friday evening we discovered a serous security incident at our friends and good neighbours at the PowerPirates of AxData. Two of their team mebers had forgotten to lock their computers!

It seemed like their were logged on their systems. Instead of doing as ordinary pirates 🏴‍☠️probably would do and destroy all their things we did THE RIGHT THING and locked their computers using the very special keyboard combination (Windows + L) ❤️

❤️All the best to the Power Pirates from the Sabeltanns❤️

Onboarding flow for new pirate recruits

An important part of Pirates 365 Recruit is the onboarding flow:

The super-popular Pirate Recruitment Terminal (PRT) give a lot of leads, and it is important for the HR team not use too much time onboarding the pirates

We have created a Power Automae flow that automates much of this, with the following features

  • Generate Pirate Names (described in this post)
  • Generate Lead in Dataverse
  • Prompt adaptive card in Teams
  • Generate Azure AD user
  • Add newly generated Azure AD user to Azure AD group
  • Send SMS to recruit with login info and link to learning game

Power Automate Cloud Flow Overview

Creating Leads in Dataverse

After the pirate name is generated a lead is created in Dataverse

Usling Leads in Dataverse the recruitment team can collbaorate on the candidates – all integrated in the Recruitment Teams Channel.

Creating Adaptive cards

We are also posting adaptive cards to the team, and is possible directly from the adaptive card to accept the pirate recruit to go further down in the recruitment proccess

Generation of adaptive card. Generated in https://adaptivecards.io/ to get a nice design and actionable buttons

Create users in Azure AD, assignment to security roles and licenses

After the recruit is accepted the newly hired i created in Azure AD and given proper licenses and permissions

We are using Azure AD Security groups to dynamically assign licenses to the newly accepted pirate recruits

Here we see that they get Dynamics 365 Customer Engagement licenses – so they can use our powerapps with a lot of fancy premium features✌️

Last but not least – telling the newly hired pirates how to login by sending a SMS

After all this we need to notity the pirates how to log in

We send a SMS using the Norwegian SMS-provider “Sveve” which have a simple API.

We send the username and the generated password (which the recruit must change on first login)

A link to the pirate training is included, so the pirate can train to be a worthy pirate

Badges

We think this solution may qualifty for

  • Feature Bombing by using five different services in one flow
  • Power User Love by using a nice combination of Power Automate, Microsoft Teams and Dynamics 365
  • Stairway to heaven by using Azure AD API; Dataverse API and Teams API

The Pirates 365 Recruit – Pirate recruitment terminal (PRT)

Recruitment is an important, and integrated part of Pirates 365, to acquire the best talent for our crew. To help us with this we have developed The pirate recruitment terminal (PRT). This solution provides us with a visually appealing and an engaging experience to gather new recruits.

Illustration of the Pirate recruitment terminal’s place within the Pirate 365 Recruitment module, along with the other modules.

PRT User flow

Since pirate recruits normally aren’t that familiar with modern interfaces, we have chosen a living parrot to help and guide the user and provide a smooth user experience.

When a pirate is detected, our engaging parrot approaches the pirate and presents the sign-up option. We collect personal details and complete the process by taking a picture. The collected data is then sent into the platform for future processing.

Sign-up form
Picture capture

The Pirate recruitment terminal technology stack

PRT The app is running on the vue.js progressive javaScript framework with Pinia🍍 for state management. For the 3d animated parrot🦜 we are using three.js and TroisJS with WebGL rendering. For AI vision👁️ and object detection🤠 we are running tensorflow under the hood. If available the model is running on GPU, if not we fall back to CPU.

Images, 3d model, fonts is stolen captured on the internetsea.

Everything is running in the local browser🤓

Using Power Automate to create Pirate Names using OpenAPIs Davinci model

Bacground: When recruiting potential pirates we want to give them proper pirate names. Pirates 365 is a service oriented platform, and the recruitment frontend posts potential new pirates through a Pirate

Our solutions is using Power Automate and the HTTP Trigger to accept new pirates

We are using the OpenAI (independent publisher) step found in Power Automate (https://learn.microsoft.com/en-us/connectors/openaiip/) since it is yet not so easy to get access to Azure Open AI which probably would be better.

We had to do some tuning to get a little bit different answers – at first it just returned “Captain firstname lastname”, but after some tuning by setting down the temperature from 1 to 0,7 and explicity saying not to use the word “captain” we got the desired result.

We are creating the new pirate recruits as Leads in Dataverse so the recruitment team can contact them for possible empolyment

Here is the lead created in Dataverse shown in the “Pirate 365 Manage”, ready to be qualified as a proper Pirate!

We aim for the badges “go with the flow” for using Power Automate Cloud Flows and “The Extstential Risk” for innovative use of AI

Sail into the Future with Pirates 365: The Comprehensive Pirate Management Solution – Evidi Sabeltanns

Welcome to Pirates 365: A Comprehensive Pirate Management System

In this era of innovation and technology, it’s time to take the pirate world by storm with a new, cutting-edge system that will revolutionize the way pirate fleets are managed. Introducing Pirates 365: a one-stop solution for pirate management, from recruitment to send-off.

Pirates 365 is a comprehensive, end-to-end system designed to streamline the entire pirate management process, from the recruitment of new pirates to their training and management, and finally, their send-off. This system is built using Teams, Dataverse, and Power Apps, ensuring that it is both user-friendly and highly efficient.

Pirates 365 is made up of several modules, each designed to meet the specific needs of the pirate management process. Let’s take a closer look at each of these modules:

1. Pirates 365 Recruit: Recruitment of Pirates

Pirates 365 Recruit is the first module of the system and is responsible for managing the recruitment of new pirates. This module streamlines the recruitment process, making it faster and more efficient. With Pirates 365 Recruit, you can easily manage applications, resumes, and candidate information, ensuring that you can quickly and efficiently find the best pirate candidates for your fleet.

Here we want to use a webapp using vue.js, and running it on an ipad. Here we can take pictures of the potential recruits and upload them to our recruitment system

2. Pirates 365 Learn: Pirate Training – Pirate Simulator

The second module of Pirates 365 is Pirates 365 Learn, which is responsible for training new pirates. This module includes a pirate simulator, designed to help new recruits get up to speed on the skills and knowledge needed to become successful pirates. With Pirates 365 Learn, you can ensure that your pirates are well-trained and ready to embark on their pirate adventures.

We aim to create a Pirate simulator using our shiny Logitech C920 Steering wheel and the state of the art Game Engine Power Apps (Canvas Apps).

Very early prototype of the Pirate Siumlator

3. Pirates 365 Manage: Pirate Fleet Management

Pirates 365 Manage is the third module of the system, and it’s responsible for managing the day-to-day operations of your pirate fleet. This module includes tools for tracking pirate performance, managing assignments, and monitoring fleet resources. With Pirates 365 Manage, you can easily keep your fleet organized and running smoothly, ensuring that your pirates are always ready to set sail on their next adventure.

4. Pirates 365 Refine: Pirate Offboarding

Finally, Pirates 365 Refine is the last module of the system, responsible for managing the send-off of pirates who have completed their service in the fleet. This module includes tools for tracking pirate performance, managing the offboarding process, and ensuring that all necessary information is captured and stored. With Pirates 365 Refine, you can ensure that your pirate send-off process is efficient and smooth, allowing you to say farewell to your pirates with the respect they deserve.

Example of successful offboarding of a pirate

The Architecture of Pirates 365

In this chapter, we’ll take a closer look at the architecture of Pirates 365 and how its components work together to create a comprehensive pirate management system. Whether you’re a tech-savvy pirate or simply looking to understand how the system operates, this chapter will provide you with all the details you need to know.

The architecture of Pirates 365 is designed to be highly efficient and scalable, ensuring that the system can accommodate the needs of pirate fleets of all sizes. At the heart of the architecture is Teams, Dataverse, and Power Apps, which work together to create a seamless and user-friendly experience for pirate fleet managers.

The architecture of Pirates 365 is comprised of several components, each of which is designed to perform a specific function. These components include:

  1. Teams: Teams is the foundation of the Pirates 365 architecture, providing the communication and collaboration platform for pirate fleet managers. With Teams, you can easily share information, communicate with your team, and manage projects in real-time.
  2. Dataverse: Dataverse is the underlying database that stores all of the information and data related to the pirate management process. Dataverse is highly scalable and secure, ensuring that your data is protected and always available when you need it.
  3. Power Apps: Power Apps is the front-end interface for the Pirates 365 system, providing a user-friendly way for pirate fleet managers to access and manage the system. With Power Apps, you can easily create custom apps that are tailored to your specific needs, ensuring that you have all the tools you need to manage your pirate fleet effectively.

Each of these components works together to create a seamless and efficient pirate management experience. Whether you’re recruiting new pirates, training your crew, or managing your fleet, Pirates 365 provides you with the tools you need to get the job done.

Fist revision of Dataverse tables to hold information about Pirate Ships, Pirates, Learning progress etc

Conclusion

In conclusion, the architecture of Pirates 365 is designed to be both efficient and scalable, ensuring that it can accommodate the needs of pirate fleets of all sizes. With Teams, Dataverse, and Power Apps at its core, Pirates 365 is the ultimate solution for pirate fleet management.

Pirates 365 is the ultimate solution for pirate management. With its comprehensive set of modules, you can streamline the entire pirate management process, from recruitment to send-off. So why wait? Join the pirate revolution today and take control of your pirate fleet with Pirates 365!

Bombshells saves the day, saves the fjord!

Virkeligheten er ikke helt slik vi ønsker at den skal være. Oslofjorden blir hver dag utsatt for ulike former for forurensning. I konteksten til ACDC illustrerer vi problematikken med at Ninja Turtles er naturens store beskyttere og skal finne måter å både å reagere på hendelser, og også å kartlegge tilstanden til fjorden ved å samle inn data over tid for at disse skal brukes i analyse. I fantasiverden oppstår det muterte skapninger som våre høye beskyttere skal verne oss for. I virkeligheten trenger vi systemer som varsler og kartlegger.

Oslofjorden

Oslofjorden er en fjord som går fra Skagerrak i omtrent rett nordlig retning inn til Oslo. Ytre Oslofjord går fra Færder fyr i sør til Hurumlandet, der fjorden deler seg i Drammensfjorden og Indre Oslofjord.

Ytre del av fjorden er 10–20 kilometer bred, og sør for Fulehuk fyr utenfor Nøtterøy er den nærmest et havstykke. I Indre Oslofjord, innenfor det rundt én kilometer brede sundet ved Drøbak, er fjorden bare tre-fem kilometer bred.

Visjon

Visjonen er både av miljøpolitisk art, men dekker også et forretningsbehov. For hvert tiltak i fjorden må aktører av ulike slag stille med sin ekspertise. Målene her kan både politisk og forretningsmessig sammenfattes slik.

  • Overvåke ved hjelp av sensorer Oslofjorden og kunne oppdage, lære og varsle om hendelser når de skjer samt predikere hva hendelser medfører.
  • Simulere og predikere hvordan tiltak påvirker Oslofjorden.

Gevinst

Gevinsten er primært av miljøpolitisk art, men har sekundære gevinster for både bedrifter som tilbyr utstyr og tjenester som må brukes for å nå målet.

  • En ren Oslofjord påvirker 1.6 millioner mennesker positivt
  • En ren Oslofjord sikrer artsmangfold for fremtidige generasjoner

Finansiering

Finansiering av tiltak for å drive miljøvern av det offentlige styres over statsbudsjettet. Samtidig finansierer staten innovasjons-tiltak som dette gjennom ulike former for tjenester gjennom Innovasjon Norge. I tillegg vil innovasjon og utvikling i det private markedet ha behov for private investorer.

Hackaton POC

Løsningen som Bombshells har skissert i løpet av ACDC har involvert bruk av sensorteknologi og innsamling av data fra disse. Dataene behandles og formes gjennom skytjenester og sendes videre til lagring før den brukes til varsling og analyse.

I modellen ovenfor kan man se sensoren som sender data til skyen og hvordan den går videre fra lagring til analyse og varsling.

Systemarkitektur og dataflyt

Diagrammet nedenfor generaliserer hvordan data fra ulike sensorer kontinuerlig sender data opp i skyen hvor den omformes til strukturerte data som kan lagres. I tillegg lagres de i en event hub som strømmer dataene rått videre til sanntid overvåkning.

De strukturerte dataene lagres i denne POC´en i Dataverse. I dette leddet brukes triggere til å plukke opp endringer i datatabellene og å plukke opp innholdet fra disse. Basert på innholdet brukes hele eller deler av endringen til å sende ut meldinger om hendelsen både til PowerApp, Teams og via SMS med støtte for eldre teknologi. Det lagrede innholdet oppdateres jevnlig inn i analysegrunnlaget for en rapport i PowerBI.

Sensor-teknologi

Lyd-sensor er en av typene sensorer som sender data opp i skyen. Spesifikt for lyd-sensoren sendes lydnivå som en del av datasettet. Sammen med dette sendes lys, temperatur, luftkvalitet, vannkvalitet, UV-stråling, tid og lokasjon til Azure. Recent data suggests a mega-mutant-monster has appeared!!! beskriver i mer detalj hvordan dette fungerer.

Registrerte hendelser

Hendelsene registereres fortløpende og formes om til strukturerte data i JSON-format som videresendes til en Dataverse-tabell.

{"eventType":"enviromental","latitude":"59.977874","longitude":"10.636827","soundlevel":"63","pirdirection":"e","soilhumidity":"37","temperature":"26","timestamp":"143449","sonardistance":"286","uvlevels":"73","dustlevels":"82","waterlevel":"1"}

Manuell rapportering

Det er også tatt høyde for manuell registrering og ikke bare automasjon, for å samle inn data. Ved å benytte en app kan brukere også rapportere hendelser manuelt inn i data til samme datalag som mottar data fra sensorene, og med de dataene som telefonen eller tableten kan tilby. Lokasjon er en naturlig ting å hente fra enheten som kjører appen, slik som beskrevet her – Natively saving the environment! (and thusly the world)

Integrasjon og utvikling

Dataene som sendes inn både manuelt og automatisk går gjennom et integrasjonslag som inkluderer event hub, et api gjennom Azure functions og Dataverse API. Utvikling en av dette kjøres gjennom pipelines i Devops (Shell is power!), og sørger for best practice deployment hvor infrastruktur og kode konfigureres, bygges og valideres før endringer rulles ut.

Dataverse

Hver hendelse registreres som en rad i tabellen. En PAF plukker opp hendelsen og trigger en varsling til PowerApps, Teams og SMS som beskrevet i tidligere blogpost – Flowbombing Dataverse

Datasett and PowerBI-rapport

For å bygge meningsfulle rapporter filterer vi ut data som ikke er relevante og endrer datatyper slik at de fremstilles riktig.

Kolonnene i datasettet bygger opp tabellen og brukes som filtreringsverdier inn mot de ulike diagrammene. Spesielt relevant i denne rapporten er fargekartet som viser temperaturene og lokasjon for hvor enkelthendelsene har skjedd. I Dashes and numbers demonstreres det nærmere hvordan dataene kan brukes for å fremheve viktig informasjon, også i ulike flater som krever responsive løsninger.

Bruk av AI

Som del av risikovurdering er arbeidet med å kartlegge hvilke elementer som er utsatt for risiko. Bombshells har trent opp en AI til å gjenkjenne bilder av tre ulike arter skillpadder, som beskrevet i denne posten – Bombshells face an eksistensial risk. Disse dataene er tenkt brukt til å bygge opp en base som kartlegger tilstedeværelsen av en art innenfor et geografisk område. Når man kombinerer dette med data om sårbarhet for typer forurensing vil man kunne beregne risikoen for en art ved en hendelse og velge tiltak i henhold med alvorlighetsgraden.

Varsling og reaksjon

Når en hendelse er registrert og kvalifiserer som en hendelse som må følges opp, skal systemet automatisk sende et varsel slik at tiltak kan iverksettes. Power User Love to the people! beskriver hvordan Power Automate henter ut informasjon om hendelsen som er registrert og basert på innholdet sender ut varsel gjennom PowerApps, Teams og SMS.

Viktigheten av å få riktig informasjon frem til riktig mottaker, og ikke minst at den presenteres på en brukervennlig og tilpasset måte er svært viktig. Satt i en kontekst hvor man må rykke ut for å håndtere et miljøproblem spiller tid en viktig rolle for å forhindre at ikke problemet blir større enn nødvendig. Viktigheten av at man fremhever nøkkelinformasjon riktig vil ha en direkte innvirkning på evnen til å begrense skaden.

Oppsummering

Et system som detekterer og sender ut varsel ved en hendelse er ikke noe revolusjonerende i seg selv. At en sensor trigger på en hendelse og sender en melding er ikke mer komplisert enn da vår venn Donatello monterte en snor fra godstolen foran TV og ut til kjøkkenet og monterte en bjelle i den andre enden slik at han kunne signalisere at han ville ha pizza uten å forlate rommet.

Det som derimot skiller systemet fra analogien er mengden data som samles inn, hvordan den rutes til riktig mottakere og hvordan ulik informasjon vises tilpasset mottaker og teknologien den formidles gjennom. Excellent user experience og Killer App løses ikke med glossy pixel perfect grensesnitt, men derimot gjennom hva du kan gjøre med informasjonen som vises i grensesnittet.

Oppgaven som brukeren av appen skal løse er å identifisere et rapportert problem, og handle i forhold til den informasjonen som formidles. Når et alvorlig utslipp i vann rapporteres er det relevant å se vannkvalitet, temperatur, fysisk lokasjon osv for å raskt gjøre en vurdering av risiko og alvorlighetsgrad. Når vi varsler om en hendelse og brukeren kan se PowerBI-visningen for mobil fremfor et helt dashbord som vil være naturlig på en operasjonssentral, hever vi kvaliteten og brukeropplevelsen. Most Extreme Business Value ligger først og fremst i dataene som samles inn, men selve gevinsten av dataene blir først tilgjengelig når visning i riktig kontekst er på plass.

Rock Solid Geeknes er i denne POC´en summen av alle komponentene som hver for seg har sin rolle, men som ikke gir gevinst før de kombineres i denne formen. Vi har koblet sammen ulike sensorer som samlet gir oss strukturerte data på et bredt område. Disse dataene spiller viktige roller hver for seg, men svært ofte spiller de en enda større rolle sett i sammenheng. Ved å kommunisere med skytjenester kan vi dekke et stort geografisk område og gi et situasjonskart som monitorerer og kartlegger data kostnadseffektivt og raskt.

Konklusjonen så langt er at det er mange faktorer som kan utgjøre trusler for miljøet og artene i Oslofjorden. Kunnskapen vi tilegner oss gjennom kontinuerlig overvåkning av hendelser og kartlegging av artsmangfoldet i gir oss verdifull informasjon som er svært viktig både for å reagere og å forutsi konsekvenser en fremtidig hendelse vil medføre.

Vi vet at en alvorlig hendelse med vannforurensing i Oslofjorden vil ha store konsekvenser for både miljø og arter. Paradoksalt nok vet vi også at et slikt utslipp ikke vil ha noen som helst konsekvenser for noen av skilpadde-artene. Det er nemlig ikke observert noen skilpadder i Oslofjorden. Og med det så claimer vi “Dooh”-badgen 😉

Skill Bombshells 2022