[{"data":1,"prerenderedAt":825},["Reactive",2],{"navigation":3,"/posts/2023-retro":204,"/posts/2023-retro-surround":793},[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":178,"_dir":205,"_draft":206,"_partial":206,"_locale":207,"title":177,"description":208,"lead":209,"date":210,"image":211,"badge":213,"tags":215,"ImageAttribution":218,"body":219,"_type":788,"_id":789,"_source":790,"_file":791,"_extension":792},"posts",false,"","Last year, I wrote my first annual retrospective. It was an interesting exercise that I intend to do every year. So for 2023, here is my year in review.","Challenges and achievements of 2023","2024-01-02T00:00:00.000Z",{"src":212},"/images/review_1.jpg",{"label":214},"Essay",[216,217],"thoughts","learning","Picture of \u003Ca href=\"https://unsplash.com/fr/@markuswinkler?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Markus Winkler\u003C/a> on \u003Ca href=\"https://unsplash.com/fr/photos/-fRAIQHKcc0?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText\">Unsplash\u003C/a>",{"type":220,"children":221,"toc":779},"root",[222,241,248,261,296,301,334,339,345,350,378,392,404,427,432,449,454,459,465,470,475,484,489,502,533,556,565,579,585,590,613,618,623,633,656,661,740,746,751,756,774],{"type":223,"tag":224,"props":225,"children":226},"element","p",{},[227,230,239],{"type":228,"value":229},"text","Last year, I wrote my ",{"type":223,"tag":231,"props":232,"children":236},"a",{"href":233,"rel":234},"https://www.techwatching.dev/posts/2022-retro",[235],"nofollow",[237],{"type":228,"value":238},"first annual retrospective",{"type":228,"value":240},". It was an interesting exercise that I intend to do every year. So for 2023, here is my year in review.",{"type":223,"tag":242,"props":243,"children":245},"h2",{"id":244},"plans-for-2023-versus-reality",[246],{"type":228,"value":247},"Plans for 2023 versus reality",{"type":223,"tag":224,"props":249,"children":250},{},[251,253,259],{"type":228,"value":252},"My plans for 2023 that I shared in ",{"type":223,"tag":231,"props":254,"children":256},{"href":233,"rel":255},[235],[257],{"type":228,"value":258},"my 2022 retro",{"type":228,"value":260}," were to:",{"type":223,"tag":262,"props":263,"children":264},"ul",{},[265,271,276,281,286,291],{"type":223,"tag":266,"props":267,"children":268},"li",{},[269],{"type":228,"value":270},"keep learning about Vue.js and Nuxt.js",{"type":223,"tag":266,"props":272,"children":273},{},[274],{"type":228,"value":275},"explore Azure Container Apps and Dapr",{"type":223,"tag":266,"props":277,"children":278},{},[279],{"type":228,"value":280},"keep writing articles on my blog about topics I am interested in",{"type":223,"tag":266,"props":282,"children":283},{},[284],{"type":228,"value":285},"keep sharing links and tips on social networks",{"type":223,"tag":266,"props":287,"children":288},{},[289],{"type":228,"value":290},"improve my use of PKM tools like Obsidian",{"type":223,"tag":266,"props":292,"children":293},{},[294],{"type":228,"value":295},"give at least 1 talk at a developer conference",{"type":223,"tag":224,"props":297,"children":298},{},[299],{"type":228,"value":300},"I must admit that I didn't fully achieve my goals:",{"type":223,"tag":262,"props":302,"children":303},{},[304,309,314,319,324,329],{"type":223,"tag":266,"props":305,"children":306},{},[307],{"type":228,"value":308},"I continued learning Vue.js and Nuxt.js but not as extensively as I would have hoped",{"type":223,"tag":266,"props":310,"children":311},{},[312],{"type":228,"value":313},"I didn't dive deeply into Azure Container Apps and Dapr although I did experiment with them a bit",{"type":223,"tag":266,"props":315,"children":316},{},[317],{"type":228,"value":318},"I wrote articles on my blog but fewer than in the previous years",{"type":223,"tag":266,"props":320,"children":321},{},[322],{"type":228,"value":323},"I shared links and tips on social networks but not consistently",{"type":223,"tag":266,"props":325,"children":326},{},[327],{"type":228,"value":328},"I took my notes using Obsidian, but I haven't utilized it as a true PKM tool",{"type":223,"tag":266,"props":330,"children":331},{},[332],{"type":228,"value":333},"I did give several talks at various developer conferences (more on that later)",{"type":223,"tag":224,"props":335,"children":336},{},[337],{"type":228,"value":338},"It's not a big deal that I didn't accomplish everything. My primary goal for 2023 was for it to be a year of learning and sharing, just like in 2022. And I succeeded in doing that. 2023 was another year of learning and sharing, and it also provided numerous speaking opportunities. This is one of the reasons why I didn't have the time to do everything I planned.",{"type":223,"tag":242,"props":340,"children":342},{"id":341},"public-speaking",[343],{"type":228,"value":344},"Public speaking",{"type":223,"tag":224,"props":346,"children":347},{},[348],{"type":228,"value":349},"In 2022, I gave my first talk at a developer conference (online). In 2023, I had the opportunity to speaker at five French developer conferences:",{"type":223,"tag":262,"props":351,"children":352},{},[353,358,363,368,373],{"type":223,"tag":266,"props":354,"children":355},{},[356],{"type":228,"value":357},"Global Azure France in Paris - May 2023",{"type":223,"tag":266,"props":359,"children":360},{},[361],{"type":228,"value":362},"Cloud Est in Lyon - June 2023",{"type":223,"tag":266,"props":364,"children":365},{},[366],{"type":228,"value":367},"Breizh Camp in Rennes - June 2023",{"type":223,"tag":266,"props":369,"children":370},{},[371],{"type":228,"value":372},"BDX I/O in Bordeaux - November 2023",{"type":223,"tag":266,"props":374,"children":375},{},[376],{"type":228,"value":377},".NET Conf 2023 with MTG (online) - December 2023",{"type":223,"tag":224,"props":379,"children":380},{},[381,383,390],{"type":228,"value":382},"The first three talks focused on Infrastructure as Code in general, and more specifically on ",{"type":223,"tag":231,"props":384,"children":387},{"href":385,"rel":386},"https://www.pulumi.com/",[235],[388],{"type":228,"value":389},"Pulumi",{"type":228,"value":391},". I particularly enjoyed speaking at Breizh Camp, as many people attended my talk 🥰 and the organization was excellent.",{"type":223,"tag":224,"props":393,"children":394},{},[395],{"type":223,"tag":396,"props":397,"children":403},"img",{"alt":398,"className":399,"src":402},"Screenshot of talk record at Breizh Camp",[400,401],"rounded-lg","mx-auto","/posts/images/2022_retro_talk.webp",[],{"type":223,"tag":224,"props":405,"children":406},{},[407,409,416,418,425],{"type":228,"value":408},"The fourth talk showcased ",{"type":223,"tag":231,"props":410,"children":413},{"href":411,"rel":412},"https://sli.dev/",[235],[414],{"type":228,"value":415},"slidev",{"type":228,"value":417},", a tool for developers by ",{"type":223,"tag":231,"props":419,"children":422},{"href":420,"rel":421},"https://antfu.me/",[235],[423],{"type":228,"value":424},"Anthony Fu",{"type":228,"value":426}," that allows creating slides in markdown (and using web technologies). It was a 15-minute talk titled \"Oops, I Forgot to Make My Slides,\" during which a friend helped me create my slides about Vue 3 on stage. It was an incredibly fun talk to prepare and deliver. I cannot thank my co-speaker Xavier Noya enough for agreeing to do this talk with me. Additionally, I was delighted to be a speaker at this fantastic conference that takes place in my hometown.",{"type":223,"tag":224,"props":428,"children":429},{},[430],{"type":228,"value":431},"The last talk was online (for a French event related to the .NET Conf 2023). It concentrated on the new features of C# 12 and .NET 8, and demonstrated how to implement Infrastructure as Code (IaC) using .NET.",{"type":223,"tag":433,"props":434,"children":436},"callout",{"icon":435},"i-heroicons-film",[437],{"type":223,"tag":224,"props":438,"children":439},{},[440,442],{"type":228,"value":441},"The talks I gave are all in French, but if you are interested some of them have been ",{"type":223,"tag":231,"props":443,"children":446},{"href":444,"rel":445},"https://drp.li/f7I9N",[235],[447],{"type":228,"value":448},"recorded",{"type":223,"tag":224,"props":450,"children":451},{},[452],{"type":228,"value":453},"I am incredibly proud of the numerous speaking opportunities I've had. While it may not seem impressive to experienced speakers, it means a lot to me. I am truly grateful for the chance to speak at these events and to have attended some fantastic talks as well.",{"type":223,"tag":224,"props":455,"children":456},{},[457],{"type":228,"value":458},"Developer conferences' Call for Papers are highly selective, and they always receive many excellent proposals. Thus, I have no idea if I will be able to speak at multiple conferences in 2024, but I will certainly do my best.",{"type":223,"tag":242,"props":460,"children":462},{"id":461},"blogging",[463],{"type":228,"value":464},"Blogging",{"type":223,"tag":224,"props":466,"children":467},{},[468],{"type":228,"value":469},"In 2023, I \"only\" wrote 11 articles on my blog, which is fewer than the 15 articles I wrote in 2022 and significantly less than the 19 articles in 2021.",{"type":223,"tag":224,"props":471,"children":472},{},[473],{"type":228,"value":474},"For some of my articles, I created a GitHub repository with the code samples used in the article. That's something I intend to do more.",{"type":223,"tag":224,"props":476,"children":477},{},[478],{"type":223,"tag":396,"props":479,"children":483},{"alt":480,"className":481,"src":482},"Example of GitHub repository sample code for article.",[400,401],"/posts/images/2022_retro_github.webp",[],{"type":223,"tag":224,"props":485,"children":486},{},[487],{"type":228,"value":488},"My blog's traffic decreased a little (not enough articles this year I guess):",{"type":223,"tag":262,"props":490,"children":491},{},[492,497],{"type":223,"tag":266,"props":493,"children":494},{},[495],{"type":228,"value":496},"27K users vs 28K",{"type":223,"tag":266,"props":498,"children":499},{},[500],{"type":228,"value":501},"27K pages seen vs 37K",{"type":223,"tag":224,"props":503,"children":504},{},[505,507,514,516,523,525,531],{"type":228,"value":506},"I kept cross-posting all my articles on ",{"type":223,"tag":231,"props":508,"children":511},{"href":509,"rel":510},"https://techwatching.hashnode.dev/",[235],[512],{"type":228,"value":513},"Hashnode",{"type":228,"value":515}," and ",{"type":223,"tag":231,"props":517,"children":520},{"href":518,"rel":519},"https://dzone.com/users/4682620/techwatching.html",[235],[521],{"type":228,"value":522},"dev.to",{"type":228,"value":524},", and published two of them on ",{"type":223,"tag":231,"props":526,"children":528},{"href":518,"rel":527},[235],[529],{"type":228,"value":530},"DZone",{"type":228,"value":532},".",{"type":223,"tag":224,"props":534,"children":535},{},[536,538,545,547,554],{"type":228,"value":537},"Together with a friend, we initiated a ",{"type":223,"tag":231,"props":539,"children":542},{"href":540,"rel":541},"https://bordeauxcoders.com/series/pnpm-101",[235],[543],{"type":228,"value":544},"blog post series about pnpm",{"type":228,"value":546}," on a new team blog called \"",{"type":223,"tag":231,"props":548,"children":551},{"href":549,"rel":550},"https://bordeauxcoders.com/",[235],[552],{"type":228,"value":553},"Bordeaux Coders",{"type":228,"value":555},"\". It was enjoyable, but our motivation waned after the summer. We need to regain our motivation, start writing again, and perhaps find others interested in collaborating on this blog.",{"type":223,"tag":224,"props":557,"children":558},{},[559],{"type":223,"tag":396,"props":560,"children":564},{"alt":561,"className":562,"src":563},"Screenshot of th Bordeaux Coders' blog",[400,401],"/posts/images/2022_retro_blog.webp",[],{"type":223,"tag":224,"props":566,"children":567},{},[568,570,577],{"type":228,"value":569},"I have also co-authored an ",{"type":223,"tag":231,"props":571,"children":574},{"href":572,"rel":573},"https://www.avanade.com/fr-fr/blogs/le-blog/life-at-avanade/notre-expertise-au-service-des-nouvelles-generations",[235],[575],{"type":228,"value":576},"article on my company's blog",{"type":228,"value":578}," about something I have been doing for 5 years now: overseeing student projects at my former engineering school.",{"type":223,"tag":242,"props":580,"children":582},{"id":581},"school-relationships-and-teaching",[583],{"type":228,"value":584},"School Relationships and Teaching",{"type":223,"tag":224,"props":586,"children":587},{},[588],{"type":228,"value":589},"As I mentioned, this year I once again supervised a group of students on a small software development project over a few months. This experience provided the opportunity to:",{"type":223,"tag":262,"props":591,"children":592},{},[593,598,603,608],{"type":223,"tag":266,"props":594,"children":595},{},[596],{"type":228,"value":597},"Explore new tools and technologies",{"type":223,"tag":266,"props":599,"children":600},{},[601],{"type":228,"value":602},"Share knowledge with students and learn from them as well",{"type":223,"tag":266,"props":604,"children":605},{},[606],{"type":228,"value":607},"Grow (by wearing different hats and utilizing educational management skills)",{"type":223,"tag":266,"props":609,"children":610},{},[611],{"type":228,"value":612},"Promote my company's expertise and attract future talent",{"type":223,"tag":224,"props":614,"children":615},{},[616],{"type":228,"value":617},"For the first time, in 2023, I taught a DevOps course at the same engineering school. It was an optional module on DevOps practices for 2nd-year students.",{"type":223,"tag":224,"props":619,"children":620},{},[621],{"type":228,"value":622},"Building relationships with schools takes time and isn't always easy, but I enjoy doing it (and I'm not alone, as I have colleagues who help me). Unfortunately, I am uncertain whether my company will continue supporting me in this area next year, so I don't know what I will be able to do in 2024.",{"type":223,"tag":242,"props":624,"children":626},{"id":625},"whats-next",[627],{"type":223,"tag":628,"props":629,"children":630},"strong",{},[631],{"type":228,"value":632},"What's next?",{"type":223,"tag":224,"props":634,"children":635},{},[636,638,645,647,654],{"type":228,"value":637},"Together with two friends, we have started a tech community called \"",{"type":223,"tag":231,"props":639,"children":642},{"href":640,"rel":641},"https://www.meetup.com/mtg-bordeaux/",[235],[643],{"type":228,"value":644},"MTG:Bordeaux",{"type":228,"value":646},",\" which will host meetups in Bordeaux to discuss Microsoft technologies (among others) several times a year. It is affiliated with ",{"type":223,"tag":231,"props":648,"children":651},{"href":649,"rel":650},"https://www.mtg-france.org/",[235],[652],{"type":228,"value":653},"MTG:France",{"type":228,"value":655},", which already encompasses numerous local communities in various French cities. The inaugural meetup is scheduled for February 1, 2024, and I hope it will be the first of many.",{"type":223,"tag":224,"props":657,"children":658},{},[659],{"type":228,"value":660},"Instead of setting vague plans for 2024 that I might not fully achieve, I prefer creating a list of small, tangible goals for the year. I know I won't be able to accomplish all of them, but it will provide me with achievable objectives to work on throughout the year:",{"type":223,"tag":262,"props":662,"children":663},{},[664,669,674,679,684,689,708,713,718,730,735],{"type":223,"tag":266,"props":665,"children":666},{},[667],{"type":228,"value":668},"Organize 3 meetups for MTG:Bordeaux",{"type":223,"tag":266,"props":670,"children":671},{},[672],{"type":228,"value":673},"Obtain the official Vue.js certification",{"type":223,"tag":266,"props":675,"children":676},{},[677],{"type":228,"value":678},"Create a small speaker website in Nuxt, listing my previous talks",{"type":223,"tag":266,"props":680,"children":681},{},[682],{"type":228,"value":683},"Build a small application using Dapr and running in Azure Container Apps",{"type":223,"tag":266,"props":685,"children":686},{},[687],{"type":228,"value":688},"Write a blog post about Obsidian",{"type":223,"tag":266,"props":690,"children":691},{},[692,694,701,703],{"type":228,"value":693},"Write 2 articles for the ",{"type":223,"tag":231,"props":695,"children":698},{"href":696,"rel":697},"https://bordeauxcoders.com/series/vuejs-cicd",[235],[699],{"type":228,"value":700},"Vue CI/CD series",{"type":228,"value":702}," on ",{"type":223,"tag":231,"props":704,"children":706},{"href":549,"rel":705},[235],[707],{"type":228,"value":553},{"type":223,"tag":266,"props":709,"children":710},{},[711],{"type":228,"value":712},"Present at least 2 different talks at developer conferences",{"type":223,"tag":266,"props":714,"children":715},{},[716],{"type":228,"value":717},"Reach 1K followers on LinkedIn",{"type":223,"tag":266,"props":719,"children":720},{},[721,723],{"type":228,"value":722},"Add missing sections to the ",{"type":223,"tag":231,"props":724,"children":727},{"href":725,"rel":726},"https://github.com/TechWatching/pulumi-azure-workshop",[235],[728],{"type":228,"value":729},"Pulumi Azure Workshop",{"type":223,"tag":266,"props":731,"children":732},{},[733],{"type":228,"value":734},"Develop a 1-day Pulumi training course",{"type":223,"tag":266,"props":736,"children":737},{},[738],{"type":228,"value":739},"Create a YouTube video about a developer tool or technology",{"type":223,"tag":242,"props":741,"children":743},{"id":742},"to-conclude",[744],{"type":228,"value":745},"To conclude",{"type":223,"tag":224,"props":747,"children":748},{},[749],{"type":228,"value":750},"Despite not fully achieving my goals, 2023 was an interesting year, especially regarding public speaking. Looking ahead to 2024, I have outlined a series of concrete goals that emphasize continuous learning and community involvement.",{"type":223,"tag":224,"props":752,"children":753},{},[754],{"type":228,"value":755},"As I close the 2023 chapter, I want to thank 3 people:",{"type":223,"tag":262,"props":757,"children":758},{},[759,764,769],{"type":223,"tag":266,"props":760,"children":761},{},[762],{"type":228,"value":763},"Christian Bonnaud - you played a role in many aspects I mentioned in this article (school relationships, blogging, tech community, ...), and it's always a pleasure to collaborate with you.",{"type":223,"tag":266,"props":765,"children":766},{},[767],{"type":228,"value":768},"Xavier Noya - it was nice to give a talk alongside you this year at BDX I/O",{"type":223,"tag":266,"props":770,"children":771},{},[772],{"type":228,"value":773},"My life partner - I wouldn't be able to write these articles, prepare these talks, or accomplish everything I do without your support and understanding",{"type":223,"tag":224,"props":775,"children":776},{},[777],{"type":228,"value":778},"Enjoy 2024, and keep learning.",{"title":207,"searchDepth":780,"depth":780,"links":781},2,[782,783,784,785,786,787],{"id":244,"depth":780,"text":247},{"id":341,"depth":780,"text":344},{"id":461,"depth":780,"text":464},{"id":581,"depth":780,"text":584},{"id":625,"depth":780,"text":632},{"id":742,"depth":780,"text":745},"markdown","content:1.posts:57.2023-retro.md","content","1.posts/57.2023-retro.md","md",[794,809],{"_path":181,"_dir":205,"_draft":206,"_partial":206,"_locale":207,"title":180,"description":795,"lead":795,"date":796,"image":797,"badge":799,"tags":801,"ImageAttribution":806,"_type":788,"_id":807,"_source":790,"_file":808,"_extension":792},"Some tips about Azure and Azure DevOps.","2024-01-29T00:00:00.000Z",{"src":798},"/images/surface_1.jpg",{"label":800},"Tips",[802,803,804,805],"tips learned this week","Azure Functions","FinOps","Azure DevOps","Picture of \u003Ca href=\"https://unsplash.com/fr/@surface?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash\">Surface\u003C/a> on \u003Ca href=\"https://unsplash.com/fr/photos/appareil-surface-sur-la-table-taHYzvApW1o?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash\">Unsplash\u003C/a>","content:1.posts:58.w04-2024-tips-learned-this-week.md","1.posts/58.w04-2024-tips-learned-this-week.md",{"_path":175,"_dir":205,"_draft":206,"_partial":206,"_locale":207,"title":174,"description":810,"lead":811,"date":812,"image":813,"badge":815,"tags":817,"_type":788,"_id":823,"_source":790,"_file":824,"_extension":792},"In this article, we will explore the latest C# 12 and .NET 8 features by applying them to the basic dotnet Web API template.","Enhanced weather forecast API","2023-12-19T00:00:00.000Z",{"src":814},"/images/weather_flag.webp",{"label":816},"Development",[818,819,820,821,822],"csharp",".NET","ASP.NET Core","HTTP","advent","content:1.posts:56.playing-with-dotnet8.md","1.posts/56.playing-with-dotnet8.md",1716749601486]