<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Insane Logs</title>
    <description>The latest articles on Forem by Insane Logs (@insanelogs).</description>
    <link>https://forem.com/insanelogs</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3255762%2Fc4d9199d-3a32-474f-ab14-0b82495eca59.jpg</url>
      <title>Forem: Insane Logs</title>
      <link>https://forem.com/insanelogs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/insanelogs"/>
    <language>en</language>
    <item>
      <title>Setup Hugo + Obsidian + Git pipeline in Arch Linux</title>
      <dc:creator>Insane Logs</dc:creator>
      <pubDate>Sun, 27 Jul 2025 04:03:08 +0000</pubDate>
      <link>https://forem.com/insanelogs/setup-hugo-obsidian-git-pipeline-in-arch-linux-4d6b</link>
      <guid>https://forem.com/insanelogs/setup-hugo-obsidian-git-pipeline-in-arch-linux-4d6b</guid>
      <description>&lt;h2&gt;
  
  
  Insane Hugo Pipeline for Arch Linux
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Inspired by NetworkChuck’s &lt;a href="https://youtu.be/dnE7c0ELEH8?si=3E6JENc2fJGbbgVT" rel="noopener noreferrer"&gt;I started a blog…..in 2024 (why you should too)&lt;/a&gt; video.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The guide is here: &lt;a href="https://hugo.insanelogs.xyz/posts/hugo-pipeline/" rel="noopener noreferrer"&gt;https://hugo.insanelogs.xyz/posts/hugo-pipeline/&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;I made a test Hugo website myself using the same guide. So I decided to put the guide in the test Hugo website too.  &lt;/p&gt;

&lt;p&gt;🦖&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://insanelogs.xyz/posts/setup-hugo-obsidian-git-pipeline/" rel="noopener noreferrer"&gt;Setup Hugo + Obsidian + Git pipeline in Arch Linux&lt;/a&gt; appeared first on &lt;a href="https://insanelogs.xyz" rel="noopener noreferrer"&gt;Insane Logs&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>blogging</category>
      <category>git</category>
      <category>guides</category>
      <category>hugo</category>
    </item>
    <item>
      <title>Linux CLI : System information commands #1</title>
      <dc:creator>Insane Logs</dc:creator>
      <pubDate>Sun, 20 Jul 2025 12:28:50 +0000</pubDate>
      <link>https://forem.com/insanelogs/linux-cli-system-information-commands-1-3h83</link>
      <guid>https://forem.com/insanelogs/linux-cli-system-information-commands-1-3h83</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Inspired from hack the box academy linux tutorials&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These are some commands which can help you get information about your system. Knowing them might come handy in times of troubleshooting.  &lt;/p&gt;

&lt;p&gt;I have broken down the commands into chunks of 5 at a time, so I can take time and provide you with proper examples.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. hostname&lt;/strong&gt; – Prints the name that you named your linux system while installing it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foo6ety9ezv3zimbqn1sa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foo6ety9ezv3zimbqn1sa.png" alt="hostname command with output screenshot" width="800" height="80"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The hostname (or simply name) of this system is &lt;strong&gt;ubuntuServer&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;2. whoami&lt;/strong&gt; – Prints the name of the user currently using the terminal.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; You might login into the system via different user and then switch to a different user. It will show the most recent user you switched to.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdn7mapk4u35ijmmco0y0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdn7mapk4u35ijmmco0y0.png" alt="whoami command with output screenshot" width="800" height="82"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Currently a user called &lt;strong&gt;insane&lt;/strong&gt; is using the terminal.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;3. id&lt;/strong&gt; – This command simply commands expands on the whoami commands and provides more information like groups the user is into, their respective group ids and userid of the user.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frqbn1y6od1i05s1axasr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frqbn1y6od1i05s1axasr.png" alt="id command with output screenshot" width="800" height="72"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;User &lt;strong&gt;insane’s&lt;/strong&gt; userid is &lt;strong&gt;1000&lt;/strong&gt;. His primary group is also called &lt;strong&gt;insane&lt;/strong&gt; with group id being &lt;strong&gt;1000&lt;/strong&gt; (same as userid). Apart from that he is in &lt;strong&gt;groups&lt;/strong&gt; – &lt;strong&gt;user&lt;/strong&gt; (group id: &lt;strong&gt;100&lt;/strong&gt; ), &lt;strong&gt;developers&lt;/strong&gt; (group id: &lt;strong&gt;1001&lt;/strong&gt; ), &lt;strong&gt;docker&lt;/strong&gt; (group id: &lt;strong&gt;1002&lt;/strong&gt; ).&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;4. uname&lt;/strong&gt; – Prints basic information about the system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0cx8mvz0yg02642wzkvl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0cx8mvz0yg02642wzkvl.png" alt="uname command with output screenshot" width="800" height="73"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It simply returns name of the &lt;strong&gt;kernel&lt;/strong&gt; which is &lt;strong&gt;linux&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Uname&lt;/strong&gt; command combined with some flags becomes very powerful and handy, but its a topic for some other time.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;5. who&lt;/strong&gt; – Prints who is currently logged in (like whoami) with some little bit of extra information. It also shows from which virtual terminal user logged in, when did he logged in and ipv4 address of the system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffd3efkjjvhbsggboc7su.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffd3efkjjvhbsggboc7su.png" alt="who command with output screenshot" width="800" height="46"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I logged into this system/ server via &lt;strong&gt;root&lt;/strong&gt; user (later I changed to a user called &lt;strong&gt;insane&lt;/strong&gt; to run all the commands including this one). I logged in via &lt;strong&gt;virtual terminal 0&lt;/strong&gt;. It also shows &lt;strong&gt;date and time&lt;/strong&gt; of login and &lt;strong&gt;ipv4&lt;/strong&gt;  &lt;strong&gt;address&lt;/strong&gt; of this system .  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Virtual terminal&lt;/strong&gt; can be thought of as &lt;strong&gt;independent sessions&lt;/strong&gt; or &lt;strong&gt;workspaces&lt;/strong&gt; for simplicity but it has some quirks. Its not your typical workspaces. In any linux system their are like 6-7 virtual terminals which can be switched via ctrl+alt+f2/f3/etc. I will explain this particular in detail in future probably using a video format in youtube.&lt;/p&gt;

&lt;p&gt;That’s it for this post.&lt;br&gt;&lt;br&gt;
Hope you like it :] .&lt;br&gt;&lt;br&gt;
🦖&lt;/p&gt;

&lt;p&gt;Source (my blog): &lt;a href="https://insanelogs.xyz/posts/linux-cli-system-information-commands-1/" rel="noopener noreferrer"&gt;https://insanelogs.xyz/posts/linux-cli-system-information-commands-1/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>clicommands</category>
      <category>linux</category>
      <category>systeminformationcom</category>
      <category>cli</category>
    </item>
    <item>
      <title>Border vs Outline in CSS – A Simple Explanation</title>
      <dc:creator>Insane Logs</dc:creator>
      <pubDate>Thu, 17 Jul 2025 18:04:30 +0000</pubDate>
      <link>https://forem.com/insanelogs/border-vs-outline-in-css-a-simple-explanation-ck9</link>
      <guid>https://forem.com/insanelogs/border-vs-outline-in-css-a-simple-explanation-ck9</guid>
      <description>&lt;p&gt;Border and outline are two ways to add borders around an element in HTML/CSS.&lt;br&gt;&lt;br&gt;
But they don’t behave the same.&lt;/p&gt;

&lt;p&gt;Border &lt;strong&gt;respects margins&lt;/strong&gt; between two elements and never spills out.&lt;br&gt;&lt;br&gt;
On the other hand, an &lt;strong&gt;outline&lt;/strong&gt; doesn’t care about margins — it can &lt;strong&gt;overflow&lt;/strong&gt; and bleed into other elements.&lt;/p&gt;



&lt;p&gt;Let us understand this with a simple example:&lt;/p&gt;

&lt;p&gt;Here I have created two &amp;lt;div&amp;gt;s box1 and box2 having a space (margin) of 10px between them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!doctype html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Document&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
            &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;

            &lt;span class="nc"&gt;.box1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="nl"&gt;outline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;

            &lt;span class="nc"&gt;.box2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"box1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Box 1 uses outline&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"box2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Box 2 uses margin&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6c3muxgb14vxb739puv2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6c3muxgb14vxb739puv2.png" alt="Two divs box 1 and box 2. Box 1 has 1px solid black outline and box 2 has 1px solid black border. Both have a space (margin) of 10px between them." width="800" height="134"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Now, no matter how much I increase the &lt;strong&gt;border&lt;/strong&gt; size in box2, the spacing between the two elements is still maintained.&lt;br&gt;&lt;br&gt;
Here I increased the border size to 50px and space between the two boxes is still maintained.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="nc"&gt;.box1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nl"&gt;outline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="nc"&gt;.box2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* Border size increased to 50px */&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu33zhe13jwz500e3n5zd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu33zhe13jwz500e3n5zd.png" alt="Two divs box 1 and box 2. Box 1 has 1 px solid black outline. Box 2 has 50 px solid black border." width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;But when I increase the &lt;strong&gt;outline&lt;/strong&gt; size in box1 to 15px, it simply ignores that 10px space and &lt;strong&gt;overflows&lt;/strong&gt; into box2. (Extra: Yes, 5px bleeds into box2 from box2's upper border)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="nc"&gt;.box1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nl"&gt;outline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;15px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* Outline size increased to 15px */&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="nc"&gt;.box2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhsy8mfip9anx1pqs1for.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhsy8mfip9anx1pqs1for.png" alt="Two divs box 1 and box 2. Box 1 has 15px solid black outline. Box 2 has 1px solid black border." width="800" height="155"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Same thing happens when outline-offset property of box1 is increased.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Outline offset simply controls how far the outline is pushed &lt;strong&gt;outward or inward&lt;/strong&gt; from its default position.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="nc"&gt;.box1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nl"&gt;outline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;15px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="nl"&gt;outline-offset&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;15px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
          &lt;span class="c"&gt;/* Outline-offset property set to 15px. Default value is 0px. */&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="nc"&gt;.box2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fycq3m1hoqp1gsyynrnlo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fycq3m1hoqp1gsyynrnlo.png" alt="Two divs box 1 and box 2. Box 1 has 1px solid black outline and 15px outline-offset. Box 2 has 1px solid black border." width="800" height="154"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;That’s all. Hope it clears the basic difference border and outline in CSS. I have tried to kept the example as simple and possible.&lt;br&gt;&lt;br&gt;
Thank you :] .&lt;/p&gt;

&lt;p&gt;Source (my blog): &lt;a href="https://insanelogs.xyz/posts/border-vs-outline-in-css-a-simple-explanation/" rel="noopener noreferrer"&gt;https://insanelogs.xyz/posts/border-vs-outline-in-css-a-simple-explanation/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>webdev</category>
      <category>border</category>
      <category>outline</category>
    </item>
    <item>
      <title>Process synchronization – An easy explanation</title>
      <dc:creator>Insane Logs</dc:creator>
      <pubDate>Thu, 10 Jul 2025 01:04:02 +0000</pubDate>
      <link>https://forem.com/insanelogs/process-synchronization-an-easy-explanation-j1m</link>
      <guid>https://forem.com/insanelogs/process-synchronization-an-easy-explanation-j1m</guid>
      <description>&lt;p&gt;&lt;strong&gt;Process Synchronization&lt;/strong&gt; is simply about running multiple processes that are accessing the same common resource (or resources) in a specific, controlled order so that everything goes smoothly and there’s no conflict.&lt;/p&gt;

&lt;p&gt;Here, multiple processes (or even threads) could be sharing resources like a file, a database, or some part of the memory — and synchronization ensures that they don’t mess things up for each other.&lt;/p&gt;

&lt;p&gt;A simple example:&lt;br&gt;&lt;br&gt;
Imagine we have a database and two programs – Program A and Program B.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Program A is responsible for adding/ updating (writing) a record to the database.&lt;/li&gt;
&lt;li&gt;Program B is responsible for reading a record from the database.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwg2r4mpmlzsmmema7vid.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwg2r4mpmlzsmmema7vid.png" alt="A diagram illustrating a database and two programs A and B. Program A wants to update record 5 and program B wants to read record 5 at the same time. The database is sad and confused and both are conflicting types of process." width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, there are 5 records in the database. Program B wants to read record 5, while Program A wants to edit and update record 5. If both programs attempt to access the record simultaneously, it could lead to problems, such as Program B reading a half-updated record.  &lt;/p&gt;

&lt;p&gt;To avoid this, &lt;strong&gt;synchronization&lt;/strong&gt; is essential. The solution here is to lock the resource while either program is using it. If Program B decides to read record 5, the database should be locked from Program A’s access. This ensures that Program B reads the complete, unaltered data. (However program B here would be reading old data which is later updated)  &lt;/p&gt;

&lt;p&gt;Similarly, when Program A is updating the record, the database should be locked for Program B’s access. Once Program A has finished updating this lock is released.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Multiple programs that only want to read from the same database can do so simultaneously without locking each other out. This is because reading data doesn’t change anything, so one program’s reading doesn’t affect another’s.  &lt;/p&gt;

&lt;p&gt;Well that was all 🙂 .&lt;/p&gt;

&lt;p&gt;Source (my blog): &lt;a href="https://insanelogs.xyz/posts/process-synchronization-an-easy-explanation/" rel="noopener noreferrer"&gt;https://insanelogs.xyz/posts/process-synchronization-an-easy-explanation/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>race</category>
      <category>deadlock</category>
      <category>os</category>
      <category>synchronization</category>
    </item>
    <item>
      <title>Memory effect in batteries</title>
      <dc:creator>Insane Logs</dc:creator>
      <pubDate>Sun, 06 Jul 2025 12:45:46 +0000</pubDate>
      <link>https://forem.com/insanelogs/memory-effect-in-batteries-1hgi</link>
      <guid>https://forem.com/insanelogs/memory-effect-in-batteries-1hgi</guid>
      <description>&lt;p&gt;&lt;strong&gt;Memory effect&lt;/strong&gt; is also known as &lt;strong&gt;battery effect&lt;/strong&gt; , &lt;strong&gt;lazy battery effect&lt;/strong&gt; , or &lt;strong&gt;battery memory&lt;/strong&gt;. It an issue observed mostly in nickel-cadmium batteries (Ni-Cd) and to some extent Nickel-Metal Hydride (NiMH) batteries.   &lt;/p&gt;

&lt;p&gt;It is situation where a battery forgets its maximum capacity and instead remembers a smaller one. Thus it shows full even though its not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it happens?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This usually happens if we &lt;strong&gt;charge the batteries very frequently&lt;/strong&gt; , like plugging it every time it drops to 50 or 40 percent. This is also called &lt;strong&gt;partial charging&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;In reality it is not so simple to understand as to what really happens, but we can get an idea of what it is with a simple analogy. You can deep diver on your own if you got the curiosity 😉 !&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simple analogy&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Let us understand it with a &lt;strong&gt;liters analogy&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;Suppose a battery has a capacity of &lt;strong&gt;1 lite&lt;/strong&gt; r. When you fill all &lt;strong&gt;1 liter&lt;/strong&gt; it gets fully charged and shows &lt;strong&gt;100%&lt;/strong&gt;. But over time due to partial charging the battery forgets this capacity and thinks &lt;strong&gt;500ml&lt;/strong&gt; is its full capacity. So next time when you fill it up to &lt;strong&gt;500ml&lt;/strong&gt; only, the battery will think it has reached its full capacity and won’t accept any more water (charge). It will thus show &lt;strong&gt;100%&lt;/strong&gt; even though it actually isn’t.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmq92ay35xsgifbhhmjma.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmq92ay35xsgifbhhmjma.png" alt="Memory effect illustration" width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Memory effect illustration&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Please note&lt;/strong&gt; this is a very simplified analogy just to get the gist of the concept. You are free to comment and point out any mistakes I made 🙂 .  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The most common fix&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
It is often fixable by completely draining the battery to 0% and recharging it back to 100%. It is known as re calibrating the battery.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What about modern batteries?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Today, most devices use &lt;strong&gt;Lithium-ion (Li-Ion)&lt;/strong&gt; or &lt;strong&gt;Lithium Polymer (Li-Po)&lt;/strong&gt; batteries. These &lt;strong&gt;don’t suffer from memory effect&lt;/strong&gt; , and &lt;strong&gt;partial charging is fine&lt;/strong&gt; for them.&lt;/p&gt;

&lt;p&gt;However, since they’re still made of chemical compounds, &lt;strong&gt;they will naturally wear down over time&lt;/strong&gt; , and their &lt;strong&gt;maximum capacity will reduce&lt;/strong&gt;. This isn’t the memory effect — it’s just normal aging.&lt;/p&gt;

&lt;p&gt;Source (my blog): &lt;a href="https://insanelogs.xyz/posts/memory-effect-in-batteries/" rel="noopener noreferrer"&gt;https://insanelogs.xyz/posts/memory-effect-in-batteries/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>batteries</category>
      <category>comptia</category>
      <category>memoryeffect</category>
    </item>
    <item>
      <title>Micro logs #1: Dry run with pacman package manager</title>
      <dc:creator>Insane Logs</dc:creator>
      <pubDate>Wed, 25 Jun 2025 13:50:59 +0000</pubDate>
      <link>https://forem.com/insanelogs/micro-logs-1-dry-run-with-pacman-package-manager-1260</link>
      <guid>https://forem.com/insanelogs/micro-logs-1-dry-run-with-pacman-package-manager-1260</guid>
      <description>&lt;p&gt;Dry run with pacman package manager&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;Source&lt;/code&gt; :&lt;/strong&gt; &lt;a href="https://wiki.archlinux.org/title/Pacman" rel="noopener noreferrer"&gt;https://wiki.archlinux.org/title/Pacman&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;code&gt;pacman&lt;/code&gt; &lt;strong&gt;:&lt;/strong&gt; Package manager for Arch Linux&lt;/p&gt;

&lt;p&gt;&lt;code&gt;-p&lt;/code&gt; flag can be used with pacman to &lt;strong&gt;dry run&lt;/strong&gt; commands — that is, see what your command is going to do &lt;strong&gt;before&lt;/strong&gt; it actually does anything.&lt;/p&gt;

&lt;p&gt;Might not work with certain flag combinations like &lt;code&gt;-n&lt;/code&gt;, and it will simply throw an error.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Optional explanation with simple examples.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;&lt;code&gt;pacman -Rs&lt;/code&gt;&lt;/strong&gt;  &lt;strong&gt;:&lt;/strong&gt; To remove a package and its dependencies which are not required by any other installed package.  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Normal Behavior  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4blgccol38230iph5e81.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4blgccol38230iph5e81.png" alt="Pacman -Rs command usage" width="800" height="158"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;-p works and shows in a list format the final packages which will be removed  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkc3c7qapnlninicfrq91.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkc3c7qapnlninicfrq91.png" alt="pacman with -p flag and works well" width="427" height="206"&gt;&lt;/a&gt;  &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;-p doesn’t work when used with -n flag  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffqbp1p7qd7i0dhaktaoh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffqbp1p7qd7i0dhaktaoh.png" alt="pacman command with -p flag and works well" width="735" height="50"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Source (my blog): &lt;a href="https://insanelogs.xyz/posts/micro-logs-1-dry-run-with-pacman-package-manager/" rel="noopener noreferrer"&gt;https://insanelogs.xyz/posts/micro-logs-1-dry-run-with-pacman-package-manager/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>archlinux</category>
      <category>distros</category>
      <category>linux</category>
    </item>
    <item>
      <title>Detect datatype of variables in C</title>
      <dc:creator>Insane Logs</dc:creator>
      <pubDate>Sun, 22 Jun 2025 17:57:16 +0000</pubDate>
      <link>https://forem.com/insanelogs/detect-datatype-of-variables-in-c-307</link>
      <guid>https://forem.com/insanelogs/detect-datatype-of-variables-in-c-307</guid>
      <description>&lt;p&gt;A simple Marco which uses generics in C to help you detect data type of any variable like you do with type() function in python 🙂.&lt;/p&gt;

&lt;p&gt;The code snippet contains examples on how to use it.&lt;br&gt;&lt;br&gt;
Extend it as much as you like 🙂.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;
#include &lt;span class="nt"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;
#include &lt;span class="nt"&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;

#define TYPE_CHECK(var) _Generic((var),     \
    int             : "int",                \
    float           : "float",              \
    double          : "double",             \
    char            : "char",               \
    char*           : "string",             \
    int*            : "int pointer",        \
    float*          : "float pointer",      \
    double*         : "double pointer",     \
    char**          : "string pointer",     \
    void*           : "void pointer",       \
    short           : "short",              \
    long            : "long",               \
    unsigned int    : "unsigned int",       \
    unsigned long   : "unsigned long",      \
    unsigned short  : "unsigned short",     \
    default         : "unknown type"        \
)

int main(void) {
    // Basic types
    int a = 10;
    float b = 5.5f;
    double c = 3.14159;
    char d = 'A';
    char* str = "Hello, World!";

    // Pointer types
    int* p_a = &lt;span class="ni"&gt;&amp;amp;a;&lt;/span&gt;
    float* p_b = &lt;span class="ni"&gt;&amp;amp;b;&lt;/span&gt;
    double* p_c = &lt;span class="ni"&gt;&amp;amp;c;&lt;/span&gt;
    char** p_str = &lt;span class="ni"&gt;&amp;amp;str;&lt;/span&gt;
    void* p_void;

    // Print types using TYPE_CHECK
    printf("Type of a: %s\n",       TYPE_CHECK(a));         // Outputs "int"
    printf("Type of b: %s\n",       TYPE_CHECK(b));         // Outputs "float"
    printf("Type of c: %s\n",       TYPE_CHECK(c));         // Outputs "double"
    printf("Type of d: %s\n",       TYPE_CHECK(d));         // Outputs "char"
    printf("Type of str: %s\n",     TYPE_CHECK(str));       // Outputs "string"
    printf("Type of p_a: %s\n",     TYPE_CHECK(p_a));       // Outputs "int pointer"
    printf("Type of p_b: %s\n",     TYPE_CHECK(p_b));       // Outputs "float pointer"
    printf("Type of p_c: %s\n",     TYPE_CHECK(p_c));       // Outputs "double pointer"
    printf("Type of p_str: %s\n",   TYPE_CHECK(p_str));     // Outputs "string pointer"
    printf("Type of p_void: %s\n",  TYPE_CHECK(p_void));    // Outputs "void pointer"

    // Example of using malloc
    void* ptr = malloc(sizeof(int));
    printf("Type of ptr: %s\n",     TYPE_CHECK(ptr));       // Outputs "void pointer"

    // Good practice :)
    free(ptr);

    return 0;
}

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

&lt;/div&gt;



&lt;p&gt;Source (my blog): &lt;a href="https://insanelogs.xyz/posts/detect-datatype-of-variables-using-generics/" rel="noopener noreferrer"&gt;https://insanelogs.xyz/posts/detect-datatype-of-variables-using-generics/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cprogramming</category>
      <category>computerscience</category>
      <category>generics</category>
      <category>guide</category>
    </item>
    <item>
      <title>Learn C Programming: A Beginner’s Guide</title>
      <dc:creator>Insane Logs</dc:creator>
      <pubDate>Fri, 13 Jun 2025 16:33:39 +0000</pubDate>
      <link>https://forem.com/insanelogs/learn-c-programming-a-beginners-guide-jek</link>
      <guid>https://forem.com/insanelogs/learn-c-programming-a-beginners-guide-jek</guid>
      <description>&lt;p&gt;A simple guide to learn C programming.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;It's better to be able to write programs you would like to, instead of mastering every small details of the language on your first day.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. Watch a C Tutorial Playlist on YouTube&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pick &lt;strong&gt;up any beginner-friendly C tutorial playlist&lt;/strong&gt; - ideally which is short and simple. Don’t stress too much over finding the “perfect” channel. At this stage, your goal isn't to master every detail but to simply &lt;strong&gt;start writing and running C programs&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Focus on &lt;strong&gt;practical understanding&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Don’t worry about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Depth of concepts&lt;/li&gt;
&lt;li&gt;Minor mistakes or bad practices in the videos&lt;/li&gt;
&lt;li&gt;etc&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Most YouTube tutorials are surface-level and may even have some flaws — but they’re &lt;strong&gt;visual and fast&lt;/strong&gt;, which helps you quickly gain the ability to &lt;strong&gt;write code and see results&lt;/strong&gt;. That early momentum is valuable.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Don't go for extremely long courses thinking they will give you more knowledge. You will end up being overwhelmed and its much better to spend that much time on a quality book rather than a course/ playlist.  &lt;/p&gt;




&lt;p&gt;&lt;strong&gt;2. As you go through the playlist:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Try out the examples shown, change certain things and try to figure out the reasons for the output you get.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ask google or Chatgpt for things you don't understand.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Focus on:&lt;/strong&gt; To get this type of behavior I must do this or tweak this. Then try to figure out the reasons yourself. You’ll be surprised how much you learn just by debugging and tweaking code.&lt;/p&gt;

&lt;p&gt;By the end of the playlist, you’ll likely be able to code simple things in C and have much more confidence.&lt;/p&gt;

&lt;p&gt;You now have the ability to build and understand simple to intermediate programs even without understanding the why of everything. This is a valuable skill in programming :)  &lt;/p&gt;




&lt;p&gt;&lt;strong&gt;3. Build Small Projects&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Have fun! Google simple projects and try to implement them. This helps reinforce what you’ve learned and shows you how to put things together.&lt;/p&gt;

&lt;p&gt;Probably you can even build and understand more complex projects. However their is much more you can learn to get ahead of the crowd.  &lt;/p&gt;




&lt;p&gt;&lt;strong&gt;4.: Level Up with Books&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You now have a good practical knowledge of the language. You may now focus more on the theory side of the language which is basically under the hood details, answers to why certain things behave the way they behave, etc. Books are great for this.&lt;/p&gt;

&lt;p&gt;This stackoverflow post contains a good list of C books: &lt;a href="https://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list" rel="noopener noreferrer"&gt;The Definitive C Book Guide and List&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As you read more and more you will be able to take better and complex projects that you may have wished to develop.  &lt;/p&gt;




&lt;p&gt;5. Keep practicing and exploring&lt;/p&gt;

&lt;p&gt;As you continue building projects or reading more advanced material, you'll naturally begin to understand what else you need to learn, where to find it, and which areas of computer science would help you. Your journey from here will vary based on what you want to build. Just learning C programming isn’t enough — for example, graphics programming may require knowledge of rendering techniques and math, while network programming will involve understanding computer networking. These are areas beyond just the C language, and exploring them will broaden your skills.  &lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Why Not Start With a Book?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Good books are very lengthy! You would have to read lots and lots of pages and theories before you can actually start writing something useful beyond "Hello World". Also things can get overwhelming very fast due to the amount of information books have. This is often demotivating, exhaustive and you get a feeling of reaching nowhere. Also not fun at all.  &lt;/p&gt;

&lt;p&gt;The steps I told is basically a breath first approach of learning which I personally follow. You cover the breath first then dive deeper.  &lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; To absolutely know the nuts and bolts of C or any programming language down to the machine level, you would require knowledge of other computer science topics such as compiler design, assembly languages, etc. Which is why I don't recommend depth first approach as you would get stuck in a rabbit hole and end up getting overwhelmed.  &lt;/p&gt;




&lt;p&gt;Source (my blog website): &lt;a href="https://insanelogs.xyz/posts/learn-c-programming-a-beginners-guide/" rel="noopener noreferrer"&gt;https://insanelogs.xyz/posts/learn-c-programming-a-beginners-guide/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>c</category>
      <category>learning</category>
      <category>tutorial</category>
      <category>programming</category>
    </item>
    <item>
      <title>Blender hard light vs soft light in 2min</title>
      <dc:creator>Insane Logs</dc:creator>
      <pubDate>Fri, 13 Jun 2025 09:04:30 +0000</pubDate>
      <link>https://forem.com/insanelogs/blender-hard-light-vs-soft-light-in-2min-4i8m</link>
      <guid>https://forem.com/insanelogs/blender-hard-light-vs-soft-light-in-2min-4i8m</guid>
      <description>&lt;p&gt;When we render a model in blender we can have at the most basic two types of lighting – Hard lighting and soft lighting which determines how harsh or soft the shadows are.&lt;/p&gt;

&lt;p&gt;In hard lighting the bright areas appear very bright and dark areas (shadows appear harsher) appear very dark compared to soft lighting (shadows appear softer). Lets use point light source for example. If we use increase the radius of the light then it would be soft lighting and if we would decrease the radius of the light source it would be hard lighting.&lt;/p&gt;

&lt;p&gt;In hard lighting – shadows are harsh&lt;br&gt;
In soft lighting – shadows are soft&lt;/p&gt;

&lt;p&gt;Here we can see when the radius of the light source is 0 the shadow seems to be very harsh on the object.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F57yeml9nd28em66meqkk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F57yeml9nd28em66meqkk.png" alt="Blender hard light example" width="726" height="557"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3iym8ts0shoot9ar21ei.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3iym8ts0shoot9ar21ei.png" alt="Blender hard light example with properties" width="271" height="177"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However when the radius is increased to 0.39 we can see the shadows become much softer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3n8be61o9h1j93ho7bzk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3n8be61o9h1j93ho7bzk.png" alt="Blender soft light example" width="800" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw6v4sg0a7651m89c6wxn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw6v4sg0a7651m89c6wxn.png" alt="Blender soft light example with properties" width="271" height="180"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source (my blog website): &lt;a href="https://insanelogs.xyz/posts/blender-hard-light-vs-soft-light-in-2min/" rel="noopener noreferrer"&gt;https://insanelogs.xyz/posts/blender-hard-light-vs-soft-light-in-2min/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>blender</category>
      <category>3dmodel</category>
      <category>lighting</category>
      <category>3d</category>
    </item>
  </channel>
</rss>
