[{"data":1,"prerenderedAt":533},["Reactive",2],{"navigation":3,"/posts/w45-2021-tips-learned-this-week":204,"/posts/w45-2021-tips-learned-this-week-surround":505},[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":91,"_dir":205,"_draft":206,"_partial":206,"_locale":207,"title":90,"description":208,"lead":209,"date":210,"image":211,"badge":213,"tags":215,"body":220,"_type":500,"_id":501,"_source":502,"_file":503,"_extension":504},"posts",false,"","Vue Devtools, Visual Studio themes, Git tips, and .NET Conf replays.","A bit of tooling and a bit of git.","2021-11-14T00:00:00.000Z",{"src":212},"/images/surface_1.jpg",{"label":214},"Tips",[216,217,218,219],"tips learned this week","Visual Studio","Vue.js","git",{"type":221,"children":222,"toc":491},"root",[223,239,252,286,298,304,327,350,359,365,370,375,381,410,438,457,463,477,486],{"type":224,"tag":225,"props":226,"children":228},"element","h2",{"id":227},"vue-devtools-a-must-have-browser-extension-when-using-vuejs",[229,237],{"type":224,"tag":230,"props":231,"children":233},"code",{"className":232},[],[234],{"type":235,"value":236},"text","Vue Devtools",{"type":235,"value":238},", a must-have browser extension when using Vue.js",{"type":224,"tag":240,"props":241,"children":242},"p",{},[243,245,250],{"type":235,"value":244},"Since a colleague showed me the ",{"type":224,"tag":230,"props":246,"children":248},{"className":247},[],[249],{"type":235,"value":236},{"type":235,"value":251}," extension, it has been a game-changer for me to work on Vue.js projects. It is very useful!",{"type":224,"tag":240,"props":253,"children":254},{},[255,257,266,268,275,277,284],{"type":235,"value":256},"I could describe to you how this extension works and what are its features but there are already very good articles that do that, like this ",{"type":224,"tag":258,"props":259,"children":263},"a",{"href":260,"rel":261},"https://www.vuemastery.com/blog/whats-new-in-the-vue3-devtools/",[262],"nofollow",[264],{"type":235,"value":265},"one",{"type":235,"value":267}," on Vue Mastery's blog. Check that, have a look at the ",{"type":224,"tag":258,"props":269,"children":272},{"href":270,"rel":271},"https://devtools.vuejs.org/",[262],[273],{"type":235,"value":274},"documentation",{"type":235,"value":276},", install ",{"type":224,"tag":258,"props":278,"children":281},{"href":279,"rel":280},"https://chrome.google.com/webstore/detail/vuejs-devtools/ljjemllljcmogpfapbkkighbhhppjdbg",[262],[282],{"type":235,"value":283},"it",{"type":235,"value":285}," (the beta version), and try it.",{"type":224,"tag":240,"props":287,"children":288},{},[289],{"type":224,"tag":290,"props":291,"children":297},"img",{"alt":292,"className":293,"src":296},"Vue Devtools website.",[294,295],"rounded-lg","mx-auto","/posts/images/w452021tips_vue_1.png",[],{"type":224,"tag":225,"props":299,"children":301},{"id":300},"cobalt2-theme-is-available-in-visual-studio-2022",[302],{"type":235,"value":303},"Cobalt2 theme is available in Visual Studio 2022",{"type":224,"tag":240,"props":305,"children":306},{},[307,309,316,318,325],{"type":235,"value":308},"I have used ",{"type":224,"tag":258,"props":310,"children":313},{"href":311,"rel":312},"https://marketplace.visualstudio.com/items?itemName=wesbos.theme-cobalt2",[262],[314],{"type":235,"value":315},"Cobalt2 theme",{"type":235,"value":317}," for vscode for quite some time now. And this theme is now available in Visual Studio 2022, you can check ",{"type":224,"tag":258,"props":319,"children":322},{"href":320,"rel":321},"https://marketplace.visualstudio.com/items?itemName=SIBA.Cobalt2Theme",[262],[323],{"type":235,"value":324},"this extension",{"type":235,"value":326}," to get it.",{"type":224,"tag":240,"props":328,"children":329},{},[330,332,339,341,348],{"type":235,"value":331},"A lot of vscode themes have been made available in Visual Studio 2022 thanks to a new tool: ",{"type":224,"tag":258,"props":333,"children":336},{"href":334,"rel":335},"https://github.com/microsoft/theme-converter-for-vs",[262],[337],{"type":235,"value":338},"Theme Converter for Visual Studio",{"type":235,"value":340},". You can read more about that ",{"type":224,"tag":258,"props":342,"children":345},{"href":343,"rel":344},"https://devblogs.microsoft.com/visualstudio/custom-themes/",[262],[346],{"type":235,"value":347},"in this article",{"type":235,"value":349}," from Visual Studio dev blog.",{"type":224,"tag":240,"props":351,"children":352},{},[353],{"type":224,"tag":290,"props":354,"children":358},{"alt":355,"className":356,"src":357},"Visual Studio 2022 with cobalt theme.",[294,295],"/posts/images/w452021tips_vs_1.png",[],{"type":224,"tag":225,"props":360,"children":362},{"id":361},"keep-a-2nd-clone-for-reviewing-pull-requests",[363],{"type":235,"value":364},"Keep a 2nd clone for reviewing pull requests",{"type":224,"tag":240,"props":366,"children":367},{},[368],{"type":235,"value":369},"I think it is often interesting to checkout the branch of a pull request instead of relying only on the web view to review a PR. It allows checking more things and a better comprehension of the code. However, when you are working on a feature, you don't want to mix your current work with the pull request you are reviewing.",{"type":224,"tag":240,"props":371,"children":372},{},[373],{"type":235,"value":374},"That is why instead of stashing code changes and switching branches I prefer having on my laptop 2 clones of the same repository I am working on, with one clone dedicated to code reviews.",{"type":224,"tag":225,"props":376,"children":378},{"id":377},"git-clrf",[379],{"type":235,"value":380},"Git CLRF",{"type":224,"tag":240,"props":382,"children":383},{},[384,386,392,394,400,402,408],{"type":235,"value":385},"If you are using Git on Windows, it is a good practice to set your ",{"type":224,"tag":230,"props":387,"children":389},{"className":388},[],[390],{"type":235,"value":391},"autocrlf",{"type":235,"value":393}," to true in your Git configuration to avoid line-ending issues (learn more about this topic in the ",{"type":224,"tag":258,"props":395,"children":398},{"href":396,"rel":397},"https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration",[262],[399],{"type":235,"value":274},{"type":235,"value":401},"). You can do that with the following command ",{"type":224,"tag":230,"props":403,"children":405},{"className":404},[],[406],{"type":235,"value":407},"git config --global core.autocrlf true",{"type":235,"value":409},".",{"type":224,"tag":240,"props":411,"children":412},{},[413,415,420,422,428,430,436],{"type":235,"value":414},"Unfortunately, maybe not all your colleagues have correctly configured ",{"type":224,"tag":230,"props":416,"children":418},{"className":417},[],[419],{"type":235,"value":391},{"type":235,"value":421}," on their machine. And you will probably forget to ask each newcomer to check that. So something that can be interesting (if all your team is working on Windows) is to directly enforce this setting on your repository by pushing a ",{"type":224,"tag":230,"props":423,"children":425},{"className":424},[],[426],{"type":235,"value":427},".gitattributes",{"type":235,"value":429}," with ",{"type":224,"tag":230,"props":431,"children":433},{"className":432},[],[434],{"type":235,"value":435},"text=auto",{"type":235,"value":437}," in it).",{"type":224,"tag":439,"props":440,"children":442},"callout",{"icon":441},"i-heroicons-chat-bubble-left-20-solid",[443],{"type":224,"tag":240,"props":444,"children":445},{},[446,448,455],{"type":235,"value":447},"As I was writing these lines, I just saw an article from Scott Hanselman about ",{"type":224,"tag":258,"props":449,"children":452},{"href":450,"rel":451},"https://www.hanselman.com/blog/carriage-returns-and-line-feeds-will-ultimately-bite-you-some-git-tips",[262],[453],{"type":235,"value":454},"Carriage Returns and Line Feeds",{"type":235,"value":456},", if you want to read more about it.",{"type":224,"tag":225,"props":458,"children":460},{"id":459},"dotnetconf-playlist",[461],{"type":235,"value":462},"dotNetConf playlist",{"type":224,"tag":240,"props":464,"children":465},{},[466,468,475],{"type":235,"value":467},"dotNetConf was this week and the replays are available ",{"type":224,"tag":258,"props":469,"children":472},{"href":470,"rel":471},"https://www.youtube.com/playlist?list=PLdo4fOcmZ0oVFtp9MDEBNbA2sSqYvXSXO",[262],[473],{"type":235,"value":474},"here",{"type":235,"value":476}," if you want to watch some talks you missed.",{"type":224,"tag":240,"props":478,"children":479},{},[480],{"type":224,"tag":290,"props":481,"children":485},{"alt":482,"className":483,"src":484},".NET Conf 2021 YouTube playlist.",[294,295],"/posts/images/w452021tips_dotnetconf_1.png",[],{"type":224,"tag":240,"props":487,"children":488},{},[489],{"type":235,"value":490},"And that's it for this week, happy learning!",{"title":207,"searchDepth":492,"depth":492,"links":493},2,[494,496,497,498,499],{"id":227,"depth":492,"text":495},"Vue Devtools, a must-have browser extension when using Vue.js",{"id":300,"depth":492,"text":303},{"id":361,"depth":492,"text":364},{"id":377,"depth":492,"text":380},{"id":459,"depth":492,"text":462},"markdown","content:1.posts:28.w45-2021-tips-learned-this-week.md","content","1.posts/28.w45-2021-tips-learned-this-week.md","md",[506,519],{"_path":94,"_dir":205,"_draft":206,"_partial":206,"_locale":207,"title":93,"description":507,"date":508,"lead":509,"image":510,"badge":512,"tags":514,"_type":500,"_id":517,"_source":502,"_file":518,"_extension":504},"Do you often star a GitHub repository and later when you want to get back to it struggle to find it on your stars page? I do! Well, I did... until I discovered Astral, the web application that allows you to Organize Your GitHub Stars With Ease. That is what we are going to talk about in this article.","2021-11-28T00:00:00.000Z","Another way to bookmark GitHub repositories.",{"src":511},"/images/stars_1.jpg",{"label":513},"Tooling",[515,516],"tooling","GitHub","content:1.posts:29.astral.md","1.posts/29.astral.md",{"_path":88,"_dir":205,"_draft":206,"_partial":206,"_locale":207,"title":87,"description":520,"lead":521,"date":522,"badge":523,"image":524,"tags":526,"_type":500,"_id":531,"_source":502,"_file":532,"_extension":504},"Today I talk to you about the recent changes I made to my blog when I migrated it to Statiq and open-sourced it.","What changed on my blog - Statiq, GitHub, giscus, and much more.","2021-11-07T00:00:00.000Z",{"label":513},{"src":525},"/images/migration_1.jpg",[527,528,516,529,530],"Statiq",".NET","GitHub Actions","open source","content:1.posts:27.migrating-blog.md","1.posts/27.migrating-blog.md",1716749601605]