<?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: Adnan Alam</title>
    <description>The latest articles on Forem by Adnan Alam (@satellitebots).</description>
    <link>https://forem.com/satellitebots</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%2F156103%2Fc8489ef1-6f91-47b9-bc5a-6bc00a40e348.png</url>
      <title>Forem: Adnan Alam</title>
      <link>https://forem.com/satellitebots</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/satellitebots"/>
    <language>en</language>
    <item>
      <title>Containerize your Dev environment! Forget about painful project setup. (Beginner friendly)</title>
      <dc:creator>Adnan Alam</dc:creator>
      <pubDate>Sat, 29 May 2021 00:24:31 +0000</pubDate>
      <link>https://forem.com/satellitebots/containerize-your-dev-environment-forget-about-painful-setup-beginner-friendly-10bp</link>
      <guid>https://forem.com/satellitebots/containerize-your-dev-environment-forget-about-painful-setup-beginner-friendly-10bp</guid>
      <description>&lt;p&gt;After only a few years of working in the industry I am already tired of having to setup my machine each time something happens to it or I want to work on it on my laptop when visiting someone. Setting up DEV environment has irked me for as long as I have been working in this industry. And after some inspiration from a company that is doing many things right, I decided to make this amazing solution easily available to everyone!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;NOTE: IDE will not work on Windows. Please read windows section.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Pre-requisite
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/get-docker/"&gt;Install docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;For Windows: &lt;a href="https://docs.microsoft.com/en-us/windows/wsl/install-win10"&gt;install wsl&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Disclaimer
&lt;/h3&gt;

&lt;h6&gt;
  
  
  Windows
&lt;/h6&gt;

&lt;p&gt;The display of IDE is done by piggybacking off the X11 server that unix systems use for display. This is not available in windows. However, you should still have full read write access to the "devenv" folder which will be your "home" workspace in your container. So this means that you should still be able to load the files in your favorite IDE, just cannot run it directly from the container. &lt;br&gt;
(Note: I am still looking to overcome this challenge.)&lt;br&gt;
Edit: I've found that you can use &lt;a href="https://sourceforge.net/projects/vcxsrv/"&gt;vcxsrv&lt;/a&gt;. Please check the &lt;a href="https://github.com/ArcticaProject/vcxsrv"&gt;github repo&lt;/a&gt; for this and download the executable you trust! Once you have this installed, start the X server via XLaunch. I would recommend "Full Screen". Run &lt;code&gt;ipconfig&lt;/code&gt; and grab your IP, then set your &lt;code&gt;DISPLAY&lt;/code&gt; environment variable (if you are using mingw64 like me you can run &lt;code&gt;export DISPLAY=&amp;lt;?IP?&amp;gt;:0.0&lt;/code&gt;). Then you can run the &lt;code&gt;windocker.sh&lt;/code&gt;. You can then start off &lt;code&gt;idea&lt;/code&gt; or any other app through this method. (I do understand that this is a lot of workaround, so let's hope Microsoft starts supporting X server natively 😁)&lt;/p&gt;

&lt;h6&gt;
  
  
  Mac
&lt;/h6&gt;

&lt;p&gt;I have not tested this, please try out the &lt;code&gt;dockerrun.sh&lt;/code&gt; script, and let me know if this does not work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Concepts
&lt;/h3&gt;

&lt;p&gt;I don't intend to leave behind the many developers that are just getting started. So, here's the general breakdown that you &lt;strong&gt;HAVE TO&lt;/strong&gt; know.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Container is just as it sounds, a box to separate out resources used by it. This is somewhere between running apps directly in your host vs running in a VM (Virtual Machine). In a VM only the hardware resources are shared. However, in docker the OS kernel is shared. This does mean that the security of your container can be compromised if you let it (That's a whole another beast of its own, so I'll leave that out. Yes, this does mean you should not just pull down some random image and run exactly as the writer tells you to 😭. &lt;strong&gt;PLEASE ONLY USE TRUSTED IMAGES&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt;Docker runs natively on your machine, and in this tutorial you will learn to mount folders as volumes into your container so that the work is &lt;em&gt;easily&lt;/em&gt; available (generally, you can access any files the container is using from the host, because of the nature of containerization).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VOLUMES!!&lt;/strong&gt; Now this is the meat of the entire blog. You will mount your work folders as volumes onto the container which will let you easily work and streamline development. The main idea here is to give the container access to your work environment (for this, I'll assume all of your projects live in a single folder).&lt;/li&gt;
&lt;li&gt;Image Layers. Docker images use layering. Where each layer is generated by a statement in your "Dockerfile" (think of this as the configuration for your container). This is great for many reasons but the most important of them all is re-usability. We can pretty much build on top of an existing image, create our own "base" image and layer that based on what kind of project we will be working on. &lt;em&gt;Think of a sandwich. You put the bread down, your partner puts in the meat, then the kids choose the toppings.&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That should cover most of the key questions you have regarding this. Please comment on whatever finer details you need and I will be happy to help.&lt;/p&gt;

&lt;h3&gt;
  
  
  Base Module
&lt;/h3&gt;

&lt;p&gt;Lets take a look at the main &lt;code&gt;Dockerfile&lt;/code&gt; which you will use as the starting point for many of your customized images.&lt;br&gt;
Please go to the &lt;a href="https://github.com/opiteq/dev-environment"&gt;github repo&lt;/a&gt; to find the source code! 😊&lt;/p&gt;

&lt;h6&gt;
  
  
  Dockerfile:
&lt;/h6&gt;

&lt;ul&gt;
&lt;li&gt;We will start off with openjdk alpine so that we don't have to install and configure jdk, and set environment variables.&lt;/li&gt;
&lt;li&gt;Then let's go ahead and setup for the user. Running as root is sadly not recommended. So we will configure a "dev" user. This definitely does mean that you will not be able to run some of the commands you are used to running as root. However, you can always shell into a container as &lt;code&gt;root&lt;/code&gt;, and run &lt;code&gt;sudo&lt;/code&gt; commands that way.&lt;/li&gt;
&lt;li&gt;Now let's go ahead and update our alpine image.&lt;/li&gt;
&lt;li&gt;Let's create the user we setup.&lt;/li&gt;
&lt;li&gt;Finally add our base applications and install dev tools.&lt;/li&gt;
&lt;li&gt;Let's install the browser and IDE.&lt;/li&gt;
&lt;li&gt;Last thing is to make sure we have proper access to our work env.&lt;/li&gt;
&lt;/ul&gt;

&lt;h6&gt;
  
  
  dockerrun.sh (Shell script)
&lt;/h6&gt;

&lt;ul&gt;
&lt;li&gt;Now we really want to automate the image creation and container start and attach process. This is because very few developers like to do extra manual work 😛.&lt;/li&gt;
&lt;li&gt;Let's cleanup if there's a stopped container.&lt;/li&gt;
&lt;li&gt;If there is no container then we create and start a shell session. If there is then we simply start a new shell session within the same container.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is all! 😊&lt;/p&gt;

&lt;h3&gt;
  
  
  Setup the environment
&lt;/h3&gt;

&lt;p&gt;Let's start off by cloning the repo. You will build the image yourself so that you have better control over it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Let's go into where you will be working &lt;code&gt;cd &amp;lt;workdir&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git clone https://github.com/opiteq/dev-environment .&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;./dockerrun.sh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;now if you open up a new terminal you can simply run the same shell script to get inside of your container.&lt;/li&gt;
&lt;li&gt;I have setup ports 3000-3003 for dev, so you can easily access them from host if needed. Idea is you would run your server and use one of those ports.&lt;/li&gt;
&lt;li&gt;Now, if you are on linux, go ahead and run &lt;code&gt;idea&lt;/code&gt; or &lt;code&gt;firefox&lt;/code&gt; or &lt;code&gt;geany&lt;/code&gt; from the terminal and voilà.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Breakdown
&lt;/h3&gt;

&lt;p&gt;The core concept here is to get you started with a base image then you customize it to your heart's content and get going with your development. I chose alpine linux as the base image because I think less is more. However, I did go with openjdk image so that majority of the java configuration is handled for me. This is also a work-in-progress, so the repository may evolve overtime as I find better fit for my needs.&lt;/p&gt;

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

&lt;p&gt;Your container is what you make of it! Please feel free to customize it to your heart's content and reach out to the amazing community with your questions. I would love to address anything that I missed so definitely let me know. If you think anything I said is incorrect I would be thrilled to learn and correct myself for future readers.&lt;br&gt;
Leave your questions down below and I will get to them as soon as I can.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>java</category>
      <category>python</category>
      <category>node</category>
    </item>
    <item>
      <title>Make an IoT Device for tracking vehicles</title>
      <dc:creator>Adnan Alam</dc:creator>
      <pubDate>Mon, 15 Jun 2020 03:03:41 +0000</pubDate>
      <link>https://forem.com/satellitebots/make-an-iot-device-for-tracking-vehicles-1706</link>
      <guid>https://forem.com/satellitebots/make-an-iot-device-for-tracking-vehicles-1706</guid>
      <description>&lt;p&gt; &lt;/p&gt;

&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;IoT (Information of Things) devices have become more and more prevalent in everyday life. From home assistants to smart toasters these devices are all over most households and offices. Most of the house appliances utilize WiFi module in order to communicate with the designated API. However, for IoT devices to be able to collect data at a remote location or on the go a SIM module would be needed. In this article we will explore implementing an IoT device to collect and send data on the go.&lt;br&gt;
 &lt;br&gt;
 &lt;/p&gt;

&lt;h1&gt;
  
  
  BOM
&lt;/h1&gt;

&lt;p&gt;Below are the parts that are required for the project. (Note: Though link provided, please purchase at your own risk)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.microcenter.com/product/486575/Zero_W"&gt;Raspberry pi&lt;/a&gt; (Zero W used for demo, but any model should work) &lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.aliexpress.com/item/32964568200.html"&gt;SIM7000 (A used for demo, but select based on location) breakout board (breakout boards simplify the circuit for easier development/testing)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.adafruit.com/product/1951"&gt;Female-Female jumper wires&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.adafruit.com/product/3662"&gt;Header pins&lt;/a&gt; (for the Zero model this is needed)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.adafruit.com/product/1991"&gt;GSM Antenna&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.adafruit.com/product/2461"&gt;GPS Antenna&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h1&gt;
  
  
  Schematic
&lt;/h1&gt;

&lt;p&gt;The wiring is straight forward, breakout board needs 5V so, connect pin 2 (5V) from raspberry pi to the V pin then connect pin 6 (GND) from raspberry pi to G. For UART protocol, connect Receiver pin to Transmitter pin, so R pin connects with pin 8 (Tx), and T pin connects with pin 10 (Rx). Please refer to the below schematic for better guidance.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tANgDpxM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sdqjriagdf8h87vh4zp9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tANgDpxM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sdqjriagdf8h87vh4zp9.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Fig 1.1: Raspberry pi and SIM7000 breakout board schematic&lt;/p&gt;

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

&lt;h1&gt;
  
  
  Setting up Raspberry pi
&lt;/h1&gt;

&lt;p&gt;The raspberry pi zero W has a WiFi module that allows setting up the device headless. To do this, please follow this wiki: &lt;a href="http://wiki.lofarolabs.com/index.php/Install_Raspbian"&gt;http://wiki.lofarolabs.com/index.php/Install_Raspbian&lt;/a&gt;&lt;br&gt;
Once the device is setup headless or with monitor, keyboard and mouse, please start off with making sure that everything is updated.&lt;br&gt;
&lt;code&gt;sudo apt-get update&lt;/code&gt;&lt;br&gt;
&lt;code&gt;sudo apt-get install upgrade -Y&lt;/code&gt;&lt;br&gt;
Once everything is updated and the device is ready, please start validating that &lt;a href="https://www.raspberrypi.org/documentation/configuration/uart.md"&gt;UART is enabled&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo raspi-config&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;option 5 - interfacing options&lt;/li&gt;
&lt;li&gt;option P6 - serial&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Would you like a login shell to be accessible over serial?&lt;/code&gt; -&amp;gt; &lt;code&gt;No&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Would you like the serial port hardware to be enabled?&lt;/code&gt; -&amp;gt; &lt;code&gt;Yes&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;With UART configured please check whether or not you see the device we will be interfacing with &lt;code&gt;/dev/ttyS0&lt;/code&gt; with command: &lt;code&gt;ls -l /dev | grep tty&lt;/code&gt;. &lt;br&gt;
This project utilizes the UART protocol for communicating with the SIM7000 module. In this case there is a python-serial library that will simplify the communication with the module. However, initially there is a possibility that the device might not respond to commands, this is mostly due to a power issue. This is why standard USB port on laptops/desktops might not be enough to power the device. The recommendation is to first give it 10-15 minutes and see if it responds, if not would recommend trying a different power source. The best result was achieved by using a power brick, but YMMV. During this testing phase it is not practical to run the actual python code as there are already tools for sending UART commands.&lt;br&gt;
Please run the following to install minicom.&lt;br&gt;
&lt;code&gt;sudo apt-get install minicom -Y&lt;/code&gt;&lt;br&gt;
Once minicom is installed please run it by specifying the device and baudrate you want to use as well.&lt;br&gt;
&lt;code&gt;minicom -D /dev/ttyS0 -b 115200&lt;/code&gt;&lt;br&gt;
Once in, for first time usage please note that to exit press &lt;code&gt;[CTRL]+[A]&lt;/code&gt; -&amp;gt; &lt;code&gt;[Z]&lt;/code&gt; (&lt;em&gt;Note: not all three together, first two combo, then last key&lt;/em&gt;). This is crucial because if the device is not working then screen will be blank and you will not be able to get out, this should save you from that panic attack. For better understanding of what is going on, please press &lt;code&gt;[CTRL]+[A]&lt;/code&gt; -&amp;gt; &lt;code&gt;[E]&lt;/code&gt; to enable echo and this should allow you to see that the commands are being sent, just no response. For basic tests to see that the device is at least responding, please try the command &lt;code&gt;AT&lt;/code&gt; in the minicom window/terminal. This should return &lt;code&gt;OK&lt;/code&gt;. Once this is verified we can move onto the next step: Running the Code.&lt;/p&gt;

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

&lt;h1&gt;
  
  
  Running the Code
&lt;/h1&gt;

&lt;p&gt;Please clone the &lt;a href="https://github.com/AlwaysUP/iottracker"&gt;library here&lt;/a&gt;. To verify this please ensure that the &lt;code&gt;python-serial&lt;/code&gt; library is installed, as that is the only prerequisite for this script. Then run using &lt;code&gt;python tracker.py&lt;/code&gt; and you should the commands and the output of the commands on the screen. Once done, please schedule it to run on boot by scheduling a cron job. Run &lt;code&gt;crontab -l&lt;/code&gt; to check existing cron jobs, then run &lt;code&gt;crontab -e&lt;/code&gt; to edit. Please add the following:&lt;br&gt;
&lt;code&gt;@reboot python /full/path/to/tracker.py&lt;/code&gt; &lt;br&gt;
to the cron script. (Please comment if something is not working as expected)&lt;/p&gt;

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

&lt;h1&gt;
  
  
  Logical Breakdown
&lt;/h1&gt;

&lt;p&gt;The basic concept for the project is to upload data from a low power consuming device on the go using internet to an API then utilize those data points to show the travel history of the device. This was then broken down into three components to simplify the project. The components are API, UI, and the IoT device. The API supports GET and POST request for footprints (data points). The UI displays the footprints on a map, and allows user to get direction to the place where the last ping was received from. Though there are libraries for the SIM modules, the most reliable implementation is through serial library, as the user could follow the official documentation for the AT commands by device model.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tY13ADTN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/tzovlsc6sfaxvt3d44hq.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tY13ADTN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/tzovlsc6sfaxvt3d44hq.JPG" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Fig 1.2: Diagram of the project design&lt;/p&gt;

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

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;The possibilities with IoT devices are limitless, however, because we see them mostly utilizing WiFi for communication which might be discouraged when thinking of outdoor projects. Whether you are concerned about reliability, cost, or simplicity of implementing your ideas the road towards them have already been paved. &lt;a href="//hologram.io"&gt;Hologram&lt;/a&gt; provides free data for beginners, &lt;a href="//simcom.com"&gt;SIMcom&lt;/a&gt; provides affordable SIM modules with well documented guides, and &lt;a href="//heroku.com"&gt;Heroku&lt;/a&gt; provides free easy to host solution for deploying web apps.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;All relevant code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/AlwaysUP/tracker-api"&gt;API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/AlwaysUP/tracker-ui"&gt;UI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/AlwaysUP/iottracker"&gt;IoT Device&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;If you would like more information on the code, please let me know and I will create a second part.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;If you would like to see a different kind of project please let me know, and I will do my best to implement it.&lt;/p&gt;

</description>
      <category>iot</category>
      <category>raspberrypi</category>
      <category>sim7000</category>
      <category>embedded</category>
    </item>
    <item>
      <title>Create a Web Server and save form data into MySQL database using PHP (Beginners Guide)</title>
      <dc:creator>Adnan Alam</dc:creator>
      <pubDate>Tue, 16 Apr 2019 01:47:47 +0000</pubDate>
      <link>https://forem.com/satellitebots/create-a-web-server-and-save-form-data-into-mysql-database-using-php-beginners-guide-fah</link>
      <guid>https://forem.com/satellitebots/create-a-web-server-and-save-form-data-into-mysql-database-using-php-beginners-guide-fah</guid>
      <description>&lt;p&gt;Static pages are great for showcasing your projects. However, if you would like to get data from clients and save it into the server or allow clients to retrieve data from your server then you would need a dynamic webpage. In this tutorial I will show you how to setup a web server, collect data and save into the server database.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key concepts
&lt;/h3&gt;

&lt;p&gt;Before we begin let's review a few HTTP methods. GET requests data (text/file) from the server. POST requests server to accept data (text/file) into the server. PUT requests to modify a specified resource in the server. DELETE requests server to remove a specified resource. We will only be using POST, and PUT in this tutorial.&lt;/p&gt;

&lt;h3&gt;
  
  
  Environment Setup
&lt;/h3&gt;

&lt;p&gt;We will have to setup the server before we can begin to code for the website. There are many other languages and databases that can be used for this purpose, however this tutorial will only cover PHP, MySQL database and Apache web server. We will go over two methods, Linux, and Windows. I recommend using Linux as it is much simpler to get started. If you already have environment setup then move on to the coding block. If you do not have a Linux environment setup, then I would recommend using virtual-box to setup a basic Linux VM and run Ubuntu on it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Windows
&lt;/h3&gt;

&lt;p&gt;First in Windows, go ahead and install WAMP server &lt;a href="http://www.wampserver.com/en/" rel="noopener noreferrer"&gt;from here&lt;/a&gt;. This will take a while as you will have to install a lot of packages. Please ensure all of the Visual C++ packages from the readme.txt file have been installed before moving forward as this can cause a lot of headache later on. Once installed then please open your browser then go to 'localhost' without the quotation marks. If you see a webpage then you are good to go. We will be working in the www/html folder inside of the wamp directory (the installation path). On the right hand corner you will see a green W icon indicating that the server is online and working.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fvdmvihss0m0zcz3e2bka.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fvdmvihss0m0zcz3e2bka.JPG"&gt;&lt;/a&gt;&lt;br&gt;
I would recommend checking out &lt;a href="https://youtu.be/INXemKB5HOE" rel="noopener noreferrer"&gt;this video&lt;/a&gt; if you still are not sure how to setup the wamp server.&lt;/p&gt;

&lt;h3&gt;
  
  
  Linux (Ubuntu)
&lt;/h3&gt;

&lt;p&gt;If you have a different distribution then please use the appropriate package manager to install the tools necessary. Start off by installing Apache2.&lt;br&gt;
&lt;code&gt;sudo apt-get install apache2&lt;/code&gt;&lt;br&gt;
Then ensure the service is running.&lt;br&gt;
&lt;code&gt;sudo service apache2 start&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Afterwards install mysql and go through the setup. Please remember your root password.&lt;br&gt;
&lt;code&gt;sudo apt-get install mysql-server&lt;/code&gt;&lt;br&gt;
&lt;code&gt;sudo /usr/bin/mysql_secure_installation&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then install php and we should be ready to go.&lt;br&gt;
&lt;code&gt;sudo apt-get install php&lt;/code&gt;&lt;br&gt;
&lt;code&gt;sudo apt-get install php-mysql&lt;/code&gt;&lt;br&gt;
&lt;code&gt;sudo /etc/init.d/apache2 restart&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Please ensure you install the php-mysql package as without it you will most likely get driver error.&lt;/p&gt;

&lt;p&gt;Our working directory will be /var/www/html.&lt;/p&gt;

&lt;h3&gt;
  
  
  Apache2
&lt;/h3&gt;

&lt;p&gt;In order to create new projects you will be creating new .conf files per project which will store the virtual host configurations. Please look at the existing config file to get a better understanding of this. For Linux this file can be found in the /etc/apache2/sites-available/ directory. Please check the file named 000-default.conf if available, otherwise just read any .conf file in that directory to get an understanding of the format.&lt;/p&gt;

&lt;h3&gt;
  
  
  Code
&lt;/h3&gt;

&lt;p&gt;Once everything is setup please create a new file inside of the html folder (or your working directory if you have changed the Apache configurations).&lt;br&gt;
We will start by creating a new file in the html directory.&lt;br&gt;
&lt;code&gt;sudo touch /var/www/html/form.html&lt;/code&gt;&lt;br&gt;
Then go ahead and edit the file and populate it with some basic html code.&lt;br&gt;
&lt;code&gt;sudo nano /var/www/html/form.html&lt;/code&gt;&lt;/p&gt;

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

&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;
Test Page
&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;"form_submit.php"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"alt"&lt;/span&gt; &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"POST"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"row uniform"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Name"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Email"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"message"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;textarea&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"message"&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Message"&lt;/span&gt; &lt;span class="na"&gt;rows=&lt;/span&gt;&lt;span class="s"&gt;"4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/textarea&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;br/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"alt"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"Submit"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;



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

&lt;/div&gt;
&lt;h3&gt;
  
  
  Database
&lt;/h3&gt;

&lt;p&gt;Now let's setup the database to so that we can store the information. I will only cover creating database and table in Linux. First login&lt;br&gt;
&lt;code&gt;mysql -u root -p&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

create database dev_to;
use dev_to;
create table test(
    id int NOT NULL AUTO_INCREMENT,
    name varchar(255),
    email varchar(255),
    message text,
    PRIMARY KEY (id)
); 


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

&lt;/div&gt;

&lt;p&gt;Let's make sure this works.&lt;br&gt;
&lt;code&gt;describe test;&lt;/code&gt;&lt;br&gt;
output should look like:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fqbbr2tvv6zgn9upirlav.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fqbbr2tvv6zgn9upirlav.JPG"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's exit out.&lt;br&gt;
&lt;code&gt;exit&lt;/code&gt;&lt;br&gt;
Now we are finally ready for the PHP code that will actually handle the data and save it into the database.&lt;/p&gt;

&lt;h3&gt;
  
  
  Form Handling
&lt;/h3&gt;

&lt;p&gt;Start by creating a new file named form_submit.php.&lt;br&gt;
&lt;code&gt;sudo touch /var/www/html/form_submit.php&lt;/code&gt;&lt;br&gt;
Now let's populate it with some code.&lt;br&gt;
&lt;code&gt;sudo nano /var/www/html/form_submit.php&lt;/code&gt;&lt;br&gt;
Now try the code below which should persist the data into the specified table in the database.&lt;/p&gt;

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

&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span class="nv"&gt;$host&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"localhost"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$db_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"dev_to"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"root"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"password"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$connection&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&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="nv"&gt;$connection&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PDO&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"mysql:host="&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$host&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;";dbname="&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$db_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$username&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$password&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$connection&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"set names utf8"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;PDOException&lt;/span&gt; &lt;span class="nv"&gt;$exception&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Connection error: "&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$exception&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getMessage&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;saveData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
&lt;span class="k"&gt;global&lt;/span&gt; &lt;span class="nv"&gt;$connection&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"INSERT INTO test(name, email, message) VALUES( :name, :email, :message)"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nv"&gt;$callToDb&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$connection&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;prepare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$query&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;htmlspecialchars&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;strip_tags&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="nv"&gt;$email&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;htmlspecialchars&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;strip_tags&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$email&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;htmlspecialchars&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;strip_tags&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="nv"&gt;$callToDb&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;bindParam&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;":name"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$callToDb&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;bindParam&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;":email"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$email&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$callToDb&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;bindParam&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;":message"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$message&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="nv"&gt;$callToDb&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;()){&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;h3 style="text-align:center;"&amp;gt;We will get back to you very shortly!&amp;lt;/h3&amp;gt;'&lt;/span&gt;&lt;span class="p"&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;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="k"&gt;isset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_POST&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'submit'&lt;/span&gt;&lt;span class="p"&gt;])){&lt;/span&gt;
&lt;span class="nv"&gt;$name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;htmlentities&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_POST&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'name'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="nv"&gt;$email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;htmlentities&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_POST&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'email'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="nv"&gt;$message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;htmlentities&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_POST&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'message'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="c1"&gt;//then you can use them in a PHP function. &lt;/span&gt;
&lt;span class="nv"&gt;$result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;saveData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;h3 style="text-align:center;"&amp;gt;A very detailed error message ( ͡° ͜ʖ ͡°)&amp;lt;/h3&amp;gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;Now your website should be able to handle forms and save it onto the local database.&lt;/p&gt;

&lt;p&gt;Here's a sample output from my test run:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fwcx80hu1apd8f642wtkg.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fwcx80hu1apd8f642wtkg.JPG"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fq6xdix7juj2eanzea6hf.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fq6xdix7juj2eanzea6hf.JPG"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F1tei1bl9abdgfahmloqe.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F1tei1bl9abdgfahmloqe.JPG"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note: Please let me know about any issues you are having with this. The tutorial was created to help people get started on their journey to dynamic web development. If anything is unclear, or any information is inaccurate please let me know so I can correct it A.S.A.P.&lt;/p&gt;

</description>
      <category>php</category>
      <category>mysql</category>
      <category>webserver</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
