[{"data":1,"prerenderedAt":579},["Reactive",2],{"navigation":3,"/posts/astral":204,"/posts/astral-surround":546},[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":94,"_dir":205,"_draft":206,"_partial":206,"_locale":207,"title":93,"description":208,"date":209,"lead":210,"image":211,"badge":213,"tags":215,"body":218,"_type":541,"_id":542,"_source":543,"_file":544,"_extension":545},"posts",false,"","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":212},"/images/stars_1.jpg",{"label":214},"Tooling",[216,217],"tooling","GitHub",{"type":219,"children":220,"toc":533},"root",[221,249,256,278,283,295,300,309,315,320,345,350,356,367,376,381,386,409,418,428,434,439,444,462,470,479,484,505,514,520],{"type":222,"tag":223,"props":224,"children":225},"element","p",{},[226,229,238,240,247],{"type":227,"value":228},"text","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 ",{"type":222,"tag":230,"props":231,"children":235},"a",{"href":232,"rel":233},"https://astralapp.com/",[234],"nofollow",[236],{"type":227,"value":237},"Astral",{"type":227,"value":239},", the web application that allows you to ",{"type":222,"tag":241,"props":242,"children":244},"code",{"className":243},[],[245],{"type":227,"value":246},"Organize Your GitHub Stars With Ease",{"type":227,"value":248},". That is what we are going to talk about in this article.",{"type":222,"tag":250,"props":251,"children":253},"h2",{"id":252},"github-stars-as-a-bookmarking-tool",[254],{"type":227,"value":255},"GitHub stars as a bookmarking tool.",{"type":222,"tag":223,"props":257,"children":258},{},[259,261,268,270,276],{"type":227,"value":260},"When you find an interesting GitHub repository, instead of adding it to your browser bookmarks among a lot of other websites, you can star it. As ",{"type":222,"tag":230,"props":262,"children":265},{"href":263,"rel":264},"https://docs.github.com/en/get-started/exploring-projects-on-github/saving-repositories-with-stars",[234],[266],{"type":227,"value":267},"GitHub Docs",{"type":227,"value":269}," say: ",{"type":222,"tag":241,"props":271,"children":273},{"className":272},[],[274],{"type":227,"value":275},"Starring make it easy to find a repository again later",{"type":227,"value":277},". Indeed usually, when I come across a nice GitHub repository, I want to go back to it later (to deep dive into the awesome framework I discover, to try this new open source tool, to have this useful sample somewhere when I will need it...).",{"type":222,"tag":223,"props":279,"children":280},{},[281],{"type":227,"value":282},"As you can see below, all the GitHub repositories you have starred can be found on your GitHub stars page.",{"type":222,"tag":223,"props":284,"children":285},{},[286],{"type":222,"tag":287,"props":288,"children":294},"img",{"alt":289,"className":290,"src":293},"\"Your stars\" menu in GitHub.",[291,292],"rounded-lg","mx-auto","/posts/images/astral_github_1.png",[],{"type":222,"tag":223,"props":296,"children":297},{},[298],{"type":227,"value":299},"In addition to that, you can sort, filter (by language or topic), and search starred repositories:",{"type":222,"tag":223,"props":301,"children":302},{},[303],{"type":222,"tag":287,"props":304,"children":308},{"alt":305,"className":306,"src":307},"Starred GitHub repositories filters.",[291,292],"/posts/images/astral_github_2.png",[],{"type":222,"tag":250,"props":310,"children":312},{"id":311},"have-you-seen-that-repository-i-am-looking-for",[313],{"type":227,"value":314},"Have you seen that repository I am looking for?",{"type":222,"tag":223,"props":316,"children":317},{},[318],{"type":227,"value":319},"Using GitHub stars to bookmark the repositories you are interested in is great but if you do it a lot, it can become hard to find later the repository you want. Even if it is possible to sort, filter, and search repositories, it is sometimes impossible to quickly find what you are looking for. And there are good reasons for that:",{"type":222,"tag":321,"props":322,"children":323},"ul",{},[324,330,335,340],{"type":222,"tag":325,"props":326,"children":327},"li",{},[328],{"type":227,"value":329},"You have starred this repository a long time ago, and it does not stand out from other repositories in terms of activity or number of stars so sorting won't help you",{"type":222,"tag":325,"props":331,"children":332},{},[333],{"type":227,"value":334},"Most of your starred repositories are in the same language so filters are useless",{"type":222,"tag":325,"props":336,"children":337},{},[338],{"type":227,"value":339},"The repository was not tagged with a topic that could help you to find it",{"type":222,"tag":325,"props":341,"children":342},{},[343],{"type":227,"value":344},"You don't remember the name of the repository",{"type":222,"tag":223,"props":346,"children":347},{},[348],{"type":227,"value":349},"The problem is that starred repositories can only be filtered with information that is not particularly useful to you. What we would need is something to organize the starred repositories in a way relevant to us. And here comes Astral.",{"type":222,"tag":250,"props":351,"children":353},{"id":352},"what-is-astral",[354],{"type":227,"value":355},"What is Astral?",{"type":222,"tag":223,"props":357,"children":358},{},[359,365],{"type":222,"tag":230,"props":360,"children":363},{"href":361,"rel":362},"https://github.com/astralapp/astral",[234],[364],{"type":227,"value":237},{"type":227,"value":366}," is an open source web application that helps you organize your starred repositories.",{"type":222,"tag":223,"props":368,"children":369},{},[370],{"type":222,"tag":287,"props":371,"children":375},{"alt":372,"className":373,"src":374},"Astral home website.",[291,292],"/posts/images/astral_app_1.png",[],{"type":222,"tag":223,"props":377,"children":378},{},[379],{"type":227,"value":380},"It solves the issues I was previously pointing out by allowing us to add tags to our starred repositories. That means I can create a tag with a meaningful name and add this tag to the appropriate repositories.",{"type":222,"tag":223,"props":382,"children":383},{},[384],{"type":227,"value":385},"Once grouped by tags, it becomes very easy to find the repositories you need. The interface is quite simple but shows all the information we need:",{"type":222,"tag":321,"props":387,"children":388},{},[389,394,399,404],{"type":222,"tag":325,"props":390,"children":391},{},[392],{"type":227,"value":393},"the list of starred repositories grouped by tags",{"type":222,"tag":325,"props":395,"children":396},{},[397],{"type":227,"value":398},"basic information for each repository (language, number of stars, number of pull requests, number of days since the last commit, the latest release, ...)",{"type":222,"tag":325,"props":400,"children":401},{},[402],{"type":227,"value":403},"a preview of the README file of the currently selected repository with the URL to quickly clone the repository",{"type":222,"tag":325,"props":405,"children":406},{},[407],{"type":227,"value":408},"a notes section where you can write extra information for each repository",{"type":222,"tag":223,"props":410,"children":411},{},[412],{"type":222,"tag":287,"props":413,"children":417},{"alt":414,"className":415,"src":416},"List of starred repositories in Astral.",[291,292],"/posts/images/astral_app_2.png",[],{"type":222,"tag":419,"props":420,"children":422},"callout",{"icon":421},"i-heroicons-chat-bubble-left-20-solid",[423],{"type":222,"tag":223,"props":424,"children":425},{},[426],{"type":227,"value":427},"Astral can also be self-hosted if you need. As it is a free web application, I don't see the point of self-hosting it but it is possible.",{"type":222,"tag":250,"props":429,"children":431},{"id":430},"how-do-i-use-astral",[432],{"type":227,"value":433},"How do I use Astral?",{"type":222,"tag":223,"props":435,"children":436},{},[437],{"type":227,"value":438},"I organize my starred repositories by grouping them with tags that I create in Astral and that are relevant to my way of categorizing things. That is the power of creating custom tags and assigning repositories to them, everyone can organize its starred repositories as it suits him or her.",{"type":222,"tag":223,"props":440,"children":441},{},[442],{"type":227,"value":443},"To be honest, I only started to use Astral recently so my organization is subject to change but here are kinds of tags I like to create:",{"type":222,"tag":321,"props":445,"children":446},{},[447,452,457],{"type":222,"tag":325,"props":448,"children":449},{},[450],{"type":227,"value":451},"Tags for different IT areas (like database, cloud, testing, IoT,..)",{"type":222,"tag":325,"props":453,"children":454},{},[455],{"type":227,"value":456},"Tags for the type of repository (like libraries, training, samples)",{"type":222,"tag":325,"props":458,"children":459},{},[460],{"type":227,"value":461},"Tags for the different frameworks I am interested in",{"type":222,"tag":419,"props":463,"children":464},{"icon":421},[465],{"type":222,"tag":223,"props":466,"children":467},{},[468],{"type":227,"value":469},"The language used in a repository is one thing but that does not say what framework is used (like ASP.NET Core, MAUI, Vue.js, React.js,...) and that can be a useful criterion when you are later looking for repositories using a specific framework",{"type":222,"tag":223,"props":471,"children":472},{},[473],{"type":222,"tag":287,"props":474,"children":478},{"alt":475,"className":476,"src":477},"Astral website with tags.",[291,292],"/posts/images/astral_app_3.png",[],{"type":222,"tag":223,"props":480,"children":481},{},[482],{"type":227,"value":483},"Starred repositories I have not yet tagged are located in the top left corner of the application. I try to tag a starred repository with different tags to help the future me looking for some repositories with multiple criteria.",{"type":222,"tag":223,"props":485,"children":486},{},[487,489,495,497,503],{"type":227,"value":488},"Speaking of multiple criteria, you can create ",{"type":222,"tag":241,"props":490,"children":492},{"className":491},[],[493],{"type":227,"value":494},"Smart Filters",{"type":227,"value":496}," in Astral to filter your starred repositories with specific rules. For instance, I created a smart filter called ",{"type":222,"tag":241,"props":498,"children":500},{"className":499},[],[501],{"type":227,"value":502},"Microsoft 365 samples",{"type":227,"value":504}," to list active repositories showing samples to build Microsoft 365 applications (Teams applications, applications using Microsoft Graph...). This is just an example but you can create much more complex filters.",{"type":222,"tag":223,"props":506,"children":507},{},[508],{"type":222,"tag":287,"props":509,"children":513},{"alt":510,"className":511,"src":512},"Smart filters in Astral.",[291,292],"/posts/images/astral_app_4.png",[],{"type":222,"tag":250,"props":515,"children":517},{"id":516},"to-conclude",[518],{"type":227,"value":519},"To conclude",{"type":222,"tag":223,"props":521,"children":522},{},[523,525,531],{"type":227,"value":524},"If you are often bookmarking GitHub repositories for future usage, Astral is a nice little web application to add to your toolbox. I found it by chance, but I liked it and I am now regularly using it. So try it and if you like it, give it a star and tag the repo with a ",{"type":222,"tag":241,"props":526,"children":528},{"className":527},[],[529],{"type":227,"value":530},"tools",{"type":227,"value":532}," tag in Astral 😉.",{"title":207,"searchDepth":534,"depth":534,"links":535},2,[536,537,538,539,540],{"id":252,"depth":534,"text":255},{"id":311,"depth":534,"text":314},{"id":352,"depth":534,"text":355},{"id":430,"depth":534,"text":433},{"id":516,"depth":534,"text":519},"markdown","content:1.posts:29.astral.md","content","1.posts/29.astral.md","md",[547,564],{"_path":97,"_dir":205,"_draft":206,"_partial":206,"_locale":207,"title":96,"description":548,"lead":549,"date":550,"badge":551,"image":553,"tags":555,"_type":541,"_id":562,"_source":543,"_file":563,"_extension":545},"By default when you use Pulumi, the state is managed by Pulumi Service which is very convenient as you can concentrate on building your project infrastructure instead of spending time on where to store the state and how to handle concurrency. However, sometimes for governance or pricing concerns, or any other reasons, you don't want to use Pulumi Service and you prefer to manage the state yourself with your own backend. In this article, we will see how we can do that using Azure.","Pulumi without Pulumi Service.","2021-12-14T00:00:00.000Z",{"label":552},"DevOps",{"src":554},"/images/cloud-crave_1.jpg",[556,557,558,559,560,561],"Pulumi","IaC","Azure CLI","Azure Storage","Azure Key Vault","Azure","content:1.posts:30.pulumi-azure-backend.md","1.posts/30.pulumi-azure-backend.md",{"_path":91,"_dir":205,"_draft":206,"_partial":206,"_locale":207,"title":90,"description":565,"lead":566,"date":567,"image":568,"badge":570,"tags":572,"_type":541,"_id":577,"_source":543,"_file":578,"_extension":545},"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":569},"/images/surface_1.jpg",{"label":571},"Tips",[573,574,575,576],"tips learned this week","Visual Studio","Vue.js","git","content:1.posts:28.w45-2021-tips-learned-this-week.md","1.posts/28.w45-2021-tips-learned-this-week.md",1716749601601]