[{"data":1,"prerenderedAt":480},["Reactive",2],{"navigation":3,"/posts/w19-2022-tips-learned-this-week":204,"/posts/w19-2022-tips-learned-this-week-surround":455},[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":118,"_dir":205,"_draft":206,"_partial":206,"_locale":207,"title":117,"description":208,"lead":208,"date":209,"image":210,"badge":212,"tags":214,"body":221,"_type":450,"_id":451,"_source":452,"_file":453,"_extension":454},"posts",false,"","Git commands in vscode, a nice tool for Vue developers and a must-have Visual Studio extension.","2022-05-14T00:00:00.000Z",{"src":211},"/images/surface_1.jpg",{"label":213},"Tips",[215,216,217,218,219,220],"tips learned this week","vscode","git","Vue.js","Visual Studio","tooling",{"type":222,"children":223,"toc":444},"root",[224,233,268,281,286,295,309,315,364,373,387,396,402,416,425,430,439],{"type":225,"tag":226,"props":227,"children":229},"element","h2",{"id":228},"git-tip-of-the-week",[230],{"type":231,"value":232},"text","Git tip of the week",{"type":225,"tag":234,"props":235,"children":236},"p",{},[237,239,248,250,257,259,266],{"type":231,"value":238},"If you have read my ",{"type":225,"tag":240,"props":241,"children":245},"a",{"href":242,"rel":243},"https://www.techwatching.dev/gitcheatsheet",[244],"nofollow",[246],{"type":231,"value":247},"git cheat sheet",{"type":231,"value":249},", you know that I am a big fan of the ",{"type":225,"tag":240,"props":251,"children":254},{"href":252,"rel":253},"https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens",[244],[255],{"type":231,"value":256},"GitLens",{"type":231,"value":258}," vscode extension. I have been using it for a while now but just discovered recently that there is a ",{"type":225,"tag":240,"props":260,"children":263},{"href":261,"rel":262},"https://github.com/gitkraken/vscode-gitlens#git-command-palette-",[244],[264],{"type":231,"value":265},"Git Command Palette",{"type":231,"value":267}," that gives access to most common Git commands.",{"type":225,"tag":234,"props":269,"children":270},{},[271],{"type":225,"tag":272,"props":273,"children":280},"img",{"alt":274,"className":275,"src":278,"width":279},"GitLens Command Palette in vscode",[276,277],"rounded-lg","mx-auto","/posts/images/w192022tips_gitlens_1.png",1000,[],{"type":225,"tag":234,"props":282,"children":283},{},[284],{"type":231,"value":285},"Usually, I prefer typing the git commands rather than using a visual tool. This way, I know exactly what I am doing (no magic commands done by a tool behind the scene), and I improve my knowledge of git. However, I think that with Git Command Palette, I get the best of both worlds. The UI helps me to use the git command I need without having to type everything and remember the exact syntax of the command. Yet, this is not a UI with buttons that hide from me the git commands being run. I am still aware of the exact git commands I am using and how.",{"type":225,"tag":234,"props":287,"children":288},{},[289],{"type":225,"tag":272,"props":290,"children":294},{"alt":291,"className":292,"src":293,"width":279},"Doing a Git fetch in GitLens Command Palette.",[276,277],"/posts/images/w192022tips_gitlens_2.png",[],{"type":225,"tag":234,"props":296,"children":297},{},[298,300,307],{"type":231,"value":299},"On Windows, the default shortcut to use the Git Command Palette is ",{"type":225,"tag":301,"props":302,"children":304},"code",{"className":303},[],[305],{"type":231,"value":306},"Ctrl + Shift + G : ",{"type":231,"value":308},".",{"type":225,"tag":226,"props":310,"children":312},{"id":311},"tool-of-the-week-vue-telescope",[313],{"type":231,"value":314},"Tool of the week: Vue Telescope",{"type":225,"tag":234,"props":316,"children":317},{},[318,320,327,329,336,338,345,347,354,356,362],{"type":231,"value":319},"If you are a Vue developer and don't know this tool yet, this is going to make your day! When browsing a website, you are probably wondering if it has been made with Vue.js and if so what is the technology stack behind it. Personally, I find it very interesting to know which frameworks, libraries, or plugins have been used to create a website in Vue. And that's what ",{"type":225,"tag":240,"props":321,"children":324},{"href":322,"rel":323},"https://vuetelescope.com/",[244],[325],{"type":231,"value":326},"Vue Telescope",{"type":231,"value":328}," is about. It's an open source tool made by ",{"type":225,"tag":240,"props":330,"children":333},{"href":331,"rel":332},"https://nuxtlabs.com/",[244],[334],{"type":231,"value":335},"NuxtLabs",{"type":231,"value":337}," (the team behind the ",{"type":225,"tag":240,"props":339,"children":342},{"href":340,"rel":341},"https://nuxtjs.org/",[244],[343],{"type":231,"value":344},"Nuxt",{"type":231,"value":346}," framework) that detects the Vue technologies used in a website. It can be used from a browser ",{"type":225,"tag":240,"props":348,"children":351},{"href":349,"rel":350},"https://chrome.google.com/webstore/detail/vue-telescope/neaebjphlfplgdhedjdhcnpjkndddbpd",[244],[352],{"type":231,"value":353},"extension",{"type":231,"value":355}," or from Vue Telescope's ",{"type":225,"tag":240,"props":357,"children":359},{"href":322,"rel":358},[244],[360],{"type":231,"value":361},"website",{"type":231,"value":363}," to search a analyze a specific website.",{"type":225,"tag":234,"props":365,"children":366},{},[367],{"type":225,"tag":272,"props":368,"children":372},{"alt":369,"className":370,"src":371,"width":279},"Vue Telescope extension showing Vue Telescope stack on its website.",[276,277],"/posts/images/w192022tips_vuetelescope_1.png",[],{"type":225,"tag":234,"props":374,"children":375},{},[376,378,385],{"type":231,"value":377},"You can explore the Vue.js websites already scanned by VueTelescope ",{"type":225,"tag":240,"props":379,"children":382},{"href":380,"rel":381},"https://vuetelescope.com/explore",[244],[383],{"type":231,"value":384},"here",{"type":231,"value":386}," and filter on the frameworks, UI Frameworks you are interested in.",{"type":225,"tag":234,"props":388,"children":389},{},[390],{"type":225,"tag":272,"props":391,"children":395},{"alt":392,"className":393,"src":394,"width":279},"Vue Telescope search.",[276,277],"/posts/images/w192022tips_vuetelescope_2.png",[],{"type":225,"tag":226,"props":397,"children":399},{"id":398},"the-visual-studio-extension-you-should-try-add-new-file",[400],{"type":231,"value":401},"The Visual Studio extension you should try: Add New File",{"type":225,"tag":234,"props":403,"children":404},{},[405,407,414],{"type":231,"value":406},"Sometimes the simplest IDE extensions are the best. That's the case for the ",{"type":225,"tag":240,"props":408,"children":411},{"href":409,"rel":410},"https://marketplace.visualstudio.com/items?itemName=MadsKristensen.AddNewFile64",[244],[412],{"type":231,"value":413},"\"Add New\"",{"type":231,"value":415}," Visual Studio extension which allows you to quickly create a new file by hitting \"Shift+F2\" and writing the name of the file with its extension. Nothing fancy, but it saves you a lot of time compared to adding a new file using the default dialog.",{"type":225,"tag":234,"props":417,"children":418},{},[419],{"type":225,"tag":272,"props":420,"children":424},{"alt":421,"className":422,"src":423,"width":279},"Website of Add New File Visual Studio extension.",[276,277],"/posts/images/w192022tips_addnewfile_1.png",[],{"type":225,"tag":234,"props":426,"children":427},{},[428],{"type":231,"value":429},"As you can see you can even create the missing folders where the file is placed.",{"type":225,"tag":234,"props":431,"children":432},{},[433],{"type":225,"tag":272,"props":434,"children":438},{"alt":435,"className":436,"src":437,"width":279},"Usage of Add New File in Visual Studio.",[276,277],"/posts/images/w192022tips_addnewfile.gif",[],{"type":225,"tag":234,"props":440,"children":441},{},[442],{"type":231,"value":443},"And that's it for this week, happy learning!",{"title":207,"searchDepth":445,"depth":445,"links":446},2,[447,448,449],{"id":228,"depth":445,"text":232},{"id":311,"depth":445,"text":314},{"id":398,"depth":445,"text":401},"markdown","content:1.posts:37.w19-2022-tips-learned-this-week.md","content","1.posts/37.w19-2022-tips-learned-this-week.md","md",[456,466],{"_path":121,"_dir":205,"_draft":206,"_partial":206,"_locale":207,"title":120,"description":457,"lead":457,"date":458,"image":459,"badge":460,"tags":461,"_type":450,"_id":464,"_source":452,"_file":465,"_extension":454},"The \"this\" in TypeScript, a must-have tool for Durable Functions, and a new git alias.","2022-05-23T00:00:00.000Z",{"src":211},{"label":213},[215,462,217,463,220],"TypeScript","Azure Functions","content:1.posts:38.w20-2022-tips-learned-this-week.md","1.posts/38.w20-2022-tips-learned-this-week.md",{"_path":115,"_dir":205,"_draft":206,"_partial":206,"_locale":207,"title":114,"description":467,"lead":468,"date":469,"image":470,"badge":472,"tags":474,"_type":450,"_id":478,"_source":452,"_file":479,"_extension":454},"In today's world of cloud-first applications, multi-cloud/hybrid cloud companies, and complex infrastructures, using infrastructure as code is essential. In recent years, Terraform has become one of the most popular IaC solutions, but its challenger Pulumi is quickly gaining traction. In this article, I will tell you why I think Pulumi is better and why I will choose it over Terraform for my next project.","My take on choosing an Infrastructure as solution","2022-05-02T00:00:00.000Z",{"src":471},"/images/clouds_1.jpg",{"label":473},"DevOps",[475,476,477,473],"IaC","Pulumi","Terraform","content:1.posts:36.pulumi-vs-terraform.md","1.posts/36.pulumi-vs-terraform.md",1716749601568]