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!
Suggestion of the week
Transform C# objects to a flat string dictionary (Josef Ottoson) - I love so much those developer's coding journey. We learn so much more than if only the "happy path " was shared. Great post thank you for sharing.
Using Auth0 with Static Web Apps (Aaron Powell) - Ah wonderful! I noticed this new feature in Azure static web App this week. This post details how it works and gives a great example.
Add a README to Your NuGet Package (Christopher Gill) - Now I understand! I noticed that, earlier this week, and thought: Wow, this is wonderful, why they are not all doing that! Now it all makes sense.
Bonus: Understanding Digital Body Language (Modern Mentor) - That we wanted or not, we need to get better with those new tools: the webcam, the microphone. We need to understand how to use them correctly and how to understand what the person on the other hand is really sharing. Great episode.
Social Robots with De'Aira Bryant (Hanselminutes with Scott Hanselman) - Okay I crack at... If only they knew! A very interesting episode about... yes robots!
Write Great APIs (Coding Blocks) - What's an API, what's a good API, why it's good, or why it's bad... Great episode that may me think... I really need to get back to my code and update a few things.
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!
This week's image brings us to 2017, back when I was a Microsoft MVP, yes my name is on that wall with so many of my friends! Have I great summit this week!
Scaling Microservices on Kubernetes (Ashley Davis) - Interesting post about scaling. Scaling horizontally, vertically the advantages and complexities of each options.
Tetris in Blazor WebAssembly (Matthew Jones ) - I keep repeating it, coding is fun and creative! Learn more about this cool open source project in this post.
Every Monday, I share my "reading notes". This is a curated list of all the articles, blog posts, 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.
Blazor on Desktop (Sam Basu ) - This post demonstrates by showing how to build those two flavors that it is possible to build a desktop app. Interesting.
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
2 Local machines 1 Dev VM (John Friesen) - A nice tutorial that can help us get started and understand how things work.
Introducing C# 9: Extending Partial Methods (Anthony Giretti) - It's been a while since a used them, but it nice to see it will be much easier...because I remember how it was.
The DevOps Journey (Chris Ayers) - Interesting post about DevOps in our reality.
Linus Tech Tips Returns for Episode 100! (That Creative Life) - I was really happy when I saw that Linus was back on the show. I really like to dynamic between those two, it feels honest and true.
I was interested to read this book to get some inspiration when it's time to talk to people in an event. But this book brought me way more then that. I really appreciated the clear example and the variety. After reading this book you won't be a master, but you now have options to start a conversation.
211: Failure To Launch (Merge Conflict) - Interesting conversation about when it's time to stop adding features and deploy. Finding a comfortable point could be difficult sometime.
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!
Git Branching Strategies (Chris Ayers) - Nice post that describes 3 popular solutions base on your teams' skills and experience.
Podcasts
Making Docker lovely for Developers with Simon Ferquel (Hanselminutes with Scott Hanselman) - Incredibly interesting podcast episode where they discuss about Docker on Windows. How it was working before and how it works with WSL2. A must.
5 Reasons It's Better to Be A Small Streamer - Twitch Tips (Stream Coach: Twitch Stream Tips | Partner Interviews | Pro Advice) - A nice episode that list some advantages of being a smaller streamer. I've been streaming for one year now, I'm pretty happy with my journey, learned a lot, and still learn so much. I don't feel disadvantaged, but that's maybe just because I don't really focus on growth.
469: See What Really Matters, with Greg McKeown (Coaching for Leaders) - Nice episode that talks about the essential, how to find it, how to not pass over it. Very interesting. The book, Essentialism, from seems interesting too... And hop! On the to-read list.
Miscellaneous
Whiteboarding for Developers: Yes, You Have To ( Chris Gustafson) - An excellent post that will help you to remember why whiteboarding is important. It will also provide nice guidance to restart doing it efficiently.
Every Monday, I share my "reading notes". Those are 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. Enjoy!
Cloud
ASP.NET Core Apps Observability (Francisco) - A great post that shares, and explains how to implement logs, traces, and metrics in modern application.
Durable Functions Upgrade Strategies (Mark Heath) - A real gold mine of information about best practices when migrating. Of course great when migrating durable functions, but also true for any services.
Starting a profitable business in six weeks with Courtland Allen (Software Engineering Unlocked) - A really interesting discussion about success in tech. All the work that it required, but also the timing, and the people you keep around you in the journey.
#361: The Generosity of Scars with Scott Mann (The EntreLeadership Podcast) - First when I eared the guess was a military I thought it will be full of war references... But no! This episode is all about human. Our self, are we feel alone and strangely the fact that we are not. Great episode and I really liked Scott Mann verbs.
How to Start and Grow A Podcast That Gets Listeners - Twitch Advice (Stream Coach: Twitch Stream Tips) - I like how Ashley treats her topics. She does it in a different way. In my journey to learn about how to provide great streaming content, this episode was a nice complement.
I really enjoyed this book. This book gave me vocabulary. It was putting words on ideas, explaining clearly some feelings that I wasn't able to express. Like when you know something is good or bad, but that you can explain why. It's less impressive than Start with Why, but definitely, something to read.
Every week, I publish my reading notes. Those are the articles, blog posts, podcast episodes, and books that catch my interest and that I found interesting. It's a mix of the actuality and what I was looking for.
SPI 402: Everyone Needs to Have a Podcast (Pat Flynn) - Very interesting episode that explains why... with numbers and examples... Guess what just popped on my project list...
Visualizing Your Work Schedule (Valentin Sawadski) - Interesting project.I'm always looking forward to the best way to track my time and see where I put my effort (aka time).
Serverless Deployment Best Practices (Fernando Medina Corey) - A nice post that shows some of the best practices for serverless and how AWS implements them.
Why jQuery is Obsolete and Time to Stop Using It (Chris Love) - Great post. I was a big user of jQuery, and these days I do less front end stuff, so it is nice to see how things have evolved and to understand the impact jQuery had.
How to Use External Storage in Docker (Brett Fisher) - Nice short episode that explains how to think (or when to think) about storage while working with containers.
#313: 3 Steps to Finding Freedom to Focus (Ken Coleman and Michael Hyatt) - The work-life balance... not an easy thing to answer... I enjoyed this episode exploring, suggesting a way to improve (get closer) to a balance.
Ubuntu, with Mark Shuttleworth (Craig and Adam) - It was so nice to learn more about Mark Shuttleworth and his projects. Like always... an awesome episode.
418: The Way to Nurture New Ideas, with Safi Bahcall (Dave Stachowiak) - Very interesting episode where we learn that there are always multiple sides to a story... And knowing them will change our perception.
403: Transition Well Through Your Day, with Gretchen Rubin (Dave Stachowiak) - Doing a little bit of catching up with this podcast, but I'm glad I did! Not only the episode was good but now I have to books that I'm really looking forward to read!
Docker from the beginning — part III (Chris Noring) - Third of this docker series. I like how it is not only a happy path but the learning path with the fails and victories.
Improve your Dockerfile, best practices (Chris Noring) - A nice quick post about some really easy best practices. It's so simple why would you not follow them.
Introducing Windows Terminal (Kayla Cinnamon) - The awesome new terminal with a kickass look. Even more, it's an open source project!
Migrating Azure Functions from v1 (.NET) to v2 (Jeremy Likness) - A great story and an migration walkthrough. It's most likely that by following these steps we can only be successful with our migration.
Applied AI in Software Development (Afsana Atar) - This post is an excellent overview of whats AI at ten thousand feet in the air. Perfect if you are not a data scientist and would like to learn more about that trend.
My Twitch Live Coding Setup (Suz Hinton) - A great post from Suz (aka Noopkat) a long time technical streamer, who his both very smart and generous. Definitely, a post to read.
Introduction to Azure Durable Functions (Maxime Rouiller) - This is a great post that explains what are durable functions and shows a simple case to gives context.
The Five Dysfunctions of a Team: A Leadership Fable (Patrick Lencioni) - I really enjoyed this book. The fact the first the material was passed as a story adds a lot of perspective and to our comprehension. In the last chapter the author return to the theories and gives more details. I completely devour that book; I'm looking forward to reading more.
Miscellaneous
paddling.com (Wayne Horodowich) - I could not agree more.
1575 Coding on Twitch with Jeff Fritz (Carl Franklin, Richard Campbell, Jeff Fritz) - Yep developers are also on twitch and they rock. We learn how it all started in this episode.
How to use Visual Studio Code (Flavio Copes) - Another post that confirms that VSCode definitely worth our attention. This post gives examples, and shows deferent extensions... If you don't know vscode... Yep start here.
[Invisible Ink: A Practical Guide to Building Stories That Resonate] (Brian McDonald) - We all know it, a story is the element that will give that little plus to our post, and video. This short book explains how to really make an effective one talking about the not visual things... Really interesting.
You have a solution that is already deployed in Azure, and you would like to reproduce it. You know that Azure Resource Manager (ARM) template could help you to do that, unfortunately, you don't know how to get started. In this post, I will share with you the best practices and how I implement them while working on ARM template.
How to Get your ARM Template
Of course, you could build your ARM template from scratch. However, there many quickstart templates available on GitHubd. Even more, you could also get Azure to generate the template for you!
If your building a new solution, go in the Azure portal (portal.azure.com) and start creating your resource as usual. But stop just before clicking on the Create button. Instead click on the link on his side named Download template and parameters. That will open a new blade where you will be able to download the template, parameters files, and a few scripts in different languages to deploy it.
If your solution is already deployed, you still have a way to get the template. Again, from the Azure portal, go to the resource group of your solution. In the left option panel, click on Automation script.
Step 1 - Use Git
Once you have your ARM template and a parameter file, move them in a folder and initialize a Git Repository. Even if it's only a local one this will give you an infinite of Ctrl-Z. Doing multiple commit along your journey to get a better and cleaner template, you will always have options to get back when your template was "functional".
A fantastic tool to edit ARM template is Visual Studio Code. It's free, it supports natively Git, and you can install great extensions to help you.
Step 2 - Validate, Validate, Validate, then Commit
az groupdeployment validate --resource-groupcloud5mins --template-file .\template.json --parameters .\parameters.json
Step 3 - Reduce the Number of Parameters
Nobody like tons of questions. Too many parameters is exactly like too many questions. So reduce them to the maximum. We cannot just delete those unwanted parameters, but they are still providing important information. Instead move them in the variables section.
You can do that in different ways, let me share mine. I start with the parameter files and bubble-up any parameter that I would like to keep. Next Cut/Paste all the unwanted parameters to a new file. Then I use the multi-cursor selection of VSCode to clean them in 2 clicks.
Once we have all parameters "converted" in variables, copy them into the variables section of the ARM template. You will need to delete the parameter equivalent from the top of the template.
Now that we have a clean list of parameters, and variables, we must fix the references to the converted parameters. To do that replace all
parameters() references by variables().
For exemple this:
parameters('networkInterfaceName')
will become that:
variables('networkInterfaceName')
Now that we have a more respectable list of parameters, we must be sure that what we expect from them is clear. To do that we have two simple feature at our disposal. The first one of course the name. Use a complete and clear name. Resist the temptation to shorten everything or use too many acronyms. The second is to use metadata description. This information will be displayed to users through the portal as tooltips.
"adminUsername": {
"type": "string",
"metadata": {
"description": "Name of Administrator user on the VM"
}
}
Step 4 - Use Use Unique String
When you deploy in Azure some names are global, and by definition need to be unique. This is why adding a suffix or a unique identifier to your named is a good practice. An excellent way to get an identifier is to use the function uniqueString(). This function will create a 64Bits hash based on the information passed in parameter.
In the example just above, we pass the identifier of the resource group and its name. It means that every time you will be deploying in the same resource group and at that location suffix will be the same. However, if your solution is deployed in multiple locations (for a disaster recovery, or another scenario), suffix will have a different value.
To use it, let's say the name of a virtual machine was passed as a parameter. Then we will create a variable and concatenate the parameter and our suffix.
Then instead of using the parameter inside your ARM template, you will be using this new variable.
Step 5 - Use Variables
One of the great strengths of using ARM template is that we can use them over and over. This is why we want to avoid anything that his static name or value. When we generated template from the Azure portal, these templates are a snapshot of that particular instances. The best way to stay structured and avoid too fixed names is to leverage variables.
When you use an ARM template generated from a "live" and already deployed solution the ARM will contains a lot of very specific information about this instance (Comments, ResourceIDs, States, etc.). When you are building a generic template don't hesitate to delete those.
You may wonder why we need the first variable RGName , since the resource group name is already available through the resourceGroup() function? Some resources, like Azure Blob Storage's name, must only contain lowercase characters. By making a variable we avoid repeating the to toLower() every time.
You can concatenate two, or more variables and/or string with the "very popular" function concat(). Sometimes, the name built by all those string is too long. You can trim it by using the function substring(stringToParse, startIndex, length). In this case, the Azure Blob Storage required a name with a maximum of 24 characters.
The best way to build a good template is to think like the people who will use it. Therefore, a developer may not know what the difference between a Standard_D2s_v3, a Standard_F8 or a Standard_H8. But will clearly know if he needs a medium, a large, or a web development VM.
That means that we will create a parameter with only specific values allowed, and base on that simple selection we will take more specific and technical decision. See the declaration of the following parameter.
"EnvironmentSize": {
"type": "string",
"defaultValue": "medium",
"allowedValues": [
"medium",
"large"
],
"metadata": {
"description": "Medium for regular development. Large for huge memory usage"
}
}
This parameter will only allowed two string "medium" or "large", anything else will return a validation error. If nothing is passed the default value will be "medium". And finally using a metadata description to make sure the purpose of the parameter is clear and well defined.
Then you define your variable (ex: TS-Size) as an object with two properties, or as many as you have allowed values. For each of these properties, you could have many other properties.
Then to use it, we just need to chained the variables and parameter. Notice how we have nested square brackets... This will use the TS-Size.medium.VMSize value by default.
I hope you will find those tips as useful, as I found they are. If you have other suggestions or recommendations, don't hesitate to add them in the comment section or reach me out.
A really amazing book packed of very interesting advice. Things that you kind of already knew, or at least had a feeling you maybe knew are clearly explained to you.
After reading (or listening) this book, you will know why, and you can decide to fight it or change the when... improve your performance and use your time and energy on something else.
Last week, it was the 25 edition of the MVP Summit. An event, where Microsoft invites all his MVP to get to Seattle and spend some time with the products teams and learn on the latest news and best practices.
This year was particularly inspiriting by the Microsoft roadmap, of course, but even more by all the amazing people a got the chance to meet and discuss with. I'm all pump-up, and I have tons of ideas and projects… more to come.
I already miss you…
Cloud
Deploy Docker containers fast to Microsoft Azure (Michelangelo van Dam) - This is an excellent tutorial to get started with Docker and also to see what's possible with Azure Container Instance service (ACI).