# Imaginarium > A blog on software Ideas built on the Azure Cloud and beyond. Example use cases of Azure Services, project ideas and good practices of using the Azure cloud Public Ghost content for AI and LLM tooling. Use `/llms-full.txt` for consolidated page and post context. Append `.md` to any post or page URL to get the content in Markdown (for example, `/example-post.md`). ## Pages - [About me](https://www.imaginarium.dev/about.md) - Hi there!! I'm Batsirai Tambo. I'm a software developer, systems integrator and cloud architect focussed on .NET on Azure. I set up Imaginarium to document my learning and also to help to pass that information to others with ideas that I come up with. The focus with Imaginarium is to demonstrate wh… - [Azure Cloud Architecture Designs](https://www.imaginarium.dev/azure-cloud-architecture.md) - This is a nexus point for all the Azure Cloud architectures, designs and integrations I discuss here on the Imaginarium blog and other endeavors, all linked below. Designs come from a developer perspective. This page evolves with the blog, along with the discoveries, mistakes, learning, unlocks, in… - [Buy Me a coffee!!](https://www.imaginarium.dev/coffee.md) - With all the resources used to explore Azure on a regular basis, the fees add up. Show your local cloud developer support here. It is greatly appreciated, thank you!! - [Data and Privacy](https://www.imaginarium.dev/privacy.md) - Here is some useful information that may need to be known. Cookies This site uses cookies from Google Analytics. Your Data Generic visit information for better future posts. Feel free to share posts from my site on social media at your discretion The above is subject to change at any time in the fu… ## Posts - [Azure Container Apps vs AKS: the choice of control](https://www.imaginarium.dev/azure-container-apps-vs-aks-the-choice-of-control.md) - When choosing a container-based application platform on Azure, there are several key thought points that are appropriate to ponder on. The key decisions come down to the level of control the developer, team or enterprise wishes to retain for their container based applications and based on their sof… - [Retrieving Azure KeyVault Secrets and Certificates correctly](https://www.imaginarium.dev/retrieving-azure-keyvault-secrets-and-certificates-correctly.md) - In the Azure Portal under a Key Vault instance, Secret objects and Certificate objects are separately visually and therefore appear to be 2 separate value stores in the Azure Portal and this may seem insignificant at first glance but this isn't quite the case. To me, it appeared an obvious idea tha… - [Azure Architecture Close Up: Modern .NET Web App for Azure](https://www.imaginarium.dev/azure-architecture-close-up-modern-net-web-app-for-azure.md) - Modern .NET apps running in Azure can reliably operate using a design pattern known as the Modern Web Pattern for the cloud. The Modern Web Pattern relies on the usage of a message queue, a container platform, a decoupled data store, and a container registry. The focus is to truly exercise the noti… - [Azure Architecture Close Up: API Management External and Internal Traffic](https://www.imaginarium.dev/azure-architecture-close-up-api-management.md) - The APIM Service in Azure gives us an opportunity to organise our APIs in a centralised manner (not to be confused with API Center, separate topic). While it known as an organising service for APIs, it can be easy to misconfigure or mismanage when attempting to use the service for both internal fac… - [Azure Well Architected Framework at a glance](https://www.imaginarium.dev/azure-well-architected-framework-glance.md) - The Azure Well Architected Framework focuses on a pattern of thinking about workloads in the cloud in order to make them run as best as possible, taking full advantage of what cloud scaling and capacity brings whilst achieving business tasks as efficiently as possible. The important thing to rememb… - [Azure Kubernetes Service Entra ID with Kubernetes RBAC](https://www.imaginarium.dev/azure-kubernetes-service-entra-id-with-kubernetes-rbac.md) - Should the default Authentication and Authorisation method for an AKS Cluster be modified from "Local Accounts with Kubernetes RBAC" to "Entra ID authentication with Kubernetes RBAC" , it is often the case that the individual user is unable to access any resources within the AKS Cluster at that poi… - [Long AI Context Window, Unleashed](https://www.imaginarium.dev/long-ai-context.md) - The Context Window of a Large Language AI model truly lets us take advantage of its inherent strength of being able to recognise, reference and reuse text that represents the meaning of information within a large volume of text with ever-improving efficacy as the models get better over time. I test… - [Build Windows Container Images from Visual Studio for ACR](https://www.imaginarium.dev/build-windows-container-images-for-azure-container-registry.md) - While Azure Container Registry supports the dual use of both Linux and Windows, it is not always very straightforward how to get Visual Studio (2022) to build up a Windows container image because it defaults to Linux. But there are easy multiple ways to get this done, and once set, we never have to… - [Voice AI for Blog sites with Azure OpenAI Service](https://www.imaginarium.dev/voice-ai-for-blog.md) - To enable voice and read aloud speech capabilities for niche content websites, there is an abundance of Speech and Text services available from Azure OpenAI Service via Azure AI Foundry. Here on Imaginarium, I've added AI speech to try to enrich the reading and learning experience for people who re… - [Agentic AI with Azure MCP Server](https://www.imaginarium.dev/agentic-ai-with-azure-mcp-server.md) - The Agentic Web is here. The idea of the Azure MCP Server is that you can tap into Azure services (given what Microsoft decides to expose or provide at their discretion) through agents from your LLM infused applications. This is NOT just a set of APIs being listed and returned to your client. The p… - [Connecting Azure Functions with Azure App Configuration](https://www.imaginarium.dev/azure-app-configuration.md) - Assuming that you require your application that lives on an Azure compute fabric (App Service, Azure Functions, Azure Container Apps, Azure Kubernetes Service) to connect to a managed and centralised store for app settings/configs, then the Azure App Configuration service helps in this direction. T… - [Cloud and On-Prem with Azure Relay Hybrid Connection](https://www.imaginarium.dev/azure-relay-hybrid-connection.md) - The purpose of Azure Relay Hybrid Connections is to be able to reach into our on premises application without the need to be poking holes into our firewall and leave our network infrastructure relatively untouched. It eliminates any kind of networking related complexities from our solution, reducin… - [Azure AI Search RAG and Vector Search for SQL](https://www.imaginarium.dev/azure-ai-search-rag-and-vector-search.md) - When dealing with searching for semantic meaning through data in your apps, Azure AI Search can come to the rescue. The idea is to be able to look at a source of data and then vectorise it with the help of an Embedding model (typically from AI model providers such as OpenAI). By vectorising, the da… - [Azure batch delete empty Resource Groups](https://www.imaginarium.dev/azure-clean-up-empty-resource-groups.md) - Let's say you have been working with Azure for some time and you have accumulated a number of resources across multiple resource groups. You wanted to keep things tidy back then, but now it has become messy and your Azure Resource Groups need to be cleaned up. You can do that from the Azure Portal… - [Azure Container Apps with DeepSeek-R1](https://www.imaginarium.dev/azure-container-apps-deepseek-r1.md) - The DeepSeek-R1 Large Language Model can easily run on Azure Container Apps for as low compute as 3 CPU cores and 6GB of RAM for a fast experience with the 1.5billion parameter model. You can opt for more CPU and RAM if you choose. The DeepSeek-R1 model comes in multiple parameter sizes (1.5b, 7b,… - [Azure Kubernetes Service KeyVault access with Dapr](https://www.imaginarium.dev/azure-kubernetes-service-keyvault-dapr.md) - An alternative method for gaining access to KeyVault secrets from applications in Azure Kubernetes Service is through the use of Dapr. Dapr will run as a sidecar in your Kubernetes cluster. Although it is lightweight and provides much simpler access, it should be noted that Dapr effectively creates… - [Azure Kubernetes Service KeyVault access via Workload Identity](https://www.imaginarium.dev/azure-kubernetes-service-keyvault-access-via-workload-identity.md) - When accessing Azure Key Vault from Azure Kubernetes Service, one of the ways available to do so is through the use of a Workload Identity. A Workload Identity in Azure works by allowing the pods in your Azure Kubernetes cluster assume an existing Managed Identity so that they can gain access to ot… - [Azure AI Speech Service Fast Transcription](https://www.imaginarium.dev/azure-ai-speech-service-fast-transcription.md) - Azure recently updated its Speech to Text service to bring what is known as Fast Transcription. It aims to improve on Speech to Text transcription turn-around as the name describes. It is currently in preview at the time of this writing through a REST endpoint and still comes with the same features… - [Azure Container Apps Dapr State Store](https://www.imaginarium.dev/azure-container-apps-with-dapr-2.md) - When attempting to connect an Azure Container App to different services in Azure with multiple containers with code, this can prove to be challenging. Dapr is suited for cases where we want to communicate between different services without needing to specifically write client-side SDK code that is… - [Using Azure Storage Actions](https://www.imaginarium.dev/using-azure-storage-actions.md) - Azure Storage Actions help us perform large scale actions on blobs across one or more storage accounts from a singular serverless resource. Unlike needing to create an Azure Function, or the manual execution of a Powershell script or a maybe web job, the task is carried out in a way that evolves wi… - [Azure Container Apps with Ollama for general AI inference](https://www.imaginarium.dev/azure-container-apps-with-ollama.md) - An Azure Container Apps instance can run multiple containers under a construct of a main application container that is supported by other 'sidecar' containers. It gives us the perfect environment to create, for example, a web app that has a complimentary Small Language model inference engine in the… - [Azure Kubernetes Service add Windows Node pool](https://www.imaginarium.dev/aks-add-windows-node-pool.md) - When running an Azure Kubernetes Cluster, there might come a point where you wish to add a Windows Node pool for supporting Windows containers that you may have. For adding a Windows node pool to an Azure Kubernetes Cluster, it is a requirement that the target AKS cluster is using Azure CNI for its… - [Semantic Kernel for .NET: a quick look](https://www.imaginarium.dev/semantic-kernel.md) - With Semantic Kernel, we are able to orchestrate or rig up an object that handles calls to popular API services for interacting with Large language models and Small Language Models from OpenAI, Microsoft, Mistral* and Google* (*marked for future releases according to Microsoft at Build 2024). Seman… - [Azure App Service mount to Azure Files Share](https://www.imaginarium.dev/appservice-mount-fileshare.md) - Within Azure App Service, we have the advantage of mounting onto an SMB Azure Files Share for our benefit, providing instant access to large storage that behaves like a local storage folder on our running App Service. This means that users using the Azure Files Share from machines that have it conn… - [Azure AI Speech voice control with OpenAI GPT4 and SSML](https://www.imaginarium.dev/azure-ai-speech-voice-ssml-gpt4.md) - SSML or Speech Synthesis Markup Language allows us to control the spoken behaviour of a synthesised voice in our application. Within Azure AI Speech, we get the ability to use SSML with the available synthetic and neural voices available from Microsoft and also the neural voices from OpenAI too(wit… - [Azure AI Speech to Text vs OpenAI Whisper](https://www.imaginarium.dev/azure-ai-speech-vs-openai-whisper.md) - Azure AI Speech and OpenAI's Whisper model are services that are capable of speech to text transcription not only in the cloud but at the edge too. We do not always entirely need to rely on the use of API keys that authenticate into a cloud-supported inference service all the time. Let's quickly ha… - [Deploy IIS site with Azure Devops](https://www.imaginarium.dev/deploy-iis-devops.md) - Azure Devops has useful capabilities that allow you to deploy your web application for IIS to your on premises app server, VM or an Azure VM if you choose. It brings more modern deployment processes for legacy IIS applications you may have into your workflow and remove those manual steps that are m… - [gRPC API Server for .NET on Raspberry Pi](https://www.imaginarium.dev/grpc-for-net.md) - Setting up a gRPC API Server on an edge device such as a Raspberry Pi can be useful to offload compute responsibilities elsewhere, maintaining a small footprint computationally and power-wise. When scaled up, the gRPC framework compared to using REST, gives us advantages of native HTTP/2 support wi… - [Deploy Azure Self Hosted Gateway to Docker](https://www.imaginarium.dev/azure-self-hosted-gateway.md) - The Azure API Management service allows you to host an API Gateway on your own infrastructure on premises without API requests going into Azure first. You might want to do so for compliance reasons, minimising request traffic into Azure itself and related costs, or simply streamlining how you opera… - [Message Pump in Azure Service Bus](https://www.imaginarium.dev/azure-service-bus-pump.md) - Despite the assumptions that an Azure Service Bus Queue must be polled and then dequeued manually for messages in client code, there is a tiny and neat way to automatically dequeue messages as soon as they arrive. It is an alternative to setting up a Service Bus Triggered Azure Function which would… - [Azure WebJobs for background processing in App Service](https://www.imaginarium.dev/azure-webjobs-processing.md) - The point of Azure WebJobs is to carry out small background tasks within the context of your Azure App Service. The main advantage is that an Azure WebJob has access to or awareness of your App Service environment (files, logs, processes etc) to do pretty much anything you would like it to. It is o… - [Azure Custom EventGrid Event Handler with WebHooks](https://www.imaginarium.dev/azure-custom-eventhandler.md) - Setting up a custom Azure EventGrid Event Handler can be done through the use of a WebHook Endpoint when defining the Subscription, enabling our local apps to react in response to EventGrid Events, whether the Events originated from resources in Azure or from completely external services by ourselv… - [Authentication in Azure Static Web Apps with Oauth](https://www.imaginarium.dev/authentication-static-web-apps.md) - Oauth authentication in Azure Static Web App is fairly easy to add in as it is built within the Azure Static Web App service itself. It is possible to add in different oauth providers such as Microsoft, Github and X (Twitter); the three I am aware of at the time of writing. It is important to remem… - [Azure Cloud Resume Challenge Update: Adding Azure API Management](https://www.imaginarium.dev/resume-challenge-add-apim.md) - The Azure Cloud Resume Challenge in most cases seeks to update a visitor counter when a visitor lands on the resume holder's page. In my first iteration of the Azure Cloud Resume Challenge I wrote about here, I initially created an architecture that looks like this: As you can see, my implementatio… - [Scheduled Azure Container App Job Example](https://www.imaginarium.dev/azure-container-app-job.md) - Azure Container App Jobs are designed to execute for a short period of time as part of your containerised workload in an Azure Container App Environment. They exist as separate entities from your Azure Container App but live in the same Azure Container App Environment to share resources. They can b… - [Azure Static Web App: Cloud Resume Challenge](https://www.imaginarium.dev/azure-static-web-app.md) - Azure Static Web Apps is great for hosting fast and high scale static web pages that can be used for landing pages, informational pages, posters, and general content or websites that do not require complex dynamic activity. The following is my slightly overdue implementation of the popular 'Cloud R… - [Azure Functions Write to Azure SQL Database (Output Binding)](https://www.imaginarium.dev/azure-sql-write.md) - Azure SQL Databases support writing from Azure Functions through Output Bindings. We define the table name and a variable pointing to a Function App Setting that has the value of the connection string as part of the SQL output binding. In this post, let's explore how we can write to an Azure SQL Da… - [Azure App Service change Publish Model from Code to Container](https://www.imaginarium.dev/azure-appservice-publish-model.md) - With Azure App Service (Azure Web App), it is possible to modify the publishing model of the application from Code to Container after it has been published using the Azure CLI. The reason you may want to change to a Container based publishing model could be to take a step to a more seamless continu… - [Containerise a .NET app for Raspberry Pi](https://www.imaginarium.dev/containerise-rpi-net.md) - The following is a note on how I encapsulate an existing .NET 7 app for a Raspberry Pi 3b that uses a camera from a Docker container, with the use of Docker Desktop and Docker Hub. I will assume that: * you already have a Docker Hub Account, * you have Docker Desktop installed * you have a Private… - [Azure Devops Self Hosted Agent Configuration](https://www.imaginarium.dev/self-hosted-agent.md) - Azure Devops can allow you to set a machine of your choice to be the build agent of your project rather than using the default Microsoft-provided build agents. For example, in cases where you may have an extremely complex build process that you know can build on your machine with no issue, you use… - [Azure Functions SQL Input Binding with Managed Identity Access](https://www.imaginarium.dev/azure-functions-sql-bindings.md) - Azure Functions now have the ability to easily bind to a SQL Database for both Azure SQL Database and on premise. Previously, you would have needed to write custom code with a connection client inside the Function code itself to read and write to the database. Not anymore. We will explore what this… - [Set Windows Service User credentials in Azure Devops](https://www.imaginarium.dev/user-credentials-in-azure-devops.md) - In this short post, I discuss how credentials can be set for a Windows Service's User within the Azure Devops interface, making sure the application can launch automatically with a desired User without manual intervention after the install or having to add the credentials in the code or code reposi… - [Deploy Windows Service using Azure Devops](https://www.imaginarium.dev/deploying-windows-service-in-azure-devops.md) - Windows Services built on .NET Core and classic .NET Framework can be deployed and automatically run using Azure Devops to our target machine(s), removing the need for manually copying files around. You will have the following ready: * A working Azure Devops account * Your working Windows Service c… - [Azure Functions Monitor Pattern Example](https://www.imaginarium.dev/azure-functions-monitor-pattern.md) - Azure Functions are incredible at being able to complete computations on our behalf. The Monitor Pattern specifically allows an Azure Function to consistently check for the status of a long running process that has a completion time that is irregular or unfixed. With the Monitor pattern, we set a l… - [Azure Web PubSub Example](https://www.imaginarium.dev/azure-webpubsub.md) - Azure Web PubSub is a way to open up a websocket between the user client and a resource server to continuously pass data through it. The client (or even multiple clients) does not need to repeatedly send HTTP requests to the server to receive data or repeatedly poll the server for status updates. T… - [Listening to Azure audio blobs on Google Nest Hub](https://www.imaginarium.dev/azure-audio-blobs-nest.md) - This is a follow-on post to Azure Media Services Clips. After creating the Function for serving the podcast clips (or any other audio as blobs) from Azure, it gives rise to the opportunity of requesting the stored podcast audio Urls in Azure, from a device like a Google Nest Hub that will play the… - [Azure Media Services Clips](https://www.imaginarium.dev/azure-media-services-clips.md) - Following the Azure Video Indexer indexing Insights I was able to produce from a podcast on a weekly schedule previously, I decided to go further into how this Insights JSON data can be utilised in a helpful way following my previous Summary (discussed here), such as using Azure Media Services to c… - [Using Azure Video Analyser for Media in Azure Functions](https://www.imaginarium.dev/azure-video-analyser.md) - First some clarification, 'Azure Video Analyser for Media' should be considered the new name for what used to be called Video Indexer. It is slightly different from 'Azure Video Analyser' which is currently in Preview. With Azure Video Analyser for Media, it's possible to analyse and extract useful… - [Project Harmony: Azure Functions Fan Out Fan In](https://www.imaginarium.dev/durable-functions-fanout.md) - The Azure Functions Fan Out Fan In pattern allows Azure Functions to scale and spread a workload across different worker functions that work together in parallel to process a batch of work. The results from each worker function is consolidated into a final result in a separate Function. In this blo… - [Pushing capability: Azure Blob Storage tested](https://www.imaginarium.dev/azure-storage-tested.md) - Back in the time I was undertaking my Condenser project, I was heavily relying on writing to and reading from Azure Blob Storage, uploading videos as blobs, triggering cloud encode processes and sending outputs to an output container, then using a Windows Application to download them, all resources… - [Using Azure Stream Analytics](https://www.imaginarium.dev/azure-stream-analytics.md) - An example of using Azure Stream Analytics to query Events in Event Hub - [Azure Media Services Tuning: Project Condenser Update](https://www.imaginarium.dev/azure-media-services-tuning.md) - Off the back of Project Condenser earlier, I ended up having a few loose end questions that I thought I should put together here and test and resolve. In the original conception of the cloud encode, the H.264 1080p cloud transform I used was designed to have an output video with a fixed video bitra… - [Azure Project Condenser](https://www.imaginarium.dev/azure-project-condenser.md) - For a long time, I have been a strong believer in always viewing video in the highest possible quality. In the year 2021, to me this means 4k at 60 frames per second and a high bitrate for personal/family videos or 4k at 24 or 30 frames as a reasonable compromise. After years of watching films in '… - [Using Azure API Management for Azure Functions](https://www.imaginarium.dev/azure-apim-protections.md) - When dealing with resources in Azure that can be called when the right credentials are known by a calling client, it can be easy to simply grant direct access to the cloud resource itself. In the case of Azure Functions the common scenario is to give the client/caller/user a Function URL with a Fun… - [Azure Function Key Refresher](https://www.imaginarium.dev/azure-function-key-refresher.md) - When it comes to using Azure Functions to run serverless computations in the cloud, it can be quite common to have the calling client have direct knowledge of the function key. The Function Key is a unique code that is used as part of fully authorising the calling client to execute the Function cod… - [Azure Project Overhead Part 2](https://www.imaginarium.dev/azure-project-overhead-2.md) - Following what I did in Overhead Part 1, in Part 2 I wanted to add an improvement whereby the Raspberry Pi would be able to assess what it was seeing and simply report what the result was in text within the result SMS. My hope was to try and eliminate or reduce the need for having the image sent to… - [Azure Project Overhead Part 1](https://www.imaginarium.dev/azure-project-overhead-1.md) - The idea behind the Azure Overhead project is to allow me to essentially see a live view (with images) looking out a window of whether there are available car parking spaces in the shared car parking area at home whenever I am away from home. It's beneficial because it saves me the hassle of having… ## Optional - [RSS Feed](https://www.imaginarium.dev/rss/) - [Sitemap](https://www.imaginarium.dev/sitemap.xml) - [Full content of pages and posts](https://www.imaginarium.dev/llms-full.txt)