<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Ishan Sharma</title>
    <link>https://ishan.co/</link>
    <description>Recent content on Ishan Sharma</description>
    <generator>Hugo -- 0.150.1</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 30 Sep 2025 20:12:57 -0700</lastBuildDate>
    <atom:link href="https://ishan.co/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Second Person Birds</title>
      <link>https://ishan.co/second-person-birds/</link>
      <pubDate>Tue, 30 Sep 2025 20:12:57 -0700</pubDate>
      <guid>https://ishan.co/second-person-birds/</guid>
      <description>&lt;p&gt;Training for my half-marathon, I was doing a long run. My training plan called for a 20 km run that day, but I decided to push myself a bit. I mean, why not just do the entire 21K if I&amp;rsquo;m so close.&lt;/p&gt;
&lt;p&gt;Around km 18, I was in the middle of 2 ponds, slowly progressing. This old lady waved at me and said something. I took my headphones out.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Do you like bird-watching?&amp;rdquo;
&amp;ldquo;Not really!&amp;rdquo;
&amp;ldquo;I just wanted to show you these rare birds, this one over here is a Blue Heron. And that one over there, is another rare one&amp;rdquo;.
&amp;ldquo;Oh wow, I did not know that!&amp;rdquo;
&amp;ldquo;Yes, they only show up for like 2–3 weeks in this area, I&amp;rsquo;m sorry for stopping you, but I just wanted to share this&amp;rdquo;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Training for my half-marathon, I was doing a long run. My training plan called for a 20 km run that day, but I decided to push myself a bit. I mean, why not just do the entire 21K if I&rsquo;m so close.</p>
<p>Around km 18, I was in the middle of 2 ponds, slowly progressing. This old lady waved at me and said something. I took my headphones out.</p>
<p>&ldquo;Do you like bird-watching?&rdquo;
&ldquo;Not really!&rdquo;
&ldquo;I just wanted to show you these rare birds, this one over here is a Blue Heron. And that one over there, is another rare one&rdquo;.
&ldquo;Oh wow, I did not know that!&rdquo;
&ldquo;Yes, they only show up for like 2–3 weeks in this area, I&rsquo;m sorry for stopping you, but I just wanted to share this&rdquo;</p>
<p>I don&rsquo;t know if I recall the bird names correctly, though blue heron does look correct when I search for images. The other species, I don&rsquo;t remember at all.</p>
<p>What I do remember is that infectious energy, the passion. That&rsquo;s the kind of passion I aspire to have for a hobby, for a project, maybe even for running.</p>
<hr />
<p>This is last day entry for <a href="https://indieweb.org/IndieWeb_Carnival">IndieWeb Carnival</a> September 2025: <a href="https://toground.link/second-person-birds/">second person birds</a>.</p>
<p>Image © Ishan Sharma. Taken with Fujifilm X-T50, Acros simulation.</p>
]]></content:encoded>
    </item>
    <item>
      <title>AI Images in Blog Posts: Can We Do Better?</title>
      <link>https://ishan.co/ai-images-in-blog-posts/</link>
      <pubDate>Sun, 21 Sep 2025 12:35:11 -0700</pubDate>
      <guid>https://ishan.co/ai-images-in-blog-posts/</guid>
      <description>AI generated images often appear low effort, I take a stab at prompting to see if I can get better results.</description>
      <content:encoded><![CDATA[<p>I am not a fan of AI-generated images. I have used them for memes, but they&rsquo;re challenging to get right in a professional context.</p>
<p>In Manuel&rsquo;s post <a href="https://manuelmoreale.com/on-featured-images-in-blog-posts">On featured images in blog posts</a>, they are completely against any featured images. I don&rsquo;t go as far. I think that as the writer, I am free to add some whimsy or color to the blog post, as long as I am respecting the user by not adding excessively large images.</p>
<p>This morning, I came across a blog post including an AI-generated image that made me think about this topic in a bit more detail.</p>
<h2 id="why-i-do-not-like-ai-generate-images">Why I Do Not Like AI Generate Images</h2>
<ol>
<li>Image generators are trained on content without proper attribution and license, I have reservations using results of that.</li>
<li>I think they distract from the main content and usually don&rsquo;t serve a purpose.</li>
<li>They are often a signal that they were put there for the sake of adding something.</li>
</ol>
<p>For someone wanting to add artwork to a blog post, there are better options:</p>
<ol>
<li>Finding a royalty-free option like <a href="https://unsplash.com">Unsplash</a></li>
<li>Doing it themselves</li>
<li>Hiring an artist
I know these are not easy, but even doing a basic diagram yourself adds a lot more personality and originality. I recall reading Stratechery regularly because hand drawn images like <a href="https://stratechery.com/2025/paradigm-shifts-and-the-winners-curse/">in this post</a> signaled that Ben Thompson cared about the subject to draw something (or get something drawn).</li>
</ol>
<h2 id="npm-shai-hulud-vulnerability">NPM Shai-Hulud Vulnerability</h2>
<p>The post I mentioned is <a href="https://www.koi.security/incident/shai-hulud-npm-supply-chain-attack-crowdstrike-tinycolor">Live Updates: Shai-Hulud, The Most Dangerous NPM Breach In History Affecting CrowdStrike and Hundreds of Popular Packages</a>, which I found via <a href="https://lobste.rs/s/rgfgku/shai_hulud_most_dangerous_npm_breach">Lobste.rs</a>. This immediately intrigued me. Shai-Hulud indicates a huge issue.</p>
<h3 id="shai-what-now">Shai-what now?</h3>
<p>You can skip this explanation if you have seen Dune movies or read the books.</p>
<p>The series revolves around a desert planet called Dune or Arrakis. The main threat on this planet are huge sand worms, are attracted to any rhythmic sounds and disturbances. They&rsquo;re unique to Arrakis and produce a substance called spice melange, that increases human lifespan and sometimes gives prescience to the consumers.</p>
<p>Fremen, the planet&rsquo;s indigenous people, call the worms Shai-Hulud. They also use them as a method of transportation. They summon the worms using a rhythmic thumping device and direct them using specialized hooks. Wikipedia has a detailed page about worms, beware of the spoilers though: <a href="https://en.wikipedia.org/wiki/Sandworm_(Dune)">Sandworm (Dune)</a>.</p>
<h3 id="parallels-to-security">Parallels to Security</h3>
<p>Back to the NPM security incident, I think Shai-Hulud is a clever and very fitting name. In the Dune universe, facing a sandworm is essentially a death sentence.
The vulnerability lays hidden, like sandworm, beneath the surface. Once it hits, the damage can be catastrophic!</p>
<h2 id="the-image">The Image</h2>
<p>With the context, let&rsquo;s look at the image on the page:</p>
<figure>
    <img loading="lazy" src="original-post-image.png#center"
         alt="Original image from blog post, showing a Koi dressed as Fremen fighting a sandworm in Dune"/> 
</figure>

<p>Looks good at first glance, right? The company&rsquo;s mascot is holding a knife and ready to fight a sandworm coming out of sand.</p>
<p>Ignoring the standard ChatGPT/Dall-E style, having seen the movie and read 4.5ish books, I noticed that fighting a worm with a knife is not going to work. Besides this knife being comically small, it&rsquo;s practically useless against the worm.</p>
<p>It&rsquo;s easy to point fingers, but can we do better? I spent some time prompting ChatGPT and arrived at this image in ~10 minutes (prompting on the side while writing this post, <a href="https://chatgpt.com/share/68d04a81-1010-8010-97d9-8e2503f3800c">full conversation</a>):</p>
<figure>
    <img loading="lazy" src="attempt-1.png#center"
         alt="My attempt at generating an image similar to original one."/> <figcaption>
            <p>My first attempt, I like that knife is larger.</p>
        </figcaption>
</figure>

<p>That&rsquo;s not much of an improvement.</p>
<p>One technique that I recently learned is using an LLM to generate the prompt and then handing that over to the acutal generator.</p>
<p>So let&rsquo;s try that:</p>
<blockquote>
<p>I want you to help me with writing a prompt.</p></blockquote>
<blockquote>
<p>I want to generate a feature image for a blog post. Context: The page is about a security vulnerability. I&rsquo;m calling it Shai-Hulud, after the sandworms in Dune. I want the image to be of our company&rsquo;s mascot fighting a sandworm. The mascot should be clothed like a fremen. It should have bird/angel like wings near throat, where human ears would be.</p></blockquote>
<blockquote>
<p>It&rsquo;s important to keep the image lore accurate, so add details about characteristics of the suit, sandworm and how a character in Dune universe would fight or deal with a worm.</p></blockquote>
<blockquote>
<p>Please generate this prompt, be detailed and take your time to think.</p></blockquote>
<p>ChatGPT generated multiple prompts, even offering to optimizing them for Dall-E 3. <a href="https://chatgpt.com/share/68d046d7-027c-8010-ae6f-c8aba1ec04d4">Full conversation</a>.</p>
<p>Some examples:</p>
<figure>
    <img loading="lazy" src="gen-attempt-1.png#center"
         alt="First example of generated image from a generated prompt"/> <figcaption>
            <p>This is one of my favorites, it also reminds of Elden Ring in a way</p>
        </figcaption>
</figure>

<figure>
    <img loading="lazy" src="gen-attempt-2.png#center"
         alt="Second example of generated image from a generated prompt"/> <figcaption>
            <p>I like the sun in this, but the hooks are off.</p>
        </figcaption>
</figure>

<p>I didn&rsquo;t think these were much of an improvement over the original, so I decided to paste the full, detailed prompt into ChatGPT (<a href="https://chatgpt.com/share/68d04afa-51b0-8010-9d94-fda7858685d1">full conversation</a>). Result:</p>
<figure>
    <img loading="lazy" src="gen-detailed-1.png#center"
         alt="Third example of generated image from the full generated prompt"/> <figcaption>
            <p>Getting better, but hooks are still not good. I like the thumper like thing/other ropes on worm and the splashing sand.</p>
        </figcaption>
</figure>

<p>I tried minor changes like adding a figure to denote npm but that didn&rsquo;t work so well (<a href="https://chatgpt.com/share/68d05a45-de70-8010-aabf-d1dc9a1039d9">conversation</a>).</p>
<figure>
    <img loading="lazy" src="gen-npm-1.png#center"
         alt="Trying to add NPM to the image"/> <figcaption>
            <p>NPM looks like reaper in this one, but it&rsquo;s fighting, not a fan</p>
        </figcaption>
</figure>

<figure>
    <img loading="lazy" src="gen-npm-2.png#center"
         alt="Adjusting"/> <figcaption>
            <p>Trying to place NPM behind resulted in ChatGPT refusing to associate anything with NPM and then placing it between Koi and the worm</p>
        </figcaption>
</figure>

<h2 id="are-these-better">Are These Better?</h2>
<p>I don&rsquo;t think so. I like the Elden Ring style image and the one with full prompt slightly over the original one.</p>
<p>This is close to what I&rsquo;ve seen about AI usage so far, it&rsquo;s good to get something shipped that&rsquo;s 80% there. That&rsquo;s often exactly what a business needs.</p>
<p>If you care for the last 20%, you need to know about the subject. And if you can&rsquo;t do it yourself, you require an expert to do exactly what you have in mind.</p>
<h2 id="conclusion">Conclusion</h2>
<p>My opinion is that we&rsquo;re better off not using AI-generated images in blog posts. But I realize that I&rsquo;m not an expert at image generation, and only tried Dall-E 3/ChatGPT. If you think another model or prompt can do better, I&rsquo;m open to feedback.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Experimental July</title>
      <link>https://ishan.co/experimental-july/</link>
      <pubDate>Tue, 01 Jul 2025 21:47:29 -0700</pubDate>
      <guid>https://ishan.co/experimental-july/</guid>
      <description>&lt;p&gt;I have been following Manuel Moreale&amp;rsquo;s &lt;a href=&#34;https://manuelmoreale.com/experimental-june&#34;&gt;Experimental June&lt;/a&gt; plan to reduce consumption. The &lt;a href=&#34;https://manuelmoreale.com/experimental-june-week-four&#34;&gt;latest update&lt;/a&gt; was on June 29. That motivated me to finally start with a plan to reduce my screen time. The May 16 episode of Search Engine: &lt;a href=&#34;https://www.searchengine.show/how-to-stop-being-so-phone-addicted-without-self-discipline-or-meditation/&#34;&gt;How to stop being so phone addicted (without self-discipline or meditation)&lt;/a&gt; was another catalyst.&lt;/p&gt;
&lt;p&gt;I started on June 29 and as broken as &lt;a href=&#34;https://ishan.co/screen-time/&#34;&gt;Screen Time&lt;/a&gt; is, it&amp;rsquo;s still a good enough reporting tool. So far, I&amp;rsquo;ve succeeded in reducing my daily screen time from 3 to 4 hours to under 2 hours consistently!&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I have been following Manuel Moreale&rsquo;s <a href="https://manuelmoreale.com/experimental-june">Experimental June</a> plan to reduce consumption. The <a href="https://manuelmoreale.com/experimental-june-week-four">latest update</a> was on June 29. That motivated me to finally start with a plan to reduce my screen time. The May 16 episode of Search Engine: <a href="https://www.searchengine.show/how-to-stop-being-so-phone-addicted-without-self-discipline-or-meditation/">How to stop being so phone addicted (without self-discipline or meditation)</a> was another catalyst.</p>
<p>I started on June 29 and as broken as <a href="https://ishan.co/screen-time/">Screen Time</a> is, it&rsquo;s still a good enough reporting tool. So far, I&rsquo;ve succeeded in reducing my daily screen time from 3 to 4 hours to under 2 hours consistently!</p>
<p>My rules:</p>
<ol>
<li>Keep the phone in the bedroom when at home, use it only close to the charger</li>
<li>In the office, keep my phone in the drawer so that I&rsquo;m not tempted to pick it up</li>
<li>Listening to podcasts/books while running/driving is ok</li>
<li>The main enemy is subconscious usage where I just take the phone out because there&rsquo;s nothing else to do and start scrolling</li>
</ol>
<p>I&rsquo;ll slowly replace this time with writing, reading books or drawing. For now, I&rsquo;m happy with small steps. So far, I&rsquo;ve found myself using larger screens deliberately, and focusing a bit more than I usually do with my phone around.</p>
]]></content:encoded>
    </item>
    <item>
      <title>“Hi LG!” — The Unwanted Voice Assistant That Kept Taking Over My TV</title>
      <link>https://ishan.co/hi-lg/</link>
      <pubDate>Tue, 04 Mar 2025 20:10:40 -0800</pubDate>
      <guid>https://ishan.co/hi-lg/</guid>
      <description>&lt;p&gt;I feel like I have a tumultuous relationship with TVs and monitors. It took editing system files to get rid of &lt;a href=&#34;https://ishan.co/external-monitor-underscan/&#34;&gt;some persistent black bars&lt;/a&gt; in 2018.&lt;/p&gt;
&lt;p&gt;Then, in 2022, I had to jump through hoops to &lt;a href=&#34;https://ishan.co/getting-an-apple-tv-remote-volume-controls-to-work-with-tcl-roku-tv/&#34;&gt;get volume buttons working on an Apple TV remote with my TCL Roku TV&lt;/a&gt;. I never got that TV to stop displaying a static screen randomly when Apple TV switched between HDR and SDR.&lt;/p&gt;
&lt;p&gt;In the middle of 2024, I sold TCL TV and got an LG C3. I kept my setup, treating the TV as a dumb screen and letting Apple TV handle all the network stuff. However, the TV had a very interesting issue.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I feel like I have a tumultuous relationship with TVs and monitors. It took editing system files to get rid of <a href="https://ishan.co/external-monitor-underscan/">some persistent black bars</a> in 2018.</p>
<p>Then, in 2022, I had to jump through hoops to <a href="https://ishan.co/getting-an-apple-tv-remote-volume-controls-to-work-with-tcl-roku-tv/">get volume buttons working on an Apple TV remote with my TCL Roku TV</a>. I never got that TV to stop displaying a static screen randomly when Apple TV switched between HDR and SDR.</p>
<p>In the middle of 2024, I sold TCL TV and got an LG C3. I kept my setup, treating the TV as a dumb screen and letting Apple TV handle all the network stuff. However, the TV had a very interesting issue.</p>
<p>It would display black out the screen to display this, um, tutorial:</p>
<p>“Voice Recognition will be available by connecting TV to the network”</p>
<p>That’s not fun!</p>
<p>After spelunking on some forums, I found out what was happening. And I couldn’t believe the reason.</p>
<p>Brace up for the explanation:</p>
<ol>
<li>The TV ships with a voice assistant on by default. It’ll listen for “Hi LG”.</li>
<li>If you don’t accept the voice TOS, there is no option to turn this off.</li>
<li>Every time the TV hears “Hi LG”, it’ll try to activate the voice assistant.</li>
<li>Without network connectivity, it’ll block whatever is on-screen to show the tutorial with no hint of why it activated.</li>
<li>Of course, it’s not very accurate, and it was triggered by something sounding vaguely familiar on the speakers.</li>
</ol>
<p>The solution?</p>
<ol>
<li>Accept voice agreement</li>
<li>Turn the voice assistant off under AI settings</li>
<li>Reject voice agreement again</li>
</ol>
<p>Super intuitive, right?</p>
]]></content:encoded>
    </item>
    <item>
      <title>Easy Metrics</title>
      <link>https://ishan.co/easy-metrics/</link>
      <pubDate>Wed, 12 Feb 2025 19:00:00 -0800</pubDate>
      <guid>https://ishan.co/easy-metrics/</guid>
      <description>&lt;p&gt;I love tracking stuff. I&amp;rsquo;m not obsessed with the numbers, but I definitely do more tracking than your usual person. I liked Steam in the beginning because it provided a central location to track my playtime. RescueTime, a productivity tracking tool, was the first software installed on my computers for more than 7 years.&lt;/p&gt;
&lt;p&gt;A few recent things lead me down this rabbit hole of thinking how we humans and our society are uniquely centered around numbers.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I love tracking stuff. I&rsquo;m not obsessed with the numbers, but I definitely do more tracking than your usual person. I liked Steam in the beginning because it provided a central location to track my playtime. RescueTime, a productivity tracking tool, was the first software installed on my computers for more than 7 years.</p>
<p>A few recent things lead me down this rabbit hole of thinking how we humans and our society are uniquely centered around numbers.</p>
<p>A person&rsquo;s worth is essentially measured by the money they have. We measure children by their grades. Organizations, our large social structures, are measured by their net worth, or number of employees, or number of users.</p>
<p>But humans are also lazy. So we end up tracking the easiest number. All the examples I quoted are easy measures, not the best ones.</p>
<h2 id="dope-on-the-table">Dope On The Table</h2>
<p>I&rsquo;ve been doing a rewatch of The Wire, one of my favorite shows. And there are many instances where the cops go for things that were easy to measure, overlooking the bigger picture.</p>
<p><strong>Season 1 Spoilers for The Wire ahead</strong></p>
<p>In Season 1, Kima, a cop, gets shot as part of an ongoing drug investigation. The investigation team is close to nailing the main antagonists and their drug suppliers. After the shooting, the department needs to show that they are acting. So instead of waiting for the investigation, they decided to make arrests and put &ldquo;dope on the table&rdquo;.</p>
<p>That ends up derailing most of the investigation.</p>
<p><strong>Season 4 Spoilers for The Wire Ahead</strong></p>
<p>Season 4 of The Wire is focused on the education system. There are a few instances where the system emphasizes the wrong metrics.</p>
<p>The school&rsquo;s funding is tied to how many children attend the school. A child coming to school once a month is considered to have attended for the entire month. So that&rsquo;s what the school does! The Vice Principal hires a couple of people to bring in kids once a month to keep the funding.</p>
<p>In another instance, the school asks teachers to &ldquo;teach the test&rdquo; instead of making sure the kids understand the concepts.</p>
<p><strong>Spoilers Over</strong></p>
<h2 id="improving-my-mileage">Improving My Mileage</h2>
<p>A couple of months back, Youtube algorithm surfaced this interesting MythBusters video &ldquo;Which Is Faster: Weaving in Traffic or Staying in One Lane?&rdquo;:</p>
<p><a href="https://www.youtube.com/watch?v=ZefgUVg3qx0">https://www.youtube.com/watch?v=ZefgUVg3qx0</a></p>
<p>The conclusion at the end is that lane weaver gets there faster, but barely. I noticed it only recently that the video is again talking about time, the easiest thing to measure.</p>
<p>Unrelated, I encountered this quote in a comment on <a href="https://arstechnica.com/cars/2025/02/review-2025-genesis-electrified-gv70-is-charming-but-it-needs-updates/?comments=1&amp;comments-page=1#comments">Ars Technica&rsquo;s 2025 Genesis GV70 review</a>:</p>
<blockquote>
<p>But drive carefully, and I reckon you could stretch that to about 260 miles (418 km) using eco mode, which decouples the front motor to improve energy efficiency and some light hypermiling.</p></blockquote>
<p>Hypermiling was a new term. To learn about it, I went to <a href="https://en.wikipedia.org/wiki/Hypermiling">the Wikipedia article on the topic</a>. I decided to give it a try on my commute to the office.</p>
<p>The three times I have tried so far, my mileage was consistently more than when  weaving in and out of the traffic. Usually, I get 30 miles per gallon (12.75 kilometers per liter). With sticking to the right lane and not accelerating too much, I got 36 mpg (15.30 kpl). That&rsquo;s a 20% increase.</p>
<p>And the funny thing is, I&rsquo;ve found myself being less angry at erratic drivers. No matter how fast I&rsquo;m going in the left lane, there&rsquo;s always someone who wants to go faster and starts tailgating behind me. No such issues in the slow lane.</p>
<p>20% mileage increase and more calm mind, just because I found a better number to measure. Instead of measuring speed or time, which are obvious choices, moving my focus to mileage is better for me, other drivers on the road and the environment.</p>
<p>Tying back to the theme of society, I see this entire thing as a societal problem as well! As a society, there is focus on safe driving, but there&rsquo;s no education on improving mileage. Even in price sensitive markets like India, better mileage is a selling point, not something we teach people.</p>
<h2 id="finding-better-metrics">Finding Better Metrics</h2>
<p>I don&rsquo;t have any advice on how to find better metrics. These examples were some recent things that I had noticed.</p>
<p>A good place to start would be to go below the surface. Most of the people will not dive deep into intricacies of systems. After all, that&rsquo;s something we aren&rsquo;t taught. But if you take time to do that, you&rsquo;ll find better ways to measure things.</p>
]]></content:encoded>
    </item>
    <item>
      <title>IndieWeb Carnival: Small Web is Frictionless</title>
      <link>https://ishan.co/small-web-frictionless/</link>
      <pubDate>Mon, 27 Jan 2025 20:00:00 -0800</pubDate>
      <guid>https://ishan.co/small-web-frictionless/</guid>
      <description>My thoughts on Frictionless Web and why I think small web is truly frictionless</description>
      <content:encoded><![CDATA[<p>I found about <a href="https://vhbelvadi.com/indieweb-carnival-friction">V.H. Belvadi&rsquo;s IndieWeb Carnival on friction</a> from Manuel Moreale&rsquo;s <a href="https://manuelmoreale.com/indieweb-carnival-on-the-importance-of-friction">IndieWeb Carnival: On the importance of friction</a>. I have some thoughts on the topic, so I decided to write my entry.</p>
<hr />
<p>I&rsquo;m not very involved with indie web. I have been blogging since 2010, and it&rsquo;s always been a hobby for me. Reading wise, I do not actively seek small blogs. There are several in my RSS reader, but most of them surfaced on the orange site. Then the all social media decided to blow up one after another, and I quit most of it. These days, I find new and interesting blogs on <a href="https://hachyderm.io/@is/">Mastadon</a> or <a href="https://lobste.rs">Lobsters</a>.</p>
<p>Back to our topic, when I think about friction, I imagine it as anything that comes between a user and their intended result. If we take that definition, the corporate web is the very definition of friction. It&rsquo;s supposed to be a straightforward experience that&rsquo;s supposed to suck us in and keep us engaged. But does it?</p>
<p>Friction is the reason <a href="https://everybootstrap.site">Every F*cking Bootstrap Website Ever</a> exists and feels relevant. That website is an amalgamation of every mid to large size company&rsquo;s web presence. And that&rsquo;s not frictionless. You have newsletter popups, cookie popups and paywalls everywhere!</p>
<p>Even large services, where user retention is supposed to be paramount, there&rsquo;s a conflict of priorities. You have ads, and no one likes them. At best, they&rsquo;re tolerated. Services want you to stay on the page, but they also want to show you ads. And these ads are friction. You&rsquo;re there for entertainment, or connecting with someone. These bumps along the way are the friction preventing you from accomplishing what you set out to do!</p>
<p>On Google, the sponsored results dominate the top spots. And many times, they are not what you&rsquo;re searching for! There&rsquo;ll be a competitor&rsquo;s ad on top instead of the website or service you were looking for. <a href="https://www.theverge.com/2024/11/19/24299762/google-search-parasite-seo-publishers-advon">Parasitic SEO</a> was a thing until recent Google changes, where big websites just displaced small websites with legitimate research by spamming product reviews!</p>
<p>On YouTube, 2 out of the first 6 videos are ads. If you don&rsquo;t pay for Premium, you&rsquo;ll get 2–3 ads before you even see the video you wanted to. And then the YouTuber will have their sponsors. Build your website with Squarespace, first protect your privacy with SharkVPN, then remove your private data with Incogni once it&rsquo;s out there!</p>
<p>Your scrolling on Instagram/Tiktok will be interrupted by ads after every few scrolls. You may have trained yourself to skip, but the interruption is there nonetheless.</p>
<p>Want to read something? You&rsquo;ll be greeted with paywalls or newsletter popups on almost every big website. Even sites like Medium and Substack, where reading is the primary purpose, you can&rsquo;t read much without being interrupted.</p>
<p>Now look at indie web. A personal blog is most likely to not have any of this friction. You can go read the content, maybe see a newsletter box at the end and that&rsquo;s it. You don&rsquo;t have to be engaged by clicking an &ldquo;expand article&rdquo; or &ldquo;read more&rdquo; link. You don&rsquo;t have to see a popup the moment your mouse leaves the window. Isn&rsquo;t that less friction than most websites?</p>
<p>I guess what I want to say with these examples is that frictionless is, at best, a middle ground for any service out there. Until there&rsquo;s someone else paying for the service, it&rsquo;ll be frictionless. Once that stops, friction will seep in. That&rsquo;s how these websites make money.</p>
<p>And that&rsquo;s why, in my opinion, small web is so wonderful. Even drowning in the sea of AI slop, you&rsquo;ll find people writing about things they care about. And they don&rsquo;t have to add friction anywhere.</p>
<p>I don&rsquo;t know if it&rsquo;s sustainable. It probably means this frictionless experience will stay small. We can&rsquo;t sustain millions of users this way. Mastodon shows that we can. It requires some community support, but it works. There will always be space for small blogs to exist without friction, and that is the real frictionless web.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Steam Deck, 1 Year Later.</title>
      <link>https://ishan.co/steam-deck-2025/</link>
      <pubDate>Wed, 08 Jan 2025 18:00:00 -0800</pubDate>
      <guid>https://ishan.co/steam-deck-2025/</guid>
      <description>My thoughts on Steam Deck after owning it for a year and whether it is a good purchase in 2025</description>
      <content:encoded><![CDATA[<p>47% of my gaming time was on Steam Deck last year, going by my Steam Replay 2024. <a href="https://ishan.co/steam-deck/">I got it in December 2023</a> and it&rsquo;s been a great device.</p>
<p>Recently, I was talking to a friend about the device and whether they should buy one. I was on the fence and wanted to note down my use cases and some recent news.</p>
<p>If you are considering buying a handheld right now, I&rsquo;d suggest waiting. If you can grab a base LCD model or a refurbished OLED on a sale, it will be a steal. However, there were a few announcements at CES (Consumer Electronics Show) 2025 that signal better handhelds:</p>
<ol>
<li><a href="https://www.theverge.com/2025/1/6/24337300/amd-ryzen-z2-z2-extreme-z2-go">AMD introduced Z2 handheld gaming chips</a></li>
<li><a href="https://www.rockpapershotgun.com/behold-the-lenovo-legion-go-s-the-steamos-handheld-pc-that-isnt-a-steam-deck">Lenovo&rsquo;s Legion Go S will be powered by SteamOS</a></li>
</ol>
<p>Z2, according to Valve employee <a href="https://bsky.app/profile/plagman.bsky.social/post/3lf36y66ggs2b">Pierre-Loup Griffais</a>, won&rsquo;t show up in a Valve handheld anytime soon:</p>
<figure>
    <img loading="lazy" src="Pierre_BlueSky_steam_deck_2.png#center"
         alt="Bluesky post from Valve employee saying that there will be no Z2 Steam Deck"/> 
</figure>

<p>With these aside, here are my impressions:</p>
<h2 id="my-top-use-cases">My Top Use Cases</h2>
<p>How I&rsquo;ve used my Steam Deck in the past year.</p>
<h3 id="older-titles">Older Titles</h3>
<p>I can&rsquo;t believe I&rsquo;m typing this, but a machine running Linux is better at running older titles than Windows in 2025.</p>
<p>My Windows 10 PC had issues running Assassin&rsquo;s Creed: Revelations, Shadow of War, and GTA 4. Despite various compatibility fixes, I couldn&rsquo;t get rid of constant stuttering.</p>
<p>Valve&rsquo;s Proton layer was good enough to have 0 stutters in all of these games. A small warning, the final mission in GTA 4 is broken on high refresh rate screens, and I was unable to find a workaround! So I just rage-quit the game and watched the ending on YouTube.</p>
<p>Other titles like Fallout: New Vegas and Alan Wake were a breeze to play through. Burnout Paradise, my favorite racing game, was marked unsupported on Steam Deck, but it still ran well without any issues.</p>
<p>I&rsquo;m super impressed with the work Valve and the community put into Proton. Steam Deck is a no-brainer if your top use case is catching up on older titles.</p>
<h3 id="indie-games">Indie Games</h3>
<p>I&rsquo;ve spent a considerable amount of time playing smaller, non-graphic intensive games. They&rsquo;re not always guaranteed to work properly, depending on how much GPU power they need. Jusant stuttered a lot for me, even at low settings. The experience was flawless for lighter titles like Octopath Traveler, Celeste, Death&rsquo;s Door, and Cocoon.</p>
<h2 id="shortcomings">Shortcomings</h2>
<h3 id="aaa-games">AAA Games</h3>
<p>AAA games are mostly a miss on Steam Deck. And it&rsquo;s not just newer games. When I tried Baldur&rsquo;s Gate 3, Act 3 was a mess!</p>
<p>Control took a bit of optimization as well and didn&rsquo;t feel smooth. In the end, I just opted to either stream those from the PC or play directly there.</p>
<p>It&rsquo;s not that you can&rsquo;t play them but be ready to have poor battery life and bad graphics while running them. If you plan to get a Steam Deck as the primary machine for AAA games, I&rsquo;d suggest going for a beefier machine.</p>
<p>This may shortly change with <a href="https://blogs.nvidia.com/blog/geforce-now-ces-2025/">Nvidia introducing GeForce Now native app for Steam Deck</a>.</p>
<h3 id="finicky-charging--standby-times">Finicky Charging &amp; Standby Times</h3>
<p>This has been my top annoyance with in the past year. I have an Anker 100 W multi-port charger with 2 USB-C ports, and it rarely works properly with Steam Deck. The charger can supply 100W to my MacBook, but Steam Deck will refuse to charge at full speed with it.</p>
<p>This is a minor annoyance and easily detectable. The charging light on Deck will turn yellow when charging slowly but an annoyance nonetheless.</p>
<p>What&rsquo;s not minor is standby times. I lose around 15-20% battery daily even when there are no games in background and if I pick the Deck after 3–4 days, it&rsquo;ll surely need to be plugged in!</p>
<h3 id="5-ghz-wifi-still-not-stable">5 GHz WiFi Still Not Stable</h3>
<p>I ran into WiFi issues the day I got the device. Initially, I thought it was my router, but I later tried with other routers/networks and Steam Deck has a habit of randomly dropping the internet connection. It has gotten a bit better since mid-year, but not completely fixed.</p>
<p>If you download large games frequently, I&rsquo;d suggest either trying a 2.4 GHz network or getting a dock with wired Ethernet connection.</p>
<h2 id="should-you-get-a-steam-deck-in-2025">Should you get a Steam Deck in 2025?</h2>
<p>I think it&rsquo;s still a great device on a sale, but not at full price. It&rsquo;s quite far from being a primary gaming machine on its own, but as a secondary/couch gaming device, I recommend it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Smile 2</title>
      <link>https://ishan.co/smile-2/</link>
      <pubDate>Fri, 03 Jan 2025 08:43:20 -0800</pubDate>
      <guid>https://ishan.co/smile-2/</guid>
      <description>The scariest thing was the runtime!</description>
      <content:encoded><![CDATA[<p>At 127 minutes, Smile 2 is long. And first half alone makes it feel way longer than that.</p>
<p>For me, the movie started on an off note. I had seen the first movie, but I still expected the second one to start with some sort of setup. It didn&rsquo;t, instead it started directly after the events of the first movie. I’m not a fan of writers assuming that we would have everything fresh in our head. People have other things to do than obsessing over the movie and watching the previous one to prepare.</p>
<p>Getting back to the first half, it felt excruciatingly slow. The second half and the ending clear a lot of it and I think it’ll be better on a second watch, but that does not wash away the slowness of the first half.</p>
<p>Oh, and you’d not be mistaken for thinking in first half that star of the movie wasn’t Naomi Scott but the Voss water bottles.</p>
<p>Seriously, this is an out of control sponsorship deal.</p>
<ol>
<li>There’s too much talk of hydration</li>
<li>There are several scenes of Naomi gulping water from Voss bottles</li>
<li>There are fridges full of Voss bottles everywhere</li>
<li>The only time a water bottle breaks is revealed to be a dream sequence!</li>
</ol>
<p>And I’m not the only one who thinks that, people I watched with also commented on how it was distracting.</p>
<p>As for the good parts, there are several good jump scares. If you’re into body horror (I am not) and like bloody scenes, some killings are gruesome.</p>
<p>The opening led me to believe that they spoiled the ending. They didn’t, but I interpreted “Six Days Later” in the opening scene to be six days after the ending of the second movie, not the first one. But that&rsquo;s more on me.</p>
<p>Despite Naomi Scott’s stellar performance, I feel that the first movie’s protagonist, played by Sosie Bacon, was more relatable. A relative nobody going insane while people don’t believe her is scarier to me, compared to a rock star with infinite privilege.</p>
<p>I saw the original movie on streaming, and it was great, despite the weird ending. The second one, it&rsquo;s alright, but not as good. It felt like a movie made for critics and repeat viewers.</p>
]]></content:encoded>
    </item>
    <item>
      <title>WP Engine Drama</title>
      <link>https://ishan.co/wp-engine-drama/</link>
      <pubDate>Sat, 26 Oct 2024 18:48:59 -0700</pubDate>
      <guid>https://ishan.co/wp-engine-drama/</guid>
      <description>Some links and thoughts on WP Engine Drama going on over in WordPress community</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve been following the recent WordPress and WPEngine drama closely. I have not been involved with any WordPress related development for several years now, but I&rsquo;ve always liked WordPress. Blogging, and later WordPress, were the reasons I started with web development and later built a career around programming.</p>
<p>I would rather not write anything about the entire thing, but two interesting things happened recently. First, the founder of WordPress published a post titled &ldquo;My Freedom of Speech&rdquo; on their blog (<a href="https://archive.ph/c2GtS">archive link</a>).</p>
<p>Second, I noticed yesterday that <a href="Bullenweg.com">bullenweg.com</a>, a website chronicling the timeline plus other instances of the founder&rsquo;s legal actions, got taken down under a legal threat. The text of the page now reads:</p>
<blockquote>
<p>Bullenweg.com is no longer available following threats of legal action from Matthew Mullenweg.</p>
<p>Platforming the claims in the lawsuits, in particular, is shaky ground. I encourage you to read this article:</p>
<p><a href="https://www.vulture.com/article/piers-morgan-apologizes-jay-z-beyonce-uncensored-jaguar-wright.html">https://www.vulture.com/article/piers-morgan-apologizes-jay-z-beyonce-uncensored-jaguar-wright.html</a></p>
<p>It is important to me to know who is behind Bullenweg, and I believe the legal system provides ample opportunities to do so. That will take a few weeks, or if you reveal yourself now we can discuss next steps.</p></blockquote>
<p>Here&rsquo;s an <a href="https://web.archive.org/web/20241006234445/https://bullenweg.com/">archived copy</a> and the <a href="https://github.com/bullenweg/bullenweg.github.io/tree/77295673c4e3e3c62e4e64e6299930b0798135df">last good copy of the page on GitHub</a>. I have other thoughts on this, but of course, I would rather not invite legal threats, so I&rsquo;ll leave by saying that these 2 events reek of the &ldquo;Free speech for me, not for thee!&rdquo; line of thinking that we have seen elsewhere recently.</p>
<p>If you want to read some insightful analysis, I&rsquo;ve got some links.</p>
<p>Ernie Smith over at Tedium has written 2 good articles:</p>
<ul>
<li>Oct 3: <a href="https://tedium.co/2024/10/03/wordpress-wp-engine-lawsuit-open-source-impact/">When Benevolence Fades</a></li>
<li>Oct 20: <a href="https://tedium.co/2024/10/20/wordpress-cms-alternatives-content-strategy-advice/">So, Your CMS Blew Up</a></li>
</ul>
<p>Kellie Peterson has written several articles over at Medium that I found via Hacker News discussion: <a href="https://news.ycombinator.com/item?id=41957829">Bullenweg.com is no longer available following threats of legal action</a>. 2 interesting ones:</p>
<ul>
<li>Oct 2: <a href="https://medium.com/@kelliepeterson/nice-guy-matt-mullenweg-ceo-of-wordpress-com-cries-foul-and-threatens-me-with-legal-action-f116ac57d862">“Nice Guy” Matt Mullenweg, CEO of WordPress.com Cries Foul and Threatens Me With Legal Action</a></li>
<li>Oct 8: <a href="https://medium.com/@kelliepeterson/what-is-the-wordpress-v-wp-engine-drama-really-about-3a82a54e7553">What is the WordPress v WP Engine Drama Really About?</a></li>
</ul>
<p>WPEngine also has a blog post with a timeline of events from their side: <a href="Ensuring%20Stability%20and%20Security:%20Recent%20Timeline">Ensuring Stability and Security: Recent Timeline</a>. It appears that <a href="https://mattengine.com">MattEngine</a> is also still up.</p>
<p>This is the point where I&rsquo;d ask you for your thoughts in comments, but let&rsquo;s not all get sued. I wish you a fun weekend ahead!</p>
]]></content:encoded>
    </item>
    <item>
      <title>Pop Song Novel</title>
      <link>https://ishan.co/pop-song-novel/</link>
      <pubDate>Sun, 21 Jan 2024 16:00:00 -0800</pubDate>
      <guid>https://ishan.co/pop-song-novel/</guid>
      <description>How reading a crazy book about Kaijus and watching an episode of True Detective made me think about joy</description>
      <content:encoded><![CDATA[<p>Image by <a href="https://pixabay.com/illustrations/read-book-blank-book-drawing-page-7577787/">Tilixia from Pixabay</a></p>
<blockquote>
<p>KPS is not, and I say this with absolutely no slight intended, a brooding symphony of a novel. It’s a pop song. It’s meant to be light and catchy, with three minutes of hooks and choruses for you to sing along with, and then you’re done and you go on with your day, hopefully with a smile on your face. I had fun writing this, and I needed to have fun writing this. We all need a pop song from time to time, particularly after a stretch of darkness. —author’s note at the end of <a href="https://www.panmacmillan.com/authors/john-scalzi/the-kaiju-preservation-society/9781509835317">The Kaiju Preservation Society</a>.</p></blockquote>
<p>I love science fiction. However, I&rsquo;ve always felt that the genre has an over-reliance on luck. We start with a huge problem that seems impossible. Protagonists end up conquering these. Sometimes it&rsquo;s skill, sometimes it&rsquo;s smarts. Plenty of times, it&rsquo;s luck, circumstances or just a surprise, hidden ace.</p>
<p>I had this issue with <a href="https://andyweirauthor.com/#the-martian">The Martian</a>, <a href="https://andyweirauthor.com/#project-hail-mary">Project Hail Mary</a>, <a href="https://www.penguinrandomhouse.com/series/FOU/foundation/">Foundation Series</a> to an extent and to a minor extent with <a href="https://us.macmillan.com/books/9780765382030/thethreebodyproblem">Three Body Problem</a> series. If I take a critical look, even Interstellar, one of my all-time favorite movies, suffers from this.</p>
<p>The Kaiju Preservation Society had this in spades. Like a pop song, things ramped up fast. That was enough to keep me hooked. I knew how things were going, I could see some twists coming. But the Marvel style jokes kept hitting, had me hooked and I kept reading on.</p>
<p>In short, I liked the book. At a time when I’m focusing more on non-fiction, it was entertaining and a good read.</p>
<h2 id="joy-in-darkness">Joy in Darkness</h2>
<p>A week or so after finishing KPS, I got my Covid-19 vaccine. That made me exhausted the next day, along with a nasty headache. So I was lying in bed for half of the day.</p>
<p>In the evening, feeling a bit better, I cooked and wanted to watch something. I&rsquo;ve been constantly watching either YouTube or Nebula for the past month. Naturally, these were my first instincts. I didn&rsquo;t find anything immediately interesting on both of the services.</p>
<p>I opened Max and, on a whim, decided to give <a href="https://www.themoviedb.org/tv/46648-true-detective">True Detective Night Country</a> a chance. I like the series, and I&rsquo;ve seen all three previous seasons. Not only that, I even liked the usually panned Season 2. 30 minutes into the episode 1, I realized that I had a weird emotion. I felt joy!</p>
<p>I immediately thought of when I had this reaction before. And that was a week back, watching <a href="https://www.themoviedb.org/movie/545611-everything-everywhere-all-at-once">Everything, Everywhere, All at Once</a>. I didn’t notice it when watching the movie, but my tired brain made the connection during True Detective!</p>
<p>And that’s when I realized, it’s because I’ve been consuming what’s the junk food equivalent of video. YouTube is the McDonald&rsquo;s of the internet. You can keep watching short rants and reviews the entire day and the supply will never end.</p>
<p>The unlimited supply works, it certainly keeps me hooked to the screen. In contract, True Detective is a nice meal at a Michelin Star Restaurant. You sit down, you wait, and you savor it.</p>
<p>This meal, even through the darkness, both thematic and literal, sparked joy in me.</p>
<h2 id="dopamine-and-optimization">Dopamine and Optimization</h2>
<p>Back to reading, I&rsquo;m currently reading two non-fiction books. First is <a href="https://www.annalembke.com/dopamine-nation">Dopamine Nation</a> by Dr. Anna Lembke. Second, <a href="https://www.oliverburkeman.com/books">Four Thousand Weeks</a> by Oliver Burkeman.</p>
<p>Dopamine Nation discusses that constant release of Dopamine gets us addicted. Looking at my recent YouTube usage, I am addicted.</p>
<p>Before my meals, I would just open YouTube and browse through. If I found something good, alright. Otherwise, I&rsquo;d just refresh the page and look at other categories. Occasionally, I&rsquo;d even have a YouTube window open on the side when I&rsquo;m programming!</p>
<p>One of the solutions for addiction, according to Dopamine Nation, is dopamine fasting. I think I&rsquo;ll try that by reducing the short videos. All those shorts and &lt;2-minute videos on YouTube homepage are interesting and keep me scrolling, but they&rsquo;re draining. Something with a story, something that makes me think, that&rsquo;s much more rewarding!</p>
<p>On the other side, the central theme of Four Thousand Weeks is that we as humans have sucked the joy out of leisure by trying to optimize everything. Every moment needs to build towards something, or it feels wasteful!</p>
<p>All this does not imply that there&rsquo;s no place for the pop song novels and junk food videos. But they are not the only options. The other end of the spectrum is not limiting our watching documentaries or drama shows while shunning all short videos.</p>
<p>In face, there are no implications here. This post is a long personal reminder to focus on joy.</p>
<p>It&rsquo;s been a day since I saw that episode of True Detective. And I&rsquo;m still thinking about it. It&rsquo;s rare for me to think about YouTube videos 24 minutes later, let alone 24 hours! Amazing, thoughtful stories are what bring me joy. So I&rsquo;ll watch more of these, but occasionally indulge in short videos.</p>
<p>Next time you&rsquo;re watching something, just pause for a moment and consider if it&rsquo;s bringing you joy.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Steam Deck OLED: Wi-Fi, Streaming, Games</title>
      <link>https://ishan.co/steam-deck/</link>
      <pubDate>Sat, 09 Dec 2023 10:30:00 -0800</pubDate>
      <guid>https://ishan.co/steam-deck/</guid>
      <description>&lt;p&gt;I recently got a Steam Deck for my birthday. Ever since its initial launch, I was on the fence about getting one. The first reason was that I already had a handheld in Nintendo Switch. And second, my top played game genre is Real-time Strategy (RTS), which doesn&amp;rsquo;t really work that well on a handheld.&lt;/p&gt;
&lt;p&gt;After using it for a week, I am a big fan of the device. This article is my collection of tips you may find useful and some interesting use cases you&amp;rsquo;ll want to consider before buying one.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I recently got a Steam Deck for my birthday. Ever since its initial launch, I was on the fence about getting one. The first reason was that I already had a handheld in Nintendo Switch. And second, my top played game genre is Real-time Strategy (RTS), which doesn&rsquo;t really work that well on a handheld.</p>
<p>After using it for a week, I am a big fan of the device. This article is my collection of tips you may find useful and some interesting use cases you&rsquo;ll want to consider before buying one.</p>
<h2 id="wi-fi-issues">Wi-Fi Issues</h2>
<p>The immediate thing I noticed after starting the Steam Deck was that it refused to connect to Wi-Fi. There were a few online articles about how it had trouble with 5 GHz. I&rsquo;m not a big fan of splitting my network into two separate SSIDs, so I tried restarting it first and that worked.</p>
<p>After that, it still kept dropping the connection frequently. The following two tips seemed to help me a bit:</p>
<h3 id="disable-wi-fi-power-management">Disable Wi-Fi Power Management</h3>
<p>This is the most common tip you&rsquo;ll find when searching for Steam Deck Wi-Fi issues. Here&rsquo;s how to do this:</p>
<ol>
<li>Go to Settings → System.</li>
<li>Turn &ldquo;Enable Developer Mode&rdquo; on.</li>
<li>After restart, go to Settings → Developer Mode.</li>
<li>Turn &ldquo;Enable Wifi Power Management&rdquo; off.</li>
</ol>
<figure>
    <img loading="lazy" src="steamdeck_developer_mode.jpg#center"
         alt="Screenshot of Settings on Steam Deck"/> 
</figure>

<figure>
    <img loading="lazy" src="disable_wifi_power_management.jpg#center"
         alt="Screenshot of Developer Mode Settings on Steam Deck"/> 
</figure>

<h3 id="force-24-ghz-network-on-steam-deck">Force 2.4 GHz Network on Steam Deck</h3>
<p>If you search about forcing 2.4 GHz, you&rsquo;ll find info about <code>nm-connection-editor</code>. Luckily, <a href="https://old.reddit.com/r/SteamDeck/comments/yno3w7/if_your_online_game_wont_connect_using_5ghz_wifi/ivagh6c/">this reddit answer</a> helped me save a bunch of time.</p>
<p>Run this command in the desktop mode to get a list of all networks, look for your network with 2.4 GHz frequency:</p>
<pre tabindex="0"><code>nmcli -f in-use,ssid,bssid,freq dev wifi
</code></pre><p>And grab the BSSID for 2.4 GHz network. Enter this BSSID in network manager for your network.</p>
<h3 id="change-networkwait">Change Network/Wait</h3>
<p>If you&rsquo;re ok with it, configure your router to separate the 2.4 GHz and 5 GHz network. I prefer to keep them together, so devices can smartly switch as needed, so I did not do this.</p>
<p>Eventually, the problem mostly disappeared. I still see a rare drop, but it&rsquo;s not as common.</p>
<h2 id="streaming">Streaming</h2>
<p>Game streaming is a use case I was aware of, and I&rsquo;m delighted to see that it&rsquo;s wonderful on Steam Deck.</p>
<p>Steam&rsquo;s Remote Play works well out of the box. However, SteamOS 3.5.7 (latest at the time of writing) has a bug with colors. By default, it has HDR enabled even if the host computer doesn&rsquo;t have it. This can cause colors to look washed out.</p>
<p>The fix is to disable Hardware Decoding for Remote Play. Steps:</p>
<ol>
<li>Go to Settings → Remote Play</li>
<li>Turn on &ldquo;Enable Advanced Client Options&rdquo;</li>
<li>Scroll down, disable &ldquo;Hardware Decoding&rdquo; option</li>
</ol>
<figure>
    <img loading="lazy" src="disable_remote_play_hardware_decoding.jpg#center"
         alt="Screenshot dhowing Remote Play Hardware Decoding Settings Disabled"/> 
</figure>

<p>Additionally, you&rsquo;ll want to change another setting on the host.</p>
<ol>
<li>Go to Settings → Remote Play</li>
<li>Enable &ldquo;Enable Advanced Host Options&rdquo;</li>
<li>Enable &ldquo;Change desktop resolution to match streaming client&rdquo;</li>
</ol>
<figure>
    <img loading="lazy" src="steam_remote_play_host_resolution_setting.png#center"
         alt="Screeshot showing Steam Remote Play Settings for Host."/> 
</figure>

<p>Chiaki will allow you to stream games from PlayStation. Refer to this <a href="https://old.reddit.com/r/SteamDeck/comments/tl4ztc/how_to_set_up_ps4ps5_remote_play_on_steam_deck/">reddit thread</a> for instructions.</p>
<h3 id="streaming-from-steam-deck">Streaming from Steam Deck</h3>
<p>If you need to do some tinkering that&rsquo;s keyboard and mouse intensive, you can stream from Steam Deck.</p>
<p>You just need to have <a href="https://store.steampowered.com/remoteplay/">Steam Link</a> app installed on your PC/Mac/mobile device, and you can stream to it. I found it really helpful when installing <a href="https://github.com/SteamDeckHomebrew/decky-loader">Decky Loader</a> in desktop mode.</p>
<h2 id="games">Games</h2>
<p>I was surprised to see old games running well on the Steam Deck. This was a use case I had not even thought about! I&rsquo;ve installed Fallout: New Vegas and Alan Wake 1 on my Steam Deck. Both work really well with around ~5 hours battery life.</p>
<p>I&rsquo;ve not tried modding Fallout: New Vegas yet, but I&rsquo;m more than happy to complete the only main Fallout game I&rsquo;ve not played yet without mods.</p>
<p>Additionally, small platforming games are wonderful. I just finished the excellent <a href="https://store.steampowered.com/app/894020/Deaths_Door/">Death&rsquo;s Door</a>, almost entirely on Steam Deck and it&rsquo;s been a great experience.</p>
<p>I was surprised at how well Valve have nailed the game backgrounding and pausing during standby. I was able to leave games paused overnight, lock the device and resume in the morning without any hiccups.</p>
<p>That&rsquo;s my experience with Steam Deck so far. It may take some tinkering to work, but if you&rsquo;re fine with that, it&rsquo;s completely worth it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Quick Tip: Faster YouTube Downloads with yt-dlp</title>
      <link>https://ishan.co/yt-dlp-faster/</link>
      <pubDate>Sun, 09 Jul 2023 09:00:00 -0800</pubDate>
      <guid>https://ishan.co/yt-dlp-faster/</guid>
      <description>YouTube downloads using yt-dlp are faster if you play the video you&amp;#39;re downloading in browser.</description>
      <content:encoded><![CDATA[<p>If you use a tool like <a href="https://github.com/ytdl-org/youtube-dl">yt-dl</a> or <a href="https://github.com/yt-dlp/yt-dlp">yt-dlp</a> to download YouTube videos and face throttling by YouTube, I&rsquo;ve found that playing the video in the browser before download speeds up the video considerably.</p>
<p>In my case, my downloads were 50-60 KB/s. After trying this, the videos download at 25 MB/s or more.</p>
<p>My theory is that YouTube detects whether there&rsquo;s an active session and limits download speeds. With a browser session in progress, throttling is lifted, and you can download at maximum speeds.</p>
<p>Give it a try!</p>
]]></content:encoded>
    </item>
    <item>
      <title>Finding an Apartment in Vancouver</title>
      <link>https://ishan.co/vancouver-apartment-hunt/</link>
      <pubDate>Wed, 21 Sep 2022 11:22:48 -0800</pubDate>
      <guid>https://ishan.co/vancouver-apartment-hunt/</guid>
      <description>My experience and advice on looking for an apartment in Vancouver.</description>
      <content:encoded><![CDATA[<blockquote>
<p>I never thought I’d miss California housing market</p></blockquote>
<p>This is the text I sent to my friend when I was frustrated with apartment hunting in Vancouver.</p>
<p>In my imagination, I was the perfect renter. I expected to see 2-3 places, pick 1 and be done with it. But the first place I applied to plain rejected me with no explanation. And then a second one the next day. Well, that was unexpected.</p>
<p>I had read that Vancouver had slightly better housing situation than California, I didn’t know many details. Here’s my experience, and hopefully, it’ll save you some time.</p>
<h2 id="tools-what-i-used">Tools: What I Used</h2>
<ol>
<li><a href="https://mysudo.com">MySudo</a>: This is an app offers virtual phone numbers to protect your privacy. I used it to get a local number before I moved. This way, I didn’t have to worry about sharing my real contact details with random websites/people.</li>
<li>Note-taking app: You can use anything but either take notes or videos. You will end up seeing many places. For me, many days were just a blur. I used <a href="https://tot.rocks">Tot</a>, but any app will do.</li>
<li>Canadian Bank Account: Most of the places I talked to did not want a US cheque. Some people were ok with wire transfer, but that was costly. I opened a Royal Bank of Canada bank account on the first working day and wired some money to it. I have heard good things about <a href="https://wise.com/">Wise</a>, you may want to use that instead.</li>
</ol>
<h2 id="websites-youll-see-these-a-lot">Websites: You’ll See These A Lot!</h2>
<ol>
<li><a href="http://liv.rent">Liv.rent</a>: People on liv.rent were most responsive. There was a good number of listings, and they verify landlords and places. With verification, you don’t have to worry about getting scammed (you still night, so be cautious).</li>
<li><a href="https://www.zumper.com/">Zumper</a>: Zumper is pretty good with nice filters. I like that you can sort by newest. I found the place via this site.</li>
<li><a href="https://www.padmapper.com/">PadMapper</a>: PadMapper is… fine. Their filters leave a lot to be desired. I’d recommend checking it once a day or so.</li>
<li>Craigslist: Well, it’s craigslist! Be cautious. I mostly called/texted people with phone numbers from there. They let you sort by new, so check in the mornings and evenings. I found that I got responses if I was early enough (less than 4 hours)</li>
</ol>
<h2 id="lessons-learned">Lessons Learned</h2>
<ol>
<li>Most of the places become available on the first of the month, so plan accordingly.</li>
<li>Research about the places. Visit if possible, but at least take a look on Google street view. Furthermore, looking at Google reviews can be helpful. You’ll easily find about noise levels and any other issues there.</li>
<li>Apply everywhere: Once I realized that I wasn’t the renter unicorn that I thought I was, I applied everywhere. I got verified on liv.rent and when contacting places, I just directly sent the application as well. See below for the template I used.</li>
<li>Be ready for rejection: Many landlords will collect applications and then select one of them based on their criteria. So be ready for rejection.</li>
</ol>
<p>Here’s my message template that had a reasonable response rate:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>Hi, 
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>I’m a Software Engineer working with Amazon and I just moved to Vancouver from California. I’m looking for an apartment for myself and this property seems like a good fit. 
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>I’m a quiet introvert and I don’t smoke and don’t have pets. I’ll be happy to provide references and proof of income. 
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Please let me know if you need any other info and if we can schedule a showing soon. You can reach me at &lt;mysudo email&gt;  or &lt;mysudo phone&gt;.  
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Thank you, 
</span></span><span style="display:flex;"><span>Ishan. 
</span></span></code></pre></div><p>Good luck and consider sharing your experience/advice.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Fix for App Intents Not Working on Xcode 14 Beta</title>
      <link>https://ishan.co/xcode-14-app-intents/</link>
      <pubDate>Sat, 11 Jun 2022 08:00:00 -0800</pubDate>
      <guid>https://ishan.co/xcode-14-app-intents/</guid>
      <description>Xcode 14&amp;#39;s First Beta has a bug that may cause App Intents to work. Fortunately a quick fix is listed in release notes.</description>
      <content:encoded><![CDATA[<p>Apple introduced App Intents at WWDC 2022. The relevant talks are:</p>
<ol>
<li><a href="https://developer.apple.com/videos/play/wwdc2022/10170/">Implement App Shortcuts with App Intents</a></li>
<li><a href="https://developer.apple.com/videos/play/wwdc2022/10032/">Dive into App Intents</a></li>
</ol>
<p>If you follow these tutorial with initial Xcode 14 beta, it’s possible that the intents may not work. I spent a good 2 hours trying to troubleshoot with different devices and simulators and finally found the solution in Apple’s release notes for Xcode 14 Beta:</p>
<blockquote>
<p>App Intents metadata extraction may not work if the Xcode selected using xcode-select is older than Xcode 14. (94058825)<br />
Workaround: Select the most recent Xcode 14 with the command:<br />
<code>sudo `xcode-select -s \&lt;path to beta Xcode.app\&gt;`</code></p></blockquote>
<p>Just run the above command, clean Xcode and app intents should work on both simulator and device.</p>
]]></content:encoded>
    </item>
    <item>
      <title>GitHub Commits Not Triggering New Amplify Builds? Check Your Webhooks!</title>
      <link>https://ishan.co/github-amplify/</link>
      <pubDate>Sun, 13 Mar 2022 11:16:13 -0700</pubDate>
      <guid>https://ishan.co/github-amplify/</guid>
      <description>Some of my recent commits generated webhook payload that was missing `commits` and `head_commit` keys. That caused AWS Amplify to not publish new changes.</description>
      <content:encoded><![CDATA[<p>My <a href="/moving-from-wordpress-to-hugo">recent move to Hugo</a> did not have any major bumps. The most time I spent troubleshooting was attempting to get Route 53 DNS working with Amplify for my domain.</p>
<p>However, in my last post on <a href="https://ishan.co/screen-time/">Screen Time</a>, I managed to put an incorrect image in the body. I corrected that quickly, pushed a small commit and forgot about it. To my surprise, I found out earlier this week that it was’t fixed.</p>
<p>When investigating, I found that Amplify dashboard wasn’t showing my latest commits. No worries, computers can do that sometimes! May that commit had an issue?</p>
<p>I pushed some image alignment fixes to my <a href="https://github.com/ishansharma/WordPress-Hugo-Converter">import script</a> and updated some posts. However, the new commits still didn’t show up. I tried connecting GitHub repo again by following these steps:</p>
<ol>
<li>Remove Amplify webhook from GitHub Repo → Settings → Webhooks</li>
<li>On Amplify dashboard, go to App Settings → General.</li>
<li>Press “Reconnect Repository” and cross my fingers.
Unfortunately, that didn’t help as well.</li>
</ol>
<p>Next step, I decided to create a new branch and deploy that. That went through. So GitHub and Amplify were talking fine, it was something wrong with the branch!</p>
<h2 id="comparing-webhook-payloads">Comparing Webhook Payloads</h2>
<p>I took a close look at the webhook payloads and noticed that the commits that did not trigger the build had 2 keys missing from the payload: <code>commits</code> and <code>head_commit</code>.</p>
<p>I’m not familiar with webhooks, so I pushed a new commit with a typo fix and see if that helped. And it did! The next webhook payload had the missing keys, and Amplify started working again.</p>
<p>I wish I had not removed previous webhook and had records on when the issue started happening. Hopefully, this fix will help you if your commits don’t start new builds. Meanwhile, I’ve filed a <a href="https://github.com/aws-amplify/amplify-hosting/issues/2646">bug on amplify-hosting</a> and hopefully this will get patched soon.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Screen Time: Another Feature That Apple Forgot</title>
      <link>https://ishan.co/screen-time/</link>
      <pubDate>Thu, 24 Feb 2022 00:56:58 -0800</pubDate>
      <guid>https://ishan.co/screen-time/</guid>
      <description>Apple has a habit of releasing software and features and then neglecting them. Screen Time is one such feature that suffers from several bugs. I share my frustrations with the feature in this post.</description>
      <content:encoded><![CDATA[<p>ATP Episode 463 had a <a href="https://overcast.fm/+dHrI-iuuA/15:38">segment</a> on how Apple has a habit of releasing software, neglecting it and rewriting it again after some time. This also means that their software is not as good.</p>
<p>This made me immediately think of Screen Time, a great feature that I use every day, but it feels like Apple has paid very less attention to the feature since its introduction in iOS 12.</p>
<h2 id="what-is-screen-time">What is Screen Time</h2>
<p>Screen Time lets you see how much time you spend on iOS, iPadOS, and macOS devices and set limits on app usage. You can see the number of pickups, notifications, and most used apps &amp; websites.</p>
<h2 id="the-competition">The Competition</h2>
<p>Various third-party apps and services have automatic time tracking, and some are better at it than Screen Time. Here are a few that I’ve used in the past.</p>
<h3 id="rescue-time">Rescue Time</h3>
<p><a href="https://www.rescuetime.com/ref/459817">Rescue Time</a> (Referral link, <a href="https://www.rescuetime.com/">direct</a>) is a cloud-based service that works on macOS, Windows, Linux, iOS, and Android. They have browser extensions to help you track detailed website time.</p>
<p>Major highlights are smart features including automatic usage categorization and blocking distracting sites. They do have an iOS app but due to Apple’s API limitations, they can’t track usage on apps and websites. Instead, the iOS app relies on location tracking, something that I have never tried.</p>
<p>I used Rescue Time for 7 years but stopped because:</p>
<ol>
<li>Screen Time covered my requirements.</li>
<li>I couldn’t install Rescue Time on my work computer.</li>
<li>I am trying to reduce the personal data that I send to systems outside my control.</li>
</ol>
<h3 id="wakatime">WakaTime</h3>
<p><a href="https://wakatime.com">WakaTime</a> is aimed at tracking developer time and integrates with editors or IDEs to track time spent on the projects. You can also see a breakdown by programming language. They are more detailed than Rescue Time but focus on development.</p>
<p>I haven’t tried this service apart from a quick 2-day trial. At the time, I was using Rescue Time and didn’t want redundant services.</p>
<h3 id="timing">Timing</h3>
<p><a href="https://timingapp.com/?lang=en">Timing</a> is a native Mac app that is similar to Rescue Time. However, it does not rely on cloud analysis, and you can keep all the data on your computer. There is an optional cloud sync feature if you want to see your data on other devices.</p>
<h2 id="where-screen-time-succeeds">Where Screen Time Succeeds</h2>
<h3 id="basic-usage-analysis">Basic Usage Analysis</h3>
<p>Knowing the number of pickups and notifications from apps helps me analyze my usage. On Sunday mornings, I get a Screen Time notification summarizing the time spent on my iPhone and iPad during the past week. The notification also includes if usage was more or less than the week before.</p>
<p>Screen Time has a widget that shows a small usage graph. It is a good way of tracking usage time at a glance. I find it helpful to quickly see if I’m overusing the phone.</p>
<h3 id="blocking-distractions">Blocking Distractions</h3>
<p>Even though the blocks are minor at best, they are good enough. I’ve found that the time limit overlay gives me time to pause and reflect if I really need to use my phone.</p>
<h2 id="where-it-falters">Where It Falters</h2>
<p>There are multiple issues with Screen Time that prevent me from using it to its full potential.</p>
<h3 id="lack-of-exportapi">Lack of Export/API</h3>
<p>The biggest shortcoming in my opinion is the limited interface available in the Settings app. You can see the daily and weakly breakdown, but that is pretty much it.</p>
<p>An export option that I can automate with shortcuts will allow me to track my usage data across longer times easily.</p>
<p>Best-case scenario is an API available to third-party apps, which has a very remote chance of happening. With an API, services like Rescue Time would be much more useful. Even if it’s limited and only shows usage by categories, that’ll be a great addition.</p>
<h3 id="bugs">Bugs</h3>
<p>Since the introduction of the feature, I’ve noticed constant bugs with unblocking the apps and websites. Several times, I unblock a website only for the blocked screen to appear immediately or on the next page.</p>
<p>Apps exhibit similar behavior, and I have gotten stuck on the time limit screen. Sometimes multiple retries fixed this and other times, I had to do a hard reset.</p>
<p>Here’s my fight with the feature on my iPad:</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/6GAIa0DZlzI?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<p>Most annoying, there are bugs around time tracking. See <a href="https://old.reddit.com/r/ipad/comments/rv9lz3/this_has_been_going_for_weeks/">this reddit thread</a> on how the OS can count device use time of 24 hours or more per day.</p>
<p>I have not encountered anything that severe, but there have been instances when I woke up to find that I was using the Amazon app in my sleep:</p>
<figure>
    <img loading="lazy" src="screen_time_amazon_12_hours.png#center"
         alt="Screenshot showing Amazon app usage of 12h 53m on Monday morning" width="360"/> 
</figure>

<h3 id="missing-watchos-support">Missing watchOS Support</h3>
<p>Before I start, I entirely understand that watchOS is dependent on iOS by design. But, with cellular watches, Screen Time has potential to render your watch unusable.</p>
<p>If you use Downtime, there’s no control on the Watch. You can’t unblock an app, period.</p>
<p>Second, there’s no fine-grained control for Watch only apps. Want to allowlist Fitness or Workouts? You can’t do that without turning the feature off.</p>
<h3 id="non-app-store-apps">Non App Store Apps</h3>
<p>I have a paging app that I need to allow when I’m on the on-call rotation. Annoyingly, it does not appear on the list of apps in Screen Time. I found a workaround where adding one of the public apps from Amazon automatically allowed paging app as well, but this is a clunky solution at best.</p>
<h3 id="carplay">CarPlay</h3>
<p>I love CarPlay. So much that it was the top feature when I was looking for a car. However, I have come to hate how it completely ruins my Screen Time stats.</p>
<p>Used Maps for navigation? Enjoy the addition of that time to the usage. Here&rsquo;s my Maps usage from last week:</p>
<figure>
    <img loading="lazy" src="screen_time_maps.png#center"
         alt="Screenshot showing high Maps Usage" width="360"/> 
</figure>

<h2 id="how-can-apple-improve-screen-time">How can Apple Improve Screen Time</h2>
<p>I think that the easiest way for Apple would be to surface this data as an API. Of course, with their focus on privacy, this will have to be a careful change. But I can see great possibilities for third-party apps here.</p>
<p>Lacking that, Apple needs to spend some time on the feature and fix the persistent bugs. As of iOS 15, blocking was in such a bad state that I turned it off entirely.</p>
<p>What do you think of the feature? Do you use it? Have you encountered any of these bugs? Let me know on <a href="https://twitter.com/real_ishan">Twitter</a> or in comments.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Moving from WordPress to Hugo</title>
      <link>https://ishan.co/wordpress-to-hugo/</link>
      <pubDate>Thu, 10 Feb 2022 19:59:26 -0800</pubDate>
      <guid>https://ishan.co/wordpress-to-hugo/</guid>
      <description>I recently moved this blog from WordPress to Hugo. In this post, I share why I chose Hugo, the theme I&amp;#39;m using and the tools I used for moving content.</description>
      <content:encoded><![CDATA[<p>I started my Software Engineering journey 14 years ago, writing code for the web. It started with some WordPress dabbling and eventually JavaScript. During the past 5 years, I’ve slowly shifted away from web development. These days, I mostly use Swift, Objective-C, and Java.</p>
<p>With my focus elsewhere, it’s hard to keep up with the latest WordPress changes.</p>
<p>For the past 8 years, I was hosting this blog on <a href="https://pressable.com">Pressable</a>. They are a part of Automattic, the company behind WordPress.</p>
<p>However, I wanted to avoid dealing with maintenance, mainly WordPress and plugin updates. Pressable’s price, while reasonable, was a bit too much for a personal blog. Additionally, I didn’t need 99% of the features WordPress provides.</p>
<p>To save time and hosting costs, I decided to move to a static site. I finished migration to Hugo earlier this week, and it was a fun learning experience.</p>
<h2 id="why-hugo">Why Hugo</h2>
<p>Once I had decided on a static site, I narrowed my options to:</p>
<ol>
<li><a href="https://jekyllrb.com">Jekyll</a></li>
<li><a href="https://docs.getpelican.com">Pelican</a></li>
<li><a href="https://gohugo.io">Hugo</a></li>
</ol>
<p>I wanted to avoid using Jekyll because I barely know Ruby. Based on language familiarity, my first pick was Pelican.</p>
<p>But Pelican had fewer theme options. Out of the themes I found, I wasn’t a big fan of any single one. So, I checked out Hugo themes and found <a href="https://github.com/adityatelange/hugo-PaperMod">PaperMod</a>, which I really liked.</p>
<p>The second factor was active development. Hugo had more recent releases compared to Jekyll and Pelican. This may be a result of Hugo being less mature and feature rich, but it had all the features I needed.</p>
<p>Finally, I’ve been hearing many good things about Go and while I don’t plan to use it a lot anytime soon, I’d pick it over Ruby for learning.</p>
<p>So, I settled on Hugo.</p>
<h2 id="importing-content">Importing Content</h2>
<p>With framework selected, the next task was importing content. I tried the <a href="https://wordpress.org/plugins/jekyll-exporter/">Jekyll Exporter WordPress plugin</a>, but it timed out when trying to export the posts. At this point, I could try to fix the plugin or just write a basic importer myself.</p>
<p>I opted to write an importer in Python. The script reads the WordPress XML export file and spits out a series of markdown files. There are still several features missing, but it works well enough for my small blog.</p>
<p>Writing an importer this fast was possible only because of the amazing Python ecosystem. These two libraries that made it effortless:</p>
<ol>
<li><a href="https://untangle.readthedocs.io">Untangle</a> to parse XML.</li>
<li><a href="https://pypi.org/project/markdownify/">Markdownify</a> to convert HTML to Markdown.</li>
</ol>
<p>There’s some crude parsing logic to convert the shortcodes and embeds as well that’s basically duct tape. But hey, it works for me.</p>
<p>If this script is something that you’ll find useful, feel free to use or modify it: <a href="https://github.com/ishansharma/WordPress-Hugo-Converter">WordPress Hugo Converter</a></p>
<h2 id="hosting">Hosting</h2>
<p>For hosting, I was split between AWS and <a href="http://netlify.com">Netlify</a>. I started with AWS and ran into DNS issues due to some confusing instructions. I had to search a bit because they require a $29/month payment plan for technical support.</p>
<p>In an ideal world, I would have gone with Netlify but since:</p>
<ol>
<li>I want to learn AWS</li>
<li>I work at Amazon (not AWS)</li>
</ol>
<p>I decided to stick with AWS. Moving to <a href="https://aws.amazon.com/route53/">Route 53</a> resolved the DNS hiccups. After that, deploying the site with <a href="https://aws.amazon.com/amplify/">AWS Amplify</a> was a breeze.</p>
<h2 id="the-theme">The Theme</h2>
<p>I’m using <a href="https://github.com/adityatelange/hugo-PaperMod">PaperMod</a>, a modified version of <a href="https://github.com/nanxiaobei/hugo-paper">Paper</a>. The no frills design and dark mode sold me on the theme. I’ve made a few customizations of my own to fix Safari scrollbars, and I’ve a few more that I’ll make slowly.</p>
<p>Overall, using and learning Hugo has been fun, and I am finally happy to use something besides S3.</p>
<p>If you have any questions and are stuck with a migration yourself, feel free to reach out on <a href="https://twitter.com/real_ishan">Twitter</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Getting an Apple TV Remote Volume Controls to work with TCL Roku TV</title>
      <link>https://ishan.co/getting-an-apple-tv-remote-volume-controls-to-work-with-tcl-roku-tv/</link>
      <pubDate>Tue, 08 Feb 2022 17:40:23 -0800</pubDate>
      <guid>https://ishan.co/getting-an-apple-tv-remote-volume-controls-to-work-with-tcl-roku-tv/</guid>
      <description>How I got my Apple TV remote to learn volume control for my TCL Roku TV using some well timed battery switching</description>
      <content:encoded><![CDATA[<h3 id="the-setup-tcl-roku-tv--apple-tv">The Setup: TCL Roku TV + Apple TV</h3>
<p>TCL makes great budget TVs. I got a TCL TV with built-in Roku in 2019. All was well and fine until I set up a Raspberry Pi on my network. I wanted to set up ad blocking for all my devices and installed <a href="https://pi-hole.net/">Pi-hole</a>, a DNS based network wide ad blocker. It is faster than browser extensions and also works on devices where I can’t install ad blockers.</p>
<h3 id="20000-calls-per-day">20000 Calls Per Day</h3>
<p>Having Raspberry Pi on my network revealed the amount of logging the TV was doing. For example, between March 1, 2021 and March 10, 2021, Roku made almost 300,000 requests to a logging endpoint.</p>
<p>By April, I had decided to convert the TV to “dumb” TV by resetting it and not giving it an internet connection. This (somewhat conveniently) overlapped with Apple’s announcement of their updated Apple TV 4K.</p>
<h3 id="the-problem-no-volume-control">The Problem: No Volume Control</h3>
<p>Apple TV arrived in late May. Initial setup went well. There were a few things that I had to tinker with.</p>
<p>Out of the box, Apple set the TV to always be in Dolby Vision/HDR if possible. This made the colors look washed on my TV. So, I changed default video to 4K SDR and then turned on match content color mode and frame rate.</p>
<p>Once done with setup, I was disappointed to find that that volume buttons on the Apple TV remote didn’t work. I could live with 2 remotes, but I prefer fewer things lying around.</p>
<h3 id="teaching-roku-controls-to-apple-tv-remote">Teaching Roku Controls to Apple TV Remote</h3>
<p>Fortunately, Apple has an option to teach volume controls to the Apple TV remote. You can point the TV remote at Apple TV, and it learns the IR signals.</p>
<p>I pointed my Roku remote at Apple TV, pressed the volume up button.</p>
<p>Nothing happened.</p>
<p>Some internet searches later, I learned that new Roku TV remotes don’t use IR. More internet research pointed me to a few possible solutions.</p>
<h3 id="roku-ir-remote-buying-and-returning-or-what-didnt-work">Roku IR Remote Buying and Returning (or&hellip; what didn’t work)</h3>
<p>One of the reddit threads talked about getting an IR remote and using that to teach the signals to Apple TV. The remotes start from $5 on Amazon, and that was a good enough solution for me. I could have that remote lying around just in case I need to set up the TV again.</p>
<p>Turns out, all those remotes are not equal. The first remote I ordered didn’t work at all with the TV. Additionally, it didn’t have volume buttons. I should have checked screenshots better!</p>
<p>I went ahead and ordered a second remote, this time with volume buttons. I pointed it at the TV and it… didn’t work!</p>
<p>I could point both new remotes at my phone camera and see flashing IR light when I pressed the buttons. This confirmed that they were working. Additionally, they were marked as compatible with my TV. Then why did they not work?</p>
<p>I went back to reddit to explore more options. Buried in <a href="https://old.reddit.com/r/appletv/comments/cfqb96/workarounds_for_volume_control_not_working_on/">this 1 year old thread</a>, I found a helpful tip.</p>
<h3 id="battery-flipping-adventures-or-what-worked">Battery Flipping Adventures (or… what worked)</h3>
<p>Turns out the Roku remotes have IR. But, the remote only switches to IR if it thinks the battery is low. And you can actually trick the remote into switching to low battery mode by removing and inserting the batteries. There’s a quick window where you can press the button, and it emits IR signal.</p>
<p>I did that a couple of times, and it worked. And now my Apple TV remote can control TCL TVs volume!</p>
<blockquote>
<p>Update (April 2023): I recently had to do this again. This time, the mute button did not work with trick. Keeping volume up and down buttons pressed works as expected but I had to repeatedly tap mute button to get it to work.</p></blockquote>
<h3 id="maybe-roku-or-apple-can-fix-this">Maybe Roku or Apple can fix this</h3>
<p>This experience highlighted how not all combinations of hardware and software can be tested by companies. TCL does not have any incentive to test and address these small issues because they can sell the TV for low prices due to Roku’s subsidizing.</p>
<p>I do expect Apple to be better here. They are known to make the products that “just work”. And while it is not possible for them to test all TVs, they are a company publicly taking pride in making usable and amazing products. They can throw some money at testing with different TVs and have these configurations available out of the box.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Work</title>
      <link>https://ishan.co/work/</link>
      <pubDate>Mon, 07 Feb 2022 11:50:26 -0800</pubDate>
      <guid>https://ishan.co/work/</guid>
      <description>&lt;h3 id=&#34;amazon-ios-engineer&#34;&gt;Amazon: iOS Engineer&lt;/h3&gt;
&lt;p&gt;I joined Amazon in 2019 to work with the Seller Services group on &lt;a href=&#34;https://apps.apple.com/us/app/amazon-seller/id794141485&#34;&gt;Amazon Seller app&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;past&#34;&gt;Past&lt;/h2&gt;
&lt;h3 id=&#34;eyelevel-machine-learning-engineer-intern&#34;&gt;EyeLevel: Machine Learning Engineer, Intern&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Built first iteration of EyeLevel AI that helps hiring managers write better job descriptions.&lt;/li&gt;
&lt;li&gt;Worked on Slack integration using Slack API.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;epictionsgai-technologies&#34;&gt;Epictions/gai Technologies&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Wrote the REST API connecting PHP/Python/Node backend to AngularJS frontend for multiple products.&lt;/li&gt;
&lt;li&gt;Wrote the error logging and handling framework and integrated with backend.&lt;/li&gt;
&lt;li&gt;Worked on web portals for Lenovo and Phillips and wrote several WordPress plugins to make content management easier.&lt;/li&gt;
&lt;li&gt;Worked on a partnership with AppSumo.&lt;/li&gt;
&lt;/ul&gt;</description>
      <content:encoded><![CDATA[<h3 id="amazon-ios-engineer">Amazon: iOS Engineer</h3>
<p>I joined Amazon in 2019 to work with the Seller Services group on <a href="https://apps.apple.com/us/app/amazon-seller/id794141485">Amazon Seller app</a>.</p>
<h2 id="past">Past</h2>
<h3 id="eyelevel-machine-learning-engineer-intern">EyeLevel: Machine Learning Engineer, Intern</h3>
<ul>
<li>Built first iteration of EyeLevel AI that helps hiring managers write better job descriptions.</li>
<li>Worked on Slack integration using Slack API.</li>
</ul>
<h3 id="epictionsgai-technologies">Epictions/gai Technologies</h3>
<ul>
<li>Wrote the REST API connecting PHP/Python/Node backend to AngularJS frontend for multiple products.</li>
<li>Wrote the error logging and handling framework and integrated with backend.</li>
<li>Worked on web portals for Lenovo and Phillips and wrote several WordPress plugins to make content management easier.</li>
<li>Worked on a partnership with AppSumo.</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Contact</title>
      <link>https://ishan.co/contact/</link>
      <pubDate>Mon, 07 Feb 2022 11:47:35 -0800</pubDate>
      <guid>https://ishan.co/contact/</guid>
      <description>&lt;p&gt;You can drop me a mail at hey (at) ishan (dot) co.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>You can drop me a mail at hey (at) ishan (dot) co.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
