<?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: Surendra Singh Kamboj</title>
    <description>The latest articles on DEV Community by Surendra Singh Kamboj (@surendrasinghkamboj).</description>
    <link>https://dev.to/surendrasinghkamboj</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4243119%2F66f34919-f257-415e-be62-e13e87da64ad.jpg</url>
      <title>DEV Community: Surendra Singh Kamboj</title>
      <link>https://dev.to/surendrasinghkamboj</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/surendrasinghkamboj"/>
    <language>en</language>
    <item>
      <title>Where does the energy go when two capacitors share charge? A JavaScript check</title>
      <dc:creator>Surendra Singh Kamboj</dc:creator>
      <pubDate>Sat, 14 Nov 2026 11:59:18 +0000</pubDate>
      <link>https://dev.to/surendrasinghkamboj/where-does-the-energy-go-when-two-capacitors-share-charge-a-javascript-check-2d74</link>
      <guid>https://dev.to/surendrasinghkamboj/where-does-the-energy-go-when-two-capacitors-share-charge-a-javascript-check-2d74</guid>
      <description>&lt;p&gt;When a charged capacitor is connected to an empty one, the charge spreads out, but one third of the energy disappears in a typical case. A short simulation shows that the loss does not depend on the resistance of the wire. (I build &lt;a href="https://www.practisci.in" rel="noopener noreferrer"&gt;PractiSci&lt;/a&gt;, which has a free capacitor charge-sharing lab.)&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens when two capacitors share charge?
&lt;/h2&gt;

&lt;p&gt;Take C₁ = 4 µF charged to 12 V and C₂ = 2 µF empty. Charge is conserved: Q = C₁V. After joining, both have the same voltage V′ = C₁V/(C₁ + C₂) = 8 V. Energy is not conserved:&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;const&lt;/span&gt; &lt;span class="no"&gt;C1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;4e-6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;C2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;2e-6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;V&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nc"&gt;Ui&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="no"&gt;C1&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="no"&gt;V&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="no"&gt;V&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;                 &lt;span class="c1"&gt;// 288 microjoule&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nc"&gt;Vf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;C1&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="no"&gt;V&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;C1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="no"&gt;C2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;               &lt;span class="c1"&gt;// 8 V&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nc"&gt;Uf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;C1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="no"&gt;C2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nc"&gt;Vf&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nc"&gt;Vf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;        &lt;span class="c1"&gt;// 192 microjoule&lt;/span&gt;
&lt;span class="nb"&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="nc"&gt;Ui&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nc"&gt;Uf&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="nc"&gt;Ui&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nc"&gt;Uf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nc"&gt;Ui&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&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="s1"&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;// 96 microjoule, 33.3%&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The loss is 96 µJ, which is 33.3% of the starting energy. It equals ½ · C₁C₂/(C₁ + C₂) · V² = 96 µJ.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where does the energy go?
&lt;/h2&gt;

&lt;p&gt;It becomes heat in the connecting wire (and some radiation). I check this by integrating I²R over time for two very different resistances:&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="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="no"&gt;R&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&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="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nc"&gt;Ce&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;C1&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="no"&gt;C2&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;C1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="no"&gt;C2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tau&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;R&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nc"&gt;Ce&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tau&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="n"&gt;heat&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="n"&gt;v&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;V&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="n"&gt;t&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="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;tau&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;dt&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="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="no"&gt;R&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;heat&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="no"&gt;R&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;dt&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nc"&gt;Ce&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nb"&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="s1"&gt;'R'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;R&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'heat'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;heat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toExponential&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both runs give &lt;strong&gt;9.6024 × 10⁻⁵ J&lt;/strong&gt;, which is the same 96 µJ. A smaller R makes the current larger and shorter, a larger R makes it smaller and longer, but the total heat is identical. Even a wire with almost no resistance loses the same energy (as radiation and sparks).&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is charge conserved?
&lt;/h3&gt;

&lt;p&gt;Yes, always. The total charge stays 48 µC. Only the energy is lost.&lt;/p&gt;

&lt;h3&gt;
  
  
  When is no energy lost?
&lt;/h3&gt;

&lt;p&gt;When the two capacitors are already at the same voltage before they are joined.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where can I try it?
&lt;/h3&gt;

&lt;p&gt;The free &lt;a href="https://www.practisci.in/labs/12-2-capacitor-charge-sharing" rel="noopener noreferrer"&gt;capacitor charge sharing lab&lt;/a&gt; lets you change the capacitances and voltage and see the energy before and after. The &lt;a href="https://www.practisci.in/topics/capacitance" rel="noopener noreferrer"&gt;capacitance guide&lt;/a&gt; covers the theory.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>physics</category>
      <category>electronics</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Hydrogen spectrum lines from Bohr's model: Balmer wavelengths in JavaScript</title>
      <dc:creator>Surendra Singh Kamboj</dc:creator>
      <pubDate>Sat, 14 Nov 2026 11:54:11 +0000</pubDate>
      <link>https://dev.to/surendrasinghkamboj/hydrogen-spectrum-lines-from-bohrs-model-balmer-wavelengths-in-javascript-52h2</link>
      <guid>https://dev.to/surendrasinghkamboj/hydrogen-spectrum-lines-from-bohrs-model-balmer-wavelengths-in-javascript-52h2</guid>
      <description>&lt;p&gt;Bohr's model of hydrogen gives every spectral line of the atom from one formula, and you can reproduce the visible Balmer lines in a few lines of JavaScript. Below I compute the wavelengths of the lines you see in a hydrogen lamp and check the photon energy. (I build &lt;a href="https://www.practisci.in" rel="noopener noreferrer"&gt;PractiSci&lt;/a&gt;, which has a free Bohr hydrogen lab.)&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the formula for the hydrogen spectrum?
&lt;/h2&gt;

&lt;p&gt;1/λ = R (1/n_f² − 1/n_i²), where R = 1.0968 × 10⁷ m⁻¹. Electrons falling to n = 2 give the visible Balmer series. Energy levels are Eₙ = −13.6/n² eV.&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;const&lt;/span&gt; &lt;span class="no"&gt;R&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;1.0968e7&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;nm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ni&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;1e9&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;R&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;nf&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;ni&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="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;const&lt;/span&gt; &lt;span class="n"&gt;ni&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nb"&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="n"&gt;ni&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'-&amp;gt;2'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;nm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ni&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&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="s1"&gt;'nm'&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;
  
  
  What wavelengths come out?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Transition&lt;/th&gt;
&lt;th&gt;Wavelength&lt;/th&gt;
&lt;th&gt;Colour&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;3 → 2 (Hα)&lt;/td&gt;
&lt;td&gt;656.5 nm&lt;/td&gt;
&lt;td&gt;red&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4 → 2 (Hβ)&lt;/td&gt;
&lt;td&gt;486.3 nm&lt;/td&gt;
&lt;td&gt;blue-green&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5 → 2 (Hγ)&lt;/td&gt;
&lt;td&gt;434.2 nm&lt;/td&gt;
&lt;td&gt;violet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6 → 2 (Hδ)&lt;/td&gt;
&lt;td&gt;410.3 nm&lt;/td&gt;
&lt;td&gt;violet&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These match the measured Balmer lines. The same function gives 121.6 nm for the Lyman 2 → 1 line (ultraviolet) and 1876 nm for the Paschen 4 → 3 line (infrared), so only the Balmer series is visible.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do I check it with photon energy?
&lt;/h2&gt;

&lt;p&gt;The 3 → 2 jump releases E₃ − E₂ = −1.51 − (−3.40) = 1.89 eV. The wavelength is λ = 1240 / E nm = 1240 / 1.89 ≈ &lt;strong&gt;656 nm&lt;/strong&gt;, the same red line.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why is the Balmer series the only visible one?
&lt;/h3&gt;

&lt;p&gt;Its lines end on n = 2 and have energies of about 1.9 to 3.0 eV, which fall in the visible range. The Lyman lines are more energetic (ultraviolet) and the Paschen lines less (infrared).&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the ionisation energy of hydrogen?
&lt;/h3&gt;

&lt;p&gt;13.6 eV, the energy to take the electron from n = 1 to infinity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where can I try it?
&lt;/h3&gt;

&lt;p&gt;In the free &lt;a href="https://www.practisci.in/labs/12-12-bohr-hydrogen" rel="noopener noreferrer"&gt;Bohr hydrogen lab&lt;/a&gt; you excite the atom and watch the lines appear. More Class 12 physics labs are in the &lt;a href="https://www.practisci.in/labs" rel="noopener noreferrer"&gt;labs list&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>physics</category>
      <category>science</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Orbital speed, escape speed and the square root of 2: a satellite calculator in JavaScript</title>
      <dc:creator>Surendra Singh Kamboj</dc:creator>
      <pubDate>Sat, 14 Nov 2026 11:53:18 +0000</pubDate>
      <link>https://dev.to/surendrasinghkamboj/orbital-speed-escape-speed-and-the-square-root-of-2-a-satellite-calculator-in-javascript-43p8</link>
      <guid>https://dev.to/surendrasinghkamboj/orbital-speed-escape-speed-and-the-square-root-of-2-a-satellite-calculator-in-javascript-43p8</guid>
      <description>&lt;p&gt;The speed a satellite needs to stay in orbit and the speed needed to escape Earth are linked by one number, √2. You can check it in a few lines of JavaScript, and the same code gives the period of the ISS and of a geostationary satellite. (I build &lt;a href="https://www.practisci.in" rel="noopener noreferrer"&gt;PractiSci&lt;/a&gt;, which has a free satellite-orbits lab.)&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the orbital and escape speed formulas?
&lt;/h2&gt;

&lt;p&gt;Orbital speed at height h: v = √(GM/(R + h)). Escape speed: v_esc = √(2GM/(R + h)). Orbital period: T = 2π√((R + h)³/GM).&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;const&lt;/span&gt; &lt;span class="no"&gt;G&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;6.674e-11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Me&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;5.972e24&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Re&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;6.371e6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;orbitV&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;G&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nc"&gt;Me&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Re&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;h&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="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;period&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="no"&gt;PI&lt;/span&gt; &lt;span class="o"&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;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Re&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;G&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nc"&gt;Me&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="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;escape&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="no"&gt;G&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nc"&gt;Me&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Re&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;h&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What numbers do I get for Earth?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Orbit&lt;/th&gt;
&lt;th&gt;Orbital speed&lt;/th&gt;
&lt;th&gt;Period&lt;/th&gt;
&lt;th&gt;Escape speed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Near the surface&lt;/td&gt;
&lt;td&gt;7.91 km/s&lt;/td&gt;
&lt;td&gt;1.41 h&lt;/td&gt;
&lt;td&gt;11.19 km/s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ISS (400 km)&lt;/td&gt;
&lt;td&gt;7.67 km/s&lt;/td&gt;
&lt;td&gt;1.54 h&lt;/td&gt;
&lt;td&gt;10.85 km/s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Geostationary (35,786 km)&lt;/td&gt;
&lt;td&gt;3.07 km/s&lt;/td&gt;
&lt;td&gt;23.93 h&lt;/td&gt;
&lt;td&gt;4.35 km/s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The ratio escape/orbital is 1.4142 at every height, which is √2. That is why a satellite already has about 70% of the speed it would need to leave Earth altogether.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is a geostationary orbit so high?
&lt;/h2&gt;

&lt;p&gt;Its period must equal one sidereal day, 23.93 h. Solving T = 2π√(r³/GM) for r gives r ≈ 42,164 km from the centre of the Earth, which is 35,786 km above the surface. Then the satellite stays over the same point on the equator.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Does the mass of the satellite matter?
&lt;/h3&gt;

&lt;p&gt;No. It cancels, so a tiny satellite and a space station at the same height have the same speed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why do astronauts feel weightless in orbit?
&lt;/h3&gt;

&lt;p&gt;They are in free fall around the Earth, not beyond gravity. Gravity at 400 km is still about 89% of its surface value.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where can I try it?
&lt;/h3&gt;

&lt;p&gt;The free &lt;a href="https://www.practisci.in/labs/11-7-satellite-orbits" rel="noopener noreferrer"&gt;satellite orbits lab&lt;/a&gt; lets you change the height and see the speed and period, and the &lt;a href="https://www.practisci.in/topics/work-energy-power" rel="noopener noreferrer"&gt;work, energy and power guide&lt;/a&gt; covers the energy side.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>physics</category>
      <category>space</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Weak acid titration curve in JavaScript: pH at every point from 0 to 30 mL</title>
      <dc:creator>Surendra Singh Kamboj</dc:creator>
      <pubDate>Sat, 14 Nov 2026 11:47:14 +0000</pubDate>
      <link>https://dev.to/surendrasinghkamboj/weak-acid-titration-curve-in-javascript-ph-at-every-point-from-0-to-30-ml-1ho</link>
      <guid>https://dev.to/surendrasinghkamboj/weak-acid-titration-curve-in-javascript-ph-at-every-point-from-0-to-30-ml-1ho</guid>
      <description>&lt;p&gt;A weak acid titration curve has a buffer region, a half-equivalence point where pH = pKa, and a steep jump at the end point. You can generate the whole curve with four formulas. Below is a JavaScript function for 25 mL of 0.10 M acetic acid titrated with 0.10 M NaOH. (I build &lt;a href="https://www.practisci.in" rel="noopener noreferrer"&gt;PractiSci&lt;/a&gt;, which has free virtual titration labs.)&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the four regions of the curve?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Start: only the weak acid, so [H⁺] = √(Ka·C).&lt;/li&gt;
&lt;li&gt;Before the end point: a buffer, so pH = pKa + log([A⁻]/[HA]).&lt;/li&gt;
&lt;li&gt;At the end point: only the salt, which hydrolyses, so pH is above 7.&lt;/li&gt;
&lt;li&gt;After the end point: excess NaOH sets the pH.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How do I code the curve?
&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;const&lt;/span&gt; &lt;span class="nc"&gt;Ka&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;1.8e-5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Kw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;1e-14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Ca&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Va&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Cb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;pH&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vb&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="n"&gt;na&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Ca&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nc"&gt;Va&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Cb&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;vb&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;V&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Va&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;vb&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&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="n"&gt;vb&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="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nc"&gt;Ka&lt;/span&gt; &lt;span class="o"&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;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Ka&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nc"&gt;Ka&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nc"&gt;Ka&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nc"&gt;Ca&lt;/span&gt;&lt;span class="p"&gt;)&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="k"&gt;return&lt;/span&gt; &lt;span class="o"&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;log10&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&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;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nb&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;na&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&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;log10&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Ka&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&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;log10&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nb&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;na&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;nb&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;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="n"&gt;nb&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;na&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;1e-12&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="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;na&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="no"&gt;V&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt; &lt;span class="o"&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;log10&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;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Kw&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nc"&gt;Ka&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;c&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="mi"&gt;14&lt;/span&gt; &lt;span class="o"&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;log10&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nb&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;na&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="no"&gt;V&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What pH values does it give?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;NaOH added (mL)&lt;/th&gt;
&lt;th&gt;pH&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;2.88&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;4.14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12.5 (half-equivalence)&lt;/td&gt;
&lt;td&gt;4.74&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;5.35&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;6.12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;25 (end point)&lt;/td&gt;
&lt;td&gt;8.72&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;11.29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;11.96&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;At 12.5 mL the pH equals pKa = 4.74, which is how you find Ka from a graph. The end point is at 8.72, not 7, so phenolphthalein (pH range 8.2 to 10) is the right indicator and methyl orange is not.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why is the end point above pH 7?
&lt;/h3&gt;

&lt;p&gt;The acetate ion is a weak base, so the salt solution is slightly basic.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I find the end point from the curve?
&lt;/h3&gt;

&lt;p&gt;It is where the curve is steepest, the middle of the vertical jump.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where can I try it?
&lt;/h3&gt;

&lt;p&gt;The free &lt;a href="https://www.practisci.in/labs/chem-weak-acid-titration" rel="noopener noreferrer"&gt;weak acid titration lab&lt;/a&gt; lets you run the titration drop by drop, and the &lt;a href="https://www.practisci.in/practicals/class-12-chemistry" rel="noopener noreferrer"&gt;Class 12 chemistry practical list&lt;/a&gt; has the other titrations.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>chemistry</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Simulating projectile motion with air drag in 25 lines of JavaScript</title>
      <dc:creator>Surendra Singh Kamboj</dc:creator>
      <pubDate>Fri, 13 Nov 2026 14:44:39 +0000</pubDate>
      <link>https://dev.to/surendrasinghkamboj/simulating-projectile-motion-with-air-drag-in-25-lines-of-javascript-2l7b</link>
      <guid>https://dev.to/surendrasinghkamboj/simulating-projectile-motion-with-air-drag-in-25-lines-of-javascript-2l7b</guid>
      <description>&lt;p&gt;Every physics textbook has the projectile formulas for a vacuum: range R = u² sin 2θ / g, time of flight T = 2u sin θ / g and maximum height H = u² sin² θ / 2g. Real balls fly in air, and the answer changes a lot. Here is a small simulation that shows how much, and why the best launch angle is no longer 45 degrees.&lt;/p&gt;

&lt;h2&gt;
  
  
  The model
&lt;/h2&gt;

&lt;p&gt;Gravity pulls down with g = 9.81 m/s². Air drag points against the velocity and grows with speed. I use a quadratic drag, &lt;code&gt;a_drag = -k * |v| * v&lt;/code&gt;, where &lt;code&gt;k&lt;/code&gt; (in 1/m) bundles air density, area, mass and the drag coefficient. &lt;code&gt;k = 0&lt;/code&gt; is the textbook case.&lt;/p&gt;

&lt;h2&gt;
  
  
  The code
&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;fly&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;speed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;degrees&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k&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="n"&gt;g&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;9.81&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.001&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="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;degrees&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="no"&gt;PI&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;180&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="n"&gt;x&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="n"&gt;y&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="n"&gt;vx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;speed&lt;/span&gt; &lt;span class="o"&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;cos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;vy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;speed&lt;/span&gt; &lt;span class="o"&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;sin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&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="n"&gt;t&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="n"&gt;top&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="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;&amp;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="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="o"&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;hypot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;vy&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;vx&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;vx&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;vy&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;vy&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;vx&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;vy&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;top&lt;/span&gt; &lt;span class="o"&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;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;top&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&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="n"&gt;range&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;top&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It is a simple semi-implicit Euler step. With &lt;code&gt;dt = 0.001&lt;/code&gt; s it matches the closed-form answers to about 0.1 percent when &lt;code&gt;k = 0&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the numbers say
&lt;/h2&gt;

&lt;p&gt;Launch at 20 m/s and 45 degrees:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;k (1/m)&lt;/th&gt;
&lt;th&gt;range&lt;/th&gt;
&lt;th&gt;time of flight&lt;/th&gt;
&lt;th&gt;max height&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0 (vacuum)&lt;/td&gt;
&lt;td&gt;40.8 m&lt;/td&gt;
&lt;td&gt;2.88 s&lt;/td&gt;
&lt;td&gt;10.2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0.02&lt;/td&gt;
&lt;td&gt;25.8 m&lt;/td&gt;
&lt;td&gt;2.51 s&lt;/td&gt;
&lt;td&gt;7.8 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0.05&lt;/td&gt;
&lt;td&gt;17.5 m&lt;/td&gt;
&lt;td&gt;2.20 s&lt;/td&gt;
&lt;td&gt;6.0 m&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The vacuum row agrees with the formulas: 20² x sin 90° / 9.81 = 40.8 m and 2 x 20 x sin 45° / 9.81 = 2.88 s. With a modest drag the range drops by more than a third.&lt;/p&gt;

&lt;h2&gt;
  
  
  The best angle moves
&lt;/h2&gt;

&lt;p&gt;With &lt;code&gt;k = 0.02&lt;/code&gt; and the same 20 m/s launch, the range is 24.2 m at 30 degrees, 25.4 m at 35 degrees, 25.9 m at 40 degrees and 25.8 m at 45 degrees. The best angle is now a little below 45 degrees, because a flatter shot spends less time in the air losing speed. The more drag, the lower the best angle.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three things worth remembering for exams
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The 45 degree rule holds only for level ground and no air resistance.&lt;/li&gt;
&lt;li&gt;Angles theta and 90 degrees minus theta give the same range only in a vacuum.&lt;/li&gt;
&lt;li&gt;The horizontal velocity stays constant only without drag.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Play with it
&lt;/h2&gt;

&lt;p&gt;If you would rather drag sliders than edit code, the projectile lab on &lt;a href="https://www.practisci.in/labs/11-3-projectile-motion" rel="noopener noreferrer"&gt;PractiSci&lt;/a&gt; lets you change the speed and angle (with an optional air drag) and plots the path. The chapter guide for &lt;a href="https://www.practisci.in/topics/projectile-motion-kinematics" rel="noopener noreferrer"&gt;projectile motion and kinematics&lt;/a&gt; collects the formulas and worked examples for Class 11.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>physics</category>
      <category>tutorial</category>
      <category>education</category>
    </item>
    <item>
      <title>What I learned building 400+ 3D physics and chemistry labs for the browser</title>
      <dc:creator>Surendra Singh Kamboj</dc:creator>
      <pubDate>Fri, 13 Nov 2026 14:34:48 +0000</pubDate>
      <link>https://dev.to/surendrasinghkamboj/what-i-learned-building-400-3d-physics-and-chemistry-labs-for-the-browser-5f63</link>
      <guid>https://dev.to/surendrasinghkamboj/what-i-learned-building-400-3d-physics-and-chemistry-labs-for-the-browser-5f63</guid>
      <description>&lt;p&gt;I am building &lt;a href="https://www.practisci.in" rel="noopener noreferrer"&gt;PractiSci&lt;/a&gt;, a virtual lab for Class 11 and 12 physics and chemistry students in India. It now has 400+ interactive 3D experiments that run in a normal browser tab, on a phone or a laptop, in English and Hindi. This is what I learned along the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  The stack
&lt;/h2&gt;

&lt;p&gt;The website is Next.js with three.js for the 3D scenes. The API is Express with MongoDB and JWT sessions. Every lab is a small module that exposes one function which builds the scene, a list of controls and a list of readouts. The player is generic, so a new experiment is mostly a new folder.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson 1: realism is a set of small helpers, not big models
&lt;/h2&gt;

&lt;p&gt;A metre bridge that looks like a real one needs a wooden base with grain, a steel strip, a brass terminal and a ruler with proper tick marks. Writing a shared helper for each of these (a wood texture, a steel material, a ruler, a glass tube, a spring) made later labs cheap to build and made all of them look like they belong to one lab bench. I now check every new scene against a photo of the real apparatus before I call it done.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson 2: the physics must be right before the picture is pretty
&lt;/h2&gt;

&lt;p&gt;Students will compare the readings with their textbook. Each lab has a small engine behind it: an Ohm's law lab gives real resistance values with a tolerance, a double-slit lab computes fringe width as lambda D / d, a Carnot engine lab follows the p-V cycle. I wrote unit tests for the formulas, so a visual change cannot quietly change a result.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson 3: do not ship paid lab code to every visitor
&lt;/h2&gt;

&lt;p&gt;The lab modules are not part of the website bundle. The API sends a lab's code only after it has checked the signed-in student's plan, so the free labs stay free and the paid ones are not sitting in a public JavaScript file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson 4: phones decide your scene budget
&lt;/h2&gt;

&lt;p&gt;Most students open the labs on a phone. That meant fewer lights, small textures, and no heavy post-processing. I also made the loading screen identical for every lab, so waiting feels the same whether it is physics or chemistry.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson 5: make the content findable
&lt;/h2&gt;

&lt;p&gt;A great lab nobody can find is useless. Each lab has its own page with a title, a description, JSON-LD (LearningResource, FAQPage, BreadcrumbList), a sitemap entry, and chapter guides such as &lt;a href="https://www.practisci.in/topics/ray-optics" rel="noopener noreferrer"&gt;ray optics&lt;/a&gt; and &lt;a href="https://www.practisci.in/topics/current-electricity" rel="noopener noreferrer"&gt;current electricity&lt;/a&gt; that explain the formulas and link to the labs. I also publish an llms.txt so AI assistants can describe the site correctly.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is next
&lt;/h2&gt;

&lt;p&gt;More chemistry benches, a better teacher view, and more Hindi explanations. If you work on educational simulations I would like to hear how you handle realism versus performance. You can look at the labs here: &lt;a href="https://www.practisci.in/labs" rel="noopener noreferrer"&gt;practisci.in/labs&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>education</category>
    </item>
  </channel>
</rss>
