<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="/feed.xml" rel="self" type="application/atom+xml" /><link href="/" rel="alternate" type="text/html" /><updated>2025-10-01T21:09:15+00:00</updated><id>/feed.xml</id><title type="html">From first principles</title><subtitle></subtitle><author><name>Arun Kant Sharma</name></author><entry><title type="html">The Un-Abstracted Frontend</title><link href="/2025/10/01/The-Un-Abstracted-Frontend.html" rel="alternate" type="text/html" title="The Un-Abstracted Frontend" /><published>2025-10-01T00:00:00+00:00</published><updated>2025-10-01T00:00:00+00:00</updated><id>/2025/10/01/The-Un-Abstracted-Frontend</id><content type="html" xml:base="/2025/10/01/The-Un-Abstracted-Frontend.html"><![CDATA[<h2 id="building-a-modern-react-app-from-scratch-no-vite-no-nextjs">Building a Modern React App from Scratch (No Vite, No Next.js!)</h2>
<p>Grounded Development: Why the “Magic” Needs to Stop
If you’re new to modern JavaScript, running npx create-react-app or npx create-vite feels like pure magic. In seconds, you have a working app!</p>

<p>But what actually converts your cool ES6 consts and your funky JSX into browser-friendly code?</p>

<p>We’re going to strip away the abstractions and build a clean, predictable development environment using just npm, webpack (the Bundler), and Babel (the Transpiler). We will build the pipeline in three phases, adding a new capability in each step.</p>

<h2 id="phase-1-the-vanilla-js-core-handling-modern-javascript">Phase 1: The Vanilla JS Core (Handling Modern JavaScript)</h2>
<p>Our first goal is simple: Get a modern JS file to run in the browser.</p>

<h3 id="1-project-initialization-and-structure">1. Project Initialization and Structure</h3>
<p>Every modern project starts here.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Create the folder and start npm</span>
<span class="nb">mkdir </span>grounded-app
<span class="nb">cd </span>grounded-app
npm init <span class="nt">-y</span>

<span class="c"># Create the source and output directories</span>
<span class="nb">mkdir </span>src dist
</code></pre></div></div>
<h3 id="2-the-core-tools-webpack-and-babel">2. The Core Tools: webpack and Babel</h3>
<p>We need a bundler to combine files and a transpiler to convert modern JS.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Install bundler/server tools and Babel core</span>
npm <span class="nb">install</span> <span class="nt">--save-dev</span> <span class="se">\</span>
  webpack webpack-cli webpack-dev-server <span class="se">\</span>
  @babel/core babel-loader @babel/preset-env
</code></pre></div></div>
<h3 id="3-the-code-modern-js">3. The Code: Modern JS</h3>
<p>Let’s use an arrow function that older browsers might not understand.</p>

<p>src/index.js</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">greet</span> <span class="o">=</span> <span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="p">{</span>
    <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">`Hello, </span><span class="p">${</span><span class="nx">name</span><span class="p">}</span><span class="s2">! This is modern JS.`</span><span class="p">);</span>
<span class="p">};</span>

<span class="nb">document</span><span class="p">.</span><span class="nx">addEventListener</span><span class="p">(</span><span class="dl">'</span><span class="s1">DOMContentLoaded</span><span class="dl">'</span><span class="p">,</span> <span class="p">()</span> <span class="o">=&gt;</span> <span class="p">{</span>
    <span class="nx">greet</span><span class="p">(</span><span class="dl">'</span><span class="s1">Grounded Developer</span><span class="dl">'</span><span class="p">);</span>
<span class="p">});</span>
</code></pre></div></div>
<ol>
  <li>Configuration for Transpilation
We tell Babel what transformations to apply, and we tell webpack how to use Babel.</li>
</ol>

<p>.babelrc (In the project root)</p>

<pre><code class="language-JSON">{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": "defaults"
      }
    ]
  ]
}
</code></pre>

<p>webpack.config.js (Minimal Setup)</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">path</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="dl">'</span><span class="s1">path</span><span class="dl">'</span><span class="p">);</span>

<span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="p">{</span>
  <span class="na">entry</span><span class="p">:</span> <span class="dl">'</span><span class="s1">./src/index.js</span><span class="dl">'</span><span class="p">,</span>
  <span class="na">output</span><span class="p">:</span> <span class="p">{</span>
    <span class="na">filename</span><span class="p">:</span> <span class="dl">'</span><span class="s1">bundle.js</span><span class="dl">'</span><span class="p">,</span>
    <span class="na">path</span><span class="p">:</span> <span class="nx">path</span><span class="p">.</span><span class="nx">resolve</span><span class="p">(</span><span class="nx">__dirname</span><span class="p">,</span> <span class="dl">'</span><span class="s1">dist</span><span class="dl">'</span><span class="p">),</span>
    <span class="na">clean</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
  <span class="p">},</span>
  <span class="na">module</span><span class="p">:</span> <span class="p">{</span>
    <span class="na">rules</span><span class="p">:</span> <span class="p">[</span>
      <span class="c1">// THE BABEL RULE: Apply babel-loader to all .js files outside node_modules</span>
      <span class="p">{</span>
        <span class="na">test</span><span class="p">:</span> <span class="sr">/</span><span class="se">\.</span><span class="sr">js$/</span><span class="p">,</span> 
        <span class="na">exclude</span><span class="p">:</span> <span class="sr">/node_modules/</span><span class="p">,</span>
        <span class="na">use</span><span class="p">:</span> <span class="p">{</span> <span class="na">loader</span><span class="p">:</span> <span class="dl">'</span><span class="s1">babel-loader</span><span class="dl">'</span> <span class="p">},</span>
      <span class="p">},</span>
    <span class="p">],</span>
  <span class="p">},</span>
  <span class="na">mode</span><span class="p">:</span> <span class="dl">'</span><span class="s1">development</span><span class="dl">'</span>
<span class="p">};</span>
</code></pre></div></div>
<p>What happens: webpack bundles the file, and the babel-loader ensures the arrow function is converted to a browser-safe function() {} along the way.</p>

<h2 id="phase-2-handling-assets-css-and-images">Phase 2: Handling Assets (CSS and Images)</h2>
<p>A frontend app isn’t just JavaScript. Now we teach webpack to handle other file types using Loaders and Plugins.</p>

<h3 id="5-adding-assets-and-loaders">5. Adding Assets and Loaders</h3>
<p>We need loaders for CSS and a plugin to manage our HTML file.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Install asset loaders and the HTML plugin</span>
npm <span class="nb">install</span> <span class="nt">--save-dev</span> style-loader css-loader html-webpack-plugin
</code></pre></div></div>
<h3 id="6-configuration-for-html-and-css">6. Configuration for HTML and CSS</h3>
<p>A. HTML Plugin: We use html-webpack-plugin to generate the output HTML and inject the script tag automatically.
index.html (Update the entry point to be served as the template)</p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code>...
<span class="nt">&lt;body&gt;</span>
    <span class="nt">&lt;div</span> <span class="na">id=</span><span class="s">"app"</span><span class="nt">&gt;&lt;/div&gt;</span>
    <span class="nt">&lt;/body&gt;</span>
...
</code></pre></div></div>
<p>B. webpack.config.js (Adding the asset rules)</p>
<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">const</span> <span class="nx">path</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="dl">'</span><span class="s1">path</span><span class="dl">'</span><span class="p">);</span>
<span class="kd">const</span> <span class="nx">HtmlWebpackPlugin</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="dl">'</span><span class="s1">html-webpack-plugin</span><span class="dl">'</span><span class="p">);</span> 

<span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="p">{</span>
  <span class="c1">// ... (entry, output, devServer, mode remain the same)</span>

  <span class="na">module</span><span class="p">:</span> <span class="p">{</span>
    <span class="na">rules</span><span class="p">:</span> <span class="p">[</span>
      <span class="c1">// ... (Babel rule remains)</span>
      
      <span class="c1">// NEW CSS RULE</span>
      <span class="p">{</span>
        <span class="na">test</span><span class="p">:</span> <span class="sr">/</span><span class="se">\.</span><span class="sr">css$/</span><span class="p">,</span>
        <span class="c1">// Loaders run R-L: css-loader resolves imports, style-loader injects into DOM</span>
        <span class="na">use</span><span class="p">:</span> <span class="p">[</span><span class="dl">'</span><span class="s1">style-loader</span><span class="dl">'</span><span class="p">,</span> <span class="dl">'</span><span class="s1">css-loader</span><span class="dl">'</span><span class="p">],</span>
      <span class="p">},</span>
      <span class="c1">// NEW IMAGE/ASSET RULE (using webpack 5's built-in Asset Module)</span>
      <span class="p">{</span>
        <span class="na">test</span><span class="p">:</span> <span class="sr">/</span><span class="se">\.(</span><span class="sr">png|svg|jpg|jpeg|gif</span><span class="se">)</span><span class="sr">$/i</span><span class="p">,</span>
        <span class="na">type</span><span class="p">:</span> <span class="dl">'</span><span class="s1">asset/resource</span><span class="dl">'</span><span class="p">,</span> <span class="c1">// Copies the file to 'dist' and provides the URL</span>
      <span class="p">},</span>
    <span class="p">],</span>
  <span class="p">},</span>
  
  <span class="c1">// NEW PLUGIN SECTION</span>
  <span class="na">plugins</span><span class="p">:</span> <span class="p">[</span>
    <span class="k">new</span> <span class="nx">HtmlWebpackPlugin</span><span class="p">({</span>
      <span class="na">template</span><span class="p">:</span> <span class="nx">path</span><span class="p">.</span><span class="nx">resolve</span><span class="p">(</span><span class="nx">__dirname</span><span class="p">,</span> <span class="dl">'</span><span class="s1">index.html</span><span class="dl">'</span><span class="p">),</span> 
      <span class="na">filename</span><span class="p">:</span> <span class="dl">'</span><span class="s1">index.html</span><span class="dl">'</span><span class="p">,</span>
    <span class="p">}),</span>
  <span class="p">],</span>

  <span class="c1">// ... (devServer remains the same)</span>
<span class="p">};</span>
</code></pre></div></div>
<h3 id="7-the-final-npm-scripts">7. The Final npm Scripts</h3>
<p>We create our convenient scripts to start the server and run the final production build.</p>

<p>package.json (Scripts section)</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nl">"scripts"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
  </span><span class="nl">"build"</span><span class="p">:</span><span class="w"> </span><span class="s2">"webpack --mode production"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"start"</span><span class="p">:</span><span class="w"> </span><span class="s2">"webpack serve --open --mode development"</span><span class="w">
</span><span class="p">}</span><span class="err">,</span><span class="w">
</span></code></pre></div></div>
<h2 id="phase-3-layering-react-jsx-transformation">Phase 3: Layering React (JSX Transformation)</h2>
<p>Finally, we introduce React and its primary feature, JSX.</p>

<h3 id="8-installing-react-and-the-jsx-preset">8. Installing React and the JSX Preset</h3>
<p>We need the actual React libraries and the special Babel preset to handle JSX.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Install React core libraries</span>
npm <span class="nb">install </span>react react-dom

<span class="c"># Install the Babel preset for JSX</span>
npm <span class="nb">install</span> <span class="nt">--save-dev</span> @babel/preset-react
</code></pre></div></div>
<h3 id="9-configure-babel-and-webpack-for-jsx">9. Configure Babel and webpack for JSX</h3>
<p>We update the configs to recognize JSX files and syntax.</p>

<p>.babelrc (Add the React preset)</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"presets"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="s2">"@babel/preset-react"</span><span class="p">,</span><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="err">&lt;--</span><span class="w"> </span><span class="err">Now</span><span class="w"> </span><span class="err">handles</span><span class="w"> </span><span class="err">JSX</span><span class="w"> </span><span class="err">syntax!</span><span class="w">
    </span><span class="p">[</span><span class="s2">"@babel/preset-env"</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"targets"</span><span class="p">:</span><span class="w"> </span><span class="s2">"defaults"</span><span class="w"> </span><span class="p">}]</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<p>webpack.config.js (Update to include the .jsx extension)</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// ...</span>
  <span class="nx">module</span><span class="p">:</span> <span class="p">{</span>
    <span class="nl">rules</span><span class="p">:</span> <span class="p">[</span>
      <span class="c1">// Updated test regex to include .jsx files</span>
      <span class="p">{</span>
        <span class="na">test</span><span class="p">:</span> <span class="sr">/</span><span class="se">\.(</span><span class="sr">js|jsx</span><span class="se">)</span><span class="sr">$/</span><span class="p">,</span> 
        <span class="na">exclude</span><span class="p">:</span> <span class="sr">/node_modules/</span><span class="p">,</span>
        <span class="na">use</span><span class="p">:</span> <span class="p">{</span> <span class="na">loader</span><span class="p">:</span> <span class="dl">'</span><span class="s1">babel-loader</span><span class="dl">'</span> <span class="p">},</span>
      <span class="p">},</span>
      <span class="c1">// ... (asset rules remain)</span>
    <span class="p">],</span>
  <span class="p">},</span>
  
  <span class="nx">resolve</span><span class="p">:</span> <span class="p">{</span>
    <span class="c1">// Allows importing files with .js or .jsx extensions without specifying them</span>
    <span class="nl">extensions</span><span class="p">:</span> <span class="p">[</span><span class="dl">'</span><span class="s1">.js</span><span class="dl">'</span><span class="p">,</span> <span class="dl">'</span><span class="s1">.jsx</span><span class="dl">'</span><span class="p">],</span> 
  <span class="p">},</span>
<span class="c1">// ...</span>
</code></pre></div></div>
<h3 id="10-write-your-react-code">10. Write Your React Code</h3>
<p>Our code is now built on the new standard.</p>

<p>src/App.js</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">import</span> <span class="nx">React</span> <span class="k">from</span> <span class="dl">'</span><span class="s1">react</span><span class="dl">'</span><span class="p">;</span>

<span class="kd">const</span> <span class="nx">App</span> <span class="o">=</span> <span class="p">({</span> <span class="nx">title</span> <span class="p">})</span> <span class="o">=&gt;</span> <span class="p">{</span>
  <span class="c1">// JSX in action!</span>
  <span class="k">return</span> <span class="o">&lt;</span><span class="nx">h1</span><span class="o">&gt;</span><span class="p">{</span><span class="nx">title</span><span class="p">}</span><span class="o">&lt;</span><span class="sr">/h1&gt;</span><span class="err">;
</span><span class="p">};</span>

<span class="k">export</span> <span class="k">default</span> <span class="nx">App</span><span class="p">;</span>
</code></pre></div></div>
<p>src/index.js</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">import</span> <span class="nx">React</span> <span class="k">from</span> <span class="dl">'</span><span class="s1">react</span><span class="dl">'</span><span class="p">;</span>
<span class="k">import</span> <span class="nx">ReactDOM</span> <span class="k">from</span> <span class="dl">'</span><span class="s1">react-dom/client</span><span class="dl">'</span><span class="p">;</span>
<span class="k">import</span> <span class="nx">App</span> <span class="k">from</span> <span class="dl">'</span><span class="s1">./App</span><span class="dl">'</span><span class="p">;</span>

<span class="nb">document</span><span class="p">.</span><span class="nx">addEventListener</span><span class="p">(</span><span class="dl">'</span><span class="s1">DOMContentLoaded</span><span class="dl">'</span><span class="p">,</span> <span class="p">()</span> <span class="o">=&gt;</span> <span class="p">{</span>
    <span class="kd">const</span> <span class="nx">container</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementById</span><span class="p">(</span><span class="dl">'</span><span class="s1">app</span><span class="dl">'</span><span class="p">);</span>
    <span class="kd">const</span> <span class="nx">root</span> <span class="o">=</span> <span class="nx">ReactDOM</span><span class="p">.</span><span class="nx">createRoot</span><span class="p">(</span><span class="nx">container</span><span class="p">);</span>
    
    <span class="nx">root</span><span class="p">.</span><span class="nx">render</span><span class="p">(</span>
        <span class="o">&lt;</span><span class="nx">App</span> <span class="nx">title</span><span class="o">=</span><span class="dl">"</span><span class="s2">Final Grounded Setup Complete!</span><span class="dl">"</span> <span class="o">/&gt;</span>
    <span class="p">);</span>
<span class="p">});</span>
</code></pre></div></div>
<p><strong>Final Thoughts</strong>: The End of the Magic
What you have now is the entire build pipeline for a modern single-page application.</p>

<p>The “magic” of frameworks like Vite and Next.js is simply that they pre-configure these 10 steps for you in a highly optimized way. By building it yourself, you now understand exactly what is happening under the hood. It’s good to have a predictable development environment.</p>]]></content><author><name>Arun Kant Sharma</name></author><summary type="html"><![CDATA[Building a Modern React App from Scratch (No Vite, No Next.js!) Grounded Development: Why the “Magic” Needs to Stop If you’re new to modern JavaScript, running npx create-react-app or npx create-vite feels like pure magic. In seconds, you have a working app!]]></summary></entry><entry><title type="html">My bookmarks over the years (part 5)</title><link href="/2022/10/23/bookmarks-i-collected-part-5.html" rel="alternate" type="text/html" title="My bookmarks over the years (part 5)" /><published>2022-10-23T00:00:00+00:00</published><updated>2022-10-23T00:00:00+00:00</updated><id>/2022/10/23/bookmarks-i-collected-part-5</id><content type="html" xml:base="/2022/10/23/bookmarks-i-collected-part-5.html"><![CDATA[<p>I have bookmarked lots of articles over the years. I hardly visit them but I don’t want to delete them either. I want to clean up my browser and start fresh…</p>

<p>So here is the dump from my browser bookmarks in some order and some brief notes</p>

<hr />

<p><a href="https://nullprogram.com/blog/2020/05/24/">Latency in Asynchronous Python</a> - Async is still single threaded and can block for long time</p>

<p><a href="http://www.cs.cornell.edu/projects/ladis2009/talks/dean-keynote-ladis2009.pdf">Slide 1 - dean-keynote-ladis2009.pdf</a> - Designs, Lessons and Advice from Building Large Distributed Systems by Jeff Dean, Google Fellow</p>

<p><a href="https://www.somethingsimilar.com/2013/01/14/notes-on-distributed-systems-for-young-bloods/">Notes on Distributed Systems for Young Bloods – Something Similar</a></p>

<p><a href="https://nanxiao.me/en/beware-of-openmps-thread-pool/">Beware of OpenMP’s thread pool | Nan Xiao’s Blog</a> - Issues with onnxruntime. lots of headaches</p>

<p><a href="https://realpython.com/python-microservices-grpc/">Python Microservices With gRPC – Real Python</a> - Real Python tutorial are comprehensive compare to other tutorial on web</p>

<p><a href="https://osmocom.org/">Open Source Mobile Communications</a></p>

<p><a href="https://docs.python.org/3/howto/instrumentation.html">Instrumenting CPython with DTrace and SystemTap — Python 3.9.5 documentation</a></p>

<p><a href="https://ahima.org/">AHIMA Home</a> - The American Health Information Management Association</p>

<p><a href="https://shape-of-code.coding-guidelines.com/2010/06/18/network-protocols-also-evolve-into-a-tangle-of-dependencies/">The Shape of Code » Network protocols also evolve into a tangle of dependencies</a> - Create lots of complicate protocol to create a moat. The MS way</p>

<p><a href="https://realpython.com/async-io-python/#the-asyncawait-syntax-and-native-coroutines">Async IO in Python: A Complete Walkthrough – Real Python</a></p>

<p><a href="https://snarky.ca/how-the-heck-does-async-await-work-in-python-3-5/">How the heck does async/await work in Python 3.5?</a></p>

<p><a href="https://nips.cc/virtual/2020/public/invited_16166.html">NeurIPS 2020 : You Can’t Escape Hyperparameters and Latent Variables: Machine Learning as a Software Engineering Enterprise</a></p>

<p><a href="http://www.43folders.com/izero">43 Folders Series: Inbox Zero | 43 Folders</a> - How to keep inbox clean</p>

<p><a href="https://cp-algorithms.com/">Main Page - Competitive Programming Algorithms</a></p>

<p><a href="https://litestream.io/">Litestream - Streaming SQLite Replication</a> - from fly.io</p>

<p><a href="https://mjg59.dreamwidth.org/57199.html">mjg59 | Producing a trustworthy x86-based Linux appliance</a></p>

<p><a href="https://www.yoctoproject.org/">Yocto Project – It’s not an embedded Linux distribution – it creates a custom one for you</a></p>

<p><a href="https://snyk.io/">Snyk | Developer security | Develop fast. Stay secure.</a></p>

<p><a href="https://www.python.org/dev/peps/pep-0621/#abstract">PEP 621 – Storing project metadata in pyproject.toml | Python.org</a></p>

<p><a href="https://jmmv.dev/2021/04/always-be-quitting.html">Always be quitting - jmmv.dev</a> - How to not stuck in your job. learn to delegate</p>

<p><a href="https://tailscale.com/">Best VPN Service for Secure Networks - Tailscale</a> - One of best company with wireguard networkign</p>

<p><a href="https://openid.net/certification/">OpenID Certification | OpenID</a></p>

<p><a href="https://stackoverflow.com/questions/46184787/gluu-vs-keycloack-vs-wso2-identity-management">compare - Gluu vs keycloack vs wso2 identity management - Stack Overflow</a></p>

<p><a href="https://paper.li/">Build your digital presence with Paper.li</a> - Paper.li is your personal marketing assistant</p>

<p><a href="https://cloudlad.io/multi-region-kubernetes-EKS-and-terraform-012">Multi-Region Kubernetes - EKS and Terraform 0.12 | cloudlad.io</a></p>

<p><a href="https://gluu.org/docs/gluu-server/latest/installation-guide/install-kubernetes/">Kubernetes - Gluu Server 4.2 Docs</a></p>

<p><a href="https://www.pluralith.com/">Pluralith - Proper Terraform State Visualization</a></p>

<p><a href="https://www.ory.sh/">Ory - Open Source Identity Solutions For Everyone - ory.sh</a></p>

<p><a href="https://sosedoff.com/2021/02/21/wireguard-vpn-on-aws.html">Wireguard VPN on AWS</a></p>

<p><a href="https://dev.to/netikras/iptables-a-beast-worth-training-a-firewall-a-nat-router-a-port-forwarder-an-lb-anti-dos-a-logger-for-free-5157">Iptables - a beast worth training: a firewall, a (NAT) router, a port-forwarder, an LB, anti-DoS, a logger,… for free! - DEV Community</a></p>

<p><a href="https://blog.gruntwork.io/a-comprehensive-guide-to-managing-secrets-in-your-terraform-code-1d586955ace1">A comprehensive guide to managing secrets in your Terraform code | by Yevgeniy Brikman | Gruntwork</a></p>

<p>Terragrunt articles are comprehensive
<a href="https://gruntwork.io/guides/kubernetes/how-to-deploy-production-grade-kubernetes-cluster-aws/#kubernetes-architecture">How to deploy a production-grade Kubernetes cluster on AWS</a></p>

<p><a href="https://gruntwork.io/guides/kubernetes/how-to-deploy-production-grade-kubernetes-cluster-aws/#worker-nodes-2">How to deploy a production-grade Kubernetes cluster on AWS</a></p>

<p><a href="https://gruntwork.io/guides/networking/how-to-deploy-production-grade-vpc-aws">How to deploy a production-grade VPC on AWS</a></p>

<p><a href="https://gruntwork.io/guides/automations/how-to-configure-a-production-grade-ci-cd-setup-for-apps-and-infrastructure-code/#cicd_workflows">How to configure a production-grade CI-CD workflow for infrastructure code</a></p>

<p><a href="https://www.runatlantis.io/">Terraform Pull Request Automation | Atlantis</a></p>

<p><a href="https://pages.cs.wisc.edu/~remzi/OSTEP/">Operating Systems: Three Easy Pieces</a> - Duplicate?</p>

<p><a href="https://gruntwork.io/devops-checklist/#server-side">Production Readiness Checklist</a></p>

<p><a href="https://k6.io/">Load testing for engineering teams | k6</a></p>

<p><a href="https://blog.gruntwork.io/terragrunt-how-to-keep-your-terraform-code-dry-and-maintainable-f61ae06959d8">Terragrunt: how to keep your Terraform code DRY and maintainable | by Yevgeniy Brikman | Gruntwork</a></p>

<p><a href="https://aws.amazon.com/blogs/networking-and-content-delivery/centralized-dns-management-of-hybrid-cloud-with-amazon-route-53-and-aws-transit-gateway/">Centralized DNS management of hybrid cloud with Amazon Route 53 and AWS Transit Gateway | Networking &amp; Content Delivery</a></p>

<p><a href="https://slatestarcodex.com/2014/12/17/the-toxoplasma-of-rage/">The Toxoplasma Of Rage | Slate Star Codex</a></p>

<p><a href="https://fortelabs.co/blog/basboverview/">Building a Second Brain: An Overview - Forte Labs</a></p>

<p><a href="https://every.to/almanack/personal-leverage-how-to-truly-10x-your-productivity-2450">Personal Leverage: How to Truly 10x Your Productivity - Almanack - Every</a></p>

<p><a href="https://tailscale.com/blog/how-nat-traversal-works/">How NAT traversal works · Tailscale</a></p>

<p><a href="https://hashnode.com/">Hashnode: Everything you need to start blogging as a developer!</a> - Will check this out</p>

<p><a href="https://brandur.org/idempotency-keys">Implementing Stripe-like Idempotency Keys in Postgres — brandur.org</a></p>

<p><a href="https://sidequestjobs.com/">SideQuest - Short Term Tech Jobs</a></p>

<p><a href="https://erikbern.com/2021/07/07/the-data-team-a-short-story.html">Building a data team at a mid-stage startup: a short story · Erik Bernhardsson</a></p>

<p><a href="https://goomics.net/">Goomics</a> - Comics about life at Google</p>

<p><a href="https://getaether.net/">Aether</a> -  Peer-to-peer ephemeral public communities</p>

<p><a href="https://anagora.org/index">[[index]]</a> - This Agora is a wiki like experimental social network and distributed knowledge graph</p>

<p><a href="https://www.knowledgefutures.org/">Knowledge Futures Group</a> - Knowledge Futures Group is a 501c3 nonprofit building open source technology and collaborating with communities of practice to design and build the public digital infrastructure needed for effective, equitable, and sustainable knowledge futures.</p>

<p><a href="https://typesense.org/blog/the-unreasonable-effectiveness-of-just-showing-up-everyday/">The unreasonable effectiveness of just showing up everyday | Typesense</a> - Showing up is half of the work</p>

<p><a href="https://ungleich.ch/u/products/viirb-ipv6-box/">The VPN IPv6 IoT Router Box (VIIRB) - ungleich.ch</a></p>

<p><a href="https://johnnydecimal.com/">Home | Johnny•Decimal</a> - Digital organisation</p>

<p><a href="https://cheapskatesguide.org/articles/war-on-gp-computing.html">Taking a Stand in the War on General-Purpose Computing</a> - “We must control the client”</p>

<p><a href="https://michaelfeathers.silvrback.com/10-papers-every-developer-should-read-at-least-twice">Michael Feathers - 10 Papers Every Developer Should Read</a></p>

<p><a href="https://www.quantamagazine.org/how-bells-theorem-proved-spooky-action-at-a-distance-is-real-20210720/">How Bell’s Theorem Proved ‘Spooky Action at a Distance’ Is Real | Quanta Magazine</a></p>

<p><a href="https://infrequently.org/2021/07/hobsons-browser/">Hobson’s Browser - Infrequently Noted</a> - In apps browser bad</p>

<p><a href="https://training.galaxyproject.org/training-material/topics/admin/tutorials/ansible/tutorial.html#what-is-ansible">Ansible</a></p>

<p><a href="https://sites.google.com/site/yartikhiy/home/ipv6book">yartikhiy - IPv6 for IPv4 Experts (draft)</a></p>

<p><a href="https://en.wikipedia.org/wiki/Equanimity">Equanimity - Wikipedia</a> - Equanimity (Latin: æquanimitas, having an even mind; aequus even; animus mind/soul) is a state of psychological stability and composure which is undisturbed by experience of or exposure to emotions, pain, or other phenomena that may cause others to lose the balance of their mind. The virtue and value of equanimity is extolled and advocated by a number of major religions and ancient philosophies.</p>

<p><a href="https://www.wired.com/story/to-do-apps-failed-productivity-tools/">Hundreds of Ways to Get S#!+ Done—and We Still Don’t | WIRED</a> - stop reading productivity how-do. pick a system and stick with it</p>]]></content><author><name>Arun Kant Sharma</name></author><summary type="html"><![CDATA[I have bookmarked lots of articles over the years. I hardly visit them but I don’t want to delete them either. I want to clean up my browser and start fresh…]]></summary></entry><entry><title type="html">My bookmarks over the years (part 4)</title><link href="/2022/10/22/bookmarks-i-collected-part-4.html" rel="alternate" type="text/html" title="My bookmarks over the years (part 4)" /><published>2022-10-22T00:00:00+00:00</published><updated>2022-10-22T00:00:00+00:00</updated><id>/2022/10/22/bookmarks-i-collected-part-4</id><content type="html" xml:base="/2022/10/22/bookmarks-i-collected-part-4.html"><![CDATA[<p>I have bookmarked lots of articles over the years. I hardly visit them but I don’t want to delete them either. I want to clean up my browser and start fresh…</p>

<p>So here is the dump from my browser bookmarks in some order and some brief notes</p>

<hr />

<p><a href="https://www.iqt.org/bewear-python-typosquatting-is-about-more-than-typos/">Bewear! Python Typosquatting Is About More Than Typos – In-Q-Tel</a> - supply chain attacks</p>

<p><a href="https://graphitemaster.github.io/fibers/">Fibers, Oh My!</a> - python, fiber and green threads etc</p>

<p><a href="https://secretgeek.github.io/html_wysiwyg/html.html">This page is a truly naked, brutalist html quine.</a> - HTML quine</p>

<p><a href="https://docs.microsoft.com/en-us/azure/architecture/patterns/">Cloud design patterns - Azure Architecture Center | Microsoft Docs</a></p>

<p><a href="https://moultano.wordpress.com/2020/10/18/why-deep-learning-works-even-though-it-shouldnt/">Why Deep Learning Works Even Though It Shouldn’t – Ryan Moulton’s Articles</a> - Don’t understand Second Descent Regime</p>

<p><a href="https://joindeleteme.com/">Remove Personal Info from Google - DeleteMe</a></p>

<p><a href="https://www.mathventurepartners.com/blog/2016/9/15/startup-financial-modeling-part-1-what-is-a-financial-model">Startup Financial Modeling, Part 1: What is a Financial Model? — MATH Venture Partners</a></p>

<p><a href="https://chsasank.github.io/writing-maketh-man.html">Writing Maketh a Man - Sasank’s Blog</a> - Start writing regularly</p>

<p><a href="https://0xax.gitbooks.io/linux-insides/content/Cgroups/linux-cgroups-1.html">Introduction to Control Groups · Linux Inside</a></p>

<p><a href="https://v2.grommet.io/">Grommet</a> - PWA and native app desiner</p>

<p><a href="https://tailwindcss.com/">Tailwind CSS - A Utility-First CSS Framework for Rapidly Building Custom Designs</a> - I like it</p>

<p><a href="https://www.dendron.so/">Dendron - Dendron</a> - Like obsidian/roam research</p>

<p><a href="https://fortelabs.co/blog/para/">The PARA Method: A Universal System for Organizing Digital Information - Forte Labs</a></p>

<p><a href="https://web.mit.edu/kerberos/www/dialogue.html">Designing an Authentication System: a Dialogue in Four Scenes</a> - Kerberos design</p>

<p><a href="https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function/">What Color is Your Function? – journal.stuffwithstuff.com</a> - Problem when stacking async functionality is tagged on top of a mature language. I feel JS got lucky in this regard as there was no io as such and no OS access earlier and event base system was perfect for UI apps</p>

<p><a href="http://www.paulgraham.com/avg.html">Beating the Averages</a> - Learn lisp to expand your mind</p>

<p><a href="http://www.repec.org/">RePEc: Research Papers in Economics</a> - Economics is social science</p>

<p><a href="https://inspirehep.net/">Home - INSPIRE</a> - Discover High-Energy Physics Content</p>

<p><a href="https://github.com/erebe/personal-server/blob/master/README.md#background">personal-server/README.md at master · erebe/personal-server · GitHub</a> - - personal server with DNS and email management</p>

<p><a href="https://natanyellin.com/posts/tracking-running-processes-on-linux/">The Difficulties of Tracking Running Processes on Linux :: Tech Notes by Natan Yellin</a> - PID gets recycled</p>

<p><a href="https://www.redhat.com/sysadmin/cgroups-part-one">A Linux sysadmin’s introduction to cgroups | Enable Sysadmin</a></p>

<p><a href="https://microconf.com/">MicroConf - The Most Trusted Community for Non-Venture Track SaaS Founders</a></p>

<p><a href="https://pgstats.dev/">Postgres Observability</a></p>

<p><a href="http://osv.io/">OSv - the operating system designed for the cloud</a></p>

<p><a href="https://msportals.xyz/">Administrator Portals | Microsoft Portals</a> - list of MS portals</p>

<p><a href="https://pablasso.com/high-performance-individuals-and-teams/">High performance individuals and teams | Pablasso</a> - avoid bad engineer</p>

<p><a href="https://www.confluent.io/blog/turning-the-database-inside-out-with-apache-samza/">Turning the database inside-out with Apache Samza - Confluent</a> - Also check out dbt</p>

<p><a href="http://pages.stern.nyu.edu/~adamodar/New_Home_Page/webcastvalonline.htm">Valuation Online Class</a> - Aswath Damodaran class</p>

<p><a href="https://jonathan.bergknoff.com/journal/terraform-pain-points/">Jonathan Bergknoff: Terraform Pain Points</a></p>

<p><a href="https://www.eater.com/2018/7/3/17531192/vertical-farming-agriculture-hydroponic-greens">Can Vertical Farming Disrupt the Agriculture Industry? - Eater</a> - Probably no</p>

<p><a href="https://www.pianodreamers.com/ways-to-learn-piano/">What’s the Best Way to Learn Piano in 2021? (In-Depth Guide)</a></p>

<p><a href="https://gtoolkit.com/">Glamorous Toolkit</a> - Pitch: 
The Moldable Development Environment. Glamorous Toolkit is a multi-language notebook. A fancy code editor. A software analysis platform. A visualization engine. A knowledge management system. All programmable. Free and open-source.</p>

<p><a href="https://xtermjs.org/">Xterm.js</a></p>

<p><a href="https://venam.nixers.net/blog/unix/2021/02/07/audio-stack.html">Making Sense of The Audio Stack On Unix</a></p>

<p><a href="https://computing.llnl.gov/tutorials/pthreads/">POSIX Threads Programming</a></p>

<p><a href="https://blog.detectify.com/2020/11/10/common-nginx-misconfigurations/">Common Nginx misconfigurations that leave your web server open to attack | Detectify Blog</a></p>

<p><a href="http://www.lighterra.com/papers/modernmicroprocessors/">Modern Microprocessors - A 90-Minute Guide!</a></p>

<p><a href="https://www.shibboleth.net/products/">Products - Shibboleth Consortium</a></p>

<p><a href="https://www.focalboard.com/">Focalboard: Open source alternative to Trello, Asana, and Notion</a></p>

<p><a href="https://davidsekar.com/misc/block-bsnl-ads-using-ipsec">Block BSNL ADs using IPSec - Davidsekar.com</a></p>

<p><a href="https://www.armscontrolwonk.com/">Arms Control Wonk – an arms control blog network</a></p>

<p><a href="https://boris-marinov.github.io/category-theory-illustrated/04_order/">Category Theory Illustrated - Orders</a></p>

<p><a href="https://www.lesswrong.com/posts/JZZENevaLzLLeC3zn/predictive-coding-has-been-unified-with-backpropagation">Predictive Coding has been Unified with Backpropagation - LessWrong</a> - artificial intelligence and neuroscience</p>

<p><a href="https://news.ycombinator.com/item?id=21850155">Monica: Open-source personal CRM | Hacker News</a> - personal CRM, didn’t work out</p>

<p><a href="https://www.etesync.com/">EteSync - Secure Data Sync</a> - Secure, end-to-end encrypted, and privacy respecting sync for your contacts, calendars, tasks and notes.</p>

<p><a href="https://www.drorpoleg.com/the-ponzi-career/">The Ponzi Career</a> - The Ponzi Career. The future of work is a pyramid scheme, where every person sells his favorite person to the next person.</p>

<p><a href="https://bitclout.com/">Welcome to BitClout</a> - It just keep giving</p>

<p><a href="https://darknetdiaries.com/">Darknet Diaries – True stories from the dark side of the Internet.</a> - a podcast</p>

<p><a href="https://beepb00p.xyz/sad-infra.html#data_is_trapped">The sad state of personal data and infrastructure | beepb00p</a> - This is a sad state of tech</p>

<p><a href="https://indieweb.org/">IndieWeb</a></p>

<p><a href="https://computationalthinking.mit.edu/Fall20/">18.S191 Introduction to Computational Thinking</a></p>

<p><a href="https://en.wikipedia.org/wiki/Rattleback">Rattleback - Wikipedia</a> - rotate on its axis in a preferred direction. If spun in the opposite direction, it becomes unstable, “rattles” to a stop and reverses its spin to the preferred direction.</p>

<p><a href="https://stackoverflow.com/questions/22677070/additional-field-while-serializing-django-rest-framework">Additional field while serializing django rest framework - Stack Overflow</a></p>

<p><a href="https://calyxos.org/">CalyxOS</a> - privacy oriented android fork</p>

<p><a href="https://k3tan.com/starting-a-new-digital-identity">Starting a new digital identity — k3tan</a> - Read like a movie script</p>

<p><a href="https://news.ycombinator.com/item?id=27017041">Request for comments regarding topics to be discussed at Dark Patterns workshop | Hacker News</a></p>

<p><a href="https://til.simonwillison.net/">Simon Willison: TIL</a> - short writings I can replicate</p>

<p><a href="https://medium.com/nerd-for-tech/nlp-zero-to-one-full-course-4f8e1902c379">NLP Zero to One: Full Course. Simple, Clear and Precise Explanations… | by Kowshik chilamkurthy | Nerd For Tech | Mar, 2021 | Medium</a></p>

<p><a href="https://tomayko.com/blog/2009/unicorn-is-unix">I like Unicorn because it’s Unix</a> - best unicorn internal tutorial</p>

<p><a href="https://researchcylera.wpcomstaging.com/2019/04/16/pe-dicom-medical-malware/">HIPAA-Protected Malware? Exploiting DICOM Flaw to Embed Malware in CT/MRI Imagery – Cylera Labs</a></p>

<p><a href="https://www.dvtk.org/">DVTk · DVTk, a must have for anybody working with DICOM!</a></p>

<p><a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2039858/">Mastering DICOM with DVTk</a></p>

<p><a href="https://learn-anything.xyz/">Learn Anything</a> - High promising, not good execution</p>

<p><a href="https://stratechery.com/">Stratechery by Ben Thompson – On the business, strategy, and impact of technology.</a></p>

<p><a href="https://www.integralist.co.uk/posts/python-asyncio/">Guide to Concurrency in Python with Asyncio ⋆ Mark McDonnell</a></p>

<hr />
<p>To be continued…</p>]]></content><author><name>Arun Kant Sharma</name></author><summary type="html"><![CDATA[I have bookmarked lots of articles over the years. I hardly visit them but I don’t want to delete them either. I want to clean up my browser and start fresh…]]></summary></entry><entry><title type="html">My bookmarks over the years (part 3)</title><link href="/2022/10/21/bookmarks-i-collected-part-3.html" rel="alternate" type="text/html" title="My bookmarks over the years (part 3)" /><published>2022-10-21T00:00:00+00:00</published><updated>2022-10-21T00:00:00+00:00</updated><id>/2022/10/21/bookmarks-i-collected-part-3</id><content type="html" xml:base="/2022/10/21/bookmarks-i-collected-part-3.html"><![CDATA[<p>I have bookmarked lots of articles over the years. I hardly visit them but I don’t want to delete them either. I want to clean up my browser and start fresh…</p>

<p>So here is the dump from my browser bookmarks in some order and some brief notes</p>

<hr />

<p><a href="https://gist.github.com/XVilka/8346728">True Colour (16 million colours) support in various terminal applications and terminals</a></p>

<p><a href="https://github.com/alexmojaki/snoop">alexmojaki/snoop: A powerful set of Python debugging tools, based on PySnooper</a> - promising stuff, never tried it</p>

<p><a href="https://stackoverflow.com/questions/4628122/how-to-construct-a-timedelta-object-from-a-simple-string">python - How to construct a timedelta object from a simple string - Stack Overflow</a></p>

<p><a href="https://deparkes.co.uk/2018/06/04/use-tox-with-anaconda/">Use Tox With Anaconda - deparkes</a> - Good tool for library devs, for application Bazel would be fine</p>

<p><a href="https://jareddillard.com/blog/continuous-deployment-of-a-sphinx-website-with-using-jenkins-and-docker.html">Continuous deployment of a Sphinx website using Jenkins and Docker | Jared Dillard</a></p>

<p><a href="https://pythonhosted.org/an_example_pypi_project/sphinx.html">Documenting Your Project Using Sphinx — an_example_pypi_project v0.0.5 documentation</a></p>

<p><a href="https://support.dcmtk.org/redmine/projects/dcmtk/wiki/DICOM_NetworkingIntroduction">DICOM NetworkingIntroduction - DCMTK - OFFIS DCMTK and DICOM Projects</a></p>

<p><a href="https://dev.to/emmawedekind/top-3-tools-for-boosting-your-productivity-1lh">Top 3 Tools For Boosting Your Productivity - DEV Community 👩‍💻👨‍💻</a> Notion, spark mail and Fantastical 2 calandar app</p>

<p><a href="https://dev.to/jamesmh/what-are-the-highest-paying-software-developer-jobs-how-can-i-land-one-3dj">What Are The Highest Paying Software Developer Jobs &amp; How Can I Land One? - DEV Community 👩‍💻👨‍💻</a> - Become remarkable in your area</p>

<p><a href="https://www.snoyman.com/blog/2018/10/introducing-rust-crash-course">Introducing the Rust crash course</a> - Doesn’t seem active anymore</p>

<p><a href="https://www.gnu.org/software/libc/manual/html_node/Blocking-Signals.html#Blocking-Signals">Blocking Signals (The GNU C Library)</a> - I get to know it while making a fork server like unicorn</p>

<p><a href="https://exercism.io/">Exercism</a> - Did some rust track. Should restart this</p>

<p><a href="https://kubernetes.io/docs/reference/kubectl/docker-cli-to-kubectl/">kubectl for Docker Users - Kubernetes</a></p>

<p><a href="https://github.com/ahmetb/kubectx">ahmetb/kubectx: Switch faster between clusters and namespaces in kubectl</a> - Never tried it</p>

<p><a href="https://www.amazon.in/Phoenix-Project-DevOps-Helping-Business/dp/0988262592">Buy The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win Book Online at Low Prices in India | The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win Reviews &amp; Ratings - Amazon.in</a> - Books to read</p>

<p><a href="https://itnext.io/argo-workflow-engine-for-kubernetes-7ae81eda1cc5">Argo: Workflow Engine for Kubernetes - ITNEXT</a> - CRDs was all the hype then. Everyone got CRDs</p>

<p><a href="https://medium.com/@thms.hmm/docker-for-mac-with-kubernetes-enable-k8s-dashboard-62fe036b7480">Docker for Mac with Kubernetes — Enable K8S Dashboard</a></p>

<p><a href="https://medium.com/@thms.hmm/docker-for-mac-with-kubernetes-ingress-controller-with-traefik-e194919591bb">Docker for Mac with Kubernetes — Ingress Controller with Traefik</a></p>

<p><a href="https://blog.getambassador.io/kubernetes-ingress-nodeport-load-balancers-and-ingress-controllers-6e29f1c44f2d">Kubernetes Ingress 101: NodePort, Load Balancers, and Ingress Controllers</a></p>

<p><a href="https://eprint.iacr.org/2016/071">Cryptology ePrint Archive: Report 2016/071 - Reverse-Engineering the S-Box of Streebog, Kuznyechik and STRIBOBr1 (Full Version)</a></p>

<p><a href="https://vim-adventures.com/">VIM Adventures</a> - gamified vim learning</p>

<p><a href="https://brettterpstra.com/">BrettTerpstra.com</a> - Not sure why I bookmarked it</p>

<p><a href="https://en.wikipedia.org/wiki/List_of_eponymous_laws">List of eponymous laws - Wikipedia</a> - Learn word ‘eponymous’</p>

<p><a href="https://kubernetes.io/docs/tasks/administer-cluster/cpu-management-policies/#cpu-management-policies">Control CPU Management Policies on the Node - Kubernetes</a> - to move from docker-compose to k8s</p>

<p><a href="https://godbolt.org/">Compiler Explorer</a> - internet is beautiful</p>

<p><a href="https://medium.com/faun/the-missing-introduction-to-containerization-de1fbb73efc5">The Missing Introduction To Containerization - Faun - Medium</a> - container history</p>

<p><a href="https://puppetlabs.github.io/showoff/quickstart.html">showoff</a> - interacive ppts</p>

<p><a href="http://pages.cs.wisc.edu/%7Eremzi/OSTEP/">Operating Systems: Three Easy Pieces</a> - book on OS. virtualization, concurrency, and persistence</p>

<p><a href="https://apenwarr.ca/log/20181113">mtime comparison considered harmful - apenwarr</a> - mtime nuances</p>

<p><a href="https://rete.js.org/#/docs">Rete.js</a> - visual programming (maybe like sketch, haven’t tried)</p>

<p><a href="https://www.youtube.com/watch?v=MBnnXbOM5S4">(11) The more general uncertainty principle, beyond quantum - YouTube</a> - Duality of partical and waves is more general then just physics</p>

<p><a href="https://timr.co/server-side-rendering-is-a-thiel-truth">Server-Side Rendering is a Thiel Truth</a></p>

<p><a href="https://oneraynyday.github.io/dev/2020/05/03/Analyzing-The-Simplest-C++-Program/">Analyzing The Simplest C++ Program · Ray</a> - ELF stuff</p>

<p><a href="https://www.tomdalling.com/toms-data-onion/">Tom’s Data Onion - A Programming Puzzle In A Text File</a></p>

<p><a href="https://medium.com/faun/opensource-single-sign-on-sso-e52d39e1927">OpenSource Single Sign-On(SSO) - FAUN - Medium</a> - Keycloak stuff</p>

<p><a href="https://blog.shichao.io/2015/04/17/setup_openldap_server_with_openssh_lpk_on_ubuntu.html">Setting up OpenLDAP server with OpenSSH-LPK on Ubuntu 14.04 — Shichao’s Blog</a></p>

<p><a href="https://corecursive.com/054-software-that-doesnt-suck/">Building Subversion - CoRecursive Podcast</a> - some interview, not going to read</p>

<p><a href="https://www.jeffgeerling.com/blog/2020/ansible-101-jeff-geerling-youtube-streaming-series">Ansible 101 by Jeff Geerling - YouTube streaming series | Jeff Geerling</a> - Ansible stuff. Official docs are better</p>

<p><a href="https://cooperpress.com/">Cooperpress: Email Newsletters for Developers</a> - all weakly newsletters</p>

<p><a href="https://latacora.singles/2019/07/16/the-pgp-problem.html">Latacora - The PGP Problem</a> - PGP UX sucks</p>

<p><a href="https://community.letsencrypt.org/t/trying-to-get-a-freeipa-csr-signed-by-letsencrypt/129264/3">Trying to get a freeipa CSR signed by LetsEncrypt - Help - Let’s Encrypt Community Support</a></p>

<p><a href="https://support.simpledns.plus/kb/a63/how-to-delegate-a-sub-domain-to-other-dns-servers.aspx">How to delegate a sub-domain to other DNS servers - Simple DNS Plus</a></p>

<p><a href="https://www.digitalocean.com/community/tutorials/how-to-set-up-centralized-linux-authentication-with-freeipa-on-centos-7#step-5-%E2%80%94-verifying-the-freeipa-server-functions">How To Set Up Centralized Linux Authentication with FreeIPA on CentOS 7 | DigitalOcean</a></p>

<p><a href="https://fiercesw.com/blog/well-well-rhel-a-look-at-the-rhel-8-beta">Well, well, RHEL - A look at the RHEL 8 Beta - Fierce Software</a></p>

<p><a href="https://pagure.io/freeipa/issue/2648">Issue #2648: ipa will not install on amazon ec2 - freeipa - Pagure.io</a></p>

<p><a href="https://chamathb.wordpress.com/2019/06/21/setting-up-rhel-idm-with-integrated-dns-on-aws/">Setting up RHEL IdM with integrated DNS on AWS – Chamath’s Blog</a></p>

<p><a href="https://medium.com/@securityshenaningans/why-you-should-always-scan-udp-part-2-2-42050fb136d8">Why you should always scan UDP ports (part 2/2) | by Security Shenanigans | Aug, 2020 | Medium</a></p>

<p><a href="https://en.wikipedia.org/wiki/United_States_v._Paramount_Pictures,_Inc.">United States v. Paramount Pictures, Inc. - Wikipedia</a> - Hollywood antitrust case</p>

<p><a href="https://tilde.town/">tilde.town</a> - shared linux computer</p>

<p><a href="https://towardsdatascience.com/books-for-quants-1b0f51dd7745">Books for Quants. Book list for mathematical finance… | by Luke Posey | Towards Data Science</a></p>

<p><a href="https://natethesnake.com/">Nate the Snake</a> - long story, decent return</p>

<p><a href="https://slurm.schedmd.com/overview.html">Slurm Workload Manager - Overview</a> - cluster management and job scheduling system</p>

<p><a href="http://bofh.bjash.com/">The Bastard Operator From Hell Complete</a> - Stories and Rants</p>

<p><a href="https://noyaml.com/">🚨🚨 That’s a lot of YAML 🚨🚨</a> - Satire like mocking of yaml</p>

<p><a href="https://twitter.com/hodapp/status/1304478215197593600">Eli Hodapp on Twitter: “Here’s what’s TRULY unbelievable about today’s App Store policy update to “"”allow””” xCloud and Stadia, that you can really only appreciate if you’ve been following the wacky decisions of Apple on how to awkwardly handle everything to do with games… a 🥁*drumroll*🥁 THREAD” / Twitter</a> - Tweet deleted</p>

<p><a href="http://cdar.berkeley.edu/wp-content/uploads/2017/04/Lisa-Goldberg-reviews-The-Book-of-Why.pdf">Lisa-Goldberg-reviews-The-Book-of-Why.pdf</a> - Dead link</p>

<p><a href="https://www.youtube.com/watch?v=v2tExSUSt8o">Multicloud Networking - An Overview - YouTube</a> -</p>

<p><a href="https://wiki.openstack.org/wiki/XenServer/VirtualBox">XenServer/VirtualBox - OpenStack</a></p>

<p><a href="https://trumporbot.com/">Trump Or Bot?</a></p>

<p><a href="https://www.vice.com/en_us/article/bjvjd3/apple-doesnt-trust-you">Apple Doesn’t Trust You</a></p>

<p><a href="https://fasterthanli.me/articles/so-you-want-to-live-reload-rust">So you want to live-reload Rust - fasterthanli.me</a></p>

<p><a href="https://i.redd.it/lktudl5uuip51.jpg">I don’t want solution. I want to be mad</a></p>

<hr />
<p>To be continued…</p>]]></content><author><name>Arun Kant Sharma</name></author><summary type="html"><![CDATA[I have bookmarked lots of articles over the years. I hardly visit them but I don’t want to delete them either. I want to clean up my browser and start fresh…]]></summary></entry><entry><title type="html">My bookmarks over the years (part 2)</title><link href="/2022/10/19/bookmarks-i-collected-part-2.html" rel="alternate" type="text/html" title="My bookmarks over the years (part 2)" /><published>2022-10-19T00:00:00+00:00</published><updated>2022-10-19T00:00:00+00:00</updated><id>/2022/10/19/bookmarks-i-collected-part-2</id><content type="html" xml:base="/2022/10/19/bookmarks-i-collected-part-2.html"><![CDATA[<p>I have bookmarked lots of articles over the years. I hardly visit them but I don’t want to delete them either. I want to clean up my browser and start fresh…</p>

<p>So here is the dump from my browser bookmarks in some order and some brief notes</p>

<hr />
<p><a href="https://gauriatiq.medium.com/c-native-addon-independent-of-node-js-version-using-napi-node-addon-api-and-cmake-53315582cbd1">C++ Native Addon independent of Node.js version using Napi/node-addon-api and Cmake | by Atiq Gauri | Medium</a> - Some tutorials</p>

<p><a href="https://gauriatiq.medium.com/electron-app-with-c-back-end-as-native-addon-napi-c67867f4058">Electron App with C++ backend as Native Addon (Napi) | by Atiq Gauri | Medium</a> - More tutorials</p>

<p><a href="https://unikube.io/blog/how-does-kubernetes-development-work/#k3dk3s-lightweight-kubernetes-in-docker">How does local Kubernetes development work? | Unikube Blog | UNIKUBE</a> - tried k3d but k3s is better</p>

<p><a href="https://github.com/Microsoft/nodejs-guidelines/blob/master/windows-environment.md#compiling-native-addon-modules">nodejs-guidelines/windows-environment.md at master · microsoft/nodejs-guidelines</a> - node.js resources</p>

<p><a href="https://www.wix.engineering/post/virtual-monorepo-for-bazel">Too Much Code for Bazel Monorepo? Try Going Virtual</a> - bazel resources</p>

<p><a href="https://www.microsoft.com/en-us/research/uploads/prod/2018/03/build-systems.pdf">Build Systems à la Carte - build-systems.pdf</a> - classifications of build systems</p>

<p><a href="https://betterprogramming.pub/2020-021-javascript-omni-packages-bae42d446d6c">JavaScript Omni-Packages. How to package JavaScript libraries for… | by Joe Honton | Better Programming</a> - JS resource</p>

<p><a href="https://hacks.mozilla.org/2018/03/es-modules-a-cartoon-deep-dive/">ES modules: A cartoon deep-dive - Mozilla Hacks - the Web developer blog</a> - Best explaination of how JS modules works so far. It show how much thought goes into evolving a language and also keep existing codebase maintained</p>

<p><a href="https://www.freecodecamp.org/news/modules-in-javascript/">Modules in JavaScript – CommonJS and ESmodules Explained</a></p>

<p><a href="https://cloud.google.com/blog/products/management-tools/sre-principles-and-flashcards-to-design-nalsd">SRE principles and flashcards to design NALSD | Google Cloud Blog</a> - Flashcards for SRE stuff</p>

<p><a href="https://www.stevenengelhardt.com/2021/09/22/practical-bazel-depending-on-a-system-provided-c-cpp-library/">Practical Bazel: Depending on a System-Provided C/C++ Library | Steven Engelhardt</a> -</p>

<p><a href="https://stackoverflow.com/questions/41553609/what-is-the-right-way-to-refer-bazel-data-files-in-python">What is the right way to refer bazel data files in python? - Stack Overflow</a> - Runfiles and stuff</p>

<p><a href="https://bazelbuild.github.io/rules_nodejs/examples#react">Examples | rules_nodejs</a></p>

<p><a href="https://about.gitlab.com/handbook/">Handbook | GitLab</a> - Every company should have handbook like that</p>

<p><a href="https://guzey.com/personal/what-should-you-do-with-your-life/">What Should You Do with Your Life? Directions and Advice - Alexey Guzey</a></p>

<p><a href="https://publishing-project.rivendellweb.net/bazel-build-system-frontend-styling/">Bazel build system: Frontend Styling – The Publishing Project</a></p>

<p><a href="https://adamwathan.me/2019/10/17/persistent-layout-patterns-in-nextjs/">Persistent Layout Patterns in Next.js – Adam Wathan</a></p>

<p><a href="https://superfastpython.com/python-concurrency-choose-api/">Choose the Right Python Concurrency API</a></p>

<p><a href="https://www.collaborativefund.com/blog/little-ways-the-world-works/">Little Ways The World Works · Collaborative Fund</a></p>

<p><a href="https://festivus.dev/kubernetes/">Kubernetes</a> - I enjoy gifs</p>

<p><a href="https://www.feeonlyindia.com/">HOME | Fee-Only India</a> - Claim to be most ethical</p>

<p><a href="https://training.kalzumeus.com/lifecycle-emails">Hacking Lifecycle Emails for Software Companies</a></p>

<p><a href="https://www.kalzumeus.com/2012/01/23/salary-negotiation/">Salary Negotiation: Make More Money, Be More Valued | Kalzumeus Software</a> - Best guide on salary negotiation so far</p>

<p><a href="https://signalvnoise.com/archives2/dont_scar_on_the_first_cut.php">Don’t scar on the first cut - Signal vs. Noise (by 37signals)</a> - Policies are codified overreactions to unlikely-to-happen-again situations. A collective punishment for the wrong-doings of a one-off. And unless you want to treat the people in your environment as five year-olds, “Because The Policy Said So” is not a valid answer.</p>

<p><a href="https://mycelial.com/">Mycelial - The Best Platform for Synchronized Apps | Mycelial</a> - sync sqlite peer-to-peer</p>

<p><a href="https://slofile.com/">Slofile - Public Slack groups to join</a> - list of public slack channel to join</p>

<h2 id="how-to-crowdsource-and-curate-a-team-newsletter-in-slack--slack"><a href="https://slack.com/intl/en-in/blog/productivity/how-to-crowdsource-and-curate-a-team-newsletter-in-slack">How to crowdsource and curate a team newsletter in Slack | Slack</a></h2>
<p>To be continued…</p>]]></content><author><name>Arun Kant Sharma</name></author><summary type="html"><![CDATA[I have bookmarked lots of articles over the years. I hardly visit them but I don’t want to delete them either. I want to clean up my browser and start fresh…]]></summary></entry><entry><title type="html">My bookmarks over the years (part 1)</title><link href="/2022/10/10/bookmarks-i-collected-part-1.html" rel="alternate" type="text/html" title="My bookmarks over the years (part 1)" /><published>2022-10-10T00:00:00+00:00</published><updated>2022-10-10T00:00:00+00:00</updated><id>/2022/10/10/bookmarks-i-collected-part-1</id><content type="html" xml:base="/2022/10/10/bookmarks-i-collected-part-1.html"><![CDATA[<p>I have bookmarked lots of articles over the years. I hardly visit them but I don’t want to delete them either. I want to clean up my browser and start fresh…</p>

<p>So here is the dump from my browser bookmarks in some order and some brief notes</p>

<hr />
<p><a href="https://lwn.net/Articles/630727/">How programs get run [LWN.net]</a> - Explain how exec works in linux. Detailed explaination in book <a href="https://man7.org/tlpi/index.html">The Linux Programming Interface</a></p>

<p><a href="https://tailscale.com/blog/absolute-scale/">Absolute scale corrupts absolutely · Tailscale</a> - Large scale invites bigger currptions :shrugs:</p>

<p><a href="https://www.gkogan.co/blog/big-cloud/">When AWS, Azure, or GCP Becomes the Competition | Greg Kogan</a> - Everyone startup should fear “trillion pound” gorillas and prepare accordingly</p>

<p><a href="https://www.cnbc.com/2018/04/11/goldman-asks-is-curing-patients-a-sustainable-business-model.html">Goldman asks: ‘Is curing patients a sustainable business model?’</a> - The potential to deliver ‘one shot cures’ is one of the most attractive aspects of gene therapy but it could represent a challenge for genome medicine developers looking for sustained cash flow.</p>

<p><a href="https://www.theguardian.com/society/2021/sep/09/transport-noise-linked-to-increased-risk-of-dementia-study-finds">Transport noise linked to increased risk of dementia, study finds | Dementia | The Guardian</a> - I wanted to follow up on this study but I haven’t found anything after this</p>

<p><a href="https://gafferongames.com/post/what_every_programmer_needs_to_know_about_game_networking/">What Every Programmer Needs To Know About Game Networking | Gaffer On Games</a> - Some history and brief on multiplayer game networking</p>

<p><a href="https://xahteiwi.eu/resources/presentations/no-we-wont-have-a-video-call-for-that/">No, We Won’t Have a Video Call for That! - xahteiwi.eu</a> - Async communication, “ChatOps”, avoid/less (sync) meetings, write. things. down</p>

<p><a href="https://kevinmunger.substack.com/p/facebook-is-other-people">Facebook is Other People - by Kevin Munger - Never Met a Science</a></p>
<ul>
  <li>At the door of every contented, happy man somebody should stand with a little hammer, constantly tapping, to remind him that unhappy people exist, that however happy he may be, sooner or later life will show him its claws, some calamity will befall him—illness, poverty, loss—and nobody will hear or see, just as he doesn’t hear or see others now. But there is nobody with a little hammer, the happy man lives on, and the petty cares of life stir him only slightly, as wind stirs an aspen—and everything is fine.</li>
</ul>

<p><a href="https://medium.com/@sixacegames/how-google-destroyed-our-startup-by-terminating-our-google-play-developer-account-6a8cca09ea88">How Google destroyed our startup by terminating our Google Play Developer Account | by 6Ace Games | Oct, 2021 | Medium</a> - Big Tech horrer story</p>

<p><a href="https://fqxi.org/community/forum/topic/3345">FQXi Community</a> - Counterfactual quantum computation is a method of inferring the result of a computation without actually running a quantum computer otherwise capable of actively performing that computation. I-know-some-of-these-words.gif</p>

<p><a href="http://math.andrej.com/2007/09/28/seemingly-impossible-functional-programs/">Mathematics and Computation | Seemingly impossible functional programs</a> - some functional programming wizardry</p>

<p><a href="https://axisofordinary.substack.com/p/the-most-counterintuitive-facts-in">The most counterintuitive facts in all of mathematics, computer science, and physics - by Alexander Kruel - Axis of Ordinary</a></p>

<p><a href="https://www.youtube.com/watch?v=g4-EyNJhcQ8">Analysis: Playing, Fast and Slow - YouTube flow, thinking fast and slow</a></p>

<p><a href="https://byrnehobart.medium.com/writing-is-networking-for-introverts-5cac14ad4c77">Writing is Networking for Introverts | by Byrne Hobart | Medium</a> - Introduced new concept: “microfamous”</p>

<p><a href="https://mathoverflow.net/questions/358/examples-of-great-mathematical-writing/116427#116427">soft question - Examples of great mathematical writing - MathOverflow</a> - Praise for John Milnor</p>

<p><a href="https://runyourown.social/">How to run a small social network site for your friends</a> - One of my bucket list. Connect with me if you want to help</p>

<p><a href="http://www.hpmor.com/">Harry Potter and the Methods of Rationality | Petunia married a professor, and Harry grew up reading science and science fiction.</a></p>

<p><a href="https://www.theguardian.com/science/2022/jan/02/attention-span-focus-screens-apps-smartphones-social-media">Your attention didn’t collapse. It was stolen | Psychology | The Guardian</a> - “Attention economy”, “Eyeballs” whatever. In the age of meterial abundance and robotic revolution, only human attention will be scarce. Social media and many other facets of modern life are destroying our ability to concentrate. We need to reclaim our minds while we still can</p>

<p><a href="https://www.chrisbehan.ca/posts/atomic-habits">The Thinner Book: Atomic Habits by James Clear</a> - Self help book on how to build good habits</p>

<p><a href="https://healthid.ndhm.gov.in/">Home | ABHA</a> - Digital identification for health data in India</p>

<p><a href="https://medevel.com/tag/radiology/">Open-source Radiology software: DICOM &amp; PACS</a></p>

<p><a href="https://servarica.com/">ServaRICA – Customizable Infrastructure provider</a> - Some cheap compute and storage</p>

<p><a href="https://en.wikipedia.org/wiki/Michael_Freeden">Michael Freeden - Wikipedia</a> - I forgot why I bookmarked him</p>

<p><a href="https://explain.dalibo.com/">explain.dalibo.com</a> -  Visualizing and understanding PostgreSQL EXPLAIN plans made easy</p>

<p><a href="https://hoppy.network/">Hoppy</a> - I love these wiregaurd networks, I’ll buy some when I build homelab I guess, hit me up if you are interested</p>

<p><a href="https://untools.co/ishikawa-diagram">Ishikawa Diagram | Untools</a> - Problem solving using diagrams</p>

<p><a href="https://untools.co/?ref=producthunt">Tools for better thinking | Untools</a> - See above</p>

<p><a href="https://www.producthunt.com/topics/side-projects">The Best Side Projects Apps and Products of 2022 | Product Hunt</a> - Inspirations for side projects</p>

<p><a href="https://nx.dev/">Nx: Smart, Fast and Extensible Build System</a> - seemed restricted to javascript. I chose bazel.build over this and happy so far</p>

<p><a href="https://alexchesser.medium.com/professional-development-is-a-choice-e90fb8719259">Professional Development is a Choice | by Alex Chesser | Medium</a> - Professional development must be deliberate and it must be what YOU want for YOUR career</p>

<p><a href="https://blog.dave.tf/post/new-kubernetes/">A better Kubernetes, from the ground up · blog.dave.tf</a> - Some idea to improve k8s</p>

<p><a href="https://chown.me/blog/getting-my-own-asn">Why and how I got my own ASN!</a> - I want to get my own ASN sometime and run it, BGP and all that. Don’t want to spend too much though</p>

<p><a href="http://carl.flax.ie/dothingstellpeople.html">Do Things, Tell People.</a> - Best advice so far</p>

<p><a href="https://asatarin.github.io/testing-distributed-systems/">Testing Distributed Systems | Curated list of resources on testing distributed systems</a> Big list of links on distributed systems</p>

<p><a href="https://internet.nat.moe/">nato internet service</a> - Got to know this from chown.me</p>

<p><a href="https://jakobgreenfeld.com/stay-in-touch">The simple system I’m using to stay in touch with hundreds of people – Jakob Greenfeld – Experiments in Entrepreneurship and Learning</a> - Airtable System to stay in touch with hundreds of people</p>

<p><a href="https://storyset.com/">Storyset | Customize, animate and download illustration for free</a> - Free illustrations for your side projects</p>

<p><a href="https://undraw.co/illustrations">Illustrations | unDraw</a> - Free illustrations for your side projects</p>

<p><a href="https://reproof.app/blog/notes-apps-help-us-forget">Notes apps are where ideas go to die. And that’s good. · reproof</a> - And bookmark bar is where TO-READ goes to die</p>

<p><a href="https://bellmar.medium.com/the-death-of-process-cdb0151a41fe">The Death of Process. To write great policies, arm those in… | by Marianne Bellotti | Feb, 2022 | Medium</a> - Every policy or process doc I write now has a section called “Reasons to Revisit.” It is essentially a reverse success criteria. Rather than a short list of things I would expect to see if the policy was successful — which I do but in a different section — I write about things I would expect to see if the policy needed substantial revisions or to just be killed off altogether. I think laws should have this too</p>

<p><a href="https://www.samjulien.com/shy-dev-networking">The Painfully Shy Developer’s Guide to Networking for a Better Job (Without Being Creepy)</a> - Networking is painful, can introverts get a pronoun for this?</p>

<p><a href="https://elest.io/">Elestio: Fully Managed Open source</a> - Open source software packaged and ready to be deployed. Hope they are successful</p>

<p><a href="https://news.ycombinator.com/item?id=30497703">Ask HN: Books you should read when you transform from SWE into SWE-Management | Hacker News</a></p>

<p><a href="https://www.songsforteaching.com/folk/theresaholeinthebucket.php">There’s a Hole In the Bucket: Traditional Children’s Song Lyrics and Sound Clip</a> - Not sure why I bookmarked it :shrug: (I remember now, it references yak shaving)</p>

<p><a href="https://www.mindprod.com/jgloss/yakshaving.html">yak shaving : Java Glossary</a> - Something seemingly simple grows without bounds</p>

<p><a href="https://causalinf.substack.com/p/how-can-we-know-if-paid-search-advertising?s=r">How can we know if paid search advertising works?</a></p>

<p><a href="https://blog.scaleway.com/40-open-source-projects/">40+ of the best open-source tools to build your startup, from project management to infrastructure</a> - Another list of hyperlinks</p>

<p><a href="https://adoptoposs.org/">Adoptoposs · Keep open source software maintained</a> Looked many time there but didn’t found anything intersting</p>

<p><a href="https://www.gwern.net/docs/ai/gpt/inner-monologue/index">inner monologue (AI) Directory Listing · Gwern.net</a> List of links on one-shot, few-shot learning</p>

<p><a href="https://www.kalzumeus.com/2017/09/09/identity-theft-credit-reports/">Identity Theft, Credit Reports, and You | Kalzumeus Software</a> - How to fix identity theft and credit reports. US specific but general learning are good. Hope I don’t have to use this in my lifetime though</p>

<p><a href="http://www.madore.org/~david/computers/quine.html">Quines (self-replicating programs)</a> Quines what and how tutorial</p>

<p><a href="https://nickdrozd.github.io/2021/03/30/signed-char-lotte.html">signed char lotte | Something Something Programming</a> - Art x Programming</p>

<p><a href="https://freakingrectangle.wordpress.com/2022/04/15/how-to-freaking-hire-great-developers/">How to Freaking Find Great Developers By Having Them Read Code | Freaking Rectangle</a> - New way to hire people. Let me know if it worked for you</p>

<p><a href="https://news.slashdot.org/story/22/04/16/2154203/richard-stallman-speaks-on-the-state-of-free-software-and-answers-questions">Richard Stallman Speaks on the State of Free Software, and Answers Questions - Slashdot</a> RMS interview</p>

<p><a href="https://ronjeffries.com/xprog/articles/jatbaseball/">We Tried Baseball and It Didn’t Work</a> - Why agile doesn’t work, humorus</p>

<hr />
<p>To be continued…</p>]]></content><author><name>Arun Kant Sharma</name></author><summary type="html"><![CDATA[I have bookmarked lots of articles over the years. I hardly visit them but I don’t want to delete them either. I want to clean up my browser and start fresh…]]></summary></entry><entry><title type="html">CommonJS vs ES Modules in javascript</title><link href="/2022/07/20/commonjs-vs-es-modules.html" rel="alternate" type="text/html" title="CommonJS vs ES Modules in javascript" /><published>2022-07-20T00:00:00+00:00</published><updated>2022-07-20T00:00:00+00:00</updated><id>/2022/07/20/commonjs-vs-es-modules</id><content type="html" xml:base="/2022/07/20/commonjs-vs-es-modules.html"><![CDATA[<p>Recently I started learning javascript. we are removing difference between frontend vs backend programmer. I believe most people can do both.</p>

<p>Node JS started and used CommonJS (previously called ServerJS) module system. It loads modules sync. It was fine when reading from file is predictable and long running process on server. Browser cannot load modules and dependencies sync as it would block the UI. So ES Modules were born. they work with both Node (v13.2.0) and browser (script type=”module” attribute)</p>

<h2 id="commonjs-module">CommonJS module</h2>
<p>Let’s create a CommonJS module for calculating fibonanchi (why not?) and use it in an application.</p>

<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// fib.js</span>
<span class="kd">function</span> <span class="nx">fib</span><span class="p">(</span><span class="nx">n</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">if</span> <span class="p">(</span><span class="nx">n</span> <span class="o">==</span> <span class="mi">0</span> <span class="o">||</span> <span class="nx">n</span> <span class="o">==</span> <span class="mi">1</span><span class="p">)</span> <span class="k">return</span> <span class="nx">n</span><span class="p">;</span>
    <span class="k">return</span> <span class="nx">fib</span><span class="p">(</span><span class="nx">n</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="nx">fib</span><span class="p">(</span><span class="nx">n</span> <span class="o">-</span> <span class="mi">2</span><span class="p">);</span>
<span class="p">}</span>

<span class="nx">module</span><span class="p">.</span><span class="nx">exports</span> <span class="o">=</span> <span class="p">{</span> <span class="nx">fib</span> <span class="p">}</span> 
<span class="c1">// Using Shorthand property names</span>
<span class="c1">// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer</span>
</code></pre></div></div>

<p>And let’s use it our app</p>
<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// app.js</span>

<span class="kd">const</span> <span class="p">{</span> <span class="nx">fib</span> <span class="p">}</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="dl">'</span><span class="s1">./fib.js</span><span class="dl">'</span><span class="p">);</span> 
<span class="c1">// ".js" is unnecessory using destructuring assignment</span>
<span class="c1">// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">fib</span><span class="p">(</span><span class="mi">10</span><span class="p">));</span>
</code></pre></div></div>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ node app.js
55
</code></pre></div></div>

<p>Here we notice use of <code class="language-plaintext highlighter-rouge">module.exports</code> Indicating CommmonJS module</p>

<h2 id="es-modules">ES Modules</h2>
<p>let’s write same with ES modules, we only need to change <code class="language-plaintext highlighter-rouge">modules.export</code> to <code class="language-plaintext highlighter-rouge">expoert ...</code> and <code class="language-plaintext highlighter-rouge">require</code> to <code class="language-plaintext highlighter-rouge">import</code> statements.</p>
<pre><code class="language-mjs">// fib.mjs
function fib(n) {
    if (n == 0 || n == 1) return n;
    return fib(n - 1) + fib(n - 2);
}

export { fib } 
// Shorthand property names
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer
</code></pre>

<p>And let’s use it in our app</p>
<div class="language-js highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// app.mjs</span>
<span class="k">import</span> <span class="p">{</span> <span class="nx">fib</span> <span class="p">}</span> <span class="k">from</span> <span class="dl">'</span><span class="s1">./fib.mjs</span><span class="dl">'</span><span class="p">;</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">fib</span><span class="p">(</span><span class="mi">10</span><span class="p">));</span>
</code></pre></div></div>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ node app.mjs 
55
</code></pre></div></div>

<p>See how we are using extension <code class="language-plaintext highlighter-rouge">.mjs</code>. Node give SyntaxError if we try to use ES Modules marking them as such.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>(node:26455) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
...
SyntaxError: Cannot use import statement outside a module
</code></pre></div></div>
<p>So we can either use <code class="language-plaintext highlighter-rouge">.mjs</code> extension or we can set type as module in package.json file.</p>

<p>There we have it. CommonJS and ES modules. ES Modules are future but there is lots of existing code written and CommonJS will be here for long time.</p>]]></content><author><name>Arun Kant Sharma</name></author><summary type="html"><![CDATA[Recently I started learning javascript. we are removing difference between frontend vs backend programmer. I believe most people can do both.]]></summary></entry><entry><title type="html">Developer Rhapsody</title><link href="/2020/11/10/developer-rhapsody.html" rel="alternate" type="text/html" title="Developer Rhapsody" /><published>2020-11-10T00:00:00+00:00</published><updated>2020-11-10T00:00:00+00:00</updated><id>/2020/11/10/developer-rhapsody</id><content type="html" xml:base="/2020/11/10/developer-rhapsody.html"><![CDATA[<p><a href="https://www.youtube.com/watch?v=fJ9rUzIMcZQ" target="_blank">Play original in new tab on YouTube</a></p>

<p>[Intro]<br />
<em>Is this the feature live? Is this just test-ci?<br />
Conflict in a git merge, no reviews or code quality<br />
Copy your keys, ssh to the cloud and see<br />
I’m just a junior dev, I need no stablity<br />
Because I version bump, tag repo, google Stack, Over-flow<br />
Any way the build goes doesn’t really matter to me, to me</em></p>

<p>[Verse 1]<br />
<em>Mama, just lost a branch<br />
Did rebase against its HEAD, pressed the enter, now it’s dead<br />
Mama, work had just begun<br />
But now I’ve gone and thrown it all away<br />
Mama, ooh, didn’t mean to break on Fri<br />
If the patch not back again this time tomorrow<br />
Carry on, carry on as if nothing really matters</em></p>

<p>[Verse 2]<br />
<em>Too late, release time has come<br />
Sends changes down pipeline, asserts failing arbit time<br />
Git push, everybody, we’ve got to go<br />
Gotta deploy it all to prod and fix post hoc<br />
Mama, ooh, (Any way the build goes)<br />
I messed up API<br />
I sometimes wish I’d written any tests at all</em></p>

<p>[Verse 3]<br />
<em>I see a client mail shit hit the fan<br />
Hotfix, hotfix, will you rollback django?<br />
Deployment and live-env, very, very fright’ning me<br />
(Galileo) Galileo, (Galileo) Galileo, Galileo Figaro magnifico<br />
But I’m just a junior dev, quality assurance bugs me<br />
He’s just a junior dev from the js family<br />
Save his deadline mark legacy-compatibility<br />
Version bump, tag repo, will you let it go?<br />
Bismillah! No, we will not let it go<br />
(Let it go!) Bismillah! We will not let it go<br />
(Let it go!) Bismillah! We will not let it go<br />
(Let it go) Will not let it go<br />
(Let it go) Will not let it go<br />
(Let it go) Ah<br />
No, no, no, no, no, no, no<br />
(Oh c’mon qa, c’mon qa) c’mon qa, let it go<br />
Github has a polyfill, ray of light for me, for me, for me!</em></p>

<p>[Verse 4]<br />
<em>So you think you can reverse proxy and rewrite URIs?<br />
So you think you can copy-paste and leave me to DRY?<br />
Oh, baby, can’t do this to me, baby!<br />
Just gotta pep8, just gotta pep-right-8 of the PR</em></p>

<p>[Outro]<br />
<em>Logging rarely matters, println and see<br />
Logging rarely matters<br />
Logging rarely matters to me<br />
Any way the build goes</em></p>

<p><a href="https://twitter.com/kerrizor/status/1090644027425271809">Inspiration</a></p>]]></content><author><name>Arun Kant Sharma</name></author><summary type="html"><![CDATA[Play original in new tab on YouTube]]></summary></entry><entry><title type="html">How to convert Jekyll gem based theme to regular theme</title><link href="/2020/10/25/convert-gem-based-theme-to-regular-theme.html" rel="alternate" type="text/html" title="How to convert Jekyll gem based theme to regular theme" /><published>2020-10-25T00:00:00+00:00</published><updated>2020-10-25T00:00:00+00:00</updated><id>/2020/10/25/convert-gem-based-theme-to-regular-theme</id><content type="html" xml:base="/2020/10/25/convert-gem-based-theme-to-regular-theme.html"><![CDATA[<p>To modify a jekyll theme, often it is easier to convert gem based theme to regular them which resides in the same repository as other content.</p>

<p><a href="https://jekyllrb.com/docs/themes/#converting-gem-based-themes-to-regular-themes">Official Documentation</a> is good place to start. This blog is mostly note for my future self.</p>

<p><mark>Note that making copies of theme files will prevent you from receiving any theme updates.</mark></p>

<p>First let’s find out what theme we are using. By default Jekyll uses <code class="language-plaintext highlighter-rouge">minima</code> theme. This information is in <code class="language-plaintext highlighter-rouge">_config.yml</code> file.</p>

<p>Now open the directory where the gem is</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ open $(bundle info --path minima)
</code></pre></div></div>

<p>Copy below folders to root of the your blog’s repository</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>_inclues
_layouts
_sass
assets
</code></pre></div></div>

<p>We are going to remove the theme’s gem as dependency. But before that put dependency of the theme in <code class="language-plaintext highlighter-rouge">Gemfile</code> or our theme will be broken. (these can be found in <code class="language-plaintext highlighter-rouge">.gemspec</code> file of the theme)</p>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># file: Gemfile</span>
<span class="n">group</span> <span class="ss">:jekyll_plugins</span> <span class="k">do</span>
  <span class="n">gem</span> <span class="s2">"jekyll-feed"</span><span class="p">,</span> <span class="s2">"~&gt; 0.12"</span>
  <span class="n">gem</span> <span class="s2">"jekyll-seo-tag"</span><span class="p">,</span> <span class="s2">"~&gt; 2.7"</span>
<span class="k">end</span>
</code></pre></div></div>

<p>Also we need to do add them in <code class="language-plaintext highlighter-rouge">_config.yml</code> too</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># file: _config.yml</span>
<span class="na">plugins</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="s">jekyll-feed</span>
  <span class="pi">-</span> <span class="s">jekyll-seo-tag</span>
</code></pre></div></div>
<p>Don’t forget to run <code class="language-plaintext highlighter-rouge">bundle update</code>.</p>

<p>Finally remove reference to theme gem</p>
<ul>
  <li>Open <code class="language-plaintext highlighter-rouge">Gemfile</code> and remove <code class="language-plaintext highlighter-rouge">gem "minima", "~&gt; 2.5"</code>.</li>
  <li>Open <code class="language-plaintext highlighter-rouge">_config.yml</code> and remove <code class="language-plaintext highlighter-rouge">theme: minima</code>.</li>
</ul>

<p>And we are done.</p>]]></content><author><name>Arun Kant Sharma</name></author><summary type="html"><![CDATA[To modify a jekyll theme, often it is easier to convert gem based theme to regular them which resides in the same repository as other content.]]></summary></entry><entry><title type="html">How to start a personal blog with Jekyll and Github Pages</title><link href="/2020/10/24/Jekyll-and-Github-How-to-start-your-own-blog.html" rel="alternate" type="text/html" title="How to start a personal blog with Jekyll and Github Pages" /><published>2020-10-24T00:00:00+00:00</published><updated>2020-10-24T00:00:00+00:00</updated><id>/2020/10/24/Jekyll-and-Github-How-to-start-your-own-blog</id><content type="html" xml:base="/2020/10/24/Jekyll-and-Github-How-to-start-your-own-blog.html"><![CDATA[<p>Many people want to write a blog but don’t know where to begin. This post will explain how to use Jekyll to create a simple blog site and host it using Github Pages.</p>

<h1 id="what-is-jekyll">What is Jekyll</h1>
<p><a href="https://jekyllrb.com/">Jekyll</a> is a static site generator. It takes the content written in markdown format with some templates and outputs a fully static rendered site.</p>

<h1 id="why-github-pages">Why Github Pages</h1>
<p>The static site can be hosted with any web host but we are going to use service Github Pages. Apart from hosting the static site, it also provides many goodies like</p>
<ul>
  <li>Automatic builds</li>
  <li>CDN</li>
  <li>SSL certificates</li>
  <li>Free mapping for custom domains</li>
  <li>Many more…</li>
</ul>

<p>So let’s get started</p>

<h1 id="setup">Setup</h1>
<p>First we need to setup our development enviornment. Jekyll is written in Ruby. Let’s go ahead and install ruby with rbenv. I have written instruction for macOS but these can be adopted for Linux as well. (I’ll probably update this post with linux instructions some time later but don’t hold your breath)</p>

<h2 id="install-rbenv-and-rbenv-build">Install rbenv and rbenv-build</h2>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ brew update
$ brew install rbenv rbenv-build
</code></pre></div></div>
<p>Follow the instructions to install rbenv in your <code class="language-plaintext highlighter-rouge">~/.bash_profile</code>. Open a new terminal window for changes to take effect.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># list latest stable ruby versions
$ rbenv install -l
2.5.8
2.6.6
2.7.2
jruby-9.2.13.0
maglev-1.0.0
mruby-2.1.2
rbx-5.0
truffleruby-20.2.0
truffleruby+graalvm-20.2.0

Only latest stable releases for each Ruby implementation are shown.
Use 'rbenv install --list-all' to show all local versions.
</code></pre></div></div>
<p>We are going to use version 2.7.2.</p>

<h2 id="install-ruby">Install Ruby</h2>

<p>You may face openssl issue while installing or using ruby. Add</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@1.1)
</code></pre></div></div>
<p>in your <code class="language-plaintext highlighter-rouge">~/.bash_profile</code> so ruby is compiled with correct openssl version at install time. After that you can install Ruby with rbenv</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># It will take some time to download and compile
$ rbenv install 2.7.2

$ rbenv global 2.7.2  # select 2.7.2
</code></pre></div></div>

<h2 id="install-jekyll">Install jekyll</h2>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ gem install jekyll
</code></pre></div></div>

<h1 id="create-a-new-site">Create a new site</h1>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ jekyll new arunkant.github.io
$ cd arunkant.github.io
</code></pre></div></div>
<p>Here <code class="language-plaintext highlighter-rouge">arunkant</code> is my Github username.</p>

<h1 id="run-the-site-locally">Run the site locally</h1>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ bundle exec jekyll serve --livereload
Configuration file: /Users/arunkant/code/arunkant.github.io/_config.yml
            Source: /Users/arunkant/code/arunkant.github.io
       Destination: /Users/arunkant/code/arunkant.github.io/_site
 Incremental build: disabled. Enable with --incremental
      Generating... 
       Jekyll Feed: Generating feed for posts
                    done in 0.396 seconds.
 Auto-regeneration: enabled for '/Users/arunkant/code/arunkant.github.io'
LiveReload address: http://127.0.0.1:35729
    Server address: http://127.0.0.1:4000/
  Server running... press ctrl-c to stop.
</code></pre></div></div>

<p>Open <a href="http://127.0.0.1:4000/">http://127.0.0.1:4000/</a> in the browser and you can see a newly created site.</p>

<h2 id="commit-to-a-git-repository">Commit to a git repository</h2>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ git init
$ git add .
$ git commit -m 'Initial commit'
</code></pre></div></div>

<h2 id="create-a-github-account">Create a Github account</h2>
<p><a href="https://github.com/join">Create a Github account</a>. It is free.</p>

<h2 id="push-it-to-github">Push it to Github</h2>
<p><a href="https://github.com/new">Create a repository</a> in Github with same name (arunkant.github.io)</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ git remote add origin git@github.com:arunkant/arunkant.github.io.git
$ git push origin master
</code></pre></div></div>
<p>After some time you should be able to see it live at <a href="http://_username_.github.io">http://<em>username</em>.github.io</a></p>

<h2 id="change-default-config">Change default config</h2>
<p>Open <code class="language-plaintext highlighter-rouge">_config.yml</code> in the root of the project and edit as needed. Commit and push again and after some time it will be live.</p>

<h2 id="start-blogging">Start blogging</h2>
<p>Create a post in <code class="language-plaintext highlighter-rouge">_posts</code> directory (see existing files for help) and push to Github. It will build it and deploy it. I already had some very old posts which I just copied from old repository.</p>

<h2 id="next-steps">Next steps</h2>
<p>There are a few things you can try</p>
<ul>
  <li>Write more blog posts</li>
  <li>Go to <a href="https://jekyllrb.com/docs/themes/">Jekyll Themes</a> and choose one suites your taste.</li>
  <li>Create your own theme</li>
  <li>Help your friends to start a blog</li>
  <li>SEO</li>
  <li>…</li>
</ul>

<p>I’ll probably write a follow up when I customize the default theme.</p>]]></content><author><name>Arun Kant Sharma</name></author><summary type="html"><![CDATA[Many people want to write a blog but don’t know where to begin. This post will explain how to use Jekyll to create a simple blog site and host it using Github Pages.]]></summary></entry></feed>