<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sh Raj</title>
    <description>The latest articles on DEV Community by Sh Raj (@sh20raj).</description>
    <link>https://dev.to/sh20raj</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F788719%2F0012e877-5660-4495-97b5-60a3d7f9121e.jpg</url>
      <title>DEV Community: Sh Raj</title>
      <link>https://dev.to/sh20raj</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sh20raj"/>
    <language>en</language>
    <item>
      <title>I Tried Creating a New Math Theorem: A Weighted Fourth-Power Distance Identity</title>
      <dc:creator>Sh Raj</dc:creator>
      <pubDate>Fri, 29 May 2026 18:40:47 +0000</pubDate>
      <link>https://dev.to/sh20raj/i-tried-creating-a-new-math-theorem-a-weighted-fourth-power-distance-identity-293e</link>
      <guid>https://dev.to/sh20raj/i-tried-creating-a-new-math-theorem-a-weighted-fourth-power-distance-identity-293e</guid>
      <description>&lt;h1&gt;
  
  
  I Tried Creating a New Math Theorem: A Weighted Fourth-Power Distance Identity
&lt;/h1&gt;

&lt;p&gt;We all know famous theorems like the Pythagorean theorem.&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;a2+b2=c2
a^2+b^2=c^2
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;a&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;b&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;c&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;It is simple, beautiful, and powerful.&lt;/p&gt;

&lt;p&gt;That made me wonder:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can we create a small but real mathematical theorem today?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not just a random formula.&lt;/p&gt;

&lt;p&gt;A theorem should have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a clear statement,&lt;/li&gt;
&lt;li&gt;a proof,&lt;/li&gt;
&lt;li&gt;examples,&lt;/li&gt;
&lt;li&gt;and a reason why it is interesting.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I explored a geometry idea involving points on a circle and distances from any point in the plane.&lt;/p&gt;

&lt;p&gt;The result is a small theorem I am calling:&lt;/p&gt;

&lt;h1&gt;
  
  
  Shaswat’s Weighted Moment-Circle Theorem
&lt;/h1&gt;

&lt;p&gt;This theorem is about a hidden symmetry in the sum of fourth powers of distances.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Main Idea
&lt;/h1&gt;

&lt;p&gt;Imagine some points placed on a circle.&lt;/p&gt;

&lt;p&gt;Now take any point &lt;code&gt;P&lt;/code&gt; anywhere in the plane.&lt;/p&gt;

&lt;p&gt;From &lt;code&gt;P&lt;/code&gt;, measure the distance to every point on the circle.&lt;/p&gt;

&lt;p&gt;Usually, these distances depend on the direction of &lt;code&gt;P&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;But under a special balance condition, something interesting happens:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The weighted sum of the fourth powers of those distances depends only on how far &lt;code&gt;P&lt;/code&gt; is from the center of the circle.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It does not depend on the direction of &lt;code&gt;P&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That means the value is rotationally symmetric.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Theorem
&lt;/h1&gt;

&lt;p&gt;Let the points be:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;A1,A2,…,An
A_1,A_2,\ldots,A_n
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="minner"&gt;…&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;These points lie on a circle of radius &lt;code&gt;R&lt;/code&gt;, centered at &lt;code&gt;O&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Assign positive weights:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;w1,w2,…,wn
w_1,w_2,\ldots,w_n
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="minner"&gt;…&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mpunct"&gt;,&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Let the total weight be:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;W=w1+w2+⋯+wn
W=w_1+w_2+\cdots+w_n
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;W&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="minner"&gt;⋯&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Represent each point &lt;code&gt;A_i&lt;/code&gt; using a complex number &lt;code&gt;u_i&lt;/code&gt;, with the center &lt;code&gt;O&lt;/code&gt; as the origin.&lt;/p&gt;

&lt;p&gt;So every point satisfies:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∣ui∣=R
|u_i|=R
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Now suppose the weighted first and second moments vanish:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑i=1nwiui=0
\sum_{i=1}^{n} w_i u_i = 0
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-limits"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;span class="mrel mtight"&gt;=&lt;/span&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;and&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑i=1nwiui2=0
\sum_{i=1}^{n} w_i u_i^2 = 0
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-limits"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;span class="mrel mtight"&gt;=&lt;/span&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Then, for any point &lt;code&gt;P&lt;/code&gt; in the plane with &lt;code&gt;OP = ρ&lt;/code&gt;, we have:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑i=1nwiPAi4W(R4+4R2ρ2+ρ4)
  
  
  \sum_{i=1}^{n} w_i PA_i^4


W(R^4+4R^2\rho^2+\rho^4)
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-limits"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;span class="mrel mtight"&gt;=&lt;/span&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;W&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;4&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;ρ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;ρ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;





&lt;h1&gt;
  
  
  In Simple Words
&lt;/h1&gt;

&lt;p&gt;If the points on the circle are balanced strongly enough, then:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑wiPAi4
\sum w_i PA_i^4
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;depends only on the distance of &lt;code&gt;P&lt;/code&gt; from the center.&lt;/p&gt;

&lt;p&gt;It does not depend on where around the circle &lt;code&gt;P&lt;/code&gt; is located.&lt;/p&gt;

&lt;p&gt;So if two points &lt;code&gt;P&lt;/code&gt; and &lt;code&gt;Q&lt;/code&gt; are the same distance from the center &lt;code&gt;O&lt;/code&gt;, then:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑wiPAi4∑wiQAi4
  
  
  \sum w_i PA_i^4


\sum w_i QA_i^4
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;Q&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;That is the hidden symmetry.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why This Is Interesting
&lt;/h1&gt;

&lt;p&gt;For regular polygons, distance identities like this are already known.&lt;/p&gt;

&lt;p&gt;For example, if the points are the vertices of a regular polygon, the symmetry is expected.&lt;/p&gt;

&lt;p&gt;But this theorem explains the phenomenon using moment conditions.&lt;/p&gt;

&lt;p&gt;Instead of saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The points must form a regular polygon.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The weighted first and second complex moments must vanish.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That gives a more flexible condition.&lt;/p&gt;

&lt;p&gt;It can include some non-regular weighted arrangements too.&lt;/p&gt;




&lt;h1&gt;
  
  
  Proof
&lt;/h1&gt;

&lt;p&gt;Let the complex coordinate of point &lt;code&gt;P&lt;/code&gt; be &lt;code&gt;p&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Since &lt;code&gt;OP = ρ&lt;/code&gt;, we have:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∣p∣=ρ
|p|=\rho
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="mord mathnormal"&gt;p&lt;/span&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;ρ&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Each point &lt;code&gt;A_i&lt;/code&gt; has complex coordinate &lt;code&gt;u_i&lt;/code&gt;, and since all &lt;code&gt;A_i&lt;/code&gt; lie on the circle of radius &lt;code&gt;R&lt;/code&gt;:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∣ui∣=R
|u_i|=R
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;The squared distance between &lt;code&gt;P&lt;/code&gt; and &lt;code&gt;A_i&lt;/code&gt; is:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;PAi2=∣p−ui∣2
PA_i^2 = |p-u_i|^2
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="mord mathnormal"&gt;p&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Expanding this:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∣p−ui∣2∣p∣2+∣ui∣2−pui‾−p‾ui
  
  
  |p-u_i|^2


|p|^2+|u_i|^2-p\overline{u_i}-\overline{p}u_i
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="mord mathnormal"&gt;p&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="mord mathnormal"&gt;p&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;p&lt;/span&gt;&lt;span class="mord overline"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="overline-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord overline"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;p&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="overline-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Since &lt;code&gt;|p| = ρ&lt;/code&gt; and &lt;code&gt;|u_i| = R&lt;/code&gt;, we get:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;PAi2ρ2+R2−pui‾−p‾ui
  
  
  PA_i^2


\rho^2+R^2-p\overline{u_i}-\overline{p}u_i
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;ρ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;p&lt;/span&gt;&lt;span class="mord overline"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="overline-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord overline"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;p&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="overline-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Let:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;T=ρ2+R2
T=\rho^2+R^2
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;T&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;ρ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;and&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;Qi=pui‾+p‾ui
Q_i=p\overline{u_i}+\overline{p}u_i
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;Q&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;p&lt;/span&gt;&lt;span class="mord overline"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="overline-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord overline"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;p&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="overline-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Then:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;PAi2=T−Qi
PA_i^2=T-Q_i
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;T&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;Q&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Therefore:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;PAi4=(T−Qi)2
PA_i^4=(T-Q_i)^2
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;T&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;Q&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Now sum with weights:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑wiPAi4∑wi(T−Qi)2
  
  
  \sum w_iPA_i^4


\sum w_i(T-Q_i)^2
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;T&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;−&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;Q&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Expanding:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑wiPAi4∑wiT22T∑wiQi+∑wiQi2
  
  
  \sum w_iPA_i^4


  
  
  \sum w_iT^2


2T\sum w_iQ_i
+
\sum w_iQ_i^2
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;T&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="mord mathnormal"&gt;T&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;Q&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;Q&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Since &lt;code&gt;T&lt;/code&gt; is constant:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑wiT2=WT2
\sum w_iT^2 = WT^2
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;T&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;W&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;T&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Now look at the middle term:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑wiQi∑wi(pui‾+p‾ui)
  
  
  \sum w_iQ_i


\sum w_i(p\overline{u_i}+\overline{p}u_i)
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;Q&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;p&lt;/span&gt;&lt;span class="mord overline"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="overline-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord overline"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;p&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="overline-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;So:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑wiQip∑wiui‾+p‾∑wiui
  
  
  \sum w_iQ_i


p\sum w_i\overline{u_i}
+
\overline{p}\sum w_i u_i
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;Q&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;p&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord overline"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="overline-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord overline"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;p&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="overline-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;By assumption:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑wiui=0
\sum w_i u_i=0
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Taking conjugates gives:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑wiui‾=0
\sum w_i\overline{u_i}=0
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord overline"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="overline-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Therefore:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑wiQi=0
\sum w_iQ_i=0
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;Q&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;So the middle term disappears.&lt;/p&gt;

&lt;p&gt;Now calculate the last term:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;Qi2=(pui‾+p‾ui)2
Q_i^2=
(p\overline{u_i}+\overline{p}u_i)^2
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;Q&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord mathnormal"&gt;p&lt;/span&gt;&lt;span class="mord overline"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="overline-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord overline"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;p&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="overline-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Expanding:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;Qi2p2ui‾ 2+2∣p∣2∣ui∣2+p‾ 2ui2
  
  
  Q_i^2


p^2\overline{u_i}^{\,2}
+
2|p|^2|u_i|^2
+
\overline{p}^{\,2}u_i^2
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;Q&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;p&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord overline"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="overline-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mspace mtight"&gt;&lt;/span&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;2∣&lt;/span&gt;&lt;span class="mord mathnormal"&gt;p&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord overline"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;p&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="overline-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mspace mtight"&gt;&lt;/span&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Now sum with weights:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑wiQi2p2∑wiui‾ 2+2∣p∣2∑wi∣ui∣2+p‾ 2∑wiui2
  
  
  \sum w_iQ_i^2


p^2\sum w_i\overline{u_i}^{\,2}
+
2|p|^2\sum w_i|u_i|^2
+
\overline{p}^{\,2}\sum w_i u_i^2
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;Q&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;p&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord overline"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="overline-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mspace mtight"&gt;&lt;/span&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;2∣&lt;/span&gt;&lt;span class="mord mathnormal"&gt;p&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord overline"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;p&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="overline-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mspace mtight"&gt;&lt;/span&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;By the second assumption:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑wiui2=0
\sum w_i u_i^2=0
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Taking conjugates:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑wiui‾ 2=0
\sum w_i\overline{u_i}^{\,2}=0
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord overline"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="overline-line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;&lt;span class="mspace mtight"&gt;&lt;/span&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Also:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∣p∣2=ρ2
|p|^2=\rho^2
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="mord mathnormal"&gt;p&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;ρ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;and&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∣ui∣2=R2
|u_i|^2=R^2
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;So:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑wi∣ui∣2∑wiR2WR2
  
  
  \sum w_i|u_i|^2


  
  
  \sum w_iR^2


WR^2
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord"&gt;∣&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;W&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Therefore:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑wiQi22ρ2WR2
  
  
  \sum w_iQ_i^2


2\rho^2WR^2
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;Q&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;ρ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;W&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Now substitute back:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑wiPAi4WT2+2ρ2WR2
  
  
  \sum w_iPA_i^4


WT^2+2\rho^2WR^2
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;W&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;T&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;ρ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;W&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Since:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;T=ρ2+R2
T=\rho^2+R^2
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;T&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;ρ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;we get:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑wiPAi4W(ρ2+R2)2+2Wρ2R2
  
  
  \sum w_iPA_i^4


W(\rho^2+R^2)^2+2W\rho^2R^2
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;W&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;ρ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="mord mathnormal"&gt;W&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;ρ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Expanding:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑wiPAi4W(ρ4+2ρ2R2+R4+2ρ2R2)
  
  
  \sum w_iPA_i^4


W(\rho^4+2\rho^2R^2+R^4+2\rho^2R^2)
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;W&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;ρ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;ρ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;2&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;ρ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;So:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑wiPAi4W(R4+4R2ρ2+ρ4)
  
  
  \sum w_iPA_i^4


W(R^4+4R^2\rho^2+\rho^4)
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;W&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;4&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;ρ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;ρ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Hence proved.&lt;/p&gt;




&lt;h1&gt;
  
  
  Example: Regular Triangle
&lt;/h1&gt;

&lt;p&gt;Take an equilateral triangle on a circle of radius &lt;code&gt;R&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Let all weights be equal to 1.&lt;/p&gt;

&lt;p&gt;Because of symmetry:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;u1+u2+u3=0
u_1+u_2+u_3=0
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;and&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;u12+u22+u32=0
u_1^2+u_2^2+u_3^2=0
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;So the theorem applies.&lt;/p&gt;

&lt;p&gt;Here:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;W=3
W=3
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;W&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Therefore, for any point &lt;code&gt;P&lt;/code&gt; with &lt;code&gt;OP = ρ&lt;/code&gt;:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;PA14+PA24+PA343(R4+4R2ρ2+ρ4)
  
  
  PA_1^4+PA_2^4+PA_3^4


3(R^4+4R^2\rho^2+\rho^4)
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;3&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;4&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;ρ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;ρ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;So if &lt;code&gt;P&lt;/code&gt; moves around a circle centered at &lt;code&gt;O&lt;/code&gt;, the value stays constant.&lt;/p&gt;

&lt;p&gt;Only the distance from the center matters.&lt;/p&gt;




&lt;h1&gt;
  
  
  Example: Square
&lt;/h1&gt;

&lt;p&gt;For a square centered at &lt;code&gt;O&lt;/code&gt;, again the first and second moments vanish.&lt;/p&gt;

&lt;p&gt;So for four vertices:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;W=4
W=4
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;W&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Hence:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;PA14+PA24+PA34+PA444(R4+4R2ρ2+ρ4)
  
  
  PA_1^4+PA_2^4+PA_3^4+PA_4^4


4(R^4+4R^2\rho^2+\rho^4)
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;4&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;4&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;ρ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;ρ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;This is another clean version of the identity.&lt;/p&gt;




&lt;h1&gt;
  
  
  Locus Interpretation
&lt;/h1&gt;

&lt;p&gt;Suppose we want all points &lt;code&gt;P&lt;/code&gt; such that:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑wiPAi4=C
\sum w_iPA_i^4=C
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;Using the theorem:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;W(R4+4R2ρ2+ρ4)=C
W(R^4+4R^2\rho^2+\rho^4)=C
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;W&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;4&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;ρ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;ρ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;C&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;This only depends on &lt;code&gt;ρ&lt;/code&gt;, which is the distance of &lt;code&gt;P&lt;/code&gt; from the center.&lt;/p&gt;

&lt;p&gt;So the locus is a circle centered at &lt;code&gt;O&lt;/code&gt;, if a real solution exists.&lt;/p&gt;

&lt;p&gt;That is beautiful because a complicated-looking distance equation becomes a simple circular locus.&lt;/p&gt;




&lt;h1&gt;
  
  
  What Makes This Theorem Useful?
&lt;/h1&gt;

&lt;p&gt;This theorem gives a compact way to understand fourth-power distance sums.&lt;/p&gt;

&lt;p&gt;It connects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;geometry,&lt;/li&gt;
&lt;li&gt;complex numbers,&lt;/li&gt;
&lt;li&gt;weighted averages,&lt;/li&gt;
&lt;li&gt;symmetry,&lt;/li&gt;
&lt;li&gt;and moments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result also gives a simple test:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑wiui=0
\sum w_i u_i=0
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;and&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑wiui2=0
\sum w_i u_i^2=0
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;If both conditions hold, then the fourth-power distance sum becomes radial.&lt;/p&gt;

&lt;p&gt;That means the expression becomes much easier to analyze.&lt;/p&gt;




&lt;h1&gt;
  
  
  Is This Completely New?
&lt;/h1&gt;

&lt;p&gt;I want to be careful here.&lt;/p&gt;

&lt;p&gt;Many formulas about distances to regular polygons and points on a circle already exist.&lt;/p&gt;

&lt;p&gt;So I am not claiming that every part of this is historically new.&lt;/p&gt;

&lt;p&gt;A safer and more honest claim is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is a weighted moment-based formulation of a fourth-power distance identity on the circle.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The regular polygon case is known, but this moment-condition version gives a nice generalization and a clean proof.&lt;/p&gt;

&lt;p&gt;Before publishing this as a formal research paper, it should be checked by a mathematics professor or someone experienced in geometry/algebra.&lt;/p&gt;

&lt;p&gt;But as a mathematical note, learning experiment, or blog post, it is a valid and interesting result.&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Theorem Again
&lt;/h1&gt;

&lt;p&gt;Let &lt;code&gt;A_i&lt;/code&gt; be points on a circle of radius &lt;code&gt;R&lt;/code&gt;, represented by complex numbers &lt;code&gt;u_i&lt;/code&gt;, and let &lt;code&gt;w_i &amp;gt; 0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑wiui=0
\sum w_i u_i=0
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;and&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑wiui2=0
\sum w_i u_i^2=0
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;u&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;then for any point &lt;code&gt;P&lt;/code&gt; with &lt;code&gt;OP = ρ&lt;/code&gt;:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;∑wiPAi4W(R4+4R2ρ2+ρ4)
  
  
  \sum w_iPA_i^4


W(R^4+4R^2\rho^2+\rho^4)
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;P&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;A&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;W&lt;/span&gt;&lt;span class="mopen"&gt;(&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;4&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;R&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;ρ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mbin"&gt;+&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;ρ&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mtight"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mclose"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;where:&lt;/p&gt;


&lt;div class="katex-element"&gt;
  &lt;span class="katex-display"&gt;&lt;span class="katex"&gt;&lt;span class="katex-mathml"&gt;W=∑wi
W=\sum w_i
&lt;/span&gt;&lt;span class="katex-html"&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mord mathnormal"&gt;W&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mrel"&gt;=&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="base"&gt;&lt;span class="strut"&gt;&lt;/span&gt;&lt;span class="mop op-symbol large-op"&gt;∑&lt;/span&gt;&lt;span class="mspace"&gt;&lt;/span&gt;&lt;span class="mord"&gt;&lt;span class="mord mathnormal"&gt;w&lt;/span&gt;&lt;span class="msupsub"&gt;&lt;span class="vlist-t vlist-t2"&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;span class="pstrut"&gt;&lt;/span&gt;&lt;span class="sizing reset-size6 size3 mtight"&gt;&lt;span class="mord mathnormal mtight"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-s"&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class="vlist-r"&gt;&lt;span class="vlist"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;


&lt;p&gt;That is the theorem.&lt;/p&gt;




&lt;h1&gt;
  
  
  Closing Thought
&lt;/h1&gt;

&lt;p&gt;The beautiful thing about mathematics is that even simple objects like a circle can hide deep symmetry.&lt;/p&gt;

&lt;p&gt;Sometimes, creating a theorem is not about finding something extremely complicated.&lt;/p&gt;

&lt;p&gt;It is about noticing a pattern, stating it clearly, proving it, and connecting it to existing ideas.&lt;/p&gt;

&lt;p&gt;This was my attempt at doing that.&lt;/p&gt;

&lt;p&gt;Thanks for reading.&lt;/p&gt;

</description>
      <category>mathematics</category>
      <category>geometry</category>
      <category>learning</category>
      <category>research</category>
    </item>
    <item>
      <title>The 2026 Founder’s Guide to Free AI/API Credits</title>
      <dc:creator>Sh Raj</dc:creator>
      <pubDate>Wed, 27 May 2026 12:53:15 +0000</pubDate>
      <link>https://dev.to/sh20raj/the-2026-founders-guide-to-free-aiapi-credits-1kaf</link>
      <guid>https://dev.to/sh20raj/the-2026-founders-guide-to-free-aiapi-credits-1kaf</guid>
      <description>&lt;h1&gt;
  
  
  The 2026 Founder’s Guide to Free AI/API Credits
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Updated: 27 May 2026&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Free AI credits are still everywhere, but they are no longer as simple as “sign up and get $100.” Most serious credits now fall into four buckets: &lt;strong&gt;free API tiers&lt;/strong&gt;, &lt;strong&gt;trial credits&lt;/strong&gt;, &lt;strong&gt;student perks&lt;/strong&gt;, and &lt;strong&gt;startup/research grants&lt;/strong&gt;. The smartest move is not to chase one provider. It is to stack multiple small free tiers for prototyping, then apply to larger startup programs once you have a working demo.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The fastest free AI APIs to use today
&lt;/h2&gt;

&lt;p&gt;For immediate building, start with providers that do not require a long approval process.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Free / low-cost access&lt;/th&gt;
&lt;th&gt;Best use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google Gemini API / AI Studio&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;New accounts begin on a Gemini API Free Tier for certain models; Gemini 3 Flash and Gemini 3.1 Flash-Lite have free API tiers, while Gemini 3.1 Pro Preview does not.&lt;/td&gt;
&lt;td&gt;General chat, coding, image/PDF reasoning, fast prototyping. (&lt;a href="https://ai.google.dev/gemini-api/docs/billing?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Google AI for Developers&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GroqCloud&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free tier with rate limits; docs mention accounts can return to Free tier limits if billing is removed.&lt;/td&gt;
&lt;td&gt;Very fast open-model inference for apps, bots, and coding agents. (&lt;a href="https://console.groq.com/docs/rate-limits?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;GroqCloud&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OpenRouter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free models are limited to 20 RPM; 50 free-model requests/day unless you have purchased at least $10 credits, then 1,000/day.&lt;/td&gt;
&lt;td&gt;Testing many LLMs through one OpenAI-compatible API. (&lt;a href="https://openrouter.ai/docs/api/reference/limits?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;OpenRouter&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mistral AI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free “Experiment” API tier for evaluation/prototyping with limited rate limits.&lt;/td&gt;
&lt;td&gt;EU-friendly LLMs, coding models, OCR/document work. (&lt;a href="https://docs.mistral.ai/admin/user-management-finops/tier?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Mistral AI&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cohere&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free trial/evaluation API keys; production keys are paid and trial keys cannot be used commercially.&lt;/td&gt;
&lt;td&gt;RAG, embeddings, reranking, enterprise-style search. (&lt;a href="https://docs.cohere.com/docs/rate-limits?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Cohere Documentation&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cerebras Cloud&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free API access to Cerebras-powered models; paid Developer tier starts with self-serve payment and higher limits.&lt;/td&gt;
&lt;td&gt;Ultra-fast inference and coding-agent experiments. (&lt;a href="https://www.cerebras.ai/pricing?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Cerebras&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hugging Face Inference Providers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Monthly credits: Free users get $0.10/month, Pro users get $2/month, Teams get $2/seat/month.&lt;/td&gt;
&lt;td&gt;Testing open models through one hub. (&lt;a href="https://huggingface.co/docs/inference-providers/pricing?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Hugging Face&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fireworks AI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$1 free starter credit for serverless inference.&lt;/td&gt;
&lt;td&gt;Fast open-source model inference, agents, structured output. (&lt;a href="https://fireworks.ai/pricing?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Fireworks AI&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Novita AI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Signup page currently advertises $1 free credit.&lt;/td&gt;
&lt;td&gt;Cheap LLM/image/video API experiments. (&lt;a href="https://novita.ai/user/register?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Novita AI&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deepgram&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$200 free credit, no credit card needed, for voice APIs.&lt;/td&gt;
&lt;td&gt;Speech-to-text, TTS, voice agents. (&lt;a href="https://deepgram.com/pricing?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Deepgram&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AssemblyAI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Signup page advertises up to 330 free hours; startup program offers up to 200K hours.&lt;/td&gt;
&lt;td&gt;Speech-to-text, audio intelligence, voice apps. (&lt;a href="https://www.assemblyai.com/dashboard/signup?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;AssemblyAI&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Replicate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;“Try for free” model collection, then pay-as-you-go.&lt;/td&gt;
&lt;td&gt;Image/video/model demos without infrastructure. (&lt;a href="https://replicate.com/collections/try-for-free?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Replicate&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The best immediate stack for a student/founder is: &lt;strong&gt;Gemini + Groq + OpenRouter + Mistral + Cerebras + Cohere + Hugging Face&lt;/strong&gt;. This gives you enough free/low-cost API access to build MVPs, agents, demos, SEO tools, chatbots, and content pipelines.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The biggest startup credit programs
&lt;/h2&gt;

&lt;p&gt;This is where the real money is. These programs usually require a startup website, product idea, company profile, GitHub/demo, and sometimes incorporation or VC/accelerator backing.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Program&lt;/th&gt;
&lt;th&gt;Credit / benefit&lt;/th&gt;
&lt;th&gt;Who should apply&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AWS Activate&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Founders package offers $1,000 AWS credits for self-funded startups; Portfolio package can go up to $100,000 for eligible startups connected to Activate providers.&lt;/td&gt;
&lt;td&gt;Any serious startup, especially if you need Bedrock, Lambda, S3, GPUs, or hosting. (&lt;a href="https://aws.amazon.com/startups/credits/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Amazon Web Services, Inc.&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google for Startups Cloud Program&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Up to $200,000 credits for startups; up to $350,000 for AI startups over two years.&lt;/td&gt;
&lt;td&gt;AI-first startups using Gemini, Vertex AI, Firebase, BigQuery, Cloud Run. (&lt;a href="https://startup.google.com/cloud/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Google for Startup&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Microsoft for Startups&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Portal currently says startups can access up to $5,000 Azure credits; investor-network startups can unlock enhanced benefits.&lt;/td&gt;
&lt;td&gt;Azure AI Foundry, Azure hosting, Microsoft ecosystem apps. (&lt;a href="https://portal.startups.microsoft.com/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;portal.startups.microsoft.com&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OpenAI for Startups&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;OpenAI says founders should reach out to their VC to unlock API credits.&lt;/td&gt;
&lt;td&gt;VC-backed or accelerator-backed AI startups. (&lt;a href="https://openai.com/startups/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;OpenAI&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OpenAI Researcher Access Program&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Researchers can apply for up to $1,000 API credits, valid for 12 months.&lt;/td&gt;
&lt;td&gt;Academic/independent researchers doing responsible AI work. (&lt;a href="https://openai.com/form/researcher-access-program/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;OpenAI&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Claude for Startups&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Anthropic’s program offers API credits, priority rate limits, founder tools, community and resources.&lt;/td&gt;
&lt;td&gt;AI startups building with Claude. (&lt;a href="https://claude.com/programs/startups?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Claude&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Anthropic External Researcher Access&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Anthropic support says successful applicants get $1,000 API credits.&lt;/td&gt;
&lt;td&gt;Researchers studying Claude / AI safety / AI systems. (&lt;a href="https://support.claude.com/en/articles/9125743-what-is-the-external-researcher-access-program?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Claude Help Center&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NVIDIA Inception&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Free program with partner cloud credits, preferred pricing, technical training and startup resources.&lt;/td&gt;
&lt;td&gt;AI/ML startups, GPU-heavy products, computer vision, agents. (&lt;a href="https://www.nvidia.com/en-in/startups/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;NVIDIA&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Together AI Startup Accelerator&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Compute credits for inference, fine-tuning, dedicated endpoints and clusters; note: normal Together platform currently says no free trial and $5 minimum purchase.&lt;/td&gt;
&lt;td&gt;Selected AI-native startups. (&lt;a href="https://www.together.ai/startup-accelerator?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Together AI&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fireworks for Startups&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Build credits, higher rate limits, applied-AI support, community and GTM help.&lt;/td&gt;
&lt;td&gt;Startups using open models at production scale. (&lt;a href="https://fireworks.ai/blog/fireworks-for-startups?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Fireworks AI&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DeepInfra DeepStart&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Up to 1B tokens for free inference.&lt;/td&gt;
&lt;td&gt;Startups needing cheap open-model inference. (&lt;a href="https://deepinfra.com/deepstart?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;DeepInfra&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deepgram Startup Program&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Up to $100,000 Deepgram credits, usable within 12 months.&lt;/td&gt;
&lt;td&gt;Voice AI, transcription, call agents. (&lt;a href="https://deepgram.com/startup-program?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Deepgram&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ElevenLabs Startup Grants&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;33M characters of audio generation credits over 12 months for eligible startups/small companies.&lt;/td&gt;
&lt;td&gt;AI voice agents, narration, dubbing, audio apps. (&lt;a href="https://elevenlabs.io/blog/elevenlabs-startup-grants-just-got-bigger-now-12-months-and-over-680-hours-of-conversational-ai-audio?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;ElevenLabs&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sarvam Startup Program&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Up to 12 months of credits, priority support, infra across speech, vision and LLM APIs.&lt;/td&gt;
&lt;td&gt;Indian-language AI apps, voice bots, local language tools. (&lt;a href="https://www.sarvam.ai/startup-program?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Sarvam AI&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AssemblyAI Startup Program&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Up to 200K hours of free credits.&lt;/td&gt;
&lt;td&gt;Audio intelligence, meeting tools, transcription, voice analytics. (&lt;a href="https://www.assemblyai.com/contact/startup-program/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;AssemblyAI&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  3. Best free API directories for non-AI apps
&lt;/h2&gt;

&lt;p&gt;For web apps, dashboards, tools and content sites, you also need normal APIs: weather, finance, mock data, countries, movies, quotes, facts, news, etc.&lt;/p&gt;

&lt;p&gt;Use these first:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Resource&lt;/th&gt;
&lt;th&gt;Why it matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;public-apis GitHub repo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A large community-curated list of free public APIs. (&lt;a href="https://github.com/public-apis/public-apis?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;free-for.dev&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Huge curated list of free developer SaaS/PaaS/IaaS tiers. (&lt;a href="https://free-for.dev/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Free for Developers&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;API Ninjas&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Many APIs under one key, with a free tier and no credit card required. (&lt;a href="https://api-ninjas.com/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;API Ninjas&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RapidAPI free APIs collection&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Marketplace-style discovery for free/testable APIs. (&lt;a href="https://rapidapi.com/collection/list-of-free-apis?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;RapidAPI&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Free Public APIs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Has its own API and claims 1,000 requests/day limit for the directory API. (&lt;a href="https://www.freepublicapis.com/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Free Public APIs&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  4. The best application strategy
&lt;/h2&gt;

&lt;p&gt;Do not apply randomly. Build a small proof first.&lt;/p&gt;

&lt;p&gt;Your application should have five things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;One-line product&lt;/strong&gt;&lt;br&gt;
Example: “IndexFast helps websites get discovered by Google and AI search engines faster.”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Working demo or GitHub repo&lt;/strong&gt;&lt;br&gt;
Even a simple Next.js app with login, dashboard, and 1–2 working API features improves approval chances.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Usage plan&lt;/strong&gt;&lt;br&gt;
Mention expected API usage: “We need LLM inference for content analysis, embeddings for semantic search, and speech APIs for voice summaries.”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Why credits matter&lt;/strong&gt;&lt;br&gt;
Say: “Credits will extend runway while we validate with early users.”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Proof of seriousness&lt;/strong&gt;&lt;br&gt;
Add Product Hunt / Peerlist / GitHub / users / waitlist / screenshots / revenue / hackathon wins.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  5. What I’d do in your case
&lt;/h2&gt;

&lt;p&gt;For you, I would stack credits like this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Today:&lt;/strong&gt; use Gemini, Groq, OpenRouter free models, Mistral Experiment tier, Cerebras free tier, Cohere trial key, Hugging Face free credits, Fireworks $1, Novita $1.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This week:&lt;/strong&gt; apply to GitHub Student Developer Pack if you still have valid student proof; it remains one of the best student bundles for developer tools and partner credits. (&lt;a href="https://education.github.com/pack?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For your startups/tools:&lt;/strong&gt; prepare a clean one-page website for each real product, then apply to AWS Activate, Microsoft for Startups, NVIDIA Inception, Sarvam, Deepgram, ElevenLabs, and AssemblyAI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For larger AI credits:&lt;/strong&gt; apply to Google for Startups only after you can show an AI-first product, demo, and usage plan, because the AI tier can go up to $350,000 but is meant for serious AI startups. (&lt;a href="https://cloud.google.com/startup/ai?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Google Cloud&lt;/a&gt;)&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Important warning
&lt;/h2&gt;

&lt;p&gt;Avoid random YouTube/GitHub “unlimited free API key” hacks. Many violate provider terms, leak keys, or route your data through unknown servers. Use official free tiers, grants, startup programs, student packs, or open-source/local models. Also do not create multiple accounts to bypass free-tier limits; providers like Groq explicitly warn against circumventing free-tier limits. (&lt;a href="https://console.groq.com/docs/legal/archive/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;GroqCloud&lt;/a&gt;)&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The best free AI credit strategy in 2026 is a stack:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For instant building:&lt;/strong&gt; Gemini, Groq, OpenRouter, Mistral, Cerebras, Cohere, Hugging Face, Fireworks.&lt;br&gt;
&lt;strong&gt;For serious startup credits:&lt;/strong&gt; AWS Activate, Google for Startups, Microsoft for Startups, NVIDIA Inception, OpenAI/Anthropic startup programs.&lt;br&gt;
&lt;strong&gt;For voice/audio products:&lt;/strong&gt; Deepgram, ElevenLabs, AssemblyAI, Sarvam.&lt;br&gt;
&lt;strong&gt;For normal app APIs:&lt;/strong&gt; public-apis, free-for.dev, API Ninjas, RapidAPI.&lt;/p&gt;

&lt;p&gt;The biggest unlock is not just finding credits. It is packaging yourself like a real builder: product page, demo, repo, screenshots, users, and a clear credit usage plan.&lt;/p&gt;

</description>
      <category>free</category>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>HLS Video Streaming — Intuitive Explanation</title>
      <dc:creator>Sh Raj</dc:creator>
      <pubDate>Wed, 27 May 2026 02:52:07 +0000</pubDate>
      <link>https://dev.to/sh20raj/hls-video-streaming-intuitive-explanation-2d46</link>
      <guid>https://dev.to/sh20raj/hls-video-streaming-intuitive-explanation-2d46</guid>
      <description>&lt;h1&gt;
  
  
  HLS Video Streaming — Intuitive Explanation
&lt;/h1&gt;

&lt;p&gt;Imagine you have a &lt;strong&gt;2-hour movie&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;One simple way:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Download full movie.&lt;br&gt;
Then play.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Problem?&lt;/p&gt;

&lt;p&gt;If movie is 2 GB, user has to wait.&lt;br&gt;
Bad internet? Video stops.&lt;br&gt;
Mobile network changes? Quality cannot adjust.&lt;/p&gt;

&lt;p&gt;So we need something smarter.&lt;/p&gt;

&lt;p&gt;Now imagine instead of sending the full movie, we cut it into small pieces.&lt;/p&gt;

&lt;p&gt;Movie becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;part1.ts
part2.ts
part3.ts
part4.ts
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each part may be 2 seconds, 4 seconds, or 6 seconds.&lt;/p&gt;

&lt;p&gt;Now the player says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Give me part 1.&lt;br&gt;
Play part 1.&lt;br&gt;
Meanwhile download part 2.&lt;br&gt;
Then part 3.&lt;br&gt;
Then part 4.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is the main idea of &lt;strong&gt;HLS — HTTP Live Streaming&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Apple’s HLS sends live or on-demand audio/video using normal HTTP web servers and CDNs, and it adapts playback to network conditions. (&lt;a href="https://developer.apple.com/streaming/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Apple Developer&lt;/a&gt;)&lt;/p&gt;




&lt;h1&gt;
  
  
  1. The Core Problem
&lt;/h1&gt;

&lt;p&gt;Imagine you are watching a video.&lt;/p&gt;

&lt;p&gt;Watch...&lt;br&gt;
Watch...&lt;br&gt;
Watch...&lt;/p&gt;

&lt;p&gt;Suddenly:&lt;/p&gt;

&lt;p&gt;Network becomes slow.&lt;/p&gt;

&lt;p&gt;If the server is sending one fixed high-quality video, then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;High quality video needs 8 Mbps
Your internet gives only 2 Mbps
Result: buffering...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So HLS asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why send only one quality?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let us create many versions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1080p version
720p version
480p version
360p version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now player can choose.&lt;/p&gt;

&lt;p&gt;Fast internet?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use 1080p
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Slow internet?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use 360p
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Internet improves?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Switch back to 720p or 1080p
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is called &lt;strong&gt;adaptive bitrate streaming&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  2. HLS Is Basically Two Things
&lt;/h1&gt;

&lt;p&gt;HLS has two main file types:&lt;/p&gt;

&lt;h2&gt;
  
  
  A. Video chunks
&lt;/h2&gt;

&lt;p&gt;These are small video pieces.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;segment_001.ts
segment_002.ts
segment_003.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or modern format:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;segment_001.m4s
segment_002.m4s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  B. Playlist file
&lt;/h2&gt;

&lt;p&gt;This is the most important part.&lt;/p&gt;

&lt;p&gt;It is usually called:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.m3u8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Think of &lt;code&gt;.m3u8&lt;/code&gt; as a &lt;strong&gt;menu card&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It tells the player:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Here are the video pieces.
Play them in this order.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;RFC 8216 describes HLS as a protocol for transferring streams of multimedia data and defines the file formats and client/server behavior. (&lt;a href="https://datatracker.ietf.org/doc/html/rfc8216?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;IETF Datatracker&lt;/a&gt;)&lt;/p&gt;




&lt;h1&gt;
  
  
  3. Restaurant Analogy
&lt;/h1&gt;

&lt;p&gt;Imagine you go to a restaurant.&lt;/p&gt;

&lt;p&gt;You do not enter the kitchen.&lt;/p&gt;

&lt;p&gt;You only see the menu.&lt;/p&gt;

&lt;p&gt;The menu says:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pizza
Burger
Pasta
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You choose.&lt;/p&gt;

&lt;p&gt;Similarly, in HLS:&lt;/p&gt;

&lt;p&gt;The player does not know all video files directly.&lt;/p&gt;

&lt;p&gt;It first asks for the playlist:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;video.m3u8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The playlist says:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;segment1.ts
segment2.ts
segment3.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then the player downloads these segments one by one.&lt;/p&gt;




&lt;h1&gt;
  
  
  4. Basic HLS Flow
&lt;/h1&gt;

&lt;p&gt;Suppose user opens:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://example.com/movie/master.m3u8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now step by step:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Player downloads master.m3u8
2. master.m3u8 lists available qualities
3. Player chooses one quality
4. Player downloads that quality’s playlist
5. Playlist lists video chunks
6. Player downloads chunks one by one
7. Player plays chunks continuously
8. If internet changes, player switches quality
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Very simple.&lt;/p&gt;




&lt;h1&gt;
  
  
  5. Master Playlist vs Media Playlist
&lt;/h1&gt;

&lt;p&gt;There are usually two playlist levels.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Master Playlist
&lt;/h2&gt;

&lt;p&gt;This tells:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;These qualities are available.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#EXTM3U

#EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640x360
360p.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=1400000,RESOLUTION=842x480
480p.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=2800000,RESOLUTION=1280x720
720p.m3u8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Meaning:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;For 360p, go to 360p.m3u8
For 480p, go to 480p.m3u8
For 720p, go to 720p.m3u8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Media Playlist
&lt;/h2&gt;

&lt;p&gt;This tells:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;These are the actual video chunks.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#EXTM3U
#EXT-X-TARGETDURATION:6

#EXTINF:6.0,
segment_001.ts

#EXTINF:6.0,
segment_002.ts

#EXTINF:6.0,
segment_003.ts

#EXT-X-ENDLIST
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Meaning:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Play segment_001.ts for 6 seconds.
Then segment_002.ts for 6 seconds.
Then segment_003.ts for 6 seconds.
Video finished.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  6. Mental Diagram
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User clicks video
      |
      v
master.m3u8
      |
      |--- 360p.m3u8 ---&amp;gt; 360p segments
      |
      |--- 480p.m3u8 ---&amp;gt; 480p segments
      |
      |--- 720p.m3u8 ---&amp;gt; 720p segments
      |
      |--- 1080p.m3u8 -&amp;gt; 1080p segments
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the player keeps asking:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;How fast is internet?
How much buffer do I have?
Which quality is safe?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then it chooses.&lt;/p&gt;




&lt;h1&gt;
  
  
  7. Adaptive Bitrate: The Smart Part
&lt;/h1&gt;

&lt;p&gt;Imagine this situation:&lt;/p&gt;

&lt;p&gt;You are watching in 1080p.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Internet speed: 10 Mbps
Video need: 5 Mbps
Good.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then suddenly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Internet speed: 1.5 Mbps
Video need: 5 Mbps
Problem.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Player thinks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If I continue 1080p, video will buffer.&lt;br&gt;
Better switch to 360p.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So it switches to lower quality.&lt;/p&gt;

&lt;p&gt;After some time:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Internet speed becomes 8 Mbps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Player thinks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Nice. Let us go back to 720p or 1080p.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This switching is the magic of HLS.&lt;/p&gt;




&lt;h1&gt;
  
  
  8. Why HLS Uses HTTP
&lt;/h1&gt;

&lt;p&gt;HLS is powerful because it works over normal HTTP.&lt;/p&gt;

&lt;p&gt;That means you can host HLS files on:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Normal web server
S3/R2 storage
Cloudflare CDN
AWS CloudFront
Nginx
Any static file server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No special streaming server is required for basic HLS.&lt;/p&gt;

&lt;p&gt;That is why HLS became very popular.&lt;/p&gt;

&lt;p&gt;The browser/player is basically downloading small files repeatedly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET master.m3u8
GET 720p.m3u8
GET segment1.ts
GET segment2.ts
GET segment3.ts
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apple also says HLS can be deployed using ordinary web servers and CDNs. (&lt;a href="https://developer.apple.com/streaming/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Apple Developer&lt;/a&gt;)&lt;/p&gt;




&lt;h1&gt;
  
  
  9. VOD vs Live HLS
&lt;/h1&gt;

&lt;p&gt;There are two common cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 1: VOD
&lt;/h2&gt;

&lt;p&gt;VOD means video on demand.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;YouTube uploaded video
Course lecture
Movie
Recorded webinar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here all segments already exist.&lt;/p&gt;

&lt;p&gt;Playlist contains all segments:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;segment1.ts
segment2.ts
segment3.ts
...
segment500.ts
#EXT-X-ENDLIST
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;#EXT-X-ENDLIST&lt;/code&gt; means:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Video is complete.
No more segments.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Case 2: Live Streaming
&lt;/h2&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cricket match
Live class
Gaming stream
News broadcast
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here future video does not exist yet.&lt;/p&gt;

&lt;p&gt;So playlist keeps updating.&lt;/p&gt;

&lt;p&gt;At 10:00:00:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;segment100.ts
segment101.ts
segment102.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At 10:00:06:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;segment101.ts
segment102.ts
segment103.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At 10:00:12:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;segment102.ts
segment103.ts
segment104.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is called a &lt;strong&gt;sliding window&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Player repeatedly reloads the playlist and asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Any new segment came?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If yes, download and play.&lt;/p&gt;




&lt;h1&gt;
  
  
  10. Why HLS Has Latency
&lt;/h1&gt;

&lt;p&gt;Now imagine live streaming.&lt;/p&gt;

&lt;p&gt;Camera records.&lt;/p&gt;

&lt;p&gt;Encoder compresses.&lt;/p&gt;

&lt;p&gt;Segmenter waits to make a 6-second segment.&lt;/p&gt;

&lt;p&gt;CDN distributes.&lt;/p&gt;

&lt;p&gt;Player downloads.&lt;/p&gt;

&lt;p&gt;Player buffers.&lt;/p&gt;

&lt;p&gt;Then user sees it.&lt;/p&gt;

&lt;p&gt;So live HLS may have delay.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Camera now
   ↓
Encoding
   ↓
Segment creation
   ↓
CDN
   ↓
Player buffer
   ↓
Viewer sees
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is why normal HLS is not always “real-time.”&lt;/p&gt;

&lt;p&gt;For lower delay, modern systems use &lt;strong&gt;Low-Latency HLS&lt;/strong&gt;, where segments can be divided into smaller partial segments. Apple’s authoring documentation covers live and on-demand HLS delivery requirements for Apple devices. (&lt;a href="https://developer.apple.com/documentation/http-live-streaming/hls-authoring-specification-for-apple-devices?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Apple Developer&lt;/a&gt;)&lt;/p&gt;




&lt;h1&gt;
  
  
  11. Complete HLS Pipeline
&lt;/h1&gt;

&lt;p&gt;Think of a factory.&lt;/p&gt;

&lt;p&gt;Raw video enters.&lt;/p&gt;

&lt;p&gt;HLS output comes out.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Camera / MP4 file
      |
      v
Encoder / Transcoder
      |
      v
Multiple qualities
      |
      v
Segmenter
      |
      v
.m3u8 playlists + small video chunks
      |
      v
CDN / Web server
      |
      v
Player
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;input.mp4
   |
   |-- 1080p chunks
   |-- 720p chunks
   |-- 480p chunks
   |-- 360p chunks
   |
   +-- master.m3u8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  12. HLS in One Sentence
&lt;/h1&gt;

&lt;p&gt;HLS means:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Cut video into small chunks, create playlist files that describe those chunks, host everything over HTTP, and let the player choose the best quality depending on internet speed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is HLS.&lt;/p&gt;




&lt;h1&gt;
  
  
  13. Remember Like This
&lt;/h1&gt;

&lt;p&gt;Imagine a train.&lt;/p&gt;

&lt;p&gt;Full movie is not sent as one huge train.&lt;/p&gt;

&lt;p&gt;Instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Coach 1
Coach 2
Coach 3
Coach 4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The player receives coaches one by one.&lt;/p&gt;

&lt;p&gt;If the track is clear:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Send luxury coach: 1080p
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the track is crowded:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Send small coach: 360p
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Video keeps moving.&lt;/p&gt;

&lt;p&gt;No full stop.&lt;/p&gt;

&lt;p&gt;That is adaptive streaming.&lt;/p&gt;




&lt;h1&gt;
  
  
  14. Practical Example
&lt;/h1&gt;

&lt;p&gt;Suppose you upload a video.&lt;/p&gt;

&lt;p&gt;Original:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;lecture.mp4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Server converts it into:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/master.m3u8

/360p/playlist.m3u8
/360p/seg1.ts
/360p/seg2.ts

/720p/playlist.m3u8
/720p/seg1.ts
/720p/seg2.ts

/1080p/playlist.m3u8
/1080p/seg1.ts
/1080p/seg2.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then your frontend uses a player:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;video&lt;/span&gt; &lt;span class="na"&gt;controls&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/master.m3u8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/video&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Safari, HLS support is native. On many other browsers, developers commonly use a JavaScript player/library that uses Media Source Extensions to play HLS streams.&lt;/p&gt;




&lt;h1&gt;
  
  
  15. Final Revision
&lt;/h1&gt;

&lt;p&gt;HLS has 5 important words:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Encode
2. Segment
3. Playlist
4. HTTP/CDN
5. Adaptive bitrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Meaning:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Encode      = create different qualities
Segment     = cut video into small pieces
Playlist    = tell player where pieces are
HTTP/CDN    = deliver pieces like normal files
Adaptive    = switch quality based on internet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So whenever you hear HLS, visualize this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Big video
  ↓
Small chunks
  ↓
Playlist file
  ↓
Player downloads chunks
  ↓
Quality changes automatically
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s the full intuitive model.&lt;/p&gt;

</description>
      <category>hls</category>
    </item>
    <item>
      <title>Stop Treating AI Agents Like Chatbots: How Hermes Agent Can Become an Always-On SEO Indexing Operator</title>
      <dc:creator>Sh Raj</dc:creator>
      <pubDate>Sun, 24 May 2026 10:11:13 +0000</pubDate>
      <link>https://dev.to/sh20raj/stop-treating-ai-agents-like-chatbots-how-hermes-agent-can-become-an-always-on-seo-indexing-346b</link>
      <guid>https://dev.to/sh20raj/stop-treating-ai-agents-like-chatbots-how-hermes-agent-can-become-an-always-on-seo-indexing-346b</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hermes-agent-2026-05-15"&gt;Hermes Agent Challenge&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foc2uwgpt6loknrysmcgj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foc2uwgpt6loknrysmcgj.png" alt=" " width="800" height="1131"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Stop Treating AI Agents Like Chatbots: Hermes Agent as an SEO Indexing Operator
&lt;/h1&gt;

&lt;p&gt;Most people still think about AI agents as smarter chatbots.&lt;/p&gt;

&lt;p&gt;You open a chat window. You ask a question. The model answers. Maybe it writes some code. Maybe it summarizes a document. Maybe it gives you a checklist.&lt;/p&gt;

&lt;p&gt;That is useful, but it is not the real promise of agents.&lt;/p&gt;

&lt;p&gt;The real promise is not a chat window that gives better answers.&lt;/p&gt;

&lt;p&gt;The real promise is a system that can own a messy recurring workflow, remember what happened last time, improve its process, and keep doing useful work without you explaining everything again from zero.&lt;/p&gt;

&lt;p&gt;That is why Hermes Agent is interesting.&lt;/p&gt;

&lt;p&gt;It is not only trying to be another coding assistant. It is closer to an always-on operator: something that can use tools, remember context, build reusable skills, run scheduled workflows, and connect to external systems through protocols like MCP.&lt;/p&gt;

&lt;p&gt;To make that idea practical, I want to look at one boring but valuable workflow that many developers and indie builders ignore until it hurts:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;website indexing operations.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because launching a website is not the same as being discovered.&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem: launching is not the same as being indexed
&lt;/h2&gt;

&lt;p&gt;Every builder knows this feeling.&lt;/p&gt;

&lt;p&gt;You ship a landing page. You write some docs. You publish a few blog posts. You submit the site somewhere. You wait.&lt;/p&gt;

&lt;p&gt;Then nothing happens.&lt;/p&gt;

&lt;p&gt;The pages exist, but search engines do not pick them up quickly. Some URLs are missing from the sitemap. Some pages have weak metadata. Some important pages are buried too deep. One page accidentally has a &lt;code&gt;noindex&lt;/code&gt; tag. Another page points to the wrong canonical URL. The sitemap was generated before the latest deployment. The robots file is technically valid but blocks something important.&lt;/p&gt;

&lt;p&gt;None of this feels dramatic.&lt;/p&gt;

&lt;p&gt;That is the point.&lt;/p&gt;

&lt;p&gt;Indexing problems are usually not one big obvious bug. They are small boring failures spread across your site:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;missing sitemap URLs&lt;/li&gt;
&lt;li&gt;stale sitemap entries&lt;/li&gt;
&lt;li&gt;accidental &lt;code&gt;noindex&lt;/code&gt; tags&lt;/li&gt;
&lt;li&gt;broken canonical tags&lt;/li&gt;
&lt;li&gt;weak page titles&lt;/li&gt;
&lt;li&gt;duplicate meta descriptions&lt;/li&gt;
&lt;li&gt;important pages with poor internal links&lt;/li&gt;
&lt;li&gt;orphan pages&lt;/li&gt;
&lt;li&gt;blocked routes in &lt;code&gt;robots.txt&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;changed URLs that were never resubmitted&lt;/li&gt;
&lt;li&gt;pages that exist in the app but not in the sitemap&lt;/li&gt;
&lt;li&gt;pages that are technically live but invisible to crawlers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A chatbot can tell you to check these things once.&lt;/p&gt;

&lt;p&gt;But an agentic operator should be able to check them repeatedly, remember your site structure, notice recurring mistakes, and improve its process over time.&lt;/p&gt;

&lt;p&gt;That is the difference.&lt;/p&gt;

&lt;p&gt;A chatbot gives advice.&lt;br&gt;
An operator owns the workflow.&lt;/p&gt;


&lt;h2&gt;
  
  
  Why Hermes Agent is a good fit for this kind of work
&lt;/h2&gt;

&lt;p&gt;The interesting thing about Hermes Agent is not just that it can answer questions.&lt;/p&gt;

&lt;p&gt;The interesting thing is the combination of features around persistent work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;memory across sessions&lt;/li&gt;
&lt;li&gt;reusable skills&lt;/li&gt;
&lt;li&gt;tool use&lt;/li&gt;
&lt;li&gt;scheduled automations&lt;/li&gt;
&lt;li&gt;browser and web control&lt;/li&gt;
&lt;li&gt;MCP support&lt;/li&gt;
&lt;li&gt;sandboxed execution&lt;/li&gt;
&lt;li&gt;cross-platform access&lt;/li&gt;
&lt;li&gt;autonomous improvement loops&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those pieces are much more powerful when you stop thinking about agents as chatbots and start thinking about them as narrow operators.&lt;/p&gt;

&lt;p&gt;A narrow operator does not need to do everything.&lt;/p&gt;

&lt;p&gt;It just needs to do one workflow extremely well.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Every time I deploy, audit my website for indexing readiness, identify blockers, suggest fixes, and prepare URLs that are safe to submit.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is a perfect agent workflow because it is repetitive, rule-heavy, tool-heavy, and easy for humans to forget.&lt;/p&gt;

&lt;p&gt;It is also valuable because small SEO and indexing issues can quietly kill distribution.&lt;/p&gt;


&lt;h2&gt;
  
  
  The workflow: AI indexing operations
&lt;/h2&gt;

&lt;p&gt;Imagine giving Hermes this responsibility:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“You are my website indexing operator. Your job is to keep my site discoverable, crawlable, and ready for search and AI discovery.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The workflow could look like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Crawl the website.&lt;/li&gt;
&lt;li&gt;Fetch &lt;code&gt;sitemap.xml&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Fetch &lt;code&gt;robots.txt&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Extract all discoverable URLs.&lt;/li&gt;
&lt;li&gt;Compare discovered URLs against sitemap URLs.&lt;/li&gt;
&lt;li&gt;Check HTTP status codes.&lt;/li&gt;
&lt;li&gt;Check canonical tags.&lt;/li&gt;
&lt;li&gt;Check robots meta tags.&lt;/li&gt;
&lt;li&gt;Detect accidental &lt;code&gt;noindex&lt;/code&gt; pages.&lt;/li&gt;
&lt;li&gt;Check title and meta descriptions.&lt;/li&gt;
&lt;li&gt;Check Open Graph and Twitter card metadata.&lt;/li&gt;
&lt;li&gt;Check internal links.&lt;/li&gt;
&lt;li&gt;Detect orphan pages.&lt;/li&gt;
&lt;li&gt;Detect pages missing from the sitemap.&lt;/li&gt;
&lt;li&gt;Detect sitemap URLs that are dead, redirected, duplicated, or low-value.&lt;/li&gt;
&lt;li&gt;Detect pages that changed recently and should be submitted again.&lt;/li&gt;
&lt;li&gt;Submit safe URLs through supported indexing protocols.&lt;/li&gt;
&lt;li&gt;Generate a clear report.&lt;/li&gt;
&lt;li&gt;Create GitHub issues or PR suggestions for fixes.&lt;/li&gt;
&lt;li&gt;Remember recurring problems for the next audit.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is not a flashy demo.&lt;/p&gt;

&lt;p&gt;That is exactly why it is useful.&lt;/p&gt;

&lt;p&gt;A lot of the best agent use cases are not cinematic. They are operational. They sit in the background and handle boring workflows that humans avoid.&lt;/p&gt;


&lt;h2&gt;
  
  
  Why a stateless chatbot is not enough
&lt;/h2&gt;

&lt;p&gt;A normal chatbot can produce a checklist like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Check your sitemap, robots.txt, canonical tags, meta tags, and internal linking.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is fine.&lt;/p&gt;

&lt;p&gt;But next week, when your site changes, the chatbot does not know what happened last time. It does not remember that your blog lives under &lt;code&gt;/blog&lt;/code&gt;. It does not remember that your docs are generated dynamically. It does not remember that your sitemap generator previously skipped a route group. It does not remember that you prefer reports in a specific format.&lt;/p&gt;

&lt;p&gt;You have to re-explain the entire context again.&lt;/p&gt;

&lt;p&gt;For one-off advice, that is acceptable.&lt;/p&gt;

&lt;p&gt;For recurring operations, it is painful.&lt;/p&gt;

&lt;p&gt;Hermes becomes more interesting because memory can turn a generic SEO checklist into a project-specific indexing process.&lt;/p&gt;

&lt;p&gt;For example, after a few runs, the agent should know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the site’s main URL patterns&lt;/li&gt;
&lt;li&gt;which routes are important&lt;/li&gt;
&lt;li&gt;which routes should not be indexed&lt;/li&gt;
&lt;li&gt;where the sitemap is generated&lt;/li&gt;
&lt;li&gt;what recurring problems happen after deploys&lt;/li&gt;
&lt;li&gt;which URLs were already checked&lt;/li&gt;
&lt;li&gt;which reports were previously generated&lt;/li&gt;
&lt;li&gt;which fixes were already suggested&lt;/li&gt;
&lt;li&gt;what the developer prefers in the final report&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is where the agent starts to become useful.&lt;/p&gt;

&lt;p&gt;Not because it is magical.&lt;/p&gt;

&lt;p&gt;Because it remembers the boring details.&lt;/p&gt;


&lt;h2&gt;
  
  
  Memory turns audits into learning
&lt;/h2&gt;

&lt;p&gt;The best part of using memory for indexing operations is that the agent can improve its judgment over time.&lt;/p&gt;

&lt;p&gt;On day one, it might run a generic indexing audit.&lt;/p&gt;

&lt;p&gt;On day three, it might remember that your &lt;code&gt;/tools&lt;/code&gt; pages are programmatically generated and should always be checked against the sitemap.&lt;/p&gt;

&lt;p&gt;On day five, it might remember that your canonical tags sometimes point to the production domain even in preview deployments.&lt;/p&gt;

&lt;p&gt;On day seven, it might produce a shorter and more accurate report because it already knows which issues are expected and which issues are new.&lt;/p&gt;

&lt;p&gt;That is the real value of an agent.&lt;/p&gt;

&lt;p&gt;Not just doing a task once.&lt;/p&gt;

&lt;p&gt;Doing the task repeatedly and becoming more adapted to the environment.&lt;/p&gt;


&lt;h2&gt;
  
  
  Skills turn repeated work into reusable procedure
&lt;/h2&gt;

&lt;p&gt;A good agent workflow should not depend on writing a giant prompt every time.&lt;/p&gt;

&lt;p&gt;That is where skills become useful.&lt;/p&gt;

&lt;p&gt;For this use case, Hermes could have an &lt;code&gt;indexing-audit&lt;/code&gt; skill.&lt;/p&gt;

&lt;p&gt;Example skill design:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;indexing-audit&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Audit a website for crawlability, sitemap coverage, robots.txt issues, canonical mistakes, metadata gaps, and indexing readiness.&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="gu"&gt;## Goal&lt;/span&gt;

Find everything that prevents a website from being discovered, crawled, indexed, or understood by search engines and AI search systems.

&lt;span class="gu"&gt;## Inputs&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; website URL
&lt;span class="p"&gt;-&lt;/span&gt; optional sitemap URL
&lt;span class="p"&gt;-&lt;/span&gt; optional deployment URL
&lt;span class="p"&gt;-&lt;/span&gt; optional GitHub repository
&lt;span class="p"&gt;-&lt;/span&gt; optional list of priority pages

&lt;span class="gu"&gt;## Procedure&lt;/span&gt;
&lt;span class="p"&gt;
1.&lt;/span&gt; Fetch the homepage.
&lt;span class="p"&gt;2.&lt;/span&gt; Fetch sitemap.xml.
&lt;span class="p"&gt;3.&lt;/span&gt; Fetch robots.txt.
&lt;span class="p"&gt;4.&lt;/span&gt; Crawl internal links from the homepage.
&lt;span class="p"&gt;5.&lt;/span&gt; Extract all discoverable internal URLs.
&lt;span class="p"&gt;6.&lt;/span&gt; Compare discovered URLs with sitemap URLs.
&lt;span class="p"&gt;7.&lt;/span&gt; Check each important URL for:
&lt;span class="p"&gt;   -&lt;/span&gt; status code
&lt;span class="p"&gt;   -&lt;/span&gt; canonical URL
&lt;span class="p"&gt;   -&lt;/span&gt; robots meta tag
&lt;span class="p"&gt;   -&lt;/span&gt; title tag
&lt;span class="p"&gt;   -&lt;/span&gt; meta description
&lt;span class="p"&gt;   -&lt;/span&gt; heading structure
&lt;span class="p"&gt;   -&lt;/span&gt; Open Graph metadata
&lt;span class="p"&gt;   -&lt;/span&gt; internal links
&lt;span class="p"&gt;8.&lt;/span&gt; Mark URLs as:
&lt;span class="p"&gt;   -&lt;/span&gt; ready to submit
&lt;span class="p"&gt;   -&lt;/span&gt; needs fixing before submit
&lt;span class="p"&gt;   -&lt;/span&gt; should not be indexed
&lt;span class="p"&gt;   -&lt;/span&gt; unknown / needs manual review
&lt;span class="p"&gt;9.&lt;/span&gt; Generate a markdown report.
&lt;span class="p"&gt;10.&lt;/span&gt; Save recurring observations to memory.
&lt;span class="p"&gt;11.&lt;/span&gt; Suggest one improvement to this skill.

&lt;span class="gu"&gt;## Output Format&lt;/span&gt;

&lt;span class="gh"&gt;# Indexing Readiness Report&lt;/span&gt;

&lt;span class="gu"&gt;## Summary&lt;/span&gt;

&lt;span class="gu"&gt;## Critical Blockers&lt;/span&gt;

&lt;span class="gu"&gt;## Quick Fixes&lt;/span&gt;

&lt;span class="gu"&gt;## Sitemap Issues&lt;/span&gt;

&lt;span class="gu"&gt;## Robots and Noindex Issues&lt;/span&gt;

&lt;span class="gu"&gt;## Canonical Issues&lt;/span&gt;

&lt;span class="gu"&gt;## Metadata Issues&lt;/span&gt;

&lt;span class="gu"&gt;## Internal Linking Issues&lt;/span&gt;

&lt;span class="gu"&gt;## URLs Ready to Submit&lt;/span&gt;

&lt;span class="gu"&gt;## URLs Not Safe to Submit&lt;/span&gt;

&lt;span class="gu"&gt;## Suggested GitHub Issues&lt;/span&gt;

&lt;span class="gu"&gt;## What I Should Remember For Next Time&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is where the workflow starts becoming reusable.&lt;/p&gt;

&lt;p&gt;Instead of asking Hermes to “do SEO” in a vague way, you give it a precise operating procedure.&lt;/p&gt;

&lt;p&gt;Then the agent can improve that procedure when it finds new recurring patterns.&lt;/p&gt;




&lt;h2&gt;
  
  
  MCP makes the workflow extensible
&lt;/h2&gt;

&lt;p&gt;Indexing operations need tools.&lt;/p&gt;

&lt;p&gt;The agent might need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;crawl a site&lt;/li&gt;
&lt;li&gt;parse a sitemap&lt;/li&gt;
&lt;li&gt;check a robots file&lt;/li&gt;
&lt;li&gt;inspect page HTML&lt;/li&gt;
&lt;li&gt;read a repository&lt;/li&gt;
&lt;li&gt;open a GitHub issue&lt;/li&gt;
&lt;li&gt;create a pull request&lt;/li&gt;
&lt;li&gt;call an indexing API&lt;/li&gt;
&lt;li&gt;store a report&lt;/li&gt;
&lt;li&gt;compare results against the previous run&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where MCP becomes important.&lt;/p&gt;

&lt;p&gt;Instead of hardcoding every possible integration into the agent, MCP lets the agent connect with external tools and systems in a cleaner way.&lt;/p&gt;

&lt;p&gt;For an indexing operator, possible MCP-connected tools could include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a GitHub MCP server for issues and PRs&lt;/li&gt;
&lt;li&gt;a filesystem MCP server for reading generated files&lt;/li&gt;
&lt;li&gt;a custom crawler tool&lt;/li&gt;
&lt;li&gt;a sitemap parser&lt;/li&gt;
&lt;li&gt;an IndexNow submission tool&lt;/li&gt;
&lt;li&gt;a database of submitted URLs&lt;/li&gt;
&lt;li&gt;a Search Console-style data source&lt;/li&gt;
&lt;li&gt;an analytics source&lt;/li&gt;
&lt;li&gt;a deployment provider integration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The point is not that one agent should do everything.&lt;/p&gt;

&lt;p&gt;The point is that the agent can sit above the workflow and coordinate the right tools.&lt;/p&gt;




&lt;h2&gt;
  
  
  Scheduling turns the agent into infrastructure
&lt;/h2&gt;

&lt;p&gt;A manual audit is helpful once.&lt;/p&gt;

&lt;p&gt;A scheduled audit is infrastructure.&lt;/p&gt;

&lt;p&gt;Indexing checks should run:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;after every deployment&lt;/li&gt;
&lt;li&gt;after publishing new content&lt;/li&gt;
&lt;li&gt;after editing important pages&lt;/li&gt;
&lt;li&gt;after changing routes&lt;/li&gt;
&lt;li&gt;after a sitemap update&lt;/li&gt;
&lt;li&gt;after a domain migration&lt;/li&gt;
&lt;li&gt;every morning for active sites&lt;/li&gt;
&lt;li&gt;weekly for stable sites&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This matters because indexing problems often happen after normal development work.&lt;/p&gt;

&lt;p&gt;A route changes. A build script changes. A new content collection is added. A canonical base URL is misconfigured. A preview setting leaks into production.&lt;/p&gt;

&lt;p&gt;Nobody remembers to check everything manually.&lt;/p&gt;

&lt;p&gt;An agent can.&lt;/p&gt;

&lt;p&gt;A Hermes automation could run an indexing audit every morning and produce a report like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Daily Indexing Report

Site: example.com
Date: 2026-05-24

Summary:
- 43 URLs checked
- 39 URLs healthy
- 2 URLs missing from sitemap
- 1 accidental noindex detected
- 1 redirected sitemap URL found

Critical:
- /pricing has noindex but appears to be a public conversion page

Quick fixes:
- Add /blog/new-launch-post to sitemap
- Remove redirected /old-features URL from sitemap
- Confirm canonical on /tools/meta-generator

Ready to submit:
- /blog/new-launch-post
- /tools/meta-generator

Remember:
- The /tools route group should always be included in sitemap checks.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is the kind of output a developer can act on quickly.&lt;/p&gt;




&lt;h2&gt;
  
  
  A practical architecture
&lt;/h2&gt;

&lt;p&gt;Here is a simple architecture for Hermes as an SEO indexing operator:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Website / Repository
        ↓
Hermes Agent
        ↓
Indexing Audit Skill
        ↓
Tool Layer
  - crawler
  - sitemap parser
  - robots checker
  - metadata checker
  - canonical checker
  - IndexNow submitter
  - GitHub issue creator
        ↓
Outputs
  - indexing-readiness.md
  - critical blocker list
  - submit-ready URL list
  - suggested fixes
  - GitHub issues
  - memory updates
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important part is separation of responsibility.&lt;/p&gt;

&lt;p&gt;Hermes should not be treated as one giant magic function.&lt;/p&gt;

&lt;p&gt;It should coordinate a workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tools gather facts&lt;/li&gt;
&lt;li&gt;the skill defines the procedure&lt;/li&gt;
&lt;li&gt;memory stores project-specific learning&lt;/li&gt;
&lt;li&gt;scheduling makes the workflow repeat&lt;/li&gt;
&lt;li&gt;reports make the result human-readable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is a much healthier way to build with agents.&lt;/p&gt;




&lt;h2&gt;
  
  
  Example prompt for Hermes
&lt;/h2&gt;

&lt;p&gt;Here is the kind of prompt I would use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use the indexing-audit skill on my website.

Website: https://example.com

Goal:
Find everything preventing this site from being discovered, crawled, indexed, or understood by search engines and AI search systems.

Check:
- sitemap.xml
- robots.txt
- canonical tags
- noindex tags
- broken internal links
- missing metadata
- duplicate titles
- duplicate meta descriptions
- weak descriptions
- orphan pages
- pages missing from sitemap
- sitemap URLs that redirect or 404
- recently changed URLs that should be submitted through supported indexing protocols

Output:
1. Critical blockers
2. Quick fixes
3. Sitemap issues
4. Robots/noindex issues
5. Canonical issues
6. Metadata issues
7. Internal linking issues
8. URLs ready to submit
9. URLs not safe to submit
10. Suggested GitHub issues or PR changes
11. What you should remember for the next audit
12. One improvement to the indexing-audit skill
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This prompt is intentionally specific.&lt;/p&gt;

&lt;p&gt;Agents work better when the workflow has clear boundaries.&lt;/p&gt;

&lt;p&gt;“Improve my SEO” is vague.&lt;/p&gt;

&lt;p&gt;“Run an indexing readiness audit and classify URLs by submit safety” is operational.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the agent should not do automatically
&lt;/h2&gt;

&lt;p&gt;A good indexing operator should also know when to stop.&lt;/p&gt;

&lt;p&gt;It should not blindly submit every URL.&lt;/p&gt;

&lt;p&gt;Some URLs should not be indexed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;admin pages&lt;/li&gt;
&lt;li&gt;auth pages&lt;/li&gt;
&lt;li&gt;duplicate pages&lt;/li&gt;
&lt;li&gt;thin pages&lt;/li&gt;
&lt;li&gt;test pages&lt;/li&gt;
&lt;li&gt;filtered parameter pages&lt;/li&gt;
&lt;li&gt;private dashboards&lt;/li&gt;
&lt;li&gt;pages with intentional &lt;code&gt;noindex&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;pages blocked for a reason&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is important because automation without judgment creates spammy behavior.&lt;/p&gt;

&lt;p&gt;The agent should classify URLs before submission:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ready to submit:
- public, canonical, indexable, useful pages

Needs fixing first:
- public pages with metadata/canonical/sitemap problems

Do not submit:
- private, duplicate, blocked, thin, or intentionally noindex pages

Needs manual review:
- ambiguous pages or pages with conflicting signals
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes the workflow safer.&lt;/p&gt;

&lt;p&gt;The goal is not to spam indexing endpoints.&lt;/p&gt;

&lt;p&gt;The goal is to keep the site technically clean and submit only the right URLs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where this gets especially useful for indie hackers
&lt;/h2&gt;

&lt;p&gt;Indie hackers usually do not have a dedicated SEO engineer.&lt;/p&gt;

&lt;p&gt;They launch quickly. They pivot quickly. They change landing pages quickly. They add tools, blog posts, changelog pages, docs, directories, and comparison pages.&lt;/p&gt;

&lt;p&gt;That speed creates indexing drift.&lt;/p&gt;

&lt;p&gt;Your website changes faster than your search hygiene.&lt;/p&gt;

&lt;p&gt;An indexing operator could become part of the launch process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Build the page.&lt;/li&gt;
&lt;li&gt;Deploy it.&lt;/li&gt;
&lt;li&gt;Hermes audits it.&lt;/li&gt;
&lt;li&gt;Hermes finds indexing blockers.&lt;/li&gt;
&lt;li&gt;Hermes suggests fixes.&lt;/li&gt;
&lt;li&gt;Hermes opens issues or PR suggestions.&lt;/li&gt;
&lt;li&gt;Hermes prepares safe URLs for submission.&lt;/li&gt;
&lt;li&gt;Hermes remembers what went wrong.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is much more useful than asking a chatbot for general SEO advice.&lt;/p&gt;

&lt;p&gt;It becomes an actual workflow.&lt;/p&gt;




&lt;h2&gt;
  
  
  A seven-day test I would run
&lt;/h2&gt;

&lt;p&gt;To prove whether Hermes is actually useful for this, I would test it on the same website for seven days.&lt;/p&gt;

&lt;p&gt;The goal would not be to see whether it can do one audit.&lt;/p&gt;

&lt;p&gt;The goal would be to see whether it improves.&lt;/p&gt;

&lt;h3&gt;
  
  
  Day 1: Generic audit
&lt;/h3&gt;

&lt;p&gt;Run the indexing audit with a basic checklist.&lt;/p&gt;

&lt;p&gt;Expected output:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sitemap issues&lt;/li&gt;
&lt;li&gt;metadata issues&lt;/li&gt;
&lt;li&gt;robots/noindex checks&lt;/li&gt;
&lt;li&gt;internal linking suggestions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Day 3: Project-specific memory
&lt;/h3&gt;

&lt;p&gt;Run the audit again after adding or changing pages.&lt;/p&gt;

&lt;p&gt;Expected improvement:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;remembers important route groups&lt;/li&gt;
&lt;li&gt;compares against the previous report&lt;/li&gt;
&lt;li&gt;identifies new issues instead of repeating old ones blindly&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Day 5: Skill refinement
&lt;/h3&gt;

&lt;p&gt;Let Hermes suggest improvements to the &lt;code&gt;indexing-audit&lt;/code&gt; skill.&lt;/p&gt;

&lt;p&gt;Expected improvement:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;adds checks for recurring site-specific problems&lt;/li&gt;
&lt;li&gt;removes noisy checks that are not useful&lt;/li&gt;
&lt;li&gt;improves the report format&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Day 7: Operational report
&lt;/h3&gt;

&lt;p&gt;Run the final audit.&lt;/p&gt;

&lt;p&gt;Expected improvement:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;shorter report&lt;/li&gt;
&lt;li&gt;clearer prioritization&lt;/li&gt;
&lt;li&gt;fewer false positives&lt;/li&gt;
&lt;li&gt;better URL classification&lt;/li&gt;
&lt;li&gt;stronger memory of site conventions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That would be the real proof.&lt;/p&gt;

&lt;p&gt;Not whether the agent can produce a checklist.&lt;/p&gt;

&lt;p&gt;Whether the agent becomes better at this website over time.&lt;/p&gt;




&lt;h2&gt;
  
  
  The bigger lesson: agents should own workflows, not conversations
&lt;/h2&gt;

&lt;p&gt;The more I think about Hermes, the more I believe the best agent use cases will not look like chatbots.&lt;/p&gt;

&lt;p&gt;They will look like small operators.&lt;/p&gt;

&lt;p&gt;A dependency upgrade operator.&lt;br&gt;
A pull request review operator.&lt;br&gt;
A release notes operator.&lt;br&gt;
A support triage operator.&lt;br&gt;
A docs freshness operator.&lt;br&gt;
A website indexing operator.&lt;/p&gt;

&lt;p&gt;Each one has a clear job.&lt;/p&gt;

&lt;p&gt;Each one has memory.&lt;/p&gt;

&lt;p&gt;Each one has tools.&lt;/p&gt;

&lt;p&gt;Each one has a repeatable process.&lt;/p&gt;

&lt;p&gt;Each one gets better through usage.&lt;/p&gt;

&lt;p&gt;That is a much more useful mental model than “AI assistant that can do anything.”&lt;/p&gt;

&lt;p&gt;Because “do anything” often becomes “do nothing reliably.”&lt;/p&gt;

&lt;p&gt;A narrow operator can be judged.&lt;/p&gt;

&lt;p&gt;Did it find the indexing issue?&lt;br&gt;
Did it avoid submitting the wrong URLs?&lt;br&gt;
Did it remember the route structure?&lt;br&gt;
Did it produce a better report than last time?&lt;br&gt;
Did it reduce manual work?&lt;/p&gt;

&lt;p&gt;Those are concrete outcomes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final thought
&lt;/h2&gt;

&lt;p&gt;The most underrated developer workflows are not hard because they are intellectually complex.&lt;/p&gt;

&lt;p&gt;They are hard because they are repetitive, easy to forget, and full of small edge cases.&lt;/p&gt;

&lt;p&gt;That is exactly where self-improving agents should live.&lt;/p&gt;

&lt;p&gt;Not as chatbots waiting for another prompt.&lt;/p&gt;

&lt;p&gt;As operators that remember, repeat, verify, and improve.&lt;/p&gt;

&lt;p&gt;For me, Hermes Agent is exciting because it points toward that kind of future.&lt;/p&gt;

&lt;p&gt;A future where agents do not just answer questions.&lt;/p&gt;

&lt;p&gt;They own workflows.&lt;/p&gt;

&lt;p&gt;And for a small builder trying to get a website discovered, an always-on indexing operator might be far more valuable than another generic AI chat window.&lt;/p&gt;

</description>
      <category>hermesagentchallenge</category>
      <category>devchallenge</category>
      <category>agents</category>
      <category>seo</category>
    </item>
    <item>
      <title>I Almost Gave Up on IndexFast — Then I Revived It Into an MCP-Native SEO AI-IDE Indexing Platform</title>
      <dc:creator>Sh Raj</dc:creator>
      <pubDate>Sun, 24 May 2026 09:52:31 +0000</pubDate>
      <link>https://dev.to/sh20raj/i-almost-gave-up-on-indexfast-then-i-revived-it-into-an-mcp-native-seo-indexing-platform-79e</link>
      <guid>https://dev.to/sh20raj/i-almost-gave-up-on-indexfast-then-i-revived-it-into-an-mcp-native-seo-indexing-platform-79e</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-05-21"&gt;GitHub Finish-Up-A-Thon Challenge&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  I Almost Gave Up on IndexFast — Then 100 Builder Conversations Turned It Into an AI-IDE Indexing Platform
&lt;/h1&gt;

&lt;p&gt;I almost gave up on IndexFast.&lt;/p&gt;

&lt;p&gt;Not in the dramatic “I hate this project” way.&lt;/p&gt;

&lt;p&gt;More in the quiet founder way.&lt;/p&gt;

&lt;p&gt;The kind where you launch something, refresh the page too many times, watch almost nothing happen, close the laptop, and start wondering if the idea was only exciting inside your own head.&lt;/p&gt;

&lt;p&gt;That was IndexFast after my Product Hunt launch.&lt;/p&gt;

&lt;p&gt;The product was live.&lt;/p&gt;

&lt;p&gt;The landing page looked decent.&lt;/p&gt;

&lt;p&gt;The promise was simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Get new pages crawled faster, ranked sooner, and seen in AI.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But the launch barely moved.&lt;/p&gt;

&lt;p&gt;A couple of followers.&lt;/p&gt;

&lt;p&gt;Almost no signal.&lt;/p&gt;

&lt;p&gt;No wave.&lt;/p&gt;

&lt;p&gt;No momentum.&lt;/p&gt;

&lt;p&gt;Just silence.&lt;/p&gt;

&lt;p&gt;And honestly, that silence hit harder than an error message.&lt;/p&gt;

&lt;p&gt;When code breaks, you can debug it.&lt;/p&gt;

&lt;p&gt;When a launch breaks, you have to debug yourself.&lt;/p&gt;

&lt;p&gt;Was the product unclear?&lt;/p&gt;

&lt;p&gt;Was the market wrong?&lt;/p&gt;

&lt;p&gt;Was the positioning weak?&lt;/p&gt;

&lt;p&gt;Was I solving a real pain or just packaging an SEO feature as a product?&lt;/p&gt;

&lt;p&gt;For a few days, I thought IndexFast was probably done.&lt;/p&gt;

&lt;p&gt;Another unfinished indie SaaS idea.&lt;/p&gt;

&lt;p&gt;Another repo that would sit on GitHub with a good domain name, a decent UI, and no real reason to continue.&lt;/p&gt;

&lt;p&gt;But then something interesting happened.&lt;/p&gt;

&lt;p&gt;Peerlist gave me the first real signal.&lt;/p&gt;

&lt;p&gt;I launched IndexFast there twice with earlier positioning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;IndexFast - Get Indexed in Minutes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IndexFast - Automated SEO &amp;amp; URL Submission&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One launch reached around &lt;strong&gt;37 upvotes and 11 comments&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Another reached around &lt;strong&gt;27 upvotes and 3 comments&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That was not massive, but it was enough to tell me something important:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The problem was not dead. The framing was weak.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I did the thing I should have done earlier.&lt;/p&gt;

&lt;p&gt;I stopped overengineering.&lt;/p&gt;

&lt;p&gt;I talked to users.&lt;/p&gt;

&lt;p&gt;I spoke with around &lt;strong&gt;100 builders, developers, indie hackers, and SEO-aware founders&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And I found the real pattern.&lt;/p&gt;

&lt;p&gt;Most people did not want a giant SEO suite.&lt;/p&gt;

&lt;p&gt;They did not want another dashboard full of graphs they would check once and forget.&lt;/p&gt;

&lt;p&gt;They wanted one painful thing to become simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I published a page. Help me make sure search engines know it exists.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That sentence changed IndexFast.&lt;/p&gt;

&lt;p&gt;And then the market changed around it too.&lt;/p&gt;

&lt;p&gt;Developers were no longer just building in code editors.&lt;/p&gt;

&lt;p&gt;They were building inside &lt;strong&gt;AI IDEs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Cursor.&lt;/p&gt;

&lt;p&gt;VS Code with agents.&lt;/p&gt;

&lt;p&gt;Claude-style coding workflows.&lt;/p&gt;

&lt;p&gt;MCP servers.&lt;/p&gt;

&lt;p&gt;AI copilots that can inspect a codebase, deploy changes, write docs, and manage workflows.&lt;/p&gt;

&lt;p&gt;So I pivoted IndexFast from a generic SEO indexing tool into something sharper:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Index your website directly from your AI IDE.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is the version I am launching on Peerlist on &lt;strong&gt;May 25, 2026&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IndexFast — Index your website from AI IDE&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the story of how I revived the project I almost abandoned.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;IndexFast&lt;/strong&gt; is an AI-IDE-native indexing workflow platform for builders who ship fast.&lt;/p&gt;

&lt;p&gt;It helps developers and website owners discover, submit, monitor, and automate URL indexing workflows from the tools they already use.&lt;/p&gt;

&lt;p&gt;The new version is built around one focused product loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add a website.&lt;/li&gt;
&lt;li&gt;Scan the sitemap.&lt;/li&gt;
&lt;li&gt;Detect new or updated URLs.&lt;/li&gt;
&lt;li&gt;Normalize and canonicalize the URL queue.&lt;/li&gt;
&lt;li&gt;Submit eligible URLs through supported indexing pathways.&lt;/li&gt;
&lt;li&gt;Track every submission event.&lt;/li&gt;
&lt;li&gt;Surface failures, retry states, and indexability warnings.&lt;/li&gt;
&lt;li&gt;Let an AI IDE or MCP client trigger the same workflow from inside the developer environment.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The old IndexFast was trying to say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Submit URLs faster.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The revived IndexFast says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Your AI agent can ship a page, detect its URLs, and trigger indexing workflows without leaving the IDE.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That difference matters.&lt;/p&gt;

&lt;p&gt;Because developers are not only shipping faster now.&lt;/p&gt;

&lt;p&gt;They are shipping with agents.&lt;/p&gt;

&lt;p&gt;IndexFast is designed for that new workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://indexfast.co/" rel="noopener noreferrer"&gt;https://indexfast.co/&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/SH20RAJ/index-fast" rel="noopener noreferrer"&gt;https://github.com/SH20RAJ/index-fast&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Product Hunt Launch:&lt;/strong&gt; &lt;a href="https://www.producthunt.com/products/indexfast/launches" rel="noopener noreferrer"&gt;https://www.producthunt.com/products/indexfast/launches&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Peerlist Launch 1:&lt;/strong&gt; &lt;a href="https://peerlist.io/sh20raj/project/indexfast--get-indexed-in-minutes" rel="noopener noreferrer"&gt;https://peerlist.io/sh20raj/project/indexfast--get-indexed-in-minutes&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Peerlist Launch 2:&lt;/strong&gt; &lt;a href="https://peerlist.io/sh20raj/project/indexfast--automated-seo--url-submission" rel="noopener noreferrer"&gt;https://peerlist.io/sh20raj/project/indexfast--automated-seo--url-submission&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;New Peerlist Launch:&lt;/strong&gt; &lt;a href="https://peerlist.io/sh20raj/project/indexfast--index-your-website-from-ai-ide" rel="noopener noreferrer"&gt;https://peerlist.io/sh20raj/project/indexfast--index-your-website-from-ai-ide&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Screenshots to Add
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;These screenshots are from my latest Peerlist launch: &lt;strong&gt;IndexFast - Index your website from AI IDE&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. Peerlist launch cover — the new AI IDE positioning&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdqy38fnwh4fqs.cloudfront.net%2FUHDNEBPGADK7KALCNN69ODMKGOBL%2Fprojects%2Findexfast--index-your-website-from-ai-ide13672e46-3413-4bfb-b8fa-259cf2adf8de" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdqy38fnwh4fqs.cloudfront.net%2FUHDNEBPGADK7KALCNN69ODMKGOBL%2Fprojects%2Findexfast--index-your-website-from-ai-ide13672e46-3413-4bfb-b8fa-259cf2adf8de" alt="IndexFast - Index your website from AI IDE" width="32" height="32"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. New landing page — “Ship code. Prompt your IDE. Get indexed instantly.”&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdqy38fnwh4fqs.cloudfront.net%2FUHDNEBPGADK7KALCNN69ODMKGOBL%2Fprojects%2Findexfast--index-your-website-from-ai-idee04eff6e-0d14-4555-8b8c-4ceb88176df5" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdqy38fnwh4fqs.cloudfront.net%2FUHDNEBPGADK7KALCNN69ODMKGOBL%2Fprojects%2Findexfast--index-your-website-from-ai-idee04eff6e-0d14-4555-8b8c-4ceb88176df5" alt="IndexFast landing page - AI IDE indexing" width="1886" height="1080"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Product workflow screenshot — AI-powered indexing experience&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdqy38fnwh4fqs.cloudfront.net%2FUHDNEBPGADK7KALCNN69ODMKGOBL%2Fprojects%2Findexfast--index-your-website-from-ai-idefea9179a-48e5-46e0-a829-5df06d466b31" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdqy38fnwh4fqs.cloudfront.net%2FUHDNEBPGADK7KALCNN69ODMKGOBL%2Fprojects%2Findexfast--index-your-website-from-ai-idefea9179a-48e5-46e0-a829-5df06d466b31" alt="IndexFast product workflow" width="720" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Dashboard overview — indexing health, usage, and site status&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdqy38fnwh4fqs.cloudfront.net%2FUHDNEBPGADK7KALCNN69ODMKGOBL%2Fprojects%2Findexfast--index-your-website-from-ai-ide754eaff1-bca9-4c05-a61d-b8a21470eafc" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdqy38fnwh4fqs.cloudfront.net%2FUHDNEBPGADK7KALCNN69ODMKGOBL%2Fprojects%2Findexfast--index-your-website-from-ai-ide754eaff1-bca9-4c05-a61d-b8a21470eafc" alt="IndexFast dashboard overview" width="1886" height="1080"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Websites dashboard — connected properties and indexing management&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdqy38fnwh4fqs.cloudfront.net%2FUHDNEBPGADK7KALCNN69ODMKGOBL%2Fprojects%2Findexfast--index-your-website-from-ai-ide70056a24-e217-45a7-85c7-c3a89bdbc5b5" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdqy38fnwh4fqs.cloudfront.net%2FUHDNEBPGADK7KALCNN69ODMKGOBL%2Fprojects%2Findexfast--index-your-website-from-ai-ide70056a24-e217-45a7-85c7-c3a89bdbc5b5" alt="IndexFast websites dashboard" width="1884" height="1080"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The Comeback Story
&lt;/h2&gt;

&lt;p&gt;The first version of IndexFast was honest, but generic.&lt;/p&gt;

&lt;p&gt;It was a tool for SEO indexing.&lt;/p&gt;

&lt;p&gt;You could submit URLs.&lt;/p&gt;

&lt;p&gt;You could talk about Google, Bing, and IndexNow.&lt;/p&gt;

&lt;p&gt;You could mention sitemap monitoring.&lt;/p&gt;

&lt;p&gt;You could explain that new pages should be crawled faster.&lt;/p&gt;

&lt;p&gt;But it still sounded like a feature, not a movement.&lt;/p&gt;

&lt;p&gt;And when I launched it on Product Hunt, the market basically told me that.&lt;/p&gt;

&lt;p&gt;No real support.&lt;/p&gt;

&lt;p&gt;No strong reaction.&lt;/p&gt;

&lt;p&gt;No “I need this right now.”&lt;/p&gt;

&lt;p&gt;That hurt, but it also helped.&lt;/p&gt;

&lt;p&gt;Because weak launches are not always failure.&lt;/p&gt;

&lt;p&gt;Sometimes they are feedback with bad UI.&lt;/p&gt;

&lt;p&gt;The Product Hunt launch told me:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“This is not positioned strongly enough.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The Peerlist launches told me:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“There is a real pain here, but you need to speak to the right builders.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And the 100 user conversations told me:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Stop building an SEO suite. Build the indexing workflow people actually need.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is when I removed the overengineering.&lt;/p&gt;

&lt;p&gt;I stopped trying to make IndexFast everything:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;keyword tracker&lt;/li&gt;
&lt;li&gt;ranking dashboard&lt;/li&gt;
&lt;li&gt;analytics suite&lt;/li&gt;
&lt;li&gt;SEO content generator&lt;/li&gt;
&lt;li&gt;backlink tracker&lt;/li&gt;
&lt;li&gt;competitor research tool&lt;/li&gt;
&lt;li&gt;enterprise reporting platform&lt;/li&gt;
&lt;li&gt;complicated automation monster&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those features sound impressive.&lt;/p&gt;

&lt;p&gt;But users did not ask for them first.&lt;/p&gt;

&lt;p&gt;They asked for clarity.&lt;/p&gt;

&lt;p&gt;They wanted to know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which URLs did my site publish?&lt;/li&gt;
&lt;li&gt;Which URLs are missing from the sitemap?&lt;/li&gt;
&lt;li&gt;Which URLs should be submitted?&lt;/li&gt;
&lt;li&gt;Which URLs were already submitted?&lt;/li&gt;
&lt;li&gt;Which submissions failed?&lt;/li&gt;
&lt;li&gt;Can this happen automatically?&lt;/li&gt;
&lt;li&gt;Can my AI coding assistant do this after I deploy?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That became the new IndexFast.&lt;/p&gt;

&lt;p&gt;Not bigger.&lt;/p&gt;

&lt;p&gt;Sharper.&lt;/p&gt;
&lt;h2&gt;
  
  
  Before
&lt;/h2&gt;

&lt;p&gt;Before the revival, IndexFast had multiple problems.&lt;/p&gt;
&lt;h3&gt;
  
  
  1. The positioning was too generic
&lt;/h3&gt;

&lt;p&gt;“Automated SEO &amp;amp; URL Submission” was clear, but not emotionally strong.&lt;/p&gt;

&lt;p&gt;It described a function.&lt;/p&gt;

&lt;p&gt;It did not describe a new workflow.&lt;/p&gt;

&lt;p&gt;There are many SEO tools.&lt;/p&gt;

&lt;p&gt;There are many dashboards.&lt;/p&gt;

&lt;p&gt;There are many “submit URL” utilities.&lt;/p&gt;

&lt;p&gt;So I needed to stop competing as another SEO tool and start owning a more specific category:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;indexing automation for AI-assisted builders.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  2. The product was over-scoped
&lt;/h3&gt;

&lt;p&gt;I was thinking too much like a builder and not enough like a user.&lt;/p&gt;

&lt;p&gt;My brain wanted architecture.&lt;/p&gt;

&lt;p&gt;Users wanted relief.&lt;/p&gt;

&lt;p&gt;I wanted to add advanced SEO modules.&lt;/p&gt;

&lt;p&gt;Users wanted the first workflow to just work.&lt;/p&gt;

&lt;p&gt;That was the main psychological shift.&lt;/p&gt;

&lt;p&gt;Users do not adopt complexity.&lt;/p&gt;

&lt;p&gt;They adopt a reduction in anxiety.&lt;/p&gt;

&lt;p&gt;IndexFast needed to reduce the anxiety that comes after publishing:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Is my new page discoverable yet?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  3. The backend wanted to become too clever too early
&lt;/h3&gt;

&lt;p&gt;The original product direction was drifting toward a large system before the core loop was validated.&lt;/p&gt;

&lt;p&gt;That is dangerous for an MVP.&lt;/p&gt;

&lt;p&gt;A complex backend can be impressive, but if users do not understand the product, the architecture does not matter.&lt;/p&gt;

&lt;p&gt;So I separated the product into two layers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MVP reality:&lt;/strong&gt; simple, fast, usable, focused on users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;System architecture:&lt;/strong&gt; scalable enough to support future indexing automation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That let me ship without lying to myself.&lt;/p&gt;
&lt;h3&gt;
  
  
  4. The AI angle was missing
&lt;/h3&gt;

&lt;p&gt;The old product was built for a browser dashboard.&lt;/p&gt;

&lt;p&gt;The new product is built for a developer workflow.&lt;/p&gt;

&lt;p&gt;That matters because the center of gravity for builders is shifting.&lt;/p&gt;

&lt;p&gt;If an AI agent can update a page, generate a changelog, write docs, and deploy a site, then indexing should also become an agent-callable workflow.&lt;/p&gt;

&lt;p&gt;That is where MCP became important.&lt;/p&gt;
&lt;h2&gt;
  
  
  After
&lt;/h2&gt;

&lt;p&gt;The revived IndexFast is built around a cleaner idea:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;IndexFast turns indexing into an agentic developer workflow.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of asking users to manually remember indexing tasks, the product is designed so a developer or AI agent can trigger actions like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Scan my sitemap and find newly published URLs.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Submit these URLs through the supported indexing pipeline.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Show me URLs that failed submission in the last 24 hours.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Run an indexability check before I publish this landing page.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Schedule indexing automation for this site every day.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The product became more compelling when I stopped thinking of it as an SEO dashboard and started thinking of it as an &lt;strong&gt;indexing control plane&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The New Product Loop
&lt;/h2&gt;

&lt;p&gt;The finished loop now looks like this:&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Add a site
&lt;/h3&gt;

&lt;p&gt;A user connects or adds a website.&lt;/p&gt;

&lt;p&gt;IndexFast stores site configuration, sitemap URL, verified domain metadata, protocol preferences, and crawl settings.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Scan the sitemap
&lt;/h3&gt;

&lt;p&gt;IndexFast fetches the sitemap, parses URL entries, extracts &lt;code&gt;lastmod&lt;/code&gt; signals where available, and builds a normalized URL inventory.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Canonicalize the URL graph
&lt;/h3&gt;

&lt;p&gt;Every URL goes through normalization:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;protocol cleanup&lt;/li&gt;
&lt;li&gt;trailing slash handling&lt;/li&gt;
&lt;li&gt;duplicate removal&lt;/li&gt;
&lt;li&gt;query parameter filtering&lt;/li&gt;
&lt;li&gt;canonical URL preference&lt;/li&gt;
&lt;li&gt;sitemap source attribution&lt;/li&gt;
&lt;li&gt;freshness scoring&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This prevents accidental duplicate submissions and keeps the queue clean.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Build the submission queue
&lt;/h3&gt;

&lt;p&gt;The system decides which URLs need attention.&lt;/p&gt;

&lt;p&gt;Possible states include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;discovered&lt;/li&gt;
&lt;li&gt;queued&lt;/li&gt;
&lt;li&gt;submitted&lt;/li&gt;
&lt;li&gt;skipped&lt;/li&gt;
&lt;li&gt;retryable_failed&lt;/li&gt;
&lt;li&gt;permanently_failed&lt;/li&gt;
&lt;li&gt;stale&lt;/li&gt;
&lt;li&gt;blocked_by_policy&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 5: Submit through protocol adapters
&lt;/h3&gt;

&lt;p&gt;IndexFast routes submissions through engine-specific adapters.&lt;/p&gt;

&lt;p&gt;The architecture is designed around protocol abstraction:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;URL Queue
   ↓
Policy Engine
   ↓
Submission Orchestrator
   ↓
Protocol Adapters
   → IndexNow Adapter
   → Bing Adapter
   → Google-aware Workflow Checks
   → Future Search/Discovery Integrations
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important part is that different search systems have different rules.&lt;/p&gt;

&lt;p&gt;IndexFast should not pretend indexing is magic.&lt;/p&gt;

&lt;p&gt;It should use supported pathways responsibly and make the workflow visible.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: Store an event-sourced submission log
&lt;/h3&gt;

&lt;p&gt;Every action becomes an event:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;URL discovered&lt;/li&gt;
&lt;li&gt;URL queued&lt;/li&gt;
&lt;li&gt;URL submitted&lt;/li&gt;
&lt;li&gt;API response received&lt;/li&gt;
&lt;li&gt;retry scheduled&lt;/li&gt;
&lt;li&gt;retry exhausted&lt;/li&gt;
&lt;li&gt;user triggered manual submit&lt;/li&gt;
&lt;li&gt;AI agent triggered submit&lt;/li&gt;
&lt;li&gt;automation triggered submit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes the system auditable.&lt;/p&gt;

&lt;p&gt;It also makes the product feel trustworthy.&lt;/p&gt;

&lt;p&gt;Users should never have to guess what happened.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 7: Expose the workflow to AI IDEs through MCP
&lt;/h3&gt;

&lt;p&gt;This is the new layer.&lt;/p&gt;

&lt;p&gt;IndexFast can become an MCP-compatible tool surface where agents can call indexing actions from the developer environment.&lt;/p&gt;

&lt;p&gt;A simplified tool map could look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;indexfast.scanSite
indexfast.diffSitemap
indexfast.queueUrls
indexfast.submitUrls
indexfast.getSubmissionLog
indexfast.auditIndexability
indexfast.scheduleAutomation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is where the product becomes more than a dashboard.&lt;/p&gt;

&lt;p&gt;It becomes infrastructure for AI-assisted publishing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architecture I Rebuilt Toward
&lt;/h2&gt;

&lt;p&gt;For the MVP, I intentionally simplified the product.&lt;/p&gt;

&lt;p&gt;But the revived architecture has a serious direction.&lt;/p&gt;

&lt;p&gt;Here is the system design I moved toward:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Next.js App Router
   ↓
Dashboard UI / AI IDE Client / API Client
   ↓
Auth + Site Ownership Layer
   ↓
Indexing Control Plane
   ├─ Sitemap Fetcher
   ├─ URL Normalizer
   ├─ Canonicalization Engine
   ├─ Diff Detector
   ├─ Submission Queue
   ├─ Policy Engine
   ├─ Protocol Adapter Layer
   ├─ Retry + Backoff Scheduler
   ├─ Event Log
   └─ Observability Layer
   ↓
Database
   ├─ sites
   ├─ sitemaps
   ├─ urls
   ├─ submission_events
   ├─ indexing_jobs
   ├─ api_keys
   └─ automation_rules
   ↓
External Protocols / APIs
   ├─ IndexNow
   ├─ Bing-compatible flows
   ├─ Search Console-aware checks
   └─ future discovery surfaces
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Important architectural decisions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Idempotency keys&lt;/strong&gt; prevent duplicate submissions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Canonical URL hashing&lt;/strong&gt; keeps queue entries stable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backoff policies&lt;/strong&gt; prevent noisy retries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol adapters&lt;/strong&gt; isolate engine-specific logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event-sourced logs&lt;/strong&gt; make submissions explainable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP tools&lt;/strong&gt; expose workflows to AI agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate-limit governance&lt;/strong&gt; keeps automation safe.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sitemap diffing&lt;/strong&gt; turns passive XML into active workflow intelligence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Observability hooks&lt;/strong&gt; make failures visible instead of silent.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That may sound complex, but the user-facing product is intentionally simple.&lt;/p&gt;

&lt;p&gt;The complexity stays in the infrastructure.&lt;/p&gt;

&lt;p&gt;The user sees:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Add site → scan URLs → submit → track → automate.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is the right balance.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Removed for the MVP
&lt;/h2&gt;

&lt;p&gt;This was the most important part.&lt;/p&gt;

&lt;p&gt;I removed anything that did not directly support the first user priority.&lt;/p&gt;

&lt;p&gt;I removed or delayed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;full keyword rank tracking&lt;/li&gt;
&lt;li&gt;complex competitor analysis&lt;/li&gt;
&lt;li&gt;backlink reports&lt;/li&gt;
&lt;li&gt;enterprise team dashboards&lt;/li&gt;
&lt;li&gt;bloated analytics views&lt;/li&gt;
&lt;li&gt;AI content writing tools&lt;/li&gt;
&lt;li&gt;unnecessary onboarding steps&lt;/li&gt;
&lt;li&gt;too many pricing gates&lt;/li&gt;
&lt;li&gt;overdesigned SEO reports&lt;/li&gt;
&lt;li&gt;features that sounded good but did not help users index faster&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This was hard because builders love adding things.&lt;/p&gt;

&lt;p&gt;But the 100 user conversations made it obvious:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A focused product that solves one painful workflow is better than a huge product nobody understands.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So IndexFast became smaller on the surface and stronger underneath.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot
&lt;/h2&gt;

&lt;p&gt;GitHub Copilot helped me most when I was stuck between product uncertainty and technical execution.&lt;/p&gt;

&lt;p&gt;The hardest part was not writing one function.&lt;/p&gt;

&lt;p&gt;The hardest part was turning a messy product into a coherent system.&lt;/p&gt;

&lt;p&gt;Copilot helped me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;convert user feedback into implementation tasks&lt;/li&gt;
&lt;li&gt;restructure the sitemap parsing flow&lt;/li&gt;
&lt;li&gt;design cleaner TypeScript types for URL states&lt;/li&gt;
&lt;li&gt;scaffold API routes for site scanning and submissions&lt;/li&gt;
&lt;li&gt;reason about idempotency and deduplication&lt;/li&gt;
&lt;li&gt;generate UI components for logs, queues, and status cards&lt;/li&gt;
&lt;li&gt;draft MCP tool definitions&lt;/li&gt;
&lt;li&gt;write safer error handling around external API calls&lt;/li&gt;
&lt;li&gt;refactor repeated dashboard logic&lt;/li&gt;
&lt;li&gt;simplify product copy from generic SEO language into developer workflow language&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest Copilot win was momentum.&lt;/p&gt;

&lt;p&gt;When a product launch disappoints you, the codebase starts to feel heavier.&lt;/p&gt;

&lt;p&gt;Every unfinished file feels like proof that the product is not worth continuing.&lt;/p&gt;

&lt;p&gt;Copilot helped me get back into motion.&lt;/p&gt;

&lt;p&gt;Not by replacing my judgment.&lt;/p&gt;

&lt;p&gt;By reducing the friction between “I know what I need to change” and “I can actually make progress today.”&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Pushed Back On
&lt;/h2&gt;

&lt;p&gt;I also pushed back on a lot.&lt;/p&gt;

&lt;p&gt;AI-generated product copy often wants to overpromise.&lt;/p&gt;

&lt;p&gt;For SEO tools, that is risky.&lt;/p&gt;

&lt;p&gt;It is easy to write:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Instantly rank on Google.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But that is not honest.&lt;/p&gt;

&lt;p&gt;Indexing is not ranking.&lt;/p&gt;

&lt;p&gt;Submission is not guaranteed indexing.&lt;/p&gt;

&lt;p&gt;Different search engines and discovery systems support different workflows.&lt;/p&gt;

&lt;p&gt;So I changed the language.&lt;/p&gt;

&lt;p&gt;IndexFast is not a magic ranking button.&lt;/p&gt;

&lt;p&gt;It is an indexing workflow platform.&lt;/p&gt;

&lt;p&gt;It helps users discover URLs, submit through supported pathways, monitor responses, detect obvious issues, and automate the process.&lt;/p&gt;

&lt;p&gt;That honesty matters.&lt;/p&gt;

&lt;p&gt;I also pushed back on unnecessary complexity.&lt;/p&gt;

&lt;p&gt;At one point, the architecture looked powerful but too heavy for the stage of the product.&lt;/p&gt;

&lt;p&gt;So I made a rule:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If a feature does not help the user get from published page to indexing workflow faster, it does not belong in the MVP.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That rule saved the project.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Changed After Talking to 100 Users
&lt;/h2&gt;

&lt;p&gt;The conversations changed my assumptions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Assumption 1: Users want a full SEO suite
&lt;/h3&gt;

&lt;p&gt;Wrong.&lt;/p&gt;

&lt;p&gt;Most early users wanted one thing solved well.&lt;/p&gt;

&lt;p&gt;They already had analytics tools.&lt;/p&gt;

&lt;p&gt;They already had SEO checkers.&lt;/p&gt;

&lt;p&gt;They already had dashboards.&lt;/p&gt;

&lt;p&gt;They did not have a clean indexing workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Assumption 2: The browser dashboard is enough
&lt;/h3&gt;

&lt;p&gt;Not anymore.&lt;/p&gt;

&lt;p&gt;Developers increasingly live inside AI-assisted environments.&lt;/p&gt;

&lt;p&gt;If the page is created, edited, committed, and deployed from an AI IDE, then post-publish actions should also be callable from there.&lt;/p&gt;

&lt;p&gt;That is why MCP matters.&lt;/p&gt;

&lt;h3&gt;
  
  
  Assumption 3: More features create more trust
&lt;/h3&gt;

&lt;p&gt;Wrong again.&lt;/p&gt;

&lt;p&gt;More clarity creates more trust.&lt;/p&gt;

&lt;p&gt;Users trusted IndexFast more when the product became easier to explain.&lt;/p&gt;

&lt;h3&gt;
  
  
  Assumption 4: The launch failure meant the product was bad
&lt;/h3&gt;

&lt;p&gt;Not exactly.&lt;/p&gt;

&lt;p&gt;The Product Hunt launch showed that the product did not have strong enough positioning yet.&lt;/p&gt;

&lt;p&gt;The Peerlist launches showed that builders did care.&lt;/p&gt;

&lt;p&gt;The user conversations showed what to remove.&lt;/p&gt;

&lt;p&gt;That sequence became the real validation loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Traction Shift
&lt;/h2&gt;

&lt;p&gt;The best part is that after simplifying the MVP and repositioning around AI IDE indexing, the product finally started getting real usage.&lt;/p&gt;

&lt;p&gt;IndexFast now has &lt;strong&gt;2,000+ users and growing&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;People are using it because the value is immediate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;publish a website&lt;/li&gt;
&lt;li&gt;discover the URLs&lt;/li&gt;
&lt;li&gt;submit them&lt;/li&gt;
&lt;li&gt;track what happened&lt;/li&gt;
&lt;li&gt;repeat without manual chaos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That does not mean the product is finished forever.&lt;/p&gt;

&lt;p&gt;But it does mean the comeback is real.&lt;/p&gt;

&lt;p&gt;For me, this is the psychological difference between a side project and a product:&lt;/p&gt;

&lt;p&gt;A side project is something you hope people understand.&lt;/p&gt;

&lt;p&gt;A product is something users pull into their own workflow.&lt;/p&gt;

&lt;p&gt;IndexFast finally started becoming the second one.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;I learned that failed launches are not always the end.&lt;/p&gt;

&lt;p&gt;Sometimes they are the first honest signal.&lt;/p&gt;

&lt;p&gt;Product Hunt gave me silence.&lt;/p&gt;

&lt;p&gt;Peerlist gave me early validation.&lt;/p&gt;

&lt;p&gt;User conversations gave me direction.&lt;/p&gt;

&lt;p&gt;MCP and AI IDE workflows gave me timing.&lt;/p&gt;

&lt;p&gt;GitHub Copilot gave me execution speed.&lt;/p&gt;

&lt;p&gt;The combination brought IndexFast back.&lt;/p&gt;

&lt;p&gt;I also learned that overengineering is often fear wearing an architecture costume.&lt;/p&gt;

&lt;p&gt;I was adding complexity partly because I wanted the product to feel serious.&lt;/p&gt;

&lt;p&gt;But users do not care how impressive the internal system sounds if the first workflow is confusing.&lt;/p&gt;

&lt;p&gt;So I made the MVP simpler.&lt;/p&gt;

&lt;p&gt;Then I made the architecture support that simplicity.&lt;/p&gt;

&lt;p&gt;That is the real comeback.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Comes Next
&lt;/h2&gt;

&lt;p&gt;The next version of IndexFast will focus on the workflows users are already asking for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;better MCP documentation&lt;/li&gt;
&lt;li&gt;AI IDE quick-start templates&lt;/li&gt;
&lt;li&gt;sitemap diff reports&lt;/li&gt;
&lt;li&gt;failed URL diagnostics&lt;/li&gt;
&lt;li&gt;automatic retries with backoff&lt;/li&gt;
&lt;li&gt;robots.txt and noindex detection&lt;/li&gt;
&lt;li&gt;canonical mismatch warnings&lt;/li&gt;
&lt;li&gt;webhook notifications&lt;/li&gt;
&lt;li&gt;public API keys&lt;/li&gt;
&lt;li&gt;team workspaces&lt;/li&gt;
&lt;li&gt;scheduled scans&lt;/li&gt;
&lt;li&gt;transparent submission history&lt;/li&gt;
&lt;li&gt;simple user-first onboarding&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I am also going to keep talking to users before adding big features.&lt;/p&gt;

&lt;p&gt;That is the rule now.&lt;/p&gt;

&lt;p&gt;No more building giant systems in isolation.&lt;/p&gt;

&lt;p&gt;No more adding features just because they sound impressive.&lt;/p&gt;

&lt;p&gt;The priority is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Get users. Watch their workflow. Remove friction. Then build.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;IndexFast almost died because I judged it too early.&lt;/p&gt;

&lt;p&gt;The first launch was quiet.&lt;/p&gt;

&lt;p&gt;The first positioning was generic.&lt;/p&gt;

&lt;p&gt;The first architecture was too ambitious for the MVP.&lt;/p&gt;

&lt;p&gt;But the underlying pain was real.&lt;/p&gt;

&lt;p&gt;Builders are publishing faster than ever.&lt;/p&gt;

&lt;p&gt;AI tools are making shipping easier than ever.&lt;/p&gt;

&lt;p&gt;But discovery still lags behind.&lt;/p&gt;

&lt;p&gt;IndexFast exists to close that gap.&lt;/p&gt;

&lt;p&gt;Not with magic.&lt;/p&gt;

&lt;p&gt;Not with fake ranking promises.&lt;/p&gt;

&lt;p&gt;But with a focused indexing workflow that fits the way modern builders actually work.&lt;/p&gt;

&lt;p&gt;I almost gave up after the first launch.&lt;/p&gt;

&lt;p&gt;I am glad I did not.&lt;/p&gt;

&lt;p&gt;Because now IndexFast is not just an SEO tool.&lt;/p&gt;

&lt;p&gt;It is becoming an indexing layer for the AI-assisted web.&lt;/p&gt;




&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Live Demo: &lt;a href="https://indexfast.co/" rel="noopener noreferrer"&gt;https://indexfast.co/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub Repository: &lt;a href="https://github.com/SH20RAJ/index-fast" rel="noopener noreferrer"&gt;https://github.com/SH20RAJ/index-fast&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Product Hunt Launch: &lt;a href="https://www.producthunt.com/products/indexfast/launches" rel="noopener noreferrer"&gt;https://www.producthunt.com/products/indexfast/launches&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Peerlist: Get Indexed in Minutes: &lt;a href="https://peerlist.io/sh20raj/project/indexfast--get-indexed-in-minutes" rel="noopener noreferrer"&gt;https://peerlist.io/sh20raj/project/indexfast--get-indexed-in-minutes&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Peerlist: Automated SEO &amp;amp; URL Submission: &lt;a href="https://peerlist.io/sh20raj/project/indexfast--automated-seo--url-submission" rel="noopener noreferrer"&gt;https://peerlist.io/sh20raj/project/indexfast--automated-seo--url-submission&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;New Peerlist Launch: &lt;a href="https://peerlist.io/sh20raj/project/indexfast--index-your-website-from-ai-ide" rel="noopener noreferrer"&gt;https://peerlist.io/sh20raj/project/indexfast--index-your-website-from-ai-ide&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;My GitHub: &lt;a href="https://github.com/SH20RAJ" rel="noopener noreferrer"&gt;https://github.com/SH20RAJ&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;My Portfolio: &lt;a href="https://sh20raj.github.io/" rel="noopener noreferrer"&gt;https://sh20raj.github.io/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Cover Image / Poster Prompt
&lt;/h1&gt;

&lt;p&gt;Use this prompt in Genspark Designer, ChatGPT image generation, Canva AI, or any poster tool:&lt;/p&gt;

&lt;p&gt;Create a premium DEV.to cover image for “IndexFast”. Theme: failed launch to AI-IDE indexing comeback. Show a split-screen transformation: left side has a quiet Product Hunt launch dashboard with low activity, faded gray cards, and a founder looking at analytics; right side has a futuristic AI IDE panel triggering website indexing, sitemap nodes, URL queue, search engine endpoints, MCP server graph, and 2,000+ users growth signal. Main headline: “I Almost Gave Up on IndexFast”. Subtitle: “Then 100 builder conversations turned it into an AI-IDE indexing platform”. Style: premium developer SaaS, dark charcoal background, neon green and electric blue accents, glassmorphism cards, clean typography, high contrast, emotional but technical, 16:9 DEV cover image.&lt;/p&gt;

&lt;h2&gt;
  
  
  Poster Text Layout
&lt;/h2&gt;

&lt;p&gt;Top-left small label:&lt;br&gt;
GitHub Finish-Up-A-Thon Submission&lt;/p&gt;

&lt;p&gt;Main headline:&lt;br&gt;
I Almost Gave Up on IndexFast&lt;/p&gt;

&lt;p&gt;Subtitle:&lt;br&gt;
From failed launch to AI-IDE indexing platform&lt;/p&gt;

&lt;p&gt;Three small chips:&lt;br&gt;
Product Hunt Silence • 100 User Calls • MCP Pivot&lt;/p&gt;

&lt;p&gt;Footer:&lt;br&gt;
Built by Shaswat Raj&lt;/p&gt;

&lt;h2&gt;
  
  
  First Comment to Add After Publishing
&lt;/h2&gt;

&lt;p&gt;Thanks for reading! The biggest lesson for me was that the failed Product Hunt launch was not the end — it was just weak positioning. After talking to builders, I simplified the MVP and moved IndexFast toward AI IDE + MCP indexing workflows. I’d love feedback: what should the AI agent workflow support first — sitemap scan, failed URL diagnostics, or auto-submit after deploy?&lt;/p&gt;

&lt;h2&gt;
  
  
  X / LinkedIn Share Text
&lt;/h2&gt;

&lt;p&gt;I almost gave up on IndexFast after a quiet Product Hunt launch.&lt;/p&gt;

&lt;p&gt;Then Peerlist gave the first signal, 100 builder conversations changed the product, and I pivoted it into an AI-IDE indexing workflow with MCP support.&lt;/p&gt;

&lt;p&gt;Now it has 2,000+ users and growing.&lt;/p&gt;

&lt;p&gt;DEV post: &lt;a href="https://dev.to/sh20raj/i-almost-gave-up-on-indexfast-then-i-revived-it-into-an-mcp-native-seo-indexing-platform-79e/"&gt;https://dev.to/sh20raj/i-almost-gave-up-on-indexfast-then-i-revived-it-into-an-mcp-native-seo-indexing-platform-79e/&lt;/a&gt;&lt;br&gt;
Live: &lt;a href="https://indexfast.co/" rel="noopener noreferrer"&gt;https://indexfast.co/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>githubcopilot</category>
      <category>seo</category>
    </item>
    <item>
      <title>I Revived SketchFlow: Turning an Abandoned Canvas App Into a GitHub-Native Visual Workspace</title>
      <dc:creator>Sh Raj</dc:creator>
      <pubDate>Sun, 24 May 2026 09:51:29 +0000</pubDate>
      <link>https://dev.to/sh20raj/i-revived-sketchflow-turning-an-abandoned-canvas-app-into-a-github-native-visual-workspace-gdl</link>
      <guid>https://dev.to/sh20raj/i-revived-sketchflow-turning-an-abandoned-canvas-app-into-a-github-native-visual-workspace-gdl</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-05-21"&gt;GitHub Finish-Up-A-Thon Challenge&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  I Revived SketchFlow: Turning an Abandoned Canvas App Into a GitHub-Native Visual Workspace
&lt;/h1&gt;

&lt;p&gt;There is a strange feeling that comes from opening an old repository.&lt;/p&gt;

&lt;p&gt;Not because the code is bad.&lt;/p&gt;

&lt;p&gt;Because you can still see the version of yourself who believed in the idea.&lt;/p&gt;

&lt;p&gt;That is what happened when I reopened &lt;strong&gt;SketchFlow&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It started as a simple idea: what if builders could think visually, write project notes, organize diagrams, and keep everything connected inside one workspace?&lt;/p&gt;

&lt;p&gt;At first, I imagined it like a mix of Excalidraw, Eraser, and a developer notebook. A place where a founder, designer, student, or engineer could sketch a system, write the surrounding context, export assets, and come back later without losing the story behind the project.&lt;/p&gt;

&lt;p&gt;The early version had ambition.&lt;/p&gt;

&lt;p&gt;It had a canvas.&lt;/p&gt;

&lt;p&gt;It had documents.&lt;/p&gt;

&lt;p&gt;It had authentication.&lt;/p&gt;

&lt;p&gt;It had project structure.&lt;/p&gt;

&lt;p&gt;But it did not feel finished.&lt;/p&gt;

&lt;p&gt;It felt like one of those repositories that had a big vision, many moving parts, and not enough polish to confidently show to people.&lt;/p&gt;

&lt;p&gt;So it slowly became another unfinished project sitting on GitHub.&lt;/p&gt;

&lt;p&gt;Then the GitHub Finish-Up-A-Thon gave me the exact push I needed.&lt;/p&gt;

&lt;p&gt;Instead of starting yet another new idea, I decided to come back to SketchFlow and finally turn it into something sharper, clearer, and closer to the product I originally imagined.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;SketchFlow&lt;/strong&gt; is a GitHub-native visual workspace for builders.&lt;/p&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Excalidraw-like creation, Eraser-like project flow, GitHub-native ownership, and AI-ready project memory.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most visual tools store your work inside their own closed system. SketchFlow takes a different direction. The core idea is that your sketches, docs, exports, assets, metadata, and history should live in a GitHub repository that you own.&lt;/p&gt;

&lt;p&gt;That means the project is not only a drawing tool.&lt;/p&gt;

&lt;p&gt;It is a workspace where visual thinking becomes part of your actual developer workflow.&lt;/p&gt;

&lt;p&gt;In the revived version, SketchFlow focuses on this loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create or connect a GitHub-backed workspace.&lt;/li&gt;
&lt;li&gt;Start a project.&lt;/li&gt;
&lt;li&gt;Sketch ideas visually with an Excalidraw-powered editor.&lt;/li&gt;
&lt;li&gt;Write notes and project context beside the canvas.&lt;/li&gt;
&lt;li&gt;Save a snapshot into GitHub.&lt;/li&gt;
&lt;li&gt;Keep history, assets, metadata, and future public pages connected to the repo.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The bigger vision is to make SketchFlow a place where builders can plan products, map systems, explain architecture, organize ideas, and preserve the context behind their work without locking everything inside a private database.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Live Demo:&lt;/strong&gt; [ADD_LIVE_DEMO_LINK_HERE]&lt;br&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/SH20RAJ/sketch-flow" rel="noopener noreferrer"&gt;https://github.com/SH20RAJ/sketch-flow&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Original/Older SketchFlow Repository:&lt;/strong&gt; &lt;a href="https://github.com/unstory-app/sketchflow" rel="noopener noreferrer"&gt;https://github.com/unstory-app/sketchflow&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Add 4–6 screenshots here. Use captions so judges immediately understand the before/after.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Before: the older unfinished SketchFlow direction&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/ADD_OLD_SCREENSHOT_URL_HERE" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/ADD_OLD_SCREENSHOT_URL_HERE" alt="Old SketchFlow dashboard / canvas screenshot" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After: the revived GitHub-native workspace&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/ADD_NEW_LANDING_SCREENSHOT_URL_HERE" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/ADD_NEW_LANDING_SCREENSHOT_URL_HERE" alt="New SketchFlow landing page" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub-connected workspace onboarding&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/ADD_GITHUB_ONBOARDING_SCREENSHOT_URL_HERE" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/ADD_GITHUB_ONBOARDING_SCREENSHOT_URL_HERE" alt="GitHub connection and repo bootstrap" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Visual canvas editor with local draft saving&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/ADD_CANVAS_EDITOR_SCREENSHOT_URL_HERE" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/ADD_CANVAS_EDITOR_SCREENSHOT_URL_HERE" alt="SketchFlow canvas editor" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Manual GitHub snapshot save&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/ADD_GITHUB_SNAPSHOT_SCREENSHOT_URL_HERE" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/ADD_GITHUB_SNAPSHOT_SCREENSHOT_URL_HERE" alt="Snapshot saved to GitHub" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project dashboard with sync state&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/ADD_DASHBOARD_SCREENSHOT_URL_HERE" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/ADD_DASHBOARD_SCREENSHOT_URL_HERE" alt="Workspace dashboard" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The Comeback Story
&lt;/h2&gt;

&lt;p&gt;The first version of SketchFlow tried to do a lot.&lt;/p&gt;

&lt;p&gt;It was a collaborative workspace for designers and developers. It combined a visual canvas, rich-text documents, project management, authentication, auto-save, exports, dark mode, and more.&lt;/p&gt;

&lt;p&gt;That sounded powerful, but it also made the project heavy.&lt;/p&gt;

&lt;p&gt;The problem was not that the idea was weak.&lt;/p&gt;

&lt;p&gt;The problem was that the product identity was not sharp enough.&lt;/p&gt;

&lt;p&gt;Was it a canvas app?&lt;/p&gt;

&lt;p&gt;Was it a document editor?&lt;/p&gt;

&lt;p&gt;Was it a project manager?&lt;/p&gt;

&lt;p&gt;Was it a collaboration tool?&lt;/p&gt;

&lt;p&gt;Was it a diagramming product?&lt;/p&gt;

&lt;p&gt;The answer was: yes, kind of — and that was exactly the issue.&lt;/p&gt;

&lt;p&gt;When I reopened the project, I realized I did not need to add every feature in the world. I needed to finish the core loop.&lt;/p&gt;

&lt;p&gt;So I reframed SketchFlow around one strong direction:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A visual workspace where the user owns the data in GitHub.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That changed everything.&lt;/p&gt;

&lt;p&gt;Instead of treating the database as the main source of truth, I redesigned the architecture so GitHub becomes the durable storage layer for sketches, docs, exports, assets, metadata, and history.&lt;/p&gt;

&lt;p&gt;The app database stays intentionally small. It stores operational metadata like user identity, GitHub connection, workspace pointers, sync events, and future billing state.&lt;/p&gt;

&lt;p&gt;The actual project content belongs to the user.&lt;/p&gt;

&lt;p&gt;That became the heart of the revival.&lt;/p&gt;
&lt;h2&gt;
  
  
  Before
&lt;/h2&gt;

&lt;p&gt;The older version had many good parts, but it still felt unfinished:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The product direction was broad and slightly scattered.&lt;/li&gt;
&lt;li&gt;The app wanted to be a canvas, document editor, collaboration tool, and project manager at the same time.&lt;/li&gt;
&lt;li&gt;Storage was more traditional and app-centered.&lt;/li&gt;
&lt;li&gt;The GitHub ownership story was not the central idea.&lt;/li&gt;
&lt;li&gt;There were many features, but the main user loop was not clear enough.&lt;/li&gt;
&lt;li&gt;It felt more like a promising technical prototype than a focused product.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project had the bones of something useful, but it needed a sharper reason to exist.&lt;/p&gt;
&lt;h2&gt;
  
  
  After
&lt;/h2&gt;

&lt;p&gt;The revived SketchFlow has a much clearer identity:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub-native workspace model.&lt;/li&gt;
&lt;li&gt;Excalidraw-powered visual editor.&lt;/li&gt;
&lt;li&gt;Local IndexedDB draft saving for fast editing.&lt;/li&gt;
&lt;li&gt;GitHub repo bootstrap flow.&lt;/li&gt;
&lt;li&gt;Multi-file snapshot commits for scenes, project metadata, and notes.&lt;/li&gt;
&lt;li&gt;Dashboard with workspace cards and sync status.&lt;/li&gt;
&lt;li&gt;A repository structure designed for long-term ownership.&lt;/li&gt;
&lt;li&gt;A roadmap for public project pages, visual history, exports, docs, collaboration, and AI memory.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest change is not just visual polish.&lt;/p&gt;

&lt;p&gt;The biggest change is product clarity.&lt;/p&gt;

&lt;p&gt;SketchFlow now has a clean answer to the question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why should this exist?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Because builders think visually, but their real work already lives in GitHub. SketchFlow connects those two worlds.&lt;/p&gt;
&lt;h2&gt;
  
  
  What Changed Technically
&lt;/h2&gt;

&lt;p&gt;The revival focused on making the architecture more intentional.&lt;/p&gt;
&lt;h3&gt;
  
  
  1. GitHub as the durable source of truth
&lt;/h3&gt;

&lt;p&gt;SketchFlow is designed so the user’s repository stores the durable project data.&lt;/p&gt;

&lt;p&gt;A bootstrapped workspace repo can contain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.sketchflow/
  manifest.json
  workspace.json
  latest.json
  indexes/
    public-projects.json
    search-index.json
projects/
  {projectSlug}/
    project.json
    sketches/
      {sketchSlug}.excalidraw.json
    docs/
      notes.md
    exports/
    assets/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This structure makes the project portable, inspectable, and more aligned with developer workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Snapshot-based saving instead of noisy commits
&lt;/h3&gt;

&lt;p&gt;A drawing tool should not commit every canvas stroke.&lt;/p&gt;

&lt;p&gt;That would create unnecessary Git noise.&lt;/p&gt;

&lt;p&gt;So SketchFlow uses local drafts for instant editing and manual GitHub snapshot saves for meaningful versions.&lt;/p&gt;

&lt;p&gt;That makes the workflow feel fast while still preserving history.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Smaller app database
&lt;/h3&gt;

&lt;p&gt;Instead of storing every sketch scene in Postgres, the app database stores only the operational metadata:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;user identity&lt;/li&gt;
&lt;li&gt;GitHub connection&lt;/li&gt;
&lt;li&gt;workspace pointer&lt;/li&gt;
&lt;li&gt;sync events&lt;/li&gt;
&lt;li&gt;future billing metadata&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The actual project data remains in GitHub.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Clearer MVP user journey
&lt;/h3&gt;

&lt;p&gt;The revived flow now focuses on a simple path:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;User lands on SketchFlow.&lt;/li&gt;
&lt;li&gt;User signs in.&lt;/li&gt;
&lt;li&gt;User connects GitHub.&lt;/li&gt;
&lt;li&gt;SketchFlow creates or connects a workspace repository.&lt;/li&gt;
&lt;li&gt;User opens the dashboard.&lt;/li&gt;
&lt;li&gt;User creates a project.&lt;/li&gt;
&lt;li&gt;User sketches ideas visually.&lt;/li&gt;
&lt;li&gt;User saves a snapshot to GitHub.&lt;/li&gt;
&lt;li&gt;User can later load, export, publish, or version the project.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is the kind of loop that makes the app feel real instead of just experimental.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot
&lt;/h2&gt;

&lt;p&gt;GitHub Copilot helped most during the parts where I needed to move from idea to implementation without getting stuck in repetitive setup work.&lt;/p&gt;

&lt;p&gt;It was especially useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;breaking the revival into smaller implementation steps&lt;/li&gt;
&lt;li&gt;refactoring confusing parts of the older project direction&lt;/li&gt;
&lt;li&gt;planning a GitHub-backed data model&lt;/li&gt;
&lt;li&gt;generating API route scaffolding&lt;/li&gt;
&lt;li&gt;improving TypeScript types around workspace metadata&lt;/li&gt;
&lt;li&gt;thinking through the difference between local drafts and durable snapshots&lt;/li&gt;
&lt;li&gt;writing safer helper logic for GitHub sync flows&lt;/li&gt;
&lt;li&gt;improving naming, copy, and product messaging&lt;/li&gt;
&lt;li&gt;turning vague roadmap notes into concrete tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest benefit was not that Copilot “built the app for me.”&lt;/p&gt;

&lt;p&gt;The biggest benefit was momentum.&lt;/p&gt;

&lt;p&gt;When you reopen an old project, the hardest part is often re-entering the codebase. You see unfinished files, old decisions, half-built flows, and a long list of things that need cleanup.&lt;/p&gt;

&lt;p&gt;Copilot reduced that friction.&lt;/p&gt;

&lt;p&gt;It helped me ask better questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is the smallest complete user loop?&lt;/li&gt;
&lt;li&gt;What should be stored locally?&lt;/li&gt;
&lt;li&gt;What should be stored in GitHub?&lt;/li&gt;
&lt;li&gt;What should never be committed?&lt;/li&gt;
&lt;li&gt;How do I keep the database small?&lt;/li&gt;
&lt;li&gt;How do I design the repo structure so users can understand it later?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That changed the process from “fix everything” to “finish the core loop.”&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Pushed Back On
&lt;/h2&gt;

&lt;p&gt;Copilot is fast, but finishing a project still requires taste and judgment.&lt;/p&gt;

&lt;p&gt;There were several areas where I had to slow down and make decisions myself.&lt;/p&gt;

&lt;p&gt;For example, it is tempting to make every canvas change sync instantly to GitHub. That sounds impressive, but it would create a terrible Git history and could hit API/rate limits quickly.&lt;/p&gt;

&lt;p&gt;So I kept live editing local and made GitHub saves intentional.&lt;/p&gt;

&lt;p&gt;It is also tempting to store everything in the database because that is easier to query. But that would weaken the main product idea: user-owned project memory in GitHub.&lt;/p&gt;

&lt;p&gt;So I kept the database small and treated GitHub as the durable storage layer.&lt;/p&gt;

&lt;p&gt;That is what I learned most during the revival:&lt;/p&gt;

&lt;p&gt;AI can accelerate implementation, but product direction still has to come from the builder.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;Reviving SketchFlow taught me that unfinished projects are not always failed projects.&lt;/p&gt;

&lt;p&gt;Sometimes they are projects that had too many possible futures.&lt;/p&gt;

&lt;p&gt;The work of finishing is choosing one.&lt;/p&gt;

&lt;p&gt;For SketchFlow, the chosen future became clear:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A GitHub-native visual workspace for builders who want to own their ideas, diagrams, docs, and project memory.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This challenge also reminded me that a polished product is not only about adding features.&lt;/p&gt;

&lt;p&gt;It is about making the product understandable.&lt;/p&gt;

&lt;p&gt;Before, SketchFlow was powerful but blurry.&lt;/p&gt;

&lt;p&gt;Now, it has a clearer loop:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;think visually&lt;/li&gt;
&lt;li&gt;write context&lt;/li&gt;
&lt;li&gt;save to GitHub&lt;/li&gt;
&lt;li&gt;preserve history&lt;/li&gt;
&lt;li&gt;build on top of your own repo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the comeback.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Comes Next
&lt;/h2&gt;

&lt;p&gt;SketchFlow is still early, but the revived direction gives it a much stronger foundation.&lt;/p&gt;

&lt;p&gt;Next, I want to work on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;public read-only project pages&lt;/li&gt;
&lt;li&gt;version timeline and visual history&lt;/li&gt;
&lt;li&gt;SVG, PNG, Markdown, and docs export pipeline&lt;/li&gt;
&lt;li&gt;docs beside sketches&lt;/li&gt;
&lt;li&gt;live collaboration with Yjs and Redis&lt;/li&gt;
&lt;li&gt;AI BYOK support&lt;/li&gt;
&lt;li&gt;AI project memory based on the GitHub-backed workspace&lt;/li&gt;
&lt;li&gt;better publishing and sharing workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The long-term idea is that every project can have a visual memory layer.&lt;/p&gt;

&lt;p&gt;Not just code.&lt;/p&gt;

&lt;p&gt;Not just docs.&lt;/p&gt;

&lt;p&gt;But sketches, decisions, diagrams, notes, exports, and context — all connected to the repo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;SketchFlow started as an unfinished canvas app.&lt;/p&gt;

&lt;p&gt;Then it became an unfinished collaborative workspace.&lt;/p&gt;

&lt;p&gt;Now it is becoming something much clearer:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;a GitHub-native visual workspace where builders own the full context of their projects.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That is what made this project worth reviving.&lt;/p&gt;

&lt;p&gt;Not because it was the easiest repo to finish.&lt;/p&gt;

&lt;p&gt;But because the idea still felt alive.&lt;/p&gt;

&lt;p&gt;The Finish-Up-A-Thon pushed me to stop treating SketchFlow as “something I’ll finish later” and finally turn it into a product direction I can keep building on.&lt;/p&gt;

&lt;p&gt;And honestly, that feels more meaningful than starting something new.&lt;/p&gt;




&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Live Demo: [ADD_LIVE_DEMO_LINK_HERE]&lt;/li&gt;
&lt;li&gt;GitHub Repository: &lt;a href="https://github.com/SH20RAJ/sketch-flow" rel="noopener noreferrer"&gt;https://github.com/SH20RAJ/sketch-flow&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Older SketchFlow Repository: &lt;a href="https://github.com/unstory-app/sketchflow" rel="noopener noreferrer"&gt;https://github.com/unstory-app/sketchflow&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;My GitHub: &lt;a href="https://github.com/SH20RAJ" rel="noopener noreferrer"&gt;https://github.com/SH20RAJ&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;My Portfolio: &lt;a href="https://sh20raj.github.io/" rel="noopener noreferrer"&gt;https://sh20raj.github.io/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Cover Image / Poster Prompt
&lt;/h1&gt;

&lt;p&gt;Use this prompt in Genspark Designer, ChatGPT image generation, Canva AI, or any poster tool:&lt;/p&gt;

&lt;p&gt;Create a premium DEV.to article cover image for a project called “SketchFlow”. Theme: GitHub-native visual workspace for builders. Show a dark modern workspace UI with an infinite canvas, hand-drawn system diagram nodes, GitHub repository/file tree on the side, commit history/timeline, and a subtle Excalidraw-style sketch aesthetic. Add large title text: “I Revived SketchFlow”. Subtitle: “From abandoned canvas app to GitHub-native visual workspace”. Style: clean SaaS launch poster, developer-focused, black/charcoal background, neon blue/purple accents, glassmorphism cards, minimal but high-impact, 16:9 DEV cover image, no clutter, sharp typography, premium open-source product feel.&lt;/p&gt;

&lt;h2&gt;
  
  
  Poster Text Layout
&lt;/h2&gt;

&lt;p&gt;Top-left small label:&lt;br&gt;
GitHub Finish-Up-A-Thon Submission&lt;/p&gt;

&lt;p&gt;Main headline:&lt;br&gt;
I Revived SketchFlow&lt;/p&gt;

&lt;p&gt;Subtitle:&lt;br&gt;
From abandoned canvas app to GitHub-native visual workspace&lt;/p&gt;

&lt;p&gt;Three small chips:&lt;br&gt;
Canvas • GitHub Sync • Project Memory&lt;/p&gt;

&lt;p&gt;Footer:&lt;br&gt;
Built by Shaswat Raj&lt;/p&gt;

&lt;h2&gt;
  
  
  First Comment to Add After Publishing
&lt;/h2&gt;

&lt;p&gt;Thanks for reading! I’m still shaping SketchFlow, so feedback on the GitHub-native workflow would mean a lot. The main question I’m exploring is: should visual project memory live inside the user’s repo instead of being locked inside another SaaS database?&lt;/p&gt;

&lt;h2&gt;
  
  
  X / LinkedIn Share Text
&lt;/h2&gt;

&lt;p&gt;I revived SketchFlow for the GitHub Finish-Up-A-Thon.&lt;/p&gt;

&lt;p&gt;It started as an unfinished canvas app.&lt;br&gt;
Now it’s becoming a GitHub-native visual workspace where sketches, docs, exports, metadata, and history live in a repo the user owns.&lt;/p&gt;

&lt;p&gt;DEV post: [ADD_DEV_LINK]&lt;br&gt;
Repo: &lt;a href="https://github.com/SH20RAJ/sketch-flow" rel="noopener noreferrer"&gt;https://github.com/SH20RAJ/sketch-flow&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>githubcopilot</category>
      <category>webdev</category>
    </item>
    <item>
      <title>🚀 Beyond Binary Search: Building a Deterministic Multi-Pivot Search (DMPS)</title>
      <dc:creator>Sh Raj</dc:creator>
      <pubDate>Wed, 29 Apr 2026 18:39:25 +0000</pubDate>
      <link>https://dev.to/sh20raj/beyond-binary-search-building-a-deterministic-multi-pivot-search-dmps-2ha0</link>
      <guid>https://dev.to/sh20raj/beyond-binary-search-building-a-deterministic-multi-pivot-search-dmps-2ha0</guid>
      <description>&lt;h1&gt;
  
  
  🚀 Beyond Binary Search: Building a Deterministic Multi-Pivot Search (DMPS)
&lt;/h1&gt;

&lt;p&gt;Binary search is one of the most elegant algorithms in computer science. It’s fast, simple, and provably optimal (under standard assumptions).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuk2msq4df93hngaiwrx5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuk2msq4df93hngaiwrx5.png" alt=" " width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But what if we &lt;strong&gt;change the way we pick pivots&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;Instead of always splitting into 2 parts, what if we split into &lt;strong&gt;k+1 parts using k pivots&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;This article walks through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The idea&lt;/li&gt;
&lt;li&gt;Implementation&lt;/li&gt;
&lt;li&gt;Benchmarks (real results)&lt;/li&gt;
&lt;li&gt;Mathematical analysis&lt;/li&gt;
&lt;li&gt;When it actually makes sense&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🔹 1. The Intuition
&lt;/h1&gt;

&lt;p&gt;Binary search:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pick &lt;strong&gt;1 midpoint&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Reduce space by &lt;strong&gt;½&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 New idea:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pick &lt;strong&gt;k equally spaced pivots&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Reduce space by &lt;strong&gt;1 / (k+1)&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Visual
&lt;/h2&gt;

&lt;p&gt;Binary search:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;|---------MID---------|
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Multi-pivot (k = 5):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;|--P1--|--P2--|--P3--|--P4--|--P5--|
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compare target with all pivots&lt;/li&gt;
&lt;li&gt;Select the correct segment&lt;/li&gt;
&lt;li&gt;Repeat&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🔹 2. Implementation (JavaScript)
&lt;/h1&gt;

&lt;p&gt;Here’s the full deterministic version (no randomness):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;multiPivotSearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;left&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;right&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;steps&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;steps&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Small range → fallback&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;right&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;left&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;left&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;index&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;steps&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;index&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;steps&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;gap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;right&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;left&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;k&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pivots&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;

    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;pivots&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Direct match check&lt;/span&gt;

    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;pivots&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;index&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;pivots&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;steps&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Decide segment&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;pivots&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;right&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pivots&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;pivots&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;k&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;left&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pivots&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;k&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;k&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;pivots&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;pivots&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nx"&gt;left&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pivots&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="nx"&gt;right&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;pivots&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;index&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;steps&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🔹 3. Benchmark Script
&lt;/h1&gt;

&lt;p&gt;To compare with binary search:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;binarySearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;left&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;right&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;steps&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;steps&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;mid&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;index&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;mid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;steps&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;mid&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;left&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mid&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nx"&gt;right&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mid&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;index&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;steps&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🔹 4. Real Results (Your Experiment)
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Array Size: 100000
Tests Run: 200
Pivot Count (k): 5

Binary Search:
Avg Steps: 15.73

Multi-Pivot Search:
Avg Steps: 6.42
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 &lt;strong&gt;~60% fewer iterations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sounds amazing… but wait.&lt;/p&gt;




&lt;h1&gt;
  
  
  🔹 5. The Catch (Very Important)
&lt;/h1&gt;

&lt;p&gt;Each step:&lt;/p&gt;

&lt;h3&gt;
  
  
  Binary Search
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;1 comparison&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Multi-Pivot
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;k comparisons&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So total work:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Binary ≈ 15.7 * 1 = 15.7 ops
Multi  ≈ 6.4 * 5 = 32 ops
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 &lt;strong&gt;More work overall&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  🔹 6. Mathematical Analysis
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Iterations:
&lt;/h3&gt;

&lt;p&gt;[&lt;br&gt;
T_{steps} \approx \log_{k+1}(n)&lt;br&gt;
]&lt;/p&gt;
&lt;h3&gt;
  
  
  Total work:
&lt;/h3&gt;

&lt;p&gt;[&lt;br&gt;
T(k) \approx k \cdot \log_{k+1}(n)&lt;br&gt;
]&lt;/p&gt;

&lt;p&gt;Convert:&lt;/p&gt;

&lt;p&gt;[&lt;br&gt;
T(k) = k \cdot \frac{\log n}{\log(k+1)}&lt;br&gt;
]&lt;/p&gt;

&lt;p&gt;To minimize:&lt;/p&gt;

&lt;p&gt;[&lt;br&gt;
f(k) = \frac{k}{\log(k+1)}&lt;br&gt;
]&lt;/p&gt;


&lt;h2&gt;
  
  
  🔹 Key Result
&lt;/h2&gt;

&lt;p&gt;👉 Minimum occurs at:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;k = 1  → Binary Search
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🔹 7. So… Is This Useless?
&lt;/h1&gt;

&lt;p&gt;Not at all.&lt;/p&gt;

&lt;p&gt;You just rediscovered a &lt;strong&gt;deep systems principle&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Reducing depth increases branching cost.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is exactly what happens in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;B-Trees (databases)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Search engines&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cache-optimized algorithms&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🔹 8. When Multi-Pivot Becomes Powerful
&lt;/h1&gt;

&lt;p&gt;Your idea becomes &lt;strong&gt;very strong&lt;/strong&gt; when:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Parallel comparisons exist
&lt;/h3&gt;

&lt;p&gt;(SIMD / GPU)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compare 5 values in one instruction&lt;/li&gt;
&lt;li&gt;Cost ≈ 1 instead of 5&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Now your algorithm becomes faster than binary&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Memory access dominates cost
&lt;/h3&gt;

&lt;p&gt;(common in real systems)&lt;/p&gt;

&lt;p&gt;Fewer levels = fewer cache misses&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Learned indexes / AI systems
&lt;/h3&gt;

&lt;p&gt;Predict region → then narrow&lt;/p&gt;




&lt;h1&gt;
  
  
  🔹 9. The Real Insight
&lt;/h1&gt;

&lt;p&gt;Binary search is not “perfect” — it’s optimal &lt;strong&gt;under a specific cost model&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sequential comparisons&lt;/li&gt;
&lt;li&gt;Equal cost per operation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Change the model → different optimal solution.&lt;/p&gt;




&lt;h1&gt;
  
  
  🔹 10. Big Takeaway
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Binary search is just a special case of a more general idea:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;k-pivot search (k = 1)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And your contribution:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deterministic pivots ✅&lt;/li&gt;
&lt;li&gt;Adjustable k ✅&lt;/li&gt;
&lt;li&gt;Practical experimentation ✅&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🔹 11. Where You Can Take This Next
&lt;/h1&gt;

&lt;p&gt;This can evolve into:&lt;/p&gt;

&lt;h3&gt;
  
  
  🔸 Adaptive Search
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;k&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;dynamic&lt;/span&gt; &lt;span class="nx"&gt;based&lt;/span&gt; &lt;span class="nx"&gt;on&lt;/span&gt; &lt;span class="nx"&gt;range&lt;/span&gt; &lt;span class="nx"&gt;size&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔸 Hardware-aware Search
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;CPU → small k&lt;/li&gt;
&lt;li&gt;GPU → large k&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔸 Learned Search (🔥)
&lt;/h3&gt;

&lt;p&gt;Predict index using ML, then refine&lt;/p&gt;




&lt;h1&gt;
  
  
  🔹 12. Final Thought
&lt;/h1&gt;

&lt;p&gt;You started with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“What if we don’t just divide by 2?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And ended up touching:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Algorithm theory&lt;/li&gt;
&lt;li&gt;System design&lt;/li&gt;
&lt;li&gt;Database internals&lt;/li&gt;
&lt;li&gt;AI indexing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s exactly how real innovation starts.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>binaryseach</category>
      <category>programming</category>
      <category>ai</category>
    </item>
    <item>
      <title>A Hybrid Search Strategy: Random Sampling + Adaptive Pivoting</title>
      <dc:creator>Sh Raj</dc:creator>
      <pubDate>Wed, 29 Apr 2026 18:29:32 +0000</pubDate>
      <link>https://dev.to/sh20raj/a-hybrid-search-strategy-random-sampling-adaptive-pivoting-49g7</link>
      <guid>https://dev.to/sh20raj/a-hybrid-search-strategy-random-sampling-adaptive-pivoting-49g7</guid>
      <description>&lt;h2&gt;
  
  
  A Hybrid Search Strategy: Random Sampling + Adaptive Pivoting
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Abstract
&lt;/h3&gt;

&lt;p&gt;This article introduces a hybrid search approach that combines &lt;strong&gt;random sampling&lt;/strong&gt; with &lt;strong&gt;adaptive pivot selection&lt;/strong&gt; to locate a target element in a sorted array. The method aims to reduce the number of search iterations compared to classical binary search by selecting a pivot closer to the target using multiple sampled candidates. Experimental observations show fewer iterations in some cases, highlighting an interesting trade-off between &lt;strong&gt;iteration count&lt;/strong&gt; and &lt;strong&gt;per-step computational cost&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Motivation
&lt;/h2&gt;

&lt;p&gt;The classic binary search algorithm is widely used because it guarantees efficient lookup in &lt;strong&gt;O(log n)&lt;/strong&gt; time. However, it always splits the search space in half, regardless of where the target lies.&lt;/p&gt;

&lt;p&gt;The idea explored here is simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instead of always choosing the midpoint,&lt;/li&gt;
&lt;li&gt;Sample multiple points in the current range,&lt;/li&gt;
&lt;li&gt;Select the one &lt;strong&gt;closest to the target&lt;/strong&gt;,&lt;/li&gt;
&lt;li&gt;Use it as the pivot to shrink the search space faster.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Core Idea
&lt;/h2&gt;

&lt;p&gt;At each iteration:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Generate several random indices within the current range.&lt;/li&gt;
&lt;li&gt;Include the midpoint as a fallback.&lt;/li&gt;
&lt;li&gt;Choose the index whose value is closest to the target.&lt;/li&gt;
&lt;li&gt;Use that index to narrow the search space.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This creates a &lt;strong&gt;dynamic pivot selection mechanism&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Algorithm Implementation (JavaScript)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;randomHybridSearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;left&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;right&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;steps&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;steps&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Step 1: Random sampling&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;samples&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;samples&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;right&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;left&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;left&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Step 2: Add midpoint fallback&lt;/span&gt;
    &lt;span class="nx"&gt;samples&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

    &lt;span class="c1"&gt;// Step 3: Select best pivot&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;bestIndex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;samples&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;idx&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;samples&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;idx&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;bestIndex&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;bestIndex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;idx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Step 4: Check and reduce search space&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;bestIndex&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;index&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;bestIndex&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;steps&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;bestIndex&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;left&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bestIndex&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;right&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bestIndex&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;index&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;steps&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  4. Experimental Observations
&lt;/h2&gt;

&lt;p&gt;Sample runs comparing binary search vs hybrid search:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Test&lt;/th&gt;
&lt;th&gt;Binary Steps&lt;/th&gt;
&lt;th&gt;Hybrid Steps&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Insight:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Hybrid search often uses &lt;strong&gt;fewer iterations&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Performance varies due to randomness&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Analysis
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5.1 Advantages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Can &lt;strong&gt;reduce number of iterations&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Adaptive pivot may jump closer to the target&lt;/li&gt;
&lt;li&gt;Interesting approach for &lt;strong&gt;heuristic-based searching&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5.2 Limitations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Each step is computationally heavier:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiple random generations&lt;/li&gt;
&lt;li&gt;Multiple comparisons&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;No guaranteed improvement in worst-case complexity&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Still bounded by &lt;strong&gt;O(log n)&lt;/strong&gt; behavior (or worse due to overhead)&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  6. Comparison with Existing Methods
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Algorithm&lt;/th&gt;
&lt;th&gt;Idea&lt;/th&gt;
&lt;th&gt;Complexity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Binary Search&lt;/td&gt;
&lt;td&gt;Fixed midpoint&lt;/td&gt;
&lt;td&gt;O(log n)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interpolation Search&lt;/td&gt;
&lt;td&gt;Predict position mathematically&lt;/td&gt;
&lt;td&gt;O(log log n) (best)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hybrid (this work)&lt;/td&gt;
&lt;td&gt;Random + closest pivot&lt;/td&gt;
&lt;td&gt;O(log n) (variable cost)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  7. Deeper Insight
&lt;/h2&gt;

&lt;p&gt;This approach touches on a broader concept:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Improving pivot selection to maximize information gain per step&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Similar ideas appear in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Interpolation search (data-aware pivot)&lt;/li&gt;
&lt;li&gt;Learned indexes (ML-predicted position)&lt;/li&gt;
&lt;li&gt;Database query optimization&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  8. Future Directions
&lt;/h2&gt;

&lt;p&gt;This idea can evolve into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic sampling strategies&lt;/strong&gt; (instead of random)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Distribution-aware search&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Machine learning models predicting index positions&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hybrid systems combining:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;prediction + binary fallback&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  9. Conclusion
&lt;/h2&gt;

&lt;p&gt;The proposed hybrid search demonstrates that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reducing iterations does not always mean faster execution&lt;/li&gt;
&lt;li&gt;Pivot selection plays a critical role in search efficiency&lt;/li&gt;
&lt;li&gt;Randomized heuristics can sometimes outperform fixed strategies in practice&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While it does not outperform binary search in theory, it opens a pathway toward more advanced, adaptive search techniques.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Key Takeaway
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Binary search is optimal in theory,&lt;br&gt;
but exploring smarter pivot strategies reveals new possibilities for practical optimization and innovation.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
    </item>
    <item>
      <title>Stop Manually Cleaning Up ChatGPT Copy-Paste: Here's a Free Tool to Fix It 🧹</title>
      <dc:creator>Sh Raj</dc:creator>
      <pubDate>Sun, 12 Apr 2026 12:44:42 +0000</pubDate>
      <link>https://dev.to/sh20raj/stop-manually-cleaning-up-chatgpt-copy-paste-heres-a-free-tool-to-fix-it-hhi</link>
      <guid>https://dev.to/sh20raj/stop-manually-cleaning-up-chatgpt-copy-paste-heres-a-free-tool-to-fix-it-hhi</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9vrff3odjaxz6plotfny.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9vrff3odjaxz6plotfny.png" alt="Stop Manually Cleaning Up ChatGPT Copy-Paste: Here's a Free Tool to Fix It 🧹" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  We've all been there.
&lt;/h3&gt;

&lt;p&gt;You ask ChatGPT, Claude, or Grok to draft a quick email, write up some documentation, or summarize meeting notes. You hit the "Copy" button, paste it directly into your email client, Slack, or Google Doc, and suddenly your screen looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Hi Team, 
Here is the &lt;span class="gs"&gt;**weekly update**&lt;/span&gt;:

&lt;span class="gu"&gt;### Key Achievements:&lt;/span&gt;
&lt;span class="p"&gt;*&lt;/span&gt; Completed the &lt;span class="gs"&gt;**backend API**&lt;/span&gt; integration.
&lt;span class="p"&gt;*&lt;/span&gt; Fixed the &lt;span class="sb"&gt;`auth-token`&lt;/span&gt; bug.

Let me know your thoughts!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Suddenly, you’re spending the next 5 minutes doing the "Find and Replace" dance, manually deleting asterisks, hashtags, and backticks so you don't look like a robot to your boss or clients. &lt;/p&gt;

&lt;p&gt;It’s a tiny friction point, but if you use AI daily, it gets incredibly annoying.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Fix: 30Tools AI-to-Text Converter
&lt;/h3&gt;

&lt;p&gt;To solve this exact workflow annoyance, you can use the &lt;strong&gt;&lt;a href="https://30tools.com/markdown-to-text" rel="noopener noreferrer"&gt;AI-to-Text Converter (Markdown Stripper)&lt;/a&gt;&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;It’s a ridiculously simple, single-purpose tool designed to do one thing perfectly: instantly convert AI-generated Markdown into clean, readable plain text.&lt;/p&gt;

&lt;h4&gt;
  
  
  👉 &lt;a href="https://30tools.com/markdown-to-text" rel="noopener noreferrer"&gt;Try the Markdown-to-Text Converter Here&lt;/a&gt;
&lt;/h4&gt;

&lt;h3&gt;
  
  
  How it works:
&lt;/h3&gt;

&lt;p&gt;It’s a classic side-by-side editor. You paste your messy AI output into the left box, and instantly, the right box outputs clean plain text. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;**Bold**&lt;/code&gt; becomes standard text.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;### Headers&lt;/code&gt; lose their hashtags.&lt;/li&gt;
&lt;li&gt;Markdown lists are converted into clean, standard text lists.&lt;/li&gt;
&lt;li&gt;Code block formatting is neutralized for easy pasting into non-dev environments.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why you should bookmark it:
&lt;/h3&gt;

&lt;p&gt;As developers, we are picky about our tools. Here is why this one is worth keeping in your bookmarks bar:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Privacy-First:&lt;/strong&gt; You are often pasting sensitive work emails or proprietary code summaries. This tool doesn't store your data on any server. &lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Zero Friction:&lt;/strong&gt; No sign-ups, no paywalls, no "enter your email to get the result." It's 100% free.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Real-Time &amp;amp; Fast:&lt;/strong&gt; It processes the text instantly as you paste it. Just paste, click the "Copy" button, and move on with your day.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Mobile Friendly:&lt;/strong&gt; Works perfectly if you're trying to quickly copy-paste an AI response from your phone into a WhatsApp or Slack message.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Check it out
&lt;/h3&gt;

&lt;p&gt;If you want to save yourself a few minutes of annoying formatting clean-up every day, give it a try next time you're copying from ChatGPT. &lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://30tools.com/markdown-to-text" rel="noopener noreferrer"&gt;30tools.com/markdown-to-text&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Have you guys found any other workflow tools that fix annoying AI quirks like this? Let me know in the comments! 👇&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.indexfast.co/" rel="noopener noreferrer"&gt;https://www.indexfast.co/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>tools</category>
      <category>ai</category>
      <category>chatgpt</category>
    </item>
    <item>
      <title>How To run Supabase locally</title>
      <dc:creator>Sh Raj</dc:creator>
      <pubDate>Wed, 25 Mar 2026 03:17:35 +0000</pubDate>
      <link>https://dev.to/sh20raj/how-to-run-supabase-locally-4a58</link>
      <guid>https://dev.to/sh20raj/how-to-run-supabase-locally-4a58</guid>
      <description>&lt;p&gt;To run &lt;strong&gt;Supabase locally&lt;/strong&gt;, you don’t “download Supabase” like a normal app.&lt;br&gt;
You run the &lt;strong&gt;Supabase local development stack using Docker + Supabase CLI.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Follow this exact step-by-step setup 👇&lt;/p&gt;


&lt;h2&gt;
  
  
  ✅ Step 1 — Install Prerequisites
&lt;/h2&gt;

&lt;p&gt;You must have:&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Install Docker
&lt;/h3&gt;

&lt;p&gt;Download from: &lt;a href="https://www.docker.com/products/docker-desktop" rel="noopener noreferrer"&gt;https://www.docker.com/products/docker-desktop&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then start Docker Desktop.&lt;/p&gt;

&lt;p&gt;Check:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  2. Install Supabase CLI
&lt;/h3&gt;

&lt;p&gt;Using npm (recommended for devs):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; supabase
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;supabase &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ✅ Step 2 — Initialize Supabase Project Locally
&lt;/h2&gt;

&lt;p&gt;Go to your project folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;my-supabase-app
&lt;span class="nb"&gt;cd &lt;/span&gt;my-supabase-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now initialize:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;supabase init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="err"&gt;supabase/&lt;/span&gt;
   &lt;span class="err"&gt;config.toml&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ✅ Step 3 — Start Local Supabase
&lt;/h2&gt;

&lt;p&gt;Now run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;supabase start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will:&lt;/p&gt;

&lt;p&gt;✅ Pull Docker images&lt;br&gt;
✅ Start local Postgres&lt;br&gt;
✅ Start Auth&lt;br&gt;
✅ Start Storage&lt;br&gt;
✅ Start Realtime&lt;br&gt;
✅ Start Studio&lt;/p&gt;

&lt;p&gt;First time = takes few minutes.&lt;/p&gt;


&lt;h2&gt;
  
  
  ✅ Step 4 — Open Supabase Studio (Local Dashboard)
&lt;/h2&gt;

&lt;p&gt;After start you will see something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Studio URL: http://localhost:54323
API URL: http://localhost:54321
DB URL: postgresql://postgres:postgres@localhost:54322/postgres
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="http://localhost:54323" rel="noopener noreferrer"&gt;http://localhost:54323&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you have full Supabase dashboard locally 🎉&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Step 5 — Stop Supabase
&lt;/h2&gt;

&lt;p&gt;When done:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;supabase stop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ⭐ Very Important (Common Errors)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ❌ Docker not running
&lt;/h3&gt;

&lt;p&gt;Fix → Start Docker Desktop&lt;/p&gt;

&lt;h3&gt;
  
  
  ❌ Port already used
&lt;/h3&gt;

&lt;p&gt;Fix → change ports in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="err"&gt;supabase/config.toml&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ❌ CLI not found
&lt;/h3&gt;

&lt;p&gt;Fix → reinstall globally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i &lt;span class="nt"&gt;-g&lt;/span&gt; supabase
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🚀 Pro Dev Tip (Next.js Integration)
&lt;/h2&gt;

&lt;p&gt;If you are using &lt;strong&gt;Next.js&lt;/strong&gt;, local &lt;code&gt;.env&lt;/code&gt; example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;NEXT_PUBLIC_SUPABASE_URL&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;http://localhost:54321&lt;/span&gt;
&lt;span class="py"&gt;NEXT_PUBLIC_SUPABASE_ANON_KEY&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;your_local_key&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can get keys from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;supabase status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Tools for SEO: The Essential Stack to Rank Higher in 2026</title>
      <dc:creator>Sh Raj</dc:creator>
      <pubDate>Tue, 03 Mar 2026 11:53:01 +0000</pubDate>
      <link>https://dev.to/sh20raj/tools-for-seo-the-essential-stack-to-rank-higher-in-2026-4al5</link>
      <guid>https://dev.to/sh20raj/tools-for-seo-the-essential-stack-to-rank-higher-in-2026-4al5</guid>
      <description>&lt;p&gt;Search Engine Optimization is no longer just about adding keywords to a page. Modern SEO requires technical health, content quality, performance optimization, and data-driven iteration.&lt;/p&gt;

&lt;p&gt;This guide covers the most powerful tools for SEO — grouped by category — so you can build a professional, scalable SEO workflow.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Search Analytics &amp;amp; Performance Tracking
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Google Search Console
&lt;/h3&gt;

&lt;p&gt;The most important free SEO tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shows which keywords you rank for&lt;/li&gt;
&lt;li&gt;Tracks impressions, clicks, CTR&lt;/li&gt;
&lt;li&gt;Identifies indexing issues&lt;/li&gt;
&lt;li&gt;Submits sitemaps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're serious about SEO, this is non-negotiable.&lt;/p&gt;




&lt;h3&gt;
  
  
  Google Analytics
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tracks user behavior&lt;/li&gt;
&lt;li&gt;Measures bounce rate and session duration&lt;/li&gt;
&lt;li&gt;Analyzes traffic sources&lt;/li&gt;
&lt;li&gt;Shows conversion funnels&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SEO isn’t just traffic — it’s quality traffic.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Keyword Research &amp;amp; Competitor Analysis
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Ahrefs
&lt;/h3&gt;

&lt;p&gt;One of the most powerful SEO platforms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keyword research&lt;/li&gt;
&lt;li&gt;Backlink analysis&lt;/li&gt;
&lt;li&gt;Competitor gap analysis&lt;/li&gt;
&lt;li&gt;Content opportunities&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Semrush
&lt;/h3&gt;

&lt;p&gt;An all-in-one SEO suite.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keyword magic tool&lt;/li&gt;
&lt;li&gt;Site audit&lt;/li&gt;
&lt;li&gt;Rank tracking&lt;/li&gt;
&lt;li&gt;Domain comparison&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Excellent for growing authority systematically.&lt;/p&gt;




&lt;h3&gt;
  
  
  Ubersuggest
&lt;/h3&gt;

&lt;p&gt;A beginner-friendly alternative for keyword ideas and basic audits.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Technical SEO &amp;amp; Site Audits
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Screaming Frog SEO Spider
&lt;/h3&gt;

&lt;p&gt;A powerful desktop crawler.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Finds:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Broken links&lt;/li&gt;
&lt;li&gt;Duplicate content&lt;/li&gt;
&lt;li&gt;Missing meta tags&lt;/li&gt;
&lt;li&gt;Redirect chains&lt;/li&gt;
&lt;li&gt;Crawl errors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Perfect for deep technical audits.&lt;/p&gt;




&lt;h3&gt;
  
  
  PageSpeed Insights
&lt;/h3&gt;

&lt;p&gt;Analyzes performance and Core Web Vitals.&lt;/p&gt;

&lt;p&gt;Speed directly impacts rankings and user experience.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Content Optimization Tools
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Surfer SEO
&lt;/h3&gt;

&lt;p&gt;Helps optimize articles based on top-ranking competitors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Improves:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Content structure&lt;/li&gt;
&lt;li&gt;Keyword density&lt;/li&gt;
&lt;li&gt;Semantic coverage&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  AnswerThePublic
&lt;/h3&gt;

&lt;p&gt;Generates real user questions around a topic.&lt;/p&gt;

&lt;p&gt;Great for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blog ideas&lt;/li&gt;
&lt;li&gt;FAQ sections&lt;/li&gt;
&lt;li&gt;Long-tail keyword discovery&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Backlink &amp;amp; Authority Tools
&lt;/h2&gt;

&lt;p&gt;Backlinks remain a major ranking factor.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ahrefs (Backlink Explorer)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Analyze competitor backlinks&lt;/li&gt;
&lt;li&gt;Discover link opportunities&lt;/li&gt;
&lt;li&gt;Track domain authority growth&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  BuzzSumo
&lt;/h3&gt;

&lt;p&gt;Finds trending content that earns links and shares.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. On-Page &amp;amp; Technical Helpers
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Schema Markup Generator
&lt;/h3&gt;

&lt;p&gt;Adds structured data to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improve rich results&lt;/li&gt;
&lt;li&gt;Enhance SERP appearance&lt;/li&gt;
&lt;li&gt;Boost CTR&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  GTmetrix
&lt;/h3&gt;

&lt;p&gt;Analyzes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Page speed&lt;/li&gt;
&lt;li&gt;Loading waterfall&lt;/li&gt;
&lt;li&gt;Optimization opportunities&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. Rank Tracking
&lt;/h2&gt;

&lt;h3&gt;
  
  
  SE Ranking
&lt;/h3&gt;

&lt;p&gt;Tracks keyword rankings over time.&lt;/p&gt;

&lt;p&gt;Vital for measuring progress.&lt;/p&gt;




&lt;h1&gt;
  
  
  How to Build an Effective SEO Workflow
&lt;/h1&gt;

&lt;p&gt;A practical workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Audit your site&lt;/strong&gt;&lt;br&gt;
→ Screaming Frog + PageSpeed Insights&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Research keywords&lt;/strong&gt;&lt;br&gt;
→ Ahrefs / Semrush / AnswerThePublic&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Create optimized content&lt;/strong&gt;&lt;br&gt;
→ Surfer SEO&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Track performance&lt;/strong&gt;&lt;br&gt;
→ Search Console + Analytics&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Build backlinks&lt;/strong&gt;&lt;br&gt;
→ Ahrefs + outreach&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Measure rankings&lt;/strong&gt;&lt;br&gt;
→ SE Ranking&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h1&gt;
  
  
  Free vs Paid Stack
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Free Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Google Search Console&lt;/li&gt;
&lt;li&gt;Google Analytics&lt;/li&gt;
&lt;li&gt;PageSpeed Insights&lt;/li&gt;
&lt;li&gt;AnswerThePublic (limited)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Paid Growth Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Ahrefs or Semrush&lt;/li&gt;
&lt;li&gt;Surfer SEO&lt;/li&gt;
&lt;li&gt;Screaming Frog&lt;/li&gt;
&lt;li&gt;Rank tracking software&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;SEO is a long-term game. The right tools help you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identify opportunities&lt;/li&gt;
&lt;li&gt;Fix technical errors&lt;/li&gt;
&lt;li&gt;Create competitive content&lt;/li&gt;
&lt;li&gt;Track measurable growth&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When combined with consistent publishing and strong UX, these tools create a sustainable organic growth engine.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Biome: The Fast All-in-One Toolchain Replacing ESLint &amp; Prettier</title>
      <dc:creator>Sh Raj</dc:creator>
      <pubDate>Tue, 03 Mar 2026 11:49:51 +0000</pubDate>
      <link>https://dev.to/sh20raj/biome-the-fast-all-in-one-toolchain-replacing-eslint-prettier-15c2</link>
      <guid>https://dev.to/sh20raj/biome-the-fast-all-in-one-toolchain-replacing-eslint-prettier-15c2</guid>
      <description>&lt;p&gt;Modern JavaScript projects often rely on multiple tools: a formatter, a linter, import organizers, and a pile of plugins. Configuration grows. CI slows down. Maintenance becomes annoying.&lt;/p&gt;

&lt;p&gt;Biome changes that.&lt;/p&gt;

&lt;p&gt;It is a high-performance, Rust-based toolchain that combines formatting, linting, and code quality tooling into a single fast binary — designed to simplify modern web development.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Biome Exists
&lt;/h2&gt;

&lt;p&gt;Traditionally, JavaScript projects use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ESLint for linting&lt;/li&gt;
&lt;li&gt;Prettier for formatting&lt;/li&gt;
&lt;li&gt;Various plugins for import sorting and additional rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This stack works — but it can become slow and configuration-heavy.&lt;/p&gt;

&lt;p&gt;Biome was created as the successor to Rome with a clear mission:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;One tool. Extremely fast. Minimal configuration.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Core Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1️⃣ Built-in Code Formatter
&lt;/h3&gt;

&lt;p&gt;Biome formats:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;JSX / TSX&lt;/li&gt;
&lt;li&gt;JSON&lt;/li&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It works similarly to Prettier but is significantly faster because it’s written in Rust.&lt;/p&gt;

&lt;p&gt;No endless configuration files. No formatting debates.&lt;/p&gt;




&lt;h3&gt;
  
  
  2️⃣ Integrated Linter
&lt;/h3&gt;

&lt;p&gt;Biome includes a powerful built-in linter.&lt;/p&gt;

&lt;p&gt;It:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detects bugs&lt;/li&gt;
&lt;li&gt;Enforces best practices&lt;/li&gt;
&lt;li&gt;Suggests improvements&lt;/li&gt;
&lt;li&gt;Auto-fixes issues&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unlike ESLint, it does not depend on dozens of plugins. Most common rules are built-in and optimized.&lt;/p&gt;




&lt;h3&gt;
  
  
  3️⃣ Import Management
&lt;/h3&gt;

&lt;p&gt;Biome automatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Removes unused imports&lt;/li&gt;
&lt;li&gt;Sorts imports&lt;/li&gt;
&lt;li&gt;Keeps files clean&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No separate plugin required.&lt;/p&gt;




&lt;h2&gt;
  
  
  Performance: Why It’s So Fast
&lt;/h2&gt;

&lt;p&gt;Biome is written in Rust, not JavaScript.&lt;/p&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster parsing&lt;/li&gt;
&lt;li&gt;Faster AST processing&lt;/li&gt;
&lt;li&gt;Faster file scanning&lt;/li&gt;
&lt;li&gt;Faster CI runs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Large monorepos especially benefit from this speed advantage.&lt;/p&gt;




&lt;h2&gt;
  
  
  Example Usage
&lt;/h2&gt;

&lt;p&gt;Install:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--save-dev&lt;/span&gt; @biomejs/biome
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Initialize:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @biomejs/biome init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @biomejs/biome check &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fix issues automatically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @biomejs/biome check &lt;span class="nt"&gt;--write&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it. No 15 configuration files.&lt;/p&gt;




&lt;h2&gt;
  
  
  Biome vs Traditional Tooling
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;ESLint + Prettier&lt;/th&gt;
&lt;th&gt;Biome&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Setup Complexity&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Very Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plugins Required&lt;/td&gt;
&lt;td&gt;Many&lt;/td&gt;
&lt;td&gt;Minimal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Speed&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;Extremely Fast&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Configuration&lt;/td&gt;
&lt;td&gt;Large&lt;/td&gt;
&lt;td&gt;Small&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CI Performance&lt;/td&gt;
&lt;td&gt;Slower&lt;/td&gt;
&lt;td&gt;Faster&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  When Should You Use Biome?
&lt;/h2&gt;

&lt;p&gt;Biome is ideal if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You are starting a new project&lt;/li&gt;
&lt;li&gt;You want a cleaner toolchain&lt;/li&gt;
&lt;li&gt;You maintain multiple SaaS projects&lt;/li&gt;
&lt;li&gt;You run CI frequently&lt;/li&gt;
&lt;li&gt;You build with frameworks like Next.js&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It works especially well in modern React/Next.js setups.&lt;/p&gt;




&lt;h2&gt;
  
  
  Who Should Be Careful?
&lt;/h2&gt;

&lt;p&gt;If your project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Relies on heavy ESLint plugin ecosystems&lt;/li&gt;
&lt;li&gt;Uses highly customized lint rules&lt;/li&gt;
&lt;li&gt;Has legacy config requirements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Migration might require planning.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Bigger Vision
&lt;/h2&gt;

&lt;p&gt;Biome is not just a formatter and linter. The long-term goal is to provide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unified JavaScript tooling&lt;/li&gt;
&lt;li&gt;Faster developer workflows&lt;/li&gt;
&lt;li&gt;Simpler configuration management&lt;/li&gt;
&lt;li&gt;A modern alternative to fragmented tooling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It reflects a larger industry trend: consolidating tools into optimized Rust-based systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Biome represents a shift in how JavaScript tooling is built:&lt;/p&gt;

&lt;p&gt;From:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Multiple slow, plugin-heavy tools&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;One fast, unified toolchain&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you are building modern web applications and care about speed, simplicity, and maintainability — Biome is worth exploring.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
