All posts
29 articles on Azure, DevOps, and cloud infrastructure.
2026
-
Cost Effective IPsec Site-to-Site VPN with Azure and UDM on Ubuntu 26.04 (strongSwan 6 and swanctl)
Connect a UniFi UDM to Azure with a site-to-site IPsec VPN for a few euros per month, using strongSwan 6 and swanctl on an Ubuntu 26.04 VM.
2023
-
Auto-scale GitHub Runners (and ADO Agents) with Azure Container Apps Jobs and Workload Profiles
Run self-hosted GitHub runners and Azure DevOps agents on Azure Container Apps Jobs with KEDA auto-scaling and Workload Profiles, deployed with Terraform.
2019
-
Using Azure Managed Identity with .Net Core on Azure DevOps Agents
Run .NET Core code that uses Azure Managed Identity and the AppAuthentication library on Azure DevOps hosted and private agents, with MSI workarounds.
-
Using Git submodules in (private) Azure DevOps repositories
Fix the 'could not read Password' Git submodule clone error in private Azure DevOps repos by using URLs relative to the main repository in .gitmodules.
-
Solve “System.Threading.Tasks.TaskCanceledException : The operation was canceled. ” on Ubuntu 18.04 in .Net Core 2.2
Fix TaskCanceledException 'The operation was canceled' in .NET Core 2.2 HttpClient on Ubuntu 18.04 by installing the self-signed root certificate.
2018
-
Run Elasticsearch image on Azure Container Instances
How to fix the vm.max_map_count is too low error when running the Elasticsearch Docker image on Azure Container Instances by switching to the Alpine image.
-
Create an Event Grid Subscription to an Azure Function V2
Create an Event Grid subscription to an Azure Functions V2 Event Grid trigger, including the changed SystemKey endpoint and a PowerShell automation script.
-
Make your VSTS extensions smarter with Endpoints Datasource bindings
Make VSTS extension tasks smarter with dataSourceBindings: populate pickList dropdowns from Azure REST APIs, chain inputs, and add custom data sources.
2017
-
Create a sharded MongoDB in Azure Cosmos DB
Create a sharded MongoDB collection in Azure Cosmos DB with the Azure CLI, working around a partition key bug with the $v pattern in a working bash script.
-
Get Cognitive Services Keys and Endpoint in an ARM Template
An ARM template that retrieves Azure Cognitive Services API keys and endpoint using listKeys and reference, ready to reuse in a Logic App connection.
-
Mount your Azure Cloud Shell to another Storage Account
Two ways to attach Azure Cloud Shell to a storage account of your choice instead of the auto-generated one, using clouddrive unmount and clouddrive mount.
-
Create output variables with Azure CLI 2.0
Learn how to store Azure CLI 2.0 command output in Bash variables using JMESPath queries and the tsv output format, so you can reuse values in later commands.
-
Solve Docker for Windows error: A firewall is blocking file Sharing between Windows and the containers
Fix the Docker for Windows firewall error that blocks drive sharing with containers by reinstalling File and Printer Sharing on the DockerNAT adapter.
-
Azure Hidden Gems: Resource Policies
Use Azure Resource Policies for subscription governance: deny resource creation without required tags, with PowerShell examples to define and assign policies.
-
A better way (and script) to add a Service Principal in Azure for VSTS
A PowerShell script that creates an Azure AD Service Principal for VSTS deployments scoped to specific resource groups instead of the whole subscription.
-
Demystifying .NET Core SDK versions
How to pin a specific .NET Core SDK version with global.json, plus an overview mapping confusing SDK folder names to the .NET Core versions they install.
2016
-
Solve 401 (Unauthorized) error when restoring packages using VSTS Package Management and .NET Core
Fix the 401 Unauthorized error when restoring VSTS Package Management feeds in a .NET Core build by switching to the NuGet Restore task on version 3.5.0.
-
Setting up VSTS with ARM Templates
Set up VSTS Build and Release for Azure Resource Manager linked templates: validate templates in the build, publish artifacts, and deploy per environment.
-
VSTS Task delete Resource Group if empty
VSTS marketplace task that deletes an Azure Resource Group only if it is empty, handy after testing ARM deployments with Test-AzureRmResourceGroupDeployment.
-
Dutch Azure Meetup
Announcing the Dutch Azure Meetup, a community for hands-on Azure learning, with a first event covering Docker and Azure Container Service on June 2nd.
-
Get subscription id in an Azure Resource Manager Template
Use the subscription() resource function to get the Azure subscription id at deployment time in an ARM template, without hardcoding it or using a parameter.
-
HDInsight error with external metastore (Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient)
Fix the HDInsight error Unable to instantiate SessionHiveMetaStoreClient: dashes in the external Hive metastore database name trigger a known Hadoop bug.
2012
-
Access Synology DSM from the internet with a Reverse Proxy
Securely access Synology DSM over HTTPS from the internet by configuring an Apache reverse proxy virtual host on the NAS, with paths for DSM 4 and DSM 5.
-
Install Windows with UEFI on Dell Latitude
How to install Windows 8 in UEFI mode on a Dell Latitude E6510: prepare a UEFI-bootable USB stick and fix the black screen with the Fast Boot BIOS setting.
-
Windows 8 keyboard shortcuts summary
A quick summary of Windows 8 keyboard shortcuts, from Win+E and Win+D to Win+X admin tools and snapping apps, based on Scott Hanselman's productivity post.
2011
-
Install OpenElec 1.0.2 on Asrock ION 3D 152d and a Logitech Harmony Remote
Step-by-step guide to installing OpenElec 1.0.2 on an Asrock ION 3D 152d, fixing HDMI audio, and configuring a Logitech Harmony remote for XBMC.
-
Run sabnzbd+ behind Apache on Synology
Configure Apache on a Synology NAS as a reverse proxy for SABnzbd with HTTPS and basic authentication, including config file paths for DSM 4 and DSM 5.
-
Blocking access to application pages (_layouts) and Forms Pages
Block authenticated SharePoint 2010 users from application pages like _layouts by enabling the ViewFormPagesLockDown feature and adjusting permission levels.
-
Official DotNetNuke 6.0 Product Launch
Report from the DotNetNuke 6.0 launch at Microsoft Schiphol: the core moves from VB.NET to C#, a new GUI, and a SharePoint Connector in the Enterprise Edition.