<?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>Forem: Vijay Pagare</title>
    <description>The latest articles on Forem by Vijay Pagare (@pagarevijayy).</description>
    <link>https://forem.com/pagarevijayy</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%2F573635%2F83bb4e75-2aae-42ef-9fd9-133a8bfe0a4e.jpg</url>
      <title>Forem: Vijay Pagare</title>
      <link>https://forem.com/pagarevijayy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/pagarevijayy"/>
    <language>en</language>
    <item>
      <title>For vs. While: Choosing Your Weapon in DSA</title>
      <dc:creator>Vijay Pagare</dc:creator>
      <pubDate>Tue, 14 Apr 2026 18:32:20 +0000</pubDate>
      <link>https://forem.com/pagarevijayy/for-vs-while-choosing-your-weapon-in-dsa-909</link>
      <guid>https://forem.com/pagarevijayy/for-vs-while-choosing-your-weapon-in-dsa-909</guid>
      <description>&lt;p&gt;In Data Structures and Algorithms (DSA), the choice between a &lt;code&gt;for&lt;/code&gt; loop and a &lt;code&gt;while&lt;/code&gt; loop isn't just about syntax—it’s about &lt;strong&gt;intent&lt;/strong&gt;. While both can often achieve the same result, choosing the wrong one can lead to "logic friction," forcing you to use messy boolean flags and complex &lt;code&gt;if-else&lt;/code&gt; trees.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Fundamental Distinction
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;for&lt;/code&gt; loops are for Iterating:&lt;/strong&gt; You use them when you want to visit every element in a collection uniformly. The index moves automatically, and the logic applied to the first element is usually the same logic applied to the last.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;while&lt;/code&gt; loops are for Consuming:&lt;/strong&gt; You use them when the data needs to be processed in &lt;strong&gt;phases&lt;/strong&gt; or &lt;strong&gt;variable chunks&lt;/strong&gt;. You control exactly when the pointer moves, allowing you to "stay" on an index until a certain condition is satisfied.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  When to use &lt;code&gt;while&lt;/code&gt; (The "Consumption" Model)
&lt;/h3&gt;

&lt;p&gt;In many DSA problems, specifically &lt;strong&gt;Intervals&lt;/strong&gt;, &lt;strong&gt;Two-Pointer&lt;/strong&gt;, and &lt;strong&gt;Sliding Window&lt;/strong&gt;, the &lt;code&gt;while&lt;/code&gt; loop is superior because it allows for a "Stage-Based" architecture.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Multi-Phase Problems
&lt;/h4&gt;

&lt;p&gt;If an algorithm has a "Before, During, and After" structure, three sequential &lt;code&gt;while&lt;/code&gt; loops are cleaner than one &lt;code&gt;for&lt;/code&gt; loop with multiple &lt;code&gt;if&lt;/code&gt; statements.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Example (Insert Interval):&lt;/strong&gt;

&lt;ol&gt;
&lt;li&gt; &lt;code&gt;while&lt;/code&gt; intervals end before the new one starts $\rightarrow$ Push to output.&lt;/li&gt;
&lt;li&gt; &lt;code&gt;while&lt;/code&gt; intervals overlap $\rightarrow$ Merge into a single unit.&lt;/li&gt;
&lt;li&gt; &lt;code&gt;while&lt;/code&gt; intervals remain $\rightarrow$ Push the rest.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2. Variable Step Sizes
&lt;/h4&gt;

&lt;p&gt;Use &lt;code&gt;while&lt;/code&gt; when you don't know how many elements you will "consume" in a single iteration. If you need to skip 3 elements in one scenario and 0 in another, manual control over the index $i$ prevents "off-by-one" errors.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. State Management
&lt;/h4&gt;

&lt;p&gt;If you find yourself creating boolean flags (e.g., &lt;code&gt;let isMerged = false&lt;/code&gt;) just to manage logic inside a &lt;code&gt;for&lt;/code&gt; loop, it’s a signal to switch to &lt;code&gt;while&lt;/code&gt;. The &lt;code&gt;while&lt;/code&gt; condition itself acts as the state manager.&lt;/p&gt;




&lt;h3&gt;
  
  
  When to use &lt;code&gt;for&lt;/code&gt; (The "Uniform" Model)
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;for&lt;/code&gt; loop is your "Gold Standard" when the operation is predictable and independent.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Fixed Range Iteration
&lt;/h4&gt;

&lt;p&gt;When you know exactly how many times you need to run (e.g., &lt;code&gt;0&lt;/code&gt; to &lt;code&gt;n&lt;/code&gt;), the &lt;code&gt;for&lt;/code&gt; loop is more concise and less prone to infinite loop bugs (since the increment is built into the header).&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Filtering and Mapping
&lt;/h4&gt;

&lt;p&gt;If you are transforming every element in an array or searching for a single value, a &lt;code&gt;for&lt;/code&gt; loop (or &lt;code&gt;for...of&lt;/code&gt;) keeps the code readable and idiomatic.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Early Return Logic
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;for&lt;/code&gt; loops are excellent for "Search and Destroy" missions. If you find what you're looking for, you can &lt;code&gt;break&lt;/code&gt; or &lt;code&gt;return&lt;/code&gt; immediately.&lt;/p&gt;




&lt;h3&gt;
  
  
  Summary Table: Which one to pick?
&lt;/h3&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;
&lt;code&gt;for&lt;/code&gt; Loop&lt;/th&gt;
&lt;th&gt;
&lt;code&gt;while&lt;/code&gt; Loop&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mental Model&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;"Look at everything"&lt;/td&gt;
&lt;td&gt;"Process until done"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pointer Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Automatic ($i++$)&lt;/td&gt;
&lt;td&gt;Manual (you decide when to move)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best For&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Arrays, Strings, Fixed Ranges&lt;/td&gt;
&lt;td&gt;Intervals, Two-Pointer, Linked Lists&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Complexity&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High readability for simple tasks&lt;/td&gt;
&lt;td&gt;High clarity for multi-stage logic&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Final Insight
&lt;/h3&gt;

&lt;p&gt;Stop thinking about "traversing the array" and start thinking about &lt;strong&gt;"clearing the table."&lt;/strong&gt; If you can clear the table in one sweep, use &lt;code&gt;for&lt;/code&gt;. If you need to clear it in stages—first the plates, then the silverware—use &lt;code&gt;while&lt;/code&gt;.&lt;/p&gt;

</description>
      <category>dsa</category>
      <category>programming</category>
    </item>
    <item>
      <title>Common mistake to avoid while loading a file synchronously using script tag</title>
      <dc:creator>Vijay Pagare</dc:creator>
      <pubDate>Fri, 19 Jul 2024 15:06:09 +0000</pubDate>
      <link>https://forem.com/pagarevijayy/common-mistake-to-avoid-while-loading-a-file-synchronously-using-script-tag-3hl5</link>
      <guid>https://forem.com/pagarevijayy/common-mistake-to-avoid-while-loading-a-file-synchronously-using-script-tag-3hl5</guid>
      <description>&lt;p&gt;You might think that loading a script synchronously would make the next line of code execute after the script has downloaded, right? But that's not what synchronous loading of javascript file means. The confusion arises when you're comparing async vs sync vs defer strategies of loading a particular file. &lt;/p&gt;

&lt;p&gt;More on loading a javascript file in async vs sync vs defer manner at the end of the post.&lt;/p&gt;

&lt;p&gt;Here we first talk w.r.t code execution. To execute the lines of code after the script has downloaded successfully, you can use &lt;code&gt;onload&lt;/code&gt; attribute on script tag. Refer the code snippet below:&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;html&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Sync Script Tag&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Load script sync.&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
    &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nf"&gt;afterLoad&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;        &lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;script loaded successfully.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// executes after script has loaded   &lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;    &lt;/span&gt;
    &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nf"&gt;sync_load&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;        &lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;sync_load...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;        &lt;/span&gt; 
        &lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;script&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="err"&gt;        &lt;/span&gt;
        &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;text/javascript&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="err"&gt;        &lt;/span&gt;
        &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// load synchronously       &lt;/span&gt;
        &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onload&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nx"&gt;afterLoad&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="err"&gt;        &lt;/span&gt;
        &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="err"&gt;        &lt;/span&gt;
        &lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementsByTagName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;script&lt;/span&gt;&lt;span class="dl"&gt;'&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="err"&gt;        &lt;/span&gt;
        &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parentNode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;insertBefore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="err"&gt; &lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="err"&gt;            &lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;    &lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;JS entry&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;    &lt;/span&gt; 
    &lt;span class="nf"&gt;sync_load&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="err"&gt;    &lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;next tick&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// this executes before after_load &lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output: &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%2Fzumf59iu8t0izfb4zjay.jpeg" 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%2Fzumf59iu8t0izfb4zjay.jpeg" alt="Output for the above code" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, coming back to &lt;strong&gt;async vs sync vs defer&lt;/strong&gt; strategy, please refer to the image below &lt;a href="https://stackoverflow.com/a/39711009" rel="noopener noreferrer"&gt;via stackoverflow&lt;/a&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%2Fqjfnn6k5iy9sb2ag9isu.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%2Fqjfnn6k5iy9sb2ag9isu.png" alt="JS loading explained - sync vs async vs defer" width="800" height="813"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this case, the difference between async vs sync comes into play w.r.t parsing HTML file. Remember that!&lt;/p&gt;

&lt;p&gt;Happy coding ✨&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Event Listeners and Anchor Tag</title>
      <dc:creator>Vijay Pagare</dc:creator>
      <pubDate>Fri, 05 Jul 2024 14:14:46 +0000</pubDate>
      <link>https://forem.com/pagarevijayy/event-listeners-and-anchor-tag-3pdo</link>
      <guid>https://forem.com/pagarevijayy/event-listeners-and-anchor-tag-3pdo</guid>
      <description>&lt;p&gt;Question:&lt;/p&gt;

&lt;p&gt;When does the anchor tag redirection happen given that multiple event listeners are attached to it?&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="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Event listeners and Anchor tag&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"demo"&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"inlineHandler(event)"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://www.google.com"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;link demo&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;inlineHandler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;inline Handler&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;This will not get executed as redirection would have been occurred by then.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;1000&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;link&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;demo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;click&lt;/span&gt;&lt;span class="dl"&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;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;event listener 1&lt;/span&gt;&lt;span class="dl"&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;link&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;click&lt;/span&gt;&lt;span class="dl"&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;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;event listener 2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="c1"&gt;// e.preventDefault();&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;click&lt;/span&gt;&lt;span class="dl"&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;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;event listener 3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Ftowqlwdxi0ixkwkl36a7.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%2Ftowqlwdxi0ixkwkl36a7.png" alt="Output of the code when multiple event listeners are attached to an anchor tag" width="800" height="295"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learnings&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inline handler always gets executed first. &lt;/li&gt;
&lt;li&gt;Event listeners (for the same element) are handled in the order they are written. &lt;/li&gt;
&lt;li&gt;Anchor tag redirection happens after the execution of all event listeners. &lt;/li&gt;
&lt;li&gt;If any of the event listener triggers preventDefault (irrespective of the order) then redirection won't happen.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use case: Trigger analytics event on anchor tag link click.&lt;/p&gt;

&lt;p&gt;I'll leave the guesswork for async code upto you. For any doubts or discussions, please feel free to comment. Thanks!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Generating Taproot Wallet Address using bitcoinjs-lib</title>
      <dc:creator>Vijay Pagare</dc:creator>
      <pubDate>Sat, 25 May 2024 12:07:21 +0000</pubDate>
      <link>https://forem.com/pagarevijayy/generating-taproot-wallet-address-using-bitcoinjs-lib-54f4</link>
      <guid>https://forem.com/pagarevijayy/generating-taproot-wallet-address-using-bitcoinjs-lib-54f4</guid>
      <description>&lt;p&gt;Taproot wallet address generation using Node.js.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const ecc = require('tiny-secp256k1')
const { BIP32Factory } = require('bip32')
const bip32 = BIP32Factory(ecc)
const bip39 = require('bip39')
const bitcoin = require('bitcoinjs-lib')

const path = `m/86'/0'/0'/0/0`; // Path to first child of receiving wallet on first account
bitcoin.initEccLib(ecc);

let mnemonic = bip39.generateMnemonic()
const seed = bip39.mnemonicToSeedSync(mnemonic)
let rootKey = bip32.fromSeed(seed)

const childNode = rootKey.derivePath(path);
let node = childNode.derive(0).derive(0);

const toXOnly = pubKey =&amp;gt; (pubKey.length === 32 ? pubKey : pubKey.slice(1, 33));

const childNodeXOnlyPubkey = toXOnly(childNode.publicKey);

const internalPubkey = childNodeXOnlyPubkey;

const { address, output } = bitcoin.payments.p2tr({
    internalPubkey
});

console.log(`
Wallet generated:
- Taproot Address: ${address},
- Key: ${node.toWIF()}, 
- Mnemonic: ${mnemonic}    
`)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/taproot.spec.ts" rel="noopener noreferrer"&gt;Reference&lt;/a&gt; | &lt;a href="https://github.com/pagarevijayy/web3-dojo/blob/main/btc-wallet/createTaprootWallet.js" rel="noopener noreferrer"&gt;Code on Github&lt;/a&gt;&lt;/p&gt;

</description>
      <category>bitcoinjs</category>
      <category>taprootwallletaddress</category>
      <category>javascript</category>
      <category>bitcoin</category>
    </item>
  </channel>
</rss>
