Stairway to Heaven for Orange Bandits

Leveraging of Microsoft API’s allows developers to quickly get started witch achieving meaningful results in the development process.

Here is a quick summary of API’s we used, that are delivered by Microsoft:

  • Dataverse REST API:

Used as backbone of our systems integrations, main data ingest and source point. It is used in PowerBI to expose data to report:

  • Microsoft Bot API

It is used in sending notifications to Teams App (more on that in A Pirate Call to Arms! | Arctic Cloud Developer Challenge Submissions (acdc.blog)!).

  • Machine Learning Services API

ML REST API is used in PowerBI report to show the information about potential pirate looting activity outcome, based on information about the potential looting target:

Microsoft Identity platform (Azure Active Directory Authentication)

call from .NET code
and as it’s seen in Fiddler

This vehicleApi is on top of microsoft sql server database which is providing vehicle data based on MachineLearnings recognition of a make of a car. In order for the api to work, it connects to Azure Keyvault – and in order to access it, a call to microsoft Azure Ad Authentication API is made.

Crawler

It was really cool to see that it’s now possible to search Dataverse data via Microsoft Search. We had never tried this before, and it worked like a charm💪

THe initial indexing took many hours, but after this it keeps updating fairly quickly + it seems to respect the security model in Dynamics (VERY IMPORTANT) 👏

This is really nice to see as a function because it opens up Dataverse for the masses, and sharing is caring when it comes to info.. Right? 🙂

Visualizing the Mutiny Score

With this blog post we claim

The captain is a very visual person and wanted an easy way to get a feeling if the crew is happy or not.

We created a Power BI report that show mutiny score over time for each ship.

You can filter the report in the top right corner and select the ship you want to see data for.

The boat is a picture of the ship.

The blue line at the bottom, looking like water, is actually a line diagram showing the mutiny score over time. If the score is high you will see a rise in sea level, and if it’s low the sea level will be low.

If the score is consistently low the water will be nice and calm, but if the score varies because of unsteady mood in the crew the water will have big waves. If the score is consistently high the boat will look like it’s going under.

Featture Bombing

Behold the beautiful model driven app with all the bells and whistles!! 😂

  1. Embedded canas app to the model driven app
  2. PCF component for showing skills
  3. 2 Timelines – just because it’s possible
  4. Image of the contact on the phone
  5. Map of contact address (from the personal details tab)

Controlling a Canvas app using a USB Gamepad

In Pirates 365 we want to control the awesome Canvas App Game with either a USB Gamepad or a Steering wheel.

Seemed like a great idea

Controlling a Power App using a wheel or gamepad not that easy. Power Apps doesen’t have event listeners from keypress-events. There are several forum- and blogposts that are mentioning this, but it seems like nobody had any really good solutions for it.

We had several ideas to make this work

  • Map gamepad klicks to keyboard events
  • Map gamepad klick to mouse clics
  • Create a Browser addin that listen to the keyUp event and by javascript find the Power Apps left/right buttons in the DOM and click them.

The solution we went for was mapping the gamepad to keyboard presses.We found an application AntiMicroX where it was possible to map gamepad presses to key-presses on the keyboad.

We mapped left click on the gamepad to “Space”, and up to “tab” – making it possible to toggle between the different power apps buttons

Demo of the solution

Her we can see that we are moving the ship with the gamepad – emulating clicks on power app buttons

Badges 🤩🥳

  • We thing this may be awarderd the “Nasty Hacker” because it is…..hacky
  • We think this may be awarded “Embedding numbnut since we are attaching “things that can flip bits”

❤️ Sharing is Caring in this Cut Throat Battle 🤟

 Aye, me hearties!

‘Tis true what they say, sharin’ be carin’ like a true pirate!

We hoisted our white flag and approached fellow pirates too se what needed doing. @in1 welcomed us aboard, even tucking away their plank for the occasion. They needed help fighting off backgrounds in their graphics, a honorable task to help with!

With the help of this fancy tool from Adobe (https://express.adobe.com/nb-NO/tools/remove-background), Tommy from @in2 successfully fought every and all white background in @in1 graphics. Resulting in clear and calm user experience, just like the friendly waters we prefer.

Here be the link to our friendemies repo with our contribution for your viewing pleasure: https://github.com/havardhovde-in/pirates-of-the-carribIN/pull/6

Aye, ye be welcome fellow pirates 🏴‍☠️🤜🤛🦜

Meme showing captain Jack Sparrow running from hoards of enemies captioned “incoming pull requests for sharing is caring”

A Pirate Call to Arms!

Captain John Phillips, captain of the Revenge, set a code for his men in 1724. Under this Pirate Code we find the following law:

VII. That Man shall not keep his Arms clean, fit for an Engagement, or neglect his Business, shall be cut off from his Share, and suffer such other Punishment as the Captain and the Company shall think fit.

Consequently, it is critical that each and every pirate is consistently up to date on fleet maneuvers, target acquisitions, and mission engagements in order to deliver efficient value to both themselves and their fleet.

When the Pirate Control Operations Center completes a target analysis process and designates a new valid target, every single Pirate Captain is now notified about the new raid in real-time.

To create this business value, we coded a Custom App for MS Teams, in the form of a Notification Bot. This Custom App utilizes Azure Function Apps and Adaptive Cards in order to retrieve data parameters:

The general codebase for the Custom MS Teams App Notification Bot
The setup of cloud resources in Azure for a fully functioning Function App Teams Bot

The Notification bot was then uploaded and published through Microsoft Teams Admin Center, along with related Setup Policies and Permission Policies. Every single Pirate Captain will now see this Notification bot automatically sideloaded into their Teams UI upon sign-in.

The Pirate Control Operations Center exists mainly in Power Apps. The Pirate Control Center Operators have a full overview over possible targets, and makes decisions on whether a target should be attacked or not, by clicking the cannon icon shown below:

At this point, the Azure Function responsible for providing data to the Notification Bot is triggered, and pings every Pirate Captain through their personal Teams accounts with related data, and a button which links to a location pin on Google Maps:

🚀 Automagical Fairs and Shouts to Fellow Pirats using Service Slave Workers 📣

When plundering and sailing keeping track of pesky DM’s is no job for the captain or crew. This’ why we summoned the services of Power Automate and Power Apps to do our bidding: Enabling our ship to run smoothly and commands being forwarded at the correct time to the correct people.

It all starts with the Consumer of Data “Power Automate” who collects data from all our different intelligence points. Working in the shadows, this ghost can be attached to any workflow. Currently, since it thrives on human flesh for its operations, we started by attached to our crew log. Whenever Power Automate smells the fear of a new deck hand, laddie or lassie onboard it goes to work!

On a new pirate record Power Automate does two things:

  1. Creates an Adaptive Card in teams and posted it to the ships group chat
  2. Sends a welcome e-mail to the fresh pirate, explaining how they need to obey or walk the plank (all pretty standard pirate stuff).
Current Dataverse Tables the flow can write to and read from.
Power automate flows that creates and updates records, when records for pirates are updated we trigger a Teams Integration.

Making the Captain’s work Screen Agnostic

We further improve the Captain’s life with Power Apps connected to the Power Flows. The Power App sits on the users phone, implemented via Teams or as a standalone app, and enables the Captain to administrate the crew roster, so any stowaway can be added to the crew and receive the required e-mail package with plank rules and NDA’s. This mobile approach lets the captain be in full control even when venturing away from his cabin and the desktop computer therein.

Screen snippet showing Power Automate triggering Teams Adaptive Card on new shipmate record.

The convenience of having the Power Apps in teams means the captain can manipulate his Ship, The Raids and roster from any surface, be it mobile, desktop og even tablet!

Screen snippet showing the Power App integrated into a Teams. Notice the responsive nature of teams adapting to any viewport.

Using Power Apps means we can also simulate raids adding new test data on the fly, without it needing to come from our Power Automate flow.

User generated Raids in the raid table, created directly within Power App.

In Summary, for Sleepy Pirates:

  • The Power App enables our users to directly manipulate our data storage.
  • The Power Automate allow other sources and application to remotely access our data.

Cameleon

In Teams, on a device with a large screen, all the information (profile picture, name availability and skills) is displayed in a row. 

But what will happen if you switch to your pirated iPhone? Lo and behold, by the power of flex-direction: column and CSS media queries – your content is now structured in a column, for your viewing pleasure!Â