<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rita Kairu</title>
    <description>The latest articles on DEV Community by Rita Kairu (@thecodingcivilengineer).</description>
    <link>https://dev.to/thecodingcivilengineer</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%2F893764%2Fd84ddd4c-968b-48f7-946f-c139c0d44b3c.png</url>
      <title>DEV Community: Rita Kairu</title>
      <link>https://dev.to/thecodingcivilengineer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thecodingcivilengineer"/>
    <language>en</language>
    <item>
      <title>Don't Run That Code! Your Guide to Staying Safe from Job Scams with Virtual Machines</title>
      <dc:creator>Rita Kairu</dc:creator>
      <pubDate>Thu, 16 Oct 2025 08:59:13 +0000</pubDate>
      <link>https://dev.to/thecodingcivilengineer/dont-run-that-code-your-guide-to-staying-safe-from-job-scams-with-virtual-machines-1eg9</link>
      <guid>https://dev.to/thecodingcivilengineer/dont-run-that-code-your-guide-to-staying-safe-from-job-scams-with-virtual-machines-1eg9</guid>
      <description>&lt;p&gt;The digital world is on high alert. There’s been a noticeable &lt;strong&gt;surge in cyberattacks targeting jobseekers, LinkedIn users, and people hanging out on platforms like Discord&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;These aren’t your average “click this suspicious link” scams. They’re full-on social engineering traps—crafted to convince you to run code or install something that quietly takes over your digital life.&lt;/p&gt;

&lt;p&gt;Once you take the bait, the attackers can steal &lt;strong&gt;everything&lt;/strong&gt;—your crypto wallets, personal files, passwords, and even your identity.&lt;/p&gt;




&lt;h2&gt;
  
  
  Inside the Mind of a Modern Hacker
&lt;/h2&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%2F1xrav3myuhdw6a45y914.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%2F1xrav3myuhdw6a45y914.png" alt="Malware analysis" width="712" height="900"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Original source: &lt;a href="https://x.com/deedydas/status/1978513926846378460?s=48&amp;amp;t=7nV0l_VG6K4YyOjAK9e08g" rel="noopener noreferrer"&gt;X (formerly Twitter)&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A recent post on x exposed one of these real, live attacks. The payload as described, was &lt;strong&gt;“obfuscated, sneaky, and pure evil”&lt;/strong&gt; a code so well-hidden that it blended perfectly with legitimate admin functions on a server.&lt;/p&gt;

&lt;p&gt;Here’s the scary part: it was &lt;strong&gt;active&lt;/strong&gt;. The moment someone accessed those admin routes, the code would execute &lt;strong&gt;with full system privileges.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After decoding the payload, he discovered that it was designed to steal everything—crypto wallets, files, passwords—your entire digital existence.&lt;/p&gt;

&lt;p&gt;Even more disturbing, the scammers were strategic such that the infected URL vanished exactly 24 after hours, leaving no trace behind. That kind of disappearing infrastructure isn’t random, it’s intentional, designed to wipe evidence before anyone can investigate.&lt;/p&gt;

&lt;p&gt;Bottom line: if you download code or files from an unknown source, assume it’s dangerous until proven otherwise.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to Protect Yourself: Run Suspicious Code in Isolation
&lt;/h2&gt;

&lt;p&gt;If you ever come across code that looks shady but you still want to analyze it or confirm if it’s safe. &lt;strong&gt;Don’t run it directly on your main computer.&lt;/strong&gt;&lt;br&gt;
That’s what sandboxing and virtualization are for.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Virtual Machine (VM)&lt;/strong&gt; or sandbox is like a digital quarantine zone. You can test the suspicious code there safely, without risking your actual files, crypto keys, or system.&lt;/p&gt;




&lt;h3&gt;
  
  
  Reliable Tools for Safe Testing
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Ideal For&lt;/th&gt;
&lt;th&gt;Why It’s Safe&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Windows Sandbox&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Windows users who want a quick, disposable test space.&lt;/td&gt;
&lt;td&gt;Comes built-in with Windows Pro/Enterprise. Creates a clean, temporary OS that wipes itself when closed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Oracle VM VirtualBox&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Anyone wanting more control and free cross-platform use.&lt;/td&gt;
&lt;td&gt;Lets you create &lt;strong&gt;snapshots&lt;/strong&gt;—so you can restore your VM to a clean state instantly.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;VMware Workstation Player&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Users needing top performance and security.&lt;/td&gt;
&lt;td&gt;Strong isolation and great performance (free for personal use).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  Virtual Machine Safety Tips
&lt;/h3&gt;

&lt;p&gt;A VM is great, but you have to set it up right to keep yourself safe:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Turn off sharing:&lt;/strong&gt; Disable all Shared Folders and Clipboard Sharing between your real computer and the VM. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disconnect the internet wherever possible:&lt;/strong&gt; Use "Host-Only" mode or disable your network entirely. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stay Anonymous:&lt;/strong&gt; Don't log into your real accounts or wallets inside the VM.&lt;/p&gt;

&lt;p&gt;You can learn more about &lt;a href="https://dev.to/thecodingcivilengineer/vm-safety-configuration-a-developers-guide-2529"&gt;VM Safety Configuration in this article&lt;/a&gt;. &lt;/p&gt;




&lt;p&gt;In today’s world of clever cyberattacks, it's okay to be paranoid. Your digital safety comes first.&lt;br&gt;
If someone online asks you to run their code, the safest response is simple: &lt;strong&gt;don’t.&lt;/strong&gt;&lt;br&gt;
But if you absolutely must, do it inside a tightly locked-down, isolated environment.&lt;/p&gt;

&lt;p&gt;Because once malware gets out, reclaiming your digital life isn’t easy.&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>cyberattacks</category>
      <category>softwareengineering</category>
      <category>ai</category>
    </item>
    <item>
      <title>VM Safety Configuration: A Developer's Guide</title>
      <dc:creator>Rita Kairu</dc:creator>
      <pubDate>Thu, 16 Oct 2025 08:57:41 +0000</pubDate>
      <link>https://dev.to/thecodingcivilengineer/vm-safety-configuration-a-developers-guide-2529</link>
      <guid>https://dev.to/thecodingcivilengineer/vm-safety-configuration-a-developers-guide-2529</guid>
      <description>&lt;p&gt;Virtual machines are essential tools for testing untrusted code, analyzing malware, or experimenting with potentially dangerous software. However, a VM is only as safe as its configuration. This guide provides practical examples for hardening your VM setup across popular platforms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why VM Safety Matters
&lt;/h2&gt;

&lt;p&gt;A misconfigured VM can compromise your host system through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shared resources&lt;/strong&gt; (folders, clipboard) that create data bridges&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network connections&lt;/strong&gt; that allow lateral movement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VM escape vulnerabilities&lt;/strong&gt; in shared services&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accidental credential exposure&lt;/strong&gt; through auto-login features&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  1. Disable Shared Folders
&lt;/h2&gt;

&lt;p&gt;Shared folders create a direct bridge between your host and guest systems. Disabling them prevents malware from accessing your real files.&lt;/p&gt;

&lt;h3&gt;
  
  
  VirtualBox
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Via GUI:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Select VM → Settings → Shared Folders
2. Remove all shared folder entries
3. Uncheck "Auto-mount" if present
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Via Command Line:&lt;/strong&gt;&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="c"&gt;# List all shared folders&lt;/span&gt;
VBoxManage showvminfo &lt;span class="s2"&gt;"YourVMName"&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s2"&gt;"Shared folders"&lt;/span&gt;

&lt;span class="c"&gt;# Remove a specific shared folder&lt;/span&gt;
VBoxManage sharedfolder remove &lt;span class="s2"&gt;"YourVMName"&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="s2"&gt;"SharedFolderName"&lt;/span&gt;

&lt;span class="c"&gt;# Remove all shared folders (run for each listed folder)&lt;/span&gt;
VBoxManage sharedfolder remove &lt;span class="s2"&gt;"YourVMName"&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="s2"&gt;"folder1"&lt;/span&gt;
VBoxManage sharedfolder remove &lt;span class="s2"&gt;"YourVMName"&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="s2"&gt;"folder2"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  VMware Workstation/Fusion
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Via GUI:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. VM → Settings → Options → Shared Folders
2. Select "Disabled"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Via .vmx Configuration File:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="c"&gt;# Locate your VM's .vmx file and add/modify:
&lt;/span&gt;&lt;span class="py"&gt;isolation.tools.hgfs.disable&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"TRUE"&lt;/span&gt;
&lt;span class="py"&gt;sharedFolder.maxNum&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"0"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Hyper-V
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Via PowerShell:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Disable all shared folders for a VM&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Get-VMIntegrationService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-VMName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YourVMName"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Guest Service Interface"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Disable-VMIntegrationService&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Verify it's disabled&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Get-VMIntegrationService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-VMName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YourVMName"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Select&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Enabled&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Disable Clipboard Sharing
&lt;/h2&gt;

&lt;p&gt;The clipboard can leak sensitive data between host and guest, including passwords from password managers.&lt;/p&gt;

&lt;h3&gt;
  
  
  VirtualBox
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Via GUI:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Settings → General → Advanced
- Shared Clipboard: Disabled
- Drag'n'Drop: Disabled
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Via Command Line:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;VBoxManage modifyvm &lt;span class="s2"&gt;"YourVMName"&lt;/span&gt; &lt;span class="nt"&gt;--clipboard-mode&lt;/span&gt; disabled
VBoxManage modifyvm &lt;span class="s2"&gt;"YourVMName"&lt;/span&gt; &lt;span class="nt"&gt;--draganddrop&lt;/span&gt; disabled
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  VMware
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Via .vmx File:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="py"&gt;isolation.tools.copy.disable&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"TRUE"&lt;/span&gt;
&lt;span class="py"&gt;isolation.tools.paste.disable&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"TRUE"&lt;/span&gt;
&lt;span class="py"&gt;isolation.tools.dnd.disable&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"TRUE"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Verify Settings:&lt;/strong&gt;&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="c"&gt;# On Linux/Mac&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"isolation.tools"&lt;/span&gt; /path/to/your-vm.vmx

&lt;span class="c"&gt;# On Windows PowerShell&lt;/span&gt;
Select-String &lt;span class="nt"&gt;-Path&lt;/span&gt; &lt;span class="s2"&gt;"C:&lt;/span&gt;&lt;span class="se"&gt;\p&lt;/span&gt;&lt;span class="s2"&gt;ath&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s2"&gt;o&lt;/span&gt;&lt;span class="se"&gt;\y&lt;/span&gt;&lt;span class="s2"&gt;our-vm.vmx"&lt;/span&gt; &lt;span class="nt"&gt;-Pattern&lt;/span&gt; &lt;span class="s2"&gt;"isolation.tools"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Hyper-V
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Disable clipboard integration&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Disable-VMIntegrationService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-VMName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YourVMName"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Guest Service Interface"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Network Isolation
&lt;/h2&gt;

&lt;p&gt;Disconnecting the VM from the internet prevents malware from communicating with command-and-control servers or exfiltrating data.&lt;/p&gt;

&lt;h3&gt;
  
  
  VirtualBox - Host-Only Network
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Setup Script:&lt;/strong&gt;&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="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="nv"&gt;VM_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"SafetyVM"&lt;/span&gt;

&lt;span class="c"&gt;# Create host-only network if it doesn't exist&lt;/span&gt;
VBoxManage hostonlyif create

&lt;span class="c"&gt;# Configure the host-only adapter (usually vboxnet0)&lt;/span&gt;
VBoxManage hostonlyif ipconfig vboxnet0 &lt;span class="nt"&gt;--ip&lt;/span&gt; 192.168.56.1 &lt;span class="nt"&gt;--netmask&lt;/span&gt; 255.255.255.0

&lt;span class="c"&gt;# Attach VM to host-only network&lt;/span&gt;
VBoxManage modifyvm &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VM_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;--nic1&lt;/span&gt; hostonly
VBoxManage modifyvm &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VM_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;--hostonlyadapter1&lt;/span&gt; vboxnet0

&lt;span class="c"&gt;# Disable DHCP server on the host-only network (optional)&lt;/span&gt;
VBoxManage dhcpserver modify &lt;span class="nt"&gt;--netname&lt;/span&gt; HostInterfaceNetworking-vboxnet0 &lt;span class="nt"&gt;--disable&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"VM configured for host-only networking"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Complete Disconnect:&lt;/strong&gt;&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="c"&gt;# Disable all network adapters&lt;/span&gt;
VBoxManage modifyvm &lt;span class="s2"&gt;"YourVMName"&lt;/span&gt; &lt;span class="nt"&gt;--nic1&lt;/span&gt; none
VBoxManage modifyvm &lt;span class="s2"&gt;"YourVMName"&lt;/span&gt; &lt;span class="nt"&gt;--nic2&lt;/span&gt; none
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  VMware - Custom Network
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Via GUI:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. VM → Settings → Network Adapter
2. Select "Host-only" or "Custom" (then choose a host-only network)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Via .vmx File:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="py"&gt;ethernet0.connectionType&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"hostonly"&lt;/span&gt;
&lt;span class="c"&gt;# Or completely disable:
&lt;/span&gt;&lt;span class="py"&gt;ethernet0.present&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"FALSE"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;PowerShell Script for VMware:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Set to host-only&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;-T&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;setNetworkAdapter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\path\to\vm.vmx"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hostonly&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Or disable entirely&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nt"&gt;-T&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;deleteNetworkAdapter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\path\to\vm.vmx"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Hyper-V - Internal Network
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;PowerShell Configuration:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create an internal switch (isolated from host)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;New-VMSwitch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"IsolatedSwitch"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-SwitchType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Internal&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Connect VM to isolated switch&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Get-VM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YourVMName"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Get-VMNetworkAdapter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Connect-VMNetworkAdapter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-SwitchName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"IsolatedSwitch"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Or completely disconnect&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Get-VM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YourVMName"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Get-VMNetworkAdapter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Disconnect-VMNetworkAdapter&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Snapshot Management
&lt;/h2&gt;

&lt;p&gt;Snapshots allow you to instantly restore a clean state, critical when testing potentially harmful software.&lt;/p&gt;

&lt;h3&gt;
  
  
  VirtualBox
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Create Baseline Snapshot:&lt;/strong&gt;&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="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="nv"&gt;VM_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"SafetyVM"&lt;/span&gt;
&lt;span class="nv"&gt;SNAPSHOT_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Clean_Baseline_&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%Y%m%d&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Ensure VM is powered off&lt;/span&gt;
VBoxManage controlvm &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VM_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; poweroff 2&amp;gt;/dev/null
&lt;span class="nb"&gt;sleep &lt;/span&gt;5

&lt;span class="c"&gt;# Create snapshot&lt;/span&gt;
VBoxManage snapshot &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VM_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; take &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$SNAPSHOT_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--description&lt;/span&gt; &lt;span class="s2"&gt;"Clean state before testing - &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Snapshot created: &lt;/span&gt;&lt;span class="nv"&gt;$SNAPSHOT_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# List all snapshots&lt;/span&gt;
VBoxManage snapshot &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VM_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Restore Snapshot:&lt;/strong&gt;&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="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="nv"&gt;VM_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"SafetyVM"&lt;/span&gt;
&lt;span class="nv"&gt;SNAPSHOT_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Clean_Baseline_20240101"&lt;/span&gt;

&lt;span class="c"&gt;# Power off VM&lt;/span&gt;
VBoxManage controlvm &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VM_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; poweroff 2&amp;gt;/dev/null
&lt;span class="nb"&gt;sleep &lt;/span&gt;5

&lt;span class="c"&gt;# Restore snapshot&lt;/span&gt;
VBoxManage snapshot &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VM_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; restore &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$SNAPSHOT_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"VM restored to: &lt;/span&gt;&lt;span class="nv"&gt;$SNAPSHOT_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Automated Test Cycle:&lt;/strong&gt;&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="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="nv"&gt;VM_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"SafetyVM"&lt;/span&gt;
&lt;span class="nv"&gt;CLEAN_SNAPSHOT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Clean_Baseline"&lt;/span&gt;

&lt;span class="k"&gt;function &lt;/span&gt;test_sample&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="c"&gt;# Restore clean state&lt;/span&gt;
    VBoxManage controlvm &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VM_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; poweroff 2&amp;gt;/dev/null
    &lt;span class="nb"&gt;sleep &lt;/span&gt;3
    VBoxManage snapshot &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VM_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; restore &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$CLEAN_SNAPSHOT&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

    &lt;span class="c"&gt;# Start VM&lt;/span&gt;
    VBoxManage startvm &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VM_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;--type&lt;/span&gt; headless
    &lt;span class="nb"&gt;sleep &lt;/span&gt;30

    &lt;span class="c"&gt;# Your testing logic here&lt;/span&gt;
    &lt;span class="c"&gt;# ...&lt;/span&gt;

    &lt;span class="c"&gt;# Power off and restore again&lt;/span&gt;
    VBoxManage controlvm &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VM_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; poweroff
    &lt;span class="nb"&gt;sleep &lt;/span&gt;3
    VBoxManage snapshot &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VM_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; restore &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$CLEAN_SNAPSHOT&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;# Test multiple samples&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;sample &lt;span class="k"&gt;in&lt;/span&gt; /path/to/samples/&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Testing: &lt;/span&gt;&lt;span class="nv"&gt;$sample&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    test_sample
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  VMware
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;PowerShell Script:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="kr"&gt;param&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$VMXPath&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\VMs\SafetyVM\SafetyVM.vmx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$SnapshotName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Clean_Baseline"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nv"&gt;$vmrun&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Create snapshot&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$vmrun&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-T&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;snapshot&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$VMXPath&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$SnapshotName&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Restore snapshot&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$vmrun&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-T&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;revertToSnapshot&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$VMXPath&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$SnapshotName&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# List snapshots&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$vmrun&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-T&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;listSnapshots&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$VMXPath&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Hyper-V
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint Management:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create checkpoint&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$VMName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SafetyVM"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$CheckpointName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Clean_Baseline_&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="n"&gt;Get-Date&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Format&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'yyyyMMdd_HHmmss'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;Checkpoint-VM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$VMName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-SnapshotName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$CheckpointName&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Restore checkpoint&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Restore-VMCheckpoint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$CheckpointName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-VMName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$VMName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Confirm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="bp"&gt;$false&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# List checkpoints&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Get-VMCheckpoint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-VMName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$VMName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Select-Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;CreationTime&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Automated testing function&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="kr"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;Test-InVM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="kr"&gt;param&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$VMName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="nv"&gt;$CleanCheckpoint&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="c"&gt;# Restore clean state&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;Stop-VM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$VMName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ErrorAction&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;SilentlyContinue&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;Start-Sleep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Seconds&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;5&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;Restore-VMCheckpoint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$CleanCheckpoint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-VMName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$VMName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Confirm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="bp"&gt;$false&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="c"&gt;# Start VM&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;Start-VM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$VMName&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;Start-Sleep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Seconds&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;30&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="c"&gt;# Your testing here&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="c"&gt;# Restore again&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;Stop-VM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$VMName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;Restore-VMCheckpoint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$CleanCheckpoint&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-VMName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$VMName&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Confirm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="bp"&gt;$false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Keep Personal Data Out
&lt;/h2&gt;

&lt;p&gt;Prevent credential leakage through configuration and monitoring.&lt;/p&gt;

&lt;h3&gt;
  
  
  Disable Credential Managers
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Windows VM:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Disable Windows Credential Manager&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;reg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"HKLM\SOFTWARE\Policies\Microsoft\Windows\CredentialsDelegation"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AllowDefCredentialsWhenNTLMOnly"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;REG_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/f&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Disable saved passwords in browsers (example for Chrome)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;reg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"HKCU\Software\Policies\Google\Chrome"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"PasswordManagerEnabled"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;REG_DWORD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/f&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Clear stored credentials&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;cmdkey&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/list&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;findstr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Target"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;/f&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tokens=2 delims= "&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'more'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;do&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cmdkey&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/delete:&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Linux VM:&lt;/strong&gt;&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="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="c"&gt;# Remove saved credentials&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ~/.gnome2/keyrings/&lt;span class="k"&gt;*&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ~/.local/share/keyrings/&lt;span class="k"&gt;*&lt;/span&gt;

&lt;span class="c"&gt;# Clear browser profiles&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ~/.mozilla/firefox/&lt;span class="k"&gt;*&lt;/span&gt;.default&lt;span class="k"&gt;*&lt;/span&gt;/key&lt;span class="k"&gt;*&lt;/span&gt;.db
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ~/.config/google-chrome/Default/Login&lt;span class="se"&gt;\ &lt;/span&gt;Data

&lt;span class="c"&gt;# Clear bash history&lt;/span&gt;
&lt;span class="nb"&gt;history&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; /dev/null &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; ~/.bash_history
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Browser Configuration Script
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Python Script for Fresh Browser:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#!/usr/bin/env python3
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;shutil&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;platform&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;sanitize_browsers&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Remove browser profiles and credentials&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

    &lt;span class="n"&gt;system&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;platform&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;system&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;home&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;expanduser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;~&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;paths_to_clear&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;system&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Windows&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;paths_to_clear&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;APPDATA&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Mozilla&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Firefox&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Profiles&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;LOCALAPPDATA&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Google&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Chrome&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User Data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;LOCALAPPDATA&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Microsoft&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Edge&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User Data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;system&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Linux&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;paths_to_clear&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;home&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;.mozilla&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;firefox&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;home&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;.config&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;google-chrome&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;home&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;.config&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;chromium&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;paths_to_clear&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;shutil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rmtree&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cleared: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Could not clear &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;This will delete browser profiles. Continue? (yes/no): &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;yes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;sanitize_browsers&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Browser data cleared. Fresh profiles will be created on next launch.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Network Monitoring
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Simple Traffic Monitor:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;#!/usr/bin/env python3
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
Monitor for suspicious outbound connections from VM
Run on host machine
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;subprocess&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;

&lt;span class="n"&gt;VM_IP_RANGE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;192.168.56.0/24&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# Adjust for your host-only network
&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;monitor_connections&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Watch for any internet-bound traffic from VM&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Monitoring VM network range: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;VM_IP_RANGE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Press Ctrl+C to stop&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# Linux/Mac
&lt;/span&gt;        &lt;span class="n"&gt;cmd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tcpdump -n &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;src net &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;VM_IP_RANGE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; and not dst net &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;VM_IP_RANGE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'"&lt;/span&gt;
        &lt;span class="n"&gt;process&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Popen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;shell&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stdout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PIPE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
                                   &lt;span class="n"&gt;stderr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;PIPE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stdout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;timestamp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;%Y-%m-%d %H:%M:%S&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;timestamp&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;] ALERT: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;KeyboardInterrupt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;Monitoring stopped&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Error: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Note: This script requires tcpdump and root privileges&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;monitor_connections&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Complete VM Setup Script
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;All-in-One VirtualBox Configuration:&lt;/strong&gt;&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="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="c"&gt;# Complete VM safety setup for VirtualBox&lt;/span&gt;

&lt;span class="nv"&gt;VM_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"SafetyVM"&lt;/span&gt;
&lt;span class="nv"&gt;SNAPSHOT_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Clean_Baseline"&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"=== VM Safety Configuration ==="&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"VM Name: &lt;/span&gt;&lt;span class="nv"&gt;$VM_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt;

&lt;span class="c"&gt;# 1. Disable sharing&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"[1/5] Disabling shared folders and clipboard..."&lt;/span&gt;
VBoxManage modifyvm &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VM_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;--clipboard-mode&lt;/span&gt; disabled
VBoxManage modifyvm &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VM_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;--draganddrop&lt;/span&gt; disabled

&lt;span class="c"&gt;# Remove all shared folders&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;folder &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;VBoxManage showvminfo &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VM_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;--machinereadable&lt;/span&gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;SharedFolderName | &lt;span class="nb"&gt;cut&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt;&lt;span class="s1"&gt;'"'&lt;/span&gt; &lt;span class="nt"&gt;-f2&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
    &lt;/span&gt;VBoxManage sharedfolder remove &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VM_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$folder&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;done&lt;/span&gt;

&lt;span class="c"&gt;# 2. Isolate network&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"[2/5] Configuring network isolation..."&lt;/span&gt;
VBoxManage modifyvm &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VM_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;--nic1&lt;/span&gt; hostonly
VBoxManage modifyvm &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VM_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;--hostonlyadapter1&lt;/span&gt; vboxnet0

&lt;span class="c"&gt;# 3. Disable unnecessary features&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"[3/5] Disabling unnecessary features..."&lt;/span&gt;
VBoxManage modifyvm &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VM_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;--usb&lt;/span&gt; off
VBoxManage modifyvm &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VM_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;--audio&lt;/span&gt; none

&lt;span class="c"&gt;# 4. Create snapshot&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"[4/5] Creating clean snapshot..."&lt;/span&gt;
VBoxManage controlvm &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VM_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; poweroff 2&amp;gt;/dev/null
&lt;span class="nb"&gt;sleep &lt;/span&gt;5
VBoxManage snapshot &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VM_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; take &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$SNAPSHOT_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;--description&lt;/span&gt; &lt;span class="s2"&gt;"Safe baseline configuration"&lt;/span&gt;

&lt;span class="c"&gt;# 5. Verify configuration&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"[5/5] Verifying configuration..."&lt;/span&gt;
&lt;span class="nb"&gt;echo
echo&lt;/span&gt; &lt;span class="s2"&gt;"=== Configuration Summary ==="&lt;/span&gt;
VBoxManage showvminfo &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VM_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;--machinereadable&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s2"&gt;"(clipboard|draganddrop|nic1|SharedFolder)"&lt;/span&gt; 
&lt;span class="nb"&gt;echo
echo&lt;/span&gt; &lt;span class="s2"&gt;"Snapshots:"&lt;/span&gt;
VBoxManage snapshot &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VM_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; list
&lt;span class="nb"&gt;echo
echo&lt;/span&gt; &lt;span class="s2"&gt;"✓ VM safety configuration complete"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"⚠ Remember: Never log into real accounts inside this VM"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Best Practices Checklist
&lt;/h2&gt;

&lt;p&gt;Before testing any untrusted code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] All shared folders removed&lt;/li&gt;
&lt;li&gt;[ ] Clipboard sharing disabled&lt;/li&gt;
&lt;li&gt;[ ] Network set to host-only or disconnected&lt;/li&gt;
&lt;li&gt;[ ] Clean snapshot created&lt;/li&gt;
&lt;li&gt;[ ] Browser profiles cleared&lt;/li&gt;
&lt;li&gt;[ ] No personal accounts logged in&lt;/li&gt;
&lt;li&gt;[ ] Password managers disabled&lt;/li&gt;
&lt;li&gt;[ ] VM host system is up-to-date&lt;/li&gt;
&lt;li&gt;[ ] Antivirus on host is active&lt;/li&gt;
&lt;li&gt;[ ] Backup of important host data exists&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;VM safety is about defense in depth. Each configuration layer adds protection against malware escaping the sandbox or stealing your data. Always assume the code you're testing is hostile, and never let convenience compromise security.&lt;/p&gt;

&lt;p&gt;The few minutes spent configuring these settings properly can prevent hours of incident response—or worse, permanent data loss.&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>cyberattacks</category>
      <category>malware</category>
      <category>ai</category>
    </item>
    <item>
      <title>Comparing Modular and Input Handling in Python (With Code Examples)</title>
      <dc:creator>Rita Kairu</dc:creator>
      <pubDate>Wed, 10 Jul 2024 14:02:49 +0000</pubDate>
      <link>https://dev.to/thecodingcivilengineer/comparing-modular-and-input-handling-in-python-with-code-examples-3alc</link>
      <guid>https://dev.to/thecodingcivilengineer/comparing-modular-and-input-handling-in-python-with-code-examples-3alc</guid>
      <description>&lt;p&gt;I was working on a some problem sets in the &lt;a href="https://cs50.harvard.edu/python/2022/" rel="noopener noreferrer"&gt;CS50 programming with python course&lt;/a&gt; and got stuck while trying to understand the expected solution of a problem presented. &lt;/p&gt;

&lt;p&gt;The prerequisite code was provided and the requirement was to add in functions that convert the input string to floating-point numbers representing the dollar amount.&lt;/p&gt;

&lt;p&gt;Below are code snippets providing two different approaches to the problem. &lt;/p&gt;

&lt;p&gt;The first snippet shows the section added by instructors. I was supposed to fill in the blanks in the &lt;code&gt;dollar_to_float&lt;/code&gt; and &lt;code&gt;percent_to_float&lt;/code&gt; functions.&lt;/p&gt;

&lt;p&gt;The second one outlines my way of approaching the problem. It involved modifying the prerequisite code to get the expected results. &lt;/p&gt;

&lt;h3&gt;
  
  
  Code 1 (Original Code with Separate Functions)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;dollars&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;dollars_to_float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;How much was the meal? &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;percent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;percent_to_float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What percentage would you like to tip? &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;tip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dollars&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;percent&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Leave $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;tip&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;dollars_to_float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;percent_to_float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;%&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;

&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Code 2 (Simplified Code Without Separate Functions)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;dollars&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;How much was the meal? &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;percent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What percentage would you like to tip? &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;tip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dollars&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;percent&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Leave $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;tip&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What puzzled me is why the first approach was used, and whether it's a preferred coding practice among developers.&lt;/p&gt;

&lt;p&gt;The results were the same, but the way of handling the solution was different based on the following differences:&lt;/p&gt;

&lt;h3&gt;
  
  
  Differences
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Function Definitions&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Code 1&lt;/strong&gt;: Defines two separate functions, &lt;code&gt;dollars_to_float&lt;/code&gt; and &lt;code&gt;percent_to_float&lt;/code&gt;, to handle specific conversions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code 2&lt;/strong&gt;: Performs the conversions directly within the &lt;code&gt;main&lt;/code&gt; function without using separate functions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Input Handling&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Code 1&lt;/strong&gt;: Assumes the input may include currency (&lt;code&gt;$&lt;/code&gt;) and percentage (&lt;code&gt;%&lt;/code&gt;) symbols and handles their removal within the separate functions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code 2&lt;/strong&gt;: Assumes the input is a plain number without any symbols, directly converting the input string to a float.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Tip Calculation&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Code 1&lt;/strong&gt;: Multiplies the &lt;code&gt;dollars&lt;/code&gt; by &lt;code&gt;percent&lt;/code&gt;, where &lt;code&gt;percent&lt;/code&gt; is already converted to a decimal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code 2&lt;/strong&gt;: Multiplies &lt;code&gt;dollars&lt;/code&gt; by &lt;code&gt;percent&lt;/code&gt; and then divides by 100 to convert the percentage to a decimal inline.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Pros &amp;amp; Cons: Which Method is Better and More Commonly Used?
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Pros of Code 1:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Modularity&lt;/strong&gt;: Breaking the conversion logic into separate functions (&lt;code&gt;dollars_to_float&lt;/code&gt; and &lt;code&gt;percent_to_float&lt;/code&gt;) makes the code more modular. Each function has a single responsibility, making it easier to test and maintain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reusability&lt;/strong&gt;: The separate functions can be reused in other parts of the program if needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Clarity&lt;/strong&gt;: The intent of the conversion is clearer. Each function name describes what it does, which can make the code easier to read and understand.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Pros of Code 2:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Simplicity&lt;/strong&gt;: The code is simpler and shorter since it doesn't define extra functions. Everything is done inline within the &lt;code&gt;main&lt;/code&gt; function.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Directness&lt;/strong&gt;: The input and conversion logic are handled directly, which can be easier to follow for small scripts.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Common Practice:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Modularity and Clarity&lt;/strong&gt;: In larger projects or where input handling is complex, &lt;strong&gt;Code 1&lt;/strong&gt;'s approach is preferred. It makes the codebase easier to manage and understand. Writing modular code with single-responsibility functions is a common best practice in programming.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Simplicity and Conciseness&lt;/strong&gt;: For small scripts or when the input is straightforward (e.g., guaranteed to be plain numbers), &lt;strong&gt;Code 2&lt;/strong&gt;'s approach is often sufficient and commonly used due to its simplicity.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;I did a little research and learned that for small and straightforward scripts, handling input and conversions directly within the main function is common due to its simplicity and conciseness (code 2). &lt;br&gt;
However, in larger or more complex applications, breaking the logic into separate functions enhances modularity, reusability, and clarity, making the codebase easier to manage and understand (code 1).&lt;/p&gt;

</description>
      <category>python</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>More About File Operations in C Including File Descriptors</title>
      <dc:creator>Rita Kairu</dc:creator>
      <pubDate>Mon, 12 Feb 2024 10:40:33 +0000</pubDate>
      <link>https://dev.to/thecodingcivilengineer/more-about-file-operations-in-c-including-file-descriptors-1ip8</link>
      <guid>https://dev.to/thecodingcivilengineer/more-about-file-operations-in-c-including-file-descriptors-1ip8</guid>
      <description>&lt;p&gt;&lt;strong&gt;Comprehensive Guide to File Operations and System Calls in C&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;File operations and system calls are fundamental aspects of programming in C, essential for managing files, performing I/O operations, and interacting with the underlying operating system. &lt;/p&gt;

&lt;p&gt;This comprehensive guide will walk you through creating, opening, closing, reading, and writing files, along with the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;File descriptors, &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Standard file descriptors, &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I/O system calls, &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Flags, &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;File permissions, &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;System calls, and &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The difference between functions and system calls.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Creating, Opening, Closing, Reading, and Writing Files
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Creating and Opening Files:
&lt;/h4&gt;

&lt;p&gt;In C, files are created and opened using the &lt;code&gt;fopen()&lt;/code&gt; function provided by the standard library. The &lt;code&gt;fopen()&lt;/code&gt; function takes a filename and a mode as arguments and returns a file pointer to the opened file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;FILE&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;fp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;fp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"example.txt"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"w+"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Opens or creates a file named example.txt in write mode&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fp&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Error opening file!&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="c1"&gt;// File operations go here&lt;/span&gt;
    &lt;span class="n"&gt;fclose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Close the file when done&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Closing Files:
&lt;/h4&gt;

&lt;p&gt;To close a file and release its resources, the &lt;code&gt;fclose()&lt;/code&gt; function is used. It's essential to close files after performing operations to prevent resource leaks.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="n"&gt;fclose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Close the file pointer 'fp'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Reading from Files:
&lt;/h4&gt;

&lt;p&gt;Reading from files can be achieved using functions like &lt;code&gt;fgetc()&lt;/code&gt;, &lt;code&gt;fgets()&lt;/code&gt;, or &lt;code&gt;fread()&lt;/code&gt; for binary data.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="n"&gt;fgets&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Read a line from the file into buffer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Writing to Files:
&lt;/h4&gt;

&lt;p&gt;Writing to files can be done using functions like &lt;code&gt;fputc()&lt;/code&gt;, &lt;code&gt;fputs()&lt;/code&gt;, or &lt;code&gt;fwrite()&lt;/code&gt; for binary data.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="n"&gt;fprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"This is a formatted string: %s&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Write a formatted string to the file&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  File Descriptors
&lt;/h3&gt;

&lt;p&gt;File descriptors are integers used by the operating system to identify open files in a process. They're managed by the kernel and facilitate I/O operations.&lt;/p&gt;

&lt;h4&gt;
  
  
  Standard File Descriptors:
&lt;/h4&gt;

&lt;p&gt;In POSIX systems, there are three standard file descriptors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;0 (STDIN)&lt;/code&gt;: Standard input&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;1 (STDOUT)&lt;/code&gt;: Standard output&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;2 (STDERR)&lt;/code&gt;: Standard error&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  I/O System Calls
&lt;/h3&gt;

&lt;p&gt;I/O system calls are low-level functions provided by the operating system for performing input and output operations. Common I/O system calls include &lt;code&gt;open()&lt;/code&gt;, &lt;code&gt;close()&lt;/code&gt;, &lt;code&gt;read()&lt;/code&gt;, and &lt;code&gt;write()&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;code&gt;open()&lt;/code&gt; System Call:
&lt;/h4&gt;

&lt;p&gt;The &lt;code&gt;open()&lt;/code&gt; system call is used to open files and returns a file descriptor.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;fd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"example.txt"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;O_RDONLY&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Opens the file in read-only mode&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;code&gt;close()&lt;/code&gt; System Call:
&lt;/h4&gt;

&lt;p&gt;The &lt;code&gt;close()&lt;/code&gt; system call is used to close an open file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="n"&gt;close&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Close the file descriptor 'fd'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;code&gt;read()&lt;/code&gt; and &lt;code&gt;write()&lt;/code&gt; System Calls:
&lt;/h4&gt;

&lt;p&gt;The &lt;code&gt;read()&lt;/code&gt; and &lt;code&gt;write()&lt;/code&gt; system calls are used for reading from and writing to files respectively.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// Read data from the file descriptor 'fd' into buffer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Hello, World!"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Write "Hello, World!" to the file descriptor 'fd'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Flags and File Permissions
&lt;/h3&gt;

&lt;p&gt;Flags and file permissions control the behavior of file operations and define access rights to files. Common flags include &lt;code&gt;O_RDONLY&lt;/code&gt;, &lt;code&gt;O_WRONLY&lt;/code&gt;, and &lt;code&gt;O_RDWR&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  File Permissions:
&lt;/h4&gt;

&lt;p&gt;File permissions determine who can read, write, or execute a file. They are set using the &lt;code&gt;open()&lt;/code&gt; system call by passing an additional argument representing the file permissions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;fd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"example.txt"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;O_CREAT&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;O_WRONLY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mo"&gt;0644&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Create the file with read-write permissions for owner and read-only permissions for group and others&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  System Calls vs. Functions
&lt;/h3&gt;

&lt;p&gt;System calls are requests made by user-space programs to the operating system kernel, whereas functions are routines provided by libraries or the standard C library. System calls involve a context switch to kernel mode, making them more expensive in terms of performance compared to library functions.&lt;/p&gt;

&lt;p&gt;Understanding file operations, file descriptors, I/O system calls, flags, and file permissions is crucial for developing robust and efficient file-handling applications in C. &lt;/p&gt;

&lt;p&gt;By mastering these concepts, you'll be equipped to manipulate files and interact with the operating system effectively within your C programs.&lt;/p&gt;

</description>
      <category>c</category>
      <category>programming</category>
    </item>
    <item>
      <title>A Quick Guide to File Manipulation (I/O) in C</title>
      <dc:creator>Rita Kairu</dc:creator>
      <pubDate>Mon, 12 Feb 2024 10:32:02 +0000</pubDate>
      <link>https://dev.to/thecodingcivilengineer/a-comprehensive-guide-to-file-manipulation-io-in-c-57ck</link>
      <guid>https://dev.to/thecodingcivilengineer/a-comprehensive-guide-to-file-manipulation-io-in-c-57ck</guid>
      <description>&lt;p&gt;File operations in C are essential for reading from and writing to files on the system. They involve several functions and concepts that enable you to manipulate files efficiently. Here's a brief overview of file operations in C:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. File Pointers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;File pointers are used to handle files in C programs.&lt;/li&gt;
&lt;li&gt;They are of type &lt;code&gt;FILE&lt;/code&gt; and are declared using the &lt;code&gt;FILE&lt;/code&gt; structure.&lt;/li&gt;
&lt;li&gt;Example: &lt;code&gt;FILE *fp;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Opening Files
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;fopen()&lt;/code&gt; function is used to open files.&lt;/li&gt;
&lt;li&gt;Syntax: &lt;code&gt;FILE *fopen(const char *filename, const char *mode);&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Modes: 

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;"r"&lt;/code&gt;: Read mode&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;"w"&lt;/code&gt;: Write mode (creates a new file or overwrites existing content)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;"a"&lt;/code&gt;: Append mode (appends data at the end of the file)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;"r+"&lt;/code&gt;: Read/write mode (file must exist)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;"w+"&lt;/code&gt;: Read/write mode (creates a new file or overwrites existing content)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;"a+"&lt;/code&gt;: Read/append mode (file is created if it does not exist)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Returns a pointer to the file.&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Closing Files
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;fclose()&lt;/code&gt; function is used to close files.&lt;/li&gt;
&lt;li&gt;Syntax: &lt;code&gt;int fclose(FILE *fp);&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;It flushes any buffered data and releases the associated file descriptor.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Reading from Files
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;fgetc()&lt;/code&gt; reads a character from the file.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;fgets()&lt;/code&gt; reads a line from the file.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;fread()&lt;/code&gt; reads blocks of data from the file.&lt;/li&gt;
&lt;li&gt;Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;  &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="n"&gt;fgets&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Reads a line from the file into buffer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Writing to Files
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;fputc()&lt;/code&gt; writes a character to the file.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;fputs()&lt;/code&gt; writes a string to the file.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;fwrite()&lt;/code&gt; writes blocks of data to the file.&lt;/li&gt;
&lt;li&gt;Example:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;  &lt;span class="n"&gt;fprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"This is a formatted string: %s&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6. Error Handling
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Always check if file operations succeed.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;feof()&lt;/code&gt; and &lt;code&gt;ferror()&lt;/code&gt; to handle end-of-file and error conditions respectively.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7. File Positioning
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;fseek()&lt;/code&gt; and &lt;code&gt;rewind()&lt;/code&gt; are used to move the file pointer.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ftell()&lt;/code&gt; returns the current position of the file pointer.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8. Binary vs. Text Mode
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Files can be opened in binary mode by adding &lt;code&gt;'b'&lt;/code&gt; to the mode string.&lt;/li&gt;
&lt;li&gt;Binary mode prevents newline translation and treats file contents as binary data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  9. Error Handling
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Always check the return values of file operations.&lt;/li&gt;
&lt;li&gt;Handle errors gracefully to avoid unexpected behavior.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Sample Code:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;FILE&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;fp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

    &lt;span class="c1"&gt;// Open file for writing&lt;/span&gt;
    &lt;span class="n"&gt;fp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"example.txt"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"w+"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fp&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nb"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Error opening file!&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Write to file&lt;/span&gt;
    &lt;span class="n"&gt;fprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"This is just an example!&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Read from file&lt;/span&gt;
    &lt;span class="n"&gt;rewind&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;fgets&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Content: %s"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;buffer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Close file&lt;/span&gt;
    &lt;span class="n"&gt;fclose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Important Points:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Always close files after using them to prevent resource leaks.&lt;/li&gt;
&lt;li&gt;Handle file operations errors appropriately.&lt;/li&gt;
&lt;li&gt;Use binary mode when dealing with binary data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Understanding file operations is crucial for many applications, especially those involving data storage and manipulation. Mastering file operations in C allows you to work with files seamlessly.&lt;/p&gt;

</description>
      <category>c</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Linked Lists in C Explained Clearly</title>
      <dc:creator>Rita Kairu</dc:creator>
      <pubDate>Thu, 01 Feb 2024 10:14:07 +0000</pubDate>
      <link>https://dev.to/thecodingcivilengineer/linked-lists-in-c-explained-clearly-k0i</link>
      <guid>https://dev.to/thecodingcivilengineer/linked-lists-in-c-explained-clearly-k0i</guid>
      <description>&lt;h2&gt;
  
  
  What is a Linked List?
&lt;/h2&gt;

&lt;p&gt;A linked list is a dynamic data structure with elements called nodes that contain some data and a reference (or pointer) to the next node in the sequence.&lt;/p&gt;

&lt;p&gt;Unlike arrays, elements don't have to be stored in a fixed, continuous block of memory. They can dynamically grow or shrink as needed without allocating a contiguous block of memory like arrays.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Useful are Linked Lists?
&lt;/h2&gt;

&lt;p&gt;They are useful for implementing various data structures and algorithms as they offer efficient insertion and deletion operations, especially when elements need to be added or removed frequently from the middle of the list. &lt;/p&gt;

&lt;p&gt;The only disadvantage is that it requires traversing through the list from the beginning when accessing an element, unlike arrays that are efficient for random access. &lt;/p&gt;

&lt;p&gt;They are fundamental data structures used for tasks like managing memory allocation, implementing abstract data types (e.g. stacks, queues), and representing complex data relationships. &lt;/p&gt;

&lt;h2&gt;
  
  
  Basic Types of Linked Lists in C
&lt;/h2&gt;

&lt;h4&gt;
  
  
  1. Singly Linked List
&lt;/h4&gt;

&lt;p&gt;Each nodes contains data and a pointer/reference to the next node in the sequence. It forms a unidirectional chain where traversal is possible only in one direction, usually from the head to the end.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Doubly Linked List
&lt;/h4&gt;

&lt;p&gt;Each node contains data and two pointers/references: one points to the next node, and the other points to the previous node. This is bidirectional connectivity which allows traversal in both forward and backward directions.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Circular Linked List
&lt;/h4&gt;

&lt;p&gt;The last node's pointer points back to the head node instead of NULL, creating a circular structure. This means the traversal can start from any node and loop back to the beginning. &lt;/p&gt;

&lt;h4&gt;
  
  
  4. Doubly Circular Linked List
&lt;/h4&gt;

&lt;p&gt;This combines the features of doubly linked and circular lists. The nodes point to both the next and previous in a circular fashion. &lt;br&gt;
They offer maximum flexibility for traversal and operations in both directions.  &lt;/p&gt;

&lt;h2&gt;
  
  
  How To Use Linked Lists in C
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Define the node structure, which holds the data and the pointer&lt;/li&gt;
&lt;li&gt;Create a header pointer, which points to the first node in the list&lt;/li&gt;
&lt;li&gt;Add/remove nodes by allocating memory for new nodes and adjusting pointers to link them in and out&lt;/li&gt;
&lt;li&gt;Traverse the list by following the pointers from node to node to access data. &lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>c</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>3 Basic Steps of Executing Function Pointers in C</title>
      <dc:creator>Rita Kairu</dc:creator>
      <pubDate>Wed, 31 Jan 2024 06:19:57 +0000</pubDate>
      <link>https://dev.to/thecodingcivilengineer/function-pointers-in-c-32e9</link>
      <guid>https://dev.to/thecodingcivilengineer/function-pointers-in-c-32e9</guid>
      <description>&lt;h2&gt;
  
  
  What Are Function Pointers?
&lt;/h2&gt;

&lt;p&gt;Function pointers point to functions instead of data such as variables. They are variables that store the address of a function rather than a value. &lt;br&gt;
In C, function pointers are used to achieve functionality such as callbacks, dynamic function invocation, and implementing function tables. &lt;br&gt;
Below is a 3-step process of how function pointers are executed in a c program&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Declaration
&lt;/h2&gt;

&lt;p&gt;Function pointers are declared like any other pointer but with the function's return type and parameters specified.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;returnType (*pointerName)(parameters);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Assigning Addresses
&lt;/h2&gt;

&lt;p&gt;Function pointers are assigned the address of a function using the function's name.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;returnType functionName(parameters)
{
// function body
}

pointerName = &amp;amp;functionName 
// or pointerName = functionName
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Calling the Function via Pointer
&lt;/h2&gt;

&lt;p&gt;You can call the functioon using the function pointer like you would with the function itself.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(*pointerName)(arguments);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What Do Function Pointers Hold?
&lt;/h2&gt;

&lt;p&gt;Function pointers hold the memory address of a function. They store the address from which the function code's starts in memory. This address points to the entry point of the function's machine code instructions. &lt;/p&gt;

&lt;h2&gt;
  
  
  Where Function Pointers Point in Memory
&lt;/h2&gt;

&lt;p&gt;Function pointers point to the address in virtual memory where the machine code of the function is loaded during program execution. This address typically resides in the code segment of the program's memory layout.&lt;br&gt;
When you use a function pointer, the processor fetches the machine instructions starting from the memory address stored in the function pointer and executes them accordingly. &lt;br&gt;
Below is a simple example demonstrating how function pointers are executed:&lt;br&gt;
&lt;/p&gt;

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

// Function prototypes
void hello() {
    printf("Hello, ");
}

void world() {
    printf("world!\n");
}

int main() {
    // Declare function pointer
    void (*ptr)();

    // Assign addresses of functions to the pointer
    ptr = &amp;amp;hello;
    // Call hello() function through the pointer
    (*ptr)();

    ptr = &amp;amp;world;
    // Call world() function through the pointer
    (*ptr)();

    return 0;
}

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

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hello, world!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the example above, &lt;code&gt;ptr&lt;/code&gt; is a function pointer that points to different functions (&lt;code&gt;hello&lt;/code&gt; and &lt;code&gt;world&lt;/code&gt;).&lt;br&gt;
Depending on the assignment, it calls the appropriate function. &lt;/p&gt;

</description>
      <category>beginners</category>
      <category>ubuntu</category>
      <category>code</category>
      <category>c</category>
    </item>
    <item>
      <title>Merging Your Git Branch to Main: A Simple Step-by-step Guide</title>
      <dc:creator>Rita Kairu</dc:creator>
      <pubDate>Mon, 27 Nov 2023 10:48:29 +0000</pubDate>
      <link>https://dev.to/thecodingcivilengineer/merging-your-git-branch-to-main-a-simple-step-by-step-guide-1i2e</link>
      <guid>https://dev.to/thecodingcivilengineer/merging-your-git-branch-to-main-a-simple-step-by-step-guide-1i2e</guid>
      <description>&lt;p&gt;I'll go straight to the point!&lt;/p&gt;

&lt;p&gt;To merge a branch into the main branch in Git, simply follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Checkout Main Branch:&lt;/strong&gt;
First, make sure you are on the main branch typing the following command:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git checkout main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pull Latest Changes:&lt;/strong&gt;
It's a good practice to ensure your main branch is up-to-date with the remote repository before merging any changes. Use:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git pull origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Merge Branch:&lt;/strong&gt;
Now, you can merge the feature (or any other) branch into the main branch:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git merge &amp;lt;branch-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;&amp;lt;branch-name&amp;gt;&lt;/code&gt; with the name of the branch you want to merge into the main branch.&lt;/p&gt;

&lt;p&gt;If there are no conflicts, Git will automatically perform the merge. If there are conflicts, Git will pause the merge and let you resolve the conflicts manually.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Resolve Conflicts (if any):&lt;/strong&gt;
If there are conflicts, Git will mark the conflicted files. Open those files, and Git will show you the conflicting sections. Manually resolve the conflicts, save the files, and then continue the merge:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git add &amp;lt;conflicted-file1&amp;gt; &amp;lt;conflicted-file2&amp;gt;  &lt;span class="c"&gt;# Add resolved files&lt;/span&gt;
   git merge &lt;span class="nt"&gt;--continue&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Commit the Merge:&lt;/strong&gt;
After resolving conflicts (or if there were none), you need to commit the changes:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Merge branch-name into main"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Push Changes:&lt;/strong&gt;
Finally, push the changes to the remote repository:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git push origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it! You've successfully merged the changes from your branch into the main branch.&lt;/p&gt;

&lt;p&gt;P.S. It's good practice to merge branches with a clean working directory. So consider committing or stashing any local changes before starting the merge process.&lt;/p&gt;

</description>
      <category>git</category>
      <category>programming</category>
    </item>
    <item>
      <title>The The Difference Between &lt;script&gt;&lt;/script&gt; And &lt;script src=""&gt;&lt;/script&gt; in HTML</title>
      <dc:creator>Rita Kairu</dc:creator>
      <pubDate>Sat, 20 May 2023 08:16:20 +0000</pubDate>
      <link>https://dev.to/thecodingcivilengineer/the-the-difference-between-and-in-html-3npp</link>
      <guid>https://dev.to/thecodingcivilengineer/the-the-difference-between-and-in-html-3npp</guid>
      <description>&lt;p&gt;In HTML, the &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; element is used to include client-side JavaScript code in a web page. The way you include the script can affect when and how the script is executed, which can have implications for the page's behavior and performance. Let's compare the two methods mentioned:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; element
&lt;/h2&gt;

&lt;p&gt;When you use the &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; element with a &lt;code&gt;src&lt;/code&gt; attribute, it allows you to reference an external JavaScript file and include it in your HTML document. The syntax for this is as follows:&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;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"path/to/your/script.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this method, the browser will make a separate request to fetch the external script file from the provided path. Once the script is downloaded and executed, it can manipulate the page's DOM, handle events, and perform other actions as needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Benefits:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Separation of concerns: You can keep your JavaScript code in separate files, making it easier to manage and maintain.&lt;/li&gt;
&lt;li&gt;Caching: Browsers can cache external script files, which means that if multiple pages use the same script, it will be fetched only once, improving loading times for subsequent pages.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Inline &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;You can also include JavaScript directly within your HTML file using the inline &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; element without the &lt;code&gt;src&lt;/code&gt; attribute. Here's an example:&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;script&amp;gt;&lt;/span&gt;
  &lt;span class="c1"&gt;// Your JavaScript code goes here&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With inline scripts, the JavaScript code is executed when the browser encounters it during parsing. This means that the script will be executed immediately, potentially before the whole page is loaded.&lt;/p&gt;

&lt;h3&gt;
  
  
  Benefits:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Simplicity: For small scripts, you may choose to include the code directly in the HTML to keep things simple.&lt;/li&gt;
&lt;li&gt;Access to HTML elements: Since the script is part of the HTML file, it can easily access and manipulate DOM elements defined earlier in the page.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Differences:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Location&lt;/strong&gt;: The primary difference is that &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; with a &lt;code&gt;src&lt;/code&gt; attribute references an external file, while an inline &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; contains the JavaScript code directly within the HTML file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Timing&lt;/strong&gt;: External scripts are loaded asynchronously, which means that the browser can continue parsing and rendering the page while the script is being fetched. On the other hand, inline scripts are executed synchronously, potentially delaying the page rendering until the script is fully executed.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In general, it's recommended to use the &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; with the &lt;code&gt;src&lt;/code&gt; attribute for most scenarios. This promotes code reusability, maintainability, and better performance due to browser caching. However, inline scripts might still be useful for small, isolated snippets of code or situations where dynamic content requires immediate execution.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>html</category>
    </item>
    <item>
      <title>Can CSS target elements in a "body" that's not highlighted in HTML?</title>
      <dc:creator>Rita Kairu</dc:creator>
      <pubDate>Fri, 20 Jan 2023 09:30:18 +0000</pubDate>
      <link>https://dev.to/thecodingcivilengineer/can-css-target-elements-in-a-body-thats-not-highlighted-in-html-4c5d</link>
      <guid>https://dev.to/thecodingcivilengineer/can-css-target-elements-in-a-body-thats-not-highlighted-in-html-4c5d</guid>
      <description>&lt;p&gt;Yes, CSS can target elements in a "body" that's not highlighted in HTML.&lt;/p&gt;

&lt;p&gt;CSS selectors allow you to select elements based on various criteria such as their element type, class, ID, or attribute. You can use these selectors to target elements regardless of whether they are highlighted in the HTML or not.&lt;/p&gt;

&lt;p&gt;For example, you can use CSS selectors such as body &lt;code&gt;p&lt;/code&gt; to select all &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; elements within the &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; element, or &lt;code&gt;.my-class&lt;/code&gt; to select all elements with the class "my-class" regardless of their element type. &lt;/p&gt;

&lt;p&gt;You can also use attribute selectors to target elements based on their attributes, such as &lt;code&gt;[data-attribute=value]&lt;/code&gt; to select elements with a specific attribute and value.&lt;/p&gt;

&lt;p&gt;You can also use CSS pseudo-selectors such as &lt;code&gt;:first-child&lt;/code&gt; or &lt;code&gt;:last-child&lt;/code&gt; to target specific elements within a container, regardless of their type or class.&lt;/p&gt;

&lt;p&gt;In summary, CSS provides a wide range of selectors and pseudo-selectors that allow you to target elements based on various criteria, regardless of whether they are highlighted in the HTML or not.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The C Language in a nutshell...</title>
      <dc:creator>Rita Kairu</dc:creator>
      <pubDate>Fri, 20 Jan 2023 09:13:49 +0000</pubDate>
      <link>https://dev.to/thecodingcivilengineer/the-c-language-in-a-nutshell-3j66</link>
      <guid>https://dev.to/thecodingcivilengineer/the-c-language-in-a-nutshell-3j66</guid>
      <description>&lt;h2&gt;
  
  
  Intro...
&lt;/h2&gt;

&lt;p&gt;C is a general-purpose, high-level programming language that was first developed in the early 1970s. It is considered to be one of the most widely used and versatile programming languages in the world. Here are some of the basics of the C programming language:&lt;/p&gt;

&lt;h2&gt;
  
  
  Syntax
&lt;/h2&gt;

&lt;p&gt;C has a simple and straightforward syntax that is easy to learn and understand. It uses a combination of keywords, variables, and operators to create statements that are executed by the computer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Types
&lt;/h2&gt;

&lt;p&gt;C supports a variety of data types including integers, floating-point numbers, characters, and strings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Variables
&lt;/h2&gt;

&lt;p&gt;Variables are used to store data in C. They are declared with a specific data type and can be used to store values, expressions, or even the results of calculations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Operators
&lt;/h2&gt;

&lt;p&gt;C supports a variety of operators such as mathematical operators (e.g. +, -, *, /), comparison operators (e.g. ==, !=, &amp;gt;, &amp;lt;), and logical operators (e.g. &amp;amp;&amp;amp;, ||, !).&lt;/p&gt;

&lt;h2&gt;
  
  
  Control Flow
&lt;/h2&gt;

&lt;p&gt;C uses control flow statements such as if, else, for, while, and do-while loops to control the flow of execution in a program.&lt;/p&gt;

&lt;h2&gt;
  
  
  Functions
&lt;/h2&gt;

&lt;p&gt;Functions are used to divide a program into smaller, more manageable pieces. Functions can be defined and called by the main program or by other functions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pointers
&lt;/h2&gt;

&lt;p&gt;C uses pointers to manipulate memory directly, they are variables that store the memory addresses of other variables.&lt;/p&gt;

&lt;h2&gt;
  
  
  Input/Output
&lt;/h2&gt;

&lt;p&gt;C uses a variety of functions such as scanf() and printf() to handle input and output operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Libraries
&lt;/h2&gt;

&lt;p&gt;C has a large number of standard libraries that provide a wide range of functions for tasks such as mathematical calculations, string manipulation, and input/output operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compilation
&lt;/h2&gt;

&lt;p&gt;Programs written in C need to be compiled before they can be executed by the computer. The process of compilation converts the source code into machine-readable code.&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>discuss</category>
      <category>productivity</category>
      <category>featurerequest</category>
    </item>
    <item>
      <title>The difference between &lt;b&gt;&lt;/b&gt; and &lt;span&gt;&lt;/span&gt;</title>
      <dc:creator>Rita Kairu</dc:creator>
      <pubDate>Sat, 01 Oct 2022 10:23:30 +0000</pubDate>
      <link>https://dev.to/thecodingcivilengineer/the-difference-between-and-i1f</link>
      <guid>https://dev.to/thecodingcivilengineer/the-difference-between-and-i1f</guid>
      <description>&lt;p&gt;The answer is simple...&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;&lt;/code&gt;incorporates the &lt;strong&gt;bold text&lt;/strong&gt; property while &lt;code&gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;doesn't☺&lt;/p&gt;

&lt;p&gt;or...&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;&amp;lt;b&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; tags are both HTML tags used to format text on a web page, but they have different purposes.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;&amp;lt;b&amp;gt;&lt;/code&gt; tag is used to make text bold, which means that it will be displayed in a thicker font weight than the surrounding text. This tag is used to highlight important information, such as keywords in a sentence, or to make text stand out.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; tag, on the other hand, is a generic container for inline elements. It is used to group elements together and apply styles to them. It doesn't have any default rendering and it's used mostly in conjunction with CSS selectors. It's used to format text in a specific way, for example, change the color, font, size, or add a background color. It can be used to change the appearance of text, but it doesn't change the font weight.&lt;/p&gt;

&lt;p&gt;In summary, &lt;code&gt;&amp;lt;b&amp;gt;&lt;/code&gt; tag is used to make text bold, while the &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; tag is used to group elements together and apply styles to them.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
