[{"data":1,"prerenderedAt":807},["Reactive",2],{"navigation":3,"aAII9Cz3yR":204,"tags-Visio":397},[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",[205,207,209,211,214,217,220,223,226,229,231,234,237,240,242,244,247,250,253,255,258,261,264,267,270,273,276,279,282,285,287,289,292,294,297,300,303,305,308,310,313,316,319,322,325,327,329,332,335,338,341,344,347,350,353,356,359,361,363,366,369,372,375,377,380,383,385,388,391,394],[206,206],"tooling",[208,208],"vscode",[210,210],"rest",[212,213],"http","HTTP",[215,216],"razor","Razor",[218,219],"xamarin","Xamarin",[221,222],"templating","Templating",[224,225],"azure-cli","Azure CLI",[227,228],"azure","Azure",[230,230],"shell",[232,233],"github","GitHub",[235,236],"asp-net-core","ASP.NET Core",[238,239],"net",".NET",[241,241],"git",[243,243],"nushell",[245,246],"microsoft-teams","Microsoft Teams",[248,249],"powershell","PowerShell",[251,252],"azure-active-directory","Azure Active Directory",[254,254],"learning",[256,257],"azure-functions","Azure Functions",[259,260],"azure-key-vault","Azure Key Vault",[262,263],"configuration","Configuration",[265,266],"devops","DevOps",[268,269],"it","IT",[271,272],"tips-learned-this-week","tips learned this week",[274,275],"windows-terminal","Windows Terminal",[277,278],"azure-pipelines","Azure Pipelines",[280,281],"application-insights","Application Insights",[283,284],"azure-iot","Azure IoT",[286,286],"records",[288,288],"refit",[290,291],"development-box-setup","development box setup",[293,293],"winget",[295,296],"package-manager","package manager",[298,299],"azure-sql-database","Azure SQL Database",[301,302],"azure-sdk","Azure SDK",[304,304],"wingetcreate",[306,307],"github-actions","GitHub Actions",[309,309],"jq",[311,312],"pulumi","Pulumi",[314,315],"iac","IaC",[317,318],"azure-storage","Azure Storage",[320,321],"azure-signalr","Azure SignalR",[323,324],"visio","Visio",[326,326],"csharp",[328,328],"jest",[330,331],"statiq","Statiq",[333,334],"open-source","open source",[336,337],"visual-studio","Visual Studio",[339,340],"vue-js","Vue.js",[342,343],"azure-devops","Azure DevOps",[345,346],"vite","Vite",[348,349],"code-analysis","Code analysis",[351,352],"diagram","Diagram",[354,355],"terraform","Terraform",[357,358],"typescript","TypeScript",[360,360],"thoughts",[362,362],"pnpm",[364,365],"nuke","Nuke",[367,368],"pipelines","Pipelines",[370,371],"cicd","CI/CD",[373,374],"openid-connect","OpenID Connect",[376,376],"security",[378,379],"github-cli","GitHub CLI",[381,382],"microsoft-entra-id","Microsoft Entra ID",[384,384],"advent",[386,387],"finops","FinOps",[389,390],"anglesharp","AngleSharp",[392,393],"oauth2","OAuth2",[395,396],"azure-ad-b2c","Azure AD B2C",[398],{"_path":82,"_dir":399,"_draft":400,"_partial":400,"_locale":401,"title":81,"description":402,"lead":403,"date":404,"image":405,"badge":407,"tags":409,"body":410,"_type":802,"_id":803,"_source":804,"_file":805,"_extension":806},"posts",false,"","This week is mainly about learning Azure tooling.","Azure emulators, Use my current account Edge extension, Azure icons in Visio, and Azure Charts.","2021-10-04T00:00:00.000Z",{"src":406},"/images/surface_1.jpg",{"label":408},"Tips",[272,228,318,321,324],{"type":411,"children":412,"toc":791},"root",[413,420,427,434,439,451,467,544,558,564,577,590,599,604,613,627,646,652,657,666,697,703,708,730,746,752,766,775,780,785],{"type":414,"tag":415,"props":416,"children":417},"element","p",{},[418],{"type":419,"value":402},"text",{"type":414,"tag":421,"props":422,"children":424},"h2",{"id":423},"playing-with-new-emulators",[425],{"type":419,"value":426},"Playing with \"new\" emulators",{"type":414,"tag":428,"props":429,"children":431},"h3",{"id":430},"azure-signalr-local-emulator",[432],{"type":419,"value":433},"Azure SignalR Local Emulator",{"type":414,"tag":415,"props":435,"children":436},{},[437],{"type":419,"value":438},"This week I was playing with SignalR Service (using the serverless service mode) and I needed to debug my Azure Functions locally. While I was implementing the infrastructure as code to deploy the Azure SignalR Service resource to Azure, I realized that I did not need to do that to test my code as there was a local emulator for SignalR Service. This emulator is currently in preview but looks promising.",{"type":414,"tag":415,"props":440,"children":441},{},[442],{"type":414,"tag":443,"props":444,"children":450},"img",{"alt":445,"className":446,"src":449},"Azure SignalR Service emulator website.",[447,448],"rounded-lg","mx-auto","/posts/images/w392021tips_nuget_1.png",[],{"type":414,"tag":415,"props":452,"children":453},{},[454,456,465],{"type":419,"value":455},"It is available as a ",{"type":414,"tag":457,"props":458,"children":462},"a",{"href":459,"rel":460},"https://www.nuget.org/packages/Microsoft.Azure.SignalR.Emulator",[461],"nofollow",[463],{"type":419,"value":464},"dotnet tool",{"type":419,"value":466}," here so you can just install it by using the following command:",{"type":414,"tag":468,"props":469,"children":472},"pre",{"className":470,"code":471,"language":248,"meta":401,"style":401},"language-powershell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","dotnet tool install -g Microsoft.Azure.SignalR.Emulator --version 1.0.0-preview1-10809\n",[473],{"type":414,"tag":474,"props":475,"children":476},"code",{"__ignoreMap":401},[477],{"type":414,"tag":478,"props":479,"children":482},"span",{"class":480,"line":481},"line",1,[483,489,495,500,505,510,516,521,526,530,535,539],{"type":414,"tag":478,"props":484,"children":486},{"style":485},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[487],{"type":419,"value":488},"dotnet tool install ",{"type":414,"tag":478,"props":490,"children":492},{"style":491},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[493],{"type":419,"value":494},"-",{"type":414,"tag":478,"props":496,"children":497},{"style":485},[498],{"type":419,"value":499},"g Microsoft.Azure.SignalR.Emulator ",{"type":414,"tag":478,"props":501,"children":502},{"style":491},[503],{"type":419,"value":504},"--",{"type":414,"tag":478,"props":506,"children":507},{"style":485},[508],{"type":419,"value":509},"version ",{"type":414,"tag":478,"props":511,"children":513},{"style":512},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[514],{"type":419,"value":515},"1.0",{"type":414,"tag":478,"props":517,"children":518},{"style":485},[519],{"type":419,"value":520},".",{"type":414,"tag":478,"props":522,"children":523},{"style":512},[524],{"type":419,"value":525},"0",{"type":414,"tag":478,"props":527,"children":528},{"style":491},[529],{"type":419,"value":494},{"type":414,"tag":478,"props":531,"children":532},{"style":485},[533],{"type":419,"value":534},"preview1",{"type":414,"tag":478,"props":536,"children":537},{"style":491},[538],{"type":419,"value":494},{"type":414,"tag":478,"props":540,"children":541},{"style":512},[542],{"type":419,"value":543},"10809\n",{"type":414,"tag":415,"props":545,"children":546},{},[547,549,556],{"type":419,"value":548},"Have a look at the ",{"type":414,"tag":457,"props":550,"children":553},{"href":551,"rel":552},"https://github.com/Azure/azure-signalr/blob/dev/docs/emulator.md",[461],[554],{"type":419,"value":555},"documentation",{"type":419,"value":557}," if you want to learn more about it.",{"type":414,"tag":428,"props":559,"children":561},{"id":560},"azurite",[562],{"type":419,"value":563},"Azurite",{"type":414,"tag":415,"props":565,"children":566},{},[567,569,575],{"type":419,"value":568},"You probably have already heard about ",{"type":414,"tag":457,"props":570,"children":573},{"href":571,"rel":572},"https://github.com/Azure/Azurite",[461],[574],{"type":419,"value":563},{"type":419,"value":576}," the cross-platform emulator for local Azure Storage development. It is really useful when you are using queues, tables, or blobs from Azure Storage in your project and you want to debug your code with emulated versions of these services running locally. If you are developing Azure Functions you are certainly using an emulator for the storage but maybe not be aware of it.",{"type":414,"tag":415,"props":578,"children":579},{},[580,582,588],{"type":419,"value":581},"Azurite is the successor of Azure Storage Emulator but as the ",{"type":414,"tag":457,"props":583,"children":586},{"href":584,"rel":585},"https://docs.microsoft.com/en-us/azure/storage/common/storage-use-emulator",[461],[587],{"type":419,"value":555},{"type":419,"value":589}," says:",{"type":414,"tag":415,"props":591,"children":592},{},[593],{"type":414,"tag":443,"props":594,"children":598},{"alt":595,"className":596,"src":597},"Documentation about Azure Storage emulator deprecation.",[447,448],"/posts/images/w392021tips_azurite_1.png",[],{"type":414,"tag":415,"props":600,"children":601},{},[602],{"type":419,"value":603},"It's funny because I try to keep myself up-to-date on this kind of news but I did not know at all Azure Storage Emulator had been already deprecated in favor of Azurite for quite some time. Yet, as you can see in the following screenshot when you create a Function App with the \"storage emulator\" option selected you can see the Azurite emulator in your connected services:",{"type":414,"tag":415,"props":605,"children":606},{},[607],{"type":414,"tag":443,"props":608,"children":612},{"alt":609,"className":610,"src":611},"Service dependencies in Visual Studio.",[447,448],"/posts/images/w392021tips_vs_1.png",[],{"type":414,"tag":415,"props":614,"children":615},{},[616,618,625],{"type":419,"value":617},"You can check this ",{"type":414,"tag":457,"props":619,"children":622},{"href":620,"rel":621},"https://docs.microsoft.com/en-us/azure/storage/common/storage-use-azurite?tabs=visual-studio",[461],[623],{"type":419,"value":624},"tutorial",{"type":419,"value":626}," to see how to install and use Azurite.",{"type":414,"tag":628,"props":629,"children":631},"callout",{"icon":630},"i-heroicons-chat-bubble-left-20-solid",[632],{"type":414,"tag":415,"props":633,"children":634},{},[635,637,644],{"type":419,"value":636},"Be aware that Azurite is also available in a ",{"type":414,"tag":457,"props":638,"children":641},{"href":639,"rel":640},"https://marketplace.visualstudio.com/items?itemName=Azurite.azurite",[461],[642],{"type":419,"value":643},"vscode extension",{"type":419,"value":645}," which allows you to start and stop storage services individually. If you don't want to bother with the command line, using Azurite from vscode is a good option.",{"type":414,"tag":421,"props":647,"children":649},{"id":648},"using-your-edge-profile-and-skipping-the-account-prompt-screen-when-signing-into-microsoft-sites",[650],{"type":419,"value":651},"Using your Edge profile and skipping the account prompt screen when signing into Microsoft sites.",{"type":414,"tag":415,"props":653,"children":654},{},[655],{"type":419,"value":656},"As I have different Azure Active Directory accounts (for my company, for some of the clients I am working for, for testing purposes) it can be quite challenging to manage so I am using different Microsoft Edge profiles to keep things separated and to avoid signing out when switching from one account to another. However, even with different profiles, when you access a Microsoft site (Azure DevOps for instance) the browser prompts you to choose the account you want to use.",{"type":414,"tag":415,"props":658,"children":659},{},[660],{"type":414,"tag":443,"props":661,"children":665},{"alt":662,"className":663,"src":664},"Use my current account extension page.",[447,448],"/posts/images/w392021tips_extension_1.png",[],{"type":414,"tag":415,"props":667,"children":668},{},[669,671,677,679,686,688,695],{"type":419,"value":670},"Claire Novotny (currently executive director at the .NET Foundation and working in the .NET team at Microsoft) developed a Microsoft Edge extension ",{"type":414,"tag":474,"props":672,"children":674},{"className":673},[],[675],{"type":419,"value":676},"Use my current account",{"type":419,"value":678}," that solves this problem. This plugin is available ",{"type":414,"tag":457,"props":680,"children":683},{"href":681,"rel":682},"https://microsoftedge.microsoft.com/addons/detail/use-my-current-account/hbfacnnpimgddoojjaonnnbeljegicfl",[461],[684],{"type":419,"value":685},"here",{"type":419,"value":687}," to download and you can check the source code on ",{"type":414,"tag":457,"props":689,"children":692},{"href":690,"rel":691},"https://github.com/novotnyllc/UseMyCurrentAccount",[461],[693],{"type":419,"value":694},"this GitHub repository",{"type":419,"value":696},". It is a simple but very useful extension that I strongly encourage you to download if you use multiple Azure AD accounts.",{"type":414,"tag":421,"props":698,"children":700},{"id":699},"using-up-to-date-azure-icons-in-visio",[701],{"type":419,"value":702},"Using up-to-date Azure icons in Visio.",{"type":414,"tag":415,"props":704,"children":705},{},[706],{"type":419,"value":707},"I use Visio from time to time to create nice-looking Azure architecture diagrams (at least I try 😀). To do that I use Visio packages about Azure some people provide on GitHub and that contain all the Azure resources icons I need.",{"type":414,"tag":415,"props":709,"children":710},{},[711,713,720,722,728],{"type":419,"value":712},"Azure icons often change, and there are always new resources added so always downloading the latest version of these Visio packages is a bit cumbersome. Fortunately, my friend Xavier Mignot shared on his ",{"type":414,"tag":457,"props":714,"children":717},{"href":715,"rel":716},"https://blog.xmi.fr/posts/visio-tips-git-clone/",[461],[718],{"type":419,"value":719},"blog",{"type":419,"value":721}," a nice and simple solution for that problem: cloning the Visio packages git repositories under the ",{"type":414,"tag":474,"props":723,"children":725},{"className":724},[],[726],{"type":419,"value":727},"My Shapes",{"type":419,"value":729}," folder and regularly pulling new changes to have always up-to-date Azure icons.",{"type":414,"tag":628,"props":731,"children":732},{"icon":630},[733],{"type":414,"tag":415,"props":734,"children":735},{},[736,738,744],{"type":419,"value":737},"If you want more tips about Visio, check the other articles of Xavier on his ",{"type":414,"tag":457,"props":739,"children":742},{"href":740,"rel":741},"https://blog.xmi.fr/",[461],[743],{"type":419,"value":719},{"type":419,"value":745},", there are also articles about Azure, IoT, .NET...",{"type":414,"tag":421,"props":747,"children":749},{"id":748},"explore-azure-services-easily-with-azure-charts",[750],{"type":419,"value":751},"Explore Azure services easily with Azure Charts",{"type":414,"tag":415,"props":753,"children":754},{},[755,757,764],{"type":419,"value":756},"Microsoft's documentation is great but it is sometimes not easy to have a good overview of the services Azure provides. Finding basic things like the SLA of a service, the regions where it is available, and the learning resources to getting started on it can often take time. Unless you know about Alexey Polkovnikov's website ",{"type":414,"tag":457,"props":758,"children":761},{"href":759,"rel":760},"https://azurecharts.com/",[461],[762],{"type":419,"value":763},"Azure Charts",{"type":419,"value":765}," which gives you all that and much more in a visual way.",{"type":414,"tag":415,"props":767,"children":768},{},[769],{"type":414,"tag":443,"props":770,"children":774},{"alt":771,"className":772,"src":773},"Azure Charts website.",[447,448],"/posts/images/w392021tips_charts_1.png",[],{"type":414,"tag":415,"props":776,"children":777},{},[778],{"type":419,"value":779},"It's not a website I discovered this week but I showed it to a colleague this week and I thought (as each time I go on this website) that I should use it more often as it is a very useful tool.",{"type":414,"tag":415,"props":781,"children":782},{},[783],{"type":419,"value":784},"And that's it for this week, happy learning!",{"type":414,"tag":786,"props":787,"children":788},"style",{},[789],{"type":419,"value":790},"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":401,"searchDepth":792,"depth":792,"links":793},2,[794,799,800,801],{"id":423,"depth":792,"text":426,"children":795},[796,798],{"id":430,"depth":797,"text":433},3,{"id":560,"depth":797,"text":563},{"id":648,"depth":792,"text":651},{"id":699,"depth":792,"text":702},{"id":748,"depth":792,"text":751},"markdown","content:1.posts:25.w39-2021-tips-learned-this-week.md","content","1.posts/25.w39-2021-tips-learned-this-week.md","md",1716749600803]