<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Azizul Haque Ananto</title>
    <description>The latest articles on Forem by Azizul Haque Ananto (@ananto30).</description>
    <link>https://forem.com/ananto30</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%2F354774%2F351317d5-1425-4fb8-867d-0140bacde1f7.png</url>
      <title>Forem: Azizul Haque Ananto</title>
      <link>https://forem.com/ananto30</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ananto30"/>
    <language>en</language>
    <item>
      <title>Elixir Pipe in Python v2</title>
      <dc:creator>Azizul Haque Ananto</dc:creator>
      <pubDate>Tue, 27 Feb 2024 16:52:59 +0000</pubDate>
      <link>https://forem.com/ananto30/elixir-pipe-in-python-v2-3kab</link>
      <guid>https://forem.com/ananto30/elixir-pipe-in-python-v2-3kab</guid>
      <description>&lt;p&gt;I had previously shared a cool way to chain functions. This is exactly same but with hacking the &lt;code&gt;|&lt;/code&gt; (Or) operator ;)&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;json&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;dataclasses&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;dataclass&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;functools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nb"&gt;reduce&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;


&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Pipe&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;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;val&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;val&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;val&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;funcs&lt;/span&gt; &lt;span class="o"&gt;=&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;__or__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;other&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;funcs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;other&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;self&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__call__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;isinstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nf"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;funcs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;val&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="nd"&gt;@dataclass&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;
    &lt;span class="n"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;parse_request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&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="nc"&gt;Pipe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&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;loads&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;x&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;validate_url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Request&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;req&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;validate_method&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Request&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;req&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;method&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GET&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;POST&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PUT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DELETE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_content&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Request&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;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;check_content_type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;content_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&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;content&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content_type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;


&lt;span class="n"&gt;pp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nc"&gt;Pipe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://google.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;method&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GET&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;parse_request&lt;/span&gt;
    &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;validate_url&lt;/span&gt;
    &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;validate_method&lt;/span&gt;
    &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;get_content&lt;/span&gt;
    &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;"&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="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;check_content_type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;!doctype html&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;)()&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let me know your thoughts!&lt;/p&gt;

&lt;p&gt;**The cover image is taken from &lt;a href="https://thinkingelixir.com/course/code-flow/module-1/pipe-operator/"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>functional</category>
      <category>programming</category>
    </item>
    <item>
      <title>Elixir Pipe in Python</title>
      <dc:creator>Azizul Haque Ananto</dc:creator>
      <pubDate>Mon, 09 May 2022 16:38:37 +0000</pubDate>
      <link>https://forem.com/ananto30/elixir-pipe-in-python-2h88</link>
      <guid>https://forem.com/ananto30/elixir-pipe-in-python-2h88</guid>
      <description>&lt;p&gt;I really like the &lt;a href="https://elixirschool.com/en/lessons/basics/pipe_operator"&gt;Pipe operator&lt;/a&gt; in Elixir. This is something from the future!&lt;/p&gt;

&lt;p&gt;As I work with Python more often, I was trying to implement that pipe functionality in Python with few lines of codes.&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;from&lt;/span&gt; &lt;span class="n"&gt;functools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nb"&gt;reduce&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;pipe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;fn_list&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&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="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="nf"&gt;isinstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;fn_list&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;How to use it?&lt;/p&gt;

&lt;p&gt;Example -&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;json&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;dataclasses&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;dataclass&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;


&lt;span class="nd"&gt;@dataclass&lt;/span&gt;
&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;
    &lt;span class="n"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;parse_request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;pipe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;req&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;loads&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;),&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;validate_url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Request&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;req&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;validate_method&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Request&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;req&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;method&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GET&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;POST&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PUT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DELETE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_content&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Request&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;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;check_content_type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;content_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&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;content&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content_type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;


&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nf"&gt;pipe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://google.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;method&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GET&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;parse_request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;validate_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;validate_method&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;get_content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;check_content_type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;!doctype html&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;You can use &lt;code&gt;lambda&lt;/code&gt; and functions in &lt;code&gt;pipe&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Notice the last function in pipe, &lt;code&gt;check_content_type&lt;/code&gt; takes two arguments, the first one &lt;code&gt;content&lt;/code&gt; is passed from the previous pipe function, so we take that in lambda argument and then call the &lt;code&gt;check_content_type&lt;/code&gt; with that &lt;code&gt;content&lt;/code&gt; and another argument.&lt;/p&gt;

&lt;p&gt;Let me know your thoughts!&lt;/p&gt;

&lt;p&gt;**The cover image is taken from &lt;a href="https://thinkingelixir.com/course/code-flow/module-1/pipe-operator/"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>python</category>
      <category>functional</category>
      <category>programming</category>
    </item>
    <item>
      <title>Zero: A fast and high performance Python RPC framework for building microservices or distributed servers</title>
      <dc:creator>Azizul Haque Ananto</dc:creator>
      <pubDate>Sun, 03 Oct 2021 12:20:21 +0000</pubDate>
      <link>https://forem.com/ananto30/zero-a-fast-and-high-performance-python-rpc-like-framework-to-make-microservices-6f0</link>
      <guid>https://forem.com/ananto30/zero-a-fast-and-high-performance-python-rpc-like-framework-to-make-microservices-6f0</guid>
      <description>&lt;p&gt;I have been working with Zero for couple of months and I can feel that Zero has potential to make the difference in writing microservices. Rather than thinking about boilerplate coding and REST services, you can focus on making things, writing business logic - this is the goal of Zero.&lt;/p&gt;

&lt;p&gt;Let's take a look at a simple example -&lt;/p&gt;

&lt;p&gt;Install it first&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install zeroapi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;server.py&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;from&lt;/span&gt; &lt;span class="n"&gt;zero&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ZeroServer&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;echo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&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;msg&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;hello_world&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hello world&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ZeroServer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5559&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register_rpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;echo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register_rpc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hello_world&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is it! The ZeroServer &lt;strong&gt;utilizes the cpu cores&lt;/strong&gt; unlike other Python programs.&lt;/p&gt;

&lt;p&gt;If you save run &lt;code&gt;python3 server.py&lt;/code&gt; this will run several processes and distribute the tasks among them.&lt;/p&gt;

&lt;p&gt;So you register a function here and return something. So this works like a RPC. The main difference with RPC is - the functions can take only one parameter, that we call a &lt;code&gt;message&lt;/code&gt; in-short &lt;code&gt;msg&lt;/code&gt;. There are several types we support now - most of basic types like int, float, str, bool, list, dict, tuple, set. And some typing types typing.List, typing.Tuple, typing.Dict, typing.Union, typing.Optional. We have a plan to support Pydantic 🙌&lt;/p&gt;

&lt;p&gt;Now let's make a client for the server -&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;from&lt;/span&gt; &lt;span class="n"&gt;zero&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ZeroClient&lt;/span&gt;

&lt;span class="n"&gt;zero_client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ZeroClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;localhost&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5559&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;echo&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;zero_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;echo&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hi there!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resp&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;hello&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;zero_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hello_world&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resp&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;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;echo&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nf"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Simple and usual. You need performance? We also support &lt;code&gt;async&lt;/code&gt; 😃&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;asyncio&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;zero&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AsyncZeroClient&lt;/span&gt;

&lt;span class="n"&gt;zero_client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AsyncZeroClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;localhost&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5559&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;echo&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;zero_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;echo&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hi there!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;zero_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hello_world&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resp&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;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;loop&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;asyncio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_event_loop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run_until_complete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;echo&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="n"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run_until_complete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;hello&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run and play with these.&lt;/p&gt;

&lt;p&gt;If you need to send two, three ... n parameters. You can just wrap in a list, send and unwrap the list in server. Like this - &lt;/p&gt;

&lt;p&gt;server.py&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;pythagoras&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Tuple&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;int&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="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;a&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="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;client.py&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;get_pythagoras&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="nb"&gt;int&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="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;int&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;zero_server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pythagoras&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So you can send arbitrary number of arguments like this.&lt;/p&gt;

&lt;p&gt;Are you lazy like me? Zero also generates client code! 🙌&lt;/p&gt;

&lt;p&gt;If you run -&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python -m zero.generate_client --host localhost --port 5559 --overwrite-dir ./my_client
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will generate a client code for you like this -&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;typing&lt;/span&gt;  &lt;span class="c1"&gt;# remove this if not needed
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Dict&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Union&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Optional&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Tuple&lt;/span&gt;  &lt;span class="c1"&gt;# remove this if not needed
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;zero&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ZeroClient&lt;/span&gt;


&lt;span class="n"&gt;zero_client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ZeroClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;localhost&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5559&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;RpcClient&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;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;zero_client&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ZeroClient&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_zero_client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;zero_client&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;echo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&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;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_zero_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;echo&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;msg&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;hello_world&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&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;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_zero_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hello_world&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And you can use like this -&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;from&lt;/span&gt; &lt;span class="n"&gt;my_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;RpcClient&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;zero_client&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;RpcClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;zero_client&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;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;echo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hi there!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hello_world&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So try Zero and let me know 📩&lt;br&gt;
Checkout the examples here - &lt;a href="https://github.com/Ananto30/zero/tree/main/examples"&gt;https://github.com/Ananto30/zero/tree/main/examples&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you like Zero please leave a star at GitHub: &lt;a href="https://github.com/Ananto30/zero"&gt;https://github.com/Ananto30/zero&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And let's talk more in the comments 👇&lt;/p&gt;

</description>
      <category>python</category>
      <category>microservices</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Create your own blazing fast mock server with just a JSON file!</title>
      <dc:creator>Azizul Haque Ananto</dc:creator>
      <pubDate>Wed, 19 May 2021 12:43:36 +0000</pubDate>
      <link>https://forem.com/ananto30/create-your-own-blazing-fast-mock-server-with-just-a-json-file-31fn</link>
      <guid>https://forem.com/ananto30/create-your-own-blazing-fast-mock-server-with-just-a-json-file-31fn</guid>
      <description>&lt;p&gt;TLDR; &lt;a href="https://github.com/Ananto30/mocker"&gt;https://github.com/Ananto30/mocker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The idea is really simple. Just create high-performing 🚀 mock servers using a json file that maps path to status code and response body.&lt;/p&gt;

&lt;p&gt;This can be used to benchmark your microservices, that are dependant on other HTTP services.&lt;/p&gt;

&lt;p&gt;This is a sample mock file -&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"/hello/worlds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"statusCode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"responseBody"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Hello worlds!"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"time"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"now"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"worlds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"cross origin world"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"mars world"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"moon world"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then just run -&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./mocker &lt;span class="nt"&gt;-addr&lt;/span&gt; &amp;lt;YOUR_HOST_AND_PORT&amp;gt; &lt;span class="nt"&gt;-file&lt;/span&gt; &amp;lt;MOCK_JSON_FILE_LOCATION&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In windows -&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;mocker.exe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-addr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;YOUR_HOST_AND_PORT&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-file&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;MOCK_JSON_FILE_LOCATION&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Please report bugs and suggest new features and ideas. 👇&lt;/p&gt;

</description>
      <category>go</category>
      <category>webdev</category>
      <category>showdev</category>
    </item>
    <item>
      <title>I have built an async to sync service using Vert.x event bus; please review the code and suggest better approaches</title>
      <dc:creator>Azizul Haque Ananto</dc:creator>
      <pubDate>Sat, 03 Apr 2021 03:44:52 +0000</pubDate>
      <link>https://forem.com/ananto30/i-have-built-an-async-to-sync-service-using-vert-x-event-bus-please-review-the-code-and-suggest-better-approaches-4hom</link>
      <guid>https://forem.com/ananto30/i-have-built-an-async-to-sync-service-using-vert-x-event-bus-please-review-the-code-and-suggest-better-approaches-4hom</guid>
      <description>&lt;p&gt;TLDR; Please visit here - &lt;a href="https://github.com/Ananto30/vertx-async-gateway"&gt;https://github.com/Ananto30/vertx-async-gateway&lt;/a&gt; and review the code.&lt;/p&gt;

&lt;p&gt;I have used &lt;code&gt;ConcurrentHashMap&lt;/code&gt; to keep track of the requests. And assuming each async request should have a unique identifier that can be used to track it when we get the callback in a webhook.&lt;/p&gt;

&lt;p&gt;Using this code, one can write new endpoints that will be calling third parties who are async (send the response in a callback URL). So when a call is received from a user, the response will be put in the ConcurrentHashMap against the identifier and block the request using the blocking handler of vertx (the response is not &lt;code&gt;end()&lt;/code&gt;). Then a callback will be received in the callback endpoint and an event will be published in the bus. Another verticle will take the event and find it from the hashmap and &lt;code&gt;end()&lt;/code&gt; the result to that specific request. &lt;/p&gt;

&lt;p&gt;Is this code seems good enough for this purpose?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>java</category>
      <category>codequality</category>
    </item>
    <item>
      <title>I have built a story pointing app with Svelte and socket.io</title>
      <dc:creator>Azizul Haque Ananto</dc:creator>
      <pubDate>Thu, 18 Feb 2021 06:39:35 +0000</pubDate>
      <link>https://forem.com/ananto30/i-have-made-a-story-pointing-app-with-svelte-and-socket-io-101h</link>
      <guid>https://forem.com/ananto30/i-have-made-a-story-pointing-app-with-svelte-and-socket-io-101h</guid>
      <description>&lt;p&gt;I am amazed by &lt;a href="https://svelte.dev/"&gt;Svelte&lt;/a&gt;. This is super simple and easy. You just write and it works. Easiest store and state management and write less code. I just loved it.&lt;/p&gt;

&lt;p&gt;So I built this voting app. This just ensures an unbiased environment to point a story. In agile we do this story pointing and get biased with others' opinion. Here we get a timer to vote and then see the result.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://storypoint.dedsec.life/"&gt;http://storypoint.dedsec.life/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub - &lt;a href="https://github.com/Ananto30/story-point"&gt;https://github.com/Ananto30/story-point&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Please report any issue or bug and all reviews and feature requests are appreciated 😀&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>svelte</category>
      <category>node</category>
      <category>javascript</category>
    </item>
    <item>
      <title>MongoDB Atlas Search: Super Simple, Very Powerful</title>
      <dc:creator>Azizul Haque Ananto</dc:creator>
      <pubDate>Wed, 04 Nov 2020 08:01:49 +0000</pubDate>
      <link>https://forem.com/ananto30/mongodb-atlas-search-super-simple-very-powerful-4i21</link>
      <guid>https://forem.com/ananto30/mongodb-atlas-search-super-simple-very-powerful-4i21</guid>
      <description>&lt;p&gt;I have built a Hadith search engine 🔍 called &lt;a href="https://askhadith.herokuapp.com/"&gt;Ask Hadith&lt;/a&gt; using &lt;a href="https://docs.atlas.mongodb.com/atlas-search/"&gt;Atlas Search&lt;/a&gt; of MongoDB.&lt;/p&gt;

&lt;p&gt;You can jump right into the &lt;a href="https://github.com/Ananto30/ask-hadith"&gt;code&lt;/a&gt;. &lt;br&gt;
Or visit the article I have written here - &lt;a href="https://azizulhaq-ananto.medium.com/mongodb-atlas-search-super-simple-very-powerful-6a2cdafa79d1"&gt;https://azizulhaq-ananto.medium.com/mongodb-atlas-search-super-simple-very-powerful-6a2cdafa79d1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have shared my journey with Atlas and the whole process from moving data to writing search queries. It was really to start with and loved the &lt;code&gt;compound&lt;/code&gt; operator which can make rocket science in the pocket 😁&lt;/p&gt;

&lt;p&gt;Please read the article 📖 and share your thoughts and if you have already tried Atlas Search, please let me know in the comments 👇&lt;br&gt;
It would be great if you support Ask Hadith ❤️&lt;/p&gt;

</description>
      <category>mongodb</category>
      <category>python</category>
      <category>react</category>
    </item>
    <item>
      <title>Show off your games using this tool</title>
      <dc:creator>Azizul Haque Ananto</dc:creator>
      <pubDate>Mon, 26 Oct 2020 09:26:27 +0000</pubDate>
      <link>https://forem.com/ananto30/show-off-your-games-using-this-tool-2o65</link>
      <guid>https://forem.com/ananto30/show-off-your-games-using-this-tool-2o65</guid>
      <description>&lt;p&gt;I have built this dynamic 🖼 SVG generator that collects the 🕹 games you play from Steam and generates an image that can be embedded in any site (cause all sites use html 😅). You can also put it in ⓘ &lt;code&gt;.md&lt;/code&gt; files (like readme)! For example in GitHub profile readme, look at mine -&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--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Ananto30"&gt;
        Ananto30
      &lt;/a&gt; / &lt;a href="https://github.com/Ananto30/Ananto30"&gt;
        Ananto30
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      My profile with Steam stats card
    &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;h3 class="heading-element"&gt;👋 Hi, I'm Ananto&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://www.linkedin.com/in/anantodev/" rel="nofollow"&gt;LinkedIn&lt;/a&gt; | &lt;a href="https://profile.codersrank.io/user/ananto30" rel="nofollow"&gt;Codersrank&lt;/a&gt; | &lt;a href="https://dev.to/ananto30" rel="nofollow"&gt;Dev.to&lt;/a&gt; | &lt;a href="https://azizulhaq-ananto.medium.com/" rel="nofollow"&gt;Medium&lt;/a&gt; | &lt;a href="https://ananto.netlify.app" rel="nofollow"&gt;Portfolio&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🚀 Projects&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/Ananto30/zero"&gt;Zero&lt;/a&gt;&lt;/strong&gt;: A high performance and fast Python framework (RPC + PubSub) to build microservices. (WIP)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/Ananto30/ask-hadith"&gt;Ask Hadith&lt;/a&gt;&lt;/strong&gt;: Hadith search engine. &lt;a href="https://askhadith.com/" rel="nofollow"&gt;askhadith.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/Ananto30/golpo-svelte"&gt;Golpo&lt;/a&gt;&lt;/strong&gt;: Social network. &lt;a href="http://golpo.vercel.app/" rel="nofollow"&gt;golpo.vercel.app&lt;/a&gt; (Need contributors 🙌)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/Ananto30/kv-store"&gt;KV Store&lt;/a&gt;&lt;/strong&gt;: Redis based Config or Settings key-value store with UI and code generation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bazar&lt;/strong&gt;: Online shop built with svelte. &lt;a href="https://gg13.netlify.app/" rel="nofollow"&gt;gg13.netlify.app&lt;/a&gt; (WIP)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/Ananto30/mocker"&gt;Gmocker&lt;/a&gt;&lt;/strong&gt;: Create a blazing fast mock server with just a JSON file! (Go)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/Ananto30/story-point"&gt;Storypoint&lt;/a&gt;&lt;/strong&gt;: Realtime story pointing (or T-shirt sizing) app. &lt;a href="https://storypoint.onrender.com/" rel="nofollow"&gt;storypoint.onrender.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/Ananto30/news13"&gt;News13&lt;/a&gt;&lt;/strong&gt;: Minimalistic uncluttered latest news (of Bangladesh). &lt;a href="https://news13.netlify.app/" rel="nofollow"&gt;news13.netlify.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/Ananto30/cap-em"&gt;Cap-em&lt;/a&gt;&lt;/strong&gt;: Resource limit tracker.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/Ananto30/loggable"&gt;Loggable&lt;/a&gt;&lt;/strong&gt;: A logging annotation library for reactive java.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🔬 POC's&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Async to sync using
&lt;ul&gt;
&lt;li&gt;Go channels - &lt;a href="https://github.com/Ananto30/go-async-to-sync"&gt;repo&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Vert.x - &lt;a href="https://github.com/Ananto30/vertx-async-gateway"&gt;repo&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;A Fiber(Go) backend for a diary app - &lt;a href="https://github.com/Ananto30/diary-backend"&gt;repo&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🎮 My &lt;a href="https://store.steampowered.com/" rel="nofollow"&gt;Steam&lt;/a&gt; games! (&lt;a href="https://github.com/Ananto30/steam-stat"&gt;repo&lt;/a&gt;) -&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/4c54e8cc6c469780014da01507271b9445fb2c4840a5272e2afc610177605763/68747470733a2f2f737465616d2d737461742e76657263656c2e6170702f6170693f70726f66696c654e616d653d616e616e746f"&gt;&lt;img src="https://camo.githubusercontent.com/4c54e8cc6c469780014da01507271b9445fb2c4840a5272e2afc610177605763/68747470733a2f2f737465616d2d737461742e76657263656c2e6170702f6170693f70726f66696c654e616d653d616e616e746f" alt="Travis"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🧑‍💻 My &lt;a href="https://profile.codersrank.io/user/ananto30" rel="nofollow"&gt;codersrank&lt;/a&gt;
&lt;/h3&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Ananto30/Ananto30"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;All you need is to make your Steam profile public. The steps are shown in the repo - &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--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Ananto30"&gt;
        Ananto30
      &lt;/a&gt; / &lt;a href="https://github.com/Ananto30/steam-stat"&gt;
        steam-stat
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🎮 Dynamically generate your Steam (game) stats card on SVG
    &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;Steam-stats&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;Steam stats svg generator. Create your own Steam stat dynamically and share anywhere.&lt;/p&gt;
&lt;p&gt;This can be used with &lt;code&gt;.md&lt;/code&gt; files!&lt;/p&gt;
&lt;p&gt;You can put in your GitHub readme too 😃&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Example 📝&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;For &lt;code&gt;.md&lt;/code&gt; files -&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;![Travis](https://steam-stat.vercel.app/api?profileName=ananto)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;For using as &lt;code&gt;img&lt;/code&gt; property in html or md files -&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;&amp;lt;img src="https://steam-stat.vercel.app/api?profileName=ananto"/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="https://steam-stat.vercel.app/api?profileName=ananto" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/4c54e8cc6c469780014da01507271b9445fb2c4840a5272e2afc610177605763/68747470733a2f2f737465616d2d737461742e76657263656c2e6170702f6170693f70726f66696c654e616d653d616e616e746f" alt="Travis"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You need to provide the profile name in query parameter &lt;code&gt;?profileName=ananto&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Please ensure that your Steam profile is public!&lt;/strong&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;How to get profile name or url&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Ananto30/steam-stat./ss/GoToProfile.png?raw=true"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RPn-c6zY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/Ananto30/steam-stat./ss/GoToProfile.png%3Fraw%3Dtrue" alt="Go to profile" title="Go to profile"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer" href="https://github.com/Ananto30/steam-stat./ss/GetProfileName.png?raw=true"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3rwRAWSv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/Ananto30/steam-stat./ss/GetProfileName.png%3Fraw%3Dtrue" alt="Get profile name" title="Get profile name"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;How to make profile public&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Ananto30/steam-stat./ss/public.png?raw=true"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--doQCZX9F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/Ananto30/steam-stat./ss/public.png%3Fraw%3Dtrue" alt="Make profile public" title="Make profile public"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Contribution&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Contributions are welcomed ❤️&lt;/p&gt;
&lt;p&gt;There are many things to add, so please feel free to discuss and improve the code quality&lt;/p&gt;

&lt;p&gt;Inspired by &lt;a href="https://github.com/anuraghazra/github-readme-stats"&gt;github-readme-stats&lt;/a&gt; and &lt;a href="https://github.com/natemoo-re/natemoo-re"&gt;natemoo-re&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Ananto30/steam-stat"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;I am attaching the following line in this blog post and it will dynamically generate the SVG every time someone visits this page!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;![Travis](https://steam-stat.vercel.app/api?profileName=ananto)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Result - &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lV8jTf59--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://steam-stat.vercel.app/api%3FprofileName%3Dananto" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lV8jTf59--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://steam-stat.vercel.app/api%3FprofileName%3Dananto" alt="Travis" width="360" height="220"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(Obviously this has some caching to reduce spamming the Steam API 😛)&lt;/p&gt;

&lt;p&gt;Please give it a ⭐️ star if you like it. 😃 &lt;br&gt;
Suggest any further improvements and contributions are also welcomed. 👏&lt;br&gt;
Share your profile in the comment! 👇&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>javascript</category>
      <category>serverless</category>
    </item>
    <item>
      <title>An example Jooby app, Jooby is one of the fastest and performant framework in Java</title>
      <dc:creator>Azizul Haque Ananto</dc:creator>
      <pubDate>Sat, 20 Jun 2020 07:56:58 +0000</pubDate>
      <link>https://forem.com/ananto30/an-example-jooby-app-one-of-the-fastest-and-performant-framework-in-java-4b9l</link>
      <guid>https://forem.com/ananto30/an-example-jooby-app-one-of-the-fastest-and-performant-framework-in-java-4b9l</guid>
      <description>&lt;p&gt;TL;DR&lt;br&gt;
Here is the repo - &lt;a href="https://github.com/Ananto30/jooby-example-shortify"&gt;https://github.com/Ananto30/jooby-example-shortify&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jooby.io/"&gt;Jooby&lt;/a&gt; seems a very promising framework. It's easy and fast. I noticed the &lt;a href="https://www.techempower.com/benchmarks/#section=data-r19&amp;amp;hw=cl&amp;amp;test=composite"&gt;Techempower benchmark&lt;/a&gt; last week and found this amazing framework that supports Java and Kotlin.&lt;/p&gt;

&lt;h3&gt;
  
  
  History(!!) 🧐
&lt;/h3&gt;

&lt;p&gt;I have been working with &lt;a href="https://docs.spring.io/spring-framework/docs/5.0.0.BUILD-SNAPSHOT/spring-framework-reference/html/web-reactive.html"&gt;Webflux&lt;/a&gt; for around a year. Webflux is the implementation of reactive Java on top of Spring-boot framework. It is basically a non-blocking concept and reuses threads for concurrent connections, really good for modern services with lots of concurrent requests. But writing reactive code is not that fun, you have to maintain a chain and catching errors and no filtering and less readable code and so on... 😰 That's another talk.&lt;/p&gt;

&lt;p&gt;So basically I was looking for another framework with the same performance but not reactive 😐 And I think Jooby is that one! 😃 And also it has the ability to run &lt;a href="https://jooby.io/#execution-model-mode-event-loop"&gt;Event-loop&lt;/a&gt;, the non-blocking concept like Webflux where we can use the reactive java. Even the default mode supports both blocking and non-blocking in the same app! This is really cool! &lt;/p&gt;

&lt;h3&gt;
  
  
  Getting started
&lt;/h3&gt;

&lt;p&gt;To begin with, it's really easy to setup a Jooby project, though it hasn't got starter like Spring-boot, but the jooby-cli is enough to bootstrap a new projects with varities of configurations. Easy way is to -&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download the &lt;a href="https://repo1.maven.org/maven2/io/jooby/jooby-cli/2.8.6/jooby-cli-2.8.6.zip"&gt;jooby-cli&lt;/a&gt; (please refer to the doc's download, the link may change)&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;bin/jooby&lt;/code&gt; or &lt;code&gt;bin/jooby.bat&lt;/code&gt; to the system path variable.&lt;/li&gt;
&lt;li&gt;Set workspace 
&lt;code&gt;
jooby set -w ~/Source
&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Create a new project
&lt;code&gt;
jooby&amp;gt; create myapp --gradle --mvc --docker
&lt;/code&gt;
This is how I created mine, you can find other options by &lt;code&gt;jooby&amp;gt; help create&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can find the details here - &lt;a href="https://jooby.io/#getting-started"&gt;https://jooby.io/#getting-started&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Overview
&lt;/h3&gt;

&lt;p&gt;I have created this app - &lt;a href="https://github.com/Ananto30/jooby-example-shortify"&gt;https://github.com/Ananto30/jooby-example-shortify&lt;/a&gt; for exampling and maybe I will add more modules and functionalities to it for future tutorials. This is a url shortener app, uses redis to keep track of them. A very simple app, implemented in a spring like architecture.&lt;/p&gt;

&lt;p&gt;I won't go deeper into every module or explaining all of my code. I will do that if you need me to, please comment for that. Mostly I will talk about the overall app structure.&lt;/p&gt;

&lt;p&gt;I have used the &lt;a href="https://jooby.io/#mvc-api"&gt;mvc api&lt;/a&gt; of jooby. It's more like the spring-boot concept. My app has a controller, service, and some dto's. You can relate the architecture to spring-boot. All you need is to install the modules, there are a handful of modules already integrated to jooby and for other ones you just need to write an extension and register that in jooby's service registy, more like a bean in spring-boot, but with less magic, full control. &lt;/p&gt;

&lt;p&gt;You can pass &lt;code&gt;Context&lt;/code&gt; to any controller, handler, or service, just take it as an argument. There are filters, I have used them for request response logging, somewhat like the AOP. The error handler is really easy to integrate. And much more... I really loved the framework, it's easy with less magic!&lt;/p&gt;

&lt;p&gt;Please check out my repository for a thorough idea of the app, and if you have any questions or idea or opinion or anything 😅 comment down below 👇&lt;/p&gt;

</description>
      <category>java</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Deploy Django or Flask in 3 easy steps (in production)</title>
      <dc:creator>Azizul Haque Ananto</dc:creator>
      <pubDate>Tue, 09 Jun 2020 19:04:53 +0000</pubDate>
      <link>https://forem.com/ananto30/deploy-django-or-flask-in-3-easy-steps-in-production-1ni3</link>
      <guid>https://forem.com/ananto30/deploy-django-or-flask-in-3-easy-steps-in-production-1ni3</guid>
      <description>&lt;p&gt;No intro, let's jump to the steps.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Write a Dockerfile 😐 (why not)
&lt;/h2&gt;

&lt;p&gt;This is my directory structure -&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;├── app/
│     .....
├── requirements.txt
├── Dockerfile
└── gunicorn_starter.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the Dockerfile -&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; python:3.7.3-slim&lt;/span&gt;

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /user/src&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; ./requirements.txt ./&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;pip3 &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; ./requirements.txt

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; ./app ./app&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; ./gunicorn_starter.sh ./&lt;/span&gt;

&lt;span class="k"&gt;ENTRYPOINT&lt;/span&gt;&lt;span class="s"&gt; ["./gunicorn_starter.sh"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Things to remember - &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use small docker images like &lt;code&gt;-slim&lt;/code&gt; or &lt;code&gt;-alpine&lt;/code&gt;. &lt;code&gt;-alpine&lt;/code&gt; is the lightest but in my case &lt;code&gt;-alpine&lt;/code&gt; haven't got the &lt;code&gt;gcc&lt;/code&gt; so I used &lt;code&gt;-slim&lt;/code&gt;. (I could've install gcc manually in alpine)&lt;/li&gt;
&lt;li&gt;Import requirements and install them before importing codes. Why? If we change our code, we won't need to install requirements in every build. Simple and easy way to reduce build times 🤗&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  2. Gunicorn server
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Why Gunicorn?&lt;/strong&gt; 🧐 -&amp;gt; Django or Flask is a framework, not server. So we need a server to serve our application built with the framework. Gunicorn is a WSGI supported server that can communicate with other application that supports WSGI like Flask or Django. WSGI is a gateway interface that matches the URI defined in the python application.&lt;/p&gt;

&lt;p&gt;Now install gunicorn and add to the requirements.txt&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;gunicorn
pip freeze &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the &lt;code&gt;gunicorn_starter.sh&lt;/code&gt; file we have seen earlier -&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gunicorn &lt;span class="nt"&gt;--chdir&lt;/span&gt; app wsgi:app &lt;span class="nt"&gt;-w&lt;/span&gt; 2 &lt;span class="nt"&gt;--threads&lt;/span&gt; 2 &lt;span class="nt"&gt;-b&lt;/span&gt; 0.0.0.0:8003
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We show gunicorn our project directory with &lt;code&gt;--chdir app&lt;/code&gt;. &lt;code&gt;wsgi:app&lt;/code&gt; for Django apps and for Flask, we need the file name where we did &lt;code&gt;app = Flask()&lt;/code&gt;, like this - &lt;code&gt;&amp;lt;file_contains_app&amp;gt;:app&lt;/code&gt;. Change worker and thread as per your need. Too much workers actually makes a system slow, why? Because workers are processes, and they shares same CPU core. And we should know our threads right? 😅&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Build &amp;amp; Deploy (Seek &amp;amp; Destroy ☠️)
&lt;/h2&gt;

&lt;p&gt;Build the docker image -&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; &amp;lt;your_tag&amp;gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This image is production ready! Beleive it or not 😐&lt;/p&gt;

&lt;p&gt;Run it 🤘 -&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--name&lt;/span&gt; &amp;lt;image_name&amp;gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 8003:8003 &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;DB_URI&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;your_db_uri&amp;gt; &amp;lt;your_tag&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;-e DB_URI=&amp;lt;your_db_uri&amp;gt;&lt;/code&gt; here &lt;code&gt;-e&lt;/code&gt; sets the environment variable. I set my DB with URI, so I passed this environment variable &lt;code&gt;DB_URI&lt;/code&gt; while running my image.&lt;/p&gt;

&lt;p&gt;This is it! 🥳 If you have any questions or face any problem, comment below 👇&lt;/p&gt;

</description>
      <category>python</category>
      <category>django</category>
      <category>docker</category>
    </item>
    <item>
      <title>How to add some badges in your git readme (GitHub, Gitlab etc.)</title>
      <dc:creator>Azizul Haque Ananto</dc:creator>
      <pubDate>Thu, 04 Jun 2020 21:34:22 +0000</pubDate>
      <link>https://forem.com/ananto30/how-to-add-some-badges-in-your-git-readme-github-gitlab-etc-3ne9</link>
      <guid>https://forem.com/ananto30/how-to-add-some-badges-in-your-git-readme-github-gitlab-etc-3ne9</guid>
      <description>&lt;p&gt;While I published &lt;a href="https://github.com/Ananto30/cap-em"&gt;this&lt;/a&gt; repo I was looking for some badges to add in my readme. And found some interesting services worth sharing.&lt;/p&gt;

&lt;p&gt;The most amazing place to make your badges is the &lt;a href="https://shields.io"&gt;https://shields.io&lt;/a&gt;. But I will explain each category to use them in the shield.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build
&lt;/h2&gt;

&lt;p&gt;First, the badge you will look for is the build passing badge. You have written some amazing tests and you need to show that they are passing. There are several good services for that, I used &lt;strong&gt;&lt;a href="https://travis-ci.com"&gt;Travis CI&lt;/a&gt;&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;The integration is really easy. You need to add a &lt;code&gt;.travis.yml&lt;/code&gt; file in your repo. Mine was pretty straight-forward -&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;language&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python&lt;/span&gt;
&lt;span class="na"&gt;python&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;3.7"&lt;/span&gt;
&lt;span class="na"&gt;install&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;pip install -r requirements.txt&lt;/span&gt;
&lt;span class="na"&gt;script&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; 
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;python -m pytest  --cov-report term --cov=app&lt;/span&gt;
&lt;span class="na"&gt;after_success&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;codecov&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I will talk about the &lt;code&gt;after_success&lt;/code&gt; part next. Before that, you need the badge, right? You can get it by simply clicking the &lt;code&gt;build passing&lt;/code&gt; button.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code Coverage
&lt;/h2&gt;

&lt;p&gt;You have the tests passing, and the earned the badge. Now you need some coverage for your tests. You already know it by running tests with coverage option. For Python you may run this &lt;code&gt;python -m pytest  --cov-report term --cov=app&lt;/code&gt;. But how to get the badge?&lt;/p&gt;

&lt;p&gt;You can use &lt;strong&gt;&lt;a href="https://codecov.io/"&gt;Codecov&lt;/a&gt;&lt;/strong&gt;. For Python you need to install the &lt;code&gt;codecov&lt;/code&gt; package by &lt;code&gt;pip install codecov&lt;/code&gt;. Then just add this line in your &lt;code&gt;.travis.yml&lt;/code&gt; -&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;after_success&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;codecov&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can find the badge in the settings page.&lt;/p&gt;

&lt;p&gt;You can also use &lt;strong&gt;&lt;a href="https://coveralls.io/"&gt;Coveralls&lt;/a&gt;&lt;/strong&gt; for the same purpose. In that case, you need to install &lt;code&gt;coveralls&lt;/code&gt; package in Python. You can find the badge in the bottom of your repo page in coveralls.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dependency monitor
&lt;/h2&gt;

&lt;p&gt;This is really useful, not only for the badge but you can also manage your dependencies with the coming updates. &lt;/p&gt;

&lt;p&gt;For Python you can use &lt;strong&gt;&lt;a href="https://requires.io/"&gt;requires.io&lt;/a&gt;&lt;/strong&gt;. To get PR for new package changes you need to configure it by these steps: Hooks -&amp;gt; New pull request -&amp;gt; (configure as you like) -&amp;gt; save changes. And you can find the badge in specific repo page.&lt;/p&gt;

&lt;p&gt;For Node.js &lt;strong&gt;&lt;a href="https://depfu.com/"&gt;Depfu&lt;/a&gt;&lt;/strong&gt; is a good service. You will get PR automatically, don't need to setup any hooks. You can find the badge in the settings of the specific repo page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code Quality
&lt;/h2&gt;

&lt;p&gt;There's a few services for that. I used both &lt;strong&gt;&lt;a href="https://lgtm.com"&gt;lgtm&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;a href="https://codeclimate.com"&gt;Code Climate&lt;/a&gt;&lt;/strong&gt;. I won't comapre or judge them as they both marked my code A 😅 &lt;/p&gt;

&lt;p&gt;You can find lgtm badges in the specific repo's integration page and the codeclimate badges can be found in the repo settings page.&lt;/p&gt;

&lt;p&gt;There are also other services specific to your needs. You can know about them from &lt;a href="https://shields.io"&gt;shields&lt;/a&gt; actually. Making badge is really easy with them. Have a try!&lt;/p&gt;

</description>
      <category>git</category>
    </item>
    <item>
      <title>Why a distributed system (highly concurrent) is mostly asynchronous?</title>
      <dc:creator>Azizul Haque Ananto</dc:creator>
      <pubDate>Thu, 26 Mar 2020 07:51:31 +0000</pubDate>
      <link>https://forem.com/ananto30/why-a-highly-concurrent-system-is-mostly-asynchronous-5g6b</link>
      <guid>https://forem.com/ananto30/why-a-highly-concurrent-system-is-mostly-asynchronous-5g6b</guid>
      <description>&lt;p&gt;The actual problem in synchronous systems is the waiting time between the client and server where both have to wait for the process to complete. In a system where millions of requests are made per second, they usually take the request and process it asynchronously with messaging systems like Kafka or any MQ's. A gateway client may wait for the response event to respond to the user, but the actual process happens in async (maybe) in the internally distributed systems. So there are two questions I would like to ask - &lt;br&gt;
1) Is my concept correct about high concurrent systems?&lt;br&gt;
2) Is there any way we can make this kind of system synchronous? (internally)&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>distributedsystems</category>
      <category>microservices</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
