<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Rahul’s Newsletter]]></title><description><![CDATA[Random musings on technology, software and life.]]></description><link>https://www.rahul.revos.name</link><image><url>https://www.rahul.revos.name/img/substack.png</url><title>Rahul’s Newsletter</title><link>https://www.rahul.revos.name</link></image><generator>Substack</generator><lastBuildDate>Fri, 03 Apr 2026 19:15:47 GMT</lastBuildDate><atom:link href="https://www.rahul.revos.name/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Rahul Revo]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[rahulrevo@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[rahulrevo@substack.com]]></itunes:email><itunes:name><![CDATA[Rahul Revo]]></itunes:name></itunes:owner><itunes:author><![CDATA[Rahul Revo]]></itunes:author><googleplay:owner><![CDATA[rahulrevo@substack.com]]></googleplay:owner><googleplay:email><![CDATA[rahulrevo@substack.com]]></googleplay:email><googleplay:author><![CDATA[Rahul Revo]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[[tech] Building with AI editors]]></title><description><![CDATA[In the previous post Announcing US Visa Bulletin Hub I shared the personal project I had been working on for some time.]]></description><link>https://www.rahul.revos.name/p/tech-building-with-ai-editors</link><guid isPermaLink="false">https://www.rahul.revos.name/p/tech-building-with-ai-editors</guid><dc:creator><![CDATA[Rahul Revo]]></dc:creator><pubDate>Mon, 05 Jan 2026 08:08:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!bKxT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63be007b-f97e-4c35-b8bc-b52fbb6f045f_1660x626.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In the previous post <a href="https://www.rahul.revos.name/p/announcing-us-visa-bulletin-hub">Announcing US Visa Bulletin Hub</a> I shared the personal project I had been working on for some time. Besides solving for my own <em>smaller problems</em> I typically like to continue exploring new techniques or tools. In this post I&#8217;ll discuss a bit more on how the project was built. Areas will include tools and how I see programming evolving.</p><h1>AI editors</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bKxT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63be007b-f97e-4c35-b8bc-b52fbb6f045f_1660x626.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bKxT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63be007b-f97e-4c35-b8bc-b52fbb6f045f_1660x626.png 424w, https://substackcdn.com/image/fetch/$s_!bKxT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63be007b-f97e-4c35-b8bc-b52fbb6f045f_1660x626.png 848w, https://substackcdn.com/image/fetch/$s_!bKxT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63be007b-f97e-4c35-b8bc-b52fbb6f045f_1660x626.png 1272w, https://substackcdn.com/image/fetch/$s_!bKxT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63be007b-f97e-4c35-b8bc-b52fbb6f045f_1660x626.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bKxT!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63be007b-f97e-4c35-b8bc-b52fbb6f045f_1660x626.png" width="1200" height="452.4725274725275" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/63be007b-f97e-4c35-b8bc-b52fbb6f045f_1660x626.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:549,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:333411,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.rahul.revos.name/i/183525580?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63be007b-f97e-4c35-b8bc-b52fbb6f045f_1660x626.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!bKxT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63be007b-f97e-4c35-b8bc-b52fbb6f045f_1660x626.png 424w, https://substackcdn.com/image/fetch/$s_!bKxT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63be007b-f97e-4c35-b8bc-b52fbb6f045f_1660x626.png 848w, https://substackcdn.com/image/fetch/$s_!bKxT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63be007b-f97e-4c35-b8bc-b52fbb6f045f_1660x626.png 1272w, https://substackcdn.com/image/fetch/$s_!bKxT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63be007b-f97e-4c35-b8bc-b52fbb6f045f_1660x626.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>The primary AI editor I used for development was <a href="https://kiro.dev/">Kiro</a> from Amazon. Kiro, like <a href="http://cursor.com/">Cursor</a>, is an AI-native integrated editor. It too is built on the <a href="https://code.visualstudio.com/">Visual Studio code platform</a>.</p><p>AI-native editors bring a chat-like experience front and center rather than an editor experience with an enhanced auto-complete. The first versions of Github Copilot brought ground-breaking autocomplete to regular IDEs. However, that was so 2022. Newer AI-editors do a lot more complex tasks.</p><p>The primary method of AI-editing is called <em>vibe</em> coding where you can iterate over changes. This can be asking about the codebase or making changes.</p><p>Kiro also brings a different experience called Spec driven development. Interaction begins with a chat experience, but the output from this stage is a triad of docs as part of a specification. The component docs in a specification are-</p><p>- Requirements - user stores and acceptance criteria in a structured form of WHEN -&gt; THEN</p><p>- Design - technical architecture and implementation concerns.</p><p>- Task list - implementation plan for a step by step approach for solving the broader problem.</p><p>With specifications, you are forced to think through what you want to build and how. Further these serve as context for the LLM generator as changes are incrementally made. Technically the specifications are simply text based markdown files. Diagrams generated are also based on textual <a href="https://mermaid.js.org/">mermaid</a> tool. In the latest version of cursor, it does generate a plan as well before going through a change which is similar to a spec. However a spec is committed and hence also helps as a future reference point.</p><h1>Workflow changes</h1><p>The new AI based tools are definitely able to accelerate productivity for small projects. With very little direct effort I was able to produce a medium sized project.</p><p>These tools still require solid technical understanding but do not require deep technical work anymore. My day job as an architect requires me to make a lot of high-level decisions and drive architecture and hence such tools fit how I work.</p><p>These tools are becoming more advanced in many ways. There were a few times when the proposed design of a spec from kiro was better than what I had expected. There were newer versions of some AWS services and the tool was able to offer a better solution.</p><p>At the same time, these tools have a strong inclination of generating tons of verbose code. Even in my project I have some duplication which as a human author I would try and refactor into a common library. But my tools are making me lazy.</p><p>Coding no longer requires deep thinking. Instead you fire off a few commands and hope for the best. In theory, I can review the output from each task and then trigger the next one. However after the initial euphoria waned off; I just started triggering all the tasks in a spec and then went away to other chores. There were a few instances where I had to scrape off a complete feature since the output was not what I expected. Few steps forward and some backward. Understanding how to give well scoped tasks will continue to be what a good engineer does. I&#8217;m not yet confident in multiple agents autonomously making changes to a codebase.</p><h1>Looking into the future</h1><p>The bar for junior software engineers to enter the industry is going to be higher. With AI tools like these; there is clearly going to be a shift of work from humans to agents.</p><p>Code reviews become critical with such tools. However at the same time it will not be easy to <em>humanly</em> review large code dumps. Hence it is likely that code review agents become more prevalent which are able to validate code style and other <em>lesser</em> concerns. For the bigger picture well written and tested specs should be enough.</p><p>Programming itself has become easier. And hence we will generate more code and not less. However the true cost is typically around maintenance and migrations. Hence understanding these complex custom solutions to humans and making large scale changes will be a big area. Tools like <a href="https://codewiki.google/">Codewiki</a> might be interesting to follow.</p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Announcing US Visa Bulletin Hub]]></title><description><![CDATA[Welcome to US Visa Bulletin Hub, your new essential tool for navigating the complex world of U.S.]]></description><link>https://www.rahul.revos.name/p/announcing-us-visa-bulletin-hub</link><guid isPermaLink="false">https://www.rahul.revos.name/p/announcing-us-visa-bulletin-hub</guid><dc:creator><![CDATA[Rahul Revo]]></dc:creator><pubDate>Sat, 29 Nov 2025 22:13:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!uOkx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe53a8849-c46a-423f-95c8-117904e2d4c5_1190x791.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LiNN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd770044-4803-46c4-a96c-fa5d1cc83ac6_609x134.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LiNN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd770044-4803-46c4-a96c-fa5d1cc83ac6_609x134.png 424w, https://substackcdn.com/image/fetch/$s_!LiNN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd770044-4803-46c4-a96c-fa5d1cc83ac6_609x134.png 848w, https://substackcdn.com/image/fetch/$s_!LiNN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd770044-4803-46c4-a96c-fa5d1cc83ac6_609x134.png 1272w, https://substackcdn.com/image/fetch/$s_!LiNN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd770044-4803-46c4-a96c-fa5d1cc83ac6_609x134.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LiNN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd770044-4803-46c4-a96c-fa5d1cc83ac6_609x134.png" width="609" height="134" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bd770044-4803-46c4-a96c-fa5d1cc83ac6_609x134.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:134,&quot;width&quot;:609,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:106793,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.rahul.revos.name/i/180276926?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd770044-4803-46c4-a96c-fa5d1cc83ac6_609x134.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LiNN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd770044-4803-46c4-a96c-fa5d1cc83ac6_609x134.png 424w, https://substackcdn.com/image/fetch/$s_!LiNN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd770044-4803-46c4-a96c-fa5d1cc83ac6_609x134.png 848w, https://substackcdn.com/image/fetch/$s_!LiNN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd770044-4803-46c4-a96c-fa5d1cc83ac6_609x134.png 1272w, https://substackcdn.com/image/fetch/$s_!LiNN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd770044-4803-46c4-a96c-fa5d1cc83ac6_609x134.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>Welcome to <strong><a href="https://www.usvisabulletinhub.com">US Visa Bulletin Hub</a></strong>, your new essential tool for navigating the complex world of <strong>U.S. immigration and Green Card priority dates</strong>.</p><p>I&#8217;m excited to announce the launch of my latest project designed with one simple mission: to help you stop wasting time refreshing the State Department website and start planning your future with confidence.</p><p></p><h3><strong>The Problem: The Waiting Game</strong></h3><p>If you are in the queue for an employment-based Green Card (EB-1, EB-2, or EB-3), you know the struggle. Every month, you anxiously await the release of the U.S. Department of State&#8217;s <strong>Visa Bulletin</strong>. You scroll through complex tables, cross-referencing your &#8220;Final Action Dates&#8221; with &#8220;Dates for Filing,&#8221; trying to see if your priority date has finally become current.</p><p>It&#8217;s stressful, confusing, and easy to miss critical updates that could affect your status.</p><p></p><h3><strong>The Solution: Instant, Personalized Alerts</strong></h3><p><strong>US Visa Bulletin Hub</strong> solves this problem by bringing the updates directly to your <strong>email</strong> inbox. Instead of manually checking and comparing bulletins every month, we do the heavy lifting.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uOkx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe53a8849-c46a-423f-95c8-117904e2d4c5_1190x791.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uOkx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe53a8849-c46a-423f-95c8-117904e2d4c5_1190x791.png 424w, https://substackcdn.com/image/fetch/$s_!uOkx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe53a8849-c46a-423f-95c8-117904e2d4c5_1190x791.png 848w, https://substackcdn.com/image/fetch/$s_!uOkx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe53a8849-c46a-423f-95c8-117904e2d4c5_1190x791.png 1272w, https://substackcdn.com/image/fetch/$s_!uOkx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe53a8849-c46a-423f-95c8-117904e2d4c5_1190x791.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uOkx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe53a8849-c46a-423f-95c8-117904e2d4c5_1190x791.png" width="1190" height="791" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e53a8849-c46a-423f-95c8-117904e2d4c5_1190x791.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:791,&quot;width&quot;:1190,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:66537,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.rahul.revos.name/i/180276926?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe53a8849-c46a-423f-95c8-117904e2d4c5_1190x791.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uOkx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe53a8849-c46a-423f-95c8-117904e2d4c5_1190x791.png 424w, https://substackcdn.com/image/fetch/$s_!uOkx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe53a8849-c46a-423f-95c8-117904e2d4c5_1190x791.png 848w, https://substackcdn.com/image/fetch/$s_!uOkx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe53a8849-c46a-423f-95c8-117904e2d4c5_1190x791.png 1272w, https://substackcdn.com/image/fetch/$s_!uOkx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe53a8849-c46a-423f-95c8-117904e2d4c5_1190x791.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p><strong>Key Features:</strong></p><ul><li><p><strong>Personalized Tracking:</strong> simply select your <strong>Visa Category</strong> (EB-1, EB-2, EB-3) and your <strong>Country of Birth</strong>.</p></li><li><p><strong>Instant Notifications:</strong> Receive an email the moment the new Visa Bulletin is released and updated for your specific category.</p></li><li><p><strong>Clear Insights:</strong> Our notifications highlight exactly what changed, so you don&#8217;t have to decipher the charts yourself.</p></li></ul><p></p><h3><strong>How It Works</strong></h3><ol><li><p><strong>Visit <a href="https://www.usvisabulletinhub.com/">USVisaBulletinHub.com</a></strong>.</p></li><li><p><strong>Select Your Preferences:</strong> Choose your specific employment preference category and country of chargeability.</p></li><li><p><strong>Sign In:</strong> Use your Google account to securely sign up for alerts.</p></li><li><p><strong>Relax:</strong> We monitor the official bulletins 24/7. When there is movement in your category, you&#8217;ll be the first to know.</p></li><li><p><strong>Share: </strong>Share the link if you find it useful.</p></li></ol><p></p>]]></content:encoded></item><item><title><![CDATA[[tech] Technical Primer on MCP]]></title><description><![CDATA[Model Content Protocol is a new open protocol that enables the building of AI applications.]]></description><link>https://www.rahul.revos.name/p/tech-technical-primer-on-mcp</link><guid isPermaLink="false">https://www.rahul.revos.name/p/tech-technical-primer-on-mcp</guid><dc:creator><![CDATA[Rahul Revo]]></dc:creator><pubDate>Thu, 03 Apr 2025 00:48:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Qe5T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb0c60e5-930b-43ab-9b2c-c049fd12e00c_442x650.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="https://modelcontextprotocol.io/introduction">Model Content Protocol</a> is a new open protocol that enables the building of AI applications. Releasing a standard is easy, but getting adoption is hard. MCP has potentially crossed this chasm and entered into the technical zeitgeist with articles at <a href="https://arstechnica.com/information-technology/2025/04/mcp-the-new-usb-c-for-ai-thats-bringing-fierce-rivals-together/">arstechnica</a>.</p><p></p><p>Adoption of the standard has been rapid.</p><ul><li><p>Anthropic released MCP for Claude in November 2024</p></li><li><p>OpenAI added agent<a href="https://openai.github.io/openai-agents-python/mcp/"> SDK</a> support recently</p></li><li><p>Microsoft also added support in various forms</p><ul><li><p>For AI apps in<a href="https://www.microsoft.com/en-us/microsoft-copilot/blog/copilot-studio/introducing-model-context-protocol-mcp-in-copilot-studio-simplified-integration-with-ai-apps-and-agents/"> Copilot studio</a></p></li><li><p>For their open-source projects like<a href="https://github.com/microsoft/playwright-mcp"> playwright</a>. Playright can perform browser automation and will be able to act like<a href="https://openai.com/index/introducing-operator/"> operator</a></p></li></ul></li><li><p>SDKs from popular languages like typescript, python, Java by<a href="https://github.com/modelcontextprotocol/java-sdk"> spring</a>, kotlin by JetBrains, C# by Microsoft.</p></li><li><p>The ecosystem has exploded for official and community-based MCP systems. See catalogs at <a href="https://github.com/punkpeye/awesome-mcp-servers">github</a>, <a href="https://mcp.so/">MCP Servers</a>&nbsp; and <a href="https://glama.ai/mcp/servers">glama</a>.</p></li></ul><p></p><p>In this blog, I&#8217;ll provide technical details about the protocol.</p><p></p><h2>What is context?</h2><p>The primary purpose of MCP is to provide <strong>context</strong> (data and actions) to models (large language models like chatgpt, claude). Models are tuned based on public data and later optimized for certain use-cases via fine-tuning. However models do not update based on newer knowledge or have access to proprietary or local data. Hence additional data aka context can be provided to a MCP to make it relevant for a wide range of tasks via MCP. By having an open-standard it is possible to mix and match implementations for building complex solutions.</p><p></p><p><a href="https://arstechnica.com/information-technology/2025/04/mcp-the-new-usb-c-for-ai-thats-bringing-fierce-rivals-together/">Arstechnica</a> explains this well in their article.</p><p></p><h2>Base protocol and architecture</h2><p>MCP is a <strong>stateful</strong> protocol for exchanging messages between clients and servers. This makes the systems more complex compared to a stateless protocol like REST or GraphQL.</p><p></p><p>The underlying messaging format is based on JSON-RPC v2.0 (Remote procedure calls using JSON format).</p><p></p><p>Request from client to server</p><p><code>{ "jsonrpc": "2.0",</code></p><p><code>&nbsp;&nbsp;"id": 1,</code></p><p><code>&nbsp;&nbsp;"method": "resources/read",</code></p><p><code>&nbsp;&nbsp;"params": { "uri": "https://en.wikipedia.org/wiki/JSON-RPC" }</code></p><p><code>}</code></p><p><br>Response from server to client</p><p><code>{&nbsp;"jsonrpc": "2.0",</code></p><p><code>&nbsp;&nbsp;"id": 1,</code></p><p><code>&nbsp;&nbsp;"result": {</code></p><p><code>&nbsp;&nbsp;&nbsp;&nbsp;"contents": [ {</code></p><p><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"uri": "...",</code></p><p><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"mimeType": "...",</code></p><p><code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"text": "..."</code></p><p><code>&nbsp;&nbsp;&nbsp;&nbsp;}</code> <code>]</code></p><p><code>&nbsp;&nbsp;}</code></p><p><code>}</code></p><p></p><p>There are three types of messages-</p><ul><li><p><a href="https://spec.modelcontextprotocol.io/specification/2024-11-05/basic/messages/#requests">Requests</a>: Client or server can initiate a request which is identified by an ID. It includes method and parameters.</p></li><li><p><a href="https://spec.modelcontextprotocol.io/specification/2024-11-05/basic/messages/#responses">Responses</a>: Successful or error response for a request (with ID)</p></li><li><p><a href="https://spec.modelcontextprotocol.io/specification/2024-11-05/basic/messages/#notifications">Notifications</a>: One way messages without any request ID</p></li></ul><p>Request/Responses are asynchronous and both client and server need to keep track of the session and requestId to match.</p><p>&nbsp;</p><p>A typical interaction will be like</p><ul><li><p>Host (app) initializing a client which initializes a server session. For a complex app that integrates with multiple services, there will be many client-server sessions at one time.</p></li><li><p>Discovering&nbsp; features (capability negotiation) like resources, tools etc</p></li><li><p>Performing certain AI related tasks for the lifetime of the host</p></li><li><p>Termination commands</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Qe5T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb0c60e5-930b-43ab-9b2c-c049fd12e00c_442x650.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Qe5T!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb0c60e5-930b-43ab-9b2c-c049fd12e00c_442x650.heic 424w, https://substackcdn.com/image/fetch/$s_!Qe5T!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb0c60e5-930b-43ab-9b2c-c049fd12e00c_442x650.heic 848w, https://substackcdn.com/image/fetch/$s_!Qe5T!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb0c60e5-930b-43ab-9b2c-c049fd12e00c_442x650.heic 1272w, https://substackcdn.com/image/fetch/$s_!Qe5T!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb0c60e5-930b-43ab-9b2c-c049fd12e00c_442x650.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Qe5T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb0c60e5-930b-43ab-9b2c-c049fd12e00c_442x650.heic" width="442" height="650" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb0c60e5-930b-43ab-9b2c-c049fd12e00c_442x650.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:650,&quot;width&quot;:442,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:19042,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.rahul.revos.name/i/160464545?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb0c60e5-930b-43ab-9b2c-c049fd12e00c_442x650.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Qe5T!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb0c60e5-930b-43ab-9b2c-c049fd12e00c_442x650.heic 424w, https://substackcdn.com/image/fetch/$s_!Qe5T!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb0c60e5-930b-43ab-9b2c-c049fd12e00c_442x650.heic 848w, https://substackcdn.com/image/fetch/$s_!Qe5T!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb0c60e5-930b-43ab-9b2c-c049fd12e00c_442x650.heic 1272w, https://substackcdn.com/image/fetch/$s_!Qe5T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb0c60e5-930b-43ab-9b2c-c049fd12e00c_442x650.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>Server features</h2><p><a href="https://spec.modelcontextprotocol.io/specification/2024-11-05/server/">Servers</a> expose the following optional primitives- </p><h3>Resources</h3><p><strong>Read only</strong> resource endpoints typically exposed by servers via REST/GraphQL. These are meant to be invoked by the AI Application. Messages include</p><ul><li><p>Listing resources for discoverability with support by pagination</p></li><li><p>Reading resources</p></li><li><p>Reading parameterized resources based on URI templates.</p></li><li><p>Notifications and subscriptions for changes.</p></li></ul><p></p><h3>Tools</h3><p><strong>Write, mutation or complex action</strong> endpoints. Functions or actions exposed to the LLM. These are typically API POST requests. These are Model controlled. Message examples include-</p><ul><li><p>List tools with input required and description</p></li><li><p>Call tool with arguments. Result of a tool call can be content or resources.</p></li><li><p>Get notifications for changes in tools</p></li></ul><p></p><h3>Prompts</h3><p>For AI applications, Interactive prompt templates are filled based on user choice. These are user controlled. Messages are</p><ul><li><p>Discover available prompt templates with arguments and descriptions</p></li><li><p>Getting a prompt with arguments for the template which causes a response content.</p></li><li><p>Get notifications on prompt template changes.</p></li></ul><p></p><p>Other server features include ping, completion and logging. I&#8217;ll skip advanced client features.</p><p></p><h2>Composability and interop</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!h9ts!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7c5b91a-7477-4499-b6ba-2c69bfe3c668_614x549.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!h9ts!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7c5b91a-7477-4499-b6ba-2c69bfe3c668_614x549.heic 424w, https://substackcdn.com/image/fetch/$s_!h9ts!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7c5b91a-7477-4499-b6ba-2c69bfe3c668_614x549.heic 848w, https://substackcdn.com/image/fetch/$s_!h9ts!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7c5b91a-7477-4499-b6ba-2c69bfe3c668_614x549.heic 1272w, https://substackcdn.com/image/fetch/$s_!h9ts!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7c5b91a-7477-4499-b6ba-2c69bfe3c668_614x549.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!h9ts!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7c5b91a-7477-4499-b6ba-2c69bfe3c668_614x549.heic" width="614" height="549" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e7c5b91a-7477-4499-b6ba-2c69bfe3c668_614x549.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:549,&quot;width&quot;:614,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:19557,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.rahul.revos.name/i/160464545?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7c5b91a-7477-4499-b6ba-2c69bfe3c668_614x549.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!h9ts!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7c5b91a-7477-4499-b6ba-2c69bfe3c668_614x549.heic 424w, https://substackcdn.com/image/fetch/$s_!h9ts!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7c5b91a-7477-4499-b6ba-2c69bfe3c668_614x549.heic 848w, https://substackcdn.com/image/fetch/$s_!h9ts!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7c5b91a-7477-4499-b6ba-2c69bfe3c668_614x549.heic 1272w, https://substackcdn.com/image/fetch/$s_!h9ts!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7c5b91a-7477-4499-b6ba-2c69bfe3c668_614x549.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Another major design feature is composability.</p><ul><li><p>Breadth - Each server can support limited functionality. Maybe only resources or tools or a combination of both. The client is supposed to discover the capability of a server dynamically. A host app can compose a solution by creating many client sessions with various servers.</p></li><li><p>Depth - A server can provide higher order API by aggregating capabilities of other servers. The Aggregate server can have auth and internally have client sessions to other downstream servers.</p></li></ul><p>Thus it is possible for different tool, resource and LLM providers to provide smaller solutions which can then be aggregated for solving very complex problems.</p><p>Consider the use-case of asking your AI assistant to search for a recipe, order the items and buy them. This was the <a href="https://openai.com/index/introducing-operator/">operator</a> demo. It should be possible to do this by</p><ul><li><p>tool like playwright as a browser driver</p></li><li><p>tool like brave search for internet search</p></li><li><p>LLMs like claude</p></li><li><p>any website for shopping and checkout (natively or via internet browsers)</p></li></ul><p></p><h2>Authorization</h2><p>For remote server connectivity, <a href="https://spec.modelcontextprotocol.io/specification/2025-03-26/basic/authorization/">authorization</a> support was added in v2025-03-26 based on OAuth.</p><p>For direct client to server connections, OAuth 2.1 for public clients using PKCE (important for public clients (like mobile apps and Single Page Applications) where client secrets cannot be securely stored) is used. Third party auth flow is also supported for server based applications.</p><p></p><h2>What&#8217;s next</h2><p>MCP has prioritized getting a local version of the tooling out first based on <a href="https://spec.modelcontextprotocol.io/specification/2024-11-05/basic/transports/#stdio">standard I/O communication</a>. This allows for completely local tools to be built. Examples of local protocol includes local files, and browsers. This has led to a bottom-up growth of adoption which is now forcing large players to also provide integrations and support. This allows for exciting tooling to be built for scenarios like home automation. Multi-language SDKs lower the bar on adoption.</p><p></p><p>However, the specification is still in fairly early days. There are going to be extensions for complex scenarios like aggregating servers, transforming data, streaming results, multi-modal results, sandboxing for security, and <a href="https://modelcontextprotocol.io/development/roadmap">more</a>.</p><p></p>]]></content:encoded></item><item><title><![CDATA[[tech] Early 2025 AI thoughts]]></title><description><![CDATA[Background]]></description><link>https://www.rahul.revos.name/p/tech-early-2025-ai-thoughts</link><guid isPermaLink="false">https://www.rahul.revos.name/p/tech-early-2025-ai-thoughts</guid><dc:creator><![CDATA[Rahul Revo]]></dc:creator><pubDate>Wed, 19 Feb 2025 08:10:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/7xTGNNLPyMI" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Background</h1><div id="youtube2-7xTGNNLPyMI" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;7xTGNNLPyMI&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/7xTGNNLPyMI?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>The video above by Andrej Karpathy is a fantastic overview of how Large Language Models (LLMs) work for a non-technical audience. It is as long as one bollywood movie but introduces many concepts, explains the possibilities and limitations of LLM based models.</p><p>Here is a quick summary of the video followed by some opinions.</p><p></p><p>Products from companies openai, meta, deepseek and others follow the following steps to make LLMs.</p><ul><li><p>Pretraining - Large volumes of data are downloaded and indexed. Data is essentially all of the internet including books and other forms of media.</p></li><li><p>Tokenization - Convert data into internal encoded formats.</p></li><li><p>Neural network training - For an input token sequence, predict the next possible sequences. By "training" the model in reducing loss the neural network is able to learn characteristics of the data. The scale of the computation required for this is extremely large and something that I'll try to expand on in a future blog.</p></li></ul><p></p><p>Post training it is possible to query the model to be able to predict the next token given an input sequence. These are base models which can be used for many applications.</p><p>To make end user facing applications, companies perform post training "supervised fine tuning" (SFT). This involves providing sample queries and answers as a prompt to the base model so that it can provide answers in a certain format. Specific examples and responses are used to make the model respond in a certain way for various classes of queries. For example, getting information about nuclear weapons should not be possible. With these examples the model is updated and it has preferred paths to respond to queries.</p><p>The newer generation of models are based on a post-training mechanism called reinforcement learning. These are called reasoning models.</p><p>Rather than providing the explicit steps for being able to get an answer for a question, just a final answer is provided. These questions can be asked many times and different answers can be obtained. The responses from the model are used to compare to the valid answer and the model is then incentivized to accept certain answers.</p><p>With reinforcement learning, the model is able to find out unique pathways to finding correct answers which were not hinted at by humans. This will enable unique solutions in the future.</p><p>Such techniques were used by systems like <a href="https://deepmind.google/research/breakthroughs/alphago/">alphago</a> to outperform human players in a board game. Alphago was trained on a closed domain problem with specific rules and hence the model could simulate against itself to learn new moves. Similar benefits can be expected in other fields.</p><p></p><h1>Magical Emergent properties</h1><p>As AI systems have been growing larger to handle more complexity, emergent properties have occurred. In the previous generation SFT based models, at high scale the understanding and generation of text was human-like.</p><p></p><p>With a large number of tokens used for reasoning models, there is a newer emergent property - Chain of thought. Instead of providing quick answers the model is able to break down a problem and optionally verify answers. For a query like "explain logarithms" the truncated chain of thought generated by the LLM was&nbsp;</p><pre><code>My thinking process to generate the explanation of logarithms followed these steps:

1. Identify the Core Concept
2. Start with the Familiar
3. Introduce Logarithms as the Inverse Question
4. Formalize the Notation
5. Highlight the Equivalence
6. Provide Concrete Examples
7. Address Common Logarithms
8. Explain "Why Logarithms are Useful"
9. Introduce Key Logarithm Properties
10. Summarize and Reiterate the Core Idea
11. Structure and Clarity

Self-Correction during the Process
- Initial thought
- Correction

By following these steps and incorporating these self-corrections, I aimed to create a clear, comprehensive, and easy-to-understand explanation of logarithms.</code></pre><p>This intermediate input was then used by the LLM to provide a long detailed and structured answer. Such models will become more prevalent with increasing competition and technological advances.</p><p>Emergent properties are not explicitly programmed or seen in smaller components. Another cultural reference that I am reminded of is from the movie <a href="https://en.wikipedia.org/wiki/Tron:_Legacy">Tron Legacy</a>. In the movie, there is a <em>species</em> of programs called ISOs which appear out of nowhere. Although these programs have immense potential to solve many problems faced by humanity they are destroyed by other programs.</p><p></p><h1>Future Impact</h1><h2>Data and APIs</h2><p>AI systems need enormous amounts of data. The leading companies in the AI race have scraped all public data from the internet without respect of copyright law. Next they will try and scrape data from private sources via clients like browsers. Further they will try to limit access to the data that they own.</p><p>There are new tools like <a href="https://openai.com/index/introducing-operator/">Operator</a> which can control browsers based on inputs to perform various tasks. The demo for operator shows a task to search to get a recipe and then place the ingredients required into a shopping cart. With such tools it is possible for the system to compose functionality across many sites in a logged in context. In the short term it will mean that APIs become irrelevant. I&#8217;ve been a proponent of well <a href="https://www.rahul.revos.name/p/tech-typespec-for-api-first-development">designed APIs</a> for a long time. However building UIs without APIs is simpler. Now since integrations can be done without APIs and can serve users as well it is likely that this causes lower investments in public APIs. A limited public API also serves to limit data access.</p><p></p><h2>Verifiable domains</h2><p>Maths and programming are verifiable domains. For a given task it is possible to test the solution by writing tests. These tests can be generated by the LLM and thus multiple solutions can be automatically verified. For such verifiable domains, LLMs can generate solutions with minimal human input. This will lead to extremely fast progress in these domains to superhuman levels. Entry level programming tasks will be automated soon.</p><p>LLM based tools cannot be used for tasks that are critical in nature since hallucinations are still a possibility. For non-verifiable domains, human input will still be needed to confirm actions. Self driving cars were a problem domain which had a similar complexity curve. <a href="https://www.synopsys.com/blogs/chip-design/autonomous-driving-levels.html">Level 5</a> autonomy has not been solved and seems to be a much harder problem than earlier anticipated.</p><p></p><h2>Competition&nbsp;</h2><p>There is an intense competition across various companies to push the technological frontier forward. Innovations are published in research papers and models are being released as open weights. This will allow smaller companies and individuals to also benefit from the advances albeit constrained by how much compute they can afford. Society is going to have to go through enormous change as many job functions will be re-defined. It will be better for a wide array of actors to be able to use these technologies rather than be limited to a few.</p><p></p><p>For future innovation, most companies believe in the AI scaling law which refers to the observed relationship between the performance of AI models and the resources used to train them. It essentially states that as you increase the size of the model (number of parameters), the amount of training data, and the computational power used, the performance of the AI model tends to improve.</p><p>Reasoning models require enormous compute (tokens used) compared to SFT based models. It is expected that with further increase in compute even better gains will be made with emergent properties leading to general intelligence or robotics.</p><p>To address the growing compute needs, companies are investing in setting up new data centers and also power generation plants. I doubt the world will reach targets of emissions especially since the current US administration has already withdrawn from the <a href="https://en.wikipedia.org/wiki/Paris_Agreement">Paris Agreement</a>.</p><p></p><p>The race for dominance has shifted from companies to the biggest two nations - US and China. Hopefully competition will remain limited to the technological space and not spill over to an actual war. There are enormous pitfalls and promises at the same time and this is a transformational period for humanity.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Peak efficiency]]></title><description><![CDATA[While thousands of families are being impacted,]]></description><link>https://www.rahul.revos.name/p/peak-efficiency</link><guid isPermaLink="false">https://www.rahul.revos.name/p/peak-efficiency</guid><dc:creator><![CDATA[Rahul Revo]]></dc:creator><pubDate>Tue, 11 Feb 2025 06:18:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!yAe_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f269a8-6c06-470f-80d0-b9f84b22daf8_713x538.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>While thousands of families are being impacted,</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yAe_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f269a8-6c06-470f-80d0-b9f84b22daf8_713x538.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yAe_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f269a8-6c06-470f-80d0-b9f84b22daf8_713x538.png 424w, https://substackcdn.com/image/fetch/$s_!yAe_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f269a8-6c06-470f-80d0-b9f84b22daf8_713x538.png 848w, https://substackcdn.com/image/fetch/$s_!yAe_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f269a8-6c06-470f-80d0-b9f84b22daf8_713x538.png 1272w, https://substackcdn.com/image/fetch/$s_!yAe_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f269a8-6c06-470f-80d0-b9f84b22daf8_713x538.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yAe_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f269a8-6c06-470f-80d0-b9f84b22daf8_713x538.png" width="713" height="538" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b5f269a8-6c06-470f-80d0-b9f84b22daf8_713x538.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:538,&quot;width&quot;:713,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:220167,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yAe_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f269a8-6c06-470f-80d0-b9f84b22daf8_713x538.png 424w, https://substackcdn.com/image/fetch/$s_!yAe_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f269a8-6c06-470f-80d0-b9f84b22daf8_713x538.png 848w, https://substackcdn.com/image/fetch/$s_!yAe_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f269a8-6c06-470f-80d0-b9f84b22daf8_713x538.png 1272w, https://substackcdn.com/image/fetch/$s_!yAe_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5f269a8-6c06-470f-80d0-b9f84b22daf8_713x538.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>I got this email in my inbox at around 9:46 AM today which is the Monday of layoffs! </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Iicu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85090253-c032-4ad1-a24c-801379ae9f60_1009x594.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Iicu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85090253-c032-4ad1-a24c-801379ae9f60_1009x594.png 424w, https://substackcdn.com/image/fetch/$s_!Iicu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85090253-c032-4ad1-a24c-801379ae9f60_1009x594.png 848w, https://substackcdn.com/image/fetch/$s_!Iicu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85090253-c032-4ad1-a24c-801379ae9f60_1009x594.png 1272w, https://substackcdn.com/image/fetch/$s_!Iicu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85090253-c032-4ad1-a24c-801379ae9f60_1009x594.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Iicu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85090253-c032-4ad1-a24c-801379ae9f60_1009x594.png" width="1009" height="594" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/85090253-c032-4ad1-a24c-801379ae9f60_1009x594.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:594,&quot;width&quot;:1009,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:113428,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Iicu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85090253-c032-4ad1-a24c-801379ae9f60_1009x594.png 424w, https://substackcdn.com/image/fetch/$s_!Iicu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85090253-c032-4ad1-a24c-801379ae9f60_1009x594.png 848w, https://substackcdn.com/image/fetch/$s_!Iicu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85090253-c032-4ad1-a24c-801379ae9f60_1009x594.png 1272w, https://substackcdn.com/image/fetch/$s_!Iicu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85090253-c032-4ad1-a24c-801379ae9f60_1009x594.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p></p><p>I don&#8217;t want to blame the recruiter who is trying to do her job. Or this is probably from an automated script that was not turned off.</p><p>But, I often wonder how executives manage to dehumanize and commoditize others who they are supposed to lead.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Siddhartha by Hermann Hesse]]></title><description><![CDATA[Siddhartha is a short 1922 novel about spirituality by Hermann Hesse - an author of European roots.]]></description><link>https://www.rahul.revos.name/p/siddhartha-by-hermann-hesse</link><guid isPermaLink="false">https://www.rahul.revos.name/p/siddhartha-by-hermann-hesse</guid><dc:creator><![CDATA[Rahul Revo]]></dc:creator><pubDate>Sun, 26 Jan 2025 21:39:14 GMT</pubDate><content:encoded><![CDATA[<p><a href="https://en.wikipedia.org/wiki/Siddhartha_(novel)">Siddhartha</a> is a short 1922 novel about spirituality by Hermann Hesse - an author of European roots. I&#8217;ve read this novel a few times and it gives me something new each time. I&#8217;ll always recommend this book to anyone interested in spirituality or eastern philosophy. I had not tried to learn much about the author, but turns out that he has won the Nobel prize in literature.</p><p></p><p>The story feels familiar with characters like Gautam Buddha, but it spins off in various directions. Siddhartha in this book is not related to Buddha. The essence of the book is the journey Siddhartha takes to achieve enlightenment and happiness. Starting from an ascetic direction, he goes through multiple transformations taking various paths on his journey. His friend Govinda is on a similar journey and diverges in the path. They keep meeting over the years and share experiences.</p><p></p><p>This story is based on an ancient time, but it still feels extremely relevant even today. The ideas seem so basic but are not attainable by most. The name Siddhartha is based on &#8220;Siddha&#8221; ~ achieving and &#8220;Artha&#8221; ~ &#8220;what was searched for&#8221;.</p><p></p><p>The book is available in the public domain at <a href="https://standardebooks.org/ebooks/hermann-hesse/siddhartha/gunther-olesch_anke-dreher_amy-coulter_stefan-langer_semyon-chaichenets">standard ebooks</a>. A <a href="https://en.wikipedia.org/wiki/Siddhartha_(1972_film)">movie</a> based on the book was also made which I&#8217;ll watch some day.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Efficiency]]></title><description><![CDATA[Work has been immensely busy for the past few months.]]></description><link>https://www.rahul.revos.name/p/efficiency</link><guid isPermaLink="false">https://www.rahul.revos.name/p/efficiency</guid><dc:creator><![CDATA[Rahul Revo]]></dc:creator><pubDate>Sat, 30 Nov 2024 23:07:54 GMT</pubDate><content:encoded><![CDATA[<p>Work has been immensely busy for the past few months. We released a new <a href="https://www.atlassian.com/blog/announcements/team-24-eu-ai-updates">AI product</a> for companies. The build up towards a major product release typically requires some extra work to iron out some pending issues. This is done especially if there are external date based commitments. Post the release there are usually fast follow ups.</p><p>I'm noticing an increased drive towards efficiency across the industry. Efficiency is now becoming a euphemism to get more done with less resources. The knowledge workers had gained slightly more power with the work from home movement. But now efficiency requirements mean that there is a constant drive to keep releasing at a fast rate. Estimates become deadlines. In such an environment, the easiest path to a solution will be taken which is usually to the detriment of long term quality. These costs will add up to be paid in the future. Not to mention the human cost of pressure for an extended duration. All this is happening while companies are reporting record profits. This trends have led to the new dictionary word - <a href="https://en.wikipedia.org/wiki/Enshittification">Enshittification</a>.</p><div><hr></div><p>With Trump winning the next US presidency, there is likely going to be an immense amount of change across the government. Almost all cabinet picks are <em>disruptors</em> of the agencies they are supposed to lead. Government is a monopoly and hence I welcome the principle of effecting <a href="https://www.rahul.revos.name/p/change">systemic change</a>. However, I am not optimistic of the net impact as of now. The US looks at business leaders and TV celebrities as trusted experts; but I do not believe success in one domain automatically translates to another.</p><p><a href="https://en.wikipedia.org/wiki/Department_of_Government_Efficiency">Department of government efficiency</a> is taking efficiency to the next level. It's going to be an interesting time following the news in the short term and reading about the impact of any changes in the long term. Making larger changes might break agencies in a way that they are not able to provide services to citizens.</p><p>The macro trend feels like the US is moving further towards privatization of critical services. Regulations around environmental protections, economic protections, monopoly regulations, might be removed. Shifting of responsibilities from the federal to state levels will also lead to further balkanization across various dimensions like healthcare.</p><div><hr></div><p>Efficiency is not necessarily optimal.</p>]]></content:encoded></item><item><title><![CDATA[Wired home internet]]></title><description><![CDATA[We recently completed a home improvement project to install ethernet cables in our old home and I'll share my experiences in this post.]]></description><link>https://www.rahul.revos.name/p/wired-home-internet</link><guid isPermaLink="false">https://www.rahul.revos.name/p/wired-home-internet</guid><dc:creator><![CDATA[Rahul Revo]]></dc:creator><pubDate>Sat, 03 Aug 2024 03:31:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!VD_X!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea34d1f7-d959-47f8-828d-1c98ecb24fb2_398x347.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><p>We recently completed a home improvement project to install ethernet cables in our old home and I'll share my experiences in this post. We already had a gigabit internet connection and a wifi 6 router with dual bands. Theoretical speeds are supposed to be ~2gbps throughout our relatively mid size home. However practically I used to get around just 120 mbps peak from my desk. There are also some wifi black spots where the wifi speed dropped to around 20mbps. Generally we have a usable network for the most part. However the number of devices and media consumption in the house has been increasing - summer vacation with kids at home! That caused further load degradation of the network.</p><p></p><p>After setting up the new network, connection speeds to the internet are maxing out at around 900Mbps.&nbsp;Buffering during streaming and video calls has massively reduced which is a perceptible change.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VD_X!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea34d1f7-d959-47f8-828d-1c98ecb24fb2_398x347.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VD_X!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea34d1f7-d959-47f8-828d-1c98ecb24fb2_398x347.png 424w, https://substackcdn.com/image/fetch/$s_!VD_X!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea34d1f7-d959-47f8-828d-1c98ecb24fb2_398x347.png 848w, https://substackcdn.com/image/fetch/$s_!VD_X!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea34d1f7-d959-47f8-828d-1c98ecb24fb2_398x347.png 1272w, https://substackcdn.com/image/fetch/$s_!VD_X!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea34d1f7-d959-47f8-828d-1c98ecb24fb2_398x347.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VD_X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea34d1f7-d959-47f8-828d-1c98ecb24fb2_398x347.png" width="398" height="347" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ea34d1f7-d959-47f8-828d-1c98ecb24fb2_398x347.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:347,&quot;width&quot;:398,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VD_X!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea34d1f7-d959-47f8-828d-1c98ecb24fb2_398x347.png 424w, https://substackcdn.com/image/fetch/$s_!VD_X!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea34d1f7-d959-47f8-828d-1c98ecb24fb2_398x347.png 848w, https://substackcdn.com/image/fetch/$s_!VD_X!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea34d1f7-d959-47f8-828d-1c98ecb24fb2_398x347.png 1272w, https://substackcdn.com/image/fetch/$s_!VD_X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea34d1f7-d959-47f8-828d-1c98ecb24fb2_398x347.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>I did research options for improving my network. A mesh wifi upgrade could be an option for some. However the newer mesh systems also cost over $1k and now include subscription services. Getting a wired connection setup was more painful than upgrading wifi but feels more future proof.</p><p></p><p><a href="https://lazyadmin.nl/home-network/home-ethernet-wiring/">This article</a> had many good pointers on setting up a wired home network. The first step was planning where the devices would be placed. I have the internet modem and router in one bedroom, and planned to add a switch in the shoe closet in the center of the home. Each room now has a couple of ethernet ports.</p><p></p><p>For ethernet cabling, there are many options, but I ended up with a basic <a href="https://en.wikipedia.org/wiki/Category_6_cable">CAT 6</a> cable. CAT 6 has a theoretical speed of up to 10 Gbps for a distance till to 55m or 180 ft which was more than sufficient for my home. The devices that I have support up to 1Gbps only anyways so it feels like this setup should last for some time. In US homes, adding ethernet wiring is simpler because of the wooden and drywall walls. If you cannot drill, then adding an external channel can also work to connect wires.</p><p></p><p>The project was partly DIY since the electrician did set up any jacks and I got to do some of that. In the walls, keystone jacks needed to be set up. Splicing the ethernet cable, attaching the wires to the jack with a punch down tool and testing with a network tester are needed. There are a few basic tools needed for this. Making ethernet cables was interesting with pass through rj45 jacks as well. Got to use some more tools for that task.</p><p></p><p>All the wires from the rooms end up in a central location where you need to add a switch. I decided to build a mid-range setup with a server rack. For a neater use of cables, there is a jack connection panel called a patch panel. I've shifted some smart home devices there too. In the future adding a storage device should also be possible. <br></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HB70!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe408e378-b9a6-479d-b103-43d054a545a4_960x1280.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HB70!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe408e378-b9a6-479d-b103-43d054a545a4_960x1280.jpeg 424w, https://substackcdn.com/image/fetch/$s_!HB70!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe408e378-b9a6-479d-b103-43d054a545a4_960x1280.jpeg 848w, https://substackcdn.com/image/fetch/$s_!HB70!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe408e378-b9a6-479d-b103-43d054a545a4_960x1280.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!HB70!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe408e378-b9a6-479d-b103-43d054a545a4_960x1280.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HB70!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe408e378-b9a6-479d-b103-43d054a545a4_960x1280.jpeg" width="960" height="1280" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e408e378-b9a6-479d-b103-43d054a545a4_960x1280.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1280,&quot;width&quot;:960,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!HB70!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe408e378-b9a6-479d-b103-43d054a545a4_960x1280.jpeg 424w, https://substackcdn.com/image/fetch/$s_!HB70!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe408e378-b9a6-479d-b103-43d054a545a4_960x1280.jpeg 848w, https://substackcdn.com/image/fetch/$s_!HB70!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe408e378-b9a6-479d-b103-43d054a545a4_960x1280.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!HB70!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe408e378-b9a6-479d-b103-43d054a545a4_960x1280.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Smart home automation should be the next major project once I can secure spousal funding.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Experiencing climate change ]]></title><description><![CDATA[This long weekend (US Independence Day) we spent some time with family in north California which also coincided with a heat wave.]]></description><link>https://www.rahul.revos.name/p/experiencing-climate-change</link><guid isPermaLink="false">https://www.rahul.revos.name/p/experiencing-climate-change</guid><dc:creator><![CDATA[Rahul Revo]]></dc:creator><pubDate>Mon, 08 Jul 2024 06:14:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!TiU2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660d216c-be34-4d6f-8208-544209255b24_1233x955.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This long weekend (US <a href="https://en.wikipedia.org/wiki/Independence_Day_(United_States)">Independence Day</a>) we spent some time with family in north California which also coincided with a heat wave.</p><p></p><p>Temperatures in California were in the 40+ C reaching almost 47 during the day. An <a href="https://apnews.com/article/heat-wave-dangerous-high-temperatures-records-f64b0459aaf83e0a4a12ab6d5e626bb5">excessive heat warning</a> was declared for 30+ million people or over 10% of the US population. At such a scale, there is nowhere to go and at the same time all you can do is hunker down and try to remain cool.</p><p></p><p>At the same time, given the dry summer and heat it is easy for fires to break out. The live map snapshot from <a href="https://www.fire.ca.gov">fire.ca.gov</a> below shows multiple active fires.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TiU2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660d216c-be34-4d6f-8208-544209255b24_1233x955.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TiU2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660d216c-be34-4d6f-8208-544209255b24_1233x955.png 424w, https://substackcdn.com/image/fetch/$s_!TiU2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660d216c-be34-4d6f-8208-544209255b24_1233x955.png 848w, https://substackcdn.com/image/fetch/$s_!TiU2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660d216c-be34-4d6f-8208-544209255b24_1233x955.png 1272w, https://substackcdn.com/image/fetch/$s_!TiU2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660d216c-be34-4d6f-8208-544209255b24_1233x955.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TiU2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660d216c-be34-4d6f-8208-544209255b24_1233x955.png" width="1233" height="955" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/660d216c-be34-4d6f-8208-544209255b24_1233x955.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:955,&quot;width&quot;:1233,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1425146,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TiU2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660d216c-be34-4d6f-8208-544209255b24_1233x955.png 424w, https://substackcdn.com/image/fetch/$s_!TiU2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660d216c-be34-4d6f-8208-544209255b24_1233x955.png 848w, https://substackcdn.com/image/fetch/$s_!TiU2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660d216c-be34-4d6f-8208-544209255b24_1233x955.png 1272w, https://substackcdn.com/image/fetch/$s_!TiU2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660d216c-be34-4d6f-8208-544209255b24_1233x955.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">fires in california</figcaption></figure></div><p>At such temperatures systems fail in interesting ways. Our air conditioner for the house was providing cooling, but still in high 30&#8217;s C. Only at night did temperatures reduce enough to be pleasant. Hence we were constantly trying to avoid the heat throughout a major portion of the day. In older (or historic) homes with insufficient insulation, this can be a major issue. Solar panels actually <a href="https://www.bostonsolar.us/solar-blog-resource-center/blog/how-do-temperature-and-shade-affect-solar-panel-efficiency/#:~:text=Residential%20solar%20panels%20are%20generally,150&#176;F%20or%20higher.">operate efficiently</a> at about 25 C. Hence at higher temperatures there is actually a reduction in electricity generated. The risk of a grid failure with many people depending on air conditioners to effectively survive will just increase.</p><p></p><p><a href="https://science.nasa.gov/climate-change/extreme-weather/">Extreme weather</a> events like these are getting more common now. <a href="https://www.rahul.revos.name/p/change">Climate systems</a> are slow changing. Hence we should expect the frequency and impact of such events to only increase. The cascading loss of not only human productivity but also essentials like water, crops, animal and natural life is going to be devastating. Rich countries like the US which have vast resources will be able to weather the change. Poorer countries like India will need to take aggressive steps today to tackle basics like water security.</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8DMv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff45d1191-781b-464d-940b-1b351e73a86b_1081x490.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8DMv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff45d1191-781b-464d-940b-1b351e73a86b_1081x490.png 424w, https://substackcdn.com/image/fetch/$s_!8DMv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff45d1191-781b-464d-940b-1b351e73a86b_1081x490.png 848w, https://substackcdn.com/image/fetch/$s_!8DMv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff45d1191-781b-464d-940b-1b351e73a86b_1081x490.png 1272w, https://substackcdn.com/image/fetch/$s_!8DMv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff45d1191-781b-464d-940b-1b351e73a86b_1081x490.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8DMv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff45d1191-781b-464d-940b-1b351e73a86b_1081x490.png" width="1081" height="490" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f45d1191-781b-464d-940b-1b351e73a86b_1081x490.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:490,&quot;width&quot;:1081,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:100134,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8DMv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff45d1191-781b-464d-940b-1b351e73a86b_1081x490.png 424w, https://substackcdn.com/image/fetch/$s_!8DMv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff45d1191-781b-464d-940b-1b351e73a86b_1081x490.png 848w, https://substackcdn.com/image/fetch/$s_!8DMv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff45d1191-781b-464d-940b-1b351e73a86b_1081x490.png 1272w, https://substackcdn.com/image/fetch/$s_!8DMv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff45d1191-781b-464d-940b-1b351e73a86b_1081x490.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">coal usage in india</figcaption></figure></div><p><a href="https://iced.niti.gov.in/energy/fuel-sources/coal/consumption">Coal consumption</a> especially for energy is only increasing though. The Indian growth engine will be stalled unless solutions are not found.</p><p></p><p>Unfortunately it seems that humanity is making earth inhabitable faster than we can make mars habitable. Denying climate change is harder now, but taking collective action seems as impossible as before.</p><p></p>]]></content:encoded></item><item><title><![CDATA[[tech] Typespec for API first development]]></title><description><![CDATA[About Typespec]]></description><link>https://www.rahul.revos.name/p/tech-typespec-for-api-first-development</link><guid isPermaLink="false">https://www.rahul.revos.name/p/tech-typespec-for-api-first-development</guid><dc:creator><![CDATA[Rahul Revo]]></dc:creator><pubDate>Mon, 27 May 2024 22:40:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/yfCYrKaojDo" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>About Typespec</h2><p><a href="https://typespec.io/">Typespec</a> is a new language from Microsoft to define APIs. I've been prototyping with typespec for a few projects and am already sold on the benefits. I&#8217;ll introduce the language and tool ecosystem in this article.</p><p>In a nutshell, typespec allows you to define a schema with models (entities) and operations (actions) at a high level. Typespec can emit API schemas for targets like <a href="https://www.openapis.org/">OpenAPI 3</a>, Protobuf and others. I've been exclusively using OpenAPI for many years and even for a single protocol, typespec brings many benefits.</p><pre><code><code>model Store {
  name: string;
  address: Address;
}

model Address {
  street: string;
  city: string;
}

@route("/stores")
interface Stores {
  list(@query filter: string): Store[];
  read(@path id: Store): Store;
}</code></code></pre><p></p><h2>Advantages</h2><h3>Concise language</h3><p>Typespec is inspired by typescript and is fairly concise. The generated OpenAPI for my projects was around twice in length compared to what was declared in typespec. In OpenAPI, repeating the same errors becomes cumbersome while this was easier in typespec.</p><p>Typespec supports namespaces, cross file imports, model composition via inheritance and templating (copying). This rich language helps make APIs concise relative to <a href="https://en.wikipedia.org/wiki/YAML">YAML</a> for OpenAPI.</p><p></p><h3>Tooling</h3><p>The typespec compiler can be installed as a node package. There are libraries for http, rest and OpenAPI which provide enhanced functionality. The compiler provides errors and warnings making it easy to get quick feedback and iterate quickly.</p><p>VS Code has good tooling support for the language as of now along with cli based tools. If your target output is OpenAPI specs, you can continue using any existing tooling in your toolchain as well, like code generators from OpenAPI.</p><p>A formatter is provided as part of standard tooling making consistency possible.</p><p><br>Tooling is still not very mature though. Plugins for IDEs like intellij are still not available. However since typespec uses <a href="https://en.wikipedia.org/wiki/Language_Server_Protocol">LSP</a> tooling should follow soon. </p><p></p><h3>APIs at scale</h3><p>Typespec will really provide value in companies with different distributed teams working on APIs. A central team can implement common models and codified standards. Other teams can then extend the models with custom features.</p><p>Code reviews and validation of types becomes much simpler with types compared to yaml files.</p><p></p><h3>API versioning</h3><p>Evolution of APIs is possible with first class <a href="https://typespec.io/docs/libraries/versioning/guide">versioning</a> support. It is possible to have a single file with multiple versioned models, operations and more. Adding, removing renames and other changes are supported via the <a href="https://typespec.io/docs/libraries/versioning/reference/decorators">library extensions</a>. A versioned typespec specification can generate many independently versioned OpenAPI versions.</p><p></p><h3>Extensibility with libraries</h3><p>The typespec language is small and there is tooling for creation of libraries which can include</p><ul><li><p>Typespec types for sharing definitions</p></li><li><p>Decorators similar to annotations that can add custom behavior</p></li><li><p>Emitters for different targets</p></li><li><p>Diagnostics, Linters for rule checks regarding API definitions like naming conventions and more.</p></li></ul><p>Typespec libraries can be written in <strong>typescript or javascript</strong>. Based on hooks configured the library has access to the AST and APIs to be able to customize behavior. The current extensions for HTTP, REST, and OpenAPI3 are built as libraries and hence the extensibility tooling should be fairly mature.</p><p></p><h2>Getting started</h2><p>The getting started page and docs on the main page have good examples. For a tech talk view&nbsp;</p><div id="youtube2-yfCYrKaojDo" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;yfCYrKaojDo&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/yfCYrKaojDo?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p><br>For a sample <strong>advanced</strong> project with common models and versioning see the project I&#8217;ve been testing with - <a href="https://github.com/rrevo/my-typespec-monorepo">typespec-monorepo</a>. I'll add additional patterns as I continue to explore typespec.</p><p></p><h2>API First enabler</h2><p>I'm a strong proponent of <strong>API first</strong> (compared to code first) approaches to development. Figuring out what to build before actually starting implementation helps build more intuitive APIs. Using tools like typespec can uplift how teams work with APIs making the process approachable and hence adoption of standards less painful.</p><p></p><p><a href="https://smithy.io/">Smithy</a> is an alternative to typespec from Amazon. It has fairly similar goals and features. It was released publicly over a year ago. However the website does not have the finesse of the typespec project and I eventually ended up spending more time with typespec instead. Smithy also has a great <a href="https://github.com/smithy-lang/awesome-smithy">ecosystem</a>. Typespec is built using typescript, which smithy is java based and that might be a consideration for teams that need custom tooling. Either tool will help with an API first approach at scale.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Disagree and commit]]></title><description><![CDATA[Decisions]]></description><link>https://www.rahul.revos.name/p/disagree-and-commit</link><guid isPermaLink="false">https://www.rahul.revos.name/p/disagree-and-commit</guid><dc:creator><![CDATA[Rahul Revo]]></dc:creator><pubDate>Sun, 19 May 2024 23:12:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!DvvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39690301-907f-4bb0-9a64-384a3313bc5c_799x501.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Decisions</h2><p>Decision making is an integral aspect of how companies and teams function. In software technology based companies almost every project involves a multitude of fairly complex decisions that need to be made. Often these are at various impact levels spanning product to technical domains and even planning. Within technical areas too there are broad architectural decisions on how a system can fit into existing architectures, or code related decisions like what code formatting styles are to be followed.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DvvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39690301-907f-4bb0-9a64-384a3313bc5c_799x501.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DvvK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39690301-907f-4bb0-9a64-384a3313bc5c_799x501.png 424w, https://substackcdn.com/image/fetch/$s_!DvvK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39690301-907f-4bb0-9a64-384a3313bc5c_799x501.png 848w, https://substackcdn.com/image/fetch/$s_!DvvK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39690301-907f-4bb0-9a64-384a3313bc5c_799x501.png 1272w, https://substackcdn.com/image/fetch/$s_!DvvK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39690301-907f-4bb0-9a64-384a3313bc5c_799x501.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DvvK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39690301-907f-4bb0-9a64-384a3313bc5c_799x501.png" width="799" height="501" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/39690301-907f-4bb0-9a64-384a3313bc5c_799x501.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:501,&quot;width&quot;:799,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:323876,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DvvK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39690301-907f-4bb0-9a64-384a3313bc5c_799x501.png 424w, https://substackcdn.com/image/fetch/$s_!DvvK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39690301-907f-4bb0-9a64-384a3313bc5c_799x501.png 848w, https://substackcdn.com/image/fetch/$s_!DvvK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39690301-907f-4bb0-9a64-384a3313bc5c_799x501.png 1272w, https://substackcdn.com/image/fetch/$s_!DvvK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39690301-907f-4bb0-9a64-384a3313bc5c_799x501.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>For effective decision making, a fairly well defined process is described in this <a href="https://www.umassd.edu/fycm/decision-making/process/">university course page</a> It covers problem identification, analyzing options, making a choice and final review.</p><p></p><h2>Disagree</h2><p>In real life, most interesting decisions do not have clean options. Since the beginning of this year itself I've been part of 3 major decisions where the options and data have not been that clear. I've been a participant as a primary stakeholder in one, passive observer in another and a secondary stakeholder in another. I follow the principle of <a href="https://en.wikipedia.org/wiki/Disagree_and_commit">Disagree and Commit</a> when it comes to decision making and strongly recommend it.</p><p></p><p>When having conflicting options, typically there are some unknown scenarios involved, or personal biases that cause conflict of weighting of pros/cons between options. Stakeholders should add more data or evidence to help consider the options. However disagreement on interpreting the evidence if it is available is still possible. How different groups interpret data is based on priorities and past experience in healthy teams. Personal advancement or team politics can also be strong motivators though not explicitly mentioned in decisions.</p><p></p><p>Most technical people reason based on analytical arguments and hence look for rational arguments in decisions. However many decisions are based on irrational beliefs or tacit knowledge by a leader.</p><p></p><h2>Commit</h2><p>If decisions are not made because of conflicting options, then you end up with analysis paralysis. This typically happens when there are multiple committees that need to arrive at a consensus. I strongly favor giving the team that owns the major execution the primary responsibility for the decision. Failure should have implications too. For projects, there should be a feedback loop with checkpoints to validate assumptions behind the decision. Unfortunately for high impact decisions made at high levels I do not typically see the evidence behind the calls or the accountability either.</p><p></p><p>I have a strong bias for action, and hence favor making progress rather than stalling. In the worst case, choosing the wrong option might lead to losses, but in-action is also a costly option.</p><p></p><p>The management principle of Disagree and Commit allows individuals to disagree and analyze tradeoffs for various options while a decision is being made; but once a decision has been signed off then everybody must commit to implementing the decision. Introduction of this principle is attributed to <a href="https://en.wikipedia.org/wiki/Andrew_Grove">Andy Grove</a> the legendary CEO of Intel who has authored many books and articles on management. <a href="https://en.wikipedia.org/wiki/Objectives_and_key_results">OKRs</a> were also popularized by him. These techniques show how teams who work towards the same direction can have a big impact compared to split organizations working in different directions.</p><p></p><p>For frameworks on making decisions, I'll probably expand on <a href="https://www.atlassian.com/team-playbook/plays/daci">DACI</a> and <a href="https://en.wikipedia.org/wiki/Request_for_Comments">RFC</a> in the future.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Restarting again]]></title><description><![CDATA[I&#8217;ve not blogged for over a couple of months and need to break out of stasis.]]></description><link>https://www.rahul.revos.name/p/restarting-again</link><guid isPermaLink="false">https://www.rahul.revos.name/p/restarting-again</guid><dc:creator><![CDATA[Rahul Revo]]></dc:creator><pubDate>Sun, 28 Apr 2024 16:57:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!dRn2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32bea14c-9595-48e1-b96f-1728c96ab5dd_1280x960.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;ve not blogged for over a couple of months and need to break out of stasis. My personal goal is to blog something fairly meaningful around life, tech, broad social events or any interesting topic around once a month. I typically start drafts around topics of interest. My monthly target helps me close on at least one topic since otherwise it is easy to mull over ideas or drift away doing other things. This is effectively the trap I&#8217;ve fallen into. Lots of minor events happening in personal, professional and broadly the world that have caused change and also a ton of thoughts. But instead of articulating on one topic, I&#8217;ve been thinking about many at the same time. Writing a blog also helps me immensely since I do actually drain my thoughts on a topic and hence gain some closure. The good news is that the events (minor events in the grand scheme of things really) in my life are reaching closure and so I think I can now close on some thoughts and start making progress again.</p><p></p><p>In modern life (and definitely in the technology industry) we tend to over index on personal productivity. While I do follow some techniques to achieve goals and targets, I&#8217;m not too hard on myself when the environment changes. We do have limited control in the broad scheme of things. Be human. Reset or adapt every now and then. Be nice to yourself and start simple when you need to. There are seasons when you thrive and some when you&#8217;ve got to sustain. Here is a picture from our backyard patch this late spring in California with many sprouts taking root.</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dRn2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32bea14c-9595-48e1-b96f-1728c96ab5dd_1280x960.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dRn2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32bea14c-9595-48e1-b96f-1728c96ab5dd_1280x960.jpeg 424w, https://substackcdn.com/image/fetch/$s_!dRn2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32bea14c-9595-48e1-b96f-1728c96ab5dd_1280x960.jpeg 848w, https://substackcdn.com/image/fetch/$s_!dRn2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32bea14c-9595-48e1-b96f-1728c96ab5dd_1280x960.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!dRn2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32bea14c-9595-48e1-b96f-1728c96ab5dd_1280x960.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dRn2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32bea14c-9595-48e1-b96f-1728c96ab5dd_1280x960.jpeg" width="1280" height="960" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/32bea14c-9595-48e1-b96f-1728c96ab5dd_1280x960.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:960,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:559747,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dRn2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32bea14c-9595-48e1-b96f-1728c96ab5dd_1280x960.jpeg 424w, https://substackcdn.com/image/fetch/$s_!dRn2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32bea14c-9595-48e1-b96f-1728c96ab5dd_1280x960.jpeg 848w, https://substackcdn.com/image/fetch/$s_!dRn2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32bea14c-9595-48e1-b96f-1728c96ab5dd_1280x960.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!dRn2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32bea14c-9595-48e1-b96f-1728c96ab5dd_1280x960.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">spring sprouts</figcaption></figure></div><p></p>]]></content:encoded></item><item><title><![CDATA[[tech] ​​​​Consistency models for service data]]></title><description><![CDATA[Context]]></description><link>https://www.rahul.revos.name/p/tech-consistency-models-for-service</link><guid isPermaLink="false">https://www.rahul.revos.name/p/tech-consistency-models-for-service</guid><dc:creator><![CDATA[Rahul Revo]]></dc:creator><pubDate>Sun, 18 Feb 2024 01:39:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!39cp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe94b0d17-5c53-4d82-9f5a-bde3aa5fc05e_1543x509.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Context</h2><p>Most software services deal with data, storing and retrieving it as needed. However, ensuring this data remains consistent can be challenging. There are many options on how data can be accessed after being written based on various architecture tradeoffs. This complexity is further exacerbated in distributed systems spread across multiple data centers. This article discusses the complexities of data consistency in such systems and offers solutions to navigate them effectively. This topic is broad and if there are areas that I&#8217;ve missed, getting feedback will help immensely.</p><p></p><p>Let&#8217;s consider a service as a logical concept which is composed of a deployment of multiple stateless compute nodes and private stateful datastores. We explore single region and multiple region deployment scenarios.</p><p></p><h2>Consistency Models</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!39cp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe94b0d17-5c53-4d82-9f5a-bde3aa5fc05e_1543x509.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!39cp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe94b0d17-5c53-4d82-9f5a-bde3aa5fc05e_1543x509.png 424w, https://substackcdn.com/image/fetch/$s_!39cp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe94b0d17-5c53-4d82-9f5a-bde3aa5fc05e_1543x509.png 848w, https://substackcdn.com/image/fetch/$s_!39cp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe94b0d17-5c53-4d82-9f5a-bde3aa5fc05e_1543x509.png 1272w, https://substackcdn.com/image/fetch/$s_!39cp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe94b0d17-5c53-4d82-9f5a-bde3aa5fc05e_1543x509.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!39cp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe94b0d17-5c53-4d82-9f5a-bde3aa5fc05e_1543x509.png" width="1456" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e94b0d17-5c53-4d82-9f5a-bde3aa5fc05e_1543x509.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:135808,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!39cp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe94b0d17-5c53-4d82-9f5a-bde3aa5fc05e_1543x509.png 424w, https://substackcdn.com/image/fetch/$s_!39cp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe94b0d17-5c53-4d82-9f5a-bde3aa5fc05e_1543x509.png 848w, https://substackcdn.com/image/fetch/$s_!39cp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe94b0d17-5c53-4d82-9f5a-bde3aa5fc05e_1543x509.png 1272w, https://substackcdn.com/image/fetch/$s_!39cp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe94b0d17-5c53-4d82-9f5a-bde3aa5fc05e_1543x509.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>There are three main consistency models for service data-</p><ul><li><p><strong>Weak consistency:</strong> These services are optimized for high throughput, low latency operations with some permitted data loss or reordering. Services that store click streams, log data, metrics or high volume events in parallel are some potential examples. When reading the data, there can be stale reads if some processing is partially delayed.In software design, there's a trade-off between consistency, availability, and partition tolerance (known as the <a href="https://en.wikipedia.org/wiki/CAP_theorem">CAP theorem</a>). Let&#8217;s consider the CAP theorem as a spectrum of choice from Availability to Consistency since partition tolerance is not configurable. These services are heavily biased towards high availability and sacrifice consistency.<br></p></li><li><p><strong>Eventual consistency:</strong> Data in these services can diverge for some time (usually a few seconds) under normal operating conditions. Assume that an entity version v<sub>1</sub> is stored at time t<sub>0</sub>. It might be possible that at a later time t<sub>1</sub>, on querying the service the request falls on a different internal node and you get a previous version of the entity. It is expected that within a <em>short</em> time interval all internal nodes within the service will catch up on the latest value of the entity. Hence the name - eventually consistent.Clients should be fine with a slightly inaccurate view of the data. Some patterns like caching on the writing session or client make at least the writer get a consistent view of the data just written while other clients reading will catch up (see <a href="https://learn.microsoft.com/en-us/azure/cosmos-db/consistency-levels#session-consistency">session consistency</a>). Data in this model is typically not lost, and repair mechanisms need to be set up to merge data for a consistent view. Caches might be used in the read paths which lead to inconsistent data for some time.On the CAP spectrum, this model favors availability slightly.<br></p></li><li><p><strong>Strong or strict consistency:</strong> Data in these services appears consistent. A read after a write should show the last value written. Data for the system as a whole is typically split across shards or partitions and hence consistency can be scoped based on keys or customers or some dimension.This data would be part of some critical infrastructure or business requirement.On the CAP spectrum, this model favors consistency with an acceptable loss of availability.</p></li></ul><p></p><p>These 3 categories can be further split into sub-categories based on specific data consistency needs. Most of the services I&#8217;ve built have used the eventual consistency model.</p><p>When you build modern Saas applications based on independent microservices owning their own view of the data; you are forced with eventual consistency for feature requirements that span multiple services anyways.</p><p>In large systems you might also need to support different data types with a mix of requirements. For example, control plane information like sharding information might need a consistent view while data plane information for entity information can be eventually consistent. Hence you can see different models being used in complex systems with differential consistency and availability guarantees.</p><p>Ultimately having a good understanding of your requirements is essential in making the right tradeoffs.</p><p></p><div><hr></div><p>Now let&#8217;s dive into some advanced patterns for eventually consistent and stricter consistent services.</p><p></p><h2>Designing Eventually consistent services</h2><h3>Region local consistency guarantees</h3><p>Let&#8217;s consider a service that is using AWS DynamoDB as a datastore. Like many modern NoSql datastores, DynamoDb provides tunable consistency. Write operations are durable and will eventually sync across all internal data nodes. During reads, you can read stale or consistent values based on the <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadConsistency.html">read consistency parameter</a>. However, this consistent view is limited to a single region.</p><p>DynamoDB tables can be configured to work across multiple regions with automatic data replication. There is no way to get a <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/V2globaltables_HowItWorks.html#V2globaltables_HowItWorks.conflict-resolution">consistent</a> view or configure a transaction across multiple regions. Hence a service deployed across multiple regions with replication configured will need to be eventually consistent. The gain is higher availability. Similar patterns apply to SQL database deployments.</p><p></p><h3>Repair mechanisms</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BV4h!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a81725-97a0-4cce-8513-984caf19f55a_698x511.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BV4h!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a81725-97a0-4cce-8513-984caf19f55a_698x511.png 424w, https://substackcdn.com/image/fetch/$s_!BV4h!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a81725-97a0-4cce-8513-984caf19f55a_698x511.png 848w, https://substackcdn.com/image/fetch/$s_!BV4h!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a81725-97a0-4cce-8513-984caf19f55a_698x511.png 1272w, https://substackcdn.com/image/fetch/$s_!BV4h!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a81725-97a0-4cce-8513-984caf19f55a_698x511.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BV4h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a81725-97a0-4cce-8513-984caf19f55a_698x511.png" width="698" height="511" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/76a81725-97a0-4cce-8513-984caf19f55a_698x511.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:511,&quot;width&quot;:698,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:90120,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BV4h!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a81725-97a0-4cce-8513-984caf19f55a_698x511.png 424w, https://substackcdn.com/image/fetch/$s_!BV4h!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a81725-97a0-4cce-8513-984caf19f55a_698x511.png 848w, https://substackcdn.com/image/fetch/$s_!BV4h!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a81725-97a0-4cce-8513-984caf19f55a_698x511.png 1272w, https://substackcdn.com/image/fetch/$s_!BV4h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76a81725-97a0-4cce-8513-984caf19f55a_698x511.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Since it is possible to write two versions of the same entity in different regions, during replication DynamoDb merges changes via conflict resolution. Conflict resolution in DynamoDB is at item scope (single entity defined by key). A <em>last writer wins</em> (LWW) reconciliation strategy between concurrent updates is used, in which DynamoDB makes a best effort to determine the last writer. Designing APIs to make sure that you do not end up with partial inconsistent data within an item because of how data can be merged is important.</p><p><a href="https://learn.microsoft.com/en-us/azure/cosmos-db/conflict-resolution-policies#conflict-resolution-policies">CosmosDb</a> from Azure, provides LWW and also custom policies for data reconciliation. I do not have practical experience with this tool though.</p><p></p><p>Services that depend on data from other services might be out of sync from the latest changes. Typically the source service emits an event stream with changes which can be used to fix the data in dependent services. Other alternatives are-</p><ul><li><p>Data access based repair. When information is accessed, you can repair data based on some external system but otherwise leave stale data on disk.</p><ul><li><p>Sync data on read of the entity with latest state</p></li><li><p>Sync data on write of the entity with latest state</p></li></ul></li><li><p>Run background jobs to automatically repair data in the background independent of access to data. These scans are costly to run in large systems.</p></li></ul><p></p><h2>Designing Strong/strict consistent services</h2><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1i1s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55513188-7e9b-4b31-85e3-b957d8abdc8c_1054x610.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1i1s!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55513188-7e9b-4b31-85e3-b957d8abdc8c_1054x610.png 424w, https://substackcdn.com/image/fetch/$s_!1i1s!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55513188-7e9b-4b31-85e3-b957d8abdc8c_1054x610.png 848w, https://substackcdn.com/image/fetch/$s_!1i1s!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55513188-7e9b-4b31-85e3-b957d8abdc8c_1054x610.png 1272w, https://substackcdn.com/image/fetch/$s_!1i1s!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55513188-7e9b-4b31-85e3-b957d8abdc8c_1054x610.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1i1s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55513188-7e9b-4b31-85e3-b957d8abdc8c_1054x610.png" width="1054" height="610" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/55513188-7e9b-4b31-85e3-b957d8abdc8c_1054x610.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:610,&quot;width&quot;:1054,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:198450,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1i1s!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55513188-7e9b-4b31-85e3-b957d8abdc8c_1054x610.png 424w, https://substackcdn.com/image/fetch/$s_!1i1s!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55513188-7e9b-4b31-85e3-b957d8abdc8c_1054x610.png 848w, https://substackcdn.com/image/fetch/$s_!1i1s!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55513188-7e9b-4b31-85e3-b957d8abdc8c_1054x610.png 1272w, https://substackcdn.com/image/fetch/$s_!1i1s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55513188-7e9b-4b31-85e3-b957d8abdc8c_1054x610.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Single writer</h3><p>Many services do not actually have active multi-region high-availability requirements. Hence operating in a single region with a local datastore is feasible and also cost effective. In such scenarios you can use SQL stores or even NoSql stores like DynamoDb and achieve consistent writes and hence service level consistency.</p><p>An alternative deployment is an active-passive deployment where the passive region acts as a standby. The active region is always replicating data to the standby. On a disaster event, you can change the passive deployment to be the active one. In an active-passive configuration only one region is the source-of-truth at a time. Region failure is derisked with this tradeoff.</p><p>Take a detour to read about dataomic which is a database that uses the similar single writer model (<a href="https://docs.datomic.com/pro/overview/architecture.html">transactors</a>) to provide immutable views of data.&nbsp;</p><p></p><h3>Multi-region writers</h3><p>At a large scale and a global footprint of clients, supporting multi-region writers typically becomes a requirement. The two patterns that allow for multiple distributed writes is Application layer provided or Database provided.</p><p>Application layer provided design takes <a href="https://aws.amazon.com/what-is/database-sharding/">database sharding</a> ideas to the application layer. A service deployed globally will split stored data into different owned service shards. Let&#8217;s assume that a single customer can be mapped to a single designated write region. The service needs to maintain a routing table with strict consistency per customer data subset. Consensus systems like <a href="https://etcd.io/">etcd</a> can be used to maintain the routing information across all service shards. Large scale customer data can then be stored in service shards where they are consistent. Multiple independent service shards can independently write across the globe. During disaster events you end up with partial loss of availability. This model also helps with enterprise requirements like data locality.</p><p>Database provided consistency is possible with some solutions like google cloud spanner. Spanner effectively promises a consistent-available global store with &#8220;<a href="https://cloud.google.com/spanner/docs/true-time-external-consistency">external consistency</a>&#8221;. I&#8217;ve not used this product either but availability of such a platform component should highly simplify complex services.</p><p><br></p><h2>References</h2><ul><li><p><a href="https://en.wikipedia.org/wiki/CAP_theorem">CAP theorem</a> and the extension <a href="https://en.wikipedia.org/wiki/PACELC_theorem">PACELC theorem</a></p></li><li><p>Database <a href="https://jepsen.io/consistency">Consistency Models</a> with formal definitions</p></li><li><p>DynamoDb consistency <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/V2globaltables_HowItWorks.html#V2globaltables_HowItWorks.conflict-resolution">conflict resolution</a>&nbsp;</p></li><li><p><a href="https://learn.microsoft.com/en-us/azure/cosmos-db/consistency-levels">Consistency level choices</a> in Azure Cosmos Db</p></li><li><p>Google <a href="https://cloud.google.com/spanner/docs/true-time-external-consistency">Spanner consistency</a> and <a href="https://cloud.google.com/spanner/docs/transactions#rw_transaction_semantics">Transactions</a></p></li></ul><p></p>]]></content:encoded></item><item><title><![CDATA[[tech] DIY Photo frame with light sensor]]></title><description><![CDATA[After the setup of the DIY Photo frame based on raspberry pi hardware, a major limitation was that the monitor would remain ON throughout the night.]]></description><link>https://www.rahul.revos.name/p/tech-diy-photo-frame-with-light-sensor</link><guid isPermaLink="false">https://www.rahul.revos.name/p/tech-diy-photo-frame-with-light-sensor</guid><dc:creator><![CDATA[Rahul Revo]]></dc:creator><pubDate>Wed, 14 Feb 2024 03:58:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!E4-8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c7f9b45-cb07-4e5a-bb2e-248d602b4397_1455x1065.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>After the setup of the <a href="https://rahulrevo.substack.com/p/diy-photo-frame">DIY Photo frame</a> based on raspberry pi hardware, a major limitation was that the monitor would remain ON throughout the night. This was also a problem when watching TV late at night with the lights off. <a href="https://en.wikipedia.org/wiki/Physical_computing">Physical computing</a> by adding sensors is a selling point for Raspberry Pi so that is exactly what I ended up doing.</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!E4-8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c7f9b45-cb07-4e5a-bb2e-248d602b4397_1455x1065.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!E4-8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c7f9b45-cb07-4e5a-bb2e-248d602b4397_1455x1065.png 424w, https://substackcdn.com/image/fetch/$s_!E4-8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c7f9b45-cb07-4e5a-bb2e-248d602b4397_1455x1065.png 848w, https://substackcdn.com/image/fetch/$s_!E4-8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c7f9b45-cb07-4e5a-bb2e-248d602b4397_1455x1065.png 1272w, https://substackcdn.com/image/fetch/$s_!E4-8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c7f9b45-cb07-4e5a-bb2e-248d602b4397_1455x1065.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!E4-8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c7f9b45-cb07-4e5a-bb2e-248d602b4397_1455x1065.png" width="1455" height="1065" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0c7f9b45-cb07-4e5a-bb2e-248d602b4397_1455x1065.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1065,&quot;width&quot;:1455,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2571303,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!E4-8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c7f9b45-cb07-4e5a-bb2e-248d602b4397_1455x1065.png 424w, https://substackcdn.com/image/fetch/$s_!E4-8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c7f9b45-cb07-4e5a-bb2e-248d602b4397_1455x1065.png 848w, https://substackcdn.com/image/fetch/$s_!E4-8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c7f9b45-cb07-4e5a-bb2e-248d602b4397_1455x1065.png 1272w, https://substackcdn.com/image/fetch/$s_!E4-8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c7f9b45-cb07-4e5a-bb2e-248d602b4397_1455x1065.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>To solve the automated display control I used the <a href="https://learn.adafruit.com/adafruit-bh1750-ambient-light-sensor/python-circuitpython">BH1750</a> ambient light sensor. This sensor is connected via a few wires and just taped (serious engineering) on top of the pi case. Using the python libraries blinka and circuitpython I was able to add software support for reading the current light value as from the sensor.</p><p></p><p>With a basic mechanism to read the light lux value, the next step is to write a script that turns the monitor on and off based on xrandr commands. This was described <a href="https://www.thedigitalpictureframe.com/xrandr-the-new-command-to-turn-your-connected-monitor-on-and-off/">online</a>. A simple python script that looped to read the current status of the light value and turned on or off the display and photo service did the trick. The last step was just wrapping the script as a systemd service. With basic linux administration we have a very workable solution&#8230; which works great.</p><p></p>]]></content:encoded></item><item><title><![CDATA[​​DIY Photo frame]]></title><description><![CDATA[The new year holidays gave me some free time to build a DIY photo frame.]]></description><link>https://www.rahul.revos.name/p/diy-photo-frame</link><guid isPermaLink="false">https://www.rahul.revos.name/p/diy-photo-frame</guid><dc:creator><![CDATA[Rahul Revo]]></dc:creator><pubDate>Sun, 07 Jan 2024 23:11:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!q2kM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d9e08c9-6b8c-4d1f-9041-fdd34fd54469.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The new year holidays gave me some free time to build a DIY photo frame. We had a smaller google device but needed something bigger and also wanted better control over the photos displayed.</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!q2kM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d9e08c9-6b8c-4d1f-9041-fdd34fd54469.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!q2kM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d9e08c9-6b8c-4d1f-9041-fdd34fd54469.heic 424w, https://substackcdn.com/image/fetch/$s_!q2kM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d9e08c9-6b8c-4d1f-9041-fdd34fd54469.heic 848w, https://substackcdn.com/image/fetch/$s_!q2kM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d9e08c9-6b8c-4d1f-9041-fdd34fd54469.heic 1272w, https://substackcdn.com/image/fetch/$s_!q2kM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d9e08c9-6b8c-4d1f-9041-fdd34fd54469.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!q2kM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d9e08c9-6b8c-4d1f-9041-fdd34fd54469.heic" width="728" height="482.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6d9e08c9-6b8c-4d1f-9041-fdd34fd54469.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:965,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:282696,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!q2kM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d9e08c9-6b8c-4d1f-9041-fdd34fd54469.heic 424w, https://substackcdn.com/image/fetch/$s_!q2kM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d9e08c9-6b8c-4d1f-9041-fdd34fd54469.heic 848w, https://substackcdn.com/image/fetch/$s_!q2kM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d9e08c9-6b8c-4d1f-9041-fdd34fd54469.heic 1272w, https://substackcdn.com/image/fetch/$s_!q2kM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d9e08c9-6b8c-4d1f-9041-fdd34fd54469.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This is the current set up for the photo frame. I followed instructions from <a href="https://www.thedigitalpictureframe.com/">https://www.thedigitalpictureframe.com/</a> to set up the device. The site has a ton of information and is not the easiest to navigate but by the end of the project I found good leads on what I needed to do.</p><p></p><p><strong>Hardware</strong> is a Raspberry Pi 3 with a 15.6" Portable Monitor for the display. They are connected via an HDMI port. I had a spare Pi and hence my cost was the monitor which was around $80 and labor (arguably free).</p><p></p><p><strong>Software</strong> setup and configuration is not trivial for noobs. For most people, I'd recommend a photo frame appliance like Aura. Their 15" models cost around $300 though. This option might be cheaper, but if you end up adding costs to build a good case then it's likely comparable. As a software engineer though, having bare wires in the drawing room feels like a good aesthetic. Let's see how long before anyone else in the house objects.</p><p></p><p>The base operating system is the Debian-derived Raspberry PI OS. For sharing pictures to the device, samba is set up for file sharing over the local network. The primary photo software is <a href="https://github.com/helgeerbe/picframe/wiki">pictureframe</a>. Picture frame loads the photos from the configured folder and displays them based on configuration. After booting up, the Pi automatically starts the pictureframe service which shows the photos in a loop and feels like any other regular digital photo frame.</p><p></p><p><strong>Advantages</strong> of the software are-</p><ul><li><p>Control over images being displayed. You can select images and share those with the device to be shown.</p></li><li><p>Support for multiple galleries. We have a bug folder with the kid's favorites and another one for the family pics. These are just folders in the folder and you can switch based on the mood.</p></li><li><p>There are many effects for displaying photos like blending, showing full screen, or a <a href="https://www.thedigitalpictureframe.com/activate-the-power-of-the-magic-matting-feature-on-your-raspberry-pi-picture-frame/">border mat</a>, or motion called <a href="https://en.wikipedia.org/wiki/Ken_Burns_effect">ken burns effect</a></p></li><li><p>Photo metadata like location, date, etc can be added.</p></li><li><p>Additional metadata like a clock can be added.</p></li><li><p>There are advanced features like remote control and automation that I still need to experiment with. Since you are also running a Pi with Linux, you also have access to the Pi extensions like light sensors, or rclone for cloud syncing of photos.</p></li></ul><p>Essentially you get a lot more control than a closed appliance, if you have basic Linux administration capabilities (and patience).</p><p></p><p>I still have many <strong>follow-up</strong> tasks on the project to be done.</p><ul><li><p>Power controls to automatically turn off the monitor are not working.</p></li><li><p>Switching of photo galleries is manual via ssh commands. This needs to be made accessible for the family. Maybe some phone app or automation extension.</p></li><li><p>Maybe make a wooden frame to hide the wires and give it a respectable look.</p></li><li><p>There are currently two independent power supplies to the pi and display. Have to see if those can be integrated somehow.</p></li></ul><p></p><p>The current state of the project was a good enough improvement for the family. This is also one of the few times my wife finds my profession useful, so that's another way to showcase some skills. Next, I've got to be able to get sponsorship for additional <a href="https://frameos.net/">single function smart frames</a>.</p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Change]]></title><description><![CDATA[Thinking in systems]]></description><link>https://www.rahul.revos.name/p/change</link><guid isPermaLink="false">https://www.rahul.revos.name/p/change</guid><dc:creator><![CDATA[Rahul Revo]]></dc:creator><pubDate>Fri, 22 Dec 2023 10:02:39 GMT</pubDate><content:encoded><![CDATA[<h2>Thinking in systems</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UcKQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa51c3985-c075-4e21-a17a-421456c44978_257x387.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UcKQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa51c3985-c075-4e21-a17a-421456c44978_257x387.jpeg 424w, https://substackcdn.com/image/fetch/$s_!UcKQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa51c3985-c075-4e21-a17a-421456c44978_257x387.jpeg 848w, https://substackcdn.com/image/fetch/$s_!UcKQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa51c3985-c075-4e21-a17a-421456c44978_257x387.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!UcKQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa51c3985-c075-4e21-a17a-421456c44978_257x387.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UcKQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa51c3985-c075-4e21-a17a-421456c44978_257x387.jpeg" width="257" height="387" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a51c3985-c075-4e21-a17a-421456c44978_257x387.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:387,&quot;width&quot;:257,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UcKQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa51c3985-c075-4e21-a17a-421456c44978_257x387.jpeg 424w, https://substackcdn.com/image/fetch/$s_!UcKQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa51c3985-c075-4e21-a17a-421456c44978_257x387.jpeg 848w, https://substackcdn.com/image/fetch/$s_!UcKQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa51c3985-c075-4e21-a17a-421456c44978_257x387.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!UcKQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa51c3985-c075-4e21-a17a-421456c44978_257x387.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>One of the most insightful books I read this year is <a href="https://en.wikipedia.org/wiki/Thinking_In_Systems:_A_Primer">Thinking in Systems</a>. The author explains what a <strong>system</strong> is, how they work and behave, complex systems (composed of smaller parts) and a lot about how they work. Unlike many self-help books that can be condensed into a couple of pages, this book is concise and extensive.</p><p></p><p>Working in technology, we design systems (interacting services) often and hence the basic idea is very familiar. However systems are not limited to technology. Systems exist everywhere - people in a company, people in a state, biological systems at cellular levels, ecosystems, and more. A system is an <strong>interconnected</strong> set of elements that is coherently organized to achieve something.</p><p></p><p>Watch the <a href="https://www.youtube.com/watch?v=FhcfjE7tJDY">video</a> from <a href="https://en.wikipedia.org/wiki/Russell_L._Ackoff">Russell Ackoff</a> on system's thinking</p><p>In particular he said,</p><blockquote><p><em>A system is never the sum of its parts; it&#8217;s the product of their interaction.</em></p></blockquote><p></p><p>The Thinking in system's book covers multiple topics in the area but I'd like to focus on one basic topic about change.</p><p><br></p><h2>Change</h2><p>A system must consist of three kinds of things: elements, inter-connections, and a function or purpose.</p><p></p><p>Let's take a company as an example of a system.</p><ul><li><p>The various <strong>employees</strong>, executives, customers, partners form the human elements of a company. The internal org chart of the company is hierarchical and those with executive leadership roles have higher impact on the company.</p></li><li><p>Connections would be the people to people <strong>relationships</strong> in the org, across employees and other customers and partners. Who works with whom and shares information and dependencies.</p></li><li><p>Purpose includes the <a href="https://www.bain.com/insights/management-tools-mission-and-vision-statements/">purpose, mission, vision statements</a> and also how the company <strong>acts</strong> beyond its stated goals.</p></li></ul><p></p><p><strong>Change</strong> in systems can happen across all three but the impact is different.</p><ul><li><p>Change of the elements happens as employees (or other people) leave and join. For the most part this has little change in the system by itself. A few replacements should not change the company too much and generally adapt to the existing behavior.</p></li><li><p>Change of interconnections is a high impact change in systems. If one function or role in the company changes its behavior, the rules change enough that the company may become unrecognizable.</p></li><li><p>Change of function or purpose changes a system profoundly, even if every element and interconnection remains the same.</p></li></ul><p></p><p>Dynamic companies need to change and I welcome change rather than rigidity. At the same time, understanding types of change definitely helped me contextualize how I felt about changes in my company.</p><p></p><p>Managing change requires understanding how the system will react to a change. A system might destabilize if the change causes unintended side-effects. However if managed well, systems can morph with time to achieve new outcomes or become effective at current ones.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Gratification for architects]]></title><description><![CDATA[Gratification is the pleasurable emotional reaction of happiness in response to a fulfillment of a desire or goal.]]></description><link>https://www.rahul.revos.name/p/gratification-for-architects</link><guid isPermaLink="false">https://www.rahul.revos.name/p/gratification-for-architects</guid><dc:creator><![CDATA[Rahul Revo]]></dc:creator><pubDate>Sun, 26 Nov 2023 06:06:05 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!EnTq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44391272-5101-4872-b134-beaf8598dcaa.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p><a href="https://en.wikipedia.org/wiki/Gratification)">Gratification</a> is the pleasurable emotional reaction of happiness in response to a fulfillment of a desire or goal.</p></blockquote><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EnTq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44391272-5101-4872-b134-beaf8598dcaa.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EnTq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44391272-5101-4872-b134-beaf8598dcaa.heic 424w, https://substackcdn.com/image/fetch/$s_!EnTq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44391272-5101-4872-b134-beaf8598dcaa.heic 848w, https://substackcdn.com/image/fetch/$s_!EnTq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44391272-5101-4872-b134-beaf8598dcaa.heic 1272w, https://substackcdn.com/image/fetch/$s_!EnTq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44391272-5101-4872-b134-beaf8598dcaa.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EnTq!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44391272-5101-4872-b134-beaf8598dcaa.heic" width="1200" height="562.9120879120879" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/44391272-5101-4872-b134-beaf8598dcaa.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:683,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:34604,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EnTq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44391272-5101-4872-b134-beaf8598dcaa.heic 424w, https://substackcdn.com/image/fetch/$s_!EnTq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44391272-5101-4872-b134-beaf8598dcaa.heic 848w, https://substackcdn.com/image/fetch/$s_!EnTq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44391272-5101-4872-b134-beaf8598dcaa.heic 1272w, https://substackcdn.com/image/fetch/$s_!EnTq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44391272-5101-4872-b134-beaf8598dcaa.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>As a software architect, there are some projects that I've been working on for many months. This week a work stream that I helped start almost a year ago finally got completed and reached closure. It was a fulfilling moment and reminded me about the longer cycles of gratification with increased seniority.</p><p></p><p>Early life as a software engineer was simpler. Most projects had clear requirements and the hard parts were getting the project completed based on technical constraints. Programming languages, software libraries etc were my primary tools. Completing tasks showed clear progress towards completion of projects. Though there were last minute changes in project scope at times, for the most part life was simpler. It was easier to feel a sense of gratification.</p><p></p><p>Now, as an architect projects are much larger in scope and complex. Laying out the vision for particular areas is hard, requiring knowledge of the current domain and also having a sense of the future. Since projects are longer running, the feedback loops for any gratification are longer and sometimes missed. Contributions on projects are also different at senior levels. At times you are just helping in an advisory role, sometimes helping to initiate a project and raise funding. For a few you work actively and clear out technical hurdles. Often you need to work with stakeholders across functions to solve complex non-technical organizational hurdles. As an individual you need to look at being aware of how your work is impacting the people and projects. Just working without feeling connected or getting the sense of gratification will ultimately lead to a lack of motivation. Hence as a new architect you should be prepared to see a shift on how you will get feedback and hence any gratification. Based on your active or passive participation in a project, set valid expectations.</p><p></p><p>At senior levels, you are likely also trying to handle many projects or maybe some larger projects with increased risk. I try to balance a portfolio of work with some small low risk and one large high risk project. Projects fail for many reasons. Sometimes the timing is not right. Even if the idea is sound, the supporting environment for the project is not ready. For one multi-year project that we're working on, the environment has changed enabling the same idea but in a completely new packaging. You have to build an intuition and evaluate ideas based on a holistic set of parameters but at the same time be ready to adapt. De-risk projects as much as possible and hope for success. However in the technology industry we have rapid change.&nbsp; You need to lean into the future and look for common problems. Align with business and chart out where technology is going. Disruption is always happening. Take some bets. You also have to let go of some promising opportunities. Also know that bigger changes take time to take effect.</p><p><br></p>]]></content:encoded></item><item><title><![CDATA[Power and morality]]></title><description><![CDATA[The 2023 Israel Hamas war has now been active for around 5 weeks.]]></description><link>https://www.rahul.revos.name/p/power-and-morality</link><guid isPermaLink="false">https://www.rahul.revos.name/p/power-and-morality</guid><dc:creator><![CDATA[Rahul Revo]]></dc:creator><pubDate>Tue, 14 Nov 2023 06:08:29 GMT</pubDate><content:encoded><![CDATA[<p>The <a href="https://en.wikipedia.org/wiki/2023_Israel%E2%80%93Hamas_war">2023 Israel Hamas war</a> has now been active for around 5 weeks. Many other sources exist for the wider context on the long running conflict. The current death toll is over 12,000 with mostly civilians brutally murdered.</p><p>I've been watching the news and interviews with leaders and others on the topic. Folks keep asking about <strong>moral</strong> equivalency for both perspectives. Who is right and who is wrong? Is one attack justified or what should happen next?</p><p>All I see is a power struggle and civilians being destroyed as collateral damage. There are many direct and indirect actors in this struggle. These include - Israel (state), Hamas, and their supporting governments like the USA, western block with EU and UK, Iranian state and proxies, middle east countries. Countries like India are watching from a distance. Who are being destroyed - the people of Israel, people of Palestine, other civilians in the region and to a lesser extent the rest of humanity.</p><p>Morality is not the primary criteria on the basis of which such decisions of war are made. Although every politician claims superior moral arguments for their decisions, that's what is known as marketing or in political terms - propaganda. Western democracies in particular have this propensity to break down all issues into binary choices of either good or evil. I suspect there is a deeper religious angle from abrahamic religions that brings this perspective. As a Hindu, I do not see the world in binary terms. We see many shades of gray. <a href="https://en.wikipedia.org/wiki/Ravana">Ravana</a> is arguably the greatest antagonist as per Hindu mythology. But even he is described as a learned scholar who obtained many boons from the God's based on his devotion and made wrong choices leading to his destruction.</p><p>The perceived interests of those in power are the primary deciding factor on which each actor takes what action. Each actor is acting in maximum capabilities to destroy the other opposing force while balancing blow back. They are all shades of gray (or blood red). Unfortunately all this violence is short term vengeance that will further divide all the people and bring no lasting solutions to either side.</p><p>As a follower of geo-politics I see this absence of morality. As a parent, I cannot unsee how we are failing. WARNING There are brutal pictures from this war including horrors like <a href="https://archive.li/SCMph">this</a>. It is unimaginable what impact such a conflict can have on a people. The real toll is going to be the lasting impact on generations of people. Those dead are saved in many respects. It's the spared who are going to bear the consequences of the actions by those in power for many generations. My only hope is the protests by the next generation who can force a break out of violence by giving a meaningful two-state solution a chance.</p><p></p><p></p><p>I&#8217;m disabling comments on this post.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Switching to a dumb phone (sort of)]]></title><description><![CDATA[Update from early 2024 This experiment failed! I'm back to a smartphone with limited personal usage.]]></description><link>https://www.rahul.revos.name/p/switching-to-a-dumb-phone-sort-of</link><guid isPermaLink="false">https://www.rahul.revos.name/p/switching-to-a-dumb-phone-sort-of</guid><dc:creator><![CDATA[Rahul Revo]]></dc:creator><pubDate>Mon, 16 Oct 2023 08:13:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vHRe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7393c1ab-e011-4530-b5ce-02a126268242.avif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<pre><code>Update from early 2024

This experiment failed!
I'm back to a smartphone with limited personal usage.</code></pre><p></p><p>Recently I started using a feature phone - <a href="https://www.nokia.com/phones/en_us/nokia-2780-flip">Nokia 2780 flip</a> instead of a regular smartphone. I'm not that great at self-control and would inadvertently end up spending too much time on my phone. I'm trying an experiment by adding more friction and getting some time and focus back.</p><p></p><h2>Device comparison</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vHRe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7393c1ab-e011-4530-b5ce-02a126268242.avif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vHRe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7393c1ab-e011-4530-b5ce-02a126268242.avif 424w, https://substackcdn.com/image/fetch/$s_!vHRe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7393c1ab-e011-4530-b5ce-02a126268242.avif 848w, https://substackcdn.com/image/fetch/$s_!vHRe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7393c1ab-e011-4530-b5ce-02a126268242.avif 1272w, https://substackcdn.com/image/fetch/$s_!vHRe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7393c1ab-e011-4530-b5ce-02a126268242.avif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vHRe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7393c1ab-e011-4530-b5ce-02a126268242.avif" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7393c1ab-e011-4530-b5ce-02a126268242.avif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vHRe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7393c1ab-e011-4530-b5ce-02a126268242.avif 424w, https://substackcdn.com/image/fetch/$s_!vHRe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7393c1ab-e011-4530-b5ce-02a126268242.avif 848w, https://substackcdn.com/image/fetch/$s_!vHRe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7393c1ab-e011-4530-b5ce-02a126268242.avif 1272w, https://substackcdn.com/image/fetch/$s_!vHRe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7393c1ab-e011-4530-b5ce-02a126268242.avif 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p><strong>iPhone 15 vs Nokia 2780 Flip</strong></p><p><strong>Cost</strong></p><p>$800</p><p>$100</p><p></p><p><strong>Colors</strong></p><p>Washed out pastels</p><p>Vibrant plastic colors. The nokia phone is marketed as blue but is definitely green!</p><p></p><p><strong>Materials</strong></p><p>Aluminum and glass</p><p>Likely recycled plastics</p><p></p><p><strong>Primary display</strong></p><p>Fancy bright display viewable from 170 degrees</p><p>Privacy dim display viewable from 4 degrees</p><p></p><p><strong>Secondary display</strong></p><p>Dynamic island</p><p>Closed flip display for notifications and time</p><p></p><p><strong>Camera</strong></p><p>48 mp</p><p>5 mp</p><p></p><p><strong>Cable</strong></p><p>USB-C</p><p>USB-C</p><p></p><p><strong>Battery life</strong></p><p>Almost a day</p><p>2 weeks</p><p></p><p><strong>Apps</strong></p><p>Yes, immensely addictive</p><p>Yes, immensely repulsive</p><p></p><p><strong>Critical features</strong></p><p>Phone, messaging, GPS, internet</p><p>Phone, messaging, GPS, internet</p><p></p><p>Arguably both are very comparable.</p><p></p><h2>Trade Offs</h2><p>The nokia phone is barely usable. It is slow and there are a few apps with minimal versions like google maps, and a browser. However youtube, whatsapp, facebook etc and other social apps seem to be missing. Unlikely that you will get addicted to this phone.</p><p></p><p>Unfortunately smartphones have become a necessity in modern life. I still have an iPhone setup with apps which I need to keep around and we have other devices in the family like other smartphones, ipads, etc. When traveling I'll need to use maps. For local trips, if I am traveling with my wife we can use her phone with data. Otherwise I can use my phone with offline maps. There are some apps that are necessities like the iRobot app, library apps like libby, many home control apps, and authenticator apps. I have many work apps as well which are optional but make work accessible like slack, confluence and more.</p><p></p><p>The nokia phone has two major shortcomings, no support for a personal hotspot and no whatsapp. With hotspot, I could have used my smartphone on a few occasions that I needed more functionality. Whatsapp is the messaging platform that I'm connected with most people. Whatsapp is supported on an older version of the operating system but not this current one, which is over a year old. For those interested, the operating system is <a href="https://en.wikipedia.org/wiki/KaiOS">KaiOS</a> which is a firefox based OS and now owned primarily by a Chinese company. India's Reliance JIO is also a primary user though they seem to be shifting to another Android based OS. Apple is moving to eSIM which will make switching phones challenging in the future. They are incentivized to keep making smartphones completely indispensable with payment features and passkeys for logins.</p><p></p><h2>The Plan</h2><p>I hope to leave my smartphone with my computer and use it more as a tool when needed. I&#8217;ve found myself mindlessly scrolling through youtube more often than I&#8217;d like to admit. I&#8217;ve been successful at a simple change, replacing my smartwatch with an analog quartz watch. The smart watch was not adding that much value and charging it everyday was a pain. Others also seem to be on this journey towards <a href="https://www.bbc.com/news/business-60763168">lesser distractions</a> and mindfulness.</p><p></p>]]></content:encoded></item><item><title><![CDATA[America's skilled immigration crisis]]></title><description><![CDATA[Modern America has been made possible to a large extent by the contributions of thousands of immigrants.]]></description><link>https://www.rahul.revos.name/p/americas-skilled-immigration-crisis</link><guid isPermaLink="false">https://www.rahul.revos.name/p/americas-skilled-immigration-crisis</guid><dc:creator><![CDATA[Rahul Revo]]></dc:creator><pubDate>Mon, 04 Sep 2023 08:24:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!DTPM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff500eec8-3eab-457e-91b5-4772e327358d_1129x678.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Modern America has been made possible to a large extent by the contributions of thousands of immigrants. America has <strong>attracted the best talent</strong> from throughout the world because of its values and opportunities. However that door has now closed for millions and this crisis is going to lead to serious long term repercussions.</p><p></p><p>In this article I&#8217;ll focus on the cause from the perspective of Indian workers looking to immigrate to America via employment options. I am sympathetic to other immigration as well but have not studied those scenarios.</p><p></p><h2>Current Green card backlog</h2><p>Over <a href="https://www.cato.org/blog/18-million-employment-based-green-card-backlog">1.8 million cases</a> are now estimated to be pending for employment-based green card processing. Green card allocation is capped based on country of birth. Because immigration in recent decades has been dominated by tech workers from India and China, they face the longest wait times for a green card. Without any change in the policies, new applicants for a major category of applicants (EB2 and EB3) face a timeline of over a 100 years for getting through the green card process. Read that again; <strong>new applicants to the green card process will die before they get a green card</strong>.</p><p><br>The green cards queue is based on a date called the priority date. The current priority date for India is Jan 1st 2011, which is over 12 years ago. During covid, priority dates progressed temporarily so that green cards were available for around a 8 year gap. However, going forward from the 2010s, the number of applications for Indians compared to other countries continues to increase drastically. Hence the expected wait time for green cards exponentially increases to over 100 years.</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://cbkimmigration.com/employment-based-immigration/perm-labor-certification/green-card-through-perm-roadmap/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DTPM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff500eec8-3eab-457e-91b5-4772e327358d_1129x678.png 424w, https://substackcdn.com/image/fetch/$s_!DTPM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff500eec8-3eab-457e-91b5-4772e327358d_1129x678.png 848w, https://substackcdn.com/image/fetch/$s_!DTPM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff500eec8-3eab-457e-91b5-4772e327358d_1129x678.png 1272w, https://substackcdn.com/image/fetch/$s_!DTPM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff500eec8-3eab-457e-91b5-4772e327358d_1129x678.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DTPM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff500eec8-3eab-457e-91b5-4772e327358d_1129x678.png" width="1129" height="678" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f500eec8-3eab-457e-91b5-4772e327358d_1129x678.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:678,&quot;width&quot;:1129,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://cbkimmigration.com/employment-based-immigration/perm-labor-certification/green-card-through-perm-roadmap/&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DTPM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff500eec8-3eab-457e-91b5-4772e327358d_1129x678.png 424w, https://substackcdn.com/image/fetch/$s_!DTPM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff500eec8-3eab-457e-91b5-4772e327358d_1129x678.png 848w, https://substackcdn.com/image/fetch/$s_!DTPM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff500eec8-3eab-457e-91b5-4772e327358d_1129x678.png 1272w, https://substackcdn.com/image/fetch/$s_!DTPM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff500eec8-3eab-457e-91b5-4772e327358d_1129x678.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Many applicants for green cards start under the <strong>H1B visa program</strong>. That program is capped to a maximum of 6 years of work unless you get a immigration petition (i.e. i140 with the priority date) filed. However even getting to that phase now takes multiple years of processing times. The Perm process itself takes over 2 years to complete in 2023 because of processing delays with various government agencies.</p><p>If you&#8217;re lucky and get the i140 filed it is possible for a H1B holder to continue renewing their visa indefinitely. However that benefit has strings attached. You need to actively get your visa stamped at a US consulate which takes an immense amount of time and money. Travel outside the US becomes a burden since getting a visa stamped itself is backlogged. Maintaining an active job that sponsors the H1B visa is required throughout while you wait for years. That means that most visa holders prefer working for stable mid to large sized companies instead of startups which potentially have high rewards but are high risk. In fact during layoffs earlier this year, many Indians had to return to India because of loss of their visa. If you change employers you have to redo initial steps leading to more paperwork and bureaucracy.</p><p>Those who are trying to immigrate to the USA end up trying to maintain their jobs. They are severely limited in making long term decisions including financial, family or other categories. When your foundations of location are unstable, there is a fog over many actions. We&#8217;ve been in America for almost 15 years now and are still <strong>stuck in this limbo</strong>. The experience and monetary rewards we&#8217;ve gained for these years has been tremendous, but I&#8217;m not certain how long we intend to continue this struggle.</p><p></p><h2>Opportunities for Indians</h2><p>For individuals like me, there are many <strong>opportunities in India</strong> now. My company and many others offer good jobs with similar profiles with senior leadership roles. Skilled workers have been returning to India and hence the working culture in many companies is comparable and I should be able to build networks there. Taking care of aging parents can be solved easily by leaving to go back home. Arguably a tech salary in India should translate to the higher end of a middle class lifestyle compared to a very average lifestyle in the bay area.</p><p>For kids coming here for education or starting work I am not sure if moving to the USA is still viable. There is hope that the immigration policies will improve but we&#8217;ve been waiting for that for years. Given the current state of politics, reform feels impossible.</p><p>Other countries like <a href="https://www.canada.ca/en/immigration-refugees-citizenship/news/2023/06/canadas-tech-talent-strategy.html">Canada</a> and Australia offer good immigration options and are potentially still valid options.</p><p></p><p>India itself is growing quickly and maturing as a major economy. Capital is going to continue to flow into India for the next few decades as the <a href="https://foreignpolicy.com/2023/08/23/derisking-us-china-biden-decoupling-technology-supply-chains-semiconductors-chips-ira-trade/">USA looks to de-risk from China</a>. I still believe that India cannot still utilize its greatest resource - people - well enough. Systemic issues like corruption, education, mis-management are still a drain. However the situation is improving and the society is slowly but surely realizing its potential. In the long term, the Indian diaspora will help India since they are deeply connected benefiting all countries.</p><p></p><h2>America&#8217;s crisis</h2><p>America has many strengths as a global leader. It provides opportunities that are unmatched and unparalleled in research and technical know how. However it still needs skilled labor especially from places like India to help it maintain its position.</p><p>Short term thinking and vilification of the outsider has led to a political quagmire of inaction. Based on contributions by skilled immigrants I can argue that streamlining immigration is in fact in the national interest of the USA. Japan and other countries have not been open to immigrants leading to <a href="https://en.wikipedia.org/wiki/Demographics_of_Japan">rapid aging of the population</a>. American society is relatively open to immigrants and has been a fantastic place to live in. About <strong>40% PhD</strong> students in the US are international students. The technological dominance of the country is what makes it competitive and drives growth for the rest of the population. Legal and illegal immigration are mixed but none are solved leading to a complete stalemate for all parties.</p><p></p><p>Sometimes I am shocked at how <strong>trivial</strong> the problem feels. With a population of around 340 million people, the US feels sparsely populated for its land area. Here is some more trivia, the US mainland is actually slightly smaller than the area of India, but India has a population of more than 1.4 billion people (4x higher).&nbsp;The US can easily absorb immigrants at higher rates and actually hire some of those people to automate the processes in immigration offices.</p><p></p><p>Behavioral scientists can probably model this; but practically I do not think anyone is going to die waiting for a green card&#8230; they are just not going to consider coming to the USA. In the long term unless resolved, this is <strong>America&#8217;s crisis</strong>.</p><p></p>]]></content:encoded></item></channel></rss>