<?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: Harry Tanama</title>
    <description>The latest articles on Forem by Harry Tanama (@harry_tanama_51571ebf90b6).</description>
    <link>https://forem.com/harry_tanama_51571ebf90b6</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%2F2445600%2Ffdb75215-abe0-447d-9a7e-b26e1bbce5cc.jpg</url>
      <title>Forem: Harry Tanama</title>
      <link>https://forem.com/harry_tanama_51571ebf90b6</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/harry_tanama_51571ebf90b6"/>
    <language>en</language>
    <item>
      <title>Git Golden Rules</title>
      <dc:creator>Harry Tanama</dc:creator>
      <pubDate>Sat, 13 Dec 2025 20:19:23 +0000</pubDate>
      <link>https://forem.com/harry_tanama_51571ebf90b6/git-golden-rules-32m5</link>
      <guid>https://forem.com/harry_tanama_51571ebf90b6/git-golden-rules-32m5</guid>
      <description>&lt;p&gt;Golden Rules to help prevent your Git repository from breaking:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Golden Rule 1: Never Force Push&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Avoid using &lt;code&gt;git push -f&lt;/code&gt; or &lt;code&gt;git push --force&lt;/code&gt; as it can overwrite other developers' changes and cause conflicts.&lt;/li&gt;
&lt;li&gt;Instead, use &lt;code&gt;git push origin main&lt;/code&gt; (or your remote branch name) to update the remote repository.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Golden Rule 2: Always Pull Before Pushing&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make sure to pull from the remote repository before pushing your local changes:
    + &lt;code&gt;git pull origin main&lt;/code&gt; (or your remote branch name)
    + This ensures you have the latest updates and avoids merge conflicts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Golden Rule 3: Merge Branches Regularly&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When working on a feature or bug fix, create a separate branch for it.&lt;/li&gt;
&lt;li&gt;Once you've completed your changes, merge that branch into the main branch using &lt;code&gt;git merge&lt;/code&gt; (e.g., &lt;code&gt;git merge feature/new-feature&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Resolve any merge conflicts by manually editing the files and adding them to the index with &lt;code&gt;git add&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Golden Rule 4: Resolve Merge Conflicts Carefully&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When resolving a merge conflict, use tools like &lt;code&gt;git status&lt;/code&gt;, &lt;code&gt;git diff&lt;/code&gt;, or &lt;code&gt;meld&lt;/code&gt; to help identify the conflicting changes.&lt;/li&gt;
&lt;li&gt;Manually edit the files to resolve the conflicts and then add them to the index with &lt;code&gt;git add&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Make sure to test your code thoroughly after resolving a merge conflict.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Golden Rule 5: Test Thoroughly Before Committing&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run automated tests, manual testing, and code reviews to ensure your changes are correct and don't introduce new bugs.&lt;/li&gt;
&lt;li&gt;Don't commit broken or incomplete code; it'll only cause more problems down the line!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Golden Rule 6: Use Meaningful Branch Names and Descriptions&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use clear and descriptive branch names (e.g., &lt;code&gt;feature/new-feature&lt;/code&gt; instead of &lt;code&gt;new-feature&lt;/code&gt;) to help track changes and collaborate with others.&lt;/li&gt;
&lt;li&gt;Include a brief description or summary in your commit message to explain what's changed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Golden Rule 7: Keep Commits Small and Focused&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Avoid massive commits that make it difficult to understand what's changed.&lt;/li&gt;
&lt;li&gt;Instead, break down large features into smaller, manageable commits (ideally &amp;lt;10 lines of code).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Golden Rule 8: Regularly Review and Clean Up Your Branches&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Periodically review your branches to ensure they're up-to-date and aligned with the remote repository.&lt;/li&gt;
&lt;li&gt;Delete old or unnecessary branches to keep your Git repository organized!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Additional Tips for Handling Merge Conflicts:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Use &lt;code&gt;git merge --abort&lt;/code&gt;&lt;/strong&gt;: If you encounter a conflict, use &lt;code&gt;git merge --abort&lt;/code&gt; to cancel the merge and try again later.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use &lt;code&gt;git stash&lt;/code&gt; temporarily&lt;/strong&gt;: If you need to make changes while resolving a merge conflict, use &lt;code&gt;git stash&lt;/code&gt; to store your work and then continue working on the conflict.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Communicate with team members&lt;/strong&gt;: Inform your teammates about any merge conflicts or difficulties you're experiencing so they can help resolve them.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By following these Golden Rules and handling merge conflicts carefully, you'll minimize the risk of breaking your Git repository and create a healthier collaborative environment for your team!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Communication is Key&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When someone pushes changes to a branch that others are currently working on, it's essential to communicate with the team to prevent conflicts and ensure everyone has the latest updates. Here are some&lt;br&gt;
steps you can follow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Get notified&lt;/strong&gt;: Set up notifications for your Git repository to alert you when someone pushes changes to the branch you're working on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pull the updated branch&lt;/strong&gt;: As soon as you receive notification, pull the updated branch from the remote repository: &lt;code&gt;git pull origin &amp;lt;branch-name&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resolve conflicts (if any)&lt;/strong&gt;: If there are merge conflicts, resolve them manually and then add the resolved files to the index with &lt;code&gt;git add&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rebase your local changes&lt;/strong&gt;: After pulling the updated branch, rebase your local changes on top of the latest updates: &lt;code&gt;git rebase origin/&amp;lt;branch-name&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test thoroughly&lt;/strong&gt;: Verify that your code still works correctly after rebasing and resolve any issues.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Best Practices for Collaborative Development&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To avoid conflicts and ensure smooth collaboration:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Use feature branches&lt;/strong&gt;: Create separate branches for each new feature or bug fix to isolate changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Communicate with the team&lt;/strong&gt;: Inform your teammates about your work on a particular branch, so they can plan their own updates accordingly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regularly pull from the remote repository&lt;/strong&gt;: To ensure you have the latest updates and avoid merge conflicts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Git hooks&lt;/strong&gt;: Set up Git hooks to enforce coding standards, formatting, and other best practices.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Automating Notifications with GitHub&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're using GitHub, you can set up notifications for your repository to alert team members when someone pushes changes to a specific branch:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Go to your repository settings&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Click on "Notifications"&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Select the branch you want to receive notifications for&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Choose the notification type (e.g., push, pull request)&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By following these best practices and communicating with your team, you'll be able to work efficiently and avoid conflicts when collaborating on codebases!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>git</category>
      <category>productivity</category>
    </item>
    <item>
      <title>3 Ways to Create A Floor in Godot</title>
      <dc:creator>Harry Tanama</dc:creator>
      <pubDate>Wed, 10 Dec 2025 02:38:47 +0000</pubDate>
      <link>https://forem.com/harry_tanama_51571ebf90b6/3-ways-to-create-a-floor-in-godot-2120</link>
      <guid>https://forem.com/harry_tanama_51571ebf90b6/3-ways-to-create-a-floor-in-godot-2120</guid>
      <description>&lt;p&gt;There are so many ways to create game. There is no right or wrong way of creating a video game.&lt;/p&gt;

&lt;p&gt;The first set up or method to create a floor in godot.&lt;br&gt;
-MeshInstance3D&lt;br&gt;
   -StaticBody3D&lt;br&gt;
      -CollisionShape3D&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%2Fh94khbqqv56juz6zdwqu.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%2Fh94khbqqv56juz6zdwqu.png" alt=" " width="800" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The second set up or method to create a floor in godot is to use CSGBox3D and check the box "Use Collision" ON located on the Inspector.&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%2F0jopz2qdyhle72ys9ejh.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%2F0jopz2qdyhle72ys9ejh.png" alt=" " width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The third set up method to create a floor in godot&lt;br&gt;
-StaticBody3D&lt;br&gt;
   -MeshInstance3D&lt;br&gt;
   -CollisionShape3D&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%2Fo1j7atz1axgr6dkvqx4u.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%2Fo1j7atz1axgr6dkvqx4u.png" alt=" " width="800" height="302"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>godot</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>Arch Linux - How to Connect to Internet</title>
      <dc:creator>Harry Tanama</dc:creator>
      <pubDate>Sun, 30 Nov 2025 20:00:06 +0000</pubDate>
      <link>https://forem.com/harry_tanama_51571ebf90b6/arch-linux-how-to-connect-to-internet-5146</link>
      <guid>https://forem.com/harry_tanama_51571ebf90b6/arch-linux-how-to-connect-to-internet-5146</guid>
      <description>&lt;p&gt;iwctl - Internet wireless control utility&lt;/p&gt;

&lt;p&gt;To connect to a network: .. code-block:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[iwd]# device list
[iwd]# station DEVICE scan
[iwd]# station DEVICE get-networks
[iwd]# station DEVICE connect SSID

$ iwctl device list
$ iwctl station DEVICE scan
$ iwctl station DEVICE get-networks
$ iwctl --passphrase=PASSPHRASE station DEVICE connect SSID
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;iwctl
&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%2Fskycrye0luuh66oxy4yw.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%2Fskycrye0luuh66oxy4yw.png" alt=" " width="800" height="294"&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%2Foq1nvyzydozf6n4de84s.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%2Foq1nvyzydozf6n4de84s.png" alt=" " width="800" height="410"&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%2Fqv4twupnjpl3iwvepipz.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%2Fqv4twupnjpl3iwvepipz.png" alt=" " width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>archlinux</category>
      <category>networking</category>
    </item>
    <item>
      <title>Install and Setup Oh My Zsh</title>
      <dc:creator>Harry Tanama</dc:creator>
      <pubDate>Fri, 15 Aug 2025 20:33:28 +0000</pubDate>
      <link>https://forem.com/harry_tanama_51571ebf90b6/install-and-setup-oh-my-zsh-2079</link>
      <guid>https://forem.com/harry_tanama_51571ebf90b6/install-and-setup-oh-my-zsh-2079</guid>
      <description>&lt;p&gt;Install ZSH&lt;br&gt;
Ubuntu/Debian Base:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install zsh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Arch Linux Base:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo pacman -S zsh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To switch to zshell or zsh run&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/usr/bin/zsh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/bin/zsh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To change your default shell to zshell or zsh&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;chsh -s $(which zsh)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install Oh-my-zsh - &lt;a href="https://github.com/ohmyzsh/ohmyzsh" rel="noopener noreferrer"&gt;https://github.com/ohmyzsh/ohmyzsh&lt;/a&gt;&lt;br&gt;
Dependencies: Git, Zsh, curl, or wget&lt;br&gt;
Arch Linux Base:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install git curl 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install Oh My Zsh&lt;br&gt;
Run this command in your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Read more instruction from ohmyzsh website: &lt;a href="https://github.com/ohmyzsh/ohmyzsh" rel="noopener noreferrer"&gt;https://github.com/ohmyzsh/ohmyzsh&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Install Powerlevel10k - &lt;a href="https://github.com/romkatv/powerlevel10k" rel="noopener noreferrer"&gt;https://github.com/romkatv/powerlevel10k&lt;/a&gt;&lt;br&gt;
Clone the Powerlevel10k repository into your Oh My Zsh themes directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone --depth=1 https://github.com/romkatv/powerlevel10k.git "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Read more information about Powerlevel10k at &lt;a href="https://github.com/romkatv/powerlevel10k" rel="noopener noreferrer"&gt;https://github.com/romkatv/powerlevel10k&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Configure Your Theme&lt;br&gt;
Edit your .zshrc file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nano ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Find the line that says ZSH_THEME="robbyrussell" and change it to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ZSH_THEME="powerlevel10k/powerlevel10k"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install Recommended Fonts from Nerd Fonts&lt;br&gt;
&lt;a href="https://www.nerdfonts.com/font-downloads" rel="noopener noreferrer"&gt;https://www.nerdfonts.com/font-downloads&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Powerlevel10k works best with Nerd Fonts. Install one of these MesloLGS fonts from the nerd font website above:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Download and install MesloLGS NF fonts to this folder
mkdir -p ~/.local/share/fonts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And run the command below to apply the fonts&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fc-cache -f -v
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set Terminal Font in Linux&lt;br&gt;
Configure your terminal to use the installed Nerd Font:&lt;br&gt;
Preferences → Profiles → Font → "MesloLGS NF"&lt;/p&gt;

&lt;p&gt;Restart Your Shell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;source ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure Powerlevel10k&lt;br&gt;
The configuration wizard should start automatically. If not, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;p10k configure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Optional: Popular Oh My Zsh Plugins&lt;br&gt;
While configuring, you might want to add some useful plugins. Edit ~/.zshrc and find the plugins line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;plugins=(
    git
    zsh-autosuggestions
    zsh-syntax-highlighting
    web-search
    copyfile
    copybuffer
    dirhistory
    autojump
    fzf
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;More plugin can be found here &lt;a href="https://github.com/ohmyzsh/ohmyzsh/wiki/plugins" rel="noopener noreferrer"&gt;https://github.com/ohmyzsh/ohmyzsh/wiki/plugins&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

# zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apply Changes restart the shell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;source ~/.zshrcc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your terminal should now display the beautiful Powerlevel10k theme! If you ever want to reconfigure it, just run p10k configure again.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;p10k configure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Install OBS in Arch Linux Setting Audio</title>
      <dc:creator>Harry Tanama</dc:creator>
      <pubDate>Fri, 15 Aug 2025 20:11:08 +0000</pubDate>
      <link>https://forem.com/harry_tanama_51571ebf90b6/install-obs-in-arch-linux-setting-auido-5he4</link>
      <guid>https://forem.com/harry_tanama_51571ebf90b6/install-obs-in-arch-linux-setting-auido-5he4</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo pacman -Syu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Install OBS Studio and VLC
sudo pacman -S obs-studio vlc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo pacman -S vlc-plugin-ffmpeg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>archlinux</category>
      <category>installation</category>
      <category>software</category>
      <category>linux</category>
    </item>
    <item>
      <title>LSP Server and Clangd Face Challenges Dealing With Very Large Codebases</title>
      <dc:creator>Harry Tanama</dc:creator>
      <pubDate>Tue, 12 Aug 2025 02:52:37 +0000</pubDate>
      <link>https://forem.com/harry_tanama_51571ebf90b6/lsp-server-and-clangd-face-challenges-dealing-with-very-large-codebases-56gc</link>
      <guid>https://forem.com/harry_tanama_51571ebf90b6/lsp-server-and-clangd-face-challenges-dealing-with-very-large-codebases-56gc</guid>
      <description>&lt;p&gt;When you want to jump to function definition in Linux, you need to use Ctags or Cscope. Or you can use LSP server and clangd to jump to function definition in Linux when you are programming with C or C++.&lt;/p&gt;

&lt;p&gt;Apparently LSP server and clangd face challenges and its limitation when it comes to managing source code navigation to jump into function definition because of large codebase, LSP server and clangd cannot read  millions of lines of code inside the compile_commands.json file itself.&lt;/p&gt;

&lt;p&gt;In large projects with millions of lines of code, the compile_commands.json file itself can become huge. clangd has to parse this and then index the entire codebase in the background. This can be memory-intensive and time-consuming.&lt;/p&gt;

&lt;p&gt;LSP servers like clangd can struggle with "jump to definition" due to a number of factors, with the primary one being the difficulty in correctly and efficiently indexing a massive codebase, even with the help of BEAR (Bear is a tool that generates a compilation database for clang tooling). When clangd fails, my best approach is to use a more simpler tool like Ctags or Cscope. &lt;/p&gt;

&lt;p&gt;ctags generates a tags file that allows you to quickly jump to definitions. It's a simple, low-overhead solution that works on almost any codebase. I love using ctags (Universal Ctags). &lt;/p&gt;

&lt;p&gt;cscope is more powerful than ctags, it can perform cross-reference searches (e.g., finding all functions that call a specific function). It's an excellent choice for navigating complex codebases where understanding dependencies is key.&lt;/p&gt;

&lt;p&gt;I can combine both ctags and cscope for source code navigation system in a large codebase project for example I am using them when compiling Godot Game Engine from the source code and enable debugging  code when compiling Godot with Scons. &lt;/p&gt;

&lt;p&gt;I am able to use cscope and ctags to navigate Godot's source code using these to navigate with jump to definition or jump to declaration. &lt;/p&gt;

</description>
      <category>ctags</category>
      <category>programming</category>
      <category>developer</category>
      <category>cpp</category>
    </item>
    <item>
      <title>How to Modify the Location of the Virtual Machine Image</title>
      <dc:creator>Harry Tanama</dc:creator>
      <pubDate>Sun, 10 Aug 2025 15:27:22 +0000</pubDate>
      <link>https://forem.com/harry_tanama_51571ebf90b6/how-to-modify-the-location-of-the-virtual-machine-image-3nd4</link>
      <guid>https://forem.com/harry_tanama_51571ebf90b6/how-to-modify-the-location-of-the-virtual-machine-image-3nd4</guid>
      <description>&lt;p&gt;Use the command &lt;code&gt;virsh edit &amp;lt;image_name&amp;gt;&lt;/code&gt;&lt;br&gt;
Do not include the extension &lt;code&gt;.qcow2&lt;/code&gt;&lt;br&gt;
example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;virsh edit debian13
&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%2F4q63cesfuw7mubjlftmk.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%2F4q63cesfuw7mubjlftmk.png" alt=" " width="642" height="218"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Edit the location of the source file of your VirtIO Disk1:&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%2Fsx8fde0itdajxgg5otj8.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%2Fsx8fde0itdajxgg5otj8.png" alt=" " width="800" height="194"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After you make the changes using &lt;code&gt;nano&lt;/code&gt; and now you can exit by pressing &lt;code&gt;ctrl&lt;/code&gt; + &lt;code&gt;x&lt;/code&gt; and &lt;code&gt;Y&lt;/code&gt; to Save modified buffer?&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%2Fs8t4snq9hwj11o5gudwu.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%2Fs8t4snq9hwj11o5gudwu.png" alt=" " width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And leave the file name &lt;code&gt;/temp/virshPC0BB3.xml&lt;/code&gt; do not edit this file name, the &lt;code&gt;virsh&lt;/code&gt; command or application will take care the modification of your virtual disk location at the backend&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%2Fyc8853tp5r4rivhd5tzr.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%2Fyc8853tp5r4rivhd5tzr.png" alt=" " width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Just hit enter to accept the changes.&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%2F21c4jtpsumxbz3kzb64t.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%2F21c4jtpsumxbz3kzb64t.png" alt=" " width="800" height="158"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After that you need to cp the actual file to the new directory and you need to be a superuser to perform this action:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;root@pop-os:/var/lib/libvirt/images# cp debian13.qcow2 /path/location/of_your_choosing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The name of the virtual disk location must match to the location of the actual file:&lt;/p&gt;

&lt;p&gt;&lt;br&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%2Fhixbj80ho8uo9bo6sym3.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%2Fhixbj80ho8uo9bo6sym3.png" alt=" " width="800" height="68"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>virtualmachine</category>
      <category>kvm</category>
      <category>qemu</category>
      <category>linux</category>
    </item>
    <item>
      <title>INSTALL QEMU KVM On Linux (i.e. Debian/Ubuntu Like Distro)</title>
      <dc:creator>Harry Tanama</dc:creator>
      <pubDate>Sun, 10 Aug 2025 04:40:22 +0000</pubDate>
      <link>https://forem.com/harry_tanama_51571ebf90b6/install-qemu-kvm-on-linux-ie-debianubuntu-like-distro-2816</link>
      <guid>https://forem.com/harry_tanama_51571ebf90b6/install-qemu-kvm-on-linux-ie-debianubuntu-like-distro-2816</guid>
      <description>&lt;p&gt;The command &lt;code&gt;zgrep CONFIG_KVM /boot/config-$(uname -r)&lt;/code&gt; searches for the string CONFIG_KVM within the compressed kernel configuration file for the currently running kernel.&lt;/p&gt;

&lt;p&gt;We will check to see if we can run virtualization or virtual machine on our Linux computer. &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%2Fxur6646maef26n8nlk5t.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%2Fxur6646maef26n8nlk5t.png" alt=" " width="699" height="765"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These information below should be displayed as &lt;br&gt;
&lt;code&gt;CONFIG_KVM=m&lt;/code&gt; or &lt;code&gt;CONFIG_KVM=y&lt;/code&gt;&lt;br&gt;
&lt;code&gt;CONFIG_KVM_INTEL=m&lt;/code&gt; or &lt;code&gt;CONFIG_KVM_INTEL=y&lt;/code&gt;&lt;br&gt;
&lt;code&gt;CONFIG_KVM_AMD=m&lt;/code&gt; or &lt;code&gt;CONFIG_KVM_AMD=y&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We are using Debian Linux Distro and you can install the following packages below&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;QEMU&lt;br&gt;
Enable the &lt;code&gt;libvirtd&lt;/code&gt; daemon on your Linux machine by running this command below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl enable libvirtd.service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The above command ensures the specified service starts automatically at boot. If you don't want to have the service run at boot, you can disable the service by changing the &lt;code&gt;enable&lt;/code&gt; to &lt;code&gt;disable&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Or you can run the command below to run the libvirtd service whenever you need it:&lt;/p&gt;

&lt;p&gt;Now you can start the &lt;code&gt;libvirtd&lt;/code&gt; daemon by running this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl start libvirtd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you do not see any output that means, the command is successful &lt;br&gt;
But if you want to double check you can run this command below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl status libvirtd.service
&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%2Fj5kx21uvejlcuifa26q8.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%2Fj5kx21uvejlcuifa26q8.png" alt=" " width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We are using &lt;code&gt;tuned&lt;/code&gt; in Linux to optimize performance for virtual machine. We need &lt;code&gt;tuned&lt;/code&gt; for &lt;code&gt;virtual-guest&lt;/code&gt; to optimizes performance for a system running as a virtual machine. &lt;code&gt;virtual-host&lt;/code&gt; to optimizes a system to run virtual machines (as a hypervisor).&lt;/p&gt;

&lt;p&gt;You can manage the &lt;code&gt;tuned&lt;/code&gt; service using the &lt;code&gt;tuned-adm&lt;/code&gt; command-line utility.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;tuned-adm list&lt;/code&gt;: Shows all available tuning profiles on your system.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;tuned-adm active&lt;/code&gt;: Displays the currently active profile.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;tuned-adm profile &amp;lt;profile-name&amp;gt;&lt;/code&gt;: Switches the system to a specified profile.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;tuned-adm recommend&lt;/code&gt;: Recommends a profile based on your system's hardware and current workload.&lt;/p&gt;

&lt;p&gt;By using Tuned, administrators can easily and dynamically adjust system behavior without manually changing dozens of individual settings, which can be complex and error-prone. &lt;/p&gt;

&lt;p&gt;Make sure you have installed tuned&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install tuned
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now run or start the tuned with this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl start tuned
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check your active profile using this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tuned-adm active
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The balance profile is good for running virtual machine. &lt;br&gt;
You ran this command below to check what other option in tuned-adm&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tuned-adm list 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We are going to select &lt;code&gt;virtual-host&lt;/code&gt; to optimize for running inside a virtual guest.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo tuned-adm profile virtual-host
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can check your current profile by running this command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tuned-adm active
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you're done restart your PC to have this take effect. &lt;/p&gt;

&lt;p&gt;After you have restart your computer, we can now configure your network bridge.&lt;/p&gt;

&lt;p&gt;By default all virtual machine is connected to the NAT network&lt;/p&gt;

&lt;p&gt;Type this command below to find out if the virtual machine is running on NAT network.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo virsh net-list --all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Type these command below to enables the automatic startup of the virtual network named default whenever the libvirt daemon starts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo virsh net-start default
sudo virsh net-autostart default
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the QEMU and KVM should be working. You can run the Virtual Machine Manager, type the command below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;virt-manager
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is link to the video how to use Virtual Machine Manager (virt-manager)&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=96wlmaDd7-0&amp;amp;t=7s" rel="noopener noreferrer"&gt; How to use Virtual Machine Manager (virt-manager) &lt;/a&gt;&lt;/p&gt;

</description>
      <category>qemu</category>
      <category>kvm</category>
      <category>virtualmachine</category>
    </item>
    <item>
      <title>PopOS - How to Update NVIDIA Driver</title>
      <dc:creator>Harry Tanama</dc:creator>
      <pubDate>Tue, 05 Aug 2025 22:44:06 +0000</pubDate>
      <link>https://forem.com/harry_tanama_51571ebf90b6/popos-how-to-update-nvidia-driver-453</link>
      <guid>https://forem.com/harry_tanama_51571ebf90b6/popos-how-to-update-nvidia-driver-453</guid>
      <description>&lt;p&gt;Pop!_OS handles NVIDIA driver updates automatically through its system update process. You &lt;strong&gt;should not&lt;/strong&gt; manually install or click "install" on an NVIDIA driver from the Pop!_Shop if it's already installed. Doing so could potentially cause issues with your system.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why You Shouldn't Manually Install
&lt;/h3&gt;

&lt;p&gt;The different NVIDIA driver packages you see in the Pop!_Shop are not meant to be installed on top of one another. They are different versions of the driver, and Pop!_OS is designed to select the correct, most stable version for you.&lt;/p&gt;

&lt;p&gt;When a new, stable NVIDIA driver is available, it will appear as a &lt;strong&gt;system update&lt;/strong&gt; and will be installed along with other software and kernel updates. The best way to update your drivers is simply to keep your system up-to-date.&lt;/p&gt;

&lt;p&gt;To ensure your system is fully updated, you can use the Pop!_Shop or run the following commands in the terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt full-upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will safely update all your packages, including the NVIDIA driver, without risking system instability. Manually trying to install a different version from the Pop!_Shop can lead to dependency conflicts and other issues that can prevent your system from booting correctly.&lt;/p&gt;

</description>
      <category>popos</category>
      <category>linux</category>
      <category>nvida</category>
      <category>graphics</category>
    </item>
    <item>
      <title>How to Setup Bluetooth in Arch Linux</title>
      <dc:creator>Harry Tanama</dc:creator>
      <pubDate>Sun, 03 Aug 2025 22:32:45 +0000</pubDate>
      <link>https://forem.com/harry_tanama_51571ebf90b6/how-to-setup-bluetooth-in-arch-linux-4cfa</link>
      <guid>https://forem.com/harry_tanama_51571ebf90b6/how-to-setup-bluetooth-in-arch-linux-4cfa</guid>
      <description>&lt;p&gt;To install and enable Bluetooth on Arch Linux install the following packages&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo pacman -S bluez 
sudo pacman -S bluez-utils
sudo pacman -S blueman
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your blueman-manager is not working, Enable and start the Bluetooth service&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%2Fihr3n8t7lrh6q8jx3htn.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%2Fihr3n8t7lrh6q8jx3htn.png" alt=" " width="598" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Start the Bluetooth service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl start bluetooth.service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you still cannot connect to the Bluetooth earpiece&lt;br&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%2Ffgxfol74q0u8vyqn21fw.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%2Ffgxfol74q0u8vyqn21fw.png" alt=" " width="699" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Try installing pulseaudio-bluetooth package:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo pacman -S pulseaudio-bluetooth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;restart PulseAudio with this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pulseaudio -k
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can see if the Bluetooth earpiece is connected on the pulseaudio. This package &lt;code&gt;pulseaudio-bluetooth&lt;/code&gt;Bluetooth support for PulseAudio &lt;br&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%2Fvmw7pa8gdrsvntiuq7vi.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%2Fvmw7pa8gdrsvntiuq7vi.png" alt=" " width="676" height="649"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For PulseAudio: Ensure that the &lt;code&gt;pulseaudio-bluetooth&lt;/code&gt; package is installed. This module is responsible for automatically switching audio output to a connected Bluetooth device. If it's installed but not working, check the &lt;code&gt;/etc/pulse/default.pa&lt;/code&gt; file and ensure the following lines are not commented out:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;load-module module-switch-on-connect
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If it is commented out, you can uncomment the line or type this on the &lt;code&gt;/etc/pulse/default.pa&lt;/code&gt; file and then restart the &lt;code&gt;pulseaudio&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Restart pulseaudio&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pulseaudio -k
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And you can also restart the Bluetooth service:&lt;/p&gt;

&lt;p&gt;Stop the Bluetooth service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl stop bluetooth.service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Remove the Bluetooth cache directory:&lt;br&gt;
This directory stores all pairing information, including the link keys that are causing the problem.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo rm -r /var/lib/bluetooth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start the Bluetooth service again:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl start bluetooth.service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will create a new, empty Bluetooth cache.&lt;/p&gt;

</description>
      <category>archlinux</category>
      <category>bluetooth</category>
    </item>
    <item>
      <title>Virtualbox Installation for Arch Linux</title>
      <dc:creator>Harry Tanama</dc:creator>
      <pubDate>Sun, 03 Aug 2025 14:37:16 +0000</pubDate>
      <link>https://forem.com/harry_tanama_51571ebf90b6/virtualbox-installation-for-arch-linux-236a</link>
      <guid>https://forem.com/harry_tanama_51571ebf90b6/virtualbox-installation-for-arch-linux-236a</guid>
      <description>&lt;p&gt;VirtualBox - Arch Linux Wiki Page&lt;br&gt;
&lt;a href="https://wiki.archlinux.org/title/VirtualBox" rel="noopener noreferrer"&gt;https://wiki.archlinux.org/title/VirtualBox&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Install the virtualbox package. You will also need to choose a package to provide host modules: &lt;/p&gt;

&lt;p&gt;Check your current kernel&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ uname -r
6.15.8-arch1-2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your kernel is Arch, choose &lt;code&gt;virtualbox-host-modules-arch&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If your kernel is linux-lts kernel, choose &lt;code&gt;virtualbox-host-modules-lts&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If your kernel is other kernel, choose &lt;code&gt;virtualbox-host-dkms&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;For the standard Arch kernel (linux):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo pacman -S virtualbox virtualbox-host-modules-arch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Load the VirtualBox Kernel Modules after install.&lt;/p&gt;

&lt;p&gt;After the packages are reinstalled, you need to load the kernel modules. The simplest way to ensure they are all loaded is to reboot your system.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If needed to Load the VirtualBox kernel modules&lt;br&gt;
virtualbox-host-modules-arch and virtualbox-host-dkms use systemd-modules-load.service to load VirtualBox modules automatically at boot time. &lt;/p&gt;

&lt;p&gt;To load the module manually, run in &lt;code&gt;root&lt;/code&gt; mode:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo modprobe vboxdrv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;modprobe vboxdrv&lt;/code&gt; is the command to load the module. It's quiet when it works.&lt;/p&gt;

&lt;p&gt;Type this command &lt;code&gt;lsmod&lt;/code&gt; to check if module is loaded.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;lsmod | grep vboxdrv 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Success: If the module is loaded, you will see output like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vboxdrv               516096  3 vboxnetflt,vboxnetadp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>archlinux</category>
      <category>installation</category>
      <category>virtualmachine</category>
    </item>
    <item>
      <title>How to Compile from Source Code in Linux</title>
      <dc:creator>Harry Tanama</dc:creator>
      <pubDate>Sun, 03 Aug 2025 04:15:01 +0000</pubDate>
      <link>https://forem.com/harry_tanama_51571ebf90b6/how-to-compile-from-source-code-in-linux-36b6</link>
      <guid>https://forem.com/harry_tanama_51571ebf90b6/how-to-compile-from-source-code-in-linux-36b6</guid>
      <description>&lt;p&gt;The standard process for compiling and installing an application from source usually follows these steps:&lt;/p&gt;

&lt;p&gt;Download and Extract: Download the source code, which is usually a compressed archive (.tar.gz, .tar.bz2, etc.).&lt;/p&gt;

&lt;p&gt;Configure: Run the ./configure script (if it exists) to check for dependencies and prepare the Makefile.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./configure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Compile: Run the make command to compile the code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;make
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install: Run sudo make install to install the final binary and its associated files to the system.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo make install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Important Note: Always check the README or INSTALL files that come with the source code, as the build process can vary significantly between projects.&lt;/p&gt;

&lt;p&gt;For local installation&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;./configure --prefix=$HOME/.local

make

make install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt; Cmake &lt;/h1&gt;

&lt;p&gt;Build software application using CMake:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir build
cd build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure with a CMAKE_INSTALL_PREFIX: You specify the installation directory when running cmake.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/.local
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The .. tells cmake to look for the CMakeLists.txt file in the parent directory.&lt;/p&gt;

&lt;p&gt;Compile and Install:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;make

make install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Making the Binaries Accessible&lt;/p&gt;

&lt;p&gt;After a local installation, the executable files are in a directory like ~/.local/bin, but your shell might not know where to find them. To fix this, you need to add this directory to your PATH environment variable.&lt;/p&gt;

&lt;p&gt;You can do this by adding the following line to your shell's configuration file (e.g., ~/.bashrc or ~/.zshrc):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export PATH=$HOME/.local/bin:$PATH
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>linux</category>
      <category>compilation</category>
      <category>developer</category>
      <category>programmer</category>
    </item>
  </channel>
</rss>
