<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Vlad Esafev</title><description>Not causing trouble, not touching anything, fixing the primus</description><link>https://esafev.com/</link><item><title>RSS → MCP</title><link>https://esafev.com/notes/rss-to-mcp/</link><guid isPermaLink="true">https://esafev.com/notes/rss-to-mcp/</guid><description>How the two standards can work together</description><pubDate>Sat, 14 Nov 2026 10:00:00 GMT</pubDate><content:encoded>&lt;p&gt;RSS answers one question: what’s new? Agents ask other questions, so they scrape your pages and retell your work in their own words.&lt;/p&gt;
&lt;p&gt;What if every personal site had its own MCP? Instead of just scraping HTML, an agent could ask the site directly and get back what the author actually wrote. RSS pushes what I published. MCP lets you ask about it.&lt;/p&gt;
&lt;h3 id=&quot;the-page&quot;&gt;The page&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/webmachinelearning/webmcp&quot;&gt;WebMCP&lt;/a&gt; is an early proposal for this. A page registers its own tools, and the agent calls them instead of guessing from the DOM.&lt;/p&gt;
&lt;pre class=&quot;astro-code css-variables&quot; style=&quot;background-color:var(--astro-code-background);color:var(--astro-code-foreground);overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-token-keyword)&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-constant)&quot;&gt; document&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-constant)&quot;&gt;modelContext&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-function)&quot;&gt;.registerTool&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;  name&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-keyword)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt; &amp;quot;about&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;  description&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-keyword)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt; &amp;quot;Who I am and what this site is&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-token-function)&quot;&gt;  execute&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-token-keyword)&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt; &amp;quot;Vlad&amp;#39;s notes on engineering and life&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-token-keyword)&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-constant)&quot;&gt; document&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-constant)&quot;&gt;modelContext&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-function)&quot;&gt;.registerTool&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;  name&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-keyword)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt; &amp;quot;ask&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;  description&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-keyword)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt; &amp;quot;Answered from my notes&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;  inputSchema&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-keyword)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;    type&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-keyword)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt; &amp;quot;object&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;    properties&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-keyword)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt; { question&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-keyword)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt; { type&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-keyword)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt; &amp;quot;string&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt; } }&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;    required&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-keyword)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt;&amp;quot;question&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;  }&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-token-function)&quot;&gt;  execute&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;({ question }) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-token-keyword)&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-function)&quot;&gt; answerFromNotes&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;(question);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;});&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-token-keyword)&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-constant)&quot;&gt; document&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-function)&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-constant)&quot;&gt;modelContext&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-function)&quot;&gt;.registerTool&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;({&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;  name&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-keyword)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt; &amp;quot;subscribe&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;  description&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-keyword)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt; &amp;quot;Get new notes as they come out&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-punctuation)&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-token-function)&quot;&gt;  execute&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-token-comment)&quot;&gt;    // RSS feed, email newsletter, push notifications, etc.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-token-keyword)&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt; &amp;quot;https://esafev.com/rss.xml&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;the-feed&quot;&gt;The feed&lt;/h3&gt;
&lt;p&gt;RSS and MCP can point to each other. The &lt;code&gt;subscribe&lt;/code&gt; tool returns my RSS feed, and the feed itself can list my MCP tools. RSS is already extensible through XML namespaces (that’s how podcast feeds added chapters and transcripts).&lt;/p&gt;
&lt;pre class=&quot;astro-code css-variables&quot; style=&quot;background-color:var(--astro-code-background);color:var(--astro-code-foreground);overflow-x:auto&quot; tabindex=&quot;0&quot; data-language=&quot;xml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt;channel&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-function)&quot;&gt; xmlns&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-function)&quot;&gt;mcp&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt;&amp;quot;https://esafev.com/ns/mcp&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;  &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;&amp;gt;Vlad Esafev&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;  &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt;mcp&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt;tool&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-function)&quot;&gt; name&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt;&amp;quot;about&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;&amp;gt;Who I am and what this site is&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt;mcp&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt;tool&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;  &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt;mcp&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt;tool&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-function)&quot;&gt; name&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt;&amp;quot;ask&amp;quot;&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;&amp;gt;Answered from my notes&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt;mcp&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-punctuation)&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt;tool&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-token-string-expression)&quot;&gt;channel&lt;/span&gt;&lt;span style=&quot;color:var(--astro-code-foreground)&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;the-standard&quot;&gt;The standard&lt;/h3&gt;
&lt;p&gt;RSS worked because every feed had the same structure, so one reader could follow any site. Agents don’t strictly need that, since they can figure out any tool from its description. But feed readers do. If &lt;code&gt;ask&lt;/code&gt; meant the same thing everywhere, your reader could add an “Ask” box to every blog you follow.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://indieweb.org/&quot;&gt;IndieWeb&lt;/a&gt; already agreed on Webmention and microformats. Could we agree on a few standard tools, too?&lt;/p&gt;</content:encoded></item><item><title>Progressive animations</title><link>https://esafev.com/notes/progressive-animations/</link><guid isPermaLink="true">https://esafev.com/notes/progressive-animations/</guid><description>Animations teach, then they cost time</description><pubDate>Fri, 13 Nov 2026 20:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Animations help new users. Motion shows what changed and makes a new interface easier to learn. But once the user knows the interface, the same animation just takes time on every action.&lt;/p&gt;
&lt;p&gt;What if interfaces removed most of their animations after the user has learned them?&lt;/p&gt;
&lt;p&gt;This idea has a name: &lt;a href=&quot;https://layervault.tumblr.com/post/42361566927/progressive-reduction&quot;&gt;progressive reduction&lt;/a&gt;. You start with a rich, guided interface and simplify it as the user gains experience. Games do this with tutorials: the first level explains everything, and later you just play.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://animations.dev/&quot;&gt;Emil Kowalski&lt;/a&gt; made a related point recently: before choosing an easing or a duration, ask how often someone will see the animation. A command menu opened a hundred times a day shouldn’t animate at all, while onboarding can afford some delight. His axis is &lt;em&gt;frequency&lt;/em&gt;, mine is &lt;em&gt;experience&lt;/em&gt; - a frequent animation should never play, and a familiar one should stop taking your time.&lt;/p&gt;
&lt;p&gt;But animations don’t only teach. They also show that something changed and where it went. Remove them all and a fast UI can feel broken: states jump around, and you’re not sure the app responded at all.&lt;/p&gt;
&lt;p&gt;So maybe the end state isn’t zero animations, but faster ones. A 150ms fade instead of a 500ms slide. Enough to follow what happened, short enough to never wait.&lt;/p&gt;
&lt;p&gt;I haven’t built this yet, but I keep thinking about a switch: not “reduce motion” for accessibility, but “I’ve learned this app, give me the fast version.”&lt;/p&gt;</content:encoded></item><item><title>Independence vs. Autonomy</title><link>https://esafev.com/notes/independence-vs-autonomy/</link><guid isPermaLink="true">https://esafev.com/notes/independence-vs-autonomy/</guid><description>The fortress vs. the lighthouse</description><pubDate>Mon, 18 Aug 2025 17:30:00 GMT</pubDate><content:encoded>&lt;p&gt;These two words are often used as synonyms, but there’s a deep divide between them. They represent two fundamentally different ways of existing in the world.&lt;/p&gt;
&lt;h3 id=&quot;two-ways-of-being&quot;&gt;Two ways of being&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;Independence&lt;/em&gt; is a fortress with closed gates. Help feels like weakness, closeness like a threat, and other opinions like danger. It protects, but at the cost of isolation.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Autonomy&lt;/em&gt; is different. It’s like a lighthouse: steady, grounded, with open doors. In programming terms, a good module works autonomously yet keeps clear interfaces for interaction with other components. An autonomous person is the same: able to connect, listen, and understand without dissolving.&lt;/p&gt;
&lt;p&gt;In conflicts, independence retreats and resists, fighting to prove a point at any cost. Autonomy listens, analyzes, may accept part of the argument, but holds its own ground where it matters.&lt;/p&gt;
&lt;p&gt;Autonomy is not withdrawal. It’s the ability to remain yourself in any circumstance, even when someone disagrees, even when they suggest another path, even when the pull to merge and lose boundaries feels strong.&lt;/p&gt;
&lt;h3 id=&quot;the-choice&quot;&gt;The choice&lt;/h3&gt;
&lt;p&gt;Independence is a reaction to the world born from fear. Autonomy is a conscious choice of how to exist in this world.&lt;/p&gt;
&lt;p&gt;The first closes doors. The second keeps them open, but on its own terms.&lt;/p&gt;</content:encoded></item><item><title>Note about cars</title><link>https://esafev.com/notes/note-about-cars/</link><guid isPermaLink="true">https://esafev.com/notes/note-about-cars/</guid><description>Statement about cars</description><pubDate>Wed, 13 Aug 2025 14:30:00 GMT</pubDate><content:encoded>&lt;p&gt;Cars are cooler than any piece of modern art.
Sound design, materials, sculpture, engineering, philosophy — a car is an entire universe.&lt;/p&gt;
&lt;p&gt;And you can drive it.&lt;/p&gt;</content:encoded></item><item><title>Why I do programming</title><link>https://esafev.com/notes/why-i-do-programming/</link><guid isPermaLink="true">https://esafev.com/notes/why-i-do-programming/</guid><description>Wiring life through programming</description><pubDate>Thu, 24 Jul 2025 10:30:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;This piece was inspired by this &lt;a href=&quot;https://www.quora.com/How-did-you-realize-that-programming-was-your-passion/answer/Aaron-Boodman&quot;&gt;post&lt;/a&gt; by Aaron Boodman.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I remember myself as a calm, quiet kid, happiest when I had a bunch of wires in my hands. My parents used to give them to me as toys along with a screwdriver and an old cassette player I could take apart and try to put back together. I was three years old. I didn’t know what I was doing, but I loved the feeling of exploring the insides of a machine, trying to understand how it works.&lt;/p&gt;
&lt;p&gt;In first grade, I was introduced to MS-DOS and Logo with a bit of PASCAL. Later, when the school got better computers, I started writing small programs in BASIC: tic-tac-toe, calculators, that sort of thing. It felt magical.&lt;/p&gt;
&lt;p&gt;When I was 10, I finally got my own PC. At first, I mostly used it for games, but after I got internet access, everything changed. I discovered HTML, CSS, and basic JavaScript. This was pre-HTML5, so the web was limited, but I still built a lot of weird and ugly websites. My computer science teacher actually liked them. I even made a bit of money by doing other people’s HTML homework, not just for my classmates, but for my brother’s too.&lt;/p&gt;
&lt;p&gt;Around that time, I was really into GTA and discovered MTA and SAMP, community-made mods that added multiplayer to the game. I became obsessed with the idea of running my own server with custom mods and rules. That led me to PAWN, a scripting language used in those mods. I wanted to build a world where we could do almost anything, like in real life. A kind of proto-metaverse.&lt;/p&gt;
&lt;p&gt;Eventually, I discovered &lt;a href=&quot;https://secondlife.com/&quot;&gt;Second Life&lt;/a&gt; — a fully virtual world with its own economy. It had everything I had wanted to build in GTA. I started creating things: clothes, buildings, scripts using LSL (a scripting language that’s a superset of Lua). I even made some money, converting Second Life currency into real-world cash.&lt;/p&gt;
&lt;p&gt;But after a while, I realized I didn’t want to create only for a virtual world. I wanted to make something meaningful for people in real life. I was around 16 at the time, still unsure what that could be. What I did know was: I wanted to buy a new computer and a Korg microKORG to make electronic noises. So I launched a tiny “business” reselling ICQ numbers and other digital things on a local white-hat hacker forum. I earned enough to buy what I wanted… and nearly got expelled from school for truancy.&lt;/p&gt;
&lt;p&gt;Around then, HTML5 launched, and the web suddenly became powerful again. I created my first homepage with animated JavaScript clouds in the header, layered and moving like in the real sky. I didn’t save the source code, but I still have a &lt;a href=&quot;https://www.flickr.com/photos/artiffical/6315413321/in/dateposted-public/&quot;&gt;screenshot&lt;/a&gt;. Around that time I also discovered Bret Victor’s &lt;a href=&quot;https://youtu.be/EGqwXt90ZqA&quot;&gt;Inventing on Principle&lt;/a&gt;, a talk that shaped how I see programming and creativity.&lt;/p&gt;
&lt;p&gt;In university, I studied &lt;em&gt;Engineering in Innovation&lt;/em&gt; — a mix of semi-technical and business-oriented classes. My favorite courses were &lt;em&gt;Engineering Graphics&lt;/em&gt; (lots of CAD), &lt;em&gt;Computer Security&lt;/em&gt; (where I once “hacked” the university’s SMTP server — not because I was clever, but because it was ridiculously easy), and &lt;em&gt;Philosophy&lt;/em&gt;, which taught me the value of asking right questions, and of creating a personal philosophy as well.&lt;/p&gt;
&lt;p&gt;After graduation, I was lost. I didn’t know what I wanted. Luckily, a friend invited me to join a startup — &lt;em&gt;MipoTheBot&lt;/em&gt;, a Slack bot for freelancers using platforms like Upwork. I worked on design, UI/UX, and started writing code again. That’s where my professional career began. We shut it down eventually, because we didn’t understand sales or marketing well enough. But I learned an important lesson: those things matter.&lt;/p&gt;
&lt;p&gt;In the years that followed, I built a lot across different industries. Most importantly, I discovered that great products come from small, curious and tight-knit teams where everyone owns the outcome together.&lt;/p&gt;
&lt;p&gt;What stayed with me most from Aaron Boodman’s post was what he wrote about burnout. Like him, I’ve gone through it. Twice, in fact. My most recent episode wasn’t work-related but came from personal life changes. I took a month off to recover and visit friends across Europe, and when I came back, I had a renewed desire to build. That break reminded me that I still love programming. It has never been just a job for me.&lt;/p&gt;
&lt;p&gt;The beauty of programming, for me, is that there’s always a new frontier to explore. OPS, backend, frontend, hardware, and systems programming — each one pulls me in a different direction. Within each of those areas, there are even more rabbit holes: web performance, local-first software, distributed systems, crypto, decentralization, AI, design engineering, and so on.&lt;/p&gt;
&lt;p&gt;Sometimes the hardest part is maintaining focus and not chasing every shiny new thing.&lt;/p&gt;
&lt;p&gt;For me, programming has always been more than a skill. It’s a way to explore, to tinker, and to satisfy curiosity. From wires and screwdrivers to apps, the tools have changed. But the impulse remains. That’s why I keep coming back to it. It’s my natural way of interacting with the world.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Discuss this post on &lt;a href=&quot;https://news.ycombinator.com/item?id=44691722&quot;&gt;Hacker News&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;</content:encoded></item><item><title>Slackification</title><link>https://esafev.com/notes/slackification/</link><guid isPermaLink="true">https://esafev.com/notes/slackification/</guid><description>Slack sounds echo through the morning</description><pubDate>Wed, 04 Jun 2025 14:30:00 GMT</pubDate><content:encoded>&lt;p&gt;It’s curious — the sounds of Slack around me, floating through rooms and flats, through glass and drywall.&lt;/p&gt;
&lt;p&gt;A ping from the next room — someone messaged my ex. Another drifts in through the open window — my neighbor, messaged too.&lt;/p&gt;
&lt;p&gt;9:03. My turn.&lt;/p&gt;
&lt;p&gt;Slackification.&lt;/p&gt;</content:encoded></item><item><title>Burn your journals out</title><link>https://esafev.com/notes/burn-your-journals-out/</link><guid isPermaLink="true">https://esafev.com/notes/burn-your-journals-out/</guid><description>The practice of rereading your notes</description><pubDate>Sat, 22 Jun 2024 14:30:00 GMT</pubDate><content:encoded>&lt;p&gt;In September 2021, I bought my next Moleskine with the promise that I would regularly fill it with my thoughts.&lt;/p&gt;
&lt;p&gt;In April this year, I realized that I had completely failed in that promise, as my notebook was only half-filled with infrequent notes. I tried to promise myself again, but with a clearer goal — to write at least three pages a day.&lt;/p&gt;
&lt;p&gt;April ended with my notebook completely full, so I did it. I’m not sure, but I think it was the most connected time I’ve ever been with myself. I could connect my thoughts, reflect, and solve my inner problems only with blank paper and pen.&lt;/p&gt;
&lt;p&gt;In May, I booked a real cabin on Airbnb without electricity, water, or other modern conveniences. But it had one crucial feature: a fireplace. I decided to read all my notes from the finished Moleskine, make a summary, and then burn it in the fireplace. It took me nearly six hours to summarize, transfer everything to digital, and then burn the physical notes.&lt;/p&gt;
&lt;p&gt;The main reason I did this was my addiction to simplifying my life and embracing minimalism. So, I had the idea to perform this ritual and then make new notes only in the digital space.&lt;/p&gt;
&lt;p&gt;I saw a lot of myself in the summary — how much I had grown and become a real adult. There were many heart-warming words about war, failed love, and relationships with myself and others. So many words to know…&lt;/p&gt;
&lt;p&gt;So, I’ll just say one thing — take notes and re-read them often. There’s a lot of the real you in there.&lt;/p&gt;
&lt;p&gt;Today, I bought my new dotted Moleskine.&lt;/p&gt;
&lt;figure&gt;&lt;picture&gt;&lt;source srcset=&quot;/_astro/summary-dark.DN4J6fyx.webp&quot; media=&quot;(prefers-color-scheme: dark)&quot;&gt;&lt;img src=&quot;/_astro/summary-light.zX8gZRjw.webp&quot; alt=&quot;Summary of notes&quot; width=&quot;1200&quot; height=&quot;1600&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/picture&gt;&lt;/figure&gt;</content:encoded></item><item><title>Practicing the Art of Possession</title><link>https://esafev.com/notes/art-of-possession/</link><guid isPermaLink="true">https://esafev.com/notes/art-of-possession/</guid><description>Exploring the realms of maximalism and minimalism</description><pubDate>Wed, 24 May 2023 14:30:00 GMT</pubDate><content:encoded>&lt;p&gt;This text is about my personal experience with maximalism, minimalism, and how to deal and live with it.&lt;/p&gt;
&lt;h2 id=&quot;the-path-of-personal-possessions&quot;&gt;The path of personal possessions&lt;/h2&gt;
&lt;h3 id=&quot;maximalism-embracing-abundance&quot;&gt;Maximalism: Embracing abundance&lt;/h3&gt;
&lt;p&gt;Until 2016, I was a guy who kept everything in the world that came into his hands. For example, the packages of things I bought were never thrown away because my inner voice told me that they had a soul. Later, I began to associate this feeling with a Japanese religion called &lt;a href=&quot;https://en.wikipedia.org/wiki/Shinto&quot;&gt;Shinto [神道]&lt;/a&gt;, which endorses of the above inner feeling.&lt;/p&gt;
&lt;h3 id=&quot;minimalism-embracing-simplicity&quot;&gt;Minimalism: Embracing simplicity&lt;/h3&gt;
&lt;p&gt;In 2016, I started decluttering my stuff, throwing all the empty packaging, zines, receipts and other sh*t into a bin. Did it make me feel better? Yes and no, because throwing something away feels like throwing away a piece of your soul.&lt;/p&gt;
&lt;p&gt;The next step, which continues today, was to sell anything of value. Since 2018, my local eBay account has ~180 closed lots, with prices starting at $1. Since then, I have come to understand that we can sell anything in this world.&lt;/p&gt;
&lt;p&gt;It would be nice to say that my belief in &lt;em&gt;Shinto&lt;/em&gt; has disappeared after the above step, but there is I get an understanding that things need to live instead of lying on a shelf and gathering dust.&lt;/p&gt;
&lt;p&gt;At that time I decided never to sell any of my beautiful books, but in 2022 my migration to another country happened because of the Russian invasion of Ukraine, and my inner voice told me to sell all this stuff and donate the money.&lt;/p&gt;
&lt;h3 id=&quot;present-embracing-essentialism&quot;&gt;Present: Embracing essentialism&lt;/h3&gt;
&lt;figure&gt;&lt;picture&gt;&lt;source srcset=&quot;/_astro/stuff-dark.CIoJMA6P.webp&quot; media=&quot;(prefers-color-scheme: dark)&quot;&gt;&lt;img src=&quot;/_astro/stuff-light.CSuIE8H6.webp&quot; alt=&quot;All my stuff&quot; width=&quot;1200&quot; height=&quot;1600&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;&lt;/picture&gt;&lt;figcaption&gt; &amp;gt; Ready: now all my stuff fits into a suitcase and a Japanese daypack, but why?&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;It may seem like I’ve never bought anything since then, but that’s not true. Curiosity forces me to buy things from time to time, but I try to use an MVP-as-buying strategy to save some money. For example, if I feel the urge to buy something, I’ll first try to find the cheapest equivalent or buy a second-hand one to test my interest, and if I’m still interested, I can buy the more expensive one.&lt;/p&gt;
&lt;p&gt;I love owning things and watching them age, but I don’t like to worry too much about their safety. Again, things need to live and work. I like to call that kind of essentialism.&lt;/p&gt;
&lt;p&gt;And the idea of things for life doesn’t work either, because they tend to get boring, — some clothes fall into disrepair, while others take on new allegiances.&lt;/p&gt;
&lt;h2 id=&quot;healthy-ownership&quot;&gt;Healthy ownership&lt;/h2&gt;
&lt;p&gt;Extreme minimalism can serve as a &lt;a href=&quot;https://en.wikipedia.org/wiki/Coping&quot;&gt;coping mechanism&lt;/a&gt; in moments of overwhelming emotion. During these anxieties, when I want to get rid of anything at all, I try to imagine what will happen if I do, but the only thing that comes to mind is dying. You know, it’s a very unhealthy way of thinking.&lt;/p&gt;
&lt;p&gt;In the end I would say don’t block your desires. Let yourself enjoy your life and use the more sensible forms of consumerism. Perfectionism and minimalism can rob you of your happiness.&lt;/p&gt;</content:encoded></item><item><title>Regardless</title><link>https://esafev.com/notes/regardless/</link><guid isPermaLink="true">https://esafev.com/notes/regardless/</guid><description>Just start again</description><pubDate>Sat, 16 Jul 2022 14:30:00 GMT</pubDate><content:encoded>&lt;p&gt;I started at 15 to make forums, blogs, etc. because I wanted to create a community and I wanted to have space for thinking. And this is my next attempt at creating an environment for thinking about engineering [of everything], life, and love.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;A special thanks to &lt;a href=&quot;https://ano.ee/&quot;&gt;Asko Nõmm&lt;/a&gt;, from whom I partially peeped the design for this site.&lt;/em&gt;&lt;/p&gt;</content:encoded></item></channel></rss>