<?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: Davide Gazzè</title>
    <description>The latest articles on DEV Community by Davide Gazzè (@davidegazze).</description>
    <link>https://dev.to/davidegazze</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%2F1036205%2Fb4e5d6dd-2e0f-44d8-a292-4612b3d635df.jpeg</url>
      <title>DEV Community: Davide Gazzè</title>
      <link>https://dev.to/davidegazze</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/davidegazze"/>
    <language>en</language>
    <item>
      <title>An overview of the Process Mining utilizing Python</title>
      <dc:creator>Davide Gazzè</dc:creator>
      <pubDate>Tue, 07 Mar 2023 11:03:35 +0000</pubDate>
      <link>https://dev.to/davidegazze/an-overview-of-the-process-mining-utilizing-python-2nb5</link>
      <guid>https://dev.to/davidegazze/an-overview-of-the-process-mining-utilizing-python-2nb5</guid>
      <description>&lt;p&gt;Process mining is a data mining technique to obtain knowledge utilizing the event data of the process itself. It is a valuable tool for businesses wanting to improve their business processes. More in detail, process mining is a type of data mining that analyzes business processes to improve process efficiency and effectiveness by revealing hidden insights and patterns in process data. Process mining begins with data collection from multiple sources, such as event logs from IT systems or BPMN process models. From the data, it is possible to generate a process map that depicts the flow of activities and their interactions. After creating the process map, it is possible to use numerous techniques to examine the data. Process discovery, for example, uses data to develop a process model without prior knowledge of the process. Conformance checking compares the actual process to a pre-defined process model to find variations and non-compliance. Process cycle time and resource consumption can be optimized through performance analysis. These identify regions with long processing cycle times or unused resources. You could use the insight to improve performance, resulting in cost savings, higher revenue, and increased customer satisfaction. You can integrate process mining into an organization’s workflow with the help of numerous Python modules to compute some metrics. Some of them are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Process performance metrics such as process cycle time, throughput time, and waiting time&lt;/li&gt;
&lt;li&gt;Process compliance metrics such as conformance, fitness, and simplicity&lt;/li&gt;
&lt;li&gt;Resource utilization metrics such as resource workload and resource efficiency&lt;/li&gt;
&lt;li&gt;Business performance metrics such as revenue, cost, and customer satisfaction&lt;/li&gt;
&lt;li&gt;Quality metrics such as error rates and rework rates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Continue on &lt;a href="https://medium.com/@davide.gazze/an-overview-of-the-process-mining-utilizing-python-15b583f72ab1"&gt;An overview of the Process Mining utilizing Python&lt;/a&gt;&lt;/p&gt;

</description>
      <category>process</category>
      <category>mining</category>
      <category>pm4py</category>
      <category>python</category>
    </item>
    <item>
      <title>Language Detection with Fastlangid</title>
      <dc:creator>Davide Gazzè</dc:creator>
      <pubDate>Sun, 05 Mar 2023 18:28:49 +0000</pubDate>
      <link>https://dev.to/davidegazze/language-detection-with-fastlangid-1eeh</link>
      <guid>https://dev.to/davidegazze/language-detection-with-fastlangid-1eeh</guid>
      <description>&lt;p&gt;In this short post, I will show you an example of the module Spacy fastlangid. This module can detect the language of a text.&lt;/p&gt;

&lt;p&gt;The module is based on the model lid.176.ftz based on fastText. &lt;/p&gt;

&lt;h1&gt;
  
  
  Usage
&lt;/h1&gt;

&lt;p&gt;To use it, import the library and use it. Now, let's see an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from fastlangid.langid import LID
langid = LID()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, we have the langid object, and we can pass it to the predict:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;result = langid.predict('This is a test')
print(f"The detected language is {result}")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The detected language is en
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For more details see &lt;a href="https://medium.com/@davide.gazze/language-detection-with-fastlangid-1d215d028640"&gt;this&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>spacy</category>
      <category>language</category>
      <category>detection</category>
    </item>
    <item>
      <title>From python function to latex description using latexify_py</title>
      <dc:creator>Davide Gazzè</dc:creator>
      <pubDate>Fri, 03 Mar 2023 07:51:34 +0000</pubDate>
      <link>https://dev.to/davidegazze/from-python-function-to-latex-description-using-latexifypy-4c9k</link>
      <guid>https://dev.to/davidegazze/from-python-function-to-latex-description-using-latexifypy-4c9k</guid>
      <description>&lt;p&gt;Hi everyone,&lt;br&gt;
this is a small post about a simple, but an interesting project that generates LaTeX math descriptions from Python functions.&lt;br&gt;
As usual, writing code is also an enjoyable activity, however, in the end, writing documentation is needed. Unfortunately, writing just text is not always sufficient, and some diagram is always useful. If you want, you can use PlantUML (more details are available &lt;a href="https://medium.com/p/905d93363f1b" rel="noopener noreferrer"&gt;here&lt;/a&gt;, &lt;br&gt;
and &lt;a href="https://medium.com/p/3b6ac0a8c757" rel="noopener noreferrer"&gt;here&lt;/a&gt;).&lt;br&gt;
However, also mathematical functions are worthy of proper documentation. For these, normally, in academics, and industry, you can use &lt;a href="https://en.wikipedia.org/wiki/LaTeX" rel="noopener noreferrer"&gt;Latex&lt;/a&gt;, read&lt;br&gt;
&lt;a href="https://medium.com/@manikasharma09/introduction-to-latex-8edfaf5de86e" rel="noopener noreferrer"&gt;here&lt;/a&gt; for an introduction. However, writing mathematical functions is time-consuming, the best would write the code, and use  software that writes the latex formula for you.&lt;br&gt;
This project is the goal of &lt;a href="https://pypi.org/project/latexify-py/" rel="noopener noreferrer"&gt;latexify_py&lt;/a&gt;.&lt;br&gt;
The official notebook is available on &lt;a href="https://colab.research.google.com/drive/1MuiawKpVIZ12MWwyYuzZHmbKThdM5wNJ?usp=sharing#scrollTo=-JhJMAXM7j-X" rel="noopener noreferrer"&gt;Google Colab&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;The installation of the package is simple:&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="c1"&gt;# Install
&lt;/span&gt;&lt;span class="n"&gt;pip&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;latexify&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To ensure the correctness type:&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="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;math&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;latexify&lt;/span&gt;

&lt;span class="n"&gt;latexify&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;__version__&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;the output will be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;0.2.0&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One of the official examples is:&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="nd"&gt;@latexify.function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;reduce_assignments&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;solve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
  &lt;span class="nf"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;solve&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;the output is:&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%2Fw7qmy5flv3h7jnyustwm.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%2Fw7qmy5flv3h7jnyustwm.png" alt=" " width="312" height="61"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Moreover, some math symbols, like alpha, beta, gamma, and delta, are converted automatically like:&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="nd"&gt;@latexify.function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;use_math_symbols&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;f0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;alpha&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;beta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;gamma&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;omega&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;alpha&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;beta&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;gamma&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;omega&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;delta&lt;/span&gt;

&lt;span class="n"&gt;f0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;the output is:&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%2Fxn60zt9b43xjywu9abpu.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%2Fxn60zt9b43xjywu9abpu.png" alt=" " width="288" height="31"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The complete list is available &lt;a href="https://github.com/google/latexify_py/blob/main/src/latexify/math_symbols.py" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;br&gt;
For example, we will implement the &lt;a href="https://en.wikipedia.org/wiki/Collatz_conjecture" rel="noopener noreferrer"&gt;Collatz conjecture&lt;/a&gt;.&lt;br&gt;
The conjecture concerns the following algorithm:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Take a positive integer n. &lt;/li&gt;
&lt;li&gt;If n = 1, the algorithm ends.&lt;/li&gt;
&lt;li&gt;If n is even, divide by two; otherwise multiply by 3 and add 1.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;if you iterate the function, the result will converge to &lt;code&gt;1&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%2Fwikimedia.org%2Fapi%2Frest_v1%2Fmedia%2Fmath%2Frender%2Fsvg%2F316634b53b3df8bc9b7bd36c9ed07084d9548f88" 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%2Fwikimedia.org%2Fapi%2Frest_v1%2Fmedia%2Fmath%2Frender%2Fsvg%2F316634b53b3df8bc9b7bd36c9ed07084d9548f88" width="39" height="2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The code is the following:&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="nd"&gt;@latexify.function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;reduce_assignments&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;collatz&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
  &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; 

&lt;span class="n"&gt;collatz&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output is:&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%2Fvzy0mzb5d6bmp15106xa.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%2Fvzy0mzb5d6bmp15106xa.png" alt=" " width="555" height="57"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;very impressive, is it?&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;In this post, we see some practical examples of the package &lt;code&gt;latexify_py&lt;/code&gt;. You can see the results in this &lt;a href="https://colab.research.google.com/drive/1ttzM3oPBtD2cE_VKBHq1sXAui27heG4k?usp=sharing" rel="noopener noreferrer"&gt;Google Colab Notebook&lt;/a&gt;.&lt;br&gt;
Finally, this project is currently hosted on &lt;a href="https://github.com/google" rel="noopener noreferrer"&gt;https://github.com/google&lt;/a&gt; but is not officially supported by Google.&lt;br&gt;
I hope this project will be expanded with some features, like the support of &lt;code&gt;for&lt;/code&gt;.&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>Running Apache Airflow via Docker Compose</title>
      <dc:creator>Davide Gazzè</dc:creator>
      <pubDate>Wed, 01 Mar 2023 09:09:37 +0000</pubDate>
      <link>https://dev.to/davidegazze/running-apache-airflow-via-docker-compose-3hmg</link>
      <guid>https://dev.to/davidegazze/running-apache-airflow-via-docker-compose-3hmg</guid>
      <description>&lt;p&gt;Hi everyone,&lt;br&gt;
in this post, I will summarize how to run &lt;a href="https://airflow.apache.org/docs/apache-airflow/stable/index.html" rel="noopener noreferrer"&gt;Apache Airflow&lt;/a&gt; using Docker-compose.&lt;/p&gt;

&lt;p&gt;Apache Airflow is a platform to programmatically author, schedule, and monitor workflows.&lt;br&gt;
It is simple to start with it because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apache Airflow has a nice UI&lt;/li&gt;
&lt;li&gt;Apache Airflow has a programmatic way to create workflows&lt;/li&gt;
&lt;li&gt;Apache Airflow is very important in the community, and that means that you have a lot of courses and posts for starting&lt;/li&gt;
&lt;li&gt;Apache Airflow is simple compared to Apache Nifi (see my articles &lt;a href="https://medium.com/@davide.gazze/an-example-of-nifi-cluster-using-docker-91921e955e52" rel="noopener noreferrer"&gt;here&lt;/a&gt; and &lt;a href="https://medium.com/@davide.gazze/a-quick-introduction-to-apache-nifi-4c9205cec5ed" rel="noopener noreferrer"&gt;here&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For your first steps, in Apache Airflow worlds, you can use the development as explained &lt;a href="https://airflow.apache.org/docs/apache-airflow/stable/start/local.html" rel="noopener noreferrer"&gt;here&lt;/a&gt;. In this post, you will use SQLite as the database for running the &lt;a href="https://airflow.apache.org/docs/apache-airflow/stable/tutorial.html" rel="noopener noreferrer"&gt;tutorial&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;However, if you want to use this fantastic tool, you can learn how to directly from the &lt;a href="https://airflow.apache.org/docs/apache-airflow/stable/production-deployment.html" rel="noopener noreferrer"&gt;Apache Airflow website&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To summarize, the post will tell to you to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;select a Database backend like Mysql/MariaDB or Postgres&lt;/li&gt;
&lt;li&gt;use the LocalExecutor for the local machine of Kubernetes executor or the Celery executor in a multi-node setup&lt;/li&gt;
&lt;li&gt;setting Stackdriver Logging, Elasticsearch, or Amazon CloudWatch for saving the logs&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The above information is just the starting point for a robust orchestrator in production.&lt;/p&gt;

&lt;p&gt;As usual, it is not always simple to set up everything in your local machine for testing a production environment.&lt;br&gt;
For this reason, Docker, and in particular docker-compose can help us.&lt;/p&gt;

&lt;p&gt;As described &lt;a href="https://airflow.apache.org/docs/apache-airflow/stable/start/docker.html" rel="noopener noreferrer"&gt;here&lt;/a&gt;, you can test a production environment on your local machine.&lt;/p&gt;
&lt;h2&gt;
  
  
  The proposed configuration
&lt;/h2&gt;

&lt;p&gt;An Airflow installation is composed of the following components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;scheduler&lt;/strong&gt; for triggering scheduled workflow:&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;executor&lt;/strong&gt; for running the tasks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;webserver&lt;/strong&gt; for managing, inspecting, triggering and debugging the DAGs and tasks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;folder with all DAG files&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;metadata database&lt;/strong&gt; for saving the states of the scheduler, executors and webserver.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The image below represents the Airflow architecture:&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%2Fairflow.apache.org%2Fdocs%2Fapache-airflow%2Fstable%2F_images%2Farch-diag-basic.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%2Fairflow.apache.org%2Fdocs%2Fapache-airflow%2Fstable%2F_images%2Farch-diag-basic.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The proposed configuration is not a run production-ready Docker Compose Airflow installation. It is just a quick-start docker-compose to get your hands dirty with Airflow.&lt;/p&gt;

&lt;p&gt;Of course, you have to install it on your laptop:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;a href="https://docs.docker.com/engine/installation/" rel="noopener noreferrer"&gt;Docker Community Edition (CE)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; &lt;a href="https://docs.docker.com/compose/install/" rel="noopener noreferrer"&gt;Docker Compose&lt;/a&gt; v1.29.1 and newer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is recommended to reserve at least 4GB (better 8GB) of memory for Docker.&lt;/p&gt;
&lt;h3&gt;
  
  
  The docker-compose.yaml file
&lt;/h3&gt;

&lt;p&gt;The community file is available &lt;a href="https://airflow.apache.org/docs/apache-airflow/2.3.4/docker-compose.yaml" rel="noopener noreferrer"&gt;here&lt;/a&gt;, you can download it using the command:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;curl -LfO '&lt;a href="https://airflow.apache.org/docs/apache-airflow/2.3.4/docker-compose.yaml" rel="noopener noreferrer"&gt;https://airflow.apache.org/docs/apache-airflow/2.3.4/docker-compose.yaml&lt;/a&gt;'&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The docker-compose file is formed by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;airflow-scheduler: The scheduler monitors all DAGs&lt;/li&gt;
&lt;li&gt;airflow-webserver: The AIRFLOW webserver (available at the URL: &lt;a href="http://localhost:8080" rel="noopener noreferrer"&gt;http://localhost:8080&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;airflow-worker: The executor of each task in a DAG&lt;/li&gt;
&lt;li&gt;airflow-init: The initialization service&lt;/li&gt;
&lt;li&gt;postgres: The database&lt;/li&gt;
&lt;li&gt;redis: The broker that forwards messages from scheduler to worker&lt;/li&gt;
&lt;li&gt;flower: The optional application that monitors the environment (you can start using: &lt;code&gt;docker-compose --profile flower up&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The docker-compose set three volumes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;dags: the folder where you can put your DAG&lt;/li&gt;
&lt;li&gt;logs: the folder that contains logs from task execution and scheduler&lt;/li&gt;
&lt;li&gt;plugins: the folder where you can put your custom plugins&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;all of these volumes are persisted onto your local machine. So it is simple to perform some tests locally and then move to another machine without losing anything.&lt;br&gt;
In any case, the folders are created in the same folder where the file &lt;code&gt;docker-compose.yaml&lt;/code&gt; is present.&lt;br&gt;
If you want, you can change the local folders in lines &lt;code&gt;63&lt;/code&gt; - &lt;code&gt;65&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  volumes:
    - /tmp/airflow/dags:/opt/airflow/dags
    - /tmp/airflow/logs:/opt/airflow/logs
    - /tmp/airflow/plugins:/opt/airflow/plugins
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;if you do not want the initial dags, you should set &lt;strong&gt;false&lt;/strong&gt; line &lt;code&gt;59&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    AIRFLOW__CORE__LOAD_EXAMPLES: 'true'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Another little improvement is to set the name of the PostgreSQL container adding the following in line 77:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    container_name: db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this way, you can refer to the PostgreSQL database with the name &lt;code&gt;db&lt;/code&gt;.&lt;br&gt;
Otherwise, you could change line 83 to set the Postgres data folder.&lt;/p&gt;

&lt;p&gt;Moreover, you can change some other basic configurations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AIRFLOW_IMAGE_NAME: The Docker image name used to run Airflow (Default: &lt;strong&gt;apache/airflow:2.3.4&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;AIRFLOW_UID: The user ID in Airflow containers (Default: &lt;strong&gt;50000&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;_AIRFLOW_WWW_USER_USERNAME: The username for the administrator account (Default: &lt;strong&gt;airflow&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;_AIRFLOW_WWW_USER_PASSWORD: The password for the administrator account (Default: &lt;strong&gt;airflow&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;_PIP_ADDITIONAL_REQUIREMENTS: The additional PIP requirements to add when starting all containers (Default: &lt;strong&gt;&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Toward the starting
&lt;/h3&gt;

&lt;p&gt;Before starting everything, you have to set the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create the Airflow folders:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;mkdir -p ./dags ./logs ./plugins ./postgres-db&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Set the Airflow user:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;echo -e "AIRFLOW_UID=$(id -u)" &amp;gt; .env&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Initialize the database:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;docker-compose up airflow-init&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In particular, after the last step, you will see the following output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Attaching to airflow-init_1
....
airflow-init_1  | DB: postgresql+psycopg2://airflow:***@postgres/airflow
airflow-init_1  | Performing upgrade with database postgresql+psycopg2://airflow:***@postgres/airflow
airflow-init_1  | [2022-09-10 07:47:18,664] {db.py:1466} INFO - Creating tables
airflow-init_1  | INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
....
airflow-init_1  | Upgrades done
....
airflow-init_1  |   FutureWarning,
airflow-init_1  | 2.3.4
airflow-init_1 exited with code 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Start Airflow typing:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;docker-compose up -d&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If everything goes well, the output of the &lt;code&gt;docker ps&lt;/code&gt; is the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CONTAINER ID   IMAGE                  COMMAND                  CREATED        STATUS                    PORTS                    NAMES
5508c60831d4   apache/airflow:2.3.4   "/usr/bin/dumb-init …"   12 hours ago   Up 40 seconds (healthy)   0.0.0.0:8080-&amp;gt;8080/tcp   resources_airflow-webserver_1
37f71f65f758   apache/airflow:2.3.4   "/usr/bin/dumb-init …"   12 hours ago   Up 40 seconds (healthy)   8080/tcp                 resources_airflow-worker_1
44c2588958cb   apache/airflow:2.3.4   "/usr/bin/dumb-init …"   12 hours ago   Up 40 seconds (healthy)   8080/tcp                 resources_airflow-scheduler_1
cc939447d676   apache/airflow:2.3.4   "/usr/bin/dumb-init …"   12 hours ago   Up 40 seconds (healthy)   8080/tcp                 resources_airflow-triggerer_1
d36e8e849ff8   redis:latest           "docker-entrypoint.s…"   12 hours ago   Up 40 seconds (healthy)   6379/tcp                 resources_redis_1
9ba46b104c7a   postgres:13            "docker-entrypoint.s…"   12 hours ago   Up 41 seconds (healthy)   5432/tcp                 resources_postgres_1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Some useful commands
&lt;/h3&gt;

&lt;p&gt;Some useful commands are the following:&lt;/p&gt;

&lt;h4&gt;
  
  
  Run airflow commands
&lt;/h4&gt;

&lt;p&gt;To run an airflow command type:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;docker-compose run airflow-worker airflow info&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;otherwise, you can download the wrapper script (only for MacOS or Linux):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.3.4/airflow.sh'
chmod +x airflow.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;finally, run:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;./airflow.sh info&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  See Graphical User Interface
&lt;/h3&gt;

&lt;p&gt;The Airflow GUI is available &lt;code&gt;http://localhost:8080&lt;/code&gt; with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Username: airflow&lt;/li&gt;
&lt;li&gt;Password: airflow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/imgs%2Fairflow_in_actions.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/imgs%2Fairflow_in_actions.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Shutting down Airflow and clean
&lt;/h3&gt;

&lt;p&gt;For shutting down everything, you can type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker-compose down
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you also want to delete the volumes type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker-compose down --volumes --rmi all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Final recommendations
&lt;/h2&gt;

&lt;p&gt;It is funny the final recommendations that the Apache Airflow community tells &lt;a href="https://airflow.apache.org/docs/apache-airflow/stable/start/docker.html#customizing-the-quick-start-docker-compose" rel="noopener noreferrer"&gt;here&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DO NOT attempt to customize images and the Docker Compose if you do not know exactly what you are doing, do not know Docker Compose, or are not prepared to debug and resolve problems on your own.
....
Even if many users think of Docker Compose as “ready to use”, it is really a developer tool ...
It is extremely easy to make mistakes that lead to difficult-to-diagnose problems and if you are not ready to spend your own time on learning and diagnosing and resolving those problems on your own do not follow this path. You have been warned.
...
DO NOT expect the Docker Compose below will be enough to run production-ready Docker Compose Airflow installation using it. This is truly quick-start docker-compose for you to get Airflow up and running locally and get your hands dirty with Airflow.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In any case, you can see the &lt;a href="https://airflow.apache.org/docs/helm-chart/stable/index.html" rel="noopener noreferrer"&gt;Helm Chart for Apache Airflow&lt;/a&gt; for more information on how to install Airflow over Kubernetes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rise of Amazon Web Service
&lt;/h2&gt;

&lt;p&gt;As is usually the case, there where there is a configuration problem. Companies see a sales opportunity. And it happened here, too. AWS provides Amazon Managed Workflows for Apache Airflow (MWAA)&lt;br&gt;
&lt;a href="https://aws.amazon.com/managed-workflows-for-apache-airflow" rel="noopener noreferrer"&gt;MWAA&lt;/a&gt; is a managed orchestration service for Apache Airflow to create end-to-end data pipelines in the cloud at scale.&lt;br&gt;
Managed Workflows is optimized to use Airflow and Python to create workflows without taking care the scalability, availability, and security.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;In this post, we start to see the importance of setup a production environment for Apache Airflow.&lt;br&gt;
After a short introduction, we see a simple docker-compose implementation to start with Apache Airflow local.&lt;br&gt;
Finally, we shortly see the Amazon Managed Workflows for Apache Airflow and an all-in-one solution for the developer.&lt;/p&gt;

&lt;p&gt;That's all for this post, in the next, I will go deeper inside the production problem of Apache Airflow, and&lt;br&gt;
we will analyze the &lt;a href="https://airflow.apache.org/docs/helm-chart/stable/index.html" rel="noopener noreferrer"&gt;helm&lt;/a&gt; and MWAA.&lt;/p&gt;

&lt;p&gt;Original published on [Davide Gazzè's Medium]((&lt;a href="https://medium.com/p/bcbb19f30cd6" rel="noopener noreferrer"&gt;https://medium.com/p/bcbb19f30cd6&lt;/a&gt;)&lt;/p&gt;

</description>
      <category>docker</category>
      <category>tooling</category>
      <category>security</category>
      <category>caching</category>
    </item>
    <item>
      <title>Print Color Text with Python</title>
      <dc:creator>Davide Gazzè</dc:creator>
      <pubDate>Wed, 01 Mar 2023 08:56:37 +0000</pubDate>
      <link>https://dev.to/davidegazze/print-color-text-with-python-3834</link>
      <guid>https://dev.to/davidegazze/print-color-text-with-python-3834</guid>
      <description>&lt;p&gt;Hi everyone,&lt;/p&gt;

&lt;p&gt;one of the most interesting things when I started using a computer, a Commodore 64, was always the ability to write colored text. It may sound childish, and indeed I was a child, but at the time the ability to display colors at my leisure was always something that filled me with joy. Of course, age and technological advancement have led me to consider different aspects of computing cool. But sometimes coming back as a child gives a little help to move forward. Therefore, in this post, the possibility of printing colored text in python will be discussed.&lt;/p&gt;

&lt;p&gt;Introduction&lt;br&gt;
On Linux, it is possible to print colored text using some `ANSI escape sequences [1], for example, if you open your terminal, and type:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;echo -e "\e[31mColored Text\e[0m"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;and you will see the following:&lt;/p&gt;

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

&lt;p&gt;
                                         Write color text with Bash
&lt;/p&gt;

&lt;p&gt;The text is now Red. Entering in details, we can analyze the pattern:&lt;br&gt;
echo -e "\e[COLORmSample Text\e[0m"&lt;br&gt;
this string is formed by different parameters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;-e: Enable interpretation of backslash escapes&lt;/li&gt;
&lt;li&gt;\e[: Start the color modifications&lt;/li&gt;
&lt;li&gt;COLORm: Represents the color code, plus m at the end&lt;/li&gt;
&lt;li&gt;\e[0m: End color modifications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Return to our example echo -e "\e[31mColored Text\e[0m", you can see that we use the code 31 to display the Red text. There are different complete articles on the Internet, I suggest you read [1] and [4]. Just to summarize, there are codes for color, code to have Bold, Underlined, and also Blinking Characters. Moreover, you can add more colors modification separated by &lt;code&gt;;&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;echo -e "\e[COLOR1;COLOR2mText\e[0m"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From Bash to Python&lt;/strong&gt;&lt;br&gt;
One fantastic thing is that you can reuse all the concepts that you learned until now also in python. Python supports color modifiers:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;print(f"\033[31mRed Text")&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In practice, the &lt;code&gt;\e&lt;/code&gt; became &lt;code&gt;\033&lt;/code&gt;. Ok, that's great, but writing the color modifications reduces the code's legibility. The best solution could be to use and high-level package which solves it.&lt;br&gt;
This is the goal of the package colorama.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Introduction to colorama&lt;/strong&gt;&lt;br&gt;
Colorama is a package able to create the ANSI escape character sequences to colorize your output. Colorama is multi-platform it works under Linux, Mac, and Windows. The colorama's demo scripts print some colored text using ANSI sequences. The installation is simple, just type:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pip install colorama&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If your environment is Windows, you have to init in the following way:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;br&gt;
from colorama import just_fix_windows_console&lt;br&gt;
just_fix_windows_console()&lt;br&gt;
&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;after that, you can use it.&lt;/p&gt;

&lt;p&gt;Using Colorama&lt;br&gt;
For starting to use Colorama, let's see the code for printing Red text:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`&lt;br&gt;
import colorama&lt;br&gt;
from colorama import Fore&lt;/p&gt;

&lt;p&gt;print(Fore.RED + 'This text is red in color')&lt;br&gt;
`&lt;code&gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;the output is:&lt;/p&gt;

&lt;p&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5GCzxhoe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ue9h9yozm8ytuqmppx7d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5GCzxhoe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ue9h9yozm8ytuqmppx7d.png" width="482" height="131"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
                                    The first example with colorama
&lt;/p&gt;

&lt;p&gt;Continue Reading on &lt;a href="https://medium.com/syntaxerrorpub/print-color-text-with-python-a0d10845596f"&gt;Syntax Error&lt;/a&gt;&lt;/p&gt;

</description>
      <category>colorama</category>
      <category>python</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
