<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[calebcodes]]></title><description><![CDATA[calebcodes]]></description><link>https://blog.calebcodes.tech</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Apr 2026 19:21:56 GMT</lastBuildDate><atom:link href="https://blog.calebcodes.tech/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Power Supply and Distribution in Call Centers]]></title><description><![CDATA[In this guide, I’ll walk you through the essentials of how power systems in critical service areas, like call centers, manage outages to keep operations running smoothly. No need to worry! Whether you're new to power infrastructure or simply curious,...]]></description><link>https://blog.calebcodes.tech/power-supply-and-distribution-in-call-centers</link><guid isPermaLink="true">https://blog.calebcodes.tech/power-supply-and-distribution-in-call-centers</guid><category><![CDATA[IT Support]]></category><category><![CDATA[#Power systems maintenance]]></category><category><![CDATA[Data Center]]></category><category><![CDATA[IT Operations]]></category><category><![CDATA[IT]]></category><category><![CDATA[Technical writing ]]></category><dc:creator><![CDATA[Caleb Nyachwaya]]></dc:creator><pubDate>Fri, 07 Jun 2024 21:00:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1728144704493/4ad6f93e-e5f3-42e8-b3e4-ed88fbfbeb26.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In this guide, I’ll walk you through the essentials of how power systems in critical service areas, like call centers, manage outages to keep operations running smoothly. No need to worry! Whether you're new to power infrastructure or simply curious, by the end, it will all make sense.</p>
<p>Picture this: the call center is buzzing with activity, agents are focused, and suddenly, the power goes out. While the agents might secretly cheer for a mini-break, the tech team is scrambling to keep things running smoothly. But with a reliable power setup, the operation continues without a hitch.</p>
<p>Here’s a breakdown of the key components of this power setup and how they work together to keep everything running when the main power fails.</p>
<h3 id="heading-power-setup-components">Power Setup Components</h3>
<ol>
<li><p><strong>National Grid Power:</strong> The main power source that keeps your call center running under normal conditions.</p>
</li>
<li><p><strong>Backup Generator:</strong> The generator provides power when the national grid fails.</p>
</li>
<li><p><strong>Uninterruptible Power Supply (UPS):</strong> Think of this as a safety net. This system jumps in when the power flickers or goes out, ensuring your call center equipment doesn’t shut down.</p>
</li>
<li><p><strong>Automatic Transfer Switch (ATS):</strong> The ATS is a smart switch that smoothly shifts power between the national grid and the backup generator, making sure that the UPS always gets power from a steady source.</p>
</li>
</ol>
<p>The ATS is strategically placed between the power sources (national grid and backup generator) and the UPS.</p>
<ul>
<li><p>Grid Power Input: The ATS receives power from the national grid as the primary power source.</p>
</li>
<li><p>Generator Power Input: The ATS also has an input connected to the backup generator as the secondary power source.</p>
</li>
<li><p>UPS Connection: The output of the ATS is connected to the UPS. The UPS then feeds the power to the call center equipment.</p>
</li>
</ul>
<p>Now that we’ve covered the layout, let’s look at how these components work together during different scenarios and transitions.</p>
<h3 id="heading-the-power-flow-during-outages">The Power Flow During Outages</h3>
<p><strong>Normal Operation</strong></p>
<p>Under normal circumstances, the call center operates using the power provided by the national grid. The UPS stays on standby, ready to intervene if needed. Meanwhile, the backup generator remains off, only coming into action during an outage.</p>
<p><strong>Power Outage</strong></p>
<p>Once the grid power fails, the UPS immediately steps in with batter power, providing temporary power to keep everything running. This seamless transition prevents downtime or any interruption to call center operations.</p>
<p>The ATS then signals the backup generator to start. Once the generator is running and producing stable power, the ATS switches the power from the UPS battery to the generator.</p>
<p>With the generator now providing power, the UPS starts recharging its batteries.</p>
<p><strong>Power Restored</strong></p>
<p>When the national grid power returns, the ATS takes a moment to ensure the grid power is stable before switching from generator power to grid power.</p>
<p>The generator enters a cool-down phase where it continues to run without load for a short period before shutting down.</p>
<p>The UPS returns to standby mode.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1728129355773/5c1e86f0-5d41-4522-ad30-80684d586e90.png" alt class="image--center mx-auto" /></p>
<p><strong>The Power Transition in Sle Steps:</strong></p>
<p>Grid goes down → UPS steps in → ATS signals the generator.</p>
<p>Generator powers up → ATS switches to generator → UPS recharges.</p>
<p>Grid comes back → ATS switches back to grid → Generator powers down → UPS returns to standby mode.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Tips</div>
</div>

<ul>
<li><p><strong>UPS Battery Capacity:</strong> Make sure the UPS has sufficient battery capacity to keep the call center running for the time it takes the generator to start.</p>
</li>
<li><p><strong>Regular Maintenance:</strong> Regularly check and service your UPS, ATS, and backup generator to make sure they’re in good working order. Test them occasionally to confirm they switch power sources smoothly.</p>
</li>
<li><p><strong>Backup Generator Fuel:</strong> Ensure your backup generator has enough fuel to last through a power outage. Regularly check fuel levels and keep a plan for refueling if needed.</p>
</li>
</ul>
<p>And there you have it! With these systems and tips in place, your call center will stay powered through anything life throws at it.</p>
]]></content:encoded></item><item><title><![CDATA[Data Center Setup: My Experience]]></title><description><![CDATA[It's been a while since I last graced these digital pages. But today, I’m putting on my writing glasses (yes, they exist) to share some insights about setting up a data center. You might be thinking, "In this age of cloud computing, who's still build...]]></description><link>https://blog.calebcodes.tech/data-center-setup-my-experience</link><guid isPermaLink="true">https://blog.calebcodes.tech/data-center-setup-my-experience</guid><category><![CDATA[IT Support]]></category><category><![CDATA[Alx]]></category><category><![CDATA[ip address]]></category><category><![CDATA[Data Center]]></category><category><![CDATA[servers]]></category><category><![CDATA[IT]]></category><category><![CDATA[IT Operations]]></category><category><![CDATA[IPv4]]></category><category><![CDATA[Technical writing ]]></category><dc:creator><![CDATA[Caleb Nyachwaya]]></dc:creator><pubDate>Fri, 24 May 2024 21:00:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1724604146257/91a8a442-86ff-4f4b-a6bf-a402a7648ba1.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It's been a while since I last graced these digital pages. But today, I’m putting on my writing glasses (yes, they exist) to share some insights about setting up a data center. You might be thinking, "In this age of cloud computing, who's still building data centers?" Well, apparently, I am. I’ve been overseeing the setup of a data center for a call center that hosts 500 agents.</p>
<p>Before we dive in, I want to clarify something: I may not have the credentials to advise on best practices for data center setup, as this was my first project. However, I’ve picked up some useful nuggets along the way, and I’m here to pass them on.</p>
<p>So, what’s a data center, anyway? It’s is a facility that houses servers and other critical IT infrastructure. With cloud technology on the rise, many companies are shrinking their data centers down to just a few key devices like ISP routers and switches. Frankly, writing about traditional data center setups in a cloud-first world might seem outdated, but I love the process of documenting my IT adventures, so here we are. A big shoutout to my amazing colleagues, who were instrumental in this project.</p>
<p><strong>Key Areas to Consider in Data Center Design:</strong></p>
<p>When designing a data center, your focus should be on optimizing performance, ensuring security, and allowing for scalability. You’ll want to address three primary areas:</p>
<ol>
<li><p>Devices and Cable Management</p>
</li>
<li><p>Safety Measures</p>
</li>
<li><p>Power Supply and Distribution</p>
</li>
</ol>
<h3 id="heading-devices-and-cable-management">Devices and Cable Management</h3>
<p>Let’s talk about the backbone of any data center: devices and cable management. Understanding these key components is crucial for keeping your setup organized.</p>
<p><strong>Components</strong></p>
<ul>
<li><p>Rack: A vertical structure that holds and organizes devices such as servers, routers, and switches.</p>
</li>
<li><p>Cabinet: A large enclosure housing racks and critical infrastructure.</p>
</li>
<li><p>Power Distribution Unit (PDU): Distributes electrical power to the devices within the data center.</p>
</li>
<li><p>Patch Panel: This flat panel with multiple ports connects various devices while keeping everything neat and organized. Proper labeling is essential for easier troubleshooting and maintenance in the future.</p>
</li>
<li><p>Brush Panel: A metallic panel with bristle-like features that allow cables to pass through while maintaining a neat appearance.</p>
</li>
<li><p>Rack Shelf: Flat surface designed to hold non-rack-mountable devices, making it ideal for carrying equipment with unusual sizes.</p>
</li>
<li><p>Mounting Rails: Vertical metallic rails inside the cabinet where devices like servers and switches are securely mounted.</p>
</li>
<li><p>Blanking Panels: These panels fill unused spaces in the rack, helping to direct airflow and improve cooling efficiency.</p>
</li>
<li><p>Side Panels: Removable panels on the side of the cabinet that give you access to your equipment and add some extra sturdiness to your cabinet.</p>
</li>
</ul>
<p><strong>Cable Management</strong></p>
<ul>
<li><p><strong>Cable Ladder/Runway:</strong> Overhead or underfloor structures used to route and support large bundles of cables within the data center.</p>
</li>
<li><p><strong>Raised Floor:</strong> Consider a raised floor to facilitate underfloor cable management and air distribution, helping to organize power and network cables and improve airflow.</p>
</li>
</ul>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text"><strong>Extra Tips</strong></div>
</div>

<ul>
<li><p>Use different colors for your cables. This will make your life easier when it comes to identification and maintenance.</p>
</li>
<li><p>For the love of neatness, use rack panels to route cables between racks. It keeps things tidy and avoids unnecessary cable crossing.</p>
</li>
</ul>
<h3 id="heading-safety-measures"><strong>Safety Measures</strong></h3>
<p>When it comes to data centers, safety is a necessity. From securing access to managing airflow, here’s how to keep your data center safe, cool, and secure.</p>
<p><strong>Access Control Systems</strong></p>
<p>Physical locks on doors and cabinets are the first line of defense. To further enhance this protection, electronic locks that require key cards or PINs for entry can be added. For an even higher level of security, biometric scanners that use unique biological traits like fingerprints and facial recognition can be utilized.</p>
<p><strong>Surveillance Cameras</strong></p>
<p>Continuous Monitoring through strategically placed cameras can help capture activities within and around the facility. These cameras should have the ability to store recorded footage for an extended period, which can be crucial in the event of a security breach.</p>
<p>Real-time observation through live feeds or security personal security can help safeguard the data center by allowing immediate detection and response to any incidents.</p>
<p><strong>Cooling Systems</strong></p>
<p>Due to the heat generated by data centers, cooling systems such as air conditioners, fans, and CRAC units are vital. However, relying on a single cooling system is risky. It is important to have backup cooling systems in place to ensure that the data center can continue functioning even if one unit fails.</p>
<p>Periodic audits and maintenance of these devices will help in preventing breakdown or faulty systems that may lead to the data center overheating.</p>
<p><strong>Proper Airflow Management</strong></p>
<p>The placement of cabinets is essential in ensuring proper air circulation and avoiding overheating that may harm the equipment. By using cabinets with perforated doors, air can circulate freely while still protecting the devices stored inside.</p>
<p><strong>Environmental Sensors</strong></p>
<p>Temperature and humidity sensors should be installed throughout the data center to continuously track and maintain optimal operating conditions. In addition, Smoke and dust detectors should be installed, which play a vital role in the detection of potential fire hazards or dust accumulation which can harm data center equipment.</p>
<p><strong>Fire Extinguishers</strong></p>
<p>In the event of a fire, having the fire extinguishers readily accessible is vital. These should be strategically placed throughout the data center so that small fires can be quickly addressed before they escalate into more significant threats.</p>
<p><strong>Hidden Power Sockets</strong></p>
<p>Safety also extends to the electrical setup within the data center. Hidden industrial sockets are a smart choice, as they prevent unauthorized access and reduce the risk of accidental damage to critical power connections.</p>
<p><strong>Physical Layout</strong></p>
<p>Lastly, the physical layout of the data center must be carefully considered. The room should be designed with ample space, allowing easy access to racks and equipment from both the front and back. This not only enhances accessibility but also improves airflow, contributing to the overall safety and efficiency of the data center.</p>
<h3 id="heading-power-supply-and-distribution"><strong>Power Supply and Distribution</strong></h3>
<p>A robust power supply system is crucial for maintaining continuous operations. Here’s a simple setup:</p>
<p><strong>Grid Power</strong><br />The national grid serves as the primary source of electricity for the data center during normal operations.</p>
<p><strong>Uninterruptible Power Supply (UPS)</strong><br />The UPS ensures uninterrupted power to the data center equipment during the brief moments when the ATS is switching between power sources, and it conditions the power for clean delivery.</p>
<p><strong>Automatic Transfer Switch (ATS)</strong><br />The ATS manages the seamless switching between the national grid and the backup generator, ensuring the UPS always receives power from one source or the other.</p>
<p><strong>Backup Generator</strong><br />The generator automatically starts during a grid failure, providing power until the grid is restored.</p>
<p>It should start automatically within seconds of a grid failure, supplying power until the grid is restored</p>
<hr />
<p><strong>Documenting</strong></p>
<p>Please, don’t forget to document everything—from rack diagrams to power distribution plans—to make future maintenance and upgrades smoother.</p>
<p>Here’s a <a target="_blank" href="https://docs.google.com/spreadsheets/d/1AdvooGbolvrnBr2etphJBOq9YW7f4R31/edit?usp=sharing&amp;ouid=114146243066733501645&amp;rtpof=true&amp;sd=true">rack diagram</a> template to get you started.</p>
<p><strong>Tools of Trade</strong></p>
<p>Always have a well-stocked toolbox with screws, washers, zip ties, and that mysterious widget you always seem to need. Because in the world of IT, it's better to have it and not need it than to need it and not have it.</p>
<h3 id="heading-conclusion"><strong>Conclusion</strong></h3>
<p>Designing a data center requires careful planning and attention to detail. By focusing on device organization, safety measures, and a reliable power supply, you can ensure that your data center operates efficiently and securely.</p>
<p>Stay tuned for the next <a target="_blank" href="https://calebcodes.hashnode.dev/power-supply-and-distribution-in-call-centers">article</a> where we’ll dive deeper into power distribution and explore what happens during power transitions.</p>
<p>Until then, happy cabling!</p>
]]></content:encoded></item><item><title><![CDATA[What happens when you type google.com in your browser and press Enter?]]></title><description><![CDATA[When you type "google.com" and press Enter, your computer works its magic to show you the Google homepage in the blink of an eye. But what happens behind the scenes? Now, let's take a closer look at the fascinating process that leads to the display o...]]></description><link>https://blog.calebcodes.tech/what-happens-when-you-type-googlecom-in-your-browser-and-press-enter</link><guid isPermaLink="true">https://blog.calebcodes.tech/what-happens-when-you-type-googlecom-in-your-browser-and-press-enter</guid><category><![CDATA[Alx]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[Devops]]></category><category><![CDATA[webdev]]></category><dc:creator><![CDATA[Caleb Nyachwaya]]></dc:creator><pubDate>Thu, 04 Jan 2024 21:00:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1695472901751/48f0279a-c968-4dd3-a648-bac64681371a.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When you type "google.com" and press Enter, your computer works its magic to show you the Google homepage in the blink of an eye. But what happens behind the scenes? Now, let's take a closer look at the fascinating process that leads to the display of the beloved Google homepage on your screen.</p>
<h3 id="heading-the-start">The Start</h3>
<p>When you type "google.com" and hit Enter, your computer jumps into action. It sends this name to a helper called the domain resolver. The resolver checks its records. If it doesn't know, it asks the DNS server located somewhere in the world. Like a detective, the DNS server knows exactly where "google.com" resides and shares its secret identity, the IP address, with the resolver. The resolver gives it back to your computer. Now equipped with the IP address, your computer sets off on its journey to communicate with the intended server. It sends an HTTP request to the server that hosts Google's web content. But hold on, there's more to this journey than meets the eye!</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1695506738924/a3fe95db-ab7a-46da-a003-abb795aa4306.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-protocols-rules-of-the-road">Protocols – Rules of the road</h3>
<p>Our guides are protocols like TCP/IP, HTTPS, and SSL on this journey. TCP/IP ensures safe travel for our message. It also ensures that our message arrives in the correct order. Think of TCP/IP as a road connecting your computer to Google's server.</p>
<p>HTTPS, the application layer protocol, governs how your computer talks to the server. SSL forms a secure connection between your computer and the server through encryption. This encryption is like a protective shield, safeguarding our request from eavesdropping and ensuring the integrity of our data as it journeys across the vast internet.</p>
<h3 id="heading-firewall-and-load-balancer-securing-the-journey">Firewall and Load balancer - Securing the Journey</h3>
<p>As our message travels, it encounters security checkpoints - The Firewall and Load Balancer. The Firewall stands between your computer and Google’s server. The firewall's primary mission is to control incoming and outgoing traffic on the cover. In doing this, the firewall protects Google’s server from malicious and unauthorized intrusion into the network. In other words, ensuring no troublemakers get through.</p>
<p>Meanwhile, the Load Balancer helps distribute the message across multiple servers, keeping everything running smoothly. It ensures Google’s server doesn't get overwhelmed with traffic. By distributing the workload across various servers, the load balancer plays a crucial role in making Google's application flexible. This means they can adjust their size without causing any disruptions in their operation</p>
<h3 id="heading-web-server-where-the-magic-happens">Web Server - Where the Magic Happens</h3>
<p>Our message finally reaches Google’s server, which we call the web server. This server's main job is to give us what we're looking for. Since Google’s content is dynamic, the web server works closely with the application server and the database to provide us with the requested content.</p>
<p>Inside Google's server lies a sea of well-organized information called database. The application server dives in, gathers all the data we need, and wraps them up neatly ready to be sent back to the web server.</p>
<h3 id="heading-assembling-the-magic">Assembling the Magic</h3>
<p>Once all the requested information is gathered, it's the web server's turn to shine. The web server sends the Google homepage back as an HTTPS web response. Your web browser, the ultimate storyteller, assembles the pieces to create the Google homepage you know and love.</p>
]]></content:encoded></item><item><title><![CDATA[Essential Network Troubleshooting]]></title><description><![CDATA[Introduction
We all know how crucial it is to address network issues before they escalate, particularly in environments supporting numerous users.
Let’s start by pinpointing the causes of network issues. End-user network issues often stem from variou...]]></description><link>https://blog.calebcodes.tech/essential-network-troubleshooting</link><guid isPermaLink="true">https://blog.calebcodes.tech/essential-network-troubleshooting</guid><category><![CDATA[network]]></category><category><![CDATA[IT Support]]></category><category><![CDATA[networking for beginners]]></category><category><![CDATA[troubleshooting]]></category><category><![CDATA[IP]]></category><category><![CDATA[Alx]]></category><category><![CDATA[Technical writing ]]></category><category><![CDATA[IPv4]]></category><dc:creator><![CDATA[Caleb Nyachwaya]]></dc:creator><pubDate>Fri, 27 Oct 2023 21:00:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1704307729924/c24c0c5a-9666-432e-b13c-57fb3a1e6f14.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-introduction">Introduction</h3>
<p>We all know how crucial it is to address network issues before they escalate, particularly in environments supporting numerous users.</p>
<p>Let’s start by pinpointing the causes of network issues. End-user network issues often stem from various sources:</p>
<ol>
<li><p>Physical connectivity issues</p>
</li>
<li><p>Slow internet performance</p>
</li>
<li><p>DNS Problems</p>
</li>
<li><p>Conflicting duplicate or static IP addresses</p>
</li>
<li><p>External Factors: ISP outages</p>
</li>
</ol>
<p>There are countless tools for troubleshooting and resolving network issues, and guess what? Most of them are readily available within common operating systems. Here are the essential commands I rely on when encountering connectivity issues on Windows-based computers.</p>
<h3 id="heading-ipconfig">ipconfig</h3>
<p>Before we start checking connections with other devices, it is important to check the configurations of our devices. This is where <code>ipconfig</code> steps in.</p>
<p>Ipconfig displays the network configuration details which include IP address, subnet mask, default gateway.</p>
<p><code>ipconfig /all</code> gives detailed information</p>
<pre><code class="lang-plaintext">ipconfig /all
</code></pre>
<p><code>ipconfig /release</code> releases the IP from DHCP servers</p>
<pre><code class="lang-plaintext">ipconfig /release
</code></pre>
<p><code>ipconfig/renew</code> renews the IP address from DHCP servers</p>
<pre><code class="lang-plaintext">ipconfig /renew
</code></pre>
<p><code>ipconfig /flushdns</code> resolves DNS-related problems by clearing the contents of the DNS resolver cache.</p>
<pre><code class="lang-plaintext">ipconfig /flushdns
</code></pre>
<h3 id="heading-ping">ping</h3>
<p>Ping command uses ICMP protocol to test connectivity between two devices.  When we execute the ping command, the ICMP echo request is sent to the destination, then the destination sends back the ICMP echo reply to the source. This command allows us to measure if we can reach a device on the other end and the round trip time between our device and the destination device.</p>
<p>The syntax for the <code>ping</code> command typically follows this format:</p>
<pre><code class="lang-plaintext">ping [options] [hostname or IP address]
</code></pre>
<p>Example:</p>
<pre><code class="lang-plaintext">C:\Users\Caleb&gt;ping google.com

Pinging google.com [172.217.170.206] with 32 bytes of data:
Reply from 172.217.170.206: bytes=32 time=8ms TTL=118
Reply from 172.217.170.206: bytes=32 time=8ms TTL=118
Reply from 172.217.170.206: bytes=32 time=7ms TTL=118
Reply from 172.217.170.206: bytes=32 time=8ms TTL=118

Ping statistics for 172.217.170.206:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 7ms, Maximum = 8ms, Average = 7ms
</code></pre>
<p>In the above example, Time – shows the round-trip time, and Lost 0 – means all the packets were sent successfully and no packet loss. Therefore, google.com is reachable</p>
<p>On the other hand, if there is packet loss e.g., "Lost = 1" or "Lost = 2", it means that some of the packets were not received or responded to, which could indicate network connectivity issues.</p>
<p>Use <code>-n</code> flag to specify how many messages you want to send</p>
<pre><code class="lang-plaintext">ping -n 5 google.com
</code></pre>
<p>Use <code>-t</code> flag for continuous ping</p>
<pre><code class="lang-plaintext">ping -t google.com
</code></pre>
<h3 id="heading-traceroute">traceroute</h3>
<p><code>Traceroute</code> is used to trace the path a packet traverses from our device to a destination device. Using this command, we can identify the intermediate devices or hops that a packet passes through.</p>
<pre><code class="lang-plaintext">tracert [options] [hostname or IP address]
</code></pre>
<p>The output of the traceroute command includes the IP addresses of the routers (hops), their domain names (if available), and the round-trip time for each hop.</p>
<pre><code class="lang-plaintext">C:\Users\Caleb&gt;tracert google.com

Tracing route to google.com [172.217.170.174]
over a maximum of 30 hops:

  1     3 ms     2 ms     2 ms  192.168.100.1
  2     2 ms     2 ms     1 ms  XX.155.94.132
  3     8 ms     8 ms     8 ms  XX.155.90.162
  4     8 ms     8 ms    10 ms  XX.155.94.50
  5     8 ms     7 ms     7 ms  172.217.170.174

Trace complete.
</code></pre>
<p>Flag <code>-d</code> prevents <code>tracert</code> from translating IP addresses into hostnames, which speeds up the tracing process.</p>
<p><code>-h</code> flag sets the maximum number of hops that <code>tracert</code> will try before stopping the trace.</p>
<pre><code class="lang-plaintext">tracert -d -h 4 google.com
</code></pre>
<h3 id="heading-telnet">telnet</h3>
<p>We use the <code>telnet</code> to check the status of a specific port in the destination. It helps us determine if a particular port is open and accessible.</p>
<pre><code class="lang-plaintext">telnet [IP address] [port]
</code></pre>
<p>If the port is open and accessible, the command prompt or terminal screen will go blank, and you will see a cursor waiting for your input. This indicates that the port is open and ready to accept connections.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1704437445281/386c0553-0a3c-4c41-a287-e3f2516da0a6.png" alt class="image--center mx-auto" /></p>
<p>If the port is closed or inaccessible, you will see an error message, such as "Connection refused" or "Could not open connection to the host." This means that the port is closed or the device is not listening on that port.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1704443633600/f789e8f2-b800-44f3-9d9f-d8f7fc78bd25.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-nslookup">nslookup</h3>
<p><code>nslookup</code> can help troubleshoot DNS-related issues. The <code>nslookup</code> command queries DNS servers to retrieve domain-related information such as associated IP addresses, reverse DNS lookups, and details about authoritative DNS servers</p>
<pre><code class="lang-plaintext">C:\Users\Dell&gt;nslookup google.com
Server:  UnKnown
Address:  192.168.100.1

Non-authoritative answer:
Name:    google.com
Addresses:  2a00:1450:401a:801::200e
          172.217.170.206
</code></pre>
<p>In the example above, <code>192.168.100.1</code> is the IP address of the DNS server queried while <code>172.217.170.206</code> is the IPv4 address linked with the domain "google.com".</p>
<p>By default, <code>nslookup</code> uses your computer's configured DNS server. If you want to query a specific DNS server, type the domain name or IP address you wish to query, and then include the specific DNS server's IP address.</p>
<pre><code class="lang-plaintext">nslookup google.com 8.8.8.8
</code></pre>
<p>This command queries the DNS server with the IP address 8.8.8.8 for information related to the domain name "google.com".</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text"><strong>Extra Tips</strong></div>
</div>

<ul>
<li><p><strong>Physical Connections</strong>: Ensure physical connections (cables, connectors) are secure and not damaged.</p>
</li>
<li><p><strong>Firewall</strong>: Check firewall settings as they often block network communication. Disable temporarily for testing purposes if needed.</p>
</li>
<li><p><strong>Software Conflicts</strong>: Third-party antivirus or security software can sometimes interfere with network connections. Temporarily disable them for testing.</p>
</li>
<li><p><strong>Monitoring Tools:</strong> By Utilizing monitoring tools like DataDog, Nagios, or PRTG we can stay ahead of potential problems. These tools predict issues, cut downtime, and give us the edge in managing a reliable network.</p>
</li>
</ul>
<h3 id="heading-conclusion">Conclusion</h3>
<p>Remember, start with the basics: check the physical connectivity of devices, eliminate software clashes, and explore the command-line tools. Sometimes, a simple 'ping' might just hold the key to solving your connectivity issues. And if you hit a roadblock, don't hesitate to reach out to your local IT guru for support.</p>
<p>Take a look at the simple <a target="_blank" href="https://github.com/CalebNyachwaya/Homebody/blob/main/subnet_device_checker.py">network scanner</a> I've created, which uses ping requests to tell if devices are online or not.</p>
<p>Stay connected and keep those networks running smoothly! 🌐✨</p>
]]></content:encoded></item><item><title><![CDATA[The Journey of an Outbound Call: From Call Center to Customer]]></title><description><![CDATA[Ever wondered what’s cooking behind the scenes when a call center agent reaches out to a customer? Well, you're not alone. As a technical support specialist for call center agents, I've been hit with this question more times than I can count. To addr...]]></description><link>https://blog.calebcodes.tech/the-journey-of-an-outbound-call-from-call-center-to-customer</link><guid isPermaLink="true">https://blog.calebcodes.tech/the-journey-of-an-outbound-call-from-call-center-to-customer</guid><category><![CDATA[SIP]]></category><category><![CDATA[Technical Support]]></category><category><![CDATA[Technical writing ]]></category><category><![CDATA[networking]]></category><category><![CDATA[Alx]]></category><dc:creator><![CDATA[Caleb Nyachwaya]]></dc:creator><pubDate>Wed, 30 Aug 2023 07:08:44 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1691918184167/c62ac077-906b-4f11-92a1-92c084b2ff26.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Ever wondered what’s cooking behind the scenes when a call center agent reaches out to a customer? Well, you're not alone. As a technical support specialist for call center agents, I've been hit with this question more times than I can count. To address this, I've put together a comprehensive breakdown of the entire process. So, the next time someone asks me, I can confidently direct them to this article. Let's jump right in!</p>
<h3 id="heading-understanding-the-call-flow"><strong>Understanding the Call Flow</strong></h3>
<p>Let's start with the basics of how communication takes place between a call center agent and a customer. This interaction involves various technologies and protocols, with one key player being SIP (Session Initiation Protocol).</p>
<p>SIP serves as the bridge for real-time sessions, such as voice, video, and messaging. In a call center setting, SIP facilitates communication between agents and customers, as well as among agents within the organization. Here's a simplified walkthrough:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1693385352363/f311c6e2-8977-4b82-9e78-51a502979186.png" alt class="image--center mx-auto" /></p>
<ol>
<li><p><strong>Agent Initiates the Call</strong></p>
<p> A call center agent uses a phone or software application (softphone), such as Avaya, X-lite, or Cisco Jabber, to place a call to the customer. The IP phone or softphone relays this call initiation to the PABX server.</p>
</li>
<li><p><strong>PABX Server</strong></p>
<p> This server plays a crucial role in routing the call to its intended recipient.</p>
<p> Think of the PABX server as the mastermind behind call management within the organization. It oversees call routing, queuing, and managing IP phone features. Depending on the setup, the PABX server could be on-site or hosted remotely.</p>
<p> From the PABX server, the call travels via a SIP trunk.</p>
</li>
<li><p><strong>SIP Trunking</strong></p>
<p> SIP trunk is like the bridge that connects the call center's phone system to the rest of the world, allowing the call center to communicate with customers and other external parties efficiently and effectively.<br /> This virtual communication channel utilizes SIP to transmit voice, video, and data between the call center and external parties.</p>
<p> The SIP trunk is not physically located at the call center. Instead, it is typically provided by an Internet Telephony Service Provider (ITSP) or a third-party vendor that specializes in providing SIP trunking services.</p>
</li>
<li><p><strong>Customer Exchange</strong></p>
<p> The SIP trunk routes the call to the customer's telephone exchange, typically operated by a local phone company or a VoIP service provider like Airtel.</p>
<p> The customer's telephone exchange directs the call to the customer's number or extension. This involves looking up the customer's details in a directory or using predefined routing.</p>
</li>
<li><p><strong>Customer receives the call</strong></p>
<p> The customer's phone rings, signaling an incoming call. The customer can answer using their phone handset, softphone app, or other devices.</p>
<p> Once the call is answered, both parties communicate using their respective devices. The audio travels through the exchange and SIP trunk, with the PABX server acting as the intermediary.</p>
</li>
</ol>
<h3 id="heading-trends"><strong>Trends</strong></h3>
<p>The call center world isn't immune to evolution, you know. In recent years, cloud-based PABX solutions have gained traction. These solutions allow organizations to outsource phone system management, offering benefits like reduced costs and increased scalability. When selecting a PABX service, keep in mind that technology constantly evolves, so research and align your choice with your business needs.</p>
<p>As we delve deeper into SIP trunk configuration in the next article, you'll gain a more comprehensive understanding of how the technical details come together. Stay tuned!</p>
]]></content:encoded></item><item><title><![CDATA[Diving into Arrays: Pointers, Dereferencing, and the * Operator]]></title><description><![CDATA[I used to be totally confused about pointers and arrays, especially when I saw that  '*' symbol in the code. However, once I grasped the concept that the array name represents the pointer to the base address, specifically that "array = &array[0]," ev...]]></description><link>https://blog.calebcodes.tech/diving-into-arrays-pointers-dereferencing-and-the-operator</link><guid isPermaLink="true">https://blog.calebcodes.tech/diving-into-arrays-pointers-dereferencing-and-the-operator</guid><category><![CDATA[C]]></category><category><![CDATA[Alx]]></category><category><![CDATA[Programming Blogs]]></category><dc:creator><![CDATA[Caleb Nyachwaya]]></dc:creator><pubDate>Mon, 07 Aug 2023 15:24:53 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1691424687709/e890e12b-7285-4b81-b553-172e97248ffe.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I used to be totally confused about pointers and arrays, especially when I saw that  '*' symbol in the code. However, once I grasped the concept that the array name represents the pointer to the base address, specifically that "array = &amp;array[0]," everything clicked into place and it made my life so much easier! So today, I’m going to break down this whole concept in a simple way, hoping it will be worth your time.</p>
<h3 id="heading-arrays"><strong>Arrays</strong></h3>
<p>Alright, let's start by clarifying a few key concepts about arrays. An array is essentially a collection of data items or elements. For example, in the integer array <code>a</code> below:</p>
<pre><code class="lang-c"><span class="hljs-keyword">int</span> a[ ] = {<span class="hljs-number">2</span>, <span class="hljs-number">4</span>, <span class="hljs-number">20</span>, <span class="hljs-number">0</span>, <span class="hljs-number">10</span>};
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"First element: %d\n"</span>, a[<span class="hljs-number">0</span>]);
</code></pre>
<p>The array <code>a</code> consists of four elements: <code>a[0]</code>, <code>a[1]</code>, <code>a[2]</code>, and <code>a[3]</code>. To access these elements, we use the notation <code>a[0]</code>, <code>a[1]</code>, and so on.</p>
<p>Additionally, we can obtain the addresses of these elements using the "&amp;" operator, such as <code>&amp;a[0]</code>, <code>&amp;a[1]</code>, and <code>&amp;a[2]</code>. The format identifier for addresses is <code>%p</code>.</p>
<p>The first address, which is also the base address of the array, is commonly referred to as <code>&amp;a[0]</code>.</p>
<h3 id="heading-pointer-revelation"><strong>Pointer Revelation</strong></h3>
<p>Now that we've got the array business sorted, it’s time to understand the meaning of a pointer. A pointer is a variable that stores the address of another variable.</p>
<p>Let's break it down with a little example. Say we have this code snippet:</p>
<pre><code class="lang-c"><span class="hljs-keyword">int</span> a[] = {<span class="hljs-number">2</span>, <span class="hljs-number">4</span>, <span class="hljs-number">20</span>, <span class="hljs-number">0</span>, <span class="hljs-number">10</span>};
<span class="hljs-keyword">int</span> *q;

q = &amp;a[<span class="hljs-number">1</span>];
</code></pre>
<p>In this case, "q" is a pointer that stores the address of the second element, a[1].</p>
<h3 id="heading-array-name-trick"><strong>Array Name Trick</strong></h3>
<p>Here's where things get really interesting. The array name is inherently a pointer and points to the base address of the array. The array name becomes a pointer to the first element. We can even prove it by printing out the addresses, and we'll see that both of these printf statements will print the same address.</p>
<pre><code class="lang-c"><span class="hljs-built_in">printf</span>(<span class="hljs-string">"Base Address of the Array:\n"</span>);

<span class="hljs-built_in">printf</span>(<span class="hljs-string">"Address: %p\n"</span>, &amp;a[<span class="hljs-number">0</span>]);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"Address: %p\n"</span>, a);
</code></pre>
<p>Now that we've unmasked the array name's secret identity, let's have some fun with pointer arithmetic</p>
<p>By incrementing the array name, we can access subsequent addresses in the array. For example, to obtain the address of <code>a[2]</code>, we can use <code>a + 2</code></p>
<p>Similarly, the following printf statements will yield the same result:</p>
<pre><code class="lang-c"><span class="hljs-built_in">printf</span>(<span class="hljs-string">"Address of Elements:\n"</span>);

<span class="hljs-built_in">printf</span>(<span class="hljs-string">"Address of a[1]: %p\n"</span>, &amp;a[<span class="hljs-number">1</span>]);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"Address of a[1]: %p\n\n"</span>, a+<span class="hljs-number">1</span>);

<span class="hljs-built_in">printf</span>(<span class="hljs-string">"Address of a[2]: %p\n"</span>, &amp;a[<span class="hljs-number">2</span>]);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"Address of a[2]: %p\n\n"</span>, a+<span class="hljs-number">2</span>);
</code></pre>
<p>You get the pattern, right? In general, <code>a + i</code> is equal to <code>&amp;a[i]</code>. By playing with the array name, we can get the addresses of all the elements.</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text"><strong>&amp;a[ i ] = a + i</strong></div>
</div>

<h3 id="heading-dereferencing"><strong>Dereferencing</strong></h3>
<p>To access the elements of an array, we use dereferencing. When you dereference a pointer, it gives you the value of the variable it's pointing to. In our case, dereferencing the array name provides us with the value of the first element, <code>*a = a[0].</code></p>
<pre><code class="lang-c"><span class="hljs-built_in">printf</span>(<span class="hljs-string">"Value of the first Element:\n"</span>);

<span class="hljs-built_in">printf</span>(<span class="hljs-string">"Value: %d\n"</span>, *a);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"Value: %d\n"</span>, a[<span class="hljs-number">0</span>]);
</code></pre>
<p>The following pairs of printf statements will yield the same result i.e the value of the array elements</p>
<pre><code class="lang-c"><span class="hljs-built_in">printf</span>(<span class="hljs-string">"Element values:\n"</span>);

<span class="hljs-built_in">printf</span>(<span class="hljs-string">"Value: %d\n"</span>, a[<span class="hljs-number">1</span>]);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"Value: %d\n\n"</span>, *(a + <span class="hljs-number">1</span>));

<span class="hljs-built_in">printf</span>(<span class="hljs-string">"Value: %d\n"</span>, a[<span class="hljs-number">2</span>]);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"Value: %d\n\n"</span>, *(a + <span class="hljs-number">2</span>));

<span class="hljs-built_in">printf</span>(<span class="hljs-string">"Value: %d\n"</span>, a[<span class="hljs-number">4</span>]);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"Value: %d\n"</span>, *(a + <span class="hljs-number">4</span>));
</code></pre>
<p>Based on the pattern above, we can conclude that</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text"><strong>a [ i ] = * ( a + i )</strong></div>
</div>

<p><strong>In summary:</strong></p>
<p>Pointer arithmetic is applicable to arrays, it lets us easily hop between elements. By adding an integer value to the array name, we can retrieve the address of the desired element. This concept is particularly useful when iterating through arrays or manipulating their elements.</p>
<p>Dereferencing the array name or a pointer to an array element using the '*' operator gives us access to the value stored at that particular memory location. This allows us to read or modify array elements using pointers.</p>
<hr />
<p>It's important to remember that arrays in C are not dynamically resizable. Once you define an array, its size stays fixed. No expanding or shrinking! So be careful not to go wild and try to access elements beyond the boundaries.</p>
<p>Check out the <a target="_blank" href="https://github.com/CalebNyachwaya/coldsun/blob/main/arrays/4-ArraysHassnode.c">code file</a> I used for this array-pointer dance.</p>
<p>So there you have it! I hope this funny little journey made it all crystal clear for you. See you soon!</p>
]]></content:encoded></item></channel></rss>