<?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: Faran Aiki</title>
    <description>The latest articles on DEV Community by Faran Aiki (@faranaiki).</description>
    <link>https://dev.to/faranaiki</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%2F648230%2Fc8535b8d-dc2d-43e3-b9b7-87bd3f2d88ae.jpg</url>
      <title>DEV Community: Faran Aiki</title>
      <link>https://dev.to/faranaiki</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/faranaiki"/>
    <language>en</language>
    <item>
      <title>How Disabling Javascript Leads me to a Higher Lighthouse Score for My Personal Website</title>
      <dc:creator>Faran Aiki</dc:creator>
      <pubDate>Sat, 11 Jul 2026 14:14:29 +0000</pubDate>
      <link>https://dev.to/faranaiki/how-disabling-javascript-leads-me-to-a-higher-lighthouse-score-for-my-personal-website-230a</link>
      <guid>https://dev.to/faranaiki/how-disabling-javascript-leads-me-to-a-higher-lighthouse-score-for-my-personal-website-230a</guid>
      <description>&lt;h2&gt;
  
  
  A Little Introduction
&lt;/h2&gt;

&lt;p&gt;Hi, I'm Faran Aiki, a Software Engineer &amp;amp; ITB Student. Recently, I decided to audit my personal portfolio website (&lt;a href="https://faranaiki.id" rel="noopener noreferrer"&gt;faranaiki.id&lt;/a&gt;), and what I found was some ai-slop thingy that is slower than a snail.&lt;/p&gt;

&lt;p&gt;But, before I mention about disabling JavaScripts, I am going to tell you some medium-optimizations &amp;amp; micro-optimizations for my personal website that I have went a month trying to make it good for Lighthouse &amp;amp; SEO.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Forced Reflows &amp;amp; Layout Thrashing
&lt;/h2&gt;

&lt;p&gt;One of the most frustrating warnings in Lighthouse is &lt;em&gt;"Avoid forced reflows"&lt;/em&gt; which to be honest somehow always appear. &lt;/p&gt;

&lt;p&gt;My site has several highly interactive features, including a custom Python CLI, a tracking eye that follows the cursor, and guided tutorials. Behind the scenes, these components relied on &lt;code&gt;getBoundingClientRect()&lt;/code&gt;, &lt;code&gt;clientWidth&lt;/code&gt;, and &lt;code&gt;scrollHeight&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;The problem is that calling these DOM measurement APIs synchronously immediately after a React state change (or during mount) forces the browser to calculate the layout before it has even painted the screen. This causes the dreaded &lt;strong&gt;Layout Thrashing&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Some Ways of Fixing Things
&lt;/h3&gt;

&lt;p&gt;For the &lt;strong&gt;CLI Auto-Scroll&lt;/strong&gt;, The culprit was synchronously reading &lt;code&gt;scrollHeight&lt;/code&gt; to update &lt;code&gt;scrollTop&lt;/code&gt; inside &lt;code&gt;useEffect&lt;/code&gt;. I fixed this by deferring the execution using the event loop (&lt;code&gt;setTimeout&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Another issue is in the &lt;strong&gt;&lt;a href="https://faranaiki.id/en/sitemap-graph" rel="noopener noreferrer"&gt;Sitemap Graph&lt;/a&gt;&lt;/strong&gt; where the script is reading &lt;code&gt;container.clientWidth&lt;/code&gt; inside &lt;code&gt;useEffect&lt;/code&gt;. I refactored this to rely purely on &lt;code&gt;ResizeObserver&lt;/code&gt; and utilized &lt;code&gt;entry.contentRect.width&lt;/code&gt;, which provides the dimensions without thrashing the layout.&lt;/p&gt;

&lt;p&gt;Lastly, the &lt;strong&gt;cursor tracking (in &lt;a href="https://faranaiki.id/en" rel="noopener noreferrer"&gt;root&lt;/a&gt;)&lt;/strong&gt; causes a problem, and that is immediate bounding box calculations. I deferred this using &lt;code&gt;requestAnimationFrame&lt;/code&gt; to sync safely with the browser's native rendering cycle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code Example (CLI Auto-Scroll Fix):&lt;/strong&gt;&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="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// This is bad because it forces synchronous layout calculation before paint&lt;/span&gt;
  &lt;span class="c1"&gt;// terminalRef.scrollTop = terminalRef.scrollHeight;&lt;/span&gt;

  &lt;span class="c1"&gt;// This is good as it defers until after the browser paints&lt;/span&gt;
  &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;terminalRef&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;terminalRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;scrollTop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;terminalRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;scrollHeight&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;history&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. "Avoid Unnecessarily Large Images"
&lt;/h2&gt;

&lt;p&gt;Lighthouse flagged my mobile views for downloading oversized images (1080w) even though the images were displayed in tiny cards.&lt;/p&gt;

&lt;p&gt;The Culprit is &lt;em&gt;High Device Pixel Ratio (DPR)&lt;/em&gt;.&lt;br&gt;
I had initially set sizes="(max-width: 768px) 400px". On a mobile device with a 3x Retina display, the browser multiplies 400px * 3 = 1200px and happily requests the gigantic 1080w variant from Next.js. This is a bloat!&lt;/p&gt;
&lt;h2&gt;
  
  
  So, I Did "Dirty"
&lt;/h2&gt;

&lt;p&gt;I tricked the browser by using viewport units. By switching to sizes="(max-width: 768px) 50vw", I signaled that the image only takes up half the screen. The math became 200px * 3 = 600px, forcing Next.js to serve the much lighter 640w or 750w chunks. This immediately saved huge amounts of bandwidth and slashed the LCP (Largest Contentful Paint).&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Taming a 3.2s Main Thread Block (TBT)
&lt;/h2&gt;

&lt;p&gt;On my &lt;code&gt;[/sitemap-graph](https://faranaiki.id/en/sitemap-graph)&lt;/code&gt; route, I use &lt;code&gt;react-force-graph-2d&lt;/code&gt; to render a complex interactive relationship graph of my entire website. Lighthouse yelled at me because a single JS chunk was monopolizing the CPU for 3.26 seconds, drastically inflating the Total Blocking Time (TBT).&lt;/p&gt;

&lt;p&gt;The library utilizes D3 physics (&lt;code&gt;flatMap&lt;/code&gt;, array physics calculation loops) which completely choked the main thread during initial hydration.&lt;/p&gt;
&lt;h3&gt;
  
  
  So, How I Reconstruct This?
&lt;/h3&gt;

&lt;p&gt;I use client-side lazy loading: by dynamically importing the component and enforcing &lt;code&gt;{ ssr: false }&lt;/code&gt;, Next.js ships the lightweight skeleton structure immediately, letting the page become fully interactive (TTI) before it silently builds the heavy D3 canvas in the background.&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;import&lt;/span&gt; &lt;span class="nx"&gt;dynamic&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;next/dynamic&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Heavy physics engine deferred entirely from the initial render path!&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;SitemapGraphClient&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;dynamic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@/components/interactive/SitemapGraphClient&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; 
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;ssr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Finally, Disabling JavaScript Solves a Problem
&lt;/h2&gt;

&lt;p&gt;There is a problem because there is a "main thread hijacking" causing my canvas to be blank even though I expect texts to appear (server-side rendering).&lt;/p&gt;

&lt;p&gt;Before that, to make the site feel premium, I used Lenis for custom momentum scrolling. However, my initial configuration was brutally expensive and came with a massive side effect.&lt;/p&gt;

&lt;h3&gt;
  
  
  How So?
&lt;/h3&gt;

&lt;p&gt;I discovered the core issue using an old-school debugging technique: disabling &lt;em&gt;JavaScript&lt;/em&gt; in the browser. Since I was using Next.js (Server-Side Rendering), I expected to see a slightly unstyled but fully readable HTML document. Instead, I was greeted with a completely blank canvas!&lt;/p&gt;

&lt;h3&gt;
  
  
  But Why?
&lt;/h3&gt;

&lt;p&gt;My custom  SmoothScroll  wrapper component was waiting for the scroll library to initialize via &lt;code&gt;useEffect&lt;/code&gt; before revealing its children. Without JavaScript, the children remained hidden forever. Furthermore, even with JavaScript, I was using complex mathematical easing functions (&lt;code&gt;duration&lt;/code&gt; and &lt;code&gt;cubic-bezier&lt;/code&gt;) running inside a manual &lt;code&gt;requestAnimationFrame&lt;/code&gt; loop. Every single time a user scrolled, my custom code fought with the browser's native rendering pipeline. This leads to a huge TBT (Total Blocking Time) spikes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Then, What did I do?
&lt;/h3&gt;

&lt;p&gt;First, I ensured the content rendered immediately on the server, unconditionally, preventing the "blank canvas" trap. Then, I stripped out the heavy mathematical easing and replaced it with a lightweight &lt;code&gt;lerp&lt;/code&gt;. I also handed the synchronization back to Lenis's native &lt;code&gt;autoRaf&lt;/code&gt; parameter instead of manually binding it to React's lifecycle.&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="c1"&gt;// This is bad: hiding content until hydration &amp;amp; heavy math&lt;/span&gt;
    &lt;span class="cm"&gt;/*
    if (!isScrollInitialized) return null; // Created the Blank Canvas bug!

    const lenis = new Lenis({
      duration: 1.2,
      easing: (t) =&amp;gt; Math.min(1, 1.001 - Math.pow(2, -10 * t)),
    });
    */&lt;/span&gt;

    &lt;span class="c1"&gt;// Why this is preferred: this renders server-HTML immediately, uses lightweight lerp &amp;amp; native AutoRAF&lt;/span&gt;
    &lt;span class="c1"&gt;// return &amp;lt;&amp;gt;{children}&amp;lt;/&amp;gt;; (Content is always visible)&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lenis&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Lenis&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;lerp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Lightweight linear interpolation&lt;/span&gt;
      &lt;span class="na"&gt;autoRaf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Let the library handle its native performance loop&lt;/span&gt;
      &lt;span class="na"&gt;syncTouch&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Let native touch handle mobile devices&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This fix instantly solved the blank screen fallback, smoothed out the scrolling experience, and freed up the main thread to process real React state updates without stuttering.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5x640pgj97w0bk1pk3l1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5x640pgj97w0bk1pk3l1.png" alt="Debug Bear screenshot of how great my website is" width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Yep, web optimization is a never-ending journey. From fixing layout thrashing to tricking Retina displays, every micro-optimization counts. But the biggest lesson I learned here is: &lt;strong&gt;never blindly trust your UI libraries to handle performance for you.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By simply turning off JavaScript, I found out that my fancy smooth-scrolling wrapper (which is AI-written &amp;amp; modified anyway) was actually hijacking the entire rendering pipeline. Reverting to lightweight native calculations (like native &lt;code&gt;autoRaf&lt;/code&gt; and simple &lt;code&gt;lerp&lt;/code&gt;) brought my Total Blocking Time back to life.&lt;/p&gt;

&lt;p&gt;The next time your Next.js app, or even any website made using other frameworks, feels sluggish, do yourself a favor by disabling JS, opening the DevTools, and seeing what your HTML actually looks like naked. &lt;/p&gt;

&lt;p&gt;Got any similar horror stories with React hydration or heavy animations? Let's discuss in the comments below! 👇 [why did AI slop typed this question but whatever]&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>webdev</category>
      <category>debugbear</category>
      <category>lighthouse</category>
    </item>
    <item>
      <title>How to use "any" and "all" in Python</title>
      <dc:creator>Faran Aiki</dc:creator>
      <pubDate>Wed, 16 Jun 2021 15:22:59 +0000</pubDate>
      <link>https://dev.to/faranaiki/how-to-use-any-and-all-in-python-2dim</link>
      <guid>https://dev.to/faranaiki/how-to-use-any-and-all-in-python-2dim</guid>
      <description>&lt;p&gt;Credential: I do not know, but I, at least, am 4 years experienced; I am still learning C and Assembly.&lt;/p&gt;

&lt;p&gt;What is &lt;code&gt;any&lt;/code&gt; and &lt;code&gt;all&lt;/code&gt; in Python?&lt;/p&gt;

&lt;p&gt;By Python definition, &lt;code&gt;any&lt;/code&gt; will return if there is an item whereby true in a list, whereas &lt;code&gt;all&lt;/code&gt; will return if all items are true in a list.&lt;/p&gt;

&lt;p&gt;It looks like the operator &lt;code&gt;or&lt;/code&gt; and &lt;code&gt;and&lt;/code&gt; for &lt;code&gt;any&lt;/code&gt; and &lt;code&gt;all&lt;/code&gt;. It is actually easy to implement in C, Assembly, or any other language.&lt;/p&gt;

&lt;p&gt;Here are examples of the function &lt;code&gt;any&lt;/code&gt;,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;any([true, false, false])   # Result in True
any([false, false, false])  # Result in False
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here are examples of the function &lt;code&gt;all&lt;/code&gt;,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;all([true, true, true])     # Result in True
all([true, true, false])    # Result in False
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Implementation in C for &lt;code&gt;any&lt;/code&gt;,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// My algorithm for "any"
int any(int* arr, int size) {
    int i = 0, t = 0;
    for (; i &amp;lt; size - 1 ; i += 2) {
        t += arr[i] + arr[i + 1];
    }
    return (t + arr[size % i]) &amp;amp;&amp;amp; 1;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With a &lt;code&gt;O(log n)&lt;/code&gt; time complexity and &lt;code&gt;O(1)&lt;/code&gt; space complexity.&lt;/p&gt;

&lt;p&gt;Implementation in C for &lt;code&gt;all&lt;/code&gt;,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// My algorithm for "all"
int all(int* arr, int size) {
    int i = 0, t = 0;
    for (; i &amp;lt; size - 1 ; i += 2) {
        t += arr[i] + arr[i + 1];
    }
    return (t + (i % size &amp;amp;&amp;amp; arr[size % i]) &amp;gt; (i &amp;gt;&amp;gt; 1));
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With a &lt;code&gt;O(log n)&lt;/code&gt; time complexity and &lt;code&gt;O(1)&lt;/code&gt; space complexity.&lt;/p&gt;

&lt;p&gt;I will explain how the algorithm works in another post.&lt;/p&gt;

&lt;p&gt;How to use &lt;code&gt;any&lt;/code&gt;,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Real world application
if any(person.alive for person in people):
    myself.shout("Who is dead?")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;How to use &lt;code&gt;all&lt;/code&gt;,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Real world application
if all(person.alive for person in people):
    myself.shout("We are safe!")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>python</category>
      <category>c</category>
      <category>algorithms</category>
      <category>list</category>
    </item>
    <item>
      <title>Why I prefer this style</title>
      <dc:creator>Faran Aiki</dc:creator>
      <pubDate>Sat, 12 Jun 2021 15:18:54 +0000</pubDate>
      <link>https://dev.to/faranaiki/why-i-prefer-this-style-3a0h</link>
      <guid>https://dev.to/faranaiki/why-i-prefer-this-style-3a0h</guid>
      <description>&lt;p&gt;I prefer,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;

int main() {
  printf("I prefer this");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;More than this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;

int main()
{
  printf("I do not prefer this");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because the &lt;strong&gt;line&lt;/strong&gt; is less than the previous. Note, that &lt;strong&gt;I did not mention the size is lesser&lt;/strong&gt; than the previous, they both are the same size.&lt;br&gt;
But of course, it is up to the developer, coder, or the programmer to decide which style they use. I was just sharing my opinion.&lt;/p&gt;

</description>
      <category>c</category>
      <category>cpp</category>
      <category>bracket</category>
    </item>
    <item>
      <title>Hard to find Assembly topic</title>
      <dc:creator>Faran Aiki</dc:creator>
      <pubDate>Sat, 12 Jun 2021 12:23:52 +0000</pubDate>
      <link>https://dev.to/faranaiki/hard-to-find-assembly-topic-1c7g</link>
      <guid>https://dev.to/faranaiki/hard-to-find-assembly-topic-1c7g</guid>
      <description>&lt;p&gt;Man, it is really hard to find documentation on how to make an Operating System.&lt;br&gt;
No, what I meant by that is understanding, not just copy-paste (well, except GDT and its similar).&lt;br&gt;
Maybe I am too stupid to understand an easy thing, or too lazy to read the full topic.&lt;/p&gt;

</description>
      <category>assembly</category>
      <category>os</category>
    </item>
    <item>
      <title>Is Python (and similar) really a programming language?</title>
      <dc:creator>Faran Aiki</dc:creator>
      <pubDate>Sat, 12 Jun 2021 12:20:42 +0000</pubDate>
      <link>https://dev.to/faranaiki/is-python-and-similar-really-a-programming-language-4gi9</link>
      <guid>https://dev.to/faranaiki/is-python-and-similar-really-a-programming-language-4gi9</guid>
      <description>&lt;p&gt;For some reason, maybe because of my ego, I sometimes do not think that Python (and its similar) is a programming language.&lt;br&gt;
Maybe because Python (and its similar) is a high-level programming language and near pseudo-code? I do not know.&lt;br&gt;
It is not really that bad, but I do not consider it as an "achievement" if I master it or know anything about it.&lt;br&gt;
Not only that, Python is far away from the Zen of Python (the latest version).&lt;/p&gt;

</description>
      <category>python</category>
      <category>c</category>
      <category>assembly</category>
    </item>
  </channel>
</rss>
