<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://jaf.run/</id>
  <title>jaf.run · from another perspective</title>
  <subtitle>Essays by Jafran Hasan.</subtitle>
  <link rel="self" href="https://jaf.run/atom.xml"/>
  <link rel="alternate" href="https://jaf.run/en/"/>
  <updated>2026-04-22T00:00:00.000Z</updated>
  <author><name>Jafran Hasan</name><email>mail@jaf.run</email></author>
<entry xml:lang="en">
  <id>https://jaf.run/en/articles/the-shape-of-a-good-cli</id>
  <title>The shape of a good CLI</title>
  <link href="https://jaf.run/en/articles/the-shape-of-a-good-cli"/>
  <updated>2026-04-22T00:00:00.000Z</updated>
  <published>2026-04-22T00:00:00.000Z</published>
  <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.</summary>
  <author><name>Jafran Hasan</name><email>mail@jaf.run</email></author>
  <category term="tools"/><category term="design"/><category term="dx"/>
</entry>
<entry xml:lang="en">
  <id>https://jaf.run/en/articles/static-types-for-config-files</id>
  <title>Static types for config files (and why your IDE hates you)</title>
  <link href="https://jaf.run/en/articles/static-types-for-config-files"/>
  <updated>2026-04-03T00:00:00.000Z</updated>
  <published>2026-04-03T00:00:00.000Z</published>
  <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&apos;s in.</summary>
  <author><name>Jafran Hasan</name><email>mail@jaf.run</email></author>
  <category term="types"/><category term="tooling"/>
</entry>
<entry xml:lang="en">
  <id>https://jaf.run/en/articles/notes-on-rebuilding-my-feed-reader</id>
  <title>Notes on rebuilding my feed reader (again)</title>
  <link href="https://jaf.run/en/articles/notes-on-rebuilding-my-feed-reader"/>
  <updated>2026-03-18T00:00:00.000Z</updated>
  <published>2026-03-18T00:00:00.000Z</published>
  <summary>Third rewrite. Same UI, different engine. I keep arriving at the same shape: a list, a column, a single quiet keystroke for &apos;next&apos;.</summary>
  <author><name>Jafran Hasan</name><email>mail@jaf.run</email></author>
  <category term="side-projects"/><category term="rss"/>
</entry>
<entry xml:lang="en">
  <id>https://jaf.run/en/articles/small-models-big-context</id>
  <title>Small models, big context: a practical note</title>
  <link href="https://jaf.run/en/articles/small-models-big-context"/>
  <updated>2026-02-27T00:00:00.000Z</updated>
  <published>2026-02-27T00:00:00.000Z</published>
  <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&apos;d skip next time.</summary>
  <author><name>Jafran Hasan</name><email>mail@jaf.run</email></author>
  <category term="ml"/><category term="infra"/>
</entry>
<entry xml:lang="en">
  <id>https://jaf.run/en/articles/on-believing-things-you-cannot-prove</id>
  <title>On believing things you cannot prove</title>
  <link href="https://jaf.run/en/articles/on-believing-things-you-cannot-prove"/>
  <updated>2026-02-09T00:00:00.000Z</updated>
  <published>2026-02-09T00:00:00.000Z</published>
  <summary>Engineers are taught to distrust anything that can&apos;t be falsified. Faith, religious or otherwise, asks us to hold beliefs that resist that test. I&apos;ve come to think both habits live in the same person, and they should.</summary>
  <author><name>Jafran Hasan</name><email>mail@jaf.run</email></author>
  <category term="philosophy"/><category term="religion"/>
</entry>
<entry xml:lang="en">
  <id>https://jaf.run/en/articles/ssh-as-a-protocol-not-a-shell</id>
  <title>SSH as a protocol, not a shell</title>
  <link href="https://jaf.run/en/articles/ssh-as-a-protocol-not-a-shell"/>
  <updated>2026-01-21T00:00:00.000Z</updated>
  <published>2026-01-21T00:00:00.000Z</published>
  <summary>If you only use SSH to get a terminal, you&apos;re missing the more interesting half. A tour of port forwards, multiplexing, and using SSH as glue.</summary>
  <author><name>Jafran Hasan</name><email>mail@jaf.run</email></author>
  <category term="networks"/><category term="unix"/>
</entry>
<entry xml:lang="en">
  <id>https://jaf.run/en/articles/a-monastery-with-wifi</id>
  <title>A monastery with wifi: notes from Bhutan</title>
  <link href="https://jaf.run/en/articles/a-monastery-with-wifi"/>
  <updated>2025-12-30T00:00:00.000Z</updated>
  <published>2025-12-30T00:00:00.000Z</published>
  <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.</summary>
  <author><name>Jafran Hasan</name><email>mail@jaf.run</email></author>
  <category term="travel"/><category term="religion"/><category term="notes"/>
</entry>
<entry xml:lang="en">
  <id>https://jaf.run/en/articles/a-year-of-running-from-a-laptop</id>
  <title>A year of running everything from a laptop</title>
  <link href="https://jaf.run/en/articles/a-year-of-running-from-a-laptop"/>
  <updated>2025-12-04T00:00:00.000Z</updated>
  <published>2025-12-04T00:00:00.000Z</published>
  <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.</summary>
  <author><name>Jafran Hasan</name><email>mail@jaf.run</email></author>
  <category term="infra"/><category term="side-projects"/>
</entry>
<entry xml:lang="en">
  <id>https://jaf.run/en/articles/stoicism-is-not-a-personality</id>
  <title>Stoicism is not a personality</title>
  <link href="https://jaf.run/en/articles/stoicism-is-not-a-personality"/>
  <updated>2025-11-12T00:00:00.000Z</updated>
  <published>2025-11-12T00:00:00.000Z</published>
  <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.</summary>
  <author><name>Jafran Hasan</name><email>mail@jaf.run</email></author>
  <category term="philosophy"/><category term="notes"/>
</entry>
<entry xml:lang="en">
  <id>https://jaf.run/en/articles/the-quiet-keyboard-shortcut</id>
  <title>The quiet keyboard shortcut</title>
  <link href="https://jaf.run/en/articles/the-quiet-keyboard-shortcut"/>
  <updated>2025-10-28T00:00:00.000Z</updated>
  <published>2025-10-28T00:00:00.000Z</published>
  <summary>The best shortcut in any app I use is the one that does nothing. It just dismisses things. Esc, with care.</summary>
  <author><name>Jafran Hasan</name><email>mail@jaf.run</email></author>
  <category term="tools"/><category term="dx"/>
</entry>
<entry xml:lang="en">
  <id>https://jaf.run/en/articles/two-weeks-in-a-japanese-cafe</id>
  <title>Two weeks of writing from a kissaten</title>
  <link href="https://jaf.run/en/articles/two-weeks-in-a-japanese-cafe"/>
  <updated>2025-09-15T00:00:00.000Z</updated>
  <published>2025-09-15T00:00:00.000Z</published>
  <summary>I spent fourteen mornings in the same coffee shop in Kanazawa, ordering the same thing, in a language I barely speak. Here&apos;s what happens to a draft when you remove every variable but the page.</summary>
  <author><name>Jafran Hasan</name><email>mail@jaf.run</email></author>
  <category term="travel"/><category term="writing"/>
</entry>
<entry xml:lang="en">
  <id>https://jaf.run/en/articles/a-tiny-language-for-todos</id>
  <title>A tiny language for todos</title>
  <link href="https://jaf.run/en/articles/a-tiny-language-for-todos"/>
  <updated>2025-08-22T00:00:00.000Z</updated>
  <published>2025-08-22T00:00:00.000Z</published>
  <summary>I built a parser for the way I already write todos in plain text. Tags, dates, priorities, and a single character for &apos;maybe&apos;.</summary>
  <author><name>Jafran Hasan</name><email>mail@jaf.run</email></author>
  <category term="side-projects"/><category term="languages"/>
</entry>
</feed>