This week's collection of interesting articles and resources covers AI development, DevOps practices, and open source tools. From GitHub Copilot customization to local AI deployments and containerization best practices, here are the highlights worth your attention.
Top 5 MCP Server Best Practices (Ivan Pedrazas) - mCP server is a very hot topic, thinking about riding your own, here are five best practices to make sure you will be successful.
Containerize Your Apps with Ask Gordon (Steve Buchanan) - I already have Docker desktop on my Windows pc, I should definitely give Gordon a try more to come
DevOps
Local Deploy with Bicep (Sam Cogan) - A perfect short story, I'll explain why the hell bicep can now deploy locally and how to do it
Open Source
Introducing OpenCLI (Patrik Svensson) - A standard that describes CLI so both humans and agents can understand how it works. Love it!
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!
I used to hardcode my password in my demos and code samples. I know it's not a good practice, but it's just for demo purposes, it cannot be that dramatic, right? I know there are proper ways to manage sensitive information, but this is only temporary! And it must be complicated to remove all the passwords from a deployment... It turns out, IT IS NOT difficult at all, and that will prevent serious threats.
In this post, I will share how to remove all passwords from a docker-compose file using environment variables. It's quick to setup and easy to remember. For production deployment, it's better to use secrets, because environment variables will be visible in logs. That said, for demos and debugging and testing, it's nice to see those values. The code will be available on GitHub. This deployment was used for my talks during Azure Developers .NET Days: Auto-Generate and Host Data API Builder on Azure Static Web Apps and The most minimal API code of all... none
The Before Picture
For this deployment, I used a docker-compose file to deploy an SQL Server in a first container and Data API Builder (DAB) in a second one. When the database container starts, I run a script to create the database tables and populate them.
As we can see, the password is in clear text twice, in the configuration of the database container and in the parameter for sqlcmd when populating the database. Same thing for the DAB configuration file. Here the data-source node where the password is in clear text in the connection string.
The easiest password instance to remove was in the sqlcmd command. When defining the container, an environment variable was used... Why not use it! To refer to an environment variable in a docker-compose file, you use the syntax $$VAR_NAME. I used the name of the environment variable MSSQL_SA_PASSWORD to replace the hardcoded password.
/opt/mssql-tools/bin/sqlcmd -U sa -P $$MSSQL_SA_PASSWORD -d master -i /startrek.sql
Second Pass: .env File
That's great but the value is still hardcoded when we assign the environment variable. Here comes the environment file. They are text files that holds the values in key-value paired style. The file is not committed to the repository, and it's used to store sensitive information. The file is read by the docker-compose and the values are injected. Here is the final docker-compose file:
Note the env_file directive in the services definition. The file .env is the name of the file used. The ${SA_PWD} tells docker compose to look for SA_PWD in the .env file. Here is what the file looks like:
SA_PWD=This!s@very$trongP@ssw0rd
Conclusion
Simple and quick. There are no reasons to still have the password in clear text in the docker compose files anymore. Even for a quick demo! Of course for a production deployment there are stronger ways to manage sensitive information, but for a demo it's perfect and it's secure.
During Microsoft Build Keynote on day 2, Julia Liuson and John Lambert talked about how trade actors are not only looking for the big fishes, but also looking at simple demos and old pieces of code, looking for passwords, keys and sensitive information.
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!
Dapr v1.13 is now available (Dapr project maintainers) - I really like those post that goes over the news and also named all the contributors. This is when you see how many people are involved.
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!
Cloud
Microsoft Cost Management updates—March 2023 (Michael Flanakin) - Because we all need it and or worry about it. Learn the new features that are available for you in the cost management.
Logic Apps Aviators Newsletter - April 2023 (Kent Weare) - One of my friends shared this with me, and I loved it! It's packed with information about new features, and upcoming events...
This Month in Azure Container Apps: March/April 2023 (Anthony Chu) - I caught the live stream by pure chance and they pass through all the news contained in the post. Very happy to see Azure Container App growing so quickly!
How to Do an Inner Join in LINQ? (Code Maze) - Nice post to get started about relations between tables type of joints and of course how to do it with LINQ.
Running .NET Console Apps in Azure Container Instances (Mark Heath) - A neat way to run an application in the cloud. Have a special look at how the secret config is managed to avoid pushing them into the code repository.
Podcast
Let's Chat About AI (Ep 76) (Community Pulse) - Extremely interesting episode about AI. Should we be worried, what would be the impact? So many great questions asked.
Down A Rabbit Hole with Seth Godin (A Bit of Optimism) - Great episode is about many different little things to make life better. You can feel the complicity between Seth and Simon.
Windows WSL and Containers in 2023 (DevOps and Docker Talk) - WSL what it is and why people say it's so useful. All that and more in this episode.
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!
Host WordPress in Microsoft Azure with App Service (PaaS hosting) (Chris Pietschmann ) - When we are interested in WordPress, we are looking for a key in-hand experience. We don't want to manage code and connections and too much technical stuff. Having it hosted in PaaS Azure simplifies even more this.
Dapr 1.10 - More steps in the right direction (Mark Heath) - This is great! I'm happy to see the multi-app functionality as I was totally waiting for it. And the workflow is definitely something that interests me.
Good Monday, time to share my reading notes. Those are a curated list of all the articles, blog posts, podcast episodes, and books that caught my interest during the week and that I found interesting. It's a mix of the actuality and what I consumed.
If you think you may have interesting content, share it!
Cloud
Setup the Auto-shutdown on VM using Bicep template (Massimo Bonanni) - VMs are so useful. One of the best ways to save money is to turn them off when you are not using them. Part 6 about Bicep explains how to do it in your IaC script.
Azure SQL Database Overview (Daniel Calbimonte ) - This post is a great one to get started on Azure SQL Database. It answers many of the initial questions and provides the answers.
[Improving Your Desktop Applications—ToolTips in .NET MAUI](Leomaris Reyes ) (https://www.telerik.com/blogs/improving-desktop-applications-tooltips-dotnet-maui?utm_source=readingnotes) - Tooltips are now here!
Good Monday, Already time to share new reading notes. Here is a list of all the articles, and blog posts that catch my interest during the week.
If you think you may have interesting content, share it!
Suggestion of the week
How Cloudflare Broke My Build and How I Fixed It (Giorgi Dalakishvili) - Wow! That was a hard one. Like searching for a needle in a haystack. Those stories are incredibly useful as they teach how to investigate issues. Thank you so much for sharing it.
Blazor Binding, Events and Parameters (Michael Washington) - A very complete tutorial that explains it all. The complexity of the example is incremental, meaning that if it's your first contact with Blazor the bites will be just the right size all along.
Fluent UI Insights EP2: Styling (Paul Gildea) - Really interesting second episode of Fluent UI Insights. A series of video that explains the design decisions.
Windows Package Manager 1.3 (Demitrius Nelon) - Very happy to see Winget getting more apps and new features.
Podcasts
316: Hosting Websites & Web Apps for Free (Merge Conflict) - Who doesn't like getting a free website? Learn more about the option available for you in this episode. And also, why you shouldn't operate your drone on water.
Épisode 19 - Les Olympiques d'Hitler (Les Pires Moments de l'Histoire) - (In French) I love this podcast you learn stuff and for sure you will at least smile if not laugh.
Daniel Roth: Blazor Futures - Episode 204 (Azure DevOps Podcast) - Perfect episode to learn what is currently in trial, plan to be and what will stay for sure in the next release.
Good Monday, it's time to share new readingnotes. Here is a list of all the articles, and blog posts, that catch my interest during the week.
If you think you may have interesting content, share it!
The suggestion of the week
Deploy Azure Static Web Apps With Bicep | LINQ to Fail (Aaron Powell) - Great tutorial that explains how to build a well-structured deployment pipeline using bicep and GitHub action. I will need this for sure, bookmarked.
ApiController Attribute in ASP.NET Core Web API (Code Maze) - This post contained many best practices and detailed explanations to get a great API and make sure the user experience is the best possible.
New Resources to Get Started with .NET MAUI - .NET Blog (Matt Soucoup) - Are you planning to learn something new this summer? I suggest you .NET MAUI, to build an application that can go everywhere. This post shares tons of references to get you started.
It's Monday, time to share my reading notes. Those are a curated list of all the articles, blog posts, podcast episodes, and books that catch my interest during the week and that I found interesting. It's a mix of the actuality and what I consumed.
If you think you may have interesting content, share it!
Configure Azure Cosmos DB Continuous Backups (Rajendra Gupta) - Backup can be so powerful! You could return in time just before an error to understand what happens... Or so many other scenarios.
How To Run PowerShell Scripts (Brien Posey) - A script can be frightening at first, but this nice post will help you to understand them better. Perfect for less technical people.
Introducing Qodana for Azure Pipelines (Anastasia Khramushina) - Qodana is can analyze your code in CICD on many platforms, and now also in the Azure DevOps.
It's been five hundred weeks, this is more than nine years! Who knew I will keep doing that for so long...
If you are new around here, welcome, The Reading Notes are a curated list of all the articles, blog posts, podcast episodes, and books that catch my interest during the week and that I found interesting. It's a mix of the actuality and what I consumed.
If you think you may have interesting content, share it!
Cloud
Bicep Access policies and Managed Identity (Gregor Suttie) - This is a nice post that connects docs pages and different blog posts and information so we have the big picture.
Cloud-Native Application Security (Samir Behara) - This post is listing so many best practices, patterns, and anti-patterns, it is a must for any "cloud-native people".
Greg on The Genius of Routine (What's Essential) - Habits are very powerful tools in our toolbox for so many things... It's worth learning more about it.
Already 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, podcast episodes, and books that catch my interest during the week.
Suggestion of the week
Include diagrams in your Markdown files with Mermaid (Martin Woodward, Adam Biagianti) - This is very interesting. For a simple little diagram, we can now do that in text in the same document... Looking forward to trying it. Mermaid is also supported in Azure DevOps
Cloud
Azure CLI: Delete All Resources Within Resource Group (Chris Pietschmann) - Nice tips to delete all resources in a resources group. However I prefer deploying an empty resource group with override, work each time, and the command seems simpler.
Isolated Azure Function in .Net 6 (Paul Michaels) - A nice short post that highlights the differences between these two types/versions of functions
Start Creating Azure Bicep Modules for Code Reuse (Chris Pietschmann) - That looks amazing, and simple to do. I have a few complex ARM templates, I should try to break them down in bicep to make them easier to read and maintain.
Programming
Observer Design Pattern in C# (Code Maze) - A really clear tutorial. I've been waiting for this kind of refresh to implement this pattern in a text-based game I was building... Maybe now is the time.
Disguising Podman as Docker Desktop on Windows (Mark Richards) - Nice! A Docker alternative that could potentially interest many, but for myself, I will stick to Docker. I'm an occasional citizen, and I feel there will be more docs with the current favorite.
Happy 20th Anniversary, .NET! (Beth Massi) - Very happy to see .NET reaching 20 so strong. Nice post, nice video packed with interesting anecdotes and nice moments.
Introducing FakeAuth for .NET Core (Caleb Jenkins) - That looks very interesting! For PoC, demo, or temporary solution it's brilliant. Code and sample in GitHub.
This autobiography is funny, light, interesting, and even weird at some moments. But you know what? I liked it. I totally kept some quotes, as I found them good. I partially read it and listen to it. The audio version is done by Matthew and it's nice to hear him telling us his story.
What’s the most configurable Kubernetes service in the cloud? Does it matter? (Richard Seroter) - Interesting post that compares the configuration options of the different service providers. From my point of view (code focus), it's not who has the more options that are the more appealing. It's Who let me go with the fewer click with a good setup.
tabs ↹ over ␣ ␣ ␣ spaces (Jiri Cincura) - Experimenting is still one of the best ways to learn things. Just like in this post.
Podcasts
Designing the Future with Brian Collins (A Bit of Optimism) - Great episode, very inspiring. How as more experienced humans can we help the younger ones to build a better future... And learn in the process.
Use Storytelling to Get Ahead at Work (Modern Mentor) - Storytelling is important and this episode help to get started. Because the best stories are not improvised.
252: Linux GUI Apps on Windows - WSLg (Merge Conflict) - I was happy when I saw the news about the WSL GUI Apps announcement, but didn't have the time to try anything. In this episode, Frank and James ask all the good questions and provide so many answers. Awesome.
SPI 482: The 3-Second Rule That You Need to Know (The Smart Passive Income Online Business and Blogging Podcast) - Getting out of our comfort zone is hard. And introducing ourselves could be so challenging. I love the idea of that tips.
10 Best Visual Studio Code Extensions for Increased Productivity (Dirk Strauss) - This post is so much more than a list of 10extensions...It explains some differences between Visual Studio and VS Code, and shares those extensions, and explains why there are so amazing.
Every Monday, I share my "reading notes". Those are a curated list of all the articles, blog posts, podcast episodes, and books that catch my interest during the week and that I found interesting. It's a mix of the actuality and what I consumed.
You think you may have interesting content, share it!
Cloud
Deploying an Azure Function App with Bicep (Mark Heath) - A nice example of a bicep script with a few resources. Not too many so it is complicated but enough to cover some particularities.
Blazor Power BI Paginated Reports (Michael Washington) - Ooooh It's been a moment since I play with my friend PowerBi... This is very interesting. I just needed a project with data... That shouldn't be that hard to find, right?
- I really like this book. It validates that it's okay to rethink decisions, to change your mind. The goal is to have (and keep) an open mindset. It seems easier than it is, of course. I heard amazing comments about this author, so it's probably not the last one I will read from him.
Every Monday, I share my "reading notes". Those are a curated list of all the articles, blog posts, podcast episodes, and books that catch my interest during the week and that I found interesting. It's a mix of the actuality and what I consumed.
You think you may have interesting content, share it!