Welcome to Reading Notes #653—another packed edition of insights, tools, and updates from the tech world! This week's roundup dives into legendary engineering wisdom, AI controversies, and the latest innovations in Docker, Azure, and VS Code. Whether you're exploring MCP, refining your scripting skills, or gearing up for the newest Azure Developer CLI release, there's something here for every developer.
Let’s get into it!
Cloud
Azure Developer CLI (azd) - June 2025 (Kristen Womack) - Love that tool, great updates, so many new features and improvements in this version, very looking forward to try all of them, turning them all
AI
Publishing AI models to Docker Hub (Kevin Wittek) - Running model locally is a lot of people are looking forward to it, so this is good news can't wait to try it
As developers, we're constantly looking for tools that can help us stay in the flow and be more productive. Today, I want to share a powerful tool that's been gaining traction in the developer community: GitKraken CLI. This command-line interface brings together several key features that modern developers love - it's AI-powered, terminal-based, and incredibly efficient for managing Git workflows.
GitKraken CLI (accessible via the gk command) stands out because it simplifies complex Git workflows while adding intelligent automation. Unlike traditional Git commands, it provides a more intuitive workflow management system that can handle multiple repositories simultaneously.
Getting Started
Installation is straightforward. On Windows, you can install it using:
winget install gitkraken.cli
Once installed, you'll have access to the gk command, which becomes your gateway to streamlined Git operations.
The Workflow in Action
Let's walk through a typical development session using GitKraken CLI:
1. Starting a Work Session
Instead of manually creating branches and switching contexts, you can start a focused work session:
gk w start "Add Behind my Cloud feed" -i "Add Behind my Cloud feed #1"
This single command:
Creates a new branch based on your issue/feature name
Switches to that branch automatically
Links the work session to a specific issue
Sets up your development environment for focused work
2. Managing Multiple Work Sessions
You can easily see all your active work sessions:
gk w list
This is particularly powerful when working across multiple repositories or juggling several features simultaneously.
3. Committing with Intelligence
After making your changes, adding files works as expected:
gk add .
But here's where the AI magic happens. Instead of writing commit messages manually:
gk w commit --ai
The AI analyzes your changes and generates meaningful, descriptive commit messages automatically. No more "quick fix" or "update stuff" commits!
4. Pushing and Creating Pull Requests
Publishing your work is equally streamlined:
gk w push
And when you're ready to create a pull request:
gk w pr create --ai
Again, AI assistance helps generate appropriate PR titles and descriptions based on your work.
5. Wrapping Up
Once your work is complete and merged, clean up is simple:
gk w end
This command:
Switches you back to the main branch
Deletes the feature branch, locally and on GitHub
Closes the work session
Leaves your repository clean and ready for the next task
Why This Matters
The beauty of GitKraken CLI lies in its ability to keep you in the zone. You don't need to:
Switch between multiple tools
Remember complex Git commands
Write commit messages from scratch
Manually manage branch lifecycle
Everything flows naturally from one command to the next, maintaining your focus on what matters most: writing code.
Multi-Repository Power
One of the standout features is GitKraken CLI's ability to manage multiple repositories simultaneously. This is invaluable for:
Microservices architectures
Full-stack applications with separate frontend/backend repos
Organizations with multiple related projects
Try It Yourself
GitKraken CLI is part of a broader suite of developer tools that GitKraken offers. The CLI itself is free to use, which makes it easy to experiment with and integrate into your workflow without any upfront commitment. If you find value in the CLI and want to explore their other tools, GitKraken has various products that might complement your development setup.
The learning curve is genuinely minimal since it builds on Git concepts you already know while adding helpful automation. I've found that even small workflow improvements can compound over time, especially when you're working on multiple projects or dealing with frequent context switching.
If you're curious about what else GitKraken offers beyond the CLI, you can explore their full product lineup here. For those who decide the Pro features would benefit their workflow, as an ambassador of GitKraken I can share my code to provide a 50% discount for your GitKraken Pro subscription.
The combination of AI assistance and intuitive commands addresses real pain points that many developers face daily. Whether GitKraken CLI becomes a core part of your toolkit will depend on your specific workflow, but it's worth trying given that it's free and takes just a few minutes to set up.
The best tools are the ones that get out of your way and let you focus on building. GitKraken CLI aims to do exactly that.
It's time for another edition of Reading Notes! This week brings exciting developments in the open source world, with major announcements from Microsoft making WSL and VS Code's AI features open source. We've also got updates on Azure Container Apps, .NET Aspire, and some great insights on developer productivity tools.
Let's dive into these interesting reads that caught my attention this week.
Cloud
Happy 5th Birthday Bicep! (Sam Cogan) - What?! Five years already! That's incredible, I remember all the discussion about how we make our business better and honestly, bicep is a big success. Congrats to the team
Have I Been Pwned 2.0 is Now Live! (Troy Hunt) - New look, new merch, and confetti, all without API breaking changes! Learn all about this major update in this post.
What's new in .NET Aspire 9.3 (David Pine) - Wow! How so many great new features can be added in a single version?! Aspire is a must for all .NET developers.
Accelerate Your .NET Upgrades with GitHub Copilot (McKenna Barlow) - That's the tool I've been waiting for ages! Adding a Copilot to the extension is the smartest move they could make. I'm going to update an app right away. I'll share more later
Open Source
Edit is now open source (Christopher Nguyen) - That's a great news! I installed it half through the post and it great! Fast, simple, and tiny!! Love it!
Agent mode for every developer (Katie Savage) - Great new for everyone as the agent mode become available in so many different editor. This post also contains videos to shows some scenarios.
Podcasts
Reimagining the Windows Terminal with Warp's Zach Lloyd (Scott Hanselman) - A very interesting talk with the CEO of Warp that answers so many questions I had about this very different terminal. Really interesting episode, and terminal too BTW)
The experience is enough (Salma Alam-Naylor) - Whether we like it or not, we are people creature. We all need to stop hiding behind our screens and get out there!
Automating deployments is something I always enjoy. However, it's true that it often takes more time than a simple "right-click deploy." Plus, you may need to know different technologies and scripting languages.
But what if there was a tool that could help you write everything you need—Infrastructure as Code (IaC) files, scripts to copy files, and scripts to populate a database? In this post, we'll explore how the Azure Developer CLI (azd) can make deployments much easier.
What do we want to do?
Our goal: Deploy the 2D6 Dungeon App to Azure Container Apps.
This .NET Aspire solution includes:
A frontend
A data API
A database
The Problem
In a previous post, we showed how azd up can easily deploy web apps to Azure.
If we try the same command for this solution, the deployment will be successful—but incomplete:
The .NET Blazor frontend is deployed perfectly.
However, the app fails when trying to access data.
Looking at the logs, we see the database wasn't created or populated, and the API container fails to start.
Let's look more closely at these issues.
The Database
When running the solution locally, Aspire creates a MySQL container and executes SQL scripts to create and populate the tables. This is specified in the AppHost project:
var mysql = builder.AddMySql("sqlsvr2d6")
.WithLifetime(ContainerLifetime.Persistent);
var db2d6 = mysql.AddDatabase("db2d6");
mysql.WithInitBindMount(source: "../../database/scripts", isReadOnly: false);
When MySQL starts, it looks for SQL files in a specific folder and executes them. Locally, this works because the bind mount is mapped to a local folder with the files.
However, when deployed to Azure:
The mounts are created in Azure Storage Files
The files are missing!
The Data API
This project uses Data API Builder (dab). Based on a single config file, a full data API is built and hosted in a container.
Locally, Aspire creates a DAB container and reads the JSON config file to create the API. This is specified in the AppHost project:
var dab = builder.AddDataAPIBuilder("dab", ["../../database/dab-config.json"])
.WithReference(db2d6)
.WaitFor(db2d6);
But once again, when deployed to Azure, the file is missing. The DAB container starts but fails to find the config file.
The Solution
The solution is simple: the SQL scripts and DAB config file need to be uploaded into Azure Storage Files during deployment.
You can do this by adding a post-provision hook in the azure.yaml file to execute a script that uploads the files. See an example of a post-provision hook in this post.
Alternatively, you can leverage azd alpha features: azd.operations and infraSynth.
azd.operations extends the provisioning providers and will upload the files for us.
infraSynth generates the IaC files for the entire solution.
💡Note: These features are in alpha and subject to change.
Each azd alpha feature can be turned on individually. To see all features:
azd config list-alpha
To activate the features we need:
azd config set alpha.azd.operations on
azd config set alpha.infraSynth on
Let's Try It
Once the azd.operation feature is activated, any azd up will now upload the files into Azure. If you check the database, you'll see that the db2d6 database was created and populated. Yay!
However, the DAB API will still fail to start. Why? Because, currently, DAB looks for a file, not a folder, when it starts. This can be fixed by modifying the IaC files.
One Last Step: Synthesize the IaC Files
First, let's synthesize the IaC files. These Bicep files describe the required infrastructure for our solution.
With the infraSynth feature activated, run:
azd infra synth
You'll now see a new infra folder under the AppHost project, with YAML files matching the container names. Each file contains the details for creating a container.
Open the dab.tmpl.yaml file to see the DAB API configuration. Look for the volumeMounts section. To help DAB find its config file, add subPath: dab-config.json to make the binding more specific:
You can also specify the scaling minimum and maximum number of replicas if you wish.
Now that the IaC files are created, azd will use them. If you run azd up again, the execution time will be much faster—azd deployment is incremental and only does "what changed."
The Final Result
The solution is now fully deployed:
The database is there with the data
The API works as expected
You can use your application!
Bonus: Deploying with CI/CD
Want to deploy with CI/CD? First, generate the GitHub Action (or Azure DevOps) workflow with:
azd pipeline config
Then, add a step to activate the alpha feature before the provisioning step in the azure-dev.yml file generated by the previous command.
- name: Extends provisioning providers with azd operations
run: azd config set alpha.azd.operations on
With these changes, and assuming the infra files are included in the repo, the deployment will work on the first try.
Conclusion
It's exciting to see how tools like azd are shaping the future of development and deployment. Not only do they make the developer's life easier today by automating complex tasks, but they also ensure you're ready for production with all the necessary Infrastructure as Code (IaC) files in place. The journey from code to cloud has never been smoother!
If you have any questions or feedback, I'm always happy to help—just reach out on your favorite social media platform.
Welcome to this week's reading notes! Dive into the latest on Microsoft's new AI chat template, explore Docker's MCP CLI, learn about integrating AI into .NET applications, and discover how to automate .NET MAUI library publishing with GitHub Actions.
Whether you're interested in AI advancements, programming techniques, or DevOps practices, there's something valuable waiting for you below.
MsDevMtl Meetup - Uno
Suggestion of the week
Exploring the new AI chat template (Andrew Lock) - This new .NET template looks pretty useful and has a lot of components already baked in. This post explains those and shows how to customize it for our usage.
Sharing my Reading Notes is a habit I started a long time ago, where I share a list of all the articles, blog posts, and books that catch my interest during the week.
Sharing my Reading Notes is a habit I started a long time ago, where I share a list of all the articles, blog posts, and books that catch my interest during the week.
If you have interesting content, share it!
Cloud
Azure Developer CLI (azd) - March 2025 - The azd CLI just got better, with some new features, improved error messages, and of course bug fixes. Don't forget to update your version.
.NET Aspire and Dev Container (Laurent Kempé) - DevContainers are really a game changer. You don't have to be a container guru to use it, and it will make a dev environment constant everywhere on any device.
In this edition of my Reading Notes, I've curated some fascinating content that spans across programming, creativity, and enlightening podcasts. Whether you're eager to enhance your coding skills, explore unique ideas, or stay updated with the latest in the tech world, there's something here for everyone.
Dive in and enjoy these insightful reads and discussions!
Abstract vs Interface: Deep dive (Serhii Korol) - You probably know the difference between those two just like me, but do you know how the code is interpreted that's very interesting.
Sharing my Reading Notes is a habit I started a long time ago, where I share a list of all the articles, blog posts, and books that catch my interest during the week.
If you have interesting content, share it!
This week Reading Notes, covers various topics in programming and databases. Discover the latest ASP.NET Core release, the importance of clear error messages, and coding with voice commands. Learn about new features in Azure EasyAuth and Microsoft Entra Authentication for Azure PostgreSQL. We also bid farewell to Azure Data Studio as it moves to VS Code extensions.
The Importance of Good Error Messages (jdanton1) - I cannot agree more with the idea! How many of us have lost hours trying to figure out what was the error because the description wasn't clear!
Azure Data Studio Retirement | Microsoft Community Hub (carlosrobles) - I used in love Azure Data Studio and I'm a little bit sad to see it go away but I think it's for the best since all the functionality will be now available in vs code extension
Sharing my Reading Notes is a habit I started a long time ago, where I share a list of all the articles, blog posts, and books that catch my interest during the week.
This edition of ReadingNotes covers new AI tools, WSL updates, .NET 9 features, and debugging tips with GitHub Copilot. Plus, insightful podcasts on .NET Aspire, productivity tools, and frontend engineering.
Sharing my Reading Notes is a habit I started a long time ago, where I share a list of all the articles, blog posts, and books that catch my interest during the week.
For this week reading notes, I have some exciting blog posts and podcast episodes. Covering topics including .NET scaffolding, Visual Studio updates, the Builder Pattern in C#, and OpenAPI in .NET 9. Plus, tips on validating identity with GitHub, improving Azure Identity, and podcast highlights on GitHub Universe and presentation skills.
The Builder Pattern in C# [2024] - This is a very nice post that explains clearly with code different scenarios where that pattern would make sense.
OpenAPI document generation in .NET 9 (Mike Kistler) - This is a great new feature in NET9 when building APIs. The post shares how to update existing APIs to get it. I'm looking forward to migrating my stuff.
Sharing my Reading Notes is a habit I started a long time ago, where I share a list of all the articles, blog posts, and books that catch my interest during the week.
Kick off your week with this curated list of must-read tech articles. From .NET modernisation patterns and new C# 13 LINQ methods to open-source contributions and thought-provoking reads, there's plenty to explore.
The Legacy Coder's Guide to .NET Conf 2024 (DeeDee Walsh) - .Net Conf is coming up and how doesn't like some suggestions about wish sessions? This will be a great event for new and experienced developers.
Microsoft Tech Community: Upgrade complete (Allie Thompson) - It was time. I didn't dig too much and looking forward to experience the new features as a writer but also as a reader.
Sharing my Reading Notes is a habit I started a long time ago, where I share a list of all the articles, blog posts, and books that catch my interest during the week.
It's reading notes time! It is a habit I started a long time ago, where I share a list of all the articles, blog posts, and books that catch my interest during the week.
You also read something you liked? Share it!
Suggestion of the week
Easily dock and float tool windows (Mads Kristensen) - Oh my! One of the best post I read since a long time. It cannot me more accurate, funny, nor useful.
How to Build Frontend Apps 10x Faster (Anmol Baranwal) - An interesting tools that you install that act as middle man and helps while developing and testing.
Incorporate GitHub Copilot into your daily flow (Rhea,Sinem,Mika) - Copilot go more accessible!This post summarizes how Copilot will be easier to use with suggested code. That's a good example of product feedback well used, everybody wins!
It's reading notes time! It is a habit I started a long time ago, where I share a list of all the articles, blog posts, and books that catch my interest during the week.
Easier to fix async exceptions (Mark Downie) - Debugging Asynchronous code as been always more complicated, looking forward to seeing (and using) that new capability in .NET 9.
How to make your web page faster before it even loads (Salma Alam-Naylor) - To make sure our users have he best experience possible it important to fine-tune some little details. This post goes deep and explains them very well.
Welcome to this week’s edition of Reading Notes! In this roundup, we explore a variety of topics across cloud, programming, databases, and AI. From understanding Docker’s USER instruction to styling Blazor components with CSS, I’ve got you covered. Let’s dive in!
Suggestion of the week
Understanding the Docker USER Instruction (Jay Schmidt) - A great post to that explains really clearly the basic usage of user when building our container. After reading this post you should feel confident to follow this best practices.
It's reading notes time! It is a habit I started a long time ago, where I share a list of all the articles, blog posts, and books that catch my interest during the week.
Having interesting content? Share it!
Suggestion of the week
Announcing: Azure Developers (Mehul Harry) - Looking forward to this event. I have the pleasure to present a session with Jerry Nixon about Data API Builder. Join us!
Cloud
Demystifying Azure CLI pagnination (Jeremy Li) - That's great! It's so sad when all the information is "throw" on us without any control and it's on us to find our "needle" we are looking for in those screens full of line. This will definitely helps.
It's reading notes time! It is a habit I started a long time ago, close to 600 weeks ago in fact, where I share a list of all the articles, blog posts, and books that catch my interest during the week.
If you think you may have interesting content, share it!
Is Your Container Image Really Distroless? (Laurent Goderre) - Nice post that explains a new way to improve security and more while building our container by going distroless.
Azure PowerShell Tips and Tricks (Paul Harrison) - PowerShell is a very interesting and useful script language.All those tips are pure wisdom!
DevOps
Beautiful .NET Test Reports Using GitHub Actions (Sean Killeen) - It's true that the unit test result in Azure DevOps looks amazing. Pretty nice adaptation in GitHub Action, could/ should it be native?
It is time to share new reading notes. It is a habit I started a long time ago where I share a list of all the articles, blog posts, and books that catch my interest during the week.
If you think you may have interesting content, share it!
Blazor WebAssembly Virtual File System Access (Michael Washington) - A nice tutorial the show us how to keep file (aka data) in the browser of the visitor. All the code is available.
Last Friday, I encountered an issue while trying to run my Azure Function locally using VS Code. Despite having installed the Azure Function extension and the Azure Functions Core Tools, I was unable to execute the func start command without encountering an error saying that no functions could be found.
In this post, I will share the various troubleshooting steps I took, what didn’t work, and how I ultimately resolved the issue. Spoiler alert: everything is now working correctly.
The Problem
My Azure Function is a .NET 8 Isolated HTTP trigger. When I attempted to execute the func start command, it failed to find any functions. A quick look at the documentation, I discovered that version 4 of the Core Tools was required for type Isolated process. However, I had already installed version 4 via the update popup in VS Code.
Something was wrong. I tried func --version and it returned 3.x.xx, weird... And this is how I knew there was a problem.
Failed attempts
Following the Azure Functions Core Tools documentation I found that there were multiple methods to install the Core Tools. Because that laptop was on Windows 11, I started by downloading the func-cli-x64.msi installer and run it. It didn't work, the version 3 was still there.
I tried to install the Core Tools v4 using NPM: npm install -g azure-functions-core-tools@4. It didn't work.
I tried to uninstall the version 3 with npm uninstall -g azure-functions-core-tools. I tried using the command palette in VSCode
Still nothing was changing anything, the version 3 was still there.
The Solution
What works, was using Chocolatey command choco uninstall azure-functions-core-tools to uninstall the version 3. Some how, it must have been install at the different location or some "config" got lost at some point (it's a developer laptop after all), and the other methods (npm, msi, vscode) couldn't see that version 3 was installed.
After that, I installed the version 4 using NPM npm install -g azure-functions-core-tools@4. And it worked! The func --version returned 4.0.5571 and the func start command found my function.
I wrote this quick post hoping that it can help someone else, as I cannot be the only one with this problem.
It is time to share new reading notes. It is a habit I started a long time ago where I share a list of all the articles, blog posts, and books that catch my interest during the week.
If you think you may have interesting content, share it!
Blazor and .NET 8: How I Built a Fast and Flexible Website (Jeffrey T. Fritz) - optimisation is often a step that people forgets, but it's one that is extremely rewarding.This series seams very interesting, we will s| more of those in the notes...
The FAST and the Fluent: A Blazor story - .NET Blog (Vincent Baaij) - Nice post that teach us a bit of history. I'm fan of Fluent UI and Blazor...and more recently of the Fluent UI Blazor library. I think it's a must for all Blazor developers.
It is time to share new reading notes. It is a habit I started a long time ago where I share a list of all the articles, blog posts, and books that catch my interest during the week.
If you think you may have interesting content, share it!
How to deal with API rate limits (Salma Alam-Naylor) - Perfect post to learn why rate limit exists (its easier to manage them if we understand them), and a few suggestions on how to deal with them.