[{"data":1,"prerenderedAt":711},["Reactive",2],{"navigation":3,"/posts/w03-2022-tips-learned-this-week":204,"/posts/w03-2022-tips-learned-this-week-surround":689},[4,192,200],{"title":5,"_path":6,"children":7,"icon":191},"Blog","/posts",[8,11,14,17,20,23,26,29,32,35,38,41,44,47,50,53,56,59,62,65,68,71,74,77,80,83,86,89,92,95,98,101,104,107,110,113,116,119,122,125,128,131,134,137,140,143,146,149,152,155,158,161,164,167,170,173,176,179,182,185,188],{"title":9,"_path":10},"Testing your API with REST Client","/posts/testing-your-api-with-rest-client",{"title":12,"_path":13},"HTML templating in Xamarin","/posts/html-templating-in-xamarin",{"title":15,"_path":16},"Goodbye Azure Portal, Welcome Azure CLI","/posts/welcome-azure-cli",{"title":18,"_path":19},"Coming across Gitpod","/posts/gitpod",{"title":21,"_path":22},"Handle token retrieval while querying an API","/posts/delegating-handler",{"title":24,"_path":25},"Clean up your local git branches.","/posts/cleaning-git-branches",{"title":27,"_path":28},"Automate configuration of Teams Tab SSO with PowerShell.","/posts/teams-sso-powershell",{"title":30,"_path":31},"How to do a technology watch? - Part 1","/posts/technology-watch-part1",{"title":33,"_path":34},"How to do a technology watch? - Part 2","/posts/technology-watch-part2",{"title":36,"_path":37},"You almost no longer need Key Vault references for Azure Functions.","/posts/azure-functions-custom-configuration",{"title":39,"_path":40},"How to do a technology watch? - Part 3","/posts/technology-watch-part3",{"title":42,"_path":43},"Forget DevOps, the future is already here!","/posts/devops-future",{"title":45,"_path":46},"Week 9, 2021 - Tips I learned this week","/posts/w09-2021-tips-learned-this-week",{"title":48,"_path":49},"Week 12, 2021 - Tips I learned this week","/posts/w12-2021-tips-learned-this-week",{"title":51,"_path":52},"Week 14, 2021 - Tips I learned this week","/posts/w14-2021-tips-learned-this-week",{"title":54,"_path":55},"Once upon a time in .NET","/posts/once-upon-a-time-in-dotnet",{"title":57,"_path":58},"Install your applications with winget","/posts/winget-import",{"title":60,"_path":61},"Customize your applications when installing them with winget","/posts/winget-override",{"title":63,"_path":64},"Week 22, 2021 - Tips I learned this week","/posts/w22-2021-tips-learned-this-week",{"title":66,"_path":67},"How to connect to an Azure SQL Database from C# using Azure AD","/posts/sqlclient-active-directory-authent",{"title":69,"_path":70},"Producing packages for Windows Package Manager","/posts/wingetcreate",{"title":72,"_path":73},"4 tips about GitHub Actions environment variables and contexts","/posts/github-actions-var-and-context",{"title":75,"_path":76},"AzureWebJobsStorage, the secret you don't need in your Function App.","/posts/azure-functions-without-azurewebjobsstorage",{"title":78,"_path":79},"ASP.NET Core - Lost in configuration","/posts/lost-in-configuration",{"title":81,"_path":82},"Week 39, 2021 - Tips I learned this week","/posts/w39-2021-tips-learned-this-week",{"title":84,"_path":85},"Week 41, 2021 - Tips I learned this week","/posts/w41-2021-tips-learned-this-week",{"title":87,"_path":88},"Migrating and open-sourcing my blog","/posts/migrating-blog",{"title":90,"_path":91},"Week 45, 2021 - Tips I learned this week","/posts/w45-2021-tips-learned-this-week",{"title":93,"_path":94},"Organize your GitHub stars with Astral","/posts/astral",{"title":96,"_path":97},"Pulumi with an Azure Blob Storage backend","/posts/pulumi-azure-backend",{"title":99,"_path":100},"IaC Hot Reload with Pulumi Watch","/posts/pulumi-watch",{"title":102,"_path":103},"Week 2, 2022 - Tips I learned this week","/posts/w02-2022-tips-learned-this-week",{"title":105,"_path":106},"Week 3, 2022 - Tips I learned this week","/posts/w03-2022-tips-learned-this-week",{"title":108,"_path":109},"Week 5, 2022 - Tips I learned this week","/posts/w05-2022-tips-learned-this-week",{"title":111,"_path":112},"How to provision an Azure SQL Database with Active Directory authentication","/posts/sqldatabase-active-directory-authent",{"title":114,"_path":115},"Why will I choose Pulumi over Terraform for my next project?","/posts/pulumi-vs-terraform",{"title":117,"_path":118},"Week 19, 2022 - Tips I learned this week","/posts/w19-2022-tips-learned-this-week",{"title":120,"_path":121},"Week 20, 2022 - Tips I learned this week","/posts/w20-2022-tips-learned-this-week",{"title":123,"_path":124},"Keeping secrets secure when using API Clients","/posts/http-clients-secrets",{"title":126,"_path":127},"What made me want to be a developer?","/posts/be-a-developer",{"title":129,"_path":130},"What can we do when stuck with a programming problem?","/posts/get-unstuck",{"title":132,"_path":133},"How did I automate the setup of my developer Windows laptop?","/posts/automate-developer-machine",{"title":135,"_path":136},"Discussion about API clients","/posts/http-clients",{"title":138,"_path":139},"Week 46, 2022 - Tips I learned this week","/posts/w46-2022-tips-learned-this-week",{"title":141,"_path":142},"When Pulumi met Nuke: a .NET love story","/posts/when-pulumi-met-nuke",{"title":144,"_path":145},"A year of learning and sharing - Dev Retro 2022","/posts/2022-retro",{"title":147,"_path":148},"Perform Dynamic Execution of an npm Package","/posts/pnpm-dlx",{"title":150,"_path":151},"Manage multiple Node.js versions","/posts/pnpm-env",{"title":153,"_path":154},"Introducing the Vue.js CI/CD series","/posts/vuecicd-introduction",{"title":156,"_path":157},"Execute commands using your project dependencies","/posts/pnpm-exec",{"title":159,"_path":160},"Vue.js CI/CD: Continuous Integration","/posts/vuecicd-ci",{"title":162,"_path":163},"Who is using pnpm?","/posts/pnpm-who-is-using",{"title":165,"_path":166},"Create an Azure-Ready GitHub Repository using Pulumi","/posts/azure-ready-github-repository",{"title":168,"_path":169},"Deploying to Azure from Azure DevOps without secrets","/posts/ado-workload-identity-federation",{"title":171,"_path":172},"Effortlessly Configure GitHub Repositories for Azure Deployment via OIDC","/posts/scripting-azure-ready-github-repository",{"title":174,"_path":175},"Playing with the .NET 8 Web API template","/posts/playing-with-dotnet8",{"title":177,"_path":178},"Another year of sharing and learning - Dev Retro 2023","/posts/2023-retro",{"title":180,"_path":181},"Week 4, 2024 - Tips I learned this week","/posts/w04-2024-tips-learned-this-week",{"title":183,"_path":184},"Using dependency injection with Azure .NET SDK","/posts/azure-sdk-di",{"title":186,"_path":187},"Having Fun With IT Event Calendars","/posts/it-event-calendars",{"title":189,"_path":190},"Call your Azure AD B2C protected API with authenticated HTTP requests from your JetBrains IDE","/posts/http-clients-oauth2","i-heroicons-newspaper",{"title":193,"_path":194,"children":195,"icon":199},"Goodies","/goodies",[196],{"title":197,"_path":198},"My Git Cheat Sheet","/goodies/gitcheatsheet","i-heroicons-gift-solid",{"title":201,"_path":202,"icon":203},"About","/about","i-heroicons-user-circle-solid",{"_path":106,"_dir":205,"_draft":206,"_partial":206,"_locale":207,"title":105,"description":208,"lead":209,"date":210,"image":211,"badge":213,"tags":215,"body":224,"_type":684,"_id":685,"_source":686,"_file":687,"_extension":688},"posts",false,"",".NET configuration providers, Vite vscode extension, Azure DevOps pull request templates, and degit.","Tooling around .NET, Azure DevOps, and VS Code.","2022-01-24T00:00:00.000Z",{"src":212},"/images/surface_1.jpg",{"label":214},"Tips",[216,217,218,219,220,221,222,223],"tips learned this week",".NET","Configuration","Azure DevOps","vscode","Vite","git","tooling",{"type":225,"children":226,"toc":677},"root",[227,236,292,304,317,427,449,455,478,483,492,498,503,517,530,543,548,557,562,567,572,581,599,605,610,645,654,666,671],{"type":228,"tag":229,"props":230,"children":232},"element","h2",{"id":231},"net-tip-of-the-week-the-new-way-to-add-a-configuration-source",[233],{"type":234,"value":235},"text",".NET tip of the week: the new way to add a configuration source",{"type":228,"tag":237,"props":238,"children":239},"p",{},[240,242,249,251,257,259,265,267,272,274,279,281,290],{"type":234,"value":241},".NET 6 introduced a new way to build a .NET application using the new ",{"type":228,"tag":243,"props":244,"children":246},"code",{"className":245},[],[247],{"type":234,"value":248},"WebApplication",{"type":234,"value":250}," and ",{"type":228,"tag":243,"props":252,"children":254},{"className":253},[],[255],{"type":234,"value":256},"WebApplicationBuilder",{"type":234,"value":258}," classes. One thing I like about it is how configuration is handled. Instead of using the ",{"type":228,"tag":243,"props":260,"children":262},{"className":261},[],[263],{"type":234,"value":264},"ConfigureAppConfiguration",{"type":234,"value":266}," method to add a new configuration source, you can directly use the ",{"type":228,"tag":243,"props":268,"children":270},{"className":269},[],[271],{"type":234,"value":218},{"type":234,"value":273}," property on the ",{"type":228,"tag":243,"props":275,"children":277},{"className":276},[],[278],{"type":234,"value":256},{"type":234,"value":280}," instance. You can see an example of this change on this screenshot of the ",{"type":228,"tag":282,"props":283,"children":287},"a",{"href":284,"rel":285},"https://docs.microsoft.com/en-us/aspnet/core/migration/50-to-60-samples?view=aspnetcore-6.0#add-configuration-providers",[286],"nofollow",[288],{"type":234,"value":289},"ASP.NET Core documentation",{"type":234,"value":291},":",{"type":228,"tag":237,"props":293,"children":294},{},[295],{"type":228,"tag":296,"props":297,"children":303},"img",{"alt":298,"className":299,"src":302},"Using configuration provider in ASP.NET 5 versus ASP.NET 6.",[300,301],"rounded-lg","mx-auto","/posts/images/w032022tips_net_configuration_1.png",[],{"type":228,"tag":237,"props":305,"children":306},{},[307,309,315],{"type":234,"value":308},"You may think this way of adding a new configuration source does not bring much apart from making the code shorter. I thought it too until I discovered that it enables you to access configuration in the builder from previously registered configuration sources. For instance, if you want to load secrets from an Azure Key Vault into your configuration, you will need to retrieve the Key Vault URI from your configuration (that you may have set in your ",{"type":228,"tag":243,"props":310,"children":312},{"className":311},[],[313],{"type":234,"value":314},"appsettings.Development.json",{"type":234,"value":316}," file). Before you would have to partially build your configuration to get the value of a setting, now you can just access it.",{"type":228,"tag":318,"props":319,"children":323},"pre",{"className":320,"code":321,"language":322,"meta":207,"style":207},"language-csharp shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","builder.Configuration.AddAzureKeyVault(new Uri(builder.Configuration[\"KeyVault:VaultUri\"]), new DefaultAzureCredential());\n","csharp",[324],{"type":228,"tag":243,"props":325,"children":326},{"__ignoreMap":207},[327],{"type":228,"tag":328,"props":329,"children":332},"span",{"class":330,"line":331},"line",1,[333,339,345,349,353,359,364,370,375,379,383,387,392,397,403,407,412,417,422],{"type":228,"tag":328,"props":334,"children":336},{"style":335},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[337],{"type":234,"value":338},"builder",{"type":228,"tag":328,"props":340,"children":342},{"style":341},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[343],{"type":234,"value":344},".",{"type":228,"tag":328,"props":346,"children":347},{"style":335},[348],{"type":234,"value":218},{"type":228,"tag":328,"props":350,"children":351},{"style":341},[352],{"type":234,"value":344},{"type":228,"tag":328,"props":354,"children":356},{"style":355},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[357],{"type":234,"value":358},"AddAzureKeyVault",{"type":228,"tag":328,"props":360,"children":361},{"style":341},[362],{"type":234,"value":363},"(new",{"type":228,"tag":328,"props":365,"children":367},{"style":366},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[368],{"type":234,"value":369}," Uri",{"type":228,"tag":328,"props":371,"children":372},{"style":341},[373],{"type":234,"value":374},"(",{"type":228,"tag":328,"props":376,"children":377},{"style":335},[378],{"type":234,"value":338},{"type":228,"tag":328,"props":380,"children":381},{"style":341},[382],{"type":234,"value":344},{"type":228,"tag":328,"props":384,"children":385},{"style":335},[386],{"type":234,"value":218},{"type":228,"tag":328,"props":388,"children":389},{"style":341},[390],{"type":234,"value":391},"[",{"type":228,"tag":328,"props":393,"children":394},{"style":341},[395],{"type":234,"value":396},"\"",{"type":228,"tag":328,"props":398,"children":400},{"style":399},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[401],{"type":234,"value":402},"KeyVault:VaultUri",{"type":228,"tag":328,"props":404,"children":405},{"style":341},[406],{"type":234,"value":396},{"type":228,"tag":328,"props":408,"children":409},{"style":341},[410],{"type":234,"value":411},"]),",{"type":228,"tag":328,"props":413,"children":414},{"style":341},[415],{"type":234,"value":416}," new",{"type":228,"tag":328,"props":418,"children":419},{"style":366},[420],{"type":234,"value":421}," DefaultAzureCredential",{"type":228,"tag":328,"props":423,"children":424},{"style":341},[425],{"type":234,"value":426},"());\n",{"type":228,"tag":237,"props":428,"children":429},{},[430,432,439,441,447],{"type":234,"value":431},"Configuration from previously registered sources is already available because configuration sources are directly loaded once they are added. If you want to learn more about the behind-the-scenes, Andrew Lock has a ",{"type":228,"tag":282,"props":433,"children":436},{"href":434,"rel":435},"https://andrewlock.net/exploring-dotnet-6-part-1-looking-inside-configurationmanager-in-dotnet-6/",[286],[437],{"type":234,"value":438},"very interesting article",{"type":234,"value":440}," about ",{"type":228,"tag":243,"props":442,"children":444},{"className":443},[],[445],{"type":234,"value":446},"ConfigurationManager",{"type":234,"value":448}," that I suggest you read.",{"type":228,"tag":229,"props":450,"children":452},{"id":451},"the-vs-code-extension-you-should-try-vite",[453],{"type":234,"value":454},"The VS Code extension you should try: Vite",{"type":228,"tag":237,"props":456,"children":457},{},[458,460,467,469,476],{"type":234,"value":459},"If you are developing a front-end using Vite (and there are ",{"type":228,"tag":282,"props":461,"children":464},{"href":462,"rel":463},"https://vitejs.dev/guide/why.html",[286],[465],{"type":234,"value":466},"good reasons",{"type":234,"value":468}," why you should), there is a ",{"type":228,"tag":282,"props":470,"children":473},{"href":471,"rel":472},"https://marketplace.visualstudio.com/items?itemName=antfu.vite",[286],[474],{"type":234,"value":475},"Vite extension for VS Code",{"type":234,"value":477}," currently in preview.",{"type":228,"tag":237,"props":479,"children":480},{},[481],{"type":234,"value":482},"You can see the main features of this extension below: little things that make you always more productive.",{"type":228,"tag":237,"props":484,"children":485},{},[486],{"type":228,"tag":296,"props":487,"children":491},{"alt":488,"className":489,"src":490},"Vs code vite exension.",[300,301],"/posts/images/w032022tips_vscode_vite_1.png",[],{"type":228,"tag":229,"props":493,"children":495},{"id":494},"the-azure-devops-tip-you-did-not-know-about-creating-pull-requests-templates",[496],{"type":234,"value":497},"The Azure DevOps tip you did not know about: creating pull requests templates",{"type":228,"tag":237,"props":499,"children":500},{},[501],{"type":234,"value":502},"As a developer working with Azure DevOps, you probably spend a lot of time reviewing your colleagues pull requests and what helps you to have a good context (of what problem a pull request solves or what new feature it brings) are having a work item associated to the pull request, and having a good description. You can enforce the pull request to have an associated work item by setting it to mandatory in your branch policies, but \"having a good description\" is not something you can enforce.",{"type":228,"tag":237,"props":504,"children":505},{},[506,508,515],{"type":234,"value":507},"However, you can provide some guidance on what the description should tell, how it should be organized, what are the key points to verify before submitting the pull request... How do you do that? By creating a pull request template in your repository which will be a markdown file that will be automatically added to a pull request description when the pull request is created. You can read the ",{"type":228,"tag":282,"props":509,"children":512},{"href":510,"rel":511},"https://docs.microsoft.com/en-us/azure/devops/repos/git/pull-request-templates?view=azure-devops",[286],[513],{"type":234,"value":514},"official documentation",{"type":234,"value":516}," but let me show you quickly how it works:",{"type":228,"tag":237,"props":518,"children":519},{},[520,522,528],{"type":234,"value":521},"1- You create a ",{"type":228,"tag":243,"props":523,"children":525},{"className":524},[],[526],{"type":234,"value":527},".azuredevops",{"type":234,"value":529}," folder in the root of your git repository",{"type":228,"tag":237,"props":531,"children":532},{},[533,535,541],{"type":234,"value":534},"2- You create a markdown file ",{"type":228,"tag":243,"props":536,"children":538},{"className":537},[],[539],{"type":234,"value":540},"pull_request_template.md",{"type":234,"value":542}," containing the description you want",{"type":228,"tag":237,"props":544,"children":545},{},[546],{"type":234,"value":547},"You can see below an example of a template I created:",{"type":228,"tag":237,"props":549,"children":550},{},[551],{"type":228,"tag":296,"props":552,"children":556},{"alt":553,"className":554,"src":555},"Pull request markdown template file.",[300,301],"/posts/images/w032022tips_pr_template_1.png",[],{"type":228,"tag":237,"props":558,"children":559},{},[560],{"type":234,"value":561},"3- You commit this file and push it in your main branch",{"type":228,"tag":237,"props":563,"children":564},{},[565],{"type":234,"value":566},"4- Now when someone creates a pull request, he will have a pre-filled description to complete before submitting his pull request",{"type":228,"tag":237,"props":568,"children":569},{},[570],{"type":234,"value":571},"This is what it looks like for my template:",{"type":228,"tag":237,"props":573,"children":574},{},[575],{"type":228,"tag":296,"props":576,"children":580},{"alt":577,"className":578,"src":579},"Pull request template in Azure DevOps.",[300,301],"/posts/images/w032022tips_pr_template_2.png",[],{"type":228,"tag":582,"props":583,"children":585},"callout",{"icon":584},"i-heroicons-chat-bubble-left-20-solid",[586],{"type":228,"tag":237,"props":587,"children":588},{},[589,591,598],{"type":234,"value":590},"If you are using GitHub and not Azure DevOps, just know that there are also pull requests templates in ",{"type":228,"tag":282,"props":592,"children":595},{"href":593,"rel":594},"https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/creating-a-pull-request-template-for-your-repository",[286],[596],{"type":234,"value":597},"GitHub",{"type":234,"value":344},{"type":228,"tag":229,"props":600,"children":602},{"id":601},"tool-of-the-week-degit",[603],{"type":234,"value":604},"Tool of the week: degit",{"type":228,"tag":237,"props":606,"children":607},{},[608],{"type":234,"value":609},"Sometimes you find an interesting open source git repository that could help you save some time when starting a new project. That can be a project template or a sample, it's a repository that you want to start coding from. You can clone it or fork it but you will retrieve the whole git history and that is something that you probably don't want.",{"type":228,"tag":237,"props":611,"children":612},{},[613,620,622,628,630,636,638,644],{"type":228,"tag":282,"props":614,"children":617},{"href":615,"rel":616},"https://github.com/Rich-Harris/degit",[286],[618],{"type":234,"value":619},"degit",{"type":234,"value":621}," is a helpful tool that solves this issue. When you run this tool on a git repository, it retrieves locally the latest version of this repository without its git history. It's an ",{"type":228,"tag":243,"props":623,"children":625},{"className":624},[],[626],{"type":234,"value":627},"npm",{"type":234,"value":629}," tool so you can install it globally with ",{"type":228,"tag":243,"props":631,"children":633},{"className":632},[],[634],{"type":234,"value":635},"npm install -g degit",{"type":234,"value":637}," or directly run it using ",{"type":228,"tag":243,"props":639,"children":641},{"className":640},[],[642],{"type":234,"value":643},"npx",{"type":234,"value":344},{"type":228,"tag":237,"props":646,"children":647},{},[648],{"type":228,"tag":296,"props":649,"children":653},{"alt":650,"className":651,"src":652},"Ouput when using degit package on a repository.",[300,301],"/posts/images/w032022tips_degit_1.png",[],{"type":228,"tag":237,"props":655,"children":656},{},[657,659,664],{"type":234,"value":658},"Don't hesitate to give the project a star on ",{"type":228,"tag":282,"props":660,"children":662},{"href":615,"rel":661},[286],[663],{"type":234,"value":597},{"type":234,"value":665}," if you find it useful.",{"type":228,"tag":237,"props":667,"children":668},{},[669],{"type":234,"value":670},"And that's it for this week, happy learning!",{"type":228,"tag":672,"props":673,"children":674},"style",{},[675],{"type":234,"value":676},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":207,"searchDepth":678,"depth":678,"links":679},2,[680,681,682,683],{"id":231,"depth":678,"text":235},{"id":451,"depth":678,"text":454},{"id":494,"depth":678,"text":497},{"id":601,"depth":678,"text":604},"markdown","content:1.posts:33.w03-2022-tips-learned-this-week.md","content","1.posts/33.w03-2022-tips-learned-this-week.md","md",[690,701],{"_path":109,"_dir":205,"_draft":206,"_partial":206,"_locale":207,"title":108,"description":691,"lead":692,"date":693,"image":694,"badge":695,"tags":696,"_type":684,"_id":699,"_source":686,"_file":700,"_extension":688},"This week we talk about code analysis in .NET, cron expressions with crontab guru, diagrams in Azure DevOps wikis, and sending HTTP requests in VS Code.","Tooling around .NET, Azure DevOps and VS Code.","2022-02-04T00:00:00.000Z",{"src":212},{"label":214},[216,217,697,219,698,220,223],"Code analysis","Diagram","content:1.posts:34.w05-2022-tips-learned-this-week.md","1.posts/34.w05-2022-tips-learned-this-week.md",{"_path":103,"_dir":205,"_draft":206,"_partial":206,"_locale":207,"title":102,"description":702,"lead":703,"date":704,"image":705,"badge":706,"tags":707,"_type":684,"_id":709,"_source":686,"_file":710,"_extension":688},"This is my first article of the series Tips I learned this week for 2022 🚀! And today we are going to see some tips about .NET, Azure, GitHub, and VS Code.","Tooling around .NET, Azure, Github and VS Code.","2022-01-14T00:00:00.000Z",{"src":212},{"label":214},[216,217,708,597,220,223],"Azure CLI","content:1.posts:32.w02-2022-tips-learned-this-week.md","1.posts/32.w02-2022-tips-learned-this-week.md",1716749601586]