<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Oh My Blog — Android &amp; Backend</title>
        <link>https://harukadev.com/blog</link>
        <description>RSS feed of articles about Android, Kotlin, Jetpack Compose, Ktor, Node.js, architecture and backend development.</description>
        <lastBuildDate>Mon, 25 Aug 2025 10:02:24 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>© 2026 HarukaYamamoto0 — crafted with caffeine &amp; code.</copyright>
        <item>
            <title><![CDATA[📥 How to Install JetBrains Toolbox on Linux Mint (or Any Ubuntu-Based Distro)]]></title>
            <link>https://harukadev.com/blog/how-to-install-jetbrains-toolbox-on-linux-mint</link>
            <guid>https://harukadev.com/blog/how-to-install-jetbrains-toolbox-on-linux-mint</guid>
            <pubDate>Mon, 25 Aug 2025 10:02:24 GMT</pubDate>
            <description><![CDATA[A simple and reliable guide to installing and running JetBrains Toolbox on Linux Mint, Ubuntu, or any Debian-based distro — without breaking it after setup.]]></description>
            <content:encoded><![CDATA[<p><strong>JetBrains Toolbox</strong> is the official manager for installing and updating IDEs like IntelliJ IDEA, PyCharm, CLion, and others.<br>
<!-- -->It makes life a lot easier — but installation can be confusing the first time.<br>
<!-- -->For example, I used to download the <code>.tar.gz</code>, extract it into <code>Downloads</code>, run it, and later delete the folder — which, of course, broke everything because the app could no longer find its binary.</p>
<p>Here’s a <strong>simple and direct guide</strong> to properly install Toolbox on <strong>Linux Mint</strong> (and it works the same for Ubuntu/Debian in general).</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="1-download-the-toolbox">1. Download the Toolbox<a href="https://harukadev.com/blog/how-to-install-jetbrains-toolbox-on-linux-mint#1-download-the-toolbox" class="hash-link" aria-label="Direct link to 1. Download the Toolbox" title="Direct link to 1. Download the Toolbox" translate="no">​</a></h2>
<p>Go to the <a href="https://www.jetbrains.com/toolbox-app/" target="_blank" rel="noopener noreferrer" class="">official JetBrains website</a> and download the latest <code>.tar.gz</code> file.</p>
<p>Assuming it was downloaded to <code>~/Downloads</code>, extract it with:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token builtin class-name" style="color:rgb(189, 147, 249)">cd</span><span class="token plain"> ~/Downloads</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">tar</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-xvf</span><span class="token plain"> jetbrains-toolbox-</span><span class="token operator">&lt;</span><span class="token plain">version</span><span class="token operator">&gt;</span><span class="token plain">.tar.gz </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-C</span><span class="token plain"> ~/.local/</span><br></div></code></pre></div></div>
<p>This will create something like:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">~/.local/jetbrains-toolbox-</span><span class="token operator">&lt;</span><span class="token plain">version</span><span class="token operator">&gt;</span><span class="token plain">/</span><br></div></code></pre></div></div>
<blockquote>
<p>⚠️ <strong>Important:</strong> &gt; <strong>Do not extract it inside</strong> <code>~/.local/share/JetBrains/Toolbox/</code>.
That folder is used by the app itself to store data and settings.
The downloaded binary should stay in a <strong>separate directory</strong>, such as <code>~/.local/</code>.</p>
</blockquote>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="2-run-it-for-the-first-time">2. Run It for the First Time<a href="https://harukadev.com/blog/how-to-install-jetbrains-toolbox-on-linux-mint#2-run-it-for-the-first-time" class="hash-link" aria-label="Direct link to 2. Run It for the First Time" title="Direct link to 2. Run It for the First Time" translate="no">​</a></h2>
<p>Navigate to the extracted directory and run the app:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token builtin class-name" style="color:rgb(189, 147, 249)">cd</span><span class="token plain"> ~/.local/jetbrains-toolbox-</span><span class="token operator">&lt;</span><span class="token plain">version</span><span class="token operator">&gt;</span><span class="token plain">/</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">./jetbrains-toolbox</span><br></div></code></pre></div></div>
<p>Here’s what happens the first time you run it:</p>
<ul>
<li class="">It creates internal folders in <code>~/.local/share/JetBrains/Toolbox/</code></li>
<li class="">It automatically generates a <code>.desktop</code> shortcut in <code>~/.local/share/applications</code></li>
<li class="">From then on, <strong>JetBrains Toolbox appears in your system menu</strong> (Mint Menu / Application Menu)</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="3-updates">3. Updates<a href="https://harukadev.com/blog/how-to-install-jetbrains-toolbox-on-linux-mint#3-updates" class="hash-link" aria-label="Direct link to 3. Updates" title="Direct link to 3. Updates" translate="no">​</a></h2>
<p>The Toolbox updates itself automatically.
You don’t need to repeat this process every time a new version is released.</p>
<p><strong>JetBrains Toolbox</strong> is designed to run entirely inside the user’s directory (<code>~/.local</code>),
so it doesn’t require root privileges or system-wide installation.</p>
<p>Once installed, it takes care of everything — shortcuts, updates, and maintenance.</p>
<blockquote>
<p>Install it at once and forget about it.</p>
</blockquote>]]></content:encoded>
            <category>Linux</category>
            <category>Jetpack Compose</category>
            <category>Tools</category>
            <category>Ubuntu</category>
            <category>Tutorial</category>
            <category>Compose</category>
            <category>Backend</category>
        </item>
        <item>
            <title><![CDATA[How to Finally Fix WiFi Debugging Issues in Android Studio]]></title>
            <link>https://harukadev.com/blog/how-to-fix-wifi-debugging-issues-android-studio</link>
            <guid>https://harukadev.com/blog/how-to-fix-wifi-debugging-issues-android-studio</guid>
            <pubDate>Thu, 31 Jul 2025 05:30:15 GMT</pubDate>
            <description><![CDATA[A reliable guide to solving common WiFi debugging problems in Android Studio using ADB pairing. Learn how to connect your device without QR codes or unstable connections.]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" src="https://imgur.com/T2L39DI.jpg" alt="There was an error pairing the device" class="img_ev3q"></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-common-problem">The Common Problem<a href="https://harukadev.com/blog/how-to-fix-wifi-debugging-issues-android-studio#the-common-problem" class="hash-link" aria-label="Direct link to The Common Problem" title="Direct link to The Common Problem" translate="no">​</a></h2>
<p>How many times have you gone through this frustrating situation?</p>
<ol>
<li class="">You enable WiFi debugging on your device</li>
<li class="">You scan the QR code (or enter the pairing code) in Android Studio</li>
<li class="">It works for a while — until you restart the device or switch networks</li>
<li class="">Then you lose the connection and have to repeat the entire process</li>
<li class="">Or sometimes the QR code simply refuses to work</li>
</ol>
<p>Wi-Fi debugging in Android Studio, when properly configured, offers a <strong>smoother and more productive</strong> development experience.<br>
<!-- -->The key is understanding the difference between pairing and debugging ports, and using the <code>adb pair</code> command to create a <strong>persistent trust link</strong> between your device and your computer.</p>
<p>Following this guide, you’ll never need to scan QR codes again or deal with unstable connections.<br>
<!-- -->The command-line pairing process is faster, more reliable, and gives you full control over the connection.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-definitive-solution">The Definitive Solution<a href="https://harukadev.com/blog/how-to-fix-wifi-debugging-issues-android-studio#the-definitive-solution" class="hash-link" aria-label="Direct link to The Definitive Solution" title="Direct link to The Definitive Solution" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="prerequisites">Prerequisites<a href="https://harukadev.com/blog/how-to-fix-wifi-debugging-issues-android-studio#prerequisites" class="hash-link" aria-label="Direct link to Prerequisites" title="Direct link to Prerequisites" translate="no">​</a></h3>
<p>Before you start, make sure that:</p>
<ul>
<li class=""><strong>Android Studio</strong> is installed and ADB is properly configured</li>
<li class=""><strong>Developer options</strong> are enabled on your device <sup><a href="https://harukadev.com/blog/how-to-fix-wifi-debugging-issues-android-studio#user-content-fn-1-0e9ed0" id="user-content-fnref-1-0e9ed0" data-footnote-ref="true" aria-describedby="footnote-label" class="anchorTargetHideOnScrollNavbar_vjPI">1</a></sup></li>
<li class="">Your computer and device are on the <strong>same Wi-Fi network</strong></li>
<li class="">Your phone has a <strong>static IP address</strong> configured <sup><a href="https://harukadev.com/blog/how-to-fix-wifi-debugging-issues-android-studio#user-content-fn-2-0e9ed0" id="user-content-fnref-2-0e9ed0" data-footnote-ref="true" aria-describedby="footnote-label" class="anchorTargetHideOnScrollNavbar_vjPI">2</a></sup></li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="step-1-enable-wireless-debugging">Step 1: Enable Wireless Debugging<a href="https://harukadev.com/blog/how-to-fix-wifi-debugging-issues-android-studio#step-1-enable-wireless-debugging" class="hash-link" aria-label="Direct link to Step 1: Enable Wireless Debugging" title="Direct link to Step 1: Enable Wireless Debugging" translate="no">​</a></h3>
<ol>
<li class="">On your Android device, go to <strong>Settings &gt; Developer options</strong></li>
<li class="">Enable <strong>“Wireless debugging”</strong></li>
<li class="">Tap <strong>“Wireless debugging”</strong> to open its settings</li>
<li class="">Tap <strong>“Pair device with pairing code”</strong></li>
</ol>
<p>You’ll see a screen like this:<br>
<img decoding="async" loading="lazy" src="https://imgur.com/wZmKWN4.jpg" alt="code pairing screen" class="img_ev3q"></p>
<p><strong>Note:</strong> Two important pieces of information appear here:</p>
<ul>
<li class=""><strong>Pairing code</strong> (e.g., <code>817324</code>)</li>
<li class=""><strong>IP address and pairing port</strong> (e.g., <code>192.168.18.3:39233</code>)</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="step-2-pair-via-terminal">Step 2: Pair via Terminal<a href="https://harukadev.com/blog/how-to-fix-wifi-debugging-issues-android-studio#step-2-pair-via-terminal" class="hash-link" aria-label="Direct link to Step 2: Pair via Terminal" title="Direct link to Step 2: Pair via Terminal" translate="no">​</a></h3>
<p>Open your terminal (or Command Prompt on Windows) and run:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">adb pair </span><span class="token number">192.168</span><span class="token plain">.18.3:39233</span><br></div></code></pre></div></div>
<p><strong>Important:</strong> Use the <strong>pairing port</strong>, not the debugging port!</p>
<p>The system will ask for the pairing code:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">Enter pairing code: </span><span class="token number">817324</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Successfully paired to </span><span class="token number">192.168</span><span class="token plain">.18.3:39233 </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">guid</span><span class="token operator">=</span><span class="token plain">adb-XXXXXXXXX</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="step-3-connect-for-debugging">Step 3: Connect for Debugging<a href="https://harukadev.com/blog/how-to-fix-wifi-debugging-issues-android-studio#step-3-connect-for-debugging" class="hash-link" aria-label="Direct link to Step 3: Connect for Debugging" title="Direct link to Step 3: Connect for Debugging" translate="no">​</a></h3>
<p>After pairing, the popup will close.
Now take note of the <strong>debugging port</strong> shown on your device:</p>
<img src="https://imgur.com/RBTrH4D.jpg" alt="mobile debug screen">
<p>Connect using the debugging port (in my case, <code>36541</code>):</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">adb connect </span><span class="token number">192.168</span><span class="token plain">.18.3:36541</span><br></div></code></pre></div></div>
<p>Expected output:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">connected to </span><span class="token number">192.168</span><span class="token plain">.18.3:36541</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="step-4-verify-the-connection">Step 4: Verify the Connection<a href="https://harukadev.com/blog/how-to-fix-wifi-debugging-issues-android-studio#step-4-verify-the-connection" class="hash-link" aria-label="Direct link to Step 4: Verify the Connection" title="Direct link to Step 4: Verify the Connection" translate="no">​</a></h3>
<p>Check if your device is connected:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">adb devices</span><br></div></code></pre></div></div>
<p>Expected result:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">List of devices attached</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token number">192.168</span><span class="token plain">.18.3:36541      device</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="why-this-works">Why This Works<a href="https://harukadev.com/blog/how-to-fix-wifi-debugging-issues-android-studio#why-this-works" class="hash-link" aria-label="Direct link to Why This Works" title="Direct link to Why This Works" translate="no">​</a></h2>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="trusted-connection">Trusted Connection<a href="https://harukadev.com/blog/how-to-fix-wifi-debugging-issues-android-studio#trusted-connection" class="hash-link" aria-label="Direct link to Trusted Connection" title="Direct link to Trusted Connection" translate="no">​</a></h3>
<p>The <code>adb pair</code> command establishes a <strong>cryptographically trusted link</strong> between your computer and your Android device.
This trust relationship is persistent and doesn’t need to be repeated every time.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="port-difference">Port Difference<a href="https://harukadev.com/blog/how-to-fix-wifi-debugging-issues-android-studio#port-difference" class="hash-link" aria-label="Direct link to Port Difference" title="Direct link to Port Difference" translate="no">​</a></h3>
<ul>
<li class=""><strong>Pairing port:</strong> Used once to establish trust</li>
<li class=""><strong>Debugging port:</strong> Used for all future sessions</li>
</ul>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="automatic-reconnection">Automatic Reconnection<a href="https://harukadev.com/blog/how-to-fix-wifi-debugging-issues-android-studio#automatic-reconnection" class="hash-link" aria-label="Direct link to Automatic Reconnection" title="Direct link to Automatic Reconnection" translate="no">​</a></h3>
<p>After the first pairing, Android Studio can:</p>
<ul>
<li class="">Automatically detect the device on the network</li>
<li class="">Reconnect without a manual input</li>
<li class="">Keep the connection much more stable</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="benefits-of-wifi-debugging">Benefits of WiFi Debugging<a href="https://harukadev.com/blog/how-to-fix-wifi-debugging-issues-android-studio#benefits-of-wifi-debugging" class="hash-link" aria-label="Direct link to Benefits of WiFi Debugging" title="Direct link to Benefits of WiFi Debugging" translate="no">​</a></h2>
<ul>
<li class=""><strong>Freedom of movement:</strong> No cables restricting your workspace</li>
<li class=""><strong>Real-world testing:</strong> Device operates normally while debugging</li>
<li class=""><strong>Multiple devices:</strong> Connect and debug several devices simultaneously</li>
<li class=""><strong>USB port preservation:</strong> Save wear on your computer’s USB ports</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="additional-resources">Additional Resources<a href="https://harukadev.com/blog/how-to-fix-wifi-debugging-issues-android-studio#additional-resources" class="hash-link" aria-label="Direct link to Additional Resources" title="Direct link to Additional Resources" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://developer.android.com/studio/command-line/adb" target="_blank" rel="noopener noreferrer" class="">Official ADB Documentation</a></li>
<li class=""><a href="https://developer.android.com/studio/debug" target="_blank" rel="noopener noreferrer" class="">Android Studio Debugging Guide</a></li>
<li class=""><a href="https://developer.android.com/studio/debug/dev-options" target="_blank" rel="noopener noreferrer" class="">Developer Options on Android</a></li>
</ul>
<!-- -->
<section data-footnotes="true" class="footnotes"><h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI sr-only" id="footnote-label">Footnotes<a href="https://harukadev.com/blog/how-to-fix-wifi-debugging-issues-android-studio#footnote-label" class="hash-link" aria-label="Direct link to Footnotes" title="Direct link to Footnotes" translate="no">​</a></h2>
<ol>
<li class="anchorTargetHideOnScrollNavbar_vjPI" id="user-content-fn-1-0e9ed0">
<p><a href="https://developer.android.com/studio/debug/dev-options#enable" target="_blank" rel="noopener noreferrer" class="">https://developer.android.com/studio/debug/dev-options#enable</a> <a href="https://harukadev.com/blog/how-to-fix-wifi-debugging-issues-android-studio#user-content-fnref-1-0e9ed0" data-footnote-backref="" aria-label="Back to reference 1" class="data-footnote-backref">↩</a></p>
</li>
<li class="anchorTargetHideOnScrollNavbar_vjPI" id="user-content-fn-2-0e9ed0">
<p>I personally recommend setting a static IP directly on your router so you can manage all devices from one place. <a href="https://harukadev.com/blog/how-to-fix-wifi-debugging-issues-android-studio#user-content-fnref-2-0e9ed0" data-footnote-backref="" aria-label="Back to reference 2" class="data-footnote-backref">↩</a></p>
</li>
</ol>
</section>]]></content:encoded>
            <category>Android</category>
            <category>WiFi</category>
            <category>ADB</category>
            <category>Android Studio</category>
        </item>
        <item>
            <title><![CDATA[Fixing “Invalid Signature Detected” Error in Dual Boot]]></title>
            <link>https://harukadev.com/blog/fixing-invalid-signature-detected-dual-boot</link>
            <guid>https://harukadev.com/blog/fixing-invalid-signature-detected-dual-boot</guid>
            <pubDate>Tue, 10 Jun 2025 06:04:52 GMT</pubDate>
            <description><![CDATA[Learn how to fix the “Invalid Signature Detected” error when enabling Secure Boot in a Linux and Windows dual boot setup. Quick, safe, and simple fix using signed GRUB packages.]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="context">Context<a href="https://harukadev.com/blog/fixing-invalid-signature-detected-dual-boot#context" class="hash-link" aria-label="Direct link to Context" title="Direct link to Context" translate="no">​</a></h2>
<p>So, I was trying to install <em>Battlefield 2042</em> and found out that the latest update <strong>requires Secure Boot to be enabled</strong>.<br>
<!-- -->No big deal — I use dual boot (Zorin OS for work, Windows 10 for gaming), so I jumped into my X99 Qiyida D4 BIOS and enabled Secure Boot.</p>
<p>The result?<br>
<!-- -->Linux completely refused to boot and instead displayed this lovely message:</p>
<blockquote>
<p><strong>“Invalid signature detected. Check Secure Boot policy in Setup”</strong></p>
</blockquote>
<p><img decoding="async" loading="lazy" src="https://imgur.com/xfmFtEh.jpg" alt="Invalid signature detected. Check Secure Boot policy in Setup" class="img_ev3q"></p>
<p>Great. Here we go again...</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-problem">The Problem<a href="https://harukadev.com/blog/fixing-invalid-signature-detected-dual-boot#the-problem" class="hash-link" aria-label="Direct link to The Problem" title="Direct link to The Problem" translate="no">​</a></h2>
<p>The GRUB that comes with Zorin (and pretty much any other distro) <strong>doesn’t have a valid digital signature for Secure Boot</strong>.<br>
<!-- -->So the firmware looks at it and basically says:</p>
<blockquote>
<p>“Don’t know you. Don’t trust you. Not loading you.”</p>
</blockquote>
<p>…and that’s it — your boot stops right there.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-solution">The Solution<a href="https://harukadev.com/blog/fixing-invalid-signature-detected-dual-boot#the-solution" class="hash-link" aria-label="Direct link to The Solution" title="Direct link to The Solution" translate="no">​</a></h2>
<p>Good news: you <strong>don’t need to disable Secure Boot forever</strong> or mess around with custom keys.<br>
<!-- -->All you need to do is reinstall GRUB using the <em>officially signed</em> packages.<br>
<!-- -->It’s quick and painless.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="-step-0--temporarily-disable-secure-boot">🧩 Step 0 — Temporarily Disable Secure Boot<a href="https://harukadev.com/blog/fixing-invalid-signature-detected-dual-boot#-step-0--temporarily-disable-secure-boot" class="hash-link" aria-label="Direct link to 🧩 Step 0 — Temporarily Disable Secure Boot" title="Direct link to 🧩 Step 0 — Temporarily Disable Secure Boot" translate="no">​</a></h3>
<p>Yeah, sounds ironic, but you need to <strong>turn Secure Boot off</strong> for now.<br>
<!-- -->If it stays on, GRUB won’t load, and you can’t fix anything.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="step-1--update-your-system">Step 1 — Update Your System<a href="https://harukadev.com/blog/fixing-invalid-signature-detected-dual-boot#step-1--update-your-system" class="hash-link" aria-label="Direct link to Step 1 — Update Your System" title="Direct link to Step 1 — Update Your System" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">apt</span><span class="token plain"> update</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="step-2--install-the-correct-packages">Step 2 — Install the Correct Packages<a href="https://harukadev.com/blog/fixing-invalid-signature-detected-dual-boot#step-2--install-the-correct-packages" class="hash-link" aria-label="Direct link to Step 2 — Install the Correct Packages" title="Direct link to Step 2 — Install the Correct Packages" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">apt</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><span class="token plain"> grub-efi-amd64-signed shim-signed</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="step-3--reinstall-grub">Step 3 — Reinstall GRUB<a href="https://harukadev.com/blog/fixing-invalid-signature-detected-dual-boot#step-3--reinstall-grub" class="hash-link" aria-label="Direct link to Step 3 — Reinstall GRUB" title="Direct link to Step 3 — Reinstall GRUB" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> grub-install </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--target</span><span class="token operator">=</span><span class="token plain">x86_64-efi --efi-directory</span><span class="token operator">=</span><span class="token plain">/boot/efi --bootloader-id</span><span class="token operator">=</span><span class="token plain">grub</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="step-4--update-the-configuration">Step 4 — Update the Configuration<a href="https://harukadev.com/blog/fixing-invalid-signature-detected-dual-boot#step-4--update-the-configuration" class="hash-link" aria-label="Direct link to Step 4 — Update the Configuration" title="Direct link to Step 4 — Update the Configuration" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">update-grub</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="step-5--reboot-and-re-enable-secure-boot">Step 5 — Reboot and Re-enable Secure Boot<a href="https://harukadev.com/blog/fixing-invalid-signature-detected-dual-boot#step-5--reboot-and-re-enable-secure-boot" class="hash-link" aria-label="Direct link to Step 5 — Reboot and Re-enable Secure Boot" title="Direct link to Step 5 — Reboot and Re-enable Secure Boot" translate="no">​</a></h3>
<p>Go back into your BIOS, turn Secure Boot back on — and boom 💥
GRUB will now load without any complaints.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="why-this-works">Why This Works<a href="https://harukadev.com/blog/fixing-invalid-signature-detected-dual-boot#why-this-works" class="hash-link" aria-label="Direct link to Why This Works" title="Direct link to Why This Works" translate="no">​</a></h2>
<ul>
<li class=""><strong><code>grub-efi-amd64-signed</code></strong> → the “officially signed” GRUB, recognized by the firmware</li>
<li class=""><strong><code>shim-signed</code></strong> → acts like a translator: the system trusts it, and it trusts GRUB</li>
<li class="">Reinstalling ensures the proper configuration for UEFI + Secure Boot mode</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="the-result">The Result<a href="https://harukadev.com/blog/fixing-invalid-signature-detected-dual-boot#the-result" class="hash-link" aria-label="Direct link to The Result" title="Direct link to The Result" translate="no">​</a></h2>
<p>Now I can:</p>
<ul>
<li class="">Keep Secure Boot enabled (Battlefield’s happy)</li>
<li class="">Use Zorin OS for work without issues</li>
<li class="">Enjoy a slightly more secure setup — not that I really care 😅</li>
</ul>
<p>All of this without dealing with <strong>custom keys, manual certificates, or 30-step guides</strong>.
Just a clean, simple fix that works.</p>]]></content:encoded>
            <category>Linux</category>
            <category>Dual Boot</category>
            <category>Troubleshooting</category>
            <category>GRUB</category>
            <category>Secure Boot</category>
        </item>
        <item>
            <title><![CDATA[🔥 Customizing Your GRUB — Dual Boot with Style!]]></title>
            <link>https://harukadev.com/blog/customizing-your-grub-dual-boot-with-style</link>
            <guid>https://harukadev.com/blog/customizing-your-grub-dual-boot-with-style</guid>
            <pubDate>Sun, 04 May 2025 06:15:22 GMT</pubDate>
            <description><![CDATA[Learn how to customize and install stylish GRUB themes to make your dual boot setup look amazing. From downloading to configuring themes manually via the terminal.]]></description>
            <content:encoded><![CDATA[<p>Hey there! 👋<br>
<!-- -->Today I’m going to teach you (or at least try) how to add a theme to <strong>GRUB</strong>, so every time you boot your PC or switch operating systems, you don’t have to stare at that ugly default screen anymore.<br>
<!-- -->Let’s turn this:</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="before">Before<a href="https://harukadev.com/blog/customizing-your-grub-dual-boot-with-style#before" class="hash-link" aria-label="Direct link to Before" title="Direct link to Before" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://imgur.com/usgstFM.jpg" alt="Before" class="img_ev3q"></p>
<p>Into this 👇</p>
<h4 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="after">After<a href="https://harukadev.com/blog/customizing-your-grub-dual-boot-with-style#after" class="hash-link" aria-label="Direct link to After" title="Direct link to After" translate="no">​</a></h4>
<p><img decoding="async" loading="lazy" src="https://imgur.com/HqZ3hcQ.jpg" alt="After" class="img_ev3q"></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="what-is-grub">What Is GRUB?<a href="https://harukadev.com/blog/customizing-your-grub-dual-boot-with-style#what-is-grub" class="hash-link" aria-label="Direct link to What Is GRUB?" title="Direct link to What Is GRUB?" translate="no">​</a></h2>
<p>For those unfamiliar, <strong>GRUB</strong> is a boot manager that comes by default with most Linux distributions.<br>
<!-- -->It’s essential if you use <strong>dual boot</strong> — that’s when you run more than one operating system (like Linux and Windows) on the same computer.</p>
<p>If you’re dual-booting without a boot manager, switching systems can be a nightmare — you’d have to open your BIOS every time and manually change the boot order.<br>
<!-- -->With GRUB (or any boot manager), you can visually select which OS to start; no BIOS trips are required.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="why-customize-grub">Why Customize GRUB?<a href="https://harukadev.com/blog/customizing-your-grub-dual-boot-with-style#why-customize-grub" class="hash-link" aria-label="Direct link to Why Customize GRUB?" title="Direct link to Why Customize GRUB?" translate="no">​</a></h2>
<ul>
<li class="">🎨 <strong>Pure aesthetics</strong> – Who said dual boot has to be ugly?</li>
<li class="">🔍 <strong>Visual clarity</strong> – identify each OS at a glance <sup><a href="https://harukadev.com/blog/customizing-your-grub-dual-boot-with-style#user-content-fn-1-489a50" id="user-content-fnref-1-489a50" data-footnote-ref="true" aria-describedby="footnote-label" class="anchorTargetHideOnScrollNavbar_vjPI">1</a></sup></li>
<li class="">🚀 <strong>Style points</strong> – Because a slick boot screen says <em>“this machine belongs to someone serious”</em></li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="downloading-a-theme">Downloading a Theme<a href="https://harukadev.com/blog/customizing-your-grub-dual-boot-with-style#downloading-a-theme" class="hash-link" aria-label="Direct link to Downloading a Theme" title="Direct link to Downloading a Theme" translate="no">​</a></h2>
<p>Enough theories — let’s jump to the fun part: finding a theme you like.<br>
<!-- -->Head to the <strong>GNOME-Look GRUB Themes section</strong>:</p>
<p>👉 <a href="https://www.gnome-look.org/browse?cat=109&amp;ord=rating" target="_blank" rel="noopener noreferrer" class="">GNOME-Look — GRUB Themes</a></p>
<p>That site has tons of GRUB themes.<br>
<!-- -->My personal favorite is this one: <a href="https://www.gnome-look.org/p/2076542" target="_blank" rel="noopener noreferrer" class="">Star Rail Theme</a>, which includes multiple subthemes — I’m currently using the <strong>Anaxa</strong> version.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="installing-the-theme">Installing the Theme<a href="https://harukadev.com/blog/customizing-your-grub-dual-boot-with-style#installing-the-theme" class="hash-link" aria-label="Direct link to Installing the Theme" title="Direct link to Installing the Theme" translate="no">​</a></h2>
<p>Before you mention it — yes, I know about <strong>GRUB Customizer</strong>,<br>
<!-- -->but we’re doing it the <em>proper way</em> via terminal because it’s simpler and cleaner.</p>
<p>Using the <a href="https://www.gnome-look.org/p/2076542" target="_blank" rel="noopener noreferrer" class="">Star Rail Theme</a> as an example:<br>
<!-- -->Click <strong>Download</strong>, choose the version you like (<code>Anaxa.tar.gz</code> in my case), and extract it — it’s a GZIP file that contains all theme assets.</p>
<p>Once extracted, you’ll get a folder like this:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">Anaxa</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">├── background.png</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">├── icons</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">│   ├── </span><span class="token punctuation" style="color:rgb(248, 248, 242)">..</span><span class="token punctuation" style="color:rgb(248, 248, 242)">..</span><span class="token punctuation" style="color:rgb(248, 248, 242)">..</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">│   ├── windows11.png</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">│   ├── windows.png</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">│   └── zorin.png</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">├── select_c.png</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">├── select_e.png</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">├── select_w.png</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">└── theme.txt</span><br></div></code></pre></div></div>
<p>Basically, a theme is a folder with images and one main file — <code>theme.txt</code> — that defines layout and asset positioning.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="step-1--create-the-grub-theme-folder">Step 1 — Create the GRUB Theme Folder<a href="https://harukadev.com/blog/customizing-your-grub-dual-boot-with-style#step-1--create-the-grub-theme-folder" class="hash-link" aria-label="Direct link to Step 1 — Create the GRUB Theme Folder" title="Direct link to Step 1 — Create the GRUB Theme Folder" translate="no">​</a></h3>
<p>If it doesn’t already exist:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">mkdir</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-p</span><span class="token plain"> /boot/grub/themes/</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="step-2--copy-the-theme">Step 2 — Copy the Theme<a href="https://harukadev.com/blog/customizing-your-grub-dual-boot-with-style#step-2--copy-the-theme" class="hash-link" aria-label="Direct link to Step 2 — Copy the Theme" title="Direct link to Step 2 — Copy the Theme" translate="no">​</a></h3>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">cp</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-r</span><span class="token plain"> Downloads/Anaxa /boot/grub/themes/</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="step-3--check-your-screen-resolution">Step 3 — Check Your Screen Resolution<a href="https://harukadev.com/blog/customizing-your-grub-dual-boot-with-style#step-3--check-your-screen-resolution" class="hash-link" aria-label="Direct link to Step 3 — Check Your Screen Resolution" title="Direct link to Step 3 — Check Your Screen Resolution" translate="no">​</a></h3>
<p>Run this command to get your monitor’s resolution:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">xdpyinfo </span><span class="token operator">|</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">awk</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'/dimensions/ {print $2}'</span><br></div></code></pre></div></div>
<p>It should return something like <code>1920x1080</code>.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="step-4--configure-grub">Step 4 — Configure GRUB<a href="https://harukadev.com/blog/customizing-your-grub-dual-boot-with-style#step-4--configure-grub" class="hash-link" aria-label="Direct link to Step 4 — Configure GRUB" title="Direct link to Step 4 — Configure GRUB" translate="no">​</a></h3>
<p>Open the GRUB configuration file:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">nano</span><span class="token plain"> /etc/default/grub</span><br></div></code></pre></div></div>
<p>Find or add this line (replace <strong>Anaxa</strong> with your theme name):</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">GRUB_THEME</span><span class="token operator">=</span><span class="token string" style="color:rgb(255, 121, 198)">"/boot/grub/themes/Anaxa/theme.txt"</span><br></div></code></pre></div></div>
<p>Then scroll down and find this block:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># The resolution used on graphical terminal</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># note that you can use only modes which your graphic card supports via VBE</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># you can see them in real GRUB with the command `vbeinfo'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># GRUB_GFXMODE=auto</span><br></div></code></pre></div></div>
<p>Uncomment and set the correct resolution you got earlier:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">GRUB_GFXMODE</span><span class="token operator">=</span><span class="token plain">1920x1080</span><br></div></code></pre></div></div>
<p>Save and exit (<code>CTRL+X</code>, then <code>Y</code>, then <strong>Enter</strong>).</p>
<p>Finally, update GRUB so it applies the new settings:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">grub-mkconfig</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-o</span><span class="token plain"> /boot/grub/grub.cfg</span><br></div></code></pre></div></div>
<p>Restart your computer, and voilà — your new stylish GRUB should appear:</p>
<p><img decoding="async" loading="lazy" src="https://imgur.com/bkDzpd4.jpg" alt="After" class="img_ev3q"></p>
<blockquote>
<p>Ignore the small “Anaxa” label in the bottom-right corner — that’s just part of the theme preview.</p>
</blockquote>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="edit-note">Edit Note<a href="https://harukadev.com/blog/customizing-your-grub-dual-boot-with-style#edit-note" class="hash-link" aria-label="Direct link to Edit Note" title="Direct link to Edit Note" translate="no">​</a></h3>
<p>I forgot to mention it — <strong>Ventoy</strong> also uses GRUB under the hood,
so it’s totally possible to theme it too.
Maybe I’ll cover that in a future post.
Oh, and I’ll probably update the Star Rail theme link to the GitHub version later.</p>
<!-- -->
<section data-footnotes="true" class="footnotes"><h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI sr-only" id="footnote-label">Footnotes<a href="https://harukadev.com/blog/customizing-your-grub-dual-boot-with-style#footnote-label" class="hash-link" aria-label="Direct link to Footnotes" title="Direct link to Footnotes" translate="no">​</a></h2>
<ol>
<li class="anchorTargetHideOnScrollNavbar_vjPI" id="user-content-fn-1-489a50">
<p>GRUB supports icons for easier visual identification, and most themes already include full icon sets for operating systems and Linux distros (like the ones in the example images). <a href="https://harukadev.com/blog/customizing-your-grub-dual-boot-with-style#user-content-fnref-1-489a50" data-footnote-backref="" aria-label="Back to reference 1" class="data-footnote-backref">↩</a></p>
</li>
</ol>
</section>]]></content:encoded>
            <category>Linux</category>
            <category>Customization</category>
            <category>Improvements</category>
            <category>Dual Boot</category>
            <category>Themes</category>
        </item>
        <item>
            <title><![CDATA[How to Be More Productive with Your Terminal]]></title>
            <link>https://harukadev.com/blog/how-to-be-more-productive-with-your-terminal</link>
            <guid>https://harukadev.com/blog/how-to-be-more-productive-with-your-terminal</guid>
            <pubDate>Sun, 26 Jan 2025 10:55:09 GMT</pubDate>
            <description><![CDATA[A complete guide to customizing your Linux terminal using Hyper.js, Zsh, Oh My Zsh, Catppuccin theme, Fira Code font, and Spaceship prompt for a beautiful and productive environment.]]></description>
            <content:encoded><![CDATA[<p>After almost <strong>10 months without posting anything useful</strong>, I’m finally back — and this time, I’m going to show you how to make your terminal much more productive (and honestly, prettier).<br>
<!-- -->Let’s get straight to the point — here’s what we’re going to cover:</p>
<ul>
<li class=""><a href="https://harukadev.com/blog/how-to-be-more-productive-with-your-terminal#installing-hyperjs" class="">Installing Hyper.js</a></li>
<li class=""><a href="https://harukadev.com/blog/how-to-be-more-productive-with-your-terminal#configuring-the-catppuccin-theme" class="">Configuring the Catppuccin Theme</a></li>
<li class=""><a href="https://harukadev.com/blog/how-to-be-more-productive-with-your-terminal#installing-zsh" class="">Installing Zsh</a></li>
<li class=""><a href="https://harukadev.com/blog/how-to-be-more-productive-with-your-terminal#installing-oh-my-zsh" class="">Installing Oh My Zsh</a></li>
<li class=""><a href="https://harukadev.com/blog/how-to-be-more-productive-with-your-terminal#installing-zinit" class="">Installing ZInit</a></li>
<li class=""><a href="https://harukadev.com/blog/how-to-be-more-productive-with-your-terminal#installing-the-fira-code-font" class="">Installing the Fira Code Font</a></li>
<li class=""><a href="https://harukadev.com/blog/how-to-be-more-productive-with-your-terminal#installing-spaceship" class="">Installing Spaceship</a></li>
<li class=""><a href="https://harukadev.com/blog/how-to-be-more-productive-with-your-terminal#preview" class="">Preview</a></li>
<li class=""><a href="https://harukadev.com/blog/how-to-be-more-productive-with-your-terminal#useful-links" class="">Useful Links</a></li>
</ul>
<blockquote>
<p>For reference, I used <strong>Zorin OS Core</strong> (fresh install) while writing this tutorial.</p>
</blockquote>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="installing-hyperjs">Installing Hyper.js<a href="https://harukadev.com/blog/how-to-be-more-productive-with-your-terminal#installing-hyperjs" class="hash-link" aria-label="Direct link to Installing Hyper.js" title="Direct link to Installing Hyper.js" translate="no">​</a></h2>
<p><strong>Hyper.js</strong>, or simply <strong>Hyper</strong>, is a terminal built with Electron — but here’s the catch: it’s <strong>beautiful, extensible, cross-platform</strong>, and extremely easy to configure.<br>
<!-- -->Basically, the same setup works on all your machines. I absolutely love it.</p>
<p>To install it, visit the <a href="https://hyper.is/" target="_blank" rel="noopener noreferrer" class="">official website</a> and click <strong>Download</strong>, or scroll down to pick the right package for your OS:</p>
<p><img decoding="async" loading="lazy" src="https://imgur.com/Erh43IX.png" alt="Installation Example" class="img_ev3q"></p>
<p>Once installed, open Hyper — it should look like this by default:</p>
<p><img decoding="async" loading="lazy" src="https://imgur.com/cQUj8Wl.png" alt="Hyper Default" class="img_ev3q"></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="configuring-the-catppuccin-theme">Configuring the Catppuccin Theme<a href="https://harukadev.com/blog/how-to-be-more-productive-with-your-terminal#configuring-the-catppuccin-theme" class="hash-link" aria-label="Direct link to Configuring the Catppuccin Theme" title="Direct link to Configuring the Catppuccin Theme" translate="no">​</a></h2>
<p><strong>Catppuccin</strong> is a gorgeous theme — perfect if, like me, you’ve grown tired of using Dracula everywhere.<br>
<!-- -->It’s not mandatory for this tutorial, but I highly recommend it.<br>
<!-- -->Like Dracula, Catppuccin has ports for tons of tools. You can check them out at <a href="https://catppuccin.com/ports" target="_blank" rel="noopener noreferrer" class="">Catppuccin Ports</a>.</p>
<p>To install it, open your Hyper configuration file:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">nano</span><span class="token plain"> ~/.hyper.js</span><br></div></code></pre></div></div>
<p>Add the following under the <code>plugins</code> section:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"plugins"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">"hypurr#latest"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></div></code></pre></div></div>
<p>Catppuccin comes in <strong>four color palettes</strong>:</p>
<ul>
<li class=""><a href="https://github.com/catppuccin/catppuccin#-palette" target="_blank" rel="noopener noreferrer" class="">Latte</a></li>
<li class=""><a href="https://github.com/catppuccin/catppuccin#-palette" target="_blank" rel="noopener noreferrer" class="">Frappé</a></li>
<li class=""><a href="https://github.com/catppuccin/catppuccin#-palette" target="_blank" rel="noopener noreferrer" class="">Macchiato</a></li>
<li class=""><a href="https://github.com/catppuccin/catppuccin#-palette" target="_blank" rel="noopener noreferrer" class="">Mocha</a></li>
</ul>
<p>Choose your favorite and add this line to your config:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">module</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">exports</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token literal-property property">config</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token literal-property property">catppuccinTheme</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Macchiato"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// &lt;===== Add this</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token spread operator">...</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token spread operator">...</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></div></code></pre></div></div>
<p>Now your terminal should look something like this with the <strong>Macchiato</strong> theme:</p>
<p><img decoding="async" loading="lazy" src="https://imgur.com/XOQAmjq.png" alt="Catppuccin theme in Hyper.js" class="img_ev3q"></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="installing-zsh">Installing Zsh<a href="https://harukadev.com/blog/how-to-be-more-productive-with-your-terminal#installing-zsh" class="hash-link" aria-label="Direct link to Installing Zsh" title="Direct link to Installing Zsh" translate="no">​</a></h2>
<p>Up to this point, we’ve been working mostly on style.
Now let’s make the terminal <em>powerful</em> using <strong>Zsh</strong> — an interactive shell that’s also a robust scripting language.
It brings features from Bash and other shells, plus lots of improvements.</p>
<p>Install it with:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">apt</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">zsh</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-y</span><br></div></code></pre></div></div>
<p>Check if it installed correctly:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">zsh</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--version</span><br></div></code></pre></div></div>
<p>You should see something like <code>zsh 5.8.1 (x86_64-ubuntu-linux-gnu)</code>.</p>
<p>To make Zsh your default shell:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">chsh </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-s</span><span class="token plain"> /usr/bin/zsh</span><br></div></code></pre></div></div>
<p>Then <strong>log out and back in</strong> for the change to take effect.</p>
<p>If you see this screen, just type <code>2</code> and press <strong>Enter</strong>:</p>
<p><img decoding="async" loading="lazy" src="https://imgur.com/oAXYVgj.png" alt="Message for new users" class="img_ev3q"></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="installing-oh-my-zsh">Installing Oh My Zsh<a href="https://harukadev.com/blog/how-to-be-more-productive-with-your-terminal#installing-oh-my-zsh" class="hash-link" aria-label="Direct link to Installing Oh My Zsh" title="Direct link to Installing Oh My Zsh" translate="no">​</a></h2>
<p><strong>Oh My Zsh</strong> (or just <strong>OMZ</strong>) is a framework that makes Zsh configuration much easier — and the <a href="https://ohmyz.sh/" target="_blank" rel="noopener noreferrer" class="">official site</a> description is pretty funny 😆.</p>
<p>First, make sure you have <strong>curl</strong> and <strong>git</strong> installed:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">apt</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">git</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-y</span><br></div></code></pre></div></div>
<p>Then, install Oh My Zsh:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">sh</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-c</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">$(</span><span class="token string variable function" style="color:rgb(80, 250, 123);font-style:italic">curl</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token string variable parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-fsSL</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">)</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><br></div></code></pre></div></div>
<p>You’ll instantly notice how much prettier it looks.
Also, take a look at the <code>~/.zshrc</code> file — it’s similar to <code>.bashrc</code> or <code>.profile</code>.
If you keep your aliases in another file (like <code>.profile</code>), just add this line anywhere in <code>.zshrc</code>:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token builtin class-name" style="color:rgb(189, 147, 249)">source</span><span class="token plain"> ~/.profile</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="installing-zinit">Installing ZInit<a href="https://harukadev.com/blog/how-to-be-more-productive-with-your-terminal#installing-zinit" class="hash-link" aria-label="Direct link to Installing ZInit" title="Direct link to Installing ZInit" translate="no">​</a></h2>
<p><strong>ZInit</strong> is a flexible and fast plugin manager for Zsh.
It makes installing plugins effortless.</p>
<p>Install it with:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">bash</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-c</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">$(</span><span class="token string variable function" style="color:rgb(80, 250, 123);font-style:italic">curl</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token string variable parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--fail</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> --show-error </span><span class="token string variable parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--silent</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> </span><span class="token string variable parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--location</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic"> https://raw.githubusercontent.com/zdharma-continuum/zinit/HEAD/scripts/install.sh</span><span class="token string variable" style="color:rgb(189, 147, 249);font-style:italic">)</span><span class="token string" style="color:rgb(255, 121, 198)">"</span><br></div></code></pre></div></div>
<p>Accept the prompts with <code>y</code> and <strong>Enter</strong>.</p>
<p>Now, to add some essential plugins, open <code>~/.zshrc</code> and add these lines at the end:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">zinit light zdharma/fast-syntax-highlighting</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">zinit light zsh-users/zsh-autosuggestions</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">zinit light zsh-users/zsh-completions</span><br></div></code></pre></div></div>
<p>Close and reopen your terminal — ZInit will automatically install them.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="installing-the-fira-code-font">Installing the Fira Code Font<a href="https://harukadev.com/blog/how-to-be-more-productive-with-your-terminal#installing-the-fira-code-font" class="hash-link" aria-label="Direct link to Installing the Fira Code Font" title="Direct link to Installing the Fira Code Font" translate="no">​</a></h2>
<p><strong>Fira Code</strong> is a free monospaced font with ligatures that make reading code easier and more pleasant.
It doesn’t change your code — just how it’s rendered visually.</p>
<p>We’ll need it because the next step (Spaceship) looks better with it.
Learn more about it on the <a href="https://github.com/tonsky/FiraCode" target="_blank" rel="noopener noreferrer" class="">Fira Code GitHub page</a>.</p>
<p>Install it using:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">sudo</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">apt</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><span class="token plain"> fonts-firacode </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-y</span><br></div></code></pre></div></div>
<p>To use it in <strong>Hyper</strong>, open the preferences (<code>Menu → Edit → Preferences</code>), which opens <code>~/.hyper.js</code>.
Then add <strong>Fira Code</strong> to your fonts:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">module</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">exports</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token literal-property property">config</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token literal-property property">fontFamily</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'"Fira Code", Menlo, "DejaVu Sans Mono", Consolas, "Lucida Console", monospace'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token spread operator">...</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token spread operator">...</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="installing-spaceship">Installing Spaceship<a href="https://harukadev.com/blog/how-to-be-more-productive-with-your-terminal#installing-spaceship" class="hash-link" aria-label="Direct link to Installing Spaceship" title="Direct link to Installing Spaceship" translate="no">​</a></h2>
<p><strong>Spaceship</strong> is a <em>powerful Zsh prompt</em> — it shows useful information like git status, runtime, and more, in a clean and aesthetic way.</p>
<p>It can make your terminal look like this:</p>
<p><img decoding="async" loading="lazy" src="https://imgur.com/VmXS7yS.png" alt="Spaceship Example" class="img_ev3q"></p>
<p>Install it via ZInit by adding this to the end of your <code>~/.zshrc</code>:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">zinit light spaceship-prompt/spaceship-prompt</span><br></div></code></pre></div></div>
<p>Now configure it by appending this block to the same file:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SPACESHIP_PROMPT_ORDER</span><span class="token operator">=</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  user</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">dir</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">host</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">git</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">hg</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  exec_time</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  line_sep</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">jobs</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  exit_code</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  char</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SPACESHIP_USER_SHOW</span><span class="token operator">=</span><span class="token plain">always</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SPACESHIP_PROMPT_ADD_NEWLINE</span><span class="token operator">=</span><span class="token plain">false</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SPACESHIP_CHAR_SYMBOL</span><span class="token operator">=</span><span class="token string" style="color:rgb(255, 121, 198)">"❯"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token assign-left variable" style="color:rgb(189, 147, 249);font-style:italic">SPACESHIP_CHAR_SUFFIX</span><span class="token operator">=</span><span class="token string" style="color:rgb(255, 121, 198)">" "</span><br></div></code></pre></div></div>
<p>Restart your terminal, and ZInit will handle the rest.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="preview">Preview<a href="https://harukadev.com/blog/how-to-be-more-productive-with-your-terminal#preview" class="hash-link" aria-label="Direct link to Preview" title="Direct link to Preview" translate="no">​</a></h2>
<p>After all these steps, your terminal will be both <strong>beautiful and highly functional</strong> — with autocomplete, syntax highlighting, and more.
Of course, you can add hundreds of other plugins using OMZ, ZInit, or Spaceship.</p>
<p>Here’s the final result on my setup:</p>
<p><img decoding="async" loading="lazy" src="https://imgur.com/2CEqODY.png" alt="Example" class="img_ev3q"></p>
<p>Spaceship helps you know exactly where you are in your system, and yes — if you connect via SSH, it looks the same remotely.
Pretty cool, right?</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="useful-links">Useful Links<a href="https://harukadev.com/blog/how-to-be-more-productive-with-your-terminal#useful-links" class="hash-link" aria-label="Direct link to Useful Links" title="Direct link to Useful Links" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://gist.github.com/raftheunis87/607682946d0ef041ce1ad28c37456b7d" target="_blank" rel="noopener noreferrer" class="">raftheunis87/hyperjs.md</a></li>
<li class=""><a href="https://bnb.github.io/awesome-hyper/" target="_blank" rel="noopener noreferrer" class="">awesome-hyper</a></li>
<li class=""><a href="https://github.com/ohmyzsh/ohmyzsh/wiki/plugins" target="_blank" rel="noopener noreferrer" class="">Oh My Zsh Plugins</a></li>
</ul>]]></content:encoded>
            <category>Linux</category>
            <category>Improvements</category>
            <category>Productivity</category>
            <category>Zsh</category>
            <category>Customization</category>
        </item>
        <item>
            <title><![CDATA[Exploring How to Use Fragments in Android Development]]></title>
            <link>https://harukadev.com/blog/exploring-how-to-use-fragments-in-android-development</link>
            <guid>https://harukadev.com/blog/exploring-how-to-use-fragments-in-android-development</guid>
            <pubDate>Sun, 14 Jan 2024 02:45:06 GMT</pubDate>
            <description><![CDATA[Learn how to use Fragments in Android development to create modular, flexible, and reusable UI components. A beginner-friendly guide with practical examples in Kotlin.]]></description>
            <content:encoded><![CDATA[<blockquote>
<p>Before we begin, I should mention that I’m still a beginner in Android development — and yes, I still code on my phone! So it won’t be possible to show examples using Android Studio.</p>
</blockquote>
<p>Hello, Android developers! 👋<br>
<!-- -->Today we’re going to understand what fragments are and how they can transform the way we design interfaces in Android applications.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="what-are-fragments">What Are Fragments?<a href="https://harukadev.com/blog/exploring-how-to-use-fragments-in-android-development#what-are-fragments" class="hash-link" aria-label="Direct link to What Are Fragments?" title="Direct link to What Are Fragments?" translate="no">​</a></h2>
<p>If you’re starting out in Android development, understanding fragments is essential.<br>
<!-- -->They act as modular parts of an activity, providing flexibility and reusability.<br>
<!-- -->Think of them as <strong>LEGO pieces</strong> used to build dynamic interfaces.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="setting-up-dependencies">Setting Up Dependencies<a href="https://harukadev.com/blog/exploring-how-to-use-fragments-in-android-development#setting-up-dependencies" class="hash-link" aria-label="Direct link to Setting Up Dependencies" title="Direct link to Setting Up Dependencies" translate="no">​</a></h2>
<p>Before diving into fragments, we need to configure some dependencies.<br>
<!-- -->Add the <strong>Google Maven repository</strong> to your top-level <code>build.gradle</code> file:</p>
<div class="language-groovy codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-groovy codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">dependencyResolutionManagement {</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  repositories {</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      google()</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  }</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">}</span><br></div></code></pre></div></div>
<p>Then, add the <code>fragment-ktx</code> dependency in your module’s <code>build.gradle</code> file:</p>
<div class="language-groovy codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-groovy codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">dependencies {</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  implementation("androidx.fragment:fragment-ktx:1.5.5")</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">}</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="creating-the-fragment-layout">Creating the Fragment Layout<a href="https://harukadev.com/blog/exploring-how-to-use-fragments-in-android-development#creating-the-fragment-layout" class="hash-link" aria-label="Direct link to Creating the Fragment Layout" title="Direct link to Creating the Fragment Layout" translate="no">​</a></h2>
<p>Before implementing the class, let’s prepare the environment.
Create a new layout named <code>fragment_example.xml</code>:</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">LinearLayout</span><span class="token tag" style="color:rgb(255, 121, 198)"> </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">xmlns:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">android</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">https://schemas.android.com/apk/res/android</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token tag" style="color:rgb(255, 121, 198)">              </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">android:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">layout_width</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">match_parent</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token tag" style="color:rgb(255, 121, 198)">              </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">android:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">layout_height</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">match_parent</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token tag" style="color:rgb(255, 121, 198)">              </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">android:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">gravity</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">center</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token tag" style="color:rgb(255, 121, 198)">              </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">android:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">orientation</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">vertical</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">TextView</span><span class="token tag" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token tag" style="color:rgb(255, 121, 198)">            </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">android:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">layout_width</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">wrap_content</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token tag" style="color:rgb(255, 121, 198)">            </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">android:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">layout_height</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">wrap_content</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token tag" style="color:rgb(255, 121, 198)">            </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">android:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">text</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">Fragment Example</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token tag" style="color:rgb(255, 121, 198)">            </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">android:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">textColor</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">@android:color/white</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token tag" style="color:rgb(255, 121, 198)">            </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">android:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">textSize</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">22sp</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token tag" style="color:rgb(255, 121, 198)">            </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">android:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">textStyle</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">bold</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">LinearLayout</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><br></div></code></pre></div></div>
<p>Now, define where the fragment will appear in your main layout (<code>activity_main.xml</code>) using <code>FragmentContainerView</code>:</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">LinearLayout</span><span class="token tag" style="color:rgb(255, 121, 198)"> </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">xmlns:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">android</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">https://schemas.android.com/apk/res/android</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token tag" style="color:rgb(255, 121, 198)">              </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">android:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">layout_width</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">match_parent</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token tag" style="color:rgb(255, 121, 198)">              </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">android:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">layout_height</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">match_parent</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token tag" style="color:rgb(255, 121, 198)">              </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">android:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">gravity</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">center</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token tag" style="color:rgb(255, 121, 198)">              </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">android:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">orientation</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">vertical</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">androidx.fragment.app.FragmentContainerView</span><span class="token tag" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token tag" style="color:rgb(255, 121, 198)">            </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">android:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">id</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">@+id/fragment_container</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token tag" style="color:rgb(255, 121, 198)">            </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">android:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">layout_width</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">match_parent</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token tag" style="color:rgb(255, 121, 198)">            </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">android:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">layout_height</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">match_parent</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">LinearLayout</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="creating-the-fragment-class">Creating the Fragment Class<a href="https://harukadev.com/blog/exploring-how-to-use-fragments-in-android-development#creating-the-fragment-class" class="hash-link" aria-label="Direct link to Creating the Fragment Class" title="Direct link to Creating the Fragment Class" translate="no">​</a></h2>
<p>Finally, let’s create the fragment class by extending <code>Fragment</code> and overriding the <code>onCreateView</code> method:</p>
<div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> android</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">os</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">Bundle</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> androidx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">fragment</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">app</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">Fragment</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> android</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">view</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">LayoutInflater</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> android</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">view</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">View</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> android</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">view</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">ViewGroup</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">class</span><span class="token plain"> ExampleFragment </span><span class="token operator">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">Fragment</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">override</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">fun</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">onCreateView</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    inflater</span><span class="token operator">:</span><span class="token plain"> LayoutInflater</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    container</span><span class="token operator">:</span><span class="token plain"> ViewGroup</span><span class="token operator">?</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    savedInstanceState</span><span class="token operator">:</span><span class="token plain"> Bundle</span><span class="token operator">?</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token operator">:</span><span class="token plain"> View </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> inflater</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">inflate</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">R</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">layout</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">fragment_example</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> container</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="a-more-concise-alternative">A More Concise Alternative<a href="https://harukadev.com/blog/exploring-how-to-use-fragments-in-android-development#a-more-concise-alternative" class="hash-link" aria-label="Direct link to A More Concise Alternative" title="Direct link to A More Concise Alternative" translate="no">​</a></h3>
<p>A cleaner and shorter way to define a fragment is:</p>
<div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> android</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">os</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">Bundle</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> androidx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">fragment</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">app</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">Fragment</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> android</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">view</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">View</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">class</span><span class="token plain"> ExampleFragment </span><span class="token operator">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">Fragment</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">R</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">layout</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">fragment_example</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">override</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">fun</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">onViewCreated</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">view</span><span class="token operator">:</span><span class="token plain"> View</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> savedInstanceState</span><span class="token operator">:</span><span class="token plain"> Bundle</span><span class="token operator">?</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">super</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">onViewCreated</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">view</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> savedInstanceState</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></div></code></pre></div></div>
<p>This approach removes the need to override <code>onCreateView()</code>.
I’ve seen many tutorials that put logic inside <code>onCreateView()</code>, but that’s not ideal.
It’s better to use <code>onViewCreated()</code> since it’s called <strong>after the fragment is attached to the activity and the layout is inflated</strong>.
<a href="https://www.devmedia.com.br/amp/ciclo-de-vida-do-fragments-no-android/33099" target="_blank" rel="noopener noreferrer" class="">Learn more about the Fragment lifecycle</a></p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="attaching-the-fragment-to-an-activity">Attaching the Fragment to an Activity<a href="https://harukadev.com/blog/exploring-how-to-use-fragments-in-android-development#attaching-the-fragment-to-an-activity" class="hash-link" aria-label="Direct link to Attaching the Fragment to an Activity" title="Direct link to Attaching the Fragment to an Activity" translate="no">​</a></h2>
<p>There are two ways to attach a fragment to the container defined in <code>activity_main.xml</code>:
via XML or programmatically.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="via-xml">Via XML<a href="https://harukadev.com/blog/exploring-how-to-use-fragments-in-android-development#via-xml" class="hash-link" aria-label="Direct link to Via XML" title="Direct link to Via XML" translate="no">​</a></h3>
<p>To attach it directly in XML, use the <code>android:name</code> attribute to specify the fragment’s path — in this example, <code>com.example.example.ExampleFragment</code>:</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">LinearLayout</span><span class="token tag" style="color:rgb(255, 121, 198)"> </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">xmlns:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">android</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">https://schemas.android.com/apk/res/android</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token tag" style="color:rgb(255, 121, 198)">              </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">android:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">layout_width</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">match_parent</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token tag" style="color:rgb(255, 121, 198)">              </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">android:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">layout_height</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">match_parent</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token tag" style="color:rgb(255, 121, 198)">              </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">android:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">gravity</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">center</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token tag" style="color:rgb(255, 121, 198)">              </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">android:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">orientation</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">vertical</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;</span><span class="token tag" style="color:rgb(255, 121, 198)">androidx.fragment.app.FragmentContainerView</span><span class="token tag" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token tag" style="color:rgb(255, 121, 198)">            </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">android:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">id</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">@+id/fragment_container</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token tag" style="color:rgb(255, 121, 198)">            </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">android:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">name</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">com.example.example.ExampleFragment</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token tag" style="color:rgb(255, 121, 198)">            </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">android:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">layout_width</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">match_parent</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag" style="color:rgb(255, 121, 198)"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token tag" style="color:rgb(255, 121, 198)">            </span><span class="token tag attr-name namespace" style="color:rgb(241, 250, 140)">android:</span><span class="token tag attr-name" style="color:rgb(241, 250, 140)">layout_height</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(248, 248, 242)">=</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag attr-value" style="color:rgb(255, 121, 198)">match_parent</span><span class="token tag attr-value punctuation" style="color:rgb(248, 248, 242)">"</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&lt;/</span><span class="token tag" style="color:rgb(255, 121, 198)">LinearLayout</span><span class="token tag punctuation" style="color:rgb(248, 248, 242)">&gt;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="programmatically">Programmatically<a href="https://harukadev.com/blog/exploring-how-to-use-fragments-in-android-development#programmatically" class="hash-link" aria-label="Direct link to Programmatically" title="Direct link to Programmatically" translate="no">​</a></h3>
<p>To attach a fragment programmatically, use a <code>FragmentTransaction</code> in your activity:</p>
<div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">val</span><span class="token plain"> fragment </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">ExampleFragment</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">val</span><span class="token plain"> fragmentTransaction </span><span class="token operator">=</span><span class="token plain"> supportFragmentManager</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">beginTransaction</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">fragmentTransaction</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">add</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">R</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">id</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">fragment_container</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> fragment</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">fragmentTransaction</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">commit</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><br></div></code></pre></div></div>
<p>For better management, you can create a function to handle fragment transactions:</p>
<div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">package</span><span class="token plain"> com</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">example</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">example</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> androidx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">appcompat</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">app</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">AppCompatActivity</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> android</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">os</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">Bundle</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> androidx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">fragment</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">app</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">Fragment</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">class</span><span class="token plain"> MainActivity </span><span class="token operator">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">AppCompatActivity</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">override</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">fun</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">onCreate</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">savedInstanceState</span><span class="token operator">:</span><span class="token plain"> Bundle</span><span class="token operator">?</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">super</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">onCreate</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">savedInstanceState</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token function" style="color:rgb(80, 250, 123)">setContentView</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">R</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">layout</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">activity_main</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">changeFragment</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token function" style="color:rgb(80, 250, 123)">ExampleFragment</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">changeFragment</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token function" style="color:rgb(80, 250, 123)">Example2Fragment</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">private</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">fun</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">changeFragment</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">fragment</span><span class="token operator">:</span><span class="token plain"> Fragment</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">val</span><span class="token plain"> fragmentTransaction </span><span class="token operator">=</span><span class="token plain"> supportFragmentManager</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">beginTransaction</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    fragmentTransaction</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">add</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">R</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">id</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">fragment_container</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> fragment</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    fragmentTransaction</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">commit</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></div></code></pre></div></div>
<p>Fragments are key parts for creating <strong>reusable and robust interfaces</strong> in Android development.
Experiment, improve your skills, and start building dynamic UIs! 🚀👩‍💻👨‍💻</p>
<p>I hope this guide adds a little bit of magic to your Android development journey.
<strong>Happy coding!</strong> 👩‍💻👨‍💻</p>]]></content:encoded>
            <category>Android</category>
            <category>Kotlin</category>
            <category>UI/UX</category>
            <category>Fundamentals</category>
        </item>
        <item>
            <title><![CDATA[Data Structures with Examples in JavaScript]]></title>
            <link>https://harukadev.com/blog/data-structure-with-examples-in-javascript</link>
            <guid>https://harukadev.com/blog/data-structure-with-examples-in-javascript</guid>
            <pubDate>Sun, 25 Dec 2022 00:54:05 GMT</pubDate>
            <description><![CDATA[Data structures are a fundamental concept in programming and algorithm design, responsible for organizing and manipulating data efficiently in memory to optimize performance and operations.]]></description>
            <content:encoded><![CDATA[<p><strong>Data structures</strong> are a fundamental concept in building algorithms and programming languages, as they are responsible for organizing and manipulating data more efficiently in the computer's memory — which can lead to the optimization of processes and operations.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="types-of-data-structures">Types of Data Structures<a href="https://harukadev.com/blog/data-structure-with-examples-in-javascript#types-of-data-structures" class="hash-link" aria-label="Direct link to Types of Data Structures" title="Direct link to Types of Data Structures" translate="no">​</a></h2>
<p>The most common examples are lists, stacks, queues, trees, and graphs. In the examples below, I’ll use arrays as a base.</p>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="lists">Lists<a href="https://harukadev.com/blog/data-structure-with-examples-in-javascript#lists" class="hash-link" aria-label="Direct link to Lists" title="Direct link to Lists" translate="no">​</a></h3>
<p>A list is a collection of values organized in an ordered sequence. In JavaScript, a list is an <code>Array</code>. An array is an invaluable data structure when you need to store and manage a collection of items in an ordered way. It offers many useful operations to manipulate these items, such as adding or removing elements, searching for a specific item, etc.</p>
<p><img decoding="async" loading="lazy" src="https://imgur.com/uYk6IKs.png" alt="List" class="img_ev3q"></p>
<p>In general, you should use an array when you need to store and manage a collection of values and want fast access to them through numeric indices.</p>
<p><em>Example:</em></p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">// Create an empty list</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> list </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// Add elements to the list</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">list</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">push</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// adds 1 to the end of the list</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">list</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">unshift</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token number">2</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// adds 2 to the beginning of the list</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// Remove elements from the list</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">list</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">pop</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// removes the last element from the list</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">list</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">shift</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// removes the first element from the list</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// Access list elements</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token console class-name">console</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">list</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// prints the first element in the list</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// Search for elements in the list</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token console class-name">console</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">list</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">indexOf</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// prints the index of element 1 in the list</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// Sort elements in the list</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">list</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">sort</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// sorts the list elements in ascending order</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="stack">Stack<a href="https://harukadev.com/blog/data-structure-with-examples-in-javascript#stack" class="hash-link" aria-label="Direct link to Stack" title="Direct link to Stack" translate="no">​</a></h3>
<p>A stack is a structure that follows the rule “Last In, First Out” (LIFO), meaning the last item added to the array will be the first one removed.</p>
<p><img decoding="async" loading="lazy" src="https://imgur.com/U0kETOt.png" alt="Stack" class="img_ev3q"></p>
<p>Stacks are very common in programming languages and widely used in applications, such as undoing actions in code editors, browser navigation (when you go back to the previous page), among others.</p>
<p>Below is an example of a stack implementation in JavaScript:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">class</span><span class="token plain"> </span><span class="token class-name">Stack</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">constructor</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">items</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">push</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token parameter">item</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">items</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">push</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">item</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">pop</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">items</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">pop</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">peek</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">items</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">items</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">length</span><span class="token plain"> </span><span class="token operator">-</span><span class="token plain"> </span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">isEmpty</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">items</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">length</span><span class="token plain"> </span><span class="token operator">===</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">size</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">items</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">length</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="queue">Queue<a href="https://harukadev.com/blog/data-structure-with-examples-in-javascript#queue" class="hash-link" aria-label="Direct link to Queue" title="Direct link to Queue" translate="no">​</a></h3>
<p>A queue is the opposite of a stack because it follows the rule “First In, First Out” (FIFO), meaning the first item added is the first one removed.</p>
<p><img decoding="async" loading="lazy" src="https://imgur.com/S30TfT4.png" alt="Queue" class="img_ev3q"></p>
<p>Queues are very common in customer service systems, such as in banks, gas stations, or supermarket lines. They’re also widely used in many applications, such as background task management and event handling.</p>
<p>Example of a queue implementation in JavaScript:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">class</span><span class="token plain"> </span><span class="token class-name">Queue</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">constructor</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">items</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">enqueue</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token parameter">item</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">items</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">push</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">item</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">dequeue</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">items</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">shift</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">peek</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">items</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">isEmpty</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">items</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">length</span><span class="token plain"> </span><span class="token operator">===</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">size</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">items</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">length</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="trees">Trees<a href="https://harukadev.com/blog/data-structure-with-examples-in-javascript#trees" class="hash-link" aria-label="Direct link to Trees" title="Direct link to Trees" translate="no">​</a></h3>
<p>A tree is a bit more complex than the others. It’s a hierarchical data structure consisting of nodes and branches. Each node can have one or more children but only one parent. The very first node of the tree is called the <em>root</em>, and nodes without children are called <em>leaves</em>.</p>
<p><img decoding="async" loading="lazy" src="https://imgur.com/mlLuJew.png" alt="Trees" class="img_ev3q"></p>
<p>This structure is very useful and widely used in applications such as representing file system structures, implementing search trees, and representing hierarchical relationships in databases.</p>
<p>Example of a tree implementation in JavaScript:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">class</span><span class="token plain"> </span><span class="token class-name">TreeNode</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">constructor</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token parameter">value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">value</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">children</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">class</span><span class="token plain"> </span><span class="token class-name">Tree</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">constructor</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">root</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword null nil" style="color:rgb(189, 147, 249);font-style:italic">null</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> tree </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">Tree</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> root </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">TreeNode</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> left </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">TreeNode</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token number">2</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> right </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">TreeNode</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token number">3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">root</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">children</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">push</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">left</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> right</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">tree</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">root</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> root</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="graphs">Graphs<a href="https://harukadev.com/blog/data-structure-with-examples-in-javascript#graphs" class="hash-link" aria-label="Direct link to Graphs" title="Direct link to Graphs" translate="no">​</a></h3>
<p>A graph in data structures is composed of vertices (also known as nodes) and edges. Each vertex can have a set of edges that connect it to other vertices. The edges can be <em>directed</em> (meaning they have a direction) or <em>undirected</em> (meaning they don’t).
Graphs are used to represent relationships between elements in a dataset and are useful for solving the shortest path problems, representing networks, and modeling complex systems.
<a href="https://medium.com/@rsorage/grafos-introdu%C3%A7%C3%A3o-de-forma-f%C3%A1cil-a4959821e101" target="_blank" rel="noopener noreferrer" class="">See more</a></p>
<p><img decoding="async" loading="lazy" src="https://imgur.com/1Vr0DrZ.png" alt="Graphs" class="img_ev3q"></p>
<p>Here’s an example of an undirected graph in JavaScript:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">class</span><span class="token plain"> </span><span class="token class-name">Graph</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">constructor</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">nodes</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">edges</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">addNode</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token parameter">node</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">nodes</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">push</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">node</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">addEdge</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token parameter">node1</span><span class="token parameter punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token parameter"> node2</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">edges</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">push</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">node1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> node2</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> graph </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">Graph</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> node1 </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"A"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> node2 </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"B"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> node3 </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"C"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">graph</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">addNode</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">node1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">graph</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">addNode</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">node2</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">graph</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">addNode</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">node3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">graph</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">addEdge</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">node1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> node2</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">graph</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">addEdge</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">node2</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> node3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></div></code></pre></div></div>
<p>In this example, we have a <code>Graph</code> class that represents the entire graph. The graph has an array of nodes and an array of edges. We added three nodes to the graph and two edges connecting them, resulting in the following structure:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">A -- B -- C</span><br></div></code></pre></div></div>
<p>Here’s an example of a directed graph in JavaScript:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">class</span><span class="token plain"> </span><span class="token class-name">DirectedGraph</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">constructor</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">nodes</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">edges</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">addNode</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token parameter">node</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">nodes</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">push</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">node</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">addEdge</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token parameter">node1</span><span class="token parameter punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token parameter"> node2</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">this</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">edges</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">push</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">node1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> node2</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> graph </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">DirectedGraph</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> node1 </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"A"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> node2 </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"B"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> node3 </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"C"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">graph</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">addNode</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">node1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">graph</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">addNode</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">node2</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">graph</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">addNode</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">node3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">graph</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">addEdge</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">node1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> node2</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">graph</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">addEdge</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">node2</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> node3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></div></code></pre></div></div>
<p>In this example, we have a <code>DirectedGraph</code> class representing a directed graph. It’s the same as the previous example, except that the edges are directed — meaning they have a defined direction.
This gives us the following structure:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">A -&gt; B -&gt; C</span><br></div></code></pre></div></div>
<p>Other examples of graph usage include:</p>
<ul>
<li class="">Representing a computer network and finding the shortest path between two computers.</li>
<li class="">Representing a transportation network and finding the fastest route between two locations.</li>
<li class="">Representing a relationship network and finding the shortest path between two people.</li>
</ul>
<h2 class="anchor anchorTargetHideOnScrollNavbar_vjPI" id="sources">Sources<a href="https://harukadev.com/blog/data-structure-with-examples-in-javascript#sources" class="hash-link" aria-label="Direct link to Sources" title="Direct link to Sources" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://sites.google.com/site/proffdesiqueiraed/aulas/aula-1---introducao-a-estrutura-de-dados" target="_blank" rel="noopener noreferrer" class="">Data structures</a></li>
<li class="">The examples were created using ChatGPT because I was too lazy to code them by hand.</li>
<li class="">Images: <a href="https://www.google.com/amp/s/www.freecodecamp.org/portuguese/news/as-principais-estruturas-de-dados-que-voce-deve-conhecer-para-sua-proxima-entrevista-de-programacao/amp/" target="_blank" rel="noopener noreferrer" class="">list</a>, <a href="https://www.ime.usp.br/~pf/algoritmos/aulas/fila.html" target="_blank" rel="noopener noreferrer" class="">queue</a>, <a href="https://www.treinaweb.com.br/blog/o-que-e-e-como-funciona-a-estrutura-de-dados-pilha" target="_blank" rel="noopener noreferrer" class="">stack</a>, <a href="https://pt.m.wikipedia.org/wiki/Estrutura_de_dados" target="_blank" rel="noopener noreferrer" class="">trees</a>, <a href="https://medium.com/@rsorage/grafos-introdu%C3%A7%C3%A3o-de-forma-f%C3%A1cil-a4959821e101" target="_blank" rel="noopener noreferrer" class="">graphs</a></li>
</ul>]]></content:encoded>
            <category>Data Structures</category>
            <category>Programming</category>
            <category>JavaScript</category>
            <category>Fundamentals</category>
        </item>
    </channel>
</rss>