<?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: Andres 🐍 in 🇨🇦</title>
    <description>The latest articles on DEV Community by Andres 🐍 in 🇨🇦 (@zodman).</description>
    <link>https://dev.to/zodman</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%2F171438%2F0ee0f4f0-9e8c-4146-983d-e28be9c6eb92.jpeg</url>
      <title>DEV Community: Andres 🐍 in 🇨🇦</title>
      <link>https://dev.to/zodman</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zodman"/>
    <language>en</language>
    <item>
      <title>Don't do unit test in frontend, Getting a Code Coverage report With Selenium</title>
      <dc:creator>Andres 🐍 in 🇨🇦</dc:creator>
      <pubDate>Tue, 18 Jul 2023 18:57:55 +0000</pubDate>
      <link>https://dev.to/zodman/dont-do-unit-test-in-frontend-getting-a-code-coverage-report-with-selenium-2k3</link>
      <guid>https://dev.to/zodman/dont-do-unit-test-in-frontend-getting-a-code-coverage-report-with-selenium-2k3</guid>
      <description>&lt;p&gt;SOURCE: &lt;a href="https://opensrc.mx/posts/getting-a-code-coverage-report-with-selenium/"&gt;https://opensrc.mx/posts/getting-a-code-coverage-report-with-selenium/&lt;/a&gt; and better formatted&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;The code coverage always comes with unit-test because it is something you put after doing it.&lt;/p&gt;

&lt;p&gt;You can get a percentage of the code what was tested. If all the conditionals paths included in the code was cover.&lt;/p&gt;

&lt;p&gt;I was viewing youtube when this video showed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=C8g5X4vCZJA"&gt;https://www.youtube.com/watch?v=C8g5X4vCZJA&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;HolyMolly, from a e2e test you can check the coverage part of the frontend. I know doing unit-test from front-end it's hard because you have to cover every component. But with e2e you can get the same result of the unit-test and get a coverage.&lt;/p&gt;

&lt;p&gt;It's like the missing part from a integration testing in the frontend.&lt;/p&gt;

&lt;p&gt;This is amazing.. But does it work for only cypress ? &lt;em&gt;What about Selenium?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I'm a advocate of selenium, because my first experiments with it was spamming Facebook groups, with a selenium script.&lt;/p&gt;

&lt;p&gt;At the end I get the way to implement code coverage on e2e testing with Selenium. Here the recipe&lt;/p&gt;

&lt;h2&gt;
  
  
  1.- Instrument the javascript code and get the &lt;code&gt;__coverage__&lt;/code&gt; object
&lt;/h2&gt;

&lt;p&gt;If you have written unittest with javascript you know the tool called&lt;br&gt;
&lt;a href="https://istanbul.js.org/"&gt;Istanbul&lt;/a&gt; it is the tool what do the&lt;br&gt;
magic behind the coverage. The way that it works is  &lt;em&gt;creating a wrapper&lt;br&gt;
of all code&lt;/em&gt;  and register the execution path of&lt;br&gt;
javascript.&lt;/p&gt;

&lt;p&gt;When your js code is wrapped is called &lt;strong&gt;Instrumented Code&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;After the execution of the Instrumented code, you will get a &lt;code&gt;__coverage__&lt;/code&gt;&lt;br&gt;
javacript object with all the executed path and percentage of coverage.&lt;/p&gt;

&lt;p&gt;Therefore if you have a nextjs project or vanilla javascript(a simple js) you&lt;br&gt;
have to instrument the files to get the &lt;code&gt;__coverage__&lt;/code&gt; variable.&lt;/p&gt;

&lt;p&gt;There isn't a simple way to do this, could be variable according of the situation.&lt;/p&gt;

&lt;p&gt;If you use Nextjs projects &lt;a href="https://github.com/kwonoj/swc-plugin-coverage-instrument"&gt;SWC-coverage-instrument&lt;/a&gt; works good. For getting it working, depends of nextjs version, the package needs to be downgraded.&lt;/p&gt;

&lt;p&gt;Let me know by twtter &lt;a href="https://twitter.com/zodman"&gt;@zodman&lt;/a&gt; if you like a little tutorial how implement this.&lt;/p&gt;
&lt;h2&gt;
  
  
  2.- With the code instrumented execute the e2e test.
&lt;/h2&gt;

&lt;p&gt;Here comes the good part where you have fired the e2e script with selenium. I'm a python dev, &lt;br&gt;
I used &lt;code&gt;unittest.TestCase&lt;/code&gt; to implement my selenium testcases.&lt;/p&gt;

&lt;p&gt;After finishing the tests you will get &lt;code&gt;window.__coverage__&lt;/code&gt; variable with all the code executed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;tearDown&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;r&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;driver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;execute_script&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"return window.__coverage__"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s"&gt;"coverage_&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s"&gt;"w"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The reason because I saved this object like a json. It is because that variable contains all the coverage code executed.&lt;/p&gt;

&lt;p&gt;I need recollect all coverages like pokemon, to be analyzed by istanbul later.&lt;/p&gt;

&lt;h2&gt;
  
  
  3.- Analyze coverage json files and get the report.
&lt;/h2&gt;

&lt;p&gt;Now with files like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;coverage_test_todo.json
coverage_test_addtodo.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I move all the files where &lt;strong&gt;the frontend project was instrumented&lt;/strong&gt; because there is the source code is located and link with the instrumented code, and put behind &lt;code&gt;.nyc_output&lt;/code&gt; directory&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;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; .nyc_output
&lt;span class="nb"&gt;mv&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt;.json .nyc_output
npx &lt;span class="nt"&gt;-y&lt;/span&gt; nyc report

&lt;span class="nt"&gt;--------------&lt;/span&gt;|---------|----------|---------|---------|------------------------
File          | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line &lt;span class="c"&gt;#s       &lt;/span&gt;
&lt;span class="nt"&gt;--------------&lt;/span&gt;|---------|----------|---------|---------|------------------------
All files     |   72.91 |    69.23 |   63.26 |   72.53 |                         
 app.jsx      |      80 |    76.47 |    64.7 |      80 | 58-59,67-84,95-97       
 footer.jsx   |     100 |       75 |     100 |     100 | 6                       
 todoItem.jsx |   34.61 |    41.17 |   55.55 |   34.61 | 16-41,72-74             
 todoModel.js |   66.66 |       50 |      50 |   65.71 | 46-50,64-68,72-76,80-84 
 utils.js     |     100 |    90.47 |     100 |     100 | 34-42                   
&lt;span class="nt"&gt;--------------&lt;/span&gt;|---------|----------|---------|---------|------------------------
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Db1ARCrc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://imgur.com/CEdaUBp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Db1ARCrc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://imgur.com/CEdaUBp.png" alt="HTML report" width="759" height="781"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;PUM! 💥💥💥💥💥💥 &lt;/p&gt;

&lt;p&gt;Code Repository: &lt;a href="https://github.com/zodman/code-coverage-with-selenium"&gt;https://github.com/zodman/code-coverage-with-selenium&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;more details here or extend the article: &lt;a href="https://opensrc.mx/posts/getting-a-code-coverage-report-with-selenium/"&gt;https://opensrc.mx/posts/getting-a-code-coverage-report-with-selenium/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>selenium</category>
      <category>frontend</category>
      <category>unittest</category>
      <category>javascript</category>
    </item>
    <item>
      <title>anybar - check if command has finished, succeed or failed</title>
      <dc:creator>Andres 🐍 in 🇨🇦</dc:creator>
      <pubDate>Mon, 31 Oct 2022 02:47:18 +0000</pubDate>
      <link>https://dev.to/zodman/anybar-check-if-command-has-finished-succeed-or-failed-2hjf</link>
      <guid>https://dev.to/zodman/anybar-check-if-command-has-finished-succeed-or-failed-2hjf</guid>
      <description>&lt;p&gt;Original Article: &lt;a href="https://opensrc.mx/posts/anybar/" rel="noopener noreferrer"&gt;https://opensrc.mx/posts/anybar/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hey fox, with this post I will start writing in plain English.&lt;/p&gt;

&lt;p&gt;Anybar it's a desktop-app what I have in my arsenal and I have used day by day.&lt;/p&gt;

&lt;p&gt;There are versions for linux, windows and Mac.&lt;/p&gt;

&lt;p&gt;It's like a semaphore that you can control, only sending colours to a port.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Change the colour of an AnyBar
# Usage:
#   anybar &amp;lt;colour&amp;gt; &amp;lt;n&amp;gt;
#     Change the colour of the n'th AnyBar
#   anybar &amp;lt;colour&amp;gt;
#     Change the colour of this tab's AnyBar
#   anybar
#     Change the colour of this tab's AnyBar to white (resetting it)
function anybar() {
  local COLOUR=${1-white}
  local OFFSET=${2:-$(_anybar_iterm_offset)}
  local ANYBAR_PORT=$((1738 + $OFFSET))
  echo -n $COLOUR | nc -4u -w0 127.0.0.1 ${ANYBAR_PORT}
}

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

&lt;/div&gt;



&lt;p&gt;I used to manage the long execution commands and saw how long it takes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
# Monitor a long-running command using AnyBar
# This sets AnyBar to orange whilst the command is running,
# then to green or red depending on whether the command succeeded or not
#
# Usage:
#   alias m=anybar_monitor
#   s &amp;lt;some command&amp;gt;
function anybar_monitor() {
  if [ $# -eq 0 ]; then
    anybar white
  else
    anybar orange
    $@

    local EXIT_STATUS=$?
    if [ $EXIT_STATUS -ne 0 ]; then
      anybar red
    else
      anybar green
    fi
    return $EXIT_STATUS
  fi
}

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

&lt;/div&gt;



&lt;p&gt;With this small snippet I can execute a command and see the status of the command&lt;br&gt;
from another desktop screen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FzWrCxLW.png" 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%2Fi.imgur.com%2FzWrCxLW.png" alt="anybar in Linux notify"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I like the minimalist approach of the command. Because with simple communication&lt;br&gt;
you can create an excellent development approach like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After a successful command you can play a sound with voice: "master your command
was successful"&lt;/li&gt;
&lt;li&gt;Monitor your local server for  development:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    while true
    do
        (echo &amp;gt;/dev/tcp/localhost/"$1") &amp;amp;&amp;gt;/dev/null &amp;amp;&amp;amp; anybar blue  || anybar exclamation
        sleep 1
    done
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In my case, if the server stop listening it's because an exception was executed. I&lt;br&gt;
need to check the output to see the problem.&lt;/p&gt;

&lt;p&gt;Or you can go further:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://camo.githubusercontent.com/15f986e49ce178f6775395dbedbad30f3fa240689ccd751628c238ba87724364/68747470733a2f2f7468756d62732e6766796361742e636f6d2f536c656570795361726361737469634375726c65772d73697a655f726573747269637465642e676966" class="article-body-image-wrapper"&gt;&lt;img src="https://camo.githubusercontent.com/15f986e49ce178f6775395dbedbad30f3fa240689ccd751628c238ba87724364/68747470733a2f2f7468756d62732e6766796361742e636f6d2f536c656570795361726361737469634375726c65772d73697a655f726573747269637465642e676966" alt="stripbar"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can create your anybar strip and control the lights from commands.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/htruong/stripbar" rel="noopener noreferrer"&gt;https://github.com/htruong/stripbar&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and here My guahiro proyect:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcontent.instructables.com%2FORIG%2FF89%2FL4RN%2FKLKVM0I7%2FF89L4RNKLKVM0I7.png%3Fauto%3Dwebp%26frame%3D1%26width%3D887%26fit%3Dbounds%26md%3D15feb5cc3c4ab909b8a1412bd53ee594" 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%2Fcontent.instructables.com%2FORIG%2FF89%2FL4RN%2FKLKVM0I7%2FF89L4RNKLKVM0I7.png%3Fauto%3Dwebp%26frame%3D1%26width%3D887%26fit%3Dbounds%26md%3D15feb5cc3c4ab909b8a1412bd53ee594"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.instructables.com/Wireless-Arduino-Traffic-Light/" rel="noopener noreferrer"&gt;https://www.instructables.com/Wireless-Arduino-Traffic-Light/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Who doesn't want this kind of semaphore when your CI didn't pass ?&lt;/p&gt;

</description>
      <category>cli</category>
      <category>linux</category>
      <category>anybar</category>
      <category>tools</category>
    </item>
    <item>
      <title>How to use JDownloader in headless mode and in remote server</title>
      <dc:creator>Andres 🐍 in 🇨🇦</dc:creator>
      <pubDate>Wed, 07 Sep 2022 04:41:27 +0000</pubDate>
      <link>https://dev.to/zodman/how-to-use-jdownloader-in-headless-mode-and-in-remote-server-3a8l</link>
      <guid>https://dev.to/zodman/how-to-use-jdownloader-in-headless-mode-and-in-remote-server-3a8l</guid>
      <description>&lt;p&gt;JDownloader it's a downloder files supported Dozen of file hosting websites like mega.nz fileupload.com etc etc ...&lt;/p&gt;

&lt;p&gt;if you a old pirate of internet you should know it. Because it's the only descent java application desktop i really know! And deserve spending my memory ram on it.&lt;/p&gt;

&lt;p&gt;Like a desktop app only can run locally using your actual speed. In countries of Latin America we can support medium Internet speed.&lt;/p&gt;

&lt;p&gt;The jDownloader have a web-application in my.jdownloader.org that use &lt;code&gt;&amp;lt;my-ipaddress&amp;gt;.mydns.jdownloader.org:33561&lt;/code&gt;, very rare because a lot of software in that kind, have integrated a daemon what serve the web application like qBitorrent or Transmission.&lt;/p&gt;

&lt;p&gt;Let's do the trick... For this I will need a cheap vps with java/openjdk installed and a ssh client.&lt;/p&gt;

&lt;p&gt;you should follow the tutorial showed here: &lt;a href="https://support.jdownloader.org/Knowledgebase/Article/View/install-jdownloader-on-nas-and-embedded-devices" rel="noopener noreferrer"&gt;https://support.jdownloader.org/Knowledgebase/Article/View/install-jdownloader-on-nas-and-embedded-devices&lt;/a&gt;&lt;/p&gt;

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

$ wget http://installer.jdownloader.org/JDownloader.jar
$ java -jar JDownloader.jar -norestart
....
|---------------------------Headless Information-------------------------------
|       MyJDownloader
|       Los datos de la cuenta de 'My.JDownloader' no son correctos.
|       Compruebe su Nombre de Usuario/Correo Electrónico y Contraseña!
|       Enter y -&amp;gt; Enter Logins
|       Enter n -&amp;gt; Exit JDownloader
y
|       Please Enter your MyJDownloader Email:
|&amp;gt;
|       Please Enter your MyJDownloader Password(not visible):
|&amp;gt;

|------------------------------------------------------------------------------



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

&lt;/div&gt;

&lt;p&gt;As you can see, the jdownloader will prompt a login, now it's when you go to &lt;a href="https://my.jdownloader.org" rel="noopener noreferrer"&gt;https://my.jdownloader.org&lt;/a&gt; and register an account with a email.&lt;/p&gt;

&lt;p&gt;introduce the same login in both side, on the website and the terminal.&lt;/p&gt;

&lt;p&gt;After doing that we will use a little trick called ssh tunnel. where you can redirect all your local connections to the server like simulating are running locally executing:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ssh ubuntu@myvps -L 33561:localhost:33561&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Doing that you have creating a connection from ipLocal:33561 to your ipaddressVps:33561 when you reload the &lt;a href="https://my.jdownloader.org" rel="noopener noreferrer"&gt;https://my.jdownloader.org&lt;/a&gt; will connect to &lt;code&gt;&amp;lt;my-ipaddress&amp;gt;.mydns.jdownloader.org:33561&lt;/code&gt; doing the same and PUM! You have your jdownloader using remotely.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Foo2egjm590fsl50w6jcb.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foo2egjm590fsl50w6jcb.png" alt="jdownloader remote"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The same trick works for windows using putty, only use 33561 instead of 8080.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fgsay1mb8x3i2b1pehgg4.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgsay1mb8x3i2b1pehgg4.png" alt="Putty with ssh tunnel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;** WARNING:&lt;/p&gt;

&lt;p&gt;take it very seriously this. Executing jdownloader remotely expose the port  33561 to internet what it mean anybody might connect to you without authentication and use jdownloader for download something malicious.&lt;/p&gt;

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

tcp        0      0 0.0.0.0:33561           0.0.0.0:*               LISTEN      3007624/java         off (0.00/0/0)



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

&lt;/div&gt;

</description>
      <category>java</category>
      <category>linux</category>
      <category>vps</category>
      <category>jdownloader</category>
    </item>
    <item>
      <title>Watch mega.nz videos with mpv</title>
      <dc:creator>Andres 🐍 in 🇨🇦</dc:creator>
      <pubDate>Fri, 26 Aug 2022 23:00:52 +0000</pubDate>
      <link>https://dev.to/zodman/watch-meganz-videos-with-mpv-4kj2</link>
      <guid>https://dev.to/zodman/watch-meganz-videos-with-mpv-4kj2</guid>
      <description>&lt;p&gt;yeap!, As you read videos hosted in mega.nz!&lt;/p&gt;

&lt;p&gt;I like watch anime videos and there are tons website sharing anime videos in mega.nz well, here a trick!&lt;/p&gt;

&lt;p&gt;with this command when megatools its downloading the file it passing to mpv very similar like streaming.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;megatools dl "https://mega.nz/#hashvideo" --path - | mpv -&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;the requirements are &lt;a href="https://megatools.megous.com/"&gt;megatools&lt;/a&gt; plus &lt;a href="https://mpv.io/"&gt;mpv&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wwEUARN8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/elwmn5927vej6uy7v0mk.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wwEUARN8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/elwmn5927vej6uy7v0mk.gif" alt="previe gfig" width="880" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>megatools</category>
      <category>mpv</category>
      <category>tools</category>
    </item>
    <item>
      <title>[Ask] For Server linux security is this enough ?</title>
      <dc:creator>Andres 🐍 in 🇨🇦</dc:creator>
      <pubDate>Tue, 16 Aug 2022 21:44:08 +0000</pubDate>
      <link>https://dev.to/zodman/ask-for-server-linux-security-is-this-enough--ja2</link>
      <guid>https://dev.to/zodman/ask-for-server-linux-security-is-this-enough--ja2</guid>
      <description>&lt;p&gt;Checking for&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;lastlog
last
/etc/passwd
chkrootkit
rkhunter
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's enough to check the server security ?&lt;/p&gt;

</description>
      <category>security</category>
      <category>linux</category>
      <category>bash</category>
    </item>
    <item>
      <title>Get always the last version of the github/gitlab software.</title>
      <dc:creator>Andres 🐍 in 🇨🇦</dc:creator>
      <pubDate>Thu, 28 Jul 2022 02:52:37 +0000</pubDate>
      <link>https://dev.to/zodman/get-always-the-last-version-of-the-githubgitlab-software-74n</link>
      <guid>https://dev.to/zodman/get-always-the-last-version-of-the-githubgitlab-software-74n</guid>
      <description>&lt;p&gt;Do you use a of software from github ? that not have a packaging system ?&lt;/p&gt;

&lt;p&gt;then lastversion its for you!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;lastversion apache/incubator-pagespeed-ngx 
#&amp;gt; 1.13.35.2

lastversion download apache/incubator-pagespeed-ngx 
#&amp;gt; downloaded incubator-pagespeed-ngx-v1.13.35.2-stable.tar.gz

lastversion download apache/incubator-pagespeed-ngx -o pagespeed.tar.gz 
#&amp;gt; downloads with chosen filename

lastversion https://transmissionbt.com/
#&amp;gt; 3.0

lastversion format "mysqld  Ver 5.6.51-91.0 for Linux"
#&amp;gt; 5.6.51
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If you follow the awesome cli seria I have wrotten with this software you can get the last version of all &lt;br&gt;
:&amp;gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/dvershinin" rel="noopener noreferrer"&gt;
        dvershinin
      &lt;/a&gt; / &lt;a href="https://github.com/dvershinin/lastversion" rel="noopener noreferrer"&gt;
        lastversion
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Find the latest release version of an arbitrary project
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;lastversion&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://github.com/dvershinin/lastversion/actions/workflows/pythonpackage.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/dvershinin/lastversion/actions/workflows/pythonpackage.yml/badge.svg" alt="Python package"&gt;&lt;/a&gt;
&lt;a href="https://badge.fury.io/py/lastversion" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/d81dea6db4b39d2e60e8429be896912e132fed9c9ced39828e65aaf74f9a2915/68747470733a2f2f62616467652e667572792e696f2f70792f6c61737476657273696f6e2e737667" alt="PyPI version"&gt;&lt;/a&gt;
&lt;a href="https://github.com/dvershinin/lastversion/releases" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ddae7f517404f7a436b8e1680d50d91a6313ee2033b49508afb6494b71e1169b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f64796e616d69632f6a736f6e3f75726c3d68747470732533412532462532466c61737476657273696f6e2d6170692e6765747061676573706565642e636f6d253246647665727368696e696e2532466c61737476657273696f6e2671756572793d76657273696f6e266c6162656c3d52656c65617365" alt="GitHub Release"&gt;&lt;/a&gt;
&lt;a href="https://lastversion.getpagespeed.com/en/latest/?badge=latest" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/bb91b954dbbd004697d15efad1f9ff4b29886d03f8b98822b84d491ff8983716/68747470733a2f2f72656164746865646f63732e6f72672f70726f6a656374732f6c61737476657273696f6e2f62616467652f3f76657273696f6e3d6c6174657374" alt="Documentation Status"&gt;&lt;/a&gt;
&lt;a href="https://www.codacy.com/manual/GetPageSpeed/lastversion?utm_source=github.com&amp;amp;utm_medium=referral&amp;amp;utm_content=dvershinin/lastversion&amp;amp;utm_campaign=Badge_Grade" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0b89b89dfa056ae3300f388bbb0934beb9d361687b736d68936bd6439b1f94f1/68747470733a2f2f6170692e636f646163792e636f6d2f70726f6a6563742f62616467652f47726164652f3338306533613338646335323431313262346463666330343932643562383136" alt="Codacy Badge"&gt;&lt;/a&gt;
&lt;a href="https://www.codacy.com/gh/dvershinin/lastversion/dashboard?utm_source=github.com&amp;amp;utm_medium=referral&amp;amp;utm_content=dvershinin/lastversion&amp;amp;utm_campaign=Badge_Coverage" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/8d62ea4f98dfe979403078923d37c38a98f513c6443e89af843f2058703f1254/68747470733a2f2f6170702e636f646163792e636f6d2f70726f6a6563742f62616467652f436f7665726167652f3338306533613338646335323431313262346463666330343932643562383136" alt="Codacy Badge"&gt;&lt;/a&gt;
&lt;a href="https://www.buymeacoffee.com/dvershinin" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/03b104064cbf385c708bc3d38bd39be69acde77a18233d71250ec07410887992/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f64796e616d69632f6a736f6e3f636f6c6f723d626c7565266c6162656c3d4275792532306d6525323061253230436f66666565267072656669783d2532332671756572793d6e6578745f74696d655f746f74616c2675726c3d68747470732533412532462532467777772e6765747061676573706565642e636f6d2532466275796d6561636f666665652e6a736f6e266c6f676f3d6275796d6561636f66666565" alt="Buy Me a Coffee"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/adcfe78e1b8a721cfbaa808c7c5fe5663cf3663ff18c768d4cb2dcee917e9893/68747470733a2f2f7777772e6765747061676573706565642e636f6d2f696d672f6c61737476657273696f6e2e676966"&gt;&lt;img src="https://camo.githubusercontent.com/adcfe78e1b8a721cfbaa808c7c5fe5663cf3663ff18c768d4cb2dcee917e9893/68747470733a2f2f7777772e6765747061676573706565642e636f6d2f696d672f6c61737476657273696f6e2e676966" alt="Using lastversion in terminal"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;English | &lt;a href="https://github.com/dvershinin/lastversionREADME-ZH-CN.md" rel="noopener noreferrer"&gt;简体中文&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A tiny command-line utility that helps to answer a simple question:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What is the latest &lt;em&gt;stable&lt;/em&gt; version for a project?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;... and, optionally, download/install it.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;lastversion&lt;/code&gt; allows finding well-formatted, the latest release version of a project from these
supported locations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/dvershinin/lastversion/wiki/GitHub-specifics" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitLab&lt;/li&gt;
&lt;li&gt;BitBucket&lt;/li&gt;
&lt;li&gt;PyPI&lt;/li&gt;
&lt;li&gt;Mercurial&lt;/li&gt;
&lt;li&gt;SourceForge&lt;/li&gt;
&lt;li&gt;Wikipedia&lt;/li&gt;
&lt;li&gt;WordPress plugin directory&lt;/li&gt;
&lt;li&gt;Arbitrary software sites which publish releases in RSS/ATOM feeds&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Why you need &lt;code&gt;lastversion&lt;/code&gt;
&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;In general, quite many project authors complicate finding the latest version by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Creating a formal release that is clearly a Release Candidate (&lt;code&gt;rc&lt;/code&gt; in tag), but forgetting to
mark it as a pre-release&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Putting extraneous text in release tag e.g. &lt;code&gt;release-1.2.3&lt;/code&gt; or &lt;code&gt;name-1.2.3-2019&lt;/code&gt; anything fancy
like that&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Putting or not putting the &lt;code&gt;v&lt;/code&gt; prefix inside release tags. Today yes, tomorrow not. I'm not
consistent about it myself :)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Switching from one version format to another, e.g. &lt;code&gt;v20150121&lt;/code&gt; to &lt;code&gt;v2.0.1&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is no…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/dvershinin/lastversion" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>software</category>
      <category>linux</category>
      <category>cli</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I don't use Makefile anymore! instead I use bake-cli</title>
      <dc:creator>Andres 🐍 in 🇨🇦</dc:creator>
      <pubDate>Sun, 17 Jul 2022 02:16:17 +0000</pubDate>
      <link>https://dev.to/zodman/i-dont-use-makefile-anymore-instead-i-use-bake-cli-4pm7</link>
      <guid>https://dev.to/zodman/i-dont-use-makefile-anymore-instead-i-use-bake-cli-4pm7</guid>
      <description>&lt;p&gt;before know about bake-cli I'm do a lot of makefiles.. Because it's oldschool and because you could define task to execute easily!&lt;/p&gt;

&lt;p&gt;And its great, then I find out fabric and invoke, OH my good! I felt in :love: I start a writing task in python for my local development. But I miss the a lot the simpliest of the makefiles.&lt;/p&gt;

&lt;p&gt;But the makefiles isn't create to execute tasks, it was created and designed to compile code.&lt;/p&gt;

&lt;p&gt;Then I ever miss in makefiles the possibility of run bash scripting inside.&lt;/p&gt;

&lt;p&gt;The same feeling kennethreitz had.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The problem with doing this is that you can't use familiar bash–isms when doing so, as GNU Make doesn't use the familiar Bash syntax, nor does it allow for simple ad–hoc use of arbitrary scripting languages (e.g. Python).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Therefore bake-cli born.&lt;/p&gt;

&lt;p&gt;You create a Bakefile and put the task inside with bash power!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ cat Bakefile                                                $ bake install
install: install/node install/python                            + Executing install/node:
    echo 'All ready!'                                           |  yarn install v1.17.3
install/full: install/system install                            |  info No lockfile found.
install/python: @skip:key=Pipfile.lock                          |  [1/4] Resolving packages...
    pipenv install                                              |  [2/4] Fetching packages...
install/node: @skip:key=yarn.lock                               |  [3/4] Linking dependencies...
    yarn install                                                |  [4/4] Building fresh packages...
install/system: @confirm                                        |  success Saved lockfile.
    brew install pipenv yarn                                    |  Done in 0.05s.
                                                                + Executing install/python:
python/format:                                                  |  Installing dependencies from …
    black .                                                     + Executing install:
                                                                |  All ready!
utils/argv:                                                     + Done.
    set -u &amp;amp;&amp;amp; echo "$HELLO: $@"                                 
                                                                Rinse and repeat…
utils/deploy: @confirm:secure                 
    exit 0                                              

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

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Scrollme right&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You will speedout your development with this! replace the makefiles&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/kennethreitz"&gt;
        kennethreitz
      &lt;/a&gt; / &lt;a href="https://github.com/kennethreitz/bake"&gt;
        bake
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Bake — the strangely familiar workflow utility.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;pre&gt;&lt;a rel="noopener noreferrer" href="https://github.com/kennethreitz/bake/blob/master/ext/bake.png?raw=true"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eWv9L4PW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/kennethreitz/bake/raw/master/ext/bake.png%3Fraw%3Dtrue"&gt;&lt;/a&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;$ &lt;strong&gt;bake&lt;/strong&gt; — a s☿rangely familiar workflow utility.            &lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;p&gt;~ under development ~  &lt;/p&gt;
&lt;div&gt;
&lt;code&gt;$ &lt;strong&gt;cat Bakefile&lt;/strong&gt;                                                $ &lt;strong&gt;bake install&lt;/strong&gt;
&lt;strong&gt;install&lt;/strong&gt;: install/node install/python                            + &lt;strong&gt;Executing install/node&lt;/strong&gt;
    echo 'All ready!'                                           |  yarn install v1.17.3
&lt;strong&gt;install/full&lt;/strong&gt;: install/system install                            |  info No lockfile found
&lt;strong&gt;install/python&lt;/strong&gt;: @skip:key=Pipfile.lock                          |  [1/4] Resolving packages...
    pipenv install                                              |  [2/4] Fetching packages...
&lt;strong&gt;install/node&lt;/strong&gt;: @skip:key=yarn.lock                               |  [3/4] Linking dependencies...
    yarn install                                                |  [4/4] Building fresh packages...
&lt;strong&gt;install/system&lt;/strong&gt;: @confirm                                        |  success Saved lockfile.
    brew install pipenv yarn                                    |  Done in 0.05s.
                                                                + &lt;strong&gt;Executing install/python&lt;/strong&gt;:
&lt;strong&gt;python/format&lt;/strong&gt;:                                                  |  Installing dependencies from …
    black .                                                     + &lt;strong&gt;Executing install&lt;/strong&gt;:
                                                                |  All ready!
&lt;strong&gt;utils/argv&lt;/strong&gt;:                                                     + &lt;strong&gt;Done&lt;/strong&gt;.
    set -u &amp;amp;&amp;amp; echo "$HELLO: $@"                                 
                                                                Rinse and repeat…
&lt;strong&gt;utils/deploy&lt;/strong&gt;: @confirm:secure                 
    exit 0&lt;/code&gt;                                              
    &lt;/div&gt;                                                     
&lt;/pre&gt;
&lt;p&gt;~ &lt;a href="https://github.com/kennethreitz/bake/blob/master/Bakefile"&gt;see &lt;strong&gt;bake&lt;/strong&gt;'s own &lt;code&gt;&lt;strong&gt;Bakefile&lt;/strong&gt;&lt;/code&gt;&lt;/a&gt; ~            &lt;/p&gt;
&lt;h2&gt;
What's in the oven?&lt;/h2&gt;
&lt;ul&gt;
    &lt;li&gt;A &lt;code&gt;Bakefile&lt;/code&gt;, which &lt;strong&gt;looks&lt;/strong&gt; and &lt;strong&gt;feels&lt;/strong&gt; like the good parts of a &lt;code&gt;&lt;strong&gt;Makefile&lt;/strong&gt;&lt;/code&gt;.&lt;/li&gt;
    &lt;li&gt;Except…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/kennethreitz/bake"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Its a nodejs version too of it.&lt;/p&gt;

</description>
      <category>awesome</category>
      <category>cli</category>
      <category>bash</category>
      <category>makefile</category>
    </item>
    <item>
      <title>awesome cli that you didn't know, replacement of dbeaver</title>
      <dc:creator>Andres 🐍 in 🇨🇦</dc:creator>
      <pubDate>Fri, 15 Jul 2022 03:39:59 +0000</pubDate>
      <link>https://dev.to/zodman/awesome-cli-that-you-didnt-know-replacement-of-dbeaver-2jeh</link>
      <guid>https://dev.to/zodman/awesome-cli-that-you-didnt-know-replacement-of-dbeaver-2jeh</guid>
      <description>&lt;p&gt;Always I'm looking to replace my desktop apps with a terminal application. Now take time to search some sql clients to connect the most famous databases: mysql , postgresql and sqlite.&lt;/p&gt;

&lt;p&gt;If you are tired about use the dbeaver, well I will showup 3 tools can be a replacement of database explorer.&lt;/p&gt;

&lt;h2&gt;
  
  
  The history
&lt;/h2&gt;

&lt;p&gt;It's very interesting the history of this 3 tools:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Earlier this year I wrote pgcli to scratch my own itch. I realized that most of the work that went into that project was not specific to Postgres database. I received a few requests from MySQL users requesting a MySQL equivalent of pgcli. I kept procrastinating for a few months and finally decided to launch a kickstarter campaign to fund the development time. That's this project came into existence. But if you'd like to know why I bothered to write a auto-completing repl with syntax highlighting, here's the reason:&lt;br&gt;
I'm a huge fan of CLIs. Especially REPLs. When I first encountered BPython, I fell in love with it. BPython is a Python REPL that has auto-completion, syntax-highlighting and displays the docstring of functions as you type. Once you get used to that level of pampering, all other REPLs start to look like Dumb Terminals.&lt;br&gt;
When I started using psql for interacting with my Postgres database, I yearned for a BPython equivalent for psql.&lt;br&gt;
One fine day I got a twitter DM from Jonathan Slenders asking me if I'd be interested in trying a new Python library that he's working on called Python-Prompt-Toolkit. This library provided a way to write CLIs without having to deal with ncurses and had the requisite tools for doing auto-completion and syntax-highlighting. So I jumped at the opportunity to try it out. After I got myself familiarized, I started writing pgcli to scratch my own itch.&lt;br&gt;
So this app exists because Jonathan was kind enough to request my feedback. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Feature:
&lt;/h2&gt;

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

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uYT4uAJG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u7cqr8ife4mzvpjj7bou.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uYT4uAJG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u7cqr8ife4mzvpjj7bou.png" alt="AutoCompletation" width="880" height="318"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qBLL-eBB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sezi3yzbcf5phqchzxeq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qBLL-eBB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sezi3yzbcf5phqchzxeq.png" alt="AutoCompletation2" width="880" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Etgthzkj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4n19h61uniouqxvnfrnm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Etgthzkj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4n19h61uniouqxvnfrnm.png" alt="highlight" width="880" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;pip install mycli pgcli litecli&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  mycli
&lt;/h2&gt;

&lt;p&gt;MyCLI is a command line interface for MySQL, MariaDB, and Percona with auto-completion and syntax highlighting. &lt;/p&gt;

&lt;h2&gt;
  
  
  pgcli
&lt;/h2&gt;

&lt;p&gt;Pgcli is a command line interface for Postgres with auto-completion and syntax highlighting. &lt;/p&gt;

&lt;h2&gt;
  
  
  litecli
&lt;/h2&gt;

&lt;p&gt;A command line interface for SQLite with auto-completion and syntax highlighting.&lt;/p&gt;

&lt;p&gt;OK! now it's time to drop your dbeaver and look more hacker in the terminal&lt;/p&gt;

</description>
      <category>mysql</category>
      <category>postgres</category>
      <category>sqlite</category>
      <category>programming</category>
    </item>
    <item>
      <title>How integrate jira with my git branches with python</title>
      <dc:creator>Andres 🐍 in 🇨🇦</dc:creator>
      <pubDate>Fri, 15 Jul 2022 03:18:50 +0000</pubDate>
      <link>https://dev.to/zodman/how-integrate-jira-with-my-git-branches-with-python-4i8b</link>
      <guid>https://dev.to/zodman/how-integrate-jira-with-my-git-branches-with-python-4i8b</guid>
      <description>&lt;p&gt;At work I have some development ruls like:&lt;/p&gt;

&lt;p&gt;Every change on code should be comes with a Pull request and the branch name should be named like ID of jira.&lt;/p&gt;

&lt;p&gt;Then we have branches like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  $ git branch -a
  remotes/origin/DEV-118
  remotes/origin/DEV-120
  remotes/origin/DEV-123
  remotes/origin/DEV-130
  remotes/origin/DEV-133
  remotes/origin/DEV-137
  remotes/origin/DEV-141
....
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;with that you don't know each branch what is it ... then lets make some fun:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;With this you will receive:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;DEV-XXX &amp;lt;Assigned Name&amp;gt; &amp;lt;Status&amp;gt; &amp;lt;Title&amp;gt; &amp;lt;url&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now you can lost between branches and jira issues :&amp;gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GC1aLMAx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/unwm4dmza9p3d6cd3v4g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GC1aLMAx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/unwm4dmza9p3d6cd3v4g.png" alt="output" width="880" height="106"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  is this the integration ? comeon zodman! show me more!
&lt;/h1&gt;

&lt;p&gt;Ok ok Imagine you have assigned the ticket DEV-foo1&lt;/p&gt;

&lt;p&gt;In git you do:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git checkout -b DEV-foo1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;and start hacking .... when you finish and everything looks good. you should create the pull request then you type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
gh pr create -B dev --title "$(jira-list | grep $(git rev-parse --abbrev-ref HEAD))"

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

&lt;/div&gt;



&lt;p&gt;PUM! you created a pull request with ID and title from jira. &lt;/p&gt;

&lt;p&gt;if you don't know what is &lt;a href="https://cli.github.com/"&gt;gh its a github cli&lt;/a&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>git</category>
      <category>jira</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Implement a antivirus clamav scanner with rest api in dokku</title>
      <dc:creator>Andres 🐍 in 🇨🇦</dc:creator>
      <pubDate>Tue, 12 Jul 2022 03:26:48 +0000</pubDate>
      <link>https://dev.to/zodman/implement-a-antivirus-clamav-scanner-with-rest-api-in-dokku-g6h</link>
      <guid>https://dev.to/zodman/implement-a-antivirus-clamav-scanner-with-rest-api-in-dokku-g6h</guid>
      <description>&lt;p&gt;At work, I had the need of implement a virus scanner for all files uploaded to the server. &lt;/p&gt;

&lt;p&gt;Well lets give a chance the clamav a deamon virus scanner opensource.&lt;/p&gt;

&lt;p&gt;I found a project what implement a rest api very easy!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/benzino77/clamav-rest-api/" rel="noopener noreferrer"&gt;https://github.com/benzino77/clamav-rest-api/&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;I run the &lt;a href="https://github.com/benzino77/clamav-rest-api/" rel="noopener noreferrer"&gt;docker compose of the proyect&lt;/a&gt; and works like charm!&lt;/p&gt;

&lt;p&gt;It use clamav in a docker container, an a api rest application to scan the file, using a network connector.&lt;/p&gt;

&lt;p&gt;I'm not a big fan of docker, for run the docker project by hand, but dokku handle very well and can manage (deploy, maintain, etc) very well without effort.&lt;/p&gt;

&lt;p&gt;With the good advice of the core developer from dokku. I can implement very fast the solution in dokku.&lt;/p&gt;

&lt;p&gt;Then let's jump in....&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                                                                        ┌──────┐
                                                                        │      │
     ┌───────────────────┐                 ┌────────────────────┐       │  N   │
     │                   │   clamav-net    │                    │  proxy│  G   │
     │ Clamav (clamd)    ◄─────────────────┤   Rest API  :3000  │◄──────┤  I   │
     │                   │                 │                    │       │  N   │
     └───────────────────┘                 └────────────────────┘       │  X   │
                                                                        │      │
                                                                        │  :443│
                                                                        │      │
                                                                        └──────┘



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

&lt;/div&gt;


&lt;p&gt;Basically this is implemented by dokku..&lt;/p&gt;

&lt;p&gt;first the nginx proxy the http request to the  &lt;code&gt;rest api application&lt;/code&gt; which is listen at :3000 in the container, to do that needs to communicate with clamd the deamon which scan the file and return the result to the apirest.&lt;/p&gt;

&lt;p&gt;Easy right ?&lt;/p&gt;

&lt;p&gt;My first approach to solve this is creating a plugin doing that but @savant Jose Gonzales from dokku suggest better create two dokku apps using &lt;a href="https://dokkupose.netlify.app" rel="noopener noreferrer"&gt;https://dokkupose.netlify.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The I paste the docker-compose file to the dokkupose and for my surprise it give exactly all the commands needed to deploy in dokku. Feeling like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fmhkux8quje5wbn45k9sq.png" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmhkux8quje5wbn45k9sq.png" alt="black magic was generated"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then the only missing here is the network link between clamd and the rest-api. I handle it by hand.&lt;/p&gt;

&lt;p&gt;I left you the script i made to create the solution with comments:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;Question?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What about the signature updates ?&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/Cisco-Talos/clamav/blob/main/README.Docker.md#controlling-the-container" rel="noopener noreferrer"&gt;In container handle it by automatically and update daily&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;you don't know about dokku ?&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/dokku" rel="noopener noreferrer"&gt;
        dokku
      &lt;/a&gt; / &lt;a href="https://github.com/dokku/dokku" rel="noopener noreferrer"&gt;
        dokku
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A docker-powered PaaS that helps you build and manage the lifecycle of applications
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Dokku&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/dokku/dokku/actions?query=branch%3Amaster" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/dokku/dokku/actions/workflows/ci.yml/badge.svg?branch=master" alt="Build Status"&gt;&lt;/a&gt;
&lt;a href="https://packagecloud.io/dokku/dokku" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f90bf841e00390def8d3e4b2bcfdbefbfc5a756a8cfd5302075103bedd030f6c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7061636b6167652d7562756e74752d627269676874677265656e2e7376673f7374796c653d666c61742d737175617265" alt="Ubuntu Package" title="Ubuntu Package"&gt;&lt;/a&gt;
&lt;a href="https://aur.archlinux.org/packages/dokku/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0b3d104f3d2545fb902241aab06ce6326ba65cf30d800460c177ef05314251e3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7061636b6167652d617263682d627269676874677265656e2e7376673f7374796c653d666c61742d737175617265" alt="Arch Package" title="Arch Package"&gt;&lt;/a&gt;
&lt;a href="https://slack.dokku.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7b9403867441b9a3f378384a91251bc99ddd2143cff0bf46a20a36b2065c6cd0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6972632d736c61636b2d626c75652e7376673f7374796c653d666c61742d737175617265" alt="Slack Group" title="Slack Group"&gt;&lt;/a&gt;
&lt;a href="https://dokku.com/docs/getting-started/installation/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ff3bd11439b0ed67e6db4bc0dda37805a6f987a298bbdd1b23d0120961ba3fb9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f63732d736974652d626c75652e7376673f7374796c653d666c61742d737175617265" alt="Documentation" title="Site"&gt;&lt;/a&gt;
&lt;a href="https://github.com/dokku/dokku#sponsors" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/1f44ddf213e0c8be6ac77578b73876656c014361eaf2eb17d9d5e1dacf5d03fd/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f73706f6e736f72732f62616467652e7376673f7374796c653d666c61742d737175617265" alt="OpenCollective"&gt;&lt;/a&gt;
&lt;a href="https://github.com/dokku/dokku#backers" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/2b243576581c26e285f025d32519614cae93e615c241f25e8e7d66a63f238354/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b6572732f62616467652e7376673f7374796c653d666c61742d737175617265" alt="OpenCollective"&gt;&lt;/a&gt;
&lt;a href="https://www.patreon.com/dokku/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/3895abfb9e47aa5ba93c0b02c8e5ded160defbceae3f5ad6474fa1571ea363c3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f70617472656f6e2d646f6e6174652d677265656e2e7376673f7374796c653d666c61742d737175617265" alt="Patreon"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Docker powered mini-Heroku. The smallest PaaS implementation you've ever seen.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Sponsors&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Become a sponsor and get your logo on our README on GitHub with a link to your site. [&lt;a href="https://opencollective.com/dokku#sponsor" rel="nofollow noopener noreferrer"&gt;Become a sponsor&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;&lt;a href="https://opencollective.com/dokku/sponsor/0/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e8c9e9abd1d6c73ba8d82258de3f64cf42effb83bbc40b575a9ffe3d5cc1d3cf/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f73706f6e736f722f302f6176617461722e737667" alt="OpenCollective Sponsor 0"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/sponsor/1/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f92be901d2aad164e33efa5ed5cb425cdfcce3813c3e26b9288b147d1534027c/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f73706f6e736f722f312f6176617461722e737667" alt="OpenCollective Sponsor 1"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/sponsor/2/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5803aa6930dc40e94b807adbdf8ec1bc998d411c0fbff5450cc4bd4a43ca9eb0/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f73706f6e736f722f322f6176617461722e737667" alt="OpenCollective Sponsor 2"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/sponsor/3/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/2d1e7cc1a840961c8bb2ae9f4afec6bc78e35ca09fcff319a8c1e10995f818e1/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f73706f6e736f722f332f6176617461722e737667" alt="OpenCollective Sponsor 3"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/sponsor/4/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0977620c9cae1e040632a57863f4cba04dca26d090c7aac3723f74ad13d3cff8/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f73706f6e736f722f342f6176617461722e737667" alt="OpenCollective Sponsor 4"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/sponsor/5/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/c9da7f3d8452eedb823669853a33c23ffaa785300d1cbd1c607e5571e3a6986b/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f73706f6e736f722f352f6176617461722e737667" alt="OpenCollective Sponsor 5"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/sponsor/6/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/d83323a4e4567087a285b169d549a4aa5750d88bb5735845b13f7c255e3babab/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f73706f6e736f722f362f6176617461722e737667" alt="OpenCollective Sponsor 6"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/sponsor/7/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/13df1b58149bd648d70caae44a65111adeb8dff152aad77838cb9baa5b1b42ac/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f73706f6e736f722f372f6176617461722e737667" alt="OpenCollective Sponsor 7"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/sponsor/8/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e899a054511e9f764e43f280f0103e25cff6cb488bd73200a40bc4bb1868af6a/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f73706f6e736f722f382f6176617461722e737667" alt="OpenCollective Sponsor 8"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/sponsor/9/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/39deb22877ace3204d19667681efcfee0cabce7f5a073bd81be884a829e2317e/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f73706f6e736f722f392f6176617461722e737667" alt="OpenCollective Sponsor 9"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/sponsor/10/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/218fd83a22beec47781b4ad7a358a525039feca187d1194380c03980abe5665e/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f73706f6e736f722f31302f6176617461722e737667" alt="OpenCollective Sponsor 10"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/sponsor/11/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/da13a85576e679b37a2e56883cdabf1841b2b29d8e3ad288acb03218100529a7/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f73706f6e736f722f31312f6176617461722e737667" alt="OpenCollective Sponsor 11"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/sponsor/12/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ad03c823226815edb3c49c0325a16e067a6550c984aef9d945d770ad12e4abae/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f73706f6e736f722f31322f6176617461722e737667" alt="OpenCollective Sponsor 12"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/sponsor/13/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/534b5c3bd3f10e5fca254ebe3b1ad179bcbaad55d9f32fde9e34d15d86dd9f28/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f73706f6e736f722f31332f6176617461722e737667" alt="OpenCollective Sponsor 13"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/sponsor/14/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/c3d3385786d3985a761713686580cdf0e9333635d6a67b901e70e767f31c0d34/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f73706f6e736f722f31342f6176617461722e737667" alt="OpenCollective Sponsor 14"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/sponsor/5/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/bda94c994694ddcfcf6d5abab4d227fbb795a7a02a9c621281ceb214385ccc82/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f73706f6e736f722f31352f6176617461722e737667" alt="OpenCollective Sponsor 15"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/sponsor/16/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/83d9acf491c8f0a20f9dbe16ae0050e041197b45ae67521205d78c14c02fb5b9/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f73706f6e736f722f31362f6176617461722e737667" alt="OpenCollective Sponsor 6"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/sponsor/17/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/06b05e9643f02cd448668dd33f2a14d2ad6195cd600f6181a7ff77a2c633b60f/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f73706f6e736f722f31372f6176617461722e737667" alt="OpenCollective Sponsor 17"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/sponsor/18/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/46204505fdd68a7561ab646875ea482e1a2fdf83586e1ab8d4363ea7a802dc4a/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f73706f6e736f722f31382f6176617461722e737667" alt="OpenCollective Sponsor 18"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Backers&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Support us with a monthly donation and help us continue our activities. [&lt;a href="https://opencollective.com/dokku#backer" rel="nofollow noopener noreferrer"&gt;Become a backer&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;&lt;a href="https://opencollective.com/dokku/backer/0/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/657c1da04edbcd1e098b4b443cea4cd004977abd1d395f276f7e08345f87ad8b/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f302f6176617461722e737667" alt="OpenCollective Backer 0"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/1/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/3de6e2a0bd37beebee12740b9521f08a8111bc414ea87ed302b9feee2b9e787b/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f312f6176617461722e737667" alt="OpenCollective Backer 1"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/2/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/6ba15e26447c50cf881654b760f71905a945fab7f582576ed8923641724626c1/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f322f6176617461722e737667" alt="OpenCollective Backer 2"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/3/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/04fefa5841c41996b4326e65712f34a58ac56c56174affacb7ff4040e313246f/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f332f6176617461722e737667" alt="OpenCollective Backer 3"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/4/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4babfbc28cd57729f500bd47097119471d8527ce2a11442a72183ce198cd24d3/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f342f6176617461722e737667" alt="OpenCollective Backer 4"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/5/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/2172e5bbcbddf931bb34f839602ee4e3f264df03666941d6e4bc3f951f8717fd/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f352f6176617461722e737667" alt="OpenCollective Backer 5"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/6/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/1944b4597a59b432857a0c238a43d78910f9db777ff5071b575789cde75dbbbe/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f362f6176617461722e737667" alt="OpenCollective Backer 6"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/7/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ff9b9588fca8bb1f0021a69dd4e1a9bcd374e0698a554f0f306f126b054d6923/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f372f6176617461722e737667" alt="OpenCollective Backer 7"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/8/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/339095fed733d9201270d4e3d335de4937d5abcd89a2a0bc6de62f9ba17a6e00/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f382f6176617461722e737667" alt="OpenCollective Backer 8"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/9/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/1f6a3cd4494a9c718d956da47f975d6285f968634ce26f3bcce25bea5e7f72fa/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f392f6176617461722e737667" alt="OpenCollective Backer 9"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/10/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/1577a321623b8be8a7cb002144f098a8f74d45912660531651346041f259ae65/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f31302f6176617461722e737667" alt="OpenCollective Backer 10"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/11/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ff82ea3e37461100c595740b87c3d8d629b078f869cf0e33b5768b7aefcda0a8/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f31312f6176617461722e737667" alt="OpenCollective Backer 11"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/12/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/83f23c70fea89920f29fae5b7ad30c9c6fe00c03b85fb70b4644d9d6413fdee2/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f31322f6176617461722e737667" alt="OpenCollective Backer 12"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/13/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f04098632ec04d2a3789d8f78d2e72d7e30c4b076dcfa54928e8d1965bd68833/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f31332f6176617461722e737667" alt="OpenCollective Backer 13"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/14/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/2bd53024c59567e3f78a4cb1377ffe2b6685c36e94f65ba4854efca9ba5a537b/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f31342f6176617461722e737667" alt="OpenCollective Backer 14"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/15/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/787912ce17f50b77c0a35a7281bef5d90b99d86e9e463ba9dd6e80688f911351/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f31352f6176617461722e737667" alt="OpenCollective Backer 15"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/16/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/8fa115897aae6d12337c333e8b49b122d7e69e6f5edbaee9cbe58df0ac17f501/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f31362f6176617461722e737667" alt="OpenCollective Backer 16"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/17/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/cf8de320f6153b4fdc11303c6976e87bf3ae6e1c4d86fd065d7bcb5ce43466ee/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f31372f6176617461722e737667" alt="OpenCollective Backer 17"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/18/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5b7aa9fb5fda5fdcb098cea4b0c20944ab9f9d1a2074cf38c393eeda4aba938d/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f31382f6176617461722e737667" alt="OpenCollective Backer 18"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/19/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9b40e1cd09e3be47972e00f52cece3333dbd264ac3c9b87869a38b61bfd57727/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f31392f6176617461722e737667" alt="OpenCollective Backer 19"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/20/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e4395b068bc85bda1d031552291b6f537ee3d9d1470bfffc1db1d73b9de745f8/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f32302f6176617461722e737667" alt="OpenCollective Backer 20"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/21/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e404c9f698b95c4889f579fc5bab3c5d36d66e0d4d3a453995f97a0fa296a8bc/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f32312f6176617461722e737667" alt="OpenCollective Backer 21"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/22/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/3b6305f14e3490617553ddcd51fb45e65ba08bb490ce150a1a1d48bf1a1221c7/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f32322f6176617461722e737667" alt="OpenCollective Backer 22"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/23/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/8f8893d083038dc1a6c931079b4f067651c09de0bd93c3235e3832dfee31ea4b/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f32332f6176617461722e737667" alt="OpenCollective Backer 23"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/24/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/aff47a3c119e8b7ebe5723646a4e7c4bbadc8cd7cdce25c2f0dd9cb959962529/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f32342f6176617461722e737667" alt="OpenCollective Backer 24"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/25/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4368b225c06c5583b7092b059708fbbcd7fcb4b3a90a980dfb675ce1500d1d70/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f32352f6176617461722e737667" alt="OpenCollective Backer 25"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/26/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ae013833f82ba66758c9f55faf8b1476518532ee5456016ef2a7adc0a08f9dde/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f32362f6176617461722e737667" alt="OpenCollective Backer 26"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/27/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0b75ce532e86ded4e677f3a8401582b28894f790b89e1beea000fcdd98524443/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f32372f6176617461722e737667" alt="OpenCollective Backer 27"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/28/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/d5010d4216fb59ae9bc4b6c1b750f356529c03fcbc3525136ceb9c81b589a7ef/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f32382f6176617461722e737667" alt="OpenCollective Backer 28"&gt;&lt;/a&gt;
&lt;a href="https://opencollective.com/dokku/backer/29/website" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/aa813fe7b02105312e950162935141f7bc1520531f6b0d210aefcef8976eb853/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f646f6b6b752f6261636b65722f32392f6176617461722e737667" alt="OpenCollective Backer 29"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Requirements&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;A fresh VM running any of the following operating systems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu 20.04 / 22.04 / 24.04 (amd64/arm64) - Any currently supported release&lt;/li&gt;
&lt;li&gt;Debian 11+ (amd64/arm64)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;An SSH keypair that can be used for application deployment. If this exists before installation, it will be automatically imported into dokku.
Otherwise, you will need to import the keypair manually after installation using &lt;code&gt;dokku ssh-keys:add&lt;/code&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;To install the latest stable release, run the following commands as a user who has access to &lt;code&gt;sudo&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;wget -NP &lt;span class="pl-c1"&gt;.&lt;/span&gt; https://dokku.com/install/v0.35.5/bootstrap.sh
sudo DOKKU_TAG=v0.35.5 bash bootstrap.sh&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;You can then proceed to configure…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/dokku/dokku" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;It's like heroku but selfhosted.&lt;/p&gt;

</description>
      <category>dokku</category>
      <category>docker</category>
      <category>clamav</category>
      <category>api</category>
    </item>
    <item>
      <title>Music for programming</title>
      <dc:creator>Andres 🐍 in 🇨🇦</dc:creator>
      <pubDate>Thu, 02 Jun 2022 14:21:06 +0000</pubDate>
      <link>https://dev.to/zodman/music-for-programming-websites-44</link>
      <guid>https://dev.to/zodman/music-for-programming-websites-44</guid>
      <description>&lt;p&gt;If you are a person that needs a focus music I have a list of website for you.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://coderadio.freecodecamp.org/"&gt;https://coderadio.freecodecamp.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://musicforprogramming.net/latest/"&gt;https://musicforprogramming.net/latest/&lt;/a&gt; (I think  is the best UI ever)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://radio.x-team.com/"&gt;https://radio.x-team.com/&lt;/a&gt; (I like it because It has a chat integrated)&lt;/p&gt;

&lt;p&gt;the last, it's interesting because with that you don't have to go to &lt;em&gt;youtube and search lofi&lt;/em&gt; again. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.lofi.cafe/"&gt;https://www.lofi.cafe/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>music</category>
      <category>programming</category>
      <category>productivity</category>
      <category>html</category>
    </item>
    <item>
      <title>Awesome cli that you didn't know #3 mysql tools</title>
      <dc:creator>Andres 🐍 in 🇨🇦</dc:creator>
      <pubDate>Sun, 29 May 2022 03:06:23 +0000</pubDate>
      <link>https://dev.to/zodman/awesome-cli-that-you-didnt-know-3-mysql-tools-114h</link>
      <guid>https://dev.to/zodman/awesome-cli-that-you-didnt-know-3-mysql-tools-114h</guid>
      <description>&lt;p&gt;When I was working I have projects with a BIG database in MySQL. Big Means as really BIG!!! when you can do a mysqldump it takes hours! If you have some of these problems, these tools will be very helpful.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nhunE3pI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.propatel.com/wp-content/uploads/2019/09/import-large-database-mysql.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nhunE3pI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.propatel.com/wp-content/uploads/2019/09/import-large-database-mysql.jpg" alt="big database" width="880" height="587"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Only for MYSQL&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You have a mysqldump of Gb's of data, to load it you need to wait hours and hours. Imagine you need to update the new structure table in your local environment. To not wait hours and hours loading the new changes, only extract the table you need and load the table only. If you on that situation this tool it's for you: &lt;/p&gt;

&lt;h2&gt;
  
  
  Split your big database dump on tables &lt;a href="https://github.com/kedarvj/mysqldumpsplitter"&gt;https://github.com/kedarvj/mysqldumpsplitter&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;That will process the mysqldump.sql in small chunks of SQL for each table of your database. then you can take only the part you needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  MySQL Dumper &lt;a href="https://github.com/maxbube/mydumper"&gt;https://github.com/maxbube/mydumper&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;When you start FEELING of mysqldump it's not designed for BIG databases because it's very slow and does not show the progress of what happening behind.&lt;/p&gt;

&lt;p&gt;This is a mysqldump of the  year 3000! &lt;/p&gt;

&lt;p&gt;Is a tool used for backing up MySQL database servers much faster than the mysqldump tool distributed with MySQL. It also has the capability to retrieve the binary logs from the remote server at the same time as the dump itself. The advantages of mydumper are:&lt;/p&gt;

&lt;h3&gt;
  
  
  Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Parallelism (hence, speed) and performance (avoids expensive character set conversion routines, efficient code overall)&lt;/li&gt;
&lt;li&gt;Easier to manage output (separate files for tables, dump metadata, etc, easy to view/parse data)&lt;/li&gt;
&lt;li&gt;Consistency - maintains snapshot across all threads, provides accurate master and slave log positions, etc&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm fell in love!&lt;/p&gt;

&lt;p&gt;bye bye mysqldump welcome mysqldumper&lt;/p&gt;

&lt;p&gt;Note: It comes with the myloader the inverse of the dumper :&amp;gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>mysql</category>
      <category>cli</category>
      <category>shell</category>
    </item>
  </channel>
</rss>
