<?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: Oluwole Owoeye</title>
    <description>The latest articles on DEV Community by Oluwole Owoeye (@wolecharles).</description>
    <link>https://dev.to/wolecharles</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%2F1711706%2F59bf0dd0-ce31-4f19-9e4e-3ec0c68e8c42.png</url>
      <title>DEV Community: Oluwole Owoeye</title>
      <link>https://dev.to/wolecharles</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wolecharles"/>
    <language>en</language>
    <item>
      <title>Building Your Own Cloud: A Linux VPC Simulator with vpcctl</title>
      <dc:creator>Oluwole Owoeye</dc:creator>
      <pubDate>Thu, 13 Nov 2025 09:37:14 +0000</pubDate>
      <link>https://dev.to/wolecharles/building-your-own-cloud-a-linux-vpc-simulator-with-vpcctl-85n</link>
      <guid>https://dev.to/wolecharles/building-your-own-cloud-a-linux-vpc-simulator-with-vpcctl-85n</guid>
      <description>&lt;p&gt;Have you ever wondered how cloud providers like AWS or Azure create isolated, secure networks? This project, built entirely on native Linux kernel tools (like ip, brctl, and iptables), demonstrates a fully functional Virtual Private Cloud (VPC) environment on a single host. We built a custom command-line interface, vpcctl, to manage it all.&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Overview &amp;amp; Architecture
&lt;/h2&gt;

&lt;p&gt;The goal of this project was to replicate a cloud VPC's complex routing and security features without using any third-party virtualization software. The core of the architecture relies on three kernel primitives:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Component,Linux Implementation,Function
VPC (The Network),"Linux Bridge (vpc0, vpc1)","Acts as the central VPC Router, connecting all subnets."
Subnets,"Network Namespaces (web_ns, db_ns)",Provides complete network isolation for each subnet's hosts.
Connecting Cable,VETH Pairs (Virtual Ethernet),Links each Subnet (namespace) to the central VPC Router (bridge).
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Security by Design: Security Groups &amp;amp; Isolation
&lt;/h2&gt;

&lt;p&gt;Security is enforced at multiple levels to ensure the network is robust:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deny by Default: Every subnet's firewall is initialized to DROP all traffic (iptables -P INPUT DROP), ensuring no unauthorized communication is possible.&lt;/li&gt;
&lt;li&gt;Controlled Access: The JSON-based Security Policy (parsed by jq) explicitly defines which ports and protocols are allowed. For example, your db_ns only permits MySQL traffic (port 3306) from the authorized web subnet.&lt;/li&gt;
&lt;li&gt;VPC Isolation: By default, two VPCs (vpc0 and vpc1) are completely isolated, enforcing the separation required for enterprise environments.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  CLI Usage Examples (vpcctl)
&lt;/h2&gt;

&lt;p&gt;The custom vpcctl.sh script automates the entire process. Here are the most critical commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Command Description Example
Create VPC  Creates a new VPC (Bridge), sets the router IP, and initializes the secure DROP policy. sudo ./vpcctl.sh create vpc vpc1 10.10.0.1/16 10.10.0.0/16
Add Subnet  Creates a namespace, links it to the VPC, and applies the JSON firewall policy. sudo ./vpcctl.sh add subnet web_ns 10.0.1.0/24 public vpc0
Peering Creates the VETH link, static routes, and host firewall rules required for controlled cross-VPC traffic.    sudo ./vpcctl.sh peer vpcs vpc0 10.0.0.0/16 vpc1 10.10.0.0/16
Enable NAT  Configures the host's iptables to provide Internet access via Masquerade.   sudo ./vpcctl.sh enable nat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Testing and Validation Steps
&lt;/h2&gt;

&lt;p&gt;Validation proves the system works and obeys the security rules.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Test    Command Expected Result Requirement Verified
1. Subnet Routing   sudo ./vpcctl.sh test subnet_to_subnet web_ns db_ns SUCCESS (0% Loss)   Subnets within a VPC can communicate.
2. Firewall Enforcement sudo ip netns exec web_ns nc -zv 10.0.2.1 80 -w 2   FAILURE (Connection Refused)    Firewall rules block unauthorized traffic (Port 80 is denied by policy).
3. VPC Isolation    sudo ip netns exec web_ns ping -c 1 10.10.1.1   FAILURE (100% Loss) VPCs are fully isolated by default.
4. Final Peering    Requires adding iptables -I FORWARD 1... after peering. SUCCESS (0% Loss)   Controlled cross-VPC communication works after security exception.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Clean Up: Deleting All Resources
&lt;/h2&gt;

&lt;p&gt;To ensure the host machine remains clean, the final step is to run the idempotent teardown command. This reliably removes all namespaces, bridges, custom VETH links, and firewall rules created during the project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Deletes all VPCs, subnets, and restores host firewall settings
sudo ./vpcctl.sh clean
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>linux</category>
      <category>devops</category>
      <category>networking</category>
      <category>bash</category>
    </item>
    <item>
      <title>My HNG12 Task -Stage 0</title>
      <dc:creator>Oluwole Owoeye</dc:creator>
      <pubDate>Wed, 29 Jan 2025 13:34:18 +0000</pubDate>
      <link>https://dev.to/wolecharles/my-hng12-task-stage-0-58en</link>
      <guid>https://dev.to/wolecharles/my-hng12-task-stage-0-58en</guid>
      <description>&lt;p&gt;This task contains installing and configuring nginx webserver, also, customizing the index.html page with the message "Welcome to DevOps Stage 0 - Oluwole Owoeye/wolecharles".&lt;/p&gt;

&lt;p&gt;Actions taken to complete this task includes the following;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create an ubuntu instance using AWS &lt;/li&gt;
&lt;li&gt;launch and connect the instance &lt;/li&gt;
&lt;li&gt;enter these commands&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;sudo apt-get update - to get patches up to date on ubuntu&lt;br&gt;
sudo apt-get install nginx  - to install nginx webserver&lt;br&gt;
nginx -v - to confirm nginx is installed&lt;br&gt;
sudo systemctl status nginx - to ensure nginx is ruunning&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;go to ip address of the server and confirm that nginx defult web page is shown&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;enter this command - cd /var/www/html will navigate to html&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;edit the index.html to your details &lt;br&gt;
"Welcome to DevOps Stage 0 - yourname/slackusername"&lt;br&gt;
use vi index.html to edit&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;quit and save&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;go to ip address of the server and confirm that customize web page is showing the details "Welcome to DevOps Stage 0 - yourname/slackusername"&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lesson learned;&lt;br&gt;
I have learnt how to install and configure an nginx webserver using AWS ,also, customize html webpage .&lt;/p&gt;

&lt;p&gt;AWS Solutions Architects &lt;a href="https://hng.tech/hire/aws-solutions-architects" rel="noopener noreferrer"&gt;https://hng.tech/hire/aws-solutions-architects&lt;/a&gt;&lt;br&gt;
DevOps Engineers &lt;a href="https://hng.tech/hire/devops-engineers" rel="noopener noreferrer"&gt;https://hng.tech/hire/devops-engineers&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Linux User Creation Bash Script</title>
      <dc:creator>Oluwole Owoeye</dc:creator>
      <pubDate>Wed, 03 Jul 2024 17:21:01 +0000</pubDate>
      <link>https://dev.to/wolecharles/linux-user-creation-bash-script-25n9</link>
      <guid>https://dev.to/wolecharles/linux-user-creation-bash-script-25n9</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;We can use a Bash script to automate the creation of users and groups, set up home directories, generate random passwords, and log all actions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Script Overview
&lt;/h2&gt;

&lt;p&gt;The script we're going to discuss performs the following functions:&lt;/p&gt;

&lt;p&gt;Create Users and Groups: Reads a file containing usernames and group names, creates the users and groups if they do not exist, and assigns users to the specified groups.&lt;/p&gt;

&lt;p&gt;Setup Home Directories: Sets up home directories with appropriate permissions and ownership for each user.&lt;/p&gt;

&lt;p&gt;Generate Random Passwords: Generates random passwords for the users and stores them securely.&lt;/p&gt;

&lt;p&gt;Log Actions: Logs all actions to /var/log/user_management.log for auditing and troubleshooting.&lt;/p&gt;

&lt;p&gt;Store Passwords Securely: Stores the generated passwords in /var/secure/user_passwords.csv with restricted access.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Script
&lt;/h2&gt;

&lt;p&gt;Here is the complete Bash script:&lt;br&gt;
&lt;/p&gt;

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

LOG_FILE="/var/log/user_management.log"
PASSWORD_FILE="/var/secure/user_passwords.csv"

# Ensure /var/secure exists and has the correct permissions
mkdir -p /var/secure
chmod 700 /var/secure
touch "$PASSWORD_FILE"
chmod 600 "$PASSWORD_FILE"

# Function to log messages
log_message() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}

# Function to generate random passwords
generate_password() {
    local password_length=12
    tr -dc A-Za-z0-9 &amp;lt;/dev/urandom | head -c $password_length
}

# Function to add users, groups and set up home directories
setup_user() {
    local username=$1
    local groups=$2

    # Create the user
    # &amp;amp;&amp;gt;/dev/null
    if ! id -u "$username" &amp;amp;&amp;gt;/dev/null; then
        password=$(generate_password)
        useradd -m -s /bin/bash "$username"
        echo "$username:$password" | chpasswd
        log_message "User $username created."

        # Store the username and password
        echo "$username,$password" &amp;gt;&amp;gt; "$PASSWORD_FILE"
        log_message "Password for $username stored."
    else
        log_message "User $username already exists."
    fi

    # Create groups and add user to groups
    IFS=',' read -ra group_array &amp;lt;&amp;lt;&amp;lt; "$groups"
    for group in "${group_array[@]}"; do
        if ! getent group "$group" &amp;amp;&amp;gt;/dev/null; then
            groupadd "$group"
            log_message "Group $group created."
        fi
        usermod -aG "$group" "$username"
        log_message "Added $username to $group."
    done
    # Set up the home directory
    local home_dir="/home/$username"
    chown "$username":"$username" "$home_dir"
    chmod 700 "$home_dir"
    log_message "Home directory for $username set up with appropriate permissions."
}

# Main script
if [ $# -eq 0 ]; then
    log_message "Usage: $0 &amp;lt;input_file&amp;gt;"
    exit 1
fi

input_file=$1
log_message "Starting user management script."

# Read the input file and process each line
while IFS=';' read -r username groups; do
    setup_user "$username" "$groups"
done &amp;lt; "$input_file"

log_message "User management script completed."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Logging and Password File Setup
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The script ensures that the /var/secure directory exists and has the appropriate permissions.&lt;/li&gt;
&lt;li&gt;It creates the password file /var/secure/user_passwords.csv and ensures only the owner can read it.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /var/secure
&lt;span class="nb"&gt;chmod &lt;/span&gt;700 /var/secure
&lt;span class="nb"&gt;touch&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PASSWORD_FILE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;chmod &lt;/span&gt;600 &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PASSWORD_FILE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Message_Log
&lt;/h3&gt;

&lt;p&gt;The log_message function logs messages to /var/log/user_management.log with a timestamp.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;log_message&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; &lt;span class="s1"&gt;'+%Y-%m-%d %H:%M:%S'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; - &lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; | &lt;span class="nb"&gt;tee&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$LOG_FILE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  password function
&lt;/h3&gt;

&lt;p&gt;The generate_password function generates a random password of a specified length (12 characters in this case).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;generate_password&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;password_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;12
    &lt;span class="nb"&gt;tr&lt;/span&gt; &lt;span class="nt"&gt;-dc&lt;/span&gt; A-Za-z0-9 &amp;lt;/dev/urandom | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="nv"&gt;$password_length&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  User Setup Function
&lt;/h3&gt;

&lt;p&gt;The setup_user function creates users, adds them to groups, sets up home directories with appropriate permissions, and logs each action. It also generates and stores passwords securely.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;setup_user&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;username&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;
    &lt;span class="nb"&gt;local groups&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$2&lt;/span&gt;

    &lt;span class="c"&gt;# Create the user&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nb"&gt;id&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$username&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &amp;amp;&amp;gt;/dev/null&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
        &lt;/span&gt;&lt;span class="nv"&gt;password&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;generate_password&lt;span class="si"&gt;)&lt;/span&gt;
        useradd &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; /bin/bash &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$username&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;"&lt;/span&gt;&lt;span class="nv"&gt;$username&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;$password&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; | chpasswd
        log_message &lt;span class="s2"&gt;"User &lt;/span&gt;&lt;span class="nv"&gt;$username&lt;/span&gt;&lt;span class="s2"&gt; created."&lt;/span&gt;

        &lt;span class="c"&gt;# Store the username and password&lt;/span&gt;
        &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$username&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$password&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PASSWORD_FILE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
        log_message &lt;span class="s2"&gt;"Password for &lt;/span&gt;&lt;span class="nv"&gt;$username&lt;/span&gt;&lt;span class="s2"&gt; stored."&lt;/span&gt;
    &lt;span class="k"&gt;else
        &lt;/span&gt;log_message &lt;span class="s2"&gt;"User &lt;/span&gt;&lt;span class="nv"&gt;$username&lt;/span&gt;&lt;span class="s2"&gt; already exists."&lt;/span&gt;
    &lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Main Script
&lt;/h3&gt;

&lt;p&gt;The main part of the script takes an input file as an argument, reads it line by line, and processes each line to create users and groups, set up home directories, and log actions.&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="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;$# &lt;/span&gt;&lt;span class="nt"&gt;-eq&lt;/span&gt; 0 &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;log_message &lt;span class="s2"&gt;"Usage: &lt;/span&gt;&lt;span class="nv"&gt;$0&lt;/span&gt;&lt;span class="s2"&gt; &amp;lt;input_file&amp;gt;"&lt;/span&gt;
    &lt;span class="nb"&gt;exit &lt;/span&gt;1
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  This makes sure you run the script with an input_file, i.e input.txt
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    &lt;span class="nv"&gt;input_file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;
    log_message &lt;span class="s2"&gt;"Starting user management script."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Usage
&lt;/h3&gt;

&lt;p&gt;To use this script, save it to a file (e.g., user_management.sh), make it executable, and run it as a root user with the path to your input file as an argument:&lt;/p&gt;

&lt;p&gt;input.txt&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    user1&lt;span class="p"&gt;;&lt;/span&gt;group1,group2
    user2&lt;span class="p"&gt;;&lt;/span&gt;group3,group4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;on the Command Line(CMD) | Terminal&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    &lt;span class="nb"&gt;chmod&lt;/span&gt; +x user_management.sh
    ./create_users.sh input.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Talents&lt;br&gt;&lt;br&gt;
&lt;a href="https://hng.tech/internship"&gt;HNG Internship&lt;/a&gt; &lt;br&gt;
&lt;a href="https://hng.tech/premium"&gt;HNG Tech Premium&lt;/a&gt;&lt;/p&gt;

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