56,966 blogs · [ { "id": "01a08753-3b0e-70a8-940b-5ddacc7c7b13", "title": "How does Aspire expose resource connection info to the Azure Functions runtime?", "url": "http://blog.safia.rocks/2026/01/14/aspire-functions-references/", "published_at": "2026-01-14T00:00:00+00:00" }, { "id": "01a08753-3b0e-70a8-940b-5ddaccf766c3", "title": "Reporting for duty: the story of IPipelineActivityReporter", "url": "http://blog.safia.rocks/2026/01/08/publishing-activity-reporter/", "published_at": "2026-01-08T00:00:00+00:00" }, { "id": "01a08753-3b0e-70a8-940b-5ddacd70f50b", "title": "Running out of 2025: a retro post", "url": "http://blog.safia.rocks/2025/12/31/end-of-year/", "published_at": "2025-12-31T00:00:00+00:00" }, { "id": "01a08753-3b0e-70a8-940b-5ddacdff2dc2", "title": "There's no escaping it: an exploration of ANSI codes", "url": "http://blog.safia.rocks/2025/12/22/ansi-codes/", "published_at": "2025-12-22T00:00:00+00:00" }, { "id": "01a08753-3b0e-70a8-940b-5ddacecb2ebd", "title": "Fixing Aspire's image problem: a look at container registry support in 13.1", "url": "http://blog.safia.rocks/2025/12/15/aspire-image-push/", "published_at": "2025-12-15T00:00:00+00:00" }, { "id": "01a08753-3b0e-70a8-940b-5ddacf11acc3", "title": "How does Aspire launch the Azure Functions runtime when you call aspire run?", "url": "http://blog.safia.rocks/2025/12/02/aspire-run-azure-functions/", "published_at": "2025-12-02T00:00:00+00:00" }, { "id": "01a08753-3b0e-70a8-940b-5ddad002b7b0", "title": "Anatomy of an API: an existential crisis with AsExisting()", "url": "http://blog.safia.rocks/2025/12/01/api-anatomy-asexisting/", "published_at": "2025-12-01T00:00:00+00:00" }, { "id": "01a08753-3b0e-70a8-940b-5ddad08a4457", "title": "Anatomy of an API: three ways to stream with ServerSentEvents()", "url": "http://blog.safia.rocks/2025/11/24/api-anatomy-server-sent-events/", "published_at": "2025-11-24T00:00:00+00:00" }, { "id": "01a08753-3b0e-70a8-940b-5ddad0dbd13a", "title": "Anatomy of an API: the small but mighty MapOpenApi()", "url": "http://blog.safia.rocks/2025/11/20/api-anatomy-mapopenapi/", "published_at": "2025-11-20T00:00:00+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8cf4a0cbf", "title": "Adventures in over-engineering: using AI to watch my $200 walking pad", "url": "http://blog.safia.rocks/2025/11/17/treadmill-overengineering/", "published_at": "2025-11-17T00:00:00+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8cf7fe5bd", "title": "And just like that .NET 10 ships tomorrow", "url": "http://blog.safia.rocks/2025/11/10/aspnetcore-ten/", "published_at": "2025-11-10T00:00:00+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8cfb64914", "title": "Pipe dreams to pipeline realities: an Aspire Pipelines story", "url": "http://blog.safia.rocks/2025/11/03/aspire-pipelines/", "published_at": "2025-11-03T00:00:00+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8d035d301", "title": "How I used AI to redesign Aspire's deploy CLI command", "url": "http://blog.safia.rocks/2025/10/27/aspire-deploy-cli-ux/", "published_at": "2025-10-27T00:00:00+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8d03f460a", "title": "Cache me if you can: a look at deployment state in Aspire", "url": "http://blog.safia.rocks/2025/10/20/aspire-deployment-state/", "published_at": "2025-10-20T00:00:00+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8d120ab7f", "title": "The docs write themselves: from XML doc comments to OpenAPI specs", "url": "http://blog.safia.rocks/2025/10/13/openapi-xml-generator/", "published_at": "2025-10-13T00:00:00+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8d1f91a7a", "title": "Design flashpoint: `aspire publish` vs `aspire deploy`", "url": "http://blog.safia.rocks/2025/10/06/aspire-publish-vs-deploy/", "published_at": "2025-10-06T00:00:00+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8d24b0e0d", "title": "Verifying the source of (generator) truth", "url": "http://blog.safia.rocks/2025/09/29/source-generators-testing/", "published_at": "2025-09-29T00:00:00+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8d2ce4279", "title": "The anti-prompt shell prompt", "url": "http://blog.safia.rocks/2025/09/22/anti-prompt/", "published_at": "2025-09-22T00:00:00+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8d3ca52f9", "title": "Design flashpoint: Execution modes in Aspire apps", "url": "http://blog.safia.rocks/2025/09/15/aspire-modes/", "published_at": "2025-09-15T00:00:00+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8d3d85395", "title": "Building custom deployment pipelines with Aspire", "url": "http://blog.safia.rocks/2025/09/07/aspire-deploy/", "published_at": "2025-09-07T00:00:00+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8d40cb87a", "title": "Git worktrees for fun and profit", "url": "http://blog.safia.rocks/2025/09/03/git-worktrees/", "published_at": "2025-09-03T00:00:00+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8d49fd843", "title": "A deep dive into OpenAPI support in ASP.NET Core", "url": "http://blog.safia.rocks/2024/05/27/openapi-in-aspnetcore/", "published_at": "2024-05-27T00:00:00+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8d5207cea", "title": "A deep dive into endpoint filters in ASP.NET Core 7", "url": "http://blog.safia.rocks/2022/10/19/endpoint-filters-exploration/", "published_at": "2022-10-19T00:00:00+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8d5b21b1e", "title": "Parameter optionality in Minimal APIs", "url": "http://blog.safia.rocks/2021/08/21/minimal-apis-optionality/", "published_at": "2021-08-21T00:00:00+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8d6aafd99", "title": "Under the hood with debugging in Blazor WebAssembly", "url": "http://blog.safia.rocks/2020/11/10/blazor-wasm-debugging/", "published_at": "2020-11-10T05:00:00+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8d734b087", "title": "Rolling in render trees", "url": "http://blog.safia.rocks/2020/10/27/rolling-in-render-trees/", "published_at": "2020-10-26T05:00:00+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8d73df0b4", "title": "Combing through ComponentBase", "url": "http://blog.safia.rocks/2020/10/14/combing-through-component-base/", "published_at": "2020-10-14T00:00:00+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8d7c474a3", "title": "Under the hood with routing in Blazor", "url": "http://blog.safia.rocks/2020/10/08/routing-in-blazor/", "published_at": "2020-10-08T00:00:00+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8d82f33f4", "title": "Advent of Code Day 3", "url": "http://blog.safia.rocks/2018/12/03/advent-of-code-day-3/", "published_at": "2018-12-04T03:39:23+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8d8f52c6a", "title": "Eh, ship it!", "url": "http://blog.safia.rocks/2018/12/02/eh-ship-it/", "published_at": "2018-12-03T03:38:33+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8d9f187d5", "title": "Oh gosh, I’m blogging again", "url": "http://blog.safia.rocks/2018/12/01/oh-gosh-im-blogging-again/", "published_at": "2018-12-01T21:24:03+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8da1159c5", "title": "Writing to win friends and influence people", "url": "http://blog.safia.rocks/2018/09/19/writing-to-win-friends-and-influence-people/", "published_at": "2018-09-20T05:05:51+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8dab28f1a", "title": "A purposeful hiatus", "url": "http://blog.safia.rocks/2018/05/18/a-purposeful-hiatus/", "published_at": "2018-05-18T15:15:54+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8dbae9e45", "title": "Looking into curl: part 2", "url": "http://blog.safia.rocks/2018/05/16/looking-into-curl-part-2/", "published_at": "2018-05-17T00:57:17+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8dc02d033", "title": "Looking at the curl stack trace: part 1", "url": "http://blog.safia.rocks/2018/05/14/looking-at-the-curl-stack-trace-part-1/", "published_at": "2018-05-14T17:00:46+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8dc9d92b0", "title": "Looking at how `curl` works through stack traces", "url": "http://blog.safia.rocks/2018/05/11/looking-at-how-curl-works-through-stack-traces/", "published_at": "2018-05-11T18:01:11+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8dd2778ed", "title": "What happens when you run `sudo !!`?", "url": "http://blog.safia.rocks/2018/05/09/what-happens-when-you-run-sudo/", "published_at": "2018-05-10T00:03:32+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8ddc7ecba", "title": "Looking at the stack trace for `ls`", "url": "http://blog.safia.rocks/2018/05/07/looking-at-the-stack-trace-for-ls/", "published_at": "2018-05-07T14:58:01+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8de2edff4", "title": "What do `cp` and `mv` do under the hood?", "url": "http://blog.safia.rocks/2018/05/04/what-do-cp-and-mv-do-under-the-hood/", "published_at": "2018-05-04T15:27:29+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8def2b713", "title": "I finally figured out how Unix redirection works under the hood", "url": "http://blog.safia.rocks/2018/05/02/i-finally-figured-out-how-unix-redirection-works/", "published_at": "2018-05-03T01:48:51+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8df086e2e", "title": "Reveling in redirects: exploring Unix input/output redirection", "url": "http://blog.safia.rocks/2018/04/30/reveling-in-redirects-exploring-unix-inputoutput/", "published_at": "2018-05-01T00:42:38+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8dff1d4ca", "title": "What happens when you run `cp` on the command line?", "url": "http://blog.safia.rocks/2018/04/27/what-happens-when-you-run-cp-on-the-command/", "published_at": "2018-04-28T00:13:35+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8e0433ab1", "title": "Peeking into `pwd`", "url": "http://blog.safia.rocks/2018/04/25/peeking-into-pwd/", "published_at": "2018-04-26T03:41:29+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8e0baab0c", "title": "Unraveling `rm`: what happens when you run it?", "url": "http://blog.safia.rocks/2018/04/23/unraveling-rm-what-happens-when-you-run-it/", "published_at": "2018-04-24T02:05:37+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8e0bf8c5c", "title": "Digging further into the curl code base", "url": "http://blog.safia.rocks/2018/04/20/digging-further-into-the-curl-code-base/", "published_at": "2018-04-21T02:25:10+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8e1572bdc", "title": "Figuring out how `curl` stores configurations", "url": "http://blog.safia.rocks/2018/04/18/figuring-out-how-curl-stores-configurations/", "published_at": "2018-04-18T18:25:32+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8e209d3fb", "title": "Curling up with the `curl` code base", "url": "http://blog.safia.rocks/2018/04/16/curling-up-with-the-curl-code-base/", "published_at": "2018-04-16T17:07:15+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8e3046f9a", "title": "Breathing room.", "url": "http://blog.safia.rocks/2018/04/13/breathing-room/", "published_at": "2018-04-13T21:13:17+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8e3c0e851", "title": "Sliding into security with scrypt", "url": "http://blog.safia.rocks/2018/04/11/sliding-into-security-with-scrypt/", "published_at": "2018-04-11T16:34:19+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8e41b6ae7", "title": "Answering “How do I write?”", "url": "http://blog.safia.rocks/2018/04/09/answering-how-do-i-write/", "published_at": "2018-04-09T18:53:06+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8e4bbb952", "title": "Doing user interviews while Black", "url": "http://blog.safia.rocks/2018/04/06/doing-user-interviews-while-black/", "published_at": "2018-04-06T16:15:59+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8e575786a", "title": "Back in style: Twitter Bootstrap", "url": "http://blog.safia.rocks/2018/04/04/back-in-style-twitter-bootstrap/", "published_at": "2018-04-04T16:46:57+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8e57a36d6", "title": "A blast from the past: Node.JS", "url": "http://blog.safia.rocks/2018/04/02/a-blast-from-the-past-nodejs/", "published_at": "2018-04-02T16:18:50+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8e5bf5432", "title": "Looking at the first commit of Redux", "url": "http://blog.safia.rocks/2018/03/30/looking-at-the-first-commit-of-redux/", "published_at": "2018-03-30T16:06:43+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8e5c64161", "title": "How does `git add` work under the hood?", "url": "http://blog.safia.rocks/2018/03/28/how-does-git-add-work-under-the-hood/", "published_at": "2018-03-28T16:37:59+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8e6251857", "title": "A complete story of what happens when you run `git commit`", "url": "http://blog.safia.rocks/2018/03/26/a-complete-story-of-what-happens-when-you-run-git/", "published_at": "2018-03-26T16:06:31+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8e7205b27", "title": "Learning more about how commits are represented in Git", "url": "http://blog.safia.rocks/2018/03/23/learning-more-about-how-commits-are-represented-in/", "published_at": "2018-03-23T16:43:49+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8e72541d1", "title": "36 lessons learned over 3.66 years", "url": "http://blog.safia.rocks/2018/03/21/36-lessons-learned-over-366-years/", "published_at": "2018-03-21T17:00:45+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8e7f7eb07", "title": "Reading code late at night and realizing that it’s not a good idea", "url": "http://blog.safia.rocks/2018/03/19/reading-code-late-at-night-and-realizing-that-its/", "published_at": "2018-03-19T15:49:01+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8e89af08d", "title": "What’s inside the `.git/objects` directory?", "url": "http://blog.safia.rocks/2018/03/16/whats-inside-the-gitobjects-directory/", "published_at": "2018-03-16T17:00:45+00:00" }, { "id": "01a08753-3b0f-70c8-866c-50c8e9129b8b", "title": "How does Git know if you have uncommitted changes in the working tree? (Part 1)", "url": "http://blog.safia.rocks/2018/03/14/how-does-git-know-if-you-have-uncommitted-changes/", "published_at": "2018-03-14T17:41:00+00:00" }, { "id": "01a08753-3b10-715a-952d-62c339d3c11c", "title": "How does Git store working tree state?", "url": "http://blog.safia.rocks/2018/03/12/how-does-git-store-working-tree-state/", "published_at": "2018-03-12T16:30:43+00:00" }, { "id": "01a08753-3b10-715a-952d-62c33a3961c8", "title": "Trying to figure out how git-status works: a saga", "url": "http://blog.safia.rocks/2018/03/09/trying-to-figure-out-how-git-status-works-a-saga/", "published_at": "2018-03-09T17:08:47+00:00" }, { "id": "01a08753-3b10-715a-952d-62c33b07908b", "title": "What’s in a git config?", "url": "http://blog.safia.rocks/2018/03/07/whats-in-a-git-config/", "published_at": "2018-03-07T16:30:26+00:00" }, { "id": "01a08753-3b10-715a-952d-62c33b6eb429", "title": "What’s inside the .git directory?", "url": "http://blog.safia.rocks/2018/03/05/whats-inside-the-git-directory/", "published_at": "2018-03-05T18:01:10+00:00" }, { "id": "01a08753-3b10-715a-952d-62c33bf36eb8", "title": "Getting into git init", "url": "http://blog.safia.rocks/2018/03/02/getting-into-git-init/", "published_at": "2018-03-02T16:03:00+00:00" }, { "id": "01a08753-3b10-715a-952d-62c33cdb0f77", "title": "Looking into ls", "url": "http://blog.safia.rocks/2018/02/28/looking-into-ls/", "published_at": "2018-02-28T17:37:03+00:00" }, { "id": "01a08753-3b10-715a-952d-62c33cf887c8", "title": "What happens when you run sudo?", "url": "http://blog.safia.rocks/2018/02/23/what-happens-when-you-run-sudo/", "published_at": "2018-02-23T17:19:30+00:00" }, { "id": "01a08753-3b10-715a-952d-62c33d56e8a8", "title": "Some thoughts on “productivity”", "url": "http://blog.safia.rocks/2018/02/21/some-thoughts-on-productivity/", "published_at": "2018-02-21T16:54:40+00:00" }, { "id": "01a08753-3b10-715a-952d-62c33de5cd5e", "title": "Thoughts on Black Panther", "url": "http://blog.safia.rocks/2018/02/19/thoughts-on-black-panther/", "published_at": "2018-02-19T17:12:14+00:00" }, { "id": "01a08753-3b10-715a-952d-62c33e4ecb48", "title": "We have no idea what we’re doing.", "url": "http://blog.safia.rocks/2018/02/16/we-have-no-idea-what-were-doing/", "published_at": "2018-02-16T18:30:44+00:00" }, { "id": "01a08753-3b10-715a-952d-62c33f008997", "title": "How do I get started contributing to open source?", "url": "http://blog.safia.rocks/2018/02/14/how-do-i-get-started-contributing-to-open-source/", "published_at": "2018-02-14T23:04:37+00:00" }, { "id": "01a08753-3b10-715a-952d-62c33fdd9ca0", "title": "A retrospective on my tech job search", "url": "http://blog.safia.rocks/2018/02/12/a-retrospective-on-my-tech-job-search/", "published_at": "2018-02-12T18:40:31+00:00" }, { "id": "01a08753-3b31-71ad-933e-7e310e96030f", "title": "Three easy pieces: data science", "url": "http://blog.safia.rocks/2018/02/09/three-easy-pieces-data-science/", "published_at": "2018-02-09T18:45:05+00:00" }, { "id": "01a08753-3b32-7137-9022-d86beb275721", "title": "Discovering async hooks", "url": "http://blog.safia.rocks/2018/02/07/discovering-async-hooks/", "published_at": "2018-02-07T18:15:04+00:00" }, { "id": "01a08753-3b32-7137-9022-d86beb2f86f2", "title": "Random thoughts on “heroes”", "url": "http://blog.safia.rocks/2018/02/05/random-thoughts-on-heroes/", "published_at": "2018-02-05T18:30:42+00:00" }, { "id": "01a08753-3b33-7391-914c-39743bd10e78", "title": "In which I answer questions about conference speaking", "url": "http://blog.safia.rocks/2018/02/02/in-which-i-answer-questions-about-conference/", "published_at": "2018-02-02T17:34:20+00:00" }, { "id": "01a08753-3b33-7391-914c-39743c6875c6", "title": "Solving a problem then thinking too hard about how you solved the problem", "url": "http://blog.safia.rocks/2018/01/31/solving-a-problem-then-thinking-too-hard-about-how/", "published_at": "2018-01-31T18:03:06+00:00" }, { "id": "01a08753-3b33-7391-914c-39743c881b96", "title": "Tips for reading new codebases", "url": "http://blog.safia.rocks/2018/01/29/tips-for-reading-new-codebases/", "published_at": "2018-01-29T18:00:54+00:00" }, { "id": "01a08753-3b33-7391-914c-39743cca1c83", "title": "How do Promises work under the hood?", "url": "http://blog.safia.rocks/2018/01/26/how-do-promises-work-under-the-hood/", "published_at": "2018-01-26T18:27:44+00:00" }, { "id": "01a08753-3b33-7391-914c-39743d8d9593", "title": "Problem solving with Safia: the optimizer’s dilemma", "url": "http://blog.safia.rocks/2018/01/24/problem-solving-with-safia-the/", "published_at": "2018-01-24T18:11:51+00:00" }, { "id": "01a08753-3b33-7391-914c-39743e3f2d8a", "title": "How I learned to learn", "url": "http://blog.safia.rocks/2018/01/22/how-i-learned-to-learn/", "published_at": "2018-01-22T18:23:55+00:00" }, { "id": "01a08753-3b33-7391-914c-39743ef3d2bd", "title": "Node module deep-dive: os", "url": "http://blog.safia.rocks/2018/01/19/node-module-deep-dive-os/", "published_at": "2018-01-19T18:00:27+00:00" }, { "id": "01a08753-3b33-7391-914c-39743f56c83f", "title": "How does Node load built-in modules?", "url": "http://blog.safia.rocks/2018/01/17/how-does-node-load-built-in-modules/", "published_at": "2018-01-17T17:51:26+00:00" }, { "id": "01a08753-3b33-7391-914c-39743f5f5108", "title": "How does the Node main process start?", "url": "http://blog.safia.rocks/2018/01/15/how-does-the-node-main-process-start/", "published_at": "2018-01-15T17:21:07+00:00" }, { "id": "01a08753-3b33-7391-914c-397440098a2b", "title": "Node module deep-dive: EventEmitter", "url": "http://blog.safia.rocks/2018/01/12/node-module-deep-dive-eventemitter/", "published_at": "2018-01-12T16:58:35+00:00" }, { "id": "01a08753-3b33-7391-914c-397440c3e325", "title": "How does process.binding() in Node work?", "url": "http://blog.safia.rocks/2018/01/10/how-does-processbinding-in-node-work/", "published_at": "2018-01-10T17:05:54+00:00" }, { "id": "01a08753-3b33-7391-914c-397440dacaf7", "title": "Node module deep-dive: fs", "url": "http://blog.safia.rocks/2018/01/08/node-module-deep-dive-fs/", "published_at": "2018-01-08T17:18:39+00:00" }, { "id": "01a08753-3b33-7391-914c-3974418419b6", "title": "Node module deep-dive: child_process", "url": "http://blog.safia.rocks/2018/01/05/node-module-deep-dive-childprocess/", "published_at": "2018-01-05T17:03:09+00:00" }, { "id": "01a08753-3b33-7391-914c-3974421e8c73", "title": "Node module deep-dive: module", "url": "http://blog.safia.rocks/2018/01/03/node-module-deep-dive-module/", "published_at": "2018-01-03T17:31:25+00:00" }, { "id": "01a08753-3b34-7299-ab4b-e664eef387f8", "title": "How to (re-)launch a product", "url": "http://blog.safia.rocks/2018/01/01/how-to-re-launch-a-product/", "published_at": "2018-01-01T17:19:42+00:00" }, { "id": "01a08753-3b34-7299-ab4b-e664ef029487", "title": "Things I learned in 2017", "url": "http://blog.safia.rocks/2017/12/29/things-i-learned-in-2017/", "published_at": "2017-12-29T19:16:31+00:00" }, { "id": "01a08753-3b34-7299-ab4b-e664ef0f54b3", "title": "Vacuuming your app", "url": "http://blog.safia.rocks/2017/12/27/vacuuming-your-app/", "published_at": "2017-12-27T17:53:00+00:00" }, { "id": "01a08753-3b35-7056-b416-8321a6a0aaf3", "title": "What I learned when I tried to hack my smart vibrator", "url": "http://blog.safia.rocks/2017/12/11/what-i-learned-when-i-tried-to-hack-my-smart/", "published_at": "2017-12-11T17:37:45+00:00" }, { "id": "01a08753-3b36-72d2-8493-ebd701577983", "title": "Node module deep-dive: Buffer", "url": "http://blog.safia.rocks/2017/12/04/node-module-deep-dive-buffer/", "published_at": "2017-12-04T09:50:11+00:00" }, { "id": "01a08753-3b36-72d2-8493-ebd701bc3b68", "title": "My grandmother passed away today.", "url": "http://blog.safia.rocks/2017/11/30/my-grandmother-passed-away-today/", "published_at": "2017-11-30T23:25:29+00:00" }, { "id": "01a08753-3b36-72d2-8493-ebd702af4a02", "title": "Node module deep-dive: console", "url": "http://blog.safia.rocks/2017/11/27/node-module-deep-dive-console/", "published_at": "2017-11-27T18:00:41+00:00" }, { "id": "01a08753-3b36-72d2-8493-ebd702bb128f", "title": "Node module deep-dive: WriteableStream", "url": "http://blog.safia.rocks/2017/11/20/node-module-deep-dive-writeablestream/", "published_at": "2017-11-20T18:00:50+00:00" }, { "id": "01a08753-3b36-72d2-8493-ebd703057b66", "title": "How to monetize open source", "url": "http://blog.safia.rocks/2017/11/17/how-to-monetize-open-source/", "published_at": "2017-11-17T18:00:38+00:00" }, { "id": "01a08753-3b36-72d2-8493-ebd703fe522f", "title": "Node module deep-dive: path", "url": "http://blog.safia.rocks/2017/11/13/node-module-deep-dive-path/", "published_at": "2017-11-13T18:00:59+00:00" } ] posts Claim your blog
Back to blog.safia.rocks
Blog · corpus.blog/blogs/blog.safia.rocks/posts

blog.safia.rocks

blog.safia.rocks

2026

2025

2024

2022

2021

2020

2018

2017