The blog of Blog of Christian Bär


Querying Cosmos Containers Containing Items of Various Types

Querying Cosmos Containers Containing Items of Various Types Problem When querying Cosmos DB from C# code it’s convenient to use Linq. When you only want to get documents of one type, this is straightforward using GetItemLinqQueryable<T>(). When you want to get documents of multiple types, each having different properties but you want to restrict the returned documents by a condition that spans fields that are not common to all of these types, you’re in trouble. [...]

What Technologies to Learn as an Aspiring Software Engineer

Recently I’ve been asked by an aspiring software engineer what technologies best to learn. This post is my answer to that question. Bear in mind though that, although I’m a somewhat experienced software engineer, I’m by no means somebody that regularly hires new devs nor do I have a lot of experience at trying to get hired. Read Job Ads Find some online job boards that are relevant to the region you desire to work in and check what’s asked for. [...]

Renewing an Expired Apple Distribution Certificate (iOS)

I’ve just received the dreaded E-Mail saying my Distribution Certificate would no longer be valid in 30 days. That certificate is used to sign the Camjam photo sharing app - or at least I think that’s what it’s used for. Camjam is built using an Azure DevOps build pipeline so I’ll ultimately have to replace some Secure Files there. These are the steps that I’ve finally come up with: 1) Generate the Certificate Here, you’ll end up with a *. [...]

Minimal cookieless web analytics

Annoyed by the cookie consent dialog all over the internet, I decided not to use cookies on my blog. This of course prevents me from using most of the common web analytics platforms, so I’m rolling my own. Goals View the daily numbers of blog visitors, page views and sessions. No cookies but still identify unique visitors. Cheap or free. The solution To address the goal “cheap or free” I’m using Azure Functions with its consumption based billing model for tracking page hits. [...]

Connect Netlify to Azure Repos

This article describes how to use Netlify’s continuous deployment feature with an Azure Repos repository. After following the instructions below, each push to your Azure Repos repository will cause Netlify to grab your source, build it and publish the result as a web site. Prerequisites nodejs installed npm installed A git repository that has Azure Repos as only remote. The remote must have name = “origin” and it must be specified as an SSH URL. [...]

The two kinds of reusability

As a developer, you’re told that your code artifacts (e.g. libraries, components, classes, functions) should be reusable. It’s not enough if your stuff just works and is fast. If it’s not reusable you’re a bad developer. So what is this holy grail called reusability all about? What does some code artifact need to fulfill to be reusable? Turns out there are two fundamental kinds of reusability which are quite different: [...]

Creating an Azure Pipelines extension

Most of what an Azure Pipelines build or release should do can be accomplished by using the builtin tasks or tasks from the marketplace. Especially generic tasks like the Command Line task combined with the ability to install software on the build agents by using package managers (e.g. Chocolatey on Windows) provide a lot of creative freedom. By implementing and publishing your own extension containing your custom tasks, you can consistently reuse functionality and make it easily accessible to other people inside and outside of your organization. [...]

Testing this blog's content

This blog is built using hugo, a static site generator and a continuous integration/deployment process (CI/CD) is set up for automatic publication. But wait! There’s hardly any CI and even less CD without automated tests, right? I certainly don’t want to end up in developer hell for not setting up some! Run tests before publication Before updates are published to this blog, some tests must be executed. There are different aspects that might be tested, the two main ones would be implementation (e. [...]

CI for this Blog with Azure DevOps

After I had set up my hugo driven blog on my local machine I wanted a solution that would help me publish any changes in an easy manner and also a backup solution. Therefore I decided to use some continuous integration/deployment approach. Initial situation In order to set up the CI for the blog, the files comprising it are in a folder on my computer and the folder is a local git repository. [...]

Setting up this Blog

Installing Hugo Hugo is the static site generator I’m using for this blog. Here’s how I installed it on my Windows computer: Went to Decided to just download the binary (as opposed to using a package manager), so went to to download the ZIP file. Found there was a “regular” Hugo and a hugo_extended. Decided to use “regular” (find out why below). Downloaded the ZIP and copied the extracted folder to c:\program files Added the full path of that folder to the PATH environment variable Initializing the blog After having installed Hugo I can now use it to initialize my blog. [...]