<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Yuil Tripathee</title>
    <description>The latest articles on DEV Community by Yuil Tripathee (@yuiltripathee).</description>
    <link>https://dev.to/yuiltripathee</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%2F404391%2F7ccde3f4-e974-4561-85e3-107220b723b9.jpeg</url>
      <title>DEV Community: Yuil Tripathee</title>
      <link>https://dev.to/yuiltripathee</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yuiltripathee"/>
    <language>en</language>
    <item>
      <title>So I tried Odoo for the first time</title>
      <dc:creator>Yuil Tripathee</dc:creator>
      <pubDate>Thu, 06 Jun 2024 01:57:53 +0000</pubDate>
      <link>https://dev.to/yuiltripathee/so-i-tried-odoo-for-the-first-time-2o96</link>
      <guid>https://dev.to/yuiltripathee/so-i-tried-odoo-for-the-first-time-2o96</guid>
      <description>&lt;p&gt;From web developer's viewpoint, I'm going to setup Odoo for the first time. It is going to installed on my local computer (Ubuntu 22.04) and the installation will be from community edition.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Git, Python (3.10+), Pip and basics (IDEs and stuff)&lt;/li&gt;
&lt;li&gt;PostgreSQL database (can be community edition)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Initial steps
&lt;/h2&gt;

&lt;p&gt;This is coming from Odoo's official documentation.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fork the GitHub &lt;a href="https://github.com/odoo/odoo" rel="noopener noreferrer"&gt;repo&lt;/a&gt; for the community edition.&lt;/li&gt;
&lt;li&gt;Create a new postgres user. Odoo does not accept &lt;code&gt;postgres&lt;/code&gt; default user.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; postgres createuser &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; &lt;span class="nt"&gt;-S&lt;/span&gt; &lt;span class="nv"&gt;$USER&lt;/span&gt;
createdb &lt;span class="nv"&gt;$USER&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Running Odoo for the first time
&lt;/h2&gt;

&lt;p&gt;The two new databases created on PostgreSQL are: &lt;code&gt;$USER&lt;/code&gt; whatever your username is and the other one called &lt;code&gt;mydb&lt;/code&gt;. Run this command after you clone the Odoo repo and &lt;code&gt;cd&lt;/code&gt; inside.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 odoo-bin &lt;span class="nt"&gt;--addons-path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;addons &lt;span class="nt"&gt;-d&lt;/span&gt; mydb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After the server has started (the INFO log odoo.modules.loading: Modules loaded. is printed), open &lt;a href="http://localhost:8069" rel="noopener noreferrer"&gt;http://localhost:8069&lt;/a&gt; in a web browser and log into the Odoo database with the base administrator account: use admin as the email and, again, admin as the password.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check the database schema
&lt;/h2&gt;

&lt;p&gt;I ran the ERD for database tool in pgAdmin to inspect the database design for the Odoo community base platform.&lt;/p&gt;

&lt;p&gt;From the start there are 114 tables linked in a mesh. So, I chose to dig into the database structure a bit further.&lt;/p&gt;

&lt;h2&gt;
  
  
  Findings
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Odoo's database model is quite mature as of Version 17 and incorporable to wide contextual range.&lt;/li&gt;
&lt;li&gt;The database structure is monolith. Therefore, decoupling into possible micro-services would be a good prospect as some modules requires scaling different than the other.&lt;/li&gt;
&lt;li&gt;You can refer to &lt;a href="https://www.odoo.com/documentation/17.0/developer/tutorials/server_framework_101.html" rel="noopener noreferrer"&gt;Server Framework 101 guide&lt;/a&gt; in order to develop your own modules.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.odoo.com/documentation/17.0/administration/on_premise/source.html" rel="noopener noreferrer"&gt;Odoo on-premise setup from source guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>erp</category>
      <category>beginners</category>
      <category>odoo</category>
    </item>
    <item>
      <title>Reverse engineering C code with Cflow - GNU project (to trace back calling)</title>
      <dc:creator>Yuil Tripathee</dc:creator>
      <pubDate>Sun, 14 Jan 2024 17:42:09 +0000</pubDate>
      <link>https://dev.to/yuiltripathee/reverse-engineering-c-code-with-cflow-gnu-project-to-trace-back-calling-2g4l</link>
      <guid>https://dev.to/yuiltripathee/reverse-engineering-c-code-with-cflow-gnu-project-to-trace-back-calling-2g4l</guid>
      <description>&lt;p&gt;Install the program in Linux (Ubuntu used for this test case) using the below command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt search cflow
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;cflow
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After this, go to the specific project folder. To run the analysis, you can run the following command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cflow &lt;span class="nt"&gt;--verbose&lt;/span&gt; &lt;span class="nt"&gt;--tree&lt;/span&gt; main.c
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we can analyze &lt;code&gt;main.c&lt;/code&gt;. Changing the file name allows us to check other files as well. The output is printed on ASCII tree format with quality details. Now, you can use this information to draw on the software design applications such as PlantUML or StarUML manually if you would like to have a graphical presentation of your reverse analyzed C code.&lt;/p&gt;

&lt;p&gt;Here's the example printout:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;+-main&lt;span class="o"&gt;()&lt;/span&gt; &amp;lt;int main &lt;span class="o"&gt;(&lt;/span&gt;int argc, char &lt;span class="k"&gt;*&lt;/span&gt;argv[]&lt;span class="o"&gt;)&lt;/span&gt; at main.c:26&amp;gt;
  +-printf&lt;span class="o"&gt;()&lt;/span&gt;
  +-serial_open&lt;span class="o"&gt;()&lt;/span&gt;
  +-WitInit&lt;span class="o"&gt;()&lt;/span&gt;
  +-WitRegisterCallBack&lt;span class="o"&gt;()&lt;/span&gt;
  +-SensorDataUpdata&lt;span class="o"&gt;()&lt;/span&gt; &amp;lt;void SensorDataUpdata &lt;span class="o"&gt;(&lt;/span&gt;uint32_t uiReg, uint32_t uiRegNum&lt;span class="o"&gt;)&lt;/span&gt; at main.c:100&amp;gt;
  +-AutoScanSensor&lt;span class="o"&gt;()&lt;/span&gt; &amp;lt;void AutoScanSensor &lt;span class="o"&gt;(&lt;/span&gt;char &lt;span class="k"&gt;*&lt;/span&gt;dev&lt;span class="o"&gt;)&lt;/span&gt; at main.c:142&amp;gt;
  | +-serial_close&lt;span class="o"&gt;()&lt;/span&gt;
  | +-serial_open&lt;span class="o"&gt;()&lt;/span&gt;
  | +-WitReadReg&lt;span class="o"&gt;()&lt;/span&gt;
  | +-Delayms&lt;span class="o"&gt;()&lt;/span&gt; &amp;lt;void Delayms &lt;span class="o"&gt;(&lt;/span&gt;uint16_t ucMs&lt;span class="o"&gt;)&lt;/span&gt; at main.c:136&amp;gt;
  | | &lt;span class="se"&gt;\-&lt;/span&gt;usleep&lt;span class="o"&gt;()&lt;/span&gt;
  | +-serial_read_data&lt;span class="o"&gt;()&lt;/span&gt;
  | +-WitSerialDataIn&lt;span class="o"&gt;()&lt;/span&gt;
  | &lt;span class="se"&gt;\-&lt;/span&gt;&lt;span class="nb"&gt;printf&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
  +-serial_read_data&lt;span class="o"&gt;()&lt;/span&gt;
  +-WitSerialDataIn&lt;span class="o"&gt;()&lt;/span&gt;
  +-Delayms&lt;span class="o"&gt;()&lt;/span&gt; &amp;lt;void Delayms &lt;span class="o"&gt;(&lt;/span&gt;uint16_t ucMs&lt;span class="o"&gt;)&lt;/span&gt; at main.c:136&amp;gt;
  | &lt;span class="se"&gt;\-&lt;/span&gt;usleep&lt;span class="o"&gt;()&lt;/span&gt;
  &lt;span class="se"&gt;\-&lt;/span&gt;serial_close&lt;span class="o"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The source is from Linux C SDK for Witmotion IMU sensor. Here's the link for documentation: &lt;a href="https://support-73.gitbook.io/witmotion-sdk/wit-standard-protocol/" rel="noopener noreferrer"&gt;https://support-73.gitbook.io/witmotion-sdk/wit-standard-protocol/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>reverse</category>
      <category>coding</category>
      <category>programming</category>
      <category>hackathon</category>
    </item>
    <item>
      <title>Redpanda setup in Linux: Installing Redpanda in Zorin 16.3</title>
      <dc:creator>Yuil Tripathee</dc:creator>
      <pubDate>Fri, 29 Dec 2023 23:48:24 +0000</pubDate>
      <link>https://dev.to/yuiltripathee/redpanda-setup-in-linux-installing-redpanda-in-zorin-163-14h1</link>
      <guid>https://dev.to/yuiltripathee/redpanda-setup-in-linux-installing-redpanda-in-zorin-163-14h1</guid>
      <description>&lt;p&gt;I had to modify the default setup script as below, to mask distro as Ubuntu: [1]&lt;/p&gt;

&lt;h2&gt;
  
  
  Process
&lt;/h2&gt;

&lt;h3&gt;
  
  
  #1 Getting things ready
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-1sLf&lt;/span&gt; &lt;span class="s1"&gt;'https://dl.redpanda.com/nzc4ZYQK3WRGd9sy/redpanda/cfg/setup/bash.deb.sh'&lt;/span&gt; | &lt;span class="nv"&gt;distro&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ubuntu &lt;span class="nv"&gt;version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;20.04 &lt;span class="nv"&gt;codename&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;focal &lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, try running &lt;code&gt;apt search redpanda&lt;/code&gt; and check if there's the setup. You can gently install with the &lt;code&gt;apt&lt;/code&gt; command now:&lt;/p&gt;

&lt;h3&gt;
  
  
  #2 Install and tune
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;redpanda redpanda-console
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can find this as the installation is completed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Redpanda Console is installed succesfully. To start Console, run the
following:

    &lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start redpanda-console

Setting up redpanda &lt;span class="o"&gt;(&lt;/span&gt;23.3.1-1&lt;span class="o"&gt;)&lt;/span&gt; ...
Created symlink /etc/systemd/system/multi-user.target.wants/redpanda-tuner.service → /lib/systemd/system/redpanda-tuner.service.
Created symlink /etc/systemd/system/multi-user.target.wants/redpanda.service → /lib/systemd/system/redpanda.service.
redpanda:x:129:138::/var/lib/redpanda:/usr/sbin/nologin
redpanda:x:138:

To get the most out of the fastest queue &lt;span class="k"&gt;in &lt;/span&gt;the west, &lt;span class="nb"&gt;enable &lt;/span&gt;production mode by
running the following:

    &lt;span class="nb"&gt;sudo &lt;/span&gt;rpk redpanda mode production

followed by:

    &lt;span class="nb"&gt;sudo &lt;/span&gt;rpk redpanda tune all
    &lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start redpanda

This will autotune your system to give you the best performance from Redpanda.
You can get more information on the tuning parameters here:
https://docs.redpanda.com/docs/introduction/autotune/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I also ran this in sequence (to go to production mode). Find you redpanda console at &lt;a href="http://localhost:8080/overview" rel="noopener noreferrer"&gt;http://localhost:8080/overview&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here's how tuning looked like for the first time when I did it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;user@laptop:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;rpk redpanda tune all
Restarting &amp;amp; Configuring &lt;span class="s1"&gt;'irqbalance'&lt;/span&gt; with banned IRQs &lt;span class="s1"&gt;'[123]'&lt;/span&gt;
Restarting &amp;amp; Configuring &lt;span class="s1"&gt;'irqbalance'&lt;/span&gt; with banned IRQs &lt;span class="s1"&gt;'[140]'&lt;/span&gt;
TUNER                           APPLIED         ENABLED         SUPPORTED       ERROR
aio_events             &lt;span class="nb"&gt;true   true   true   
&lt;/span&gt;ballast_file           &lt;span class="nb"&gt;true   true   true   
&lt;/span&gt;clocksource            &lt;span class="nb"&gt;true   true   true   
&lt;/span&gt;coredump               &lt;span class="nb"&gt;false  false  true   
&lt;/span&gt;cpu                    &lt;span class="nb"&gt;true   true   true   
&lt;/span&gt;disk_irq               &lt;span class="nb"&gt;true   true   true   
&lt;/span&gt;disk_nomerges          &lt;span class="nb"&gt;true   true   true   
&lt;/span&gt;disk_scheduler         &lt;span class="nb"&gt;true   true   true   
&lt;/span&gt;disk_write_cache       &lt;span class="nb"&gt;false  true   false  &lt;/span&gt;Disk write cache tuner is only supported &lt;span class="k"&gt;in &lt;/span&gt;GCP
fstrim                 &lt;span class="nb"&gt;false  false  true   
&lt;/span&gt;net                    &lt;span class="nb"&gt;true   true   true   
&lt;/span&gt;swappiness             &lt;span class="nb"&gt;true   true   true   
&lt;/span&gt;transparent_hugepages  &lt;span class="nb"&gt;false  false  true&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  #3 Enjoy
&lt;/h3&gt;

&lt;p&gt;You can expect this kind of dashboard opening on that URL.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvjwqio3muntkgl3qujuv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvjwqio3muntkgl3qujuv.png" alt="Redpanda native installation" width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Playing with clusters
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;rpk container start &lt;span class="nt"&gt;-n&lt;/span&gt; 1

&lt;span class="nb"&gt;sudo &lt;/span&gt;rpk container purge
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://github.com/redpanda-data/redpanda" rel="noopener noreferrer"&gt;https://github.com/redpanda-data/redpanda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/redpanda-data/console?tab=readme-ov-file" rel="noopener noreferrer"&gt;https://github.com/redpanda-data/console?tab=readme-ov-file&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>redpanda</category>
      <category>kafka</category>
      <category>iot</category>
      <category>database</category>
    </item>
    <item>
      <title>Docker setup in Linux: Setting up docker in Zorin 16.3</title>
      <dc:creator>Yuil Tripathee</dc:creator>
      <pubDate>Fri, 29 Dec 2023 23:06:56 +0000</pubDate>
      <link>https://dev.to/yuiltripathee/docker-setup-in-linux-setting-up-docker-in-zorin-163-49k2</link>
      <guid>https://dev.to/yuiltripathee/docker-setup-in-linux-setting-up-docker-in-zorin-163-49k2</guid>
      <description>&lt;p&gt;As Zorin 16.3 is based on &lt;code&gt;Ubuntu/focal&lt;/code&gt;, there's a little workaround to have a usable docker setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Process
&lt;/h2&gt;

&lt;h3&gt;
  
  
  #1 Install Docker system
&lt;/h3&gt;

&lt;p&gt;As you need to create containers, you need docker to do so. Here's simple process just cited from multiple references.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# preliminaries&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;ca-certificates curl gnupg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Need to add keyrings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# keyrings&lt;/span&gt;
&lt;span class="nb"&gt;sudo install&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt; 0755 &lt;span class="nt"&gt;-d&lt;/span&gt; /etc/apt/keyrings
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://download.docker.com/linux/ubuntu/gpg | &lt;span class="nb"&gt;sudo &lt;/span&gt;gpg — dearmor &lt;span class="nt"&gt;-o&lt;/span&gt; /etc/apt/keyrings/docker.gpg
&lt;span class="nb"&gt;sudo chmod &lt;/span&gt;a+r /etc/apt/keyrings/docker.gpg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Adding &lt;code&gt;apt&lt;/code&gt; source next:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
“deb &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;arch&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;dpkg — print-architecture&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; signed-by&lt;span class="o"&gt;=&lt;/span&gt;/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; /etc/os-release &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$VERSION_CODENAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; stable&lt;span class="s2"&gt;" | &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;
sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I recommend this step to be done manually if you happen to face any issue. You should shoud be able to have contents as in below in the &lt;code&gt;/etc/apt/sources.list.d/docker.list&lt;/code&gt; file. I've manually written this after running into a little issue which works like a charm now.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;deb &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;arch&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;amd64 signed-by&lt;span class="o"&gt;=&lt;/span&gt;/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu   focal stable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After that its just installing stuffs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# installation just starts now&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, testing step is as an usual &lt;code&gt;hello-world&lt;/code&gt; container.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;docker run hello-world
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, you're good to go if you see welcome message running down this &lt;code&gt;hello-world&lt;/code&gt; container. Go through &lt;a href="https://stackoverflow.com/questions/66374226/e-malformed-entry-1-in-list-file-etc-apt-sources-list-d-docker-list-component" rel="noopener noreferrer"&gt;this link&lt;/a&gt; if you've been facing issues with APT repository. [3]&lt;/p&gt;

&lt;h3&gt;
  
  
  #2 Docker Desktop
&lt;/h3&gt;

&lt;p&gt;A GUI makes it easy to navigate through the whole docker system. Have a look &lt;a href="https://docs.docker.com/desktop/install/ubuntu/" rel="noopener noreferrer"&gt;here&lt;/a&gt; to setup docker desktop after installation of docker system. Here's the summary: [2]&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# if don't exist&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;gnome-terminal

&lt;span class="c"&gt;# removing previous installations&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt remove docker-desktop
&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="nv"&gt;$HOME&lt;/span&gt;/.docker/desktop
&lt;span class="nb"&gt;sudo rm&lt;/span&gt; /usr/local/bin/com.docker.cli
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt purge docker-desktop

&lt;span class="c"&gt;# install by apt after downloading from the page&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; ./docker-desktop-&amp;lt;version&amp;gt;-&amp;lt;&lt;span class="nb"&gt;arch&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;.deb

&lt;span class="c"&gt;# launch&lt;/span&gt;
systemctl &lt;span class="nt"&gt;--user&lt;/span&gt; start docker-desktop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next time if you want to upgrade the application, its quite easy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; ./docker-desktop-&amp;lt;version&amp;gt;-&amp;lt;&lt;span class="nb"&gt;arch&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;.deb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check the whole installation as below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose version
Docker Compose version v2.17.3

docker &lt;span class="nt"&gt;--version&lt;/span&gt;
Docker version 23.0.5, build bc4487a

docker version
Client: Docker Engine - Community
 Cloud integration: v1.0.31
 Version:           23.0.5
 API version:       1.42
&amp;lt;...&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  #3 Optional: Install kubernetes
&lt;/h3&gt;

&lt;p&gt;As you've installed docker desktop, you can do this installation from the GUI settings in the app quite easily.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://medium.com/@mahmud0x/setting-up-docker-on-zorin-os-16-3-4892bfb18732" rel="noopener noreferrer"&gt;https://medium.com/@mahmud0x/setting-up-docker-on-zorin-os-16-3-4892bfb18732&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/desktop/install/ubuntu/" rel="noopener noreferrer"&gt;https://docs.docker.com/desktop/install/ubuntu/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/questions/66374226/e-malformed-entry-1-in-list-file-etc-apt-sources-list-d-docker-list-component" rel="noopener noreferrer"&gt;https://stackoverflow.com/questions/66374226/e-malformed-entry-1-in-list-file-etc-apt-sources-list-d-docker-list-component&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>docker</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>devops</category>
    </item>
    <item>
      <title>Network interfacing issues faced using WSL 2 (and fixes)</title>
      <dc:creator>Yuil Tripathee</dc:creator>
      <pubDate>Wed, 19 Apr 2023 17:05:18 +0000</pubDate>
      <link>https://dev.to/yuiltripathee/network-interfacing-issues-faced-using-wsl-2-and-fixes-3cdi</link>
      <guid>https://dev.to/yuiltripathee/network-interfacing-issues-faced-using-wsl-2-and-fixes-3cdi</guid>
      <description>&lt;h4&gt;
  
  
  #1 - Memory not releasing back
&lt;/h4&gt;

&lt;p&gt;It becomes overload to the system and eventually leading to Blue Screen of Death if not treated on time.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;# &lt;span class="kd"&gt;only&lt;/span&gt; &lt;span class="kd"&gt;termination&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;still&lt;/span&gt; &lt;span class="kd"&gt;VM&lt;/span&gt; &lt;span class="kd"&gt;is&lt;/span&gt; &lt;span class="kd"&gt;alive&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;wsl&lt;/span&gt; &lt;span class="na"&gt;-t &lt;/span&gt;&lt;span class="kd"&gt;kali&lt;/span&gt;&lt;span class="na"&gt;-linux

&lt;/span&gt;# &lt;span class="nb"&gt;shutdown&lt;/span&gt;
&lt;span class="kd"&gt;wsl&lt;/span&gt; &lt;span class="na"&gt;--shutdown &lt;/span&gt;&lt;span class="kd"&gt;kali&lt;/span&gt;&lt;span class="na"&gt;-linux
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  #2 - WSL2 network ports are virtual and cannot be accessed from LAN
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight batchfile"&gt;&lt;code&gt;# &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="kd"&gt;port&lt;/span&gt; &lt;span class="kd"&gt;forwarding&lt;/span&gt;
&lt;span class="nb"&gt;netsh&lt;/span&gt; &lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="kd"&gt;portproxy&lt;/span&gt; &lt;span class="kd"&gt;add&lt;/span&gt; &lt;span class="kd"&gt;v4tov4&lt;/span&gt; &lt;span class="kd"&gt;listenport&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;8001&lt;/span&gt; &lt;span class="kd"&gt;listenaddress&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.0.10 &lt;span class="kd"&gt;connectport&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt; &lt;span class="kd"&gt;connectaddress&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.0.10

# &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="kd"&gt;listing&lt;/span&gt;
&lt;span class="nb"&gt;netsh&lt;/span&gt; &lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="kd"&gt;portproxy&lt;/span&gt; &lt;span class="kd"&gt;show&lt;/span&gt; &lt;span class="kd"&gt;all&lt;/span&gt;

# &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="kd"&gt;cleanup&lt;/span&gt;
&lt;span class="nb"&gt;netsh&lt;/span&gt; &lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="kd"&gt;portproxy&lt;/span&gt; &lt;span class="nb"&gt;reset&lt;/span&gt;

# &lt;span class="kd"&gt;or&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nb"&gt;netsh&lt;/span&gt; &lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="kd"&gt;portproxy&lt;/span&gt; &lt;span class="kd"&gt;delete&lt;/span&gt;

# &lt;span class="kd"&gt;ON&lt;/span&gt; &lt;span class="kd"&gt;and&lt;/span&gt; &lt;span class="kd"&gt;OFF&lt;/span&gt;
&lt;span class="nb"&gt;netsh&lt;/span&gt; &lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="kd"&gt;portproxy&lt;/span&gt; &lt;span class="kd"&gt;add&lt;/span&gt; &lt;span class="kd"&gt;v4tov4&lt;/span&gt; &lt;span class="kd"&gt;listenport&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;4422&lt;/span&gt; &lt;span class="kd"&gt;listenaddress&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.1.111 &lt;span class="kd"&gt;connectport&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt; &lt;span class="kd"&gt;connectaddress&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.0.33

&lt;span class="nb"&gt;netsh&lt;/span&gt; &lt;span class="kd"&gt;interface&lt;/span&gt; &lt;span class="kd"&gt;portproxy&lt;/span&gt; &lt;span class="kd"&gt;delete&lt;/span&gt; &lt;span class="kd"&gt;v4tov4&lt;/span&gt; &lt;span class="kd"&gt;listenport&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;4422&lt;/span&gt; &lt;span class="kd"&gt;listenaddress&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.1.111
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You need to get Linux IP (use &lt;code&gt;ip route&lt;/code&gt;). Check &lt;a href="https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc731068(v=ws.10)?redirectedfrom=MSDN" rel="noopener noreferrer"&gt;official docs&lt;/a&gt; for more information. Also, you can use NGINX with the following configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;events&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="k"&gt;http&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="kn"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

        &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="nf"&gt;192.168.1.111&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4422&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://192.168.2.33:80/&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="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>wsl2</category>
      <category>lan</category>
      <category>bugfixing</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Web Dev setup in WSL2 Kali Linux 2022 Edition - Part 2: Coding Tools setup - Python, C++, Go, JS, PHP</title>
      <dc:creator>Yuil Tripathee</dc:creator>
      <pubDate>Sat, 04 Jun 2022 18:48:45 +0000</pubDate>
      <link>https://dev.to/yuiltripathee/web-dev-setup-in-wsl2-kali-linux-2022-edition-part-2-coding-tools-setup-python-c-go-js-php-4f4m</link>
      <guid>https://dev.to/yuiltripathee/web-dev-setup-in-wsl2-kali-linux-2022-edition-part-2-coding-tools-setup-python-c-go-js-php-4f4m</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Please be noted that the whole or a part of the article is applicable in the full Linux installation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Before beginning be sure to check the IP address of your VM and the host machine. This is better to know when you are working with WSL2. You can get the IP address using &lt;code&gt;ip route&lt;/code&gt; command in your Linux terminal. For some cases, like in the &lt;code&gt;apache2&lt;/code&gt; server, it has been found that loopback for &lt;a href="http://localhost:80" rel="noopener noreferrer"&gt;http://localhost:80&lt;/a&gt; works properly even when running the g Apache server on WSL2.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code Editor (Visual Studio Code)
&lt;/h2&gt;

&lt;p&gt;I have been using &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt; for a long time (since 2016), and I realized programming experience is lit💯. Also, the plus is it keeps evolving and getting better over time. To work on WSL with VS Code together, VS Code is installed in Windows and called from the WSL system as simple as a &lt;code&gt;code&lt;/code&gt; command.&lt;/p&gt;

&lt;h2&gt;
  
  
  Python
&lt;/h2&gt;

&lt;p&gt;We would certainly get &lt;code&gt;python3&lt;/code&gt; pre-installed in the Linux system, but if not, then just install using &lt;code&gt;sudo apt install python3&lt;/code&gt; in the terminal. Type &lt;code&gt;python3&lt;/code&gt; and you will get an interactive environment. If this works, you have just confirmed your python setup is working properly. Check &lt;code&gt;man python3&lt;/code&gt; for more details.&lt;/p&gt;

&lt;h3&gt;
  
  
  Python virtual environments
&lt;/h3&gt;

&lt;p&gt;Python setup can be fun, to begin with, but can go tricky when you pursue advanced stuff in it. Managing packages using virtual environments is aa a  new chore here to do things more proficiently. Here in this setup, we will simply use &lt;a href="https://docs.python.org/3/library/venv.html" rel="noopener noreferrer"&gt;venv&lt;/a&gt; based approach.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="nt"&gt;-m&lt;/span&gt; venv &lt;span class="o"&gt;[&lt;/span&gt;LOCATION] &lt;span class="c"&gt;# to create a source for a new virtual env.&lt;/span&gt;

&lt;span class="nb"&gt;source&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;LOCATION]/bin/activate &lt;span class="c"&gt;# to activate the virtual env.&lt;/span&gt;

deactivate &lt;span class="c"&gt;# to deactivate the virtual env.&lt;/span&gt;

pip list &lt;span class="c"&gt;# list packages in the virtual env.&lt;/span&gt;

pip freeze &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; requirements.txt &lt;span class="c"&gt;# list the installed packages into requirements.txt (from the virtual env.)&lt;/span&gt;

pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt &lt;span class="c"&gt;# install the packages from requirements.txt (into virtual env.)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After the activation of a certain environment, the packages will be installed/used/removed from there only. For better results, it is recommended to use an individual environment for each project. But, for learners, you can create virtual environments such as &lt;code&gt;WebDev&lt;/code&gt;, &lt;code&gt;DataScience,&lt;/code&gt; and so on.&lt;/p&gt;

&lt;p&gt;For data science/machine learning use cases, I had been using &lt;code&gt;miniconda&lt;/code&gt; for a while and the setup was consistent, easily reproducible, and easy to maintain. Though this can be managed simply using Python &lt;code&gt;venv&lt;/code&gt; environment, we opt for setting up using miniconda preferably to data science application. &lt;a href="https://docs.conda.io/en/latest/miniconda.html" rel="noopener noreferrer"&gt;Miniconda&lt;/a&gt; is a free minimal installer for conda. To get conda-related packages, we need to add &lt;code&gt;-c conda-forge&lt;/code&gt; if not found to be installed by regular means. Here are some of the commonly used commands.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;conda create &lt;span class="nt"&gt;-n&lt;/span&gt; py3k anaconda &lt;span class="nv"&gt;python&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3 &lt;span class="c"&gt;# includes optional setup here&lt;/span&gt;
conda &lt;span class="nb"&gt;env &lt;/span&gt;list      &lt;span class="c"&gt;# shows the list of environments in the system&lt;/span&gt;
conda activate py3k &lt;span class="c"&gt;# activates the environment&lt;/span&gt;
conda &lt;span class="nb"&gt;install &lt;/span&gt;numpy &lt;span class="c"&gt;# installs the package in the environment&lt;/span&gt;
conda deactivate    &lt;span class="c"&gt;# deactivates current conda environment&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check this &lt;a href="https://www.youtube.com/watch?v=3J02sec99RM" rel="noopener noreferrer"&gt;video&lt;/a&gt; from &lt;a href="https://www.youtube.com/user/googlecloudplatform" rel="noopener noreferrer"&gt;Google Cloud Tech&lt;/a&gt; to learn about choosing a Python package manager.&lt;/p&gt;

&lt;h2&gt;
  
  
  C/C++
&lt;/h2&gt;

&lt;p&gt;Nowadays, we can use C/C++ code in our web development projects (frontends to be specific) using WebAssembly. So, it is indeed now part of our web development setup. You can go through the steps below for a standard setup using GNU tools in Debian.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;build-essential &lt;span class="c"&gt;# installs make, gcc, g++, and other packages&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Build-essential contains a list of packages required to create a Debian package (&lt;code&gt;.deb&lt;/code&gt;). Now, let's run a simple C++ code from &lt;a href="https://www.programiz.com/cpp-programming/examples/print-sentence" rel="noopener noreferrer"&gt;Programiz&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Your First C++ Program&lt;/span&gt;

&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;"Hello World!"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Save the file (say &lt;code&gt;app.cpp&lt;/code&gt;) and run this in the terminal to see "Hello World". This confirms the installation of required tools to work with C/C++ in the WSL2 Linux system.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;g++ hello.cpp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Golang
&lt;/h2&gt;

&lt;p&gt;Standard setup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;golang-go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is the sample Go code from the &lt;a href="https://go.dev/" rel="noopener noreferrer"&gt;official Go website&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="c"&gt;// You can edit this code!&lt;/span&gt;
&lt;span class="c"&gt;// Click here and start typing.&lt;/span&gt;
&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="s"&gt;"fmt"&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello, 世界"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Now, save this file (say &lt;code&gt;app.go&lt;/code&gt;) and run the app. To confirm if Go is installed in your system.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go run app.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can use the &lt;a href="https://github.com/moovweb/gvm" rel="noopener noreferrer"&gt;gvm&lt;/a&gt; Go version manager to use versioned installation which is a tool that provides an interface to manage Go versions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bash &amp;lt; &amp;lt;&lt;span class="o"&gt;(&lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-S&lt;/span&gt; &lt;span class="nt"&gt;-L&lt;/span&gt; https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer&lt;span class="o"&gt;)&lt;/span&gt;

gvm &lt;span class="nb"&gt;install &lt;/span&gt;go1.4 &lt;span class="c"&gt;# to install Go v1.4&lt;/span&gt;
gvm use go1.4 &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--default&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="c"&gt;# to use Go v1.4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://tinygo.org/" rel="noopener noreferrer"&gt;TinyGo&lt;/a&gt; is recommended for embedded systems and WebAssembly.&lt;/p&gt;

&lt;h2&gt;
  
  
  JavaScript (NodeJS)
&lt;/h2&gt;

&lt;p&gt;Instead of going with an apt-based setup for NodeJS, we prefer &lt;a href="https://github.com/nvm-sh/nvm" rel="noopener noreferrer"&gt;nvm&lt;/a&gt; which allows using multiple &lt;code&gt;nodejs&lt;/code&gt; versions installed and using them selectively.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget &lt;span class="nt"&gt;-qO-&lt;/span&gt; https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It also should add the following lines in &lt;code&gt;~/.bashrc&lt;/code&gt;, &lt;code&gt;~/.profile&lt;/code&gt; or &lt;code&gt;~/.bash_profile&lt;/code&gt;, which can also be added manually if the setup does not add as below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;NVM_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-z&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;XDG_CONFIG_HOME&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;printf&lt;/span&gt; %s &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/.nvm"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;printf&lt;/span&gt; %s &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;XDG_CONFIG_HOME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/nvm"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$NVM_DIR&lt;/span&gt;&lt;span class="s2"&gt;/nvm.sh"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\.&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$NVM_DIR&lt;/span&gt;&lt;span class="s2"&gt;/nvm.sh"&lt;/span&gt; &lt;span class="c"&gt;# This loads nvm&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, we can proceed with installing Node:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc &lt;span class="c"&gt;# for bash&lt;/span&gt;

nvm &lt;span class="nb"&gt;install &lt;/span&gt;node &lt;span class="c"&gt;# installs the latest version&lt;/span&gt;
nvm use node &lt;span class="c"&gt;# uses the recently installed version in the terminal&lt;/span&gt;

nvm uninstall &lt;span class="o"&gt;[&lt;/span&gt;version] &lt;span class="c"&gt;# removes the node for update (or reinstall)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run &lt;code&gt;node -v&lt;/code&gt; and &lt;code&gt;npm -v&lt;/code&gt; to confirm node and npm installation.&lt;/p&gt;

&lt;h2&gt;
  
  
  PHP (Apache Server)
&lt;/h2&gt;

&lt;p&gt;Installing, PHP is easy using the apt.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;apache2

&lt;span class="nb"&gt;sudo &lt;/span&gt;service apache2 start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;How, create a file &lt;code&gt;/var/www/html/phpinfo.php&lt;/code&gt; and write &lt;code&gt;&amp;lt;?php phpinfo(); ?&amp;gt;&lt;/code&gt;. Now, restart Apache and check if the PHP server is working in your Linux system. To perform the test my way, edit the file &lt;code&gt;/var/www/html/index.html&lt;/code&gt; as below and check &lt;a href="http://localhost:80" rel="noopener noreferrer"&gt;http://localhost:80&lt;/a&gt; for verification.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&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;title&amp;gt;&lt;/span&gt; Test Document &lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;monospace&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#1a78e6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/style&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;h1&amp;gt;&lt;/span&gt;Test content&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This page comes from &lt;span class="nt"&gt;&amp;lt;span&amp;gt;&lt;/span&gt;/var/www/html/index.html&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt; in WSL2.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;To enable, start apache service and get the IP from &lt;span class="nt"&gt;&amp;lt;span&amp;gt;&lt;/span&gt;ifconfig&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;inet&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&amp;lt;/p&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;/html&amp;gt;&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Or simply check by inserting &lt;code&gt;&amp;lt;?php phpinfo(); ?&amp;gt;&lt;/code&gt; in &lt;code&gt;/var/www/html/phpinfo.php&lt;/code&gt; and check for &lt;a href="http://localhost/phpinfo.php" rel="noopener noreferrer"&gt;http://localhost/phpinfo.php&lt;/a&gt; if the server is running.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://dev.to/hymanzhan/setting-up-wsl-2-for-web-development-3202#python-amp-node"&gt;https://dev.to/hymanzhan/setting-up-wsl-2-for-web-development-3202#python-amp-node&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>linux</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Web Dev setup in WSL2 Kali Linux 2022 Edition - Part 1: Connecting MariaDB and PostgreSQL database across Windows and WSL2</title>
      <dc:creator>Yuil Tripathee</dc:creator>
      <pubDate>Wed, 01 Jun 2022 18:27:39 +0000</pubDate>
      <link>https://dev.to/yuiltripathee/web-dev-setup-in-wsl2-kali-linux-2022-edition-part-1-connecting-mariadb-and-postgresql-database-across-windows-and-wsl2-o7e</link>
      <guid>https://dev.to/yuiltripathee/web-dev-setup-in-wsl2-kali-linux-2022-edition-part-1-connecting-mariadb-and-postgresql-database-across-windows-and-wsl2-o7e</guid>
      <description>&lt;p&gt;When I first began familiar with WSL 1.0 , the network interfacing was simpler. But since WSL2 uses dynamic virtual IP address for each VM, now the things has got little trickier. Here, we will learn to install Postgres and MariaDB server and client in both Windows and WSL2 Linux and access them across the virtual Ethernet connection. By the term &lt;code&gt;using interchangeably&lt;/code&gt; we mean accessing database in Windows from WSL2 Linux and vice versa.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PROBLEM STATEMENT:&lt;/strong&gt; WSL2 IPv4 has access to PostgreSQL from localhost in Linux but not in Windows requires virtual ethernet adaptor's assigned IP to communicate between each other and also other issue found was them requiring &lt;strong&gt;the firewall&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;REQUIREMENTS&lt;/strong&gt;: Database clients should be able to access database servers both in same OS and in other. WSL Client should access server in Windows and Windows clients should access database in WSL2.&lt;/p&gt;

&lt;p&gt;To begin, one must need a good installation of Windows and WSL2 based distro in their machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Working with databases interchangeably
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo6ndb9ktrbljdgbdh4hy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo6ndb9ktrbljdgbdh4hy.png" alt="Image description" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://dev.to/hymanzhan/setting-up-wsl-2-for-web-development-3202"&gt;https://dev.to/hymanzhan/setting-up-wsl-2-for-web-development-3202&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Please be aware that you need to identify the IP address of the virtual machine (WSL) and the host machine you are working with, which might be different from the IP address of your local physical machine. You can find the IP address using Task Manager, and also using this command in WSL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip route &lt;span class="c"&gt;# or&lt;/span&gt;

ip addr | &lt;span class="nb"&gt;grep &lt;/span&gt;eth0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You might also need to enable firewall on port 3306 for MariaDB and 5432 for Postgres for interconnectivity.&lt;/p&gt;

&lt;p&gt;If you require port forwarding in WSL for reason, this &lt;a href="https://dev.to/alia5/the-ultimate-wsl2-setup-4m08"&gt;article&lt;/a&gt; has it covered well. For Postgres vs MySQL comparison, you can check this &lt;a href="https://www.enterprisedb.com/blog/postgresql-vs-mysql-360-degree-comparison-syntax-performance-scalability-and-features" rel="noopener noreferrer"&gt;blog&lt;/a&gt; from EDB, so you can choose the database system based on your need.&lt;/p&gt;

&lt;h2&gt;
  
  
  Database Servers
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Database Servers in Windows
&lt;/h3&gt;

&lt;p&gt;For Windows, you can get PostgreSQL from EDB and &lt;a href="https://www.pgadmin.org/" rel="noopener noreferrer"&gt;pgAdmin 4&lt;/a&gt; from their download &lt;a href="https://www.enterprisedb.com/downloads/postgres-postgresql-downloads" rel="noopener noreferrer"&gt;page&lt;/a&gt;. Simply install them and all add their &lt;code&gt;bin&lt;/code&gt; directories to path folder if necessary.&lt;/p&gt;

&lt;p&gt;For MariaDB, I recommend using &lt;a href="https://www.apachefriends.org/index.html" rel="noopener noreferrer"&gt;XAMPP&lt;/a&gt; since it is robust and simple for beginners. But, if you like to install standalone version, you can download and install from &lt;a href="https://mariadb.org/" rel="noopener noreferrer"&gt;official MariaDB site&lt;/a&gt;. You can use both &lt;a href="https://www.mysql.com/products/workbench/" rel="noopener noreferrer"&gt;MySQL Workbench&lt;/a&gt; and &lt;a href="https://www.phpmyadmin.net/" rel="noopener noreferrer"&gt;phpmyadmin&lt;/a&gt; to access such them as a client.&lt;/p&gt;

&lt;p&gt;You must be able to access normally in Windows by &lt;code&gt;psql&lt;/code&gt; and &lt;code&gt;mysql&lt;/code&gt; commands.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Enabling/Disabling database servers in Windows is done through 'Windows Services'. It can be accessed by entering &lt;code&gt;service.msc&lt;/code&gt; in Windows Run (&lt;code&gt;Win+R&lt;/code&gt;).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Database Servers in Linux
&lt;/h3&gt;

&lt;h4&gt;
  
  
  PostgreSQL Server in WSL
&lt;/h4&gt;

&lt;p&gt;Most of the Linux distribution already have source for installing Postgres packages.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;postgresql postgresql-client postgresql-client-common postgresql-common postgresql-contrib &lt;span class="nt"&gt;-y&lt;/span&gt;
psql &lt;span class="nt"&gt;--version&lt;/span&gt; &lt;span class="c"&gt;# to confirm installation&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;service postgresql start &lt;span class="c"&gt;# replace ending by stop to stop server, restart to restart server&lt;/span&gt;

&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; postgres psql &lt;span class="c"&gt;# to access Postges via command line (both in Linux)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;TIP:&lt;/strong&gt; can check the status of your services in Linux using &lt;code&gt;sudo service --status-all&lt;/code&gt; in the shell.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Febl6u2f0z9glod52yb8j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Febl6u2f0z9glod52yb8j.png" alt="Image description" width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the expected output after proper installation.&lt;/p&gt;

&lt;p&gt;To fix connection refused issue, here's the &lt;a href="https://stackoverflow.com/questions/45707319/pgadmin-on-windows-10-with-postgres-when-installed-via-bash-on-ubuntu-on-windows" rel="noopener noreferrer"&gt;workaround&lt;/a&gt; for it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; postgres psql &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'SHOW config_file'&lt;/span&gt; &lt;span class="c"&gt;# to locate config file&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you find the file, change the &lt;code&gt;listen_addresses&lt;/code&gt; to &lt;code&gt;*&lt;/code&gt; in &lt;code&gt;postgresql.conf&lt;/code&gt;, the restart Postgres by &lt;code&gt;sudo service postgresql restart&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;Also, update this in &lt;code&gt;pg_hba.conf&lt;/code&gt; to allow remote auth from Windows host.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
host  all       all       0.0.0.0/0            scram-sha-256
host  all       all       ::/0              scram-sha-256
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a less recommended method (for security) you can try in case above methods still don't let you connect in Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#newline
host    all             all             all                     trust
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's the detail &lt;a href="https://www.cybertec-postgresql.com/en/postgresql-on-wsl2-for-windows-install-and-setup/" rel="noopener noreferrer"&gt;article&lt;/a&gt; if you like to dig deeper into this. Also, check &lt;a href="https://www.rosehosting.com/blog/how-to-install-phppgadmin-on-ubuntu-20-04/" rel="noopener noreferrer"&gt;this&lt;/a&gt; for better insights.&lt;/p&gt;

&lt;h4&gt;
  
  
  MariaDB Server in WSL
&lt;/h4&gt;

&lt;p&gt;Here's the command enough to setup MariaDB server in WSL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;mariadb-server
&lt;span class="nb"&gt;sudo &lt;/span&gt;service mariadb start
&lt;span class="nb"&gt;sudo &lt;/span&gt;mysql &lt;span class="c"&gt;# to access the database CLI&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To change port, edit the configuration file &lt;code&gt;/etc/mysql/my.cnf&lt;/code&gt; that suits your needs.&lt;/p&gt;

&lt;p&gt;This &lt;a href="https://stackoverflow.com/questions/64320136/error-2002-hy000-cant-connect-to-mysql-server-on-192-168-1-15-115" rel="noopener noreferrer"&gt;StackOverflow thread&lt;/a&gt; suggests to edit the file &lt;code&gt;/etc/mysql/mariadb.conf.d/50-server.cnf&lt;/code&gt;, replace &lt;code&gt;bind-address = 127.0.0.1&lt;/code&gt; (localhost) by &lt;code&gt;bind-address = 0.0.0.0&lt;/code&gt; or &lt;code&gt;*&lt;/code&gt; (all). After you restart the server by &lt;code&gt;$ sudo service mariadb restart&lt;/code&gt;, you may be able to login your Linux database server in Windows client too with proper credentials (username, password) configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Database Clients
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Database Clients in Windows accessing database in both Windows &amp;amp; WSL
&lt;/h3&gt;

&lt;p&gt;We need to enable firewall for both in and out bound in Windows (for working across). To access, we need to find IP of VM in which the database server is active, the we can get along by mentioning host, port, user and password from any database client. This process if enough for the well-configured server.&lt;/p&gt;

&lt;p&gt;Here's the sample &lt;code&gt;psql&lt;/code&gt; command to log in for &lt;code&gt;dev&lt;/code&gt; user, to avoid conflict:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;psql &lt;span class="nt"&gt;-U&lt;/span&gt; dev &lt;span class="nt"&gt;-d&lt;/span&gt; postgres &lt;span class="nt"&gt;-h&lt;/span&gt; 192.168.176.181 &lt;span class="nt"&gt;-p&lt;/span&gt; 5432 &lt;span class="c"&gt;# server host IP&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In pgAdmin mention host IP address from &lt;code&gt;ip route&lt;/code&gt; and add other credentials to access WSL based Postgres server.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvhhihi1wu991360zse0j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvhhihi1wu991360zse0j.png" alt="Image description" width="800" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To access MariaDB in Windows using XAMPP &lt;code&gt;phpmyadmin&lt;/code&gt;, create a user in WSL MariaDB server (say &lt;code&gt;wsl_user&lt;/code&gt; with no password) and grant &lt;code&gt;ALL PRIVELEDGES&lt;/code&gt;. Now, you can go to login portal for &lt;code&gt;phpmyadmin&lt;/code&gt; and find &lt;code&gt;Debian&lt;/code&gt; in server version.&lt;/p&gt;

&lt;p&gt;Here, &lt;code&gt;mysql&lt;/code&gt; accesses the server in Windows in the first one, and in the second one, the server is natively installed within WSL. Therefore, both side accessed.&lt;/p&gt;

&lt;p&gt;In phpMyAdmin, you also need to change its &lt;code&gt;config.inc.php&lt;/code&gt; on &lt;code&gt;$cfg['Servers'][$i]['auth_type'] = 'config';&lt;/code&gt; to &lt;code&gt;cookie&lt;/code&gt; to get login page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F72irt2qvv13wocd3hfe9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F72irt2qvv13wocd3hfe9.png" alt="Image description" width="800" height="206"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's a sample showing access in Command Line (Database server is in Windows):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4h7jqnrhd6z217a7zypl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4h7jqnrhd6z217a7zypl.png" alt="Image description" width="800" height="547"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Database Clients in WSL accessing database in both Windows and WSL
&lt;/h3&gt;

&lt;p&gt;For psql in WSL to access Windows database, you need to find host IP (using &lt;code&gt;ip route&lt;/code&gt; for example) and then hit the command below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;psql &lt;span class="nt"&gt;-h&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;HOST ADDRESS] &lt;span class="nt"&gt;-U&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;USER NAME]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsl8mr9movxq29ixtj3p7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsl8mr9movxq29ixtj3p7.png" alt="Image description" width="800" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For MariaDB client access, it is simple as &lt;code&gt;mysql&lt;/code&gt; like &lt;code&gt;mysql -u wsl_root -p -h 172.24.xxx.xxx&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjyebgwkmplasz4vyd2oi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjyebgwkmplasz4vyd2oi.png" alt="Image description" width="800" height="586"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To make things simpler, simply create new user and access through it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;USER&lt;/span&gt; &lt;span class="s1"&gt;'wsl_root'&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="s1"&gt;'localhost'&lt;/span&gt; &lt;span class="n"&gt;IDENTIFIED&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="s1"&gt;'password'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;ALL&lt;/span&gt; &lt;span class="k"&gt;PRIVILEGES&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="s1"&gt;'wsl_root'&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="s1"&gt;'localhost'&lt;/span&gt; &lt;span class="k"&gt;WITH&lt;/span&gt; &lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;OPTION&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;USER&lt;/span&gt; &lt;span class="s1"&gt;'wsl_root'&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="s1"&gt;'%'&lt;/span&gt; &lt;span class="n"&gt;IDENTIFIED&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="s1"&gt;'password'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;ALL&lt;/span&gt; &lt;span class="k"&gt;PRIVILEGES&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="s1"&gt;'wsl_root'&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="s1"&gt;'%'&lt;/span&gt; &lt;span class="k"&gt;WITH&lt;/span&gt; &lt;span class="k"&gt;GRANT&lt;/span&gt; &lt;span class="k"&gt;OPTION&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;FLUSH&lt;/span&gt; &lt;span class="k"&gt;PRIVILEGES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can get more details in these blogs: &lt;a href="https://dev.to/hymanzhan/setting-up-wsl-2-for-web-development-3202"&gt;https://dev.to/hymanzhan/setting-up-wsl-2-for-web-development-3202&lt;/a&gt; and &lt;a href="https://dev.to/qviper/connecting-mysql-server-in-windows-machine-from-wsl-4pf1"&gt;https://dev.to/qviper/connecting-mysql-server-in-windows-machine-from-wsl-4pf1&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tips
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Complete Postgres removal
&lt;/h3&gt;

&lt;p&gt;Here's the &lt;a href="https://askubuntu.com/questions/32730/how-to-remove-postgres-from-my-installation" rel="noopener noreferrer"&gt;solution&lt;/a&gt; in detail for the process:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remove Postgres from apt (or from other installation if any):
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nt"&gt;--purge&lt;/span&gt; remove postgresql postgresql-&lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Verify if packages are uninstalled:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  dpkg &lt;span class="nt"&gt;-l&lt;/span&gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;postgres
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's the &lt;a href="https://askubuntu.com/questions/32730/how-to-remove-postgres-from-my-installation" rel="noopener noreferrer"&gt;solution&lt;/a&gt; in detail for the process:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remove Postgres from apt (or from other installation if any):
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nt"&gt;--purge&lt;/span&gt; remove postgresql postgresql-&lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Verify if packages are uninstalled:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  dpkg &lt;span class="nt"&gt;-l&lt;/span&gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;postgres
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here, you must find this to be empty. If not, remove them manually.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remove the configuration folders below:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nb"&gt;sudo rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; /var/lib/postgresql/
  &lt;span class="nb"&gt;sudo rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; /var/log/postgresql/
  &lt;span class="nb"&gt;sudo rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; /etc/postgresql/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Finally, remove &lt;code&gt;postgres&lt;/code&gt; user:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="nb"&gt;sudo &lt;/span&gt;deluser postgres
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Work-around for error in &lt;code&gt;phpmyadmin&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Grant all permissions to &lt;code&gt;root&lt;/code&gt; and &lt;code&gt;pma&lt;/code&gt; and remove password too:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;USER&lt;/span&gt; &lt;span class="s1"&gt;'pma'&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="s1"&gt;'localhost'&lt;/span&gt; &lt;span class="n"&gt;IDENTIFIED&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;PASSWORD&lt;/span&gt; &lt;span class="k"&gt;FOR&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;localhost&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/windows/wsl/networking" rel="noopener noreferrer"&gt;https://docs.microsoft.com/en-us/windows/wsl/networking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.enterprisedb.com/postgres-tutorials/how-use-postgresql-django" rel="noopener noreferrer"&gt;https://www.enterprisedb.com/postgres-tutorials/how-use-postgresql-django&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.enterprisedb.com/blog/how-to-secure-postgresql-security-hardening-best-practices-checklist-tips-encryption-authentication-vulnerabilities" rel="noopener noreferrer"&gt;https://www.enterprisedb.com/blog/how-to-secure-postgresql-security-hardening-best-practices-checklist-tips-encryption-authentication-vulnerabilities&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.enterprisedb.com/postgresql-tutorial-resources-training" rel="noopener noreferrer"&gt;https://www.enterprisedb.com/postgresql-tutorial-resources-training&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/hymanzhan/setting-up-wsl-2-for-web-development-3202#install-database-in-wsl"&gt;https://dev.to/hymanzhan/setting-up-wsl-2-for-web-development-3202#install-database-in-wsl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/questions/56824788/how-to-connect-to-windows-postgres-database-from-wsl" rel="noopener noreferrer"&gt;https://stackoverflow.com/questions/56824788/how-to-connect-to-windows-postgres-database-from-wsl&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>postgres</category>
      <category>mariadb</category>
    </item>
  </channel>
</rss>
