{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "jaf.run · from another perspective",
  "home_page_url": "https://jaf.run/en/",
  "feed_url": "https://jaf.run/feed.json",
  "description": "Essays by Jafran Hasan on developer tools, types, small languages, philosophy, religion, and field notes from the road.",
  "language": "en",
  "authors": [
    {
      "name": "Jafran Hasan",
      "url": "https://jaf.run/en/about",
      "email": "mail@jaf.run"
    }
  ],
  "items": [
    {
      "id": "https://jaf.run/en/articles/the-shape-of-a-good-cli",
      "url": "https://jaf.run/en/articles/the-shape-of-a-good-cli",
      "title": "The shape of a good CLI",
      "content_text": "Most CLIs are accidents. They evolve from a script someone wrote on a Tuesday. The good ones share a small set of choices made early: about defaults, verbs, and how silence should feel.",
      "summary": "Most CLIs are accidents. They evolve from a script someone wrote on a Tuesday. The good ones share a small set of choices made early: about defaults, verbs, and how silence should feel.",
      "date_published": "2026-04-22T00:00:00.000Z",
      "language": "en",
      "tags": [
        "tools",
        "design",
        "dx"
      ]
    },
    {
      "id": "https://jaf.run/en/articles/static-types-for-config-files",
      "url": "https://jaf.run/en/articles/static-types-for-config-files",
      "title": "Static types for config files (and why your IDE hates you)",
      "content_text": "A YAML file is a typed object whose type is hidden in a wiki page from 2019. We can do better, and the fix is mostly about where the schema lives, not what language it's in.",
      "summary": "A YAML file is a typed object whose type is hidden in a wiki page from 2019. We can do better, and the fix is mostly about where the schema lives, not what language it's in.",
      "date_published": "2026-04-03T00:00:00.000Z",
      "language": "en",
      "tags": [
        "types",
        "tooling"
      ]
    },
    {
      "id": "https://jaf.run/en/articles/notes-on-rebuilding-my-feed-reader",
      "url": "https://jaf.run/en/articles/notes-on-rebuilding-my-feed-reader",
      "title": "Notes on rebuilding my feed reader (again)",
      "content_text": "Third rewrite. Same UI, different engine. I keep arriving at the same shape: a list, a column, a single quiet keystroke for 'next'.",
      "summary": "Third rewrite. Same UI, different engine. I keep arriving at the same shape: a list, a column, a single quiet keystroke for 'next'.",
      "date_published": "2026-03-18T00:00:00.000Z",
      "language": "en",
      "tags": [
        "side-projects",
        "rss"
      ]
    },
    {
      "id": "https://jaf.run/en/articles/small-models-big-context",
      "url": "https://jaf.run/en/articles/small-models-big-context",
      "title": "Small models, big context: a practical note",
      "content_text": "An honest writeup of running a 7B model with a 200k context window in production for a month. What broke, what surprised me, what I'd skip next time.",
      "summary": "An honest writeup of running a 7B model with a 200k context window in production for a month. What broke, what surprised me, what I'd skip next time.",
      "date_published": "2026-02-27T00:00:00.000Z",
      "language": "en",
      "tags": [
        "ml",
        "infra"
      ]
    },
    {
      "id": "https://jaf.run/en/articles/on-believing-things-you-cannot-prove",
      "url": "https://jaf.run/en/articles/on-believing-things-you-cannot-prove",
      "title": "On believing things you cannot prove",
      "content_text": "Engineers are taught to distrust anything that can't be falsified. Faith, religious or otherwise, asks us to hold beliefs that resist that test. I've come to think both habits live in the same person, and they should.",
      "summary": "Engineers are taught to distrust anything that can't be falsified. Faith, religious or otherwise, asks us to hold beliefs that resist that test. I've come to think both habits live in the same person, and they should.",
      "date_published": "2026-02-09T00:00:00.000Z",
      "language": "en",
      "tags": [
        "philosophy",
        "religion"
      ]
    },
    {
      "id": "https://jaf.run/en/articles/ssh-as-a-protocol-not-a-shell",
      "url": "https://jaf.run/en/articles/ssh-as-a-protocol-not-a-shell",
      "title": "SSH as a protocol, not a shell",
      "content_text": "If you only use SSH to get a terminal, you're missing the more interesting half. A tour of port forwards, multiplexing, and using SSH as glue.",
      "summary": "If you only use SSH to get a terminal, you're missing the more interesting half. A tour of port forwards, multiplexing, and using SSH as glue.",
      "date_published": "2026-01-21T00:00:00.000Z",
      "language": "en",
      "tags": [
        "networks",
        "unix"
      ]
    },
    {
      "id": "https://jaf.run/en/articles/a-monastery-with-wifi",
      "url": "https://jaf.run/en/articles/a-monastery-with-wifi",
      "title": "A monastery with wifi: notes from Bhutan",
      "content_text": "The monks at Tango Goemba have a small server room behind a thangka. I went looking for silence and found a quiet conversation about attention instead.",
      "summary": "The monks at Tango Goemba have a small server room behind a thangka. I went looking for silence and found a quiet conversation about attention instead.",
      "date_published": "2025-12-30T00:00:00.000Z",
      "language": "en",
      "tags": [
        "travel",
        "religion",
        "notes"
      ]
    },
    {
      "id": "https://jaf.run/en/articles/a-year-of-running-from-a-laptop",
      "url": "https://jaf.run/en/articles/a-year-of-running-from-a-laptop",
      "title": "A year of running everything from a laptop",
      "content_text": "No cloud. No VPS. A loud fan and a domain name. What I learned about uptime, electricity, and the difference between a hobby and a habit.",
      "summary": "No cloud. No VPS. A loud fan and a domain name. What I learned about uptime, electricity, and the difference between a hobby and a habit.",
      "date_published": "2025-12-04T00:00:00.000Z",
      "language": "en",
      "tags": [
        "infra",
        "side-projects"
      ]
    },
    {
      "id": "https://jaf.run/en/articles/stoicism-is-not-a-personality",
      "url": "https://jaf.run/en/articles/stoicism-is-not-a-personality",
      "title": "Stoicism is not a personality",
      "content_text": "The version of Stoicism that gets sold online is mostly aesthetic. The actual texts are stranger, quieter, and far more interested in other people than the LinkedIn version lets on.",
      "summary": "The version of Stoicism that gets sold online is mostly aesthetic. The actual texts are stranger, quieter, and far more interested in other people than the LinkedIn version lets on.",
      "date_published": "2025-11-12T00:00:00.000Z",
      "language": "en",
      "tags": [
        "philosophy",
        "notes"
      ]
    },
    {
      "id": "https://jaf.run/en/articles/the-quiet-keyboard-shortcut",
      "url": "https://jaf.run/en/articles/the-quiet-keyboard-shortcut",
      "title": "The quiet keyboard shortcut",
      "content_text": "The best shortcut in any app I use is the one that does nothing. It just dismisses things. Esc, with care.",
      "summary": "The best shortcut in any app I use is the one that does nothing. It just dismisses things. Esc, with care.",
      "date_published": "2025-10-28T00:00:00.000Z",
      "language": "en",
      "tags": [
        "tools",
        "dx"
      ]
    },
    {
      "id": "https://jaf.run/en/articles/two-weeks-in-a-japanese-cafe",
      "url": "https://jaf.run/en/articles/two-weeks-in-a-japanese-cafe",
      "title": "Two weeks of writing from a kissaten",
      "content_text": "I spent fourteen mornings in the same coffee shop in Kanazawa, ordering the same thing, in a language I barely speak. Here's what happens to a draft when you remove every variable but the page.",
      "summary": "I spent fourteen mornings in the same coffee shop in Kanazawa, ordering the same thing, in a language I barely speak. Here's what happens to a draft when you remove every variable but the page.",
      "date_published": "2025-09-15T00:00:00.000Z",
      "language": "en",
      "tags": [
        "travel",
        "writing"
      ]
    },
    {
      "id": "https://jaf.run/en/articles/a-tiny-language-for-todos",
      "url": "https://jaf.run/en/articles/a-tiny-language-for-todos",
      "title": "A tiny language for todos",
      "content_text": "I built a parser for the way I already write todos in plain text. Tags, dates, priorities, and a single character for 'maybe'.",
      "summary": "I built a parser for the way I already write todos in plain text. Tags, dates, priorities, and a single character for 'maybe'.",
      "date_published": "2025-08-22T00:00:00.000Z",
      "language": "en",
      "tags": [
        "side-projects",
        "languages"
      ]
    }
  ]
}