TWIL: September 13, 2021
This week I’m publishing with a one day delay because there was so much stuff to go through. It was a pretty intense learning week, and I tried to summarize it in this week’s post. I hope you find it useful.
Episode 1755: Building Text-Grab with Joseph Finney
Learning by doing! Carl and Richard talk to Joseph Finney about his experiences building Text-Grab, a clever utility for extracting text from graphics using OCR built into Windows. Joe talks about how the ‘search-with-screenshot’ built into Windows 10 depends on Bing, but there is an OCR library inside Windows – why go to the cloud? The conversation dives into the challenges of handling multiple screens, screen resolutions, DPIs, language packs, and more… what seems like a simple tool is never that simple. And, as it turns out, building the app is the easy part: Now, how do you get it into the Microsoft Store? That leads to both Richard and Carl installing the app, showing that purchasing and installing an app is much harder than it needs to be!
Episode 1756: Developing for Microsoft 365 with Dan Wahlin
Does it make sense to use .NET with Microsoft 365 (was Office 365)? Carl and Richard talk to Dan Wahlin, now in his new role as a Cloud Developer Advocate, about the power that exists within the Microsoft 365 APIs and what you can do with them with .NET. Dan talks about how Microsoft 365 knows a lot about what’s going on in your organization, and how you as a developer can take advantage of the existing file handling, messaging, and interconnects to simplify your projects and make them more visible to users. The conversation explores moving existing brownfield applications into the Microsoft 365 realm, and what code you should be writing, or perhaps turning over to Azure Logic Apps or Power Automate!
Practical API Design at Netflix, Part 1: Using Protobuf FieldMask
At Netflix, we heavily use gRPC for the purpose of backend to backend communication. When we process a request it is often beneficial to know which fields the caller is interested in and which ones they ignore. Some response fields can be expensive to compute, some fields can require remote calls to other services. Remote calls are never free; they impose extra latency, increase probability of an error, and consume network bandwidth. How can we understand which fields the caller doesn’t need to be supplied in the response, so we can avoid making unnecessary computations and remove calls?
Containers & Kubernetes
This week I participated in a Containers OpenHack prepared by Microsoft. It was a 3-day very hands-on event build around a set of challenges the participants would have to solve as 4-element teams. Needless to say, most of my learning this week was around these topics.
First thing I went through was reviewing some of the basics of containers with Docker, namely:
- Getting Started with Docker – Basic concepts like containers and container images.
- Docker Networking – How networking works inside Docker.
- Dockerfile reference – What is a Dockerfile and how do you create one.
- Docker CLI reference – How do you use the Docker command line interface (CLI).
Azure Container Registry
Next, I moved on to Azure Container Registry, a managed private Docker registry service in the cloud
- Azure CLI reference – How to use Azure command line interface (CLI).
- Azure Container Registry – What is Azure Container Registry and how to use it.
- Build with ACR – Tutorial on how to build and deploy container images in the cloud using ACR.
After Docker and ACR, let’s learn about Kubernetes, the container orchestration platform:
- Kubernetes core concepts – Basic concepts of Kubernetes such as nodes, node pools, pods, deployments or sets.
- Kubernetes services – The concept of services in Kubernetes.
- Kubernetes DNS for services and pods – How name resolution works in Kubernetes.
- Kubernetes Port Forwarding – How port forwarding works in Kubernetes.
- Kubernetes External Load Balancers – How to create an external load balancer for a service in Kubernetes.
- Kubernetes Secrets – What are secrets and how to use them in Kubernetes.
- Kubectl overview – How to use kubectl, the controller CLI for Kubernetes.
- Kubects & Kubens – Open-source powertools to be used with kubectl.
- Kubernetes Namespaces – What are namespaces and when to use them.
- Kubernetes RBAC Controls – Using Role-Based Access Control in Kubernetes.
- Ingress – What is Ingress and how to use it to route traffic.
Azure Kubernetes Service (AKS)
Moving on to Azure Kubernetes Service, a managed Kubernetes service in Azure:
- Deploy an AKS cluster using Azure CLI – How to deploy a AKS cluster using Azure CLI.
- Azure CLI: az aks create – Azure AKS CLI reference.
- Deploy an AKS cluster using the Azure portal – How to deploy an AKS cluster using the portal.
- Authenticate with ACR from AKS – How to authenticate with ACR from AKS.
- Configuring Azure CNI with AKS – How to configure networking in AKS with Azure CNI.
- Access and identity options – Access and identity options for AKS.
- AKS-managed Azure Active Directory integration – Integrating AKS with Azure AD.
- Control Kubeconfig Access – How to limit access to the Kubernetes configuration file.
- Use Azure AD and Kubernetes RBAC for clusters – How to use Azure AD identities in Kubernetes RBAC.
- AKS Uptime SLA – What is the Uptime SLA tier in AKS?
- Secret Store CSI driver – Integrating Azure Key Vault with Kubernetes Secrets.
- Ingress Controllers – Using ingress controllers in AKS.
- Create an NGINX ingress controller in AKS – How to create an ingress controller in AKS.
- HTTP Application Routing Ingress Controller – Using HTTP application routing in AKS.
Complex architectures such as microservices are very dependent on monitoring. Here are a few pointers on how to implement monitoring in AKS:
- Overview of Monitoring for microservices – Basic concepts for monitoring in AKS.
- Azure Container Insights reference – What is Container Insights and how to enable it.
- Azure Container Insights Agent Config – How to configure agent data collection for Container Insights.
- Search Logs to Analyze Data – How to query logs from Container Insights.
- Kusto Query Language Reference – Learn about KQL.
- Container Insights Alerts – How to create log alerts from Container Insights.
- Prometheus – What is Prometheus?
- Built-in Prometheus Metrics – Configuring Prometheus metrics for Nginx ingress controller.
- Prometheus Exporters – Existing exporters and integrations in Prometheus.
- Using Function Operators to Analyze Data from Prometheus
- Visualization with Prometheus – Using Grafana to visualize data from Prometheus.
Upgrade your Windows 10 Linux adventures to WSL2, here’s how
The latest version of the Windows Subsystem for Linux is a significant upgrade, but also one that takes a few steps to set up. Microsoft dropped plenty of jaws when it launched the Windows Subsystem for Linux, a way to run actual Linux inside Windows 10 without the need to set up a virtual machine. The project has seen a ton of support, and WSL2 is the latest and greatest. It takes things a little further and adds yet more awesomeness to the Linux experience on Windows 10. If you haven’t yet checked it out, here’s how to get started.
Have an awesome week and keep learning!