<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Precious Oromoni</title>
    <description>The latest articles on Forem by Precious Oromoni (@ebitech02).</description>
    <link>https://forem.com/ebitech02</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%2F1640971%2Fa8938ce6-1c19-44ff-8c03-ca11e6957606.png</url>
      <title>Forem: Precious Oromoni</title>
      <link>https://forem.com/ebitech02</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ebitech02"/>
    <language>en</language>
    <item>
      <title>WanderWise App</title>
      <dc:creator>Precious Oromoni</dc:creator>
      <pubDate>Wed, 18 Sep 2024 20:27:45 +0000</pubDate>
      <link>https://forem.com/ebitech02/wanderwise-app-mf1</link>
      <guid>https://forem.com/ebitech02/wanderwise-app-mf1</guid>
      <description>&lt;p&gt;Introducing WanderWise: Your Ultimate Travel Recommendation Tool Built With HTML, CSS, Javascript, and Flask (Python) For The Backend. &lt;/p&gt;

&lt;p&gt;Travel planning can be overwhelming. With countless destinations to choose from and a myriad of factors to consider, finding the perfect place for your next adventure often feels like searching for a needle in a haystack. That’s where WanderWise comes in. &lt;/p&gt;

&lt;p&gt;What is WanderWise?&lt;/p&gt;

&lt;p&gt;WanderWise is a web application designed to simplify your travel planning process. By leveraging advanced algorithms and multiple data sources, WanderWise provides personalized travel recommendations based on your specific preferences. Whether you’re dreaming of exploring new cultures, trying out new cuisines, or simply enjoying a relaxing beach vacation, WanderWise has you covered. For now, user preferences are limited to continent and climate only because I had trouble integrating the activities api.&lt;/p&gt;

&lt;p&gt;Key Features of WanderWise Are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Tailored Recommendations: Input your preferences for climate, continent, and activities. WanderWise will generate a list of countries that match your criteria.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Comprehensive Country Information: Each recommendation comes with detailed information, including the country’s flag, capital city, currency, and notable places to visit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integrated APIs: WanderWise uses data from RestCountries, OpenTripMap, and other sources to provide up-to-date and accurate travel insights.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Activity and Food Suggestions: Beyond just suggesting countries, WanderWise integrates APIs for activities and local cuisine, giving you a well-rounded view of what to expect on your trip. It should be noted that the activities API didn't work as I wanted so I had to leave out the feature for now.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Inspiration Behind WanderWise -&lt;/p&gt;

&lt;p&gt;The idea for WanderWise stemmed from a simple desire to make travel planning more unique to each individual. Instead of sifting through endless travel guides and forums, WanderWise offers a streamlined approach to discovering destinations that truly resonate with your interests. &lt;/p&gt;

&lt;p&gt;How It Works&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Enter Your Preferences: Select your desired climate, continent, and type of activities you enjoy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Receive Recommendations: Get a curated list of countries that fit your preferences, complete with essential details and activity suggestions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Plan Your Trip: Use the provided information to make informed decisions about your next travel destination.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Why You’ll Love WanderWise&lt;/p&gt;

&lt;p&gt;WanderWise transforms the way you plan your travels. By offering personalized recommendations and comprehensive insights, it takes the guesswork out of finding your ideal destination. Plus, with its user-friendly interface and integration of various data sources, planning your next adventure has never been easier.&lt;/p&gt;

&lt;p&gt;What’s Next?&lt;/p&gt;

&lt;p&gt;We’re continuously working to enhance WanderWise. Future updates will include more advanced recommendation algorithms, more preferences to choose from, additional data integrations, and user-generated content to further enrich your travel planning experience.&lt;/p&gt;

&lt;p&gt;This is a solo project and building this has taught me how to handle backend logic and how to route my application properly with Flask. I learned that CSS is not as simple as it looks and a good HTML structure will save you lots of styling bugs.&lt;/p&gt;

&lt;p&gt;For more information and to try WanderWise yourself, visit my Github page (&lt;a href="https://github.com/ebitech02/WanderWise" rel="noopener noreferrer"&gt;https://github.com/ebitech02/WanderWise&lt;/a&gt;). Dive into a world of tailored travel recommendations and start planning your next unforgettable journey today! 🌏&lt;/p&gt;

</description>
      <category>flask</category>
      <category>python</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Postmortem</title>
      <dc:creator>Precious Oromoni</dc:creator>
      <pubDate>Fri, 23 Aug 2024 21:52:39 +0000</pubDate>
      <link>https://forem.com/ebitech02/postmortem-4869</link>
      <guid>https://forem.com/ebitech02/postmortem-4869</guid>
      <description>&lt;p&gt;Below is the postmortem for the web stack debugging #0 task—:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwgx9nlul12hb9lqpvx0d.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwgx9nlul12hb9lqpvx0d.jpeg" alt="A laptop with bandaids :)" width="750" height="747"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A summary of the issues I faced: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Duration of Issue: July 1, 2024, 12:00 PM - 2:30 PM WAT.&lt;/li&gt;
&lt;li&gt;The Impact: The Apache web server inside the Docker container returned an empty response when querying the root of the server and not the page "Hello Holberton." It affected 75% of users who tried to access the application via the container.&lt;/li&gt;
&lt;li&gt;The Cause: The Apache server was not set up with any &lt;code&gt;ServerName&lt;/code&gt; directive and that was why it was not serving the content intended.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is the timeline - &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;12:00 PM: An issue was detected when running &lt;code&gt;curl 0:8080&lt;/code&gt; returned "Empty reply from server" instead of the expected "Hello Holberton" message.&lt;/li&gt;
&lt;li&gt;12:10AM: I ran the Docker container and connected to the root of the server and noticed the problem.&lt;/li&gt;
&lt;li&gt;12:30 AM: I began examining Apache configuration inside the container. I thought there was a mistake in the configuration of the server..&lt;/li&gt;
&lt;li&gt;12:50 AM: I checked the status of the Apache service and discovered that the reason for the server not running was due to a missing 'ServerName' directive.&lt;/li&gt;
&lt;li&gt; 1:30 AM: I added the line &lt;code&gt;ServerName localhost&lt;/code&gt; to &lt;code&gt;/etc/apache2.conf&lt;/code&gt;, fixing its configuration.&lt;/li&gt;
&lt;li&gt; 2:00 PM: Ran the command for Apache service restart so that the configuration could take effect.&lt;/li&gt;
&lt;li&gt; 2:10 PM: Testing and the result of &lt;code&gt;curl 0:8080&lt;/code&gt; was "Hello Holberton".&lt;/li&gt;
&lt;li&gt; 2:30 PM: The content is rendering the intended content “Hello Holberton”.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Root Cause and Resolution - &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Root Cause: In this case, the &lt;code&gt;ServerName&lt;/code&gt; directive was missing in the Apache configuration file &lt;code&gt;/etc/apache2.conf&lt;/code&gt; inside a Docker container. When the &lt;code&gt;ServerName&lt;/code&gt; directive is not present, Apache would fail to start properly for handling any incoming HTTP requests and will instead return an empty response while accessing the server.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Resolution: This was fixed by simply adding &lt;code&gt;ServerName localhost&lt;/code&gt; to the Apache configuration file. This directive sets the name of the server, allowing Apache to start correctly. And with the configuration updated, the Apache service was restarted, and the server could finally present the "Hello Holberton" page as expected.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Corrective Action and Preventive Measures -&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Configuration Review: All necessary directives, such as &lt;code&gt;ServerName&lt;/code&gt;, should be included in Apache configuration files. This is especially true for isolated environments like containers.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Automation: One can automate the Apache servers configured inside Docker containers to avoid hitting the same issue once more in the future.&lt;/li&gt;
&lt;li&gt;Documentation: Include additional information in the internal documentation about why ServerName is necessary and how to troubleshoot common problems with Apache.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;TODO List-:&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Configuration Check Addition: Create a script or process that checks for critical configuration settings like &lt;code&gt;ServerName&lt;/code&gt; before starting Apache.&lt;/li&gt;
&lt;li&gt;Update Docker Image: Change the Docker image used for this project to default to the &lt;code&gt;ServerName localhost&lt;/code&gt; directive.&lt;/li&gt;
&lt;li&gt;Doc Update: Update the documentation of team members with regard to common mistakes in Apache configurations inside containers.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Summary - &lt;/p&gt;

&lt;p&gt;The malfunctioning of the Apache server in serving the "Hello Holberton" page was because the 'ServerName' directive was missing. It was fixed by updating Apache's configuration and restarting the service. Config management and automation will help prevent this kind of problem in the future.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>softwaredevelopment</category>
      <category>softwareengineering</category>
      <category>webserver</category>
    </item>
    <item>
      <title>What happens when i type https://www.google.com on my web browser and then click Enter.</title>
      <dc:creator>Precious Oromoni</dc:creator>
      <pubDate>Sun, 28 Jul 2024 19:12:55 +0000</pubDate>
      <link>https://forem.com/ebitech02/what-happens-when-i-type-httpswwwgooglecom-on-my-web-browser-and-then-click-enter-46in</link>
      <guid>https://forem.com/ebitech02/what-happens-when-i-type-httpswwwgooglecom-on-my-web-browser-and-then-click-enter-46in</guid>
      <description>&lt;p&gt;To understand what happens on the hood when i type &lt;a href="https://google.com" rel="noopener noreferrer"&gt;https://google.com&lt;/a&gt; on my web browser and then click enter, i need to understand a few concepts about the internet, they are DNS request, TCP/IP, Firewall, HTPPS/SSL, Load balancer, Web-server, Application Server and Database.&lt;/p&gt;

&lt;p&gt;The internet as we know is a global network of interconnected devices that communicate with each other using standardized protocols. It enables the sharing and exchange of information. Transmission Control Protocol/Internet Protocol (TCP/IP) is a suite of communication protocols used to interconnect network devices on the internet. It provides end to end data communication, specifying how data should be transmitted, routed and recieved at the destination. &lt;/p&gt;

&lt;p&gt;Now computers and other devices communicate using IP addresses to identity each other on the internet. An IP address is a unique identifier assigned to each device connected to a network that uses the internet. There are two types of IP addresses but for this article we will focus on the IPv4 (Internet Protocol Version 4), it consists of four numbers seperated by dots e.g 127.8.10.1. Humans will have a hard time memorizing numbers to check the web so the Domain Name System (DNS) was borne. To put it simply DNS translates IP addresses to human readable texts e.g &lt;a href="http://www.example.com" rel="noopener noreferrer"&gt;www.example.com&lt;/a&gt; translates to 124.58.10.9. The first thing my browser does when i press enter is to translate domain &lt;a href="http://www.google.com" rel="noopener noreferrer"&gt;www.google.com&lt;/a&gt; to the IP address initiating the DNS query. The DNS query is a recursive event that performs a search to ensure that the domain is translated to the IP address if it is found either in the browser cache or a third party like cloudfare of google ___, otherwise it returns an error message if not found. When the IP address is returned, my web browser needs to establish a connection to Google's server using TCP/IP (remember this is a means of exchanging data right). During the exchange, the data encounters a security software called firewall - this is a device or software that ensures incoming and outgoing traffics are safe based on some predetermined sets of rules and since the website starts with https, the communication between my browser and google's server is encrypted to ensure a safe and private connection. Now at this point my request should reach the load balancer of google, this is a device or service that handles the distrubution of requests to multiple servers to avoid crashing the server and it also ensures a fast response, then the load balancer sends my request to Google's web server to process the http request, if the content i am requesting for is dynamic, my request is then forwarded to the application server to process and engage with the backend. Finally, the application server will need to query a database server, to fetch or store data e.g (user login info) if need be and the response is then sent back to the application server. The processed data is then sent to the web server, which then sends the response to back to my web browser and voila ---&lt;a href="https://www.google.com---" rel="noopener noreferrer"&gt;https://www.google.com---&lt;/a&gt;  &lt;/p&gt;

</description>
      <category>alxafrica</category>
      <category>softwareengineering</category>
      <category>internet</category>
      <category>google</category>
    </item>
    <item>
      <title>Why CS50?</title>
      <dc:creator>Precious Oromoni</dc:creator>
      <pubDate>Mon, 17 Jun 2024 17:45:38 +0000</pubDate>
      <link>https://forem.com/ebitech02/why-cs50-1di3</link>
      <guid>https://forem.com/ebitech02/why-cs50-1di3</guid>
      <description>&lt;p&gt;*&lt;em&gt;Article on CS50 *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Brief Introduction&lt;/em&gt; : &lt;/p&gt;

&lt;p&gt;Cs50 is a beginner-friendly course by Harvard University. It was taught by David Malan. It is a basic introduction to programming and computer science. No prior knowledge of programming or any programming language is required.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Main&lt;/em&gt; :&lt;br&gt;
Cs50 is a 25-hour course available on YouTube and the edx platform. it covers a range of topics from how the computer works to the concept of programming and what programming languages are. It also teaches how to write programs in various programming languages starting with a visual programming language like Scratch and then moving on to C - a high-level language but considered low-level because of its direct access to memory, it is also the foundation if most languages like, Python - a high-level language, Javascript - a high-level language, SQL - a query language for creating databases. He also teaches about Algorithms - step by step approach to solving a specific task and Data structures - a way of storing and managing data in the system.&lt;/p&gt;

&lt;p&gt;Now let's talk about some of the main concepts of the course. &lt;br&gt;
At the start of the course, we get to learn what programming is. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;What is Programming and programming language?&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;Programming is the act of giving instructions to the computer to execute. The syntax in which these instructions are written is called a programming language. As we know Computers are machines and are only able to understand machine code (binary, 1’s, and 0’s) or instructions.  From now on I will call them codes. So how then does the computer understand our programs since they are mostly written in human-readable language? I want to introduce you to something called a compiler, a software that converts our source code into machine code so that the computer can read it and then execute it. &lt;/p&gt;

&lt;p&gt;_What are the concepts involved in programming? _&lt;/p&gt;

&lt;p&gt;David teaches about &lt;br&gt;
Variables - a storage location used to hold data, I like to think of it as a box where you can save items (data) and use them anytime. &lt;/p&gt;

&lt;p&gt;Conditionals - these help us control the flow of our program based on whether a statement is true or false eg the if and else statements.&lt;/p&gt;

&lt;p&gt;Loops - they help us run repeated codes effectively eg while loop and for loop.&lt;/p&gt;

&lt;p&gt;Functions  - these are blocks of code that help us perform specific tasks and can be reused throughout our program. A function can take an argument which is later referred to as a parameter when called on. &lt;/p&gt;

&lt;p&gt;These concepts are unique to each programming language, their syntax and data types differ. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Conclusion&lt;/em&gt; - &lt;/p&gt;

&lt;p&gt;The most challenging concepts for me after watching the video are Algorithms and Data Structures, understanding Time Complexity, Big O notation, and some of the talked about data structures like Linked Lists, etc will take some time and effort on my part to fully grasp them.   Still, I believe that the CS50 course remains the best lecture online for anyone who is interested in learning programming and computer science because of David Malan's ability to simplify every detail. &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
