<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://ultimatecoder.github.io/Blog/feed.xml" rel="self" type="application/atom+xml"/><link href="https://ultimatecoder.github.io/Blog/" rel="alternate" type="text/html"/><updated>2026-07-25T09:41:03+00:00</updated><id>https://ultimatecoder.github.io/Blog/feed.xml</id><title type="html">Jaysinh’s own heed</title><subtitle>I am a Full-stack developer by profession, Computer scientist by heart and an Actor by gene. I write mostly on programming topics. Browse through my blog posts to identify my taste of writing. </subtitle><entry><title type="html">Python 3.7 feature walkthrough</title><link href="https://ultimatecoder.github.io/Blog/2019/01/12/python-3-7-feature-walkthrough.html" rel="alternate" type="text/html" title="Python 3.7 feature walkthrough"/><published>2019-01-12T19:53:12+00:00</published><updated>2019-01-12T19:53:12+00:00</updated><id>https://ultimatecoder.github.io/Blog/2019/01/12/python-3-7-feature-walkthrough</id><content type="html" xml:base="https://ultimatecoder.github.io/Blog/2019/01/12/python-3-7-feature-walkthrough.html"><![CDATA[<p>In this post, I will explain improvements done in Core Python version 3.7. Below is the outline of features covered in this post.</p> <ul> <li> <p>Breakpoints</p> </li> <li> <p>Subprocess</p> </li> <li> <p>Dataclass</p> </li> <li> <p>Namedtuples</p> </li> <li> <p>Hash-based Python object file</p> </li> </ul> <h3 id="breakpoint">breakpoint()</h3> <p>Breakpoint is an extremely important tool for debugging. Since I started learning Python, I am using the same API for putting breakpoints. With this release, <code class="language-plaintext highlighter-rouge">breakpoint()</code> is introduced as a built-in function. Because it is in a built-in scope, you don’t have to import it from any module. You can call this function to put breakpoints in your code. This approach is handier than importing <code class="language-plaintext highlighter-rouge">pdb.set_trace()</code>.</p> <p><img src="/Blog/assets/images/walkthrough_python_3_7/breakpoint_example.gif" alt="Breakpoint function in Python 3.7"/></p> <p>Code used in above example</p> <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nf">range</span><span class="p">(</span><span class="mi">100</span><span class="p">):</span>
    <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">10</span><span class="p">:</span>
        <span class="nf">breakpoint</span><span class="p">()</span>
    <span class="k">else</span><span class="p">:</span>
        <span class="nf">print</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>

</code></pre></div></div> <h3 id="pythonbreakpoint">PYTHONBREAKPOINT</h3> <p>There wasn’t any handy option to disable or enable existing breakpoints with a single flag. But with this release, you can certainly reduce your pain by using <code class="language-plaintext highlighter-rouge">PYTHONBREAKPOINT</code> environment variable. You can disable all breakpoints in your code by setting the environment variable <code class="language-plaintext highlighter-rouge">PYTHONBREAKPOINT</code> to <code class="language-plaintext highlighter-rouge">0</code>.</p> <p><img src="/Blog/assets/images/walkthrough_python_3_7/breakpoint_environment_variable_example.gif" alt="Breakpoint environment variable in Python 3.7"/></p> <h5 id="i-advise-putting-pythonbreakpoint0-in-your-production-environment-to-avoid-unwanted-pausing-at-forgotten-breakpoints">I advise putting “PYTHONBREAKPOINT=0” in your production environment to avoid unwanted pausing at forgotten breakpoints</h5> <h3 id="subprocessruncapture_outputtrue">Subprocess.run(capture_output=True)</h3> <p>You can pipe the output of Standard Output Stream (stdout) and Standard Error Stream (stderr) by enabling <code class="language-plaintext highlighter-rouge">capture_output</code> parameter of <code class="language-plaintext highlighter-rouge">subprocess.run()</code> function.</p> <p><img src="/Blog/assets/images/walkthrough_python_3_7/subprocess_run_capture_output.gif" alt="subprocess.run got capture_output parameter"/></p> <p>You should note that it is an improvement over piping the stream manually. For example, <code class="language-plaintext highlighter-rouge">subprocess.run(["ls", "-l", "/var"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)</code> was the previous approach to capture the output of <code class="language-plaintext highlighter-rouge">stdout</code> and <code class="language-plaintext highlighter-rouge">stderr</code>.</p> <h3 id="dataclasses">Dataclasses</h3> <p>The new class level decorator <code class="language-plaintext highlighter-rouge">@dataclass</code> introduced with the <code class="language-plaintext highlighter-rouge">dataclasses</code> module. Python is well-known for achieving more by writing less. It seems that this module will receive more updates in future which can be applied to reduce significant line of code. Basic understanding of Typehints is expected to understand this feature.</p> <p>When you wrap your class with the <code class="language-plaintext highlighter-rouge">@dataclass</code> decorator, the decorator will put obvious constructor code for you. Additionally, it defines a behaviour for dander methods <code class="language-plaintext highlighter-rouge">__repr__()</code>, <code class="language-plaintext highlighter-rouge">__eq__()</code> and <code class="language-plaintext highlighter-rouge">__hash__()</code>.</p> <p><img src="/Blog/assets/images/walkthrough_python_3_7/dataclasses_dataclass.gif" alt="Dataclasses.dataclass"/></p> <p>Below is the code before introducing a <code class="language-plaintext highlighter-rouge">dataclasses.dataclass</code> decorator.</p> <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">class</span> <span class="nc">Point</span><span class="p">:</span>

    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="n">self</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
        <span class="n">self</span><span class="p">.</span><span class="n">x</span> <span class="o">=</span> <span class="n">x</span>
        <span class="n">self</span><span class="p">.</span><span class="n">y</span> <span class="o">=</span> <span class="n">y</span>
</code></pre></div></div> <p>After wrapping with <code class="language-plaintext highlighter-rouge">@dataclass</code> decorator it reduces to below code</p> <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">dataclasses</span> <span class="kn">import</span> <span class="n">dataclass</span>


<span class="nd">@dataclass</span>
<span class="k">class</span> <span class="nc">Point</span><span class="p">:</span>
    <span class="n">x</span><span class="p">:</span> <span class="nb">float</span>
    <span class="n">y</span><span class="p">:</span> <span class="nb">float</span>
</code></pre></div></div> <h3 id="namedtuples">Namedtuples</h3> <p>The namedtuples are a very helpful data structure, yet I found it is less known amongst developers. With this release, you can set default values to argument variables.</p> <p><img src="/Blog/assets/images/walkthrough_python_3_7/namedtuple_example.gif" alt="Namedtuples with default arguments"/></p> <h5 id="note-default-arguments-will-be-assigned-from-left-to-right-in-the-above-example-default-value-2-will-be-assigned-to-variable-y">Note: Default arguments will be assigned from left to right. In the above example, default value <code class="language-plaintext highlighter-rouge">2</code> will be assigned to variable <code class="language-plaintext highlighter-rouge">y</code></h5> <p>Below is the code used in the example</p> <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">collections</span> <span class="kn">import</span> <span class="n">namedtuple</span>


<span class="n">Point</span> <span class="o">=</span> <span class="nf">namedtuple</span><span class="p">(</span><span class="sh">"</span><span class="s">Point</span><span class="sh">"</span><span class="p">,</span> <span class="p">[</span><span class="sh">"</span><span class="s">x</span><span class="sh">"</span><span class="p">,</span> <span class="sh">"</span><span class="s">y</span><span class="sh">"</span><span class="p">],</span> <span class="n">defaults</span><span class="o">=</span><span class="p">[</span><span class="mi">2</span><span class="p">,])</span>
<span class="n">p</span> <span class="o">=</span> <span class="nc">Point</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
</code></pre></div></div> <h3 id="pyc">.pyc</h3> <p><strong>.pyc</strong> are object files generated everytime you change your code file (.py). It is a collection of meta-data created by an interpreter for an executed code. The interpreter will use this data when you re-execute this code next time. Present approach to identify an outdated object file is done by comparing meta fields of source code file like last edited date. With this release, that identification process is improved by comparing files using a hash-based approach. The hash-based approach is quick and consistent across various platforms than comparing last edited dates. This improvement is considered unstable. Core python will continue with the metadata approach and slowly migrate to the hash-based approach.</p> <h3 id="summary">Summary</h3> <ul> <li> <p>Calling <code class="language-plaintext highlighter-rouge">breakpoint()</code> will put a breakpoint in your code.</p> </li> <li> <p>Disable all breakpoints in your code by setting an environment variable <code class="language-plaintext highlighter-rouge">PYTHONBREAKPOINT=0</code>.</p> </li> <li> <p><code class="language-plaintext highlighter-rouge">subprocess.run([...], capture_output=True)</code> will capture the output of <code class="language-plaintext highlighter-rouge">stdout</code> and <code class="language-plaintext highlighter-rouge">stderr</code>.</p> </li> <li> <p>Class level decorator <code class="language-plaintext highlighter-rouge">@dataclass</code> will define default logic for constructor function. It will implement default logic for dunder methods <code class="language-plaintext highlighter-rouge">__repr__()</code>, <code class="language-plaintext highlighter-rouge">___eq__()</code> and <code class="language-plaintext highlighter-rouge">__hash__()</code>.</p> </li> <li> <p>Namedtuple data structure supports default values to its arguments using <code class="language-plaintext highlighter-rouge">defaults</code>.</p> </li> <li> <p>Outdated Python object files (.pyc) are compared using the hash-based approach.</p> </li> </ul> <p>I hope you were able to learn something new by reading this post. If you want to read an in-depth discussion on each feature introduced in Python 3.7, then please read <a href="https://docs.python.org/3.7/whatsnew/changelog.html#python-3-7-0-final">this</a> official post. Happy hacking!</p> <h6 id="proofreaders-jason-braganza-ninpo-basen_-from-python-at-freenode-ultron-from-python-offtopic-at-freenode-upime-from-english-at-freenode">Proofreaders: <a href="https://janusworx.com/">Jason Braganza</a>, Ninpo, basen_ from #python at Freenode, Ultron from #python-offtopic at Freenode, up|ime from ##English at Freenode</h6>]]></content><author><name>Jaysinh Shukla</name></author><category term="Python"/><category term="CorePython"/><category term="Python3.7"/><summary type="html"><![CDATA[In this post, I will explain improvements done in Core Python version 3.7. Below is the outline of features covered in this post.]]></summary></entry><entry><title type="html">Analyzing the behaviour of Python function slice</title><link href="https://ultimatecoder.github.io/Blog/2018/09/29/analyzing-the-behaviour-of-python-function-splice.html" rel="alternate" type="text/html" title="Analyzing the behaviour of Python function slice"/><published>2018-09-29T04:47:46+00:00</published><updated>2018-09-29T04:47:46+00:00</updated><id>https://ultimatecoder.github.io/Blog/2018/09/29/analyzing-the-behaviour-of-python-function-splice</id><content type="html" xml:base="https://ultimatecoder.github.io/Blog/2018/09/29/analyzing-the-behaviour-of-python-function-splice.html"><![CDATA[<p><img src="/Blog/assets/images/python_slice_function/title_image.jpg" alt="Title Image"/></p> <p>Last Friday, I was sitting in one of the good coffee shops in Bangalore with my friend. Coffee and discussion is the best combination to release stress. It was looking like a perfect Friday evening until my friend was struck by an idea of asking me a question.</p> <p>“Let me conduct a quiz.” he said, interrupting our conversation.</p> <p>“A quiz? Quiz on what?”, I asked.</p> <p>“On programming”, he said</p> <p>“What is the level of difficulty then?” I said.</p> <p>Asking the level of difficulty is important. I never invest my efforts in solving something easy. If he had said easy, I would have ignored to answer, but he said “It is a bit difficult, but not that difficult. I gave a wrong answer to this question in my last interview.”</p> <p>There was no reason to go back from here. Taking some deep breaths I said, “Please go ahead.”</p> <p>He stood up, took a tissue paper from a nearby counter and scratched below code on it. <sup id="fnref:1"><a href="#fn:1" class="footnote" rel="footnote" role="doc-noteref">1</a></sup> And he asked me by pointing towards that code, “What will be the output of this code?”</p> <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">my_function</span><span class="p">():</span>
    <span class="n">l</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">]</span>
    <span class="nf">print</span><span class="p">(</span><span class="n">l</span><span class="p">[</span><span class="mi">30</span><span class="p">:])</span>

<span class="nf">my_function</span><span class="p">()</span>
</code></pre></div></div> <p>Now it was my turn to give the answer. I looked at the code and tried parsing it in my head — line by line. In my mind, I observed the first line. It was defining a function which seems to be correct. I moved my eyes to the next line. It was defining a variable <code class="language-plaintext highlighter-rouge">l</code> of type <code class="language-plaintext highlighter-rouge">list</code> and assigning values ranging from <code class="language-plaintext highlighter-rouge">0</code> to <code class="language-plaintext highlighter-rouge">2</code>. Even this wasn’t looking problematic. So I forwarded to the next line where it was trying to print that variable <code class="language-plaintext highlighter-rouge">l</code> by slicing it from starting value <code class="language-plaintext highlighter-rouge">30</code> to the infinity.</p> <p>“Well, the start value is <code class="language-plaintext highlighter-rouge">30</code> which is greater than the length of the list. This should raise an <code class="language-plaintext highlighter-rouge">IndexError</code>” I said in my mind. I was about to speak an answer, but suddenly Devil of me flashed.</p> <p>“It is less than <a href="http://catb.org/jargon/html/O/one-banana-problem.html">a banana job</a> my dear,” the Devil said to me, “You should take a little advantage of this opportunity my boy.”</p> <p>Because things were looking in my control, I shook my hands with the Devil.</p> <p>I said to my friend, “How about betting for some real values?”</p> <p>Going closer I spoke, “If I answer correctly, You will pay the bill and If I am wrong, This will be a treat from my side.”</p> <p>He thought for a while and nodded. Now it was my turn to unveil the cards.</p> <p>I said in a strong voice, “It will raise an <code class="language-plaintext highlighter-rouge">IndexError</code>.” And shifted my focus towards the chocolate.</p> <p>He starred my face for a second and spoke, “Okay. Are you sure about this?”.</p> <p>This was the hint he gave. I should have taken another shot here. What happens next become a lesson for me.</p> <p>I said with a flat face, “Yes I am.”</p> <p>With my answer, he instantly opened his backpack, took his Laptop out and typed the code which he wrote on that tissue.</p> <p>When I stopped hearing a sound of typing I yelled, “So did I win?”</p> <p>He turned his laptop towards me and exclaimed, “Not at all!”</p> <p>When I focused on the screen, the interpreter was printing <code class="language-plaintext highlighter-rouge">[]</code>. Damn! I lost the bet. Why the hell <code class="language-plaintext highlighter-rouge">slice</code> is returning an empty <code class="language-plaintext highlighter-rouge">list</code> even when we are trying to slice it with a value which is greater than the length of it! It was surely looking unpythonic behavior. I paid whatever the bill amount was. Entire evening this question was all roaming my mind. After coming home, I decided to justify reasons for returning an empty list instead of raising an <code class="language-plaintext highlighter-rouge">IndexError</code> from a <code class="language-plaintext highlighter-rouge">slice</code>.</p> <p>Below are a few reasons justifying such behavior of slice function. I am sharing this with you so that you don’t lose a bet with your friend :) For those who haven’t used slice anytime in their life, I advise to read <a href="https://docs.python.org/3.7/tutorial/introduction.html#lists">this</a> tutorial. Reading <a href="https://docs.python.org/3.7/library/stdtypes.html#sequence-types-list-tuple-range">this</a> guide for understanding how a slice function converts the input values. Especially rule number 3 and 4 referenced there.</p> <ul> <li> <p><strong>Reason number one:</strong></p> <p>Python lists are more commonly used in iterations. Consider below example:</p> <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">numbers</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">]</span>
<span class="k">for</span> <span class="n">number</span> <span class="ow">in</span> <span class="n">numbers</span><span class="p">[</span><span class="mi">30</span><span class="p">:]:</span>
    <span class="nf">print</span><span class="p">(</span><span class="n">number</span><span class="p">)</span>
</code></pre></div> </div> <p>If <code class="language-plaintext highlighter-rouge">slice</code> was raising an <code class="language-plaintext highlighter-rouge">IndexError</code>, then the above code would have to written like this</p> <p>written like like this</p> <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">numbers</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">]</span>
<span class="k">try</span><span class="p">:</span>
    <span class="k">for</span> <span class="n">number</span> <span class="ow">in</span> <span class="n">numbers</span><span class="p">[</span><span class="mi">30</span><span class="p">:]:</span>
        <span class="nf">print</span><span class="p">(</span><span class="n">numbers</span><span class="p">)</span>
<span class="k">except</span> <span class="nb">IndexError</span><span class="p">:</span>
    <span class="k">pass</span>
</code></pre></div> </div> <p>Or in another way below is also looking reasonable</p> <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">numbers</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">]</span>
<span class="n">start</span> <span class="o">=</span> <span class="mi">30</span>
<span class="k">if</span> <span class="n">start</span> <span class="o">&lt;</span> <span class="nf">len</span><span class="p">(</span><span class="n">numbers</span><span class="p">):</span>
    <span class="k">for</span> <span class="n">number</span> <span class="ow">in</span> <span class="n">numbers</span><span class="p">[</span><span class="n">start</span><span class="p">:]:</span>
        <span class="nf">print</span><span class="p">(</span><span class="n">number</span><span class="p">)</span>
</code></pre></div> </div> <p>Both the approaches are looking little lengthy by an obvious reason. And that reason is to prevent executing loop if there are no elements in it. When we observe the behavior of <code class="language-plaintext highlighter-rouge">slice</code> called at <code class="language-plaintext highlighter-rouge">for in</code>, it makes sense to return an empty list instead of raising an <code class="language-plaintext highlighter-rouge">IndexError</code>.</p> </li> </ul> <p>I am not able to find further reasons to return an empty list instead of raising the <code class="language-plaintext highlighter-rouge">IndexError</code>. But I am sure, there will be. If you know any other potential reasons for such behavior of <code class="language-plaintext highlighter-rouge">slice</code>, please drop me a mail at <strong>jaysinhp</strong> at <strong>gmail</strong> dot <strong>com</strong> or contact me over Twitter <a href="https://twitter.com/jaysinhp">@jaysinhp</a>. I will update the reasons at this post and give credits to you. Thanks for reading this post.</p> <h6 id="proofreaders-geoffrey-sneddon-elijah-mahendra-yadav-dhavan-vaidya">Proofreaders: <a href="https://github.com/gsnedders">Geoffrey Sneddon</a>, <a href="https://mailto:thyarmageddon@gmail.com">Elijah</a>, <a href="mailto:mahendra.k12@gmail.com">Mahendra Yadav</a>, <a href="http://codingquark.com/">Dhavan Vaidya</a>,</h6> <div class="footnotes" role="doc-endnotes"> <ol> <li id="fn:1"> <p>I am using the word “Scratch” because that tissue paper was such a thin that writing by a ballpen torn it. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p> </li> </ol> </div>]]></content><author><name>Jaysinh Shukla</name></author><category term="python"/><category term="slice"/><category term="python trick questions"/><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Book review ‘Docker Up &amp;amp; Running’</title><link href="https://ultimatecoder.github.io/Blog/2017/12/05/book-review-docker-up-running.html" rel="alternate" type="text/html" title="Book review ‘Docker Up &amp;amp; Running’"/><published>2017-12-05T05:56:32+00:00</published><updated>2017-12-05T05:56:32+00:00</updated><id>https://ultimatecoder.github.io/Blog/2017/12/05/book-review-docker-up-running</id><content type="html" xml:base="https://ultimatecoder.github.io/Blog/2017/12/05/book-review-docker-up-running.html"><![CDATA[<p><img src="https://ultimatecoder.github.io/Blog/assets/images/book_review_docker_up_and_running/main.jpg" alt="book image docker up and running"/></p> <p>In the modern era of software engineering, terms are coined with a new wrapper. Such wrappers are required to make bread-and-butter out of it. Sometimes good marketed terms are adopted as best practices. I was having a lot of confusion about this Docker technology. Even I was unfamiliar with the concept of containers. My certain goal was to get a higher level overview first and then come to a conclusion. I started reading about the Docker from its official getting started guide. It helped me to host this blog using Docker, but I was expecting some more in-depth overview. With that reason, I decided to look for better resources. By reading some Quora posts and Goodreads reviews, I decided to read “Docker Up &amp; Running by K. Matthias and S. Kane”. I am sharing my reading experience here.</p> <h2 id="tldr">TL;DR</h2> <p>The book provides a nice overview of Docker toolchain. It is not a reference book. Even though few options are deprecated, I will advise you to read this book and then refer the <a href="https://docs.docker.com/">official documentation</a> to get familiar with the latest development.</p> <h2 id="detailed-overview">Detailed overview</h2> <p>I got a printed copy at nearly 450 INR (roughly rounding to 7 USD, where 1 USD = 65 INR) from <a href="https://www.amazon.in/">Amazon</a>. The prize is fairly acceptable with respect to the print quality. The book begins with a little history of containers (Docker is an implementation of the container). Initial chapters give a higher level overview of Docker tools combining Docker engine, Docker image, Docker registry, Docker compose and Docker container. Authors have pointed out situations where Docker is not suitable. I insist you do not skip that topic. I skipped the dedicated chapter on installing Docker. I will advise you to skip irrelevant topics because the chapters are not interlinked. You should read chapter 5 discussing the behavior of the container. That chapter cleared many of my confusions. Somehow I got lost in between, but re-reading helped. Such chapters are enough to get a general idea about Docker containers and images. Next chapters are focused more on best practices to setup the Docker engine. Frankly, I was not aware of possible ways to debug, log or monitor containers at runtime. This book points few expected production glitches that you should keep in mind. I didn’t like the depicted testing workflow by authors. I will look for some other references which highlight more strategies to construct your test workflow. If you are aware of any, please share them with me via e-mail. I know about achieving auto-scaling using various orchestration tools. This book provides step by step guidance on configuring and using them. Mentioned tools are <a href="https://github.com/docker/swarm">Docker Swarm</a>, <a href="https://github.com/newrelic/centurion">Centurion</a> and <a href="https://aws.amazon.com/ecs/">Amazon EC2 container service</a>. Unfortunately, the book is missing <a href="https://kubernetes.io/">Kubernets</a> and <a href="https://github.com/spotify/helios">Helios</a> here. As a part of advanced topics, you will find a comparison of various filesystems with a shallow overview of how Docker engine interacts with them. The same chapter is discussing available execution drivers and introduces <a href="https://linuxcontainers.org/">LXC</a> as another container technology. This API option is deprecated by <a href="https://github.com/moby/moby/blob/master/CHANGELOG.md#180-2015-08-11">Docker version 1.8</a> which makes <a href="https://github.com/docker/libcontainer">libcontainer</a> the only dependency. I learned how Docker containers provide the virtualization layer using <a href="https://en.wikipedia.org/wiki/Linux_namespaces">Namespaces</a>. Docker limits the execution of container using <a href="https://en.wikipedia.org/wiki/Cgroups">CGroups (Control Groups)</a>. <a href="https://en.wikipedia.org/wiki/Linux_namespaces">Namespaces</a> and <a href="https://en.wikipedia.org/wiki/Cgroups">CGroups</a> are GNU/Linux level dependencies used by Docker under the hood. If you are an API developer, then you should not skip Chapter 11. This chapter discusses two well-followed patterns <a href="https://12factor.net/">Twelve-Factor App</a> and <a href="https://www.reactivemanifesto.org/">The Reactive manifesto</a>. These guidelines are helpful while designing the architecture of your services. The book concludes with further challenges of using Docker as a container tool.</p> <p>One typo I found at page number 123, second last line.</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>expore some of the tools...
</code></pre></div></div> <p>Here, <code class="language-plaintext highlighter-rouge">expore</code> is a typo and it should be</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>explore some of the tools...
</code></pre></div></div> <p>I have submitted it to the <a href="http://www.oreilly.com/catalog/errataunconfirmed.csp?isbn=0636920036142">official errata</a>. At the time of writing this post, it has not confirmed by authors. Hope they will confirm it soon.</p> <h3 id="who-should-read-this-book">Who should read this book?</h3> <ul> <li> <p>Developers who want to get an in-depth overview of the Docker technology.</p> </li> <li> <p>If you set up deployment clusters using Docker, then this book will help you to get an overview of Docker engine internals. You will find security and performance guidelines.</p> </li> <li> <p>This is not a reference book. If you are well familiar with Docker, then this book will not be useful. In that case, the Docker documentation is the best reference.</p> </li> <li> <p>I assume Docker was not supporting Windows platform natively when the book was written. The book focuses on GNU/Linux platform. It highlights ways to run Docker on Windows using VMs and <a href="http://boot2docker.io/">Boot2Docker</a> for Non-Linux VM-based servers.</p> </li> </ul> <h3 id="what-to-keep-in-mind">What to keep in mind?</h3> <ul> <li> <p>Docker is changing rapidly. There will be situations where mentioned options are deprecated. In such situation, you have to browse the latest Docker documentation and try to follow them.</p> </li> <li> <p>You will be able to understand the official documentation better after reading this book.</p> </li> </ul> <h2 id="conclusion">Conclusion</h2> <ul> <li>Your GNU/Linux skills are your Docker skills. Once you understand what the Docker is, then your decisions will become more mature.</li> </ul> <h6 id="proofreaders-dhavan-vaidya-polprog">Proofreaders: <a href="http://codingquark.com/">Dhavan Vaidya</a>, <a href="https://www.youtube.com/channel/UCsxonLIUu9tB8QWNuFIXCwg/featured">Polprog</a></h6> <h2 id="printed-copy">Printed Copy</h2> <ul> <li><a href="https://www.amazon.in/Docker-Up-Running-Karl-Matthias/dp/9352131320">Amazon</a></li> <li><a href="https://www.flipkart.com/docker-up-running/p/itme8n74nhfg2wnm?pid=9789352131327">Flipkart</a></li> <li><a href="http://shop.oreilly.com/product/0636920036142.do">O’REILLY</a></li> </ul>]]></content><author><name>Jaysinh Shukla</name></author><category term="books"/><category term="docker"/><category term="linux"/><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">My experience of mentoring at Django Girls Bangalore 2017</title><link href="https://ultimatecoder.github.io/Blog/2017/11/14/django-girls-bangalore-2017.html" rel="alternate" type="text/html" title="My experience of mentoring at Django Girls Bangalore 2017"/><published>2017-11-14T02:31:25+00:00</published><updated>2017-11-14T02:31:25+00:00</updated><id>https://ultimatecoder.github.io/Blog/2017/11/14/django-girls-bangalore-2017</id><content type="html" xml:base="https://ultimatecoder.github.io/Blog/2017/11/14/django-girls-bangalore-2017.html"><![CDATA[<p><img src="https://ultimatecoder.github.io/Blog/assets/images/django_girls_blr_2018/group_photo.jpg" alt="group_photo"/></p> <h2 id="tldr">TL;DR</h2> <p>Last Sunday, <a href="https://djangogirls.org/bangalore/">Django Girls Bangalore</a> organized a hands-on session of web programming. This is a small event report from my side.</p> <h2 id="detailed-overview">Detailed overview</h2> <p><a href="https://djangogirls.org/">Django Girls</a> is not for a profit initiative led by <a href="http://ola.sitarska.com/">Ola Sitarska</a> and <a href="http://blog.sendecka.me/">Ola Sendecka</a>. Such movement helps women to learn the skills of website development using the well-known web-framework <a href="https://www.djangoproject.com/">Django</a>. This community is backed by organizers from many countries. Organizations like The <a href="https://www.python.org/psf/">Python Software Foundation</a>, <a href="https://github.com">Github</a>, <a href="https://www.djangoproject.com/">DjangoProject</a> and many <a href="https://djangogirls.org/#supporters">more</a> are funding <a href="https://djangogirls.org/">Django Girls</a>.</p> <p><a href="https://djangogirls.org/bangalore/">Django Girls Bangalore</a> chapter was organized by <a href="https://twitter.com/MrSouravSingh">Sourav Singh</a> and <a href="https://anirudha.org/">Kumar Anirudha</a>. This was my second time mentoring for the <a href="https://djangogirls.org/">Django Girls</a> event. First was for the <a href="https://djangogirls.org/ahmedabad/">Ahmedabad chapter</a>. The venue was sponsored by <a href="https://www.hackerearth.com">HackerEarth</a>. 8 male and 2 female mentored 21 women during this event. Each mentor was assigned more or less 3 participants. Introducing participants with web development becomes easy with the help of <a href="https://tutorial.djangogirls.org/en/">Django Girls handbook</a>. The <a href="https://tutorial.djangogirls.org/en/">Django Girls handbook</a> is a combination of beginner-friendly hands-on tutorials described in a simple language. The <a href="https://tutorial.djangogirls.org/en/">handbook</a> contains tutorials on basics of Python programming language to deploying your web application. Pupils under me were already ready by pre-configuring Python with their workstation. We started by introducing our selves. We took some time browsing the <a href="http://submarinecablemap.com/">website</a> of undersea cables. One of the amusing questions I got is, “Isn’t the world connected with Satellites?”. My team was comfortable with the Python, so we quickly skimmed to the part where I introduced them to the basics of web and then <a href="https://www.djangoproject.com/">Django</a>. I noticed mentors were progressing according to the convenience of participants. Nice amount of time was invested in discussing raised queries. During illumination, we heard a loud call for the lunch. A decent meal was served to all the members. I networked with other mentors and participants during the break. Post-lunch we created a blog app and configured it with our existing project. Overview of <a href="https://www.djangoproject.com/">Django</a> models topped with the concept of <a href="https://en.wikipedia.org/wiki/Object-relational_mapping">ORM</a> became the arduous task to explain. With the time as a constraint, I focused on admin panel and taught girls about deploying their websites to <a href="https://www.pythonanywhere.com/">PythonAnywhere</a>. I am happy with the hard work done by my team. They were able to demonstrate what they did to the world. I was more joyful than them for such achievement.</p> <p>The closing ceremony turned amusing event for us. 10 copies of <a href="https://www.twoscoopspress.com">Two scoops of Django</a> book were distributed to the participants chosen by random draw strategy. I solemnly thank the authors of the book and <a href="https://pothi.com/">Pothi.com</a> for gifting such a nice reference. Participants shared their experiences of the day. Mentors pinpointed helpful resources to look after. They insisted girls would not stop at this point and open their wings by developing websites using skills they learned. T-shirts, stickers and badges were distributed as event swags.</p> <p>You can find the list of all <a href="https://djangogirls.org/">Django Girls</a> chapters <a href="https://djangogirls.org/events/map/">here</a>. Djangonauts are encouraged to become a mentor for <a href="https://djangogirls.org/">Django Girls</a> events in your town. If you can’t finding any in your town, I encourage you to take the responsibility and organize one for your town. If you are already a part of <a href="https://djangogirls.org/">Django Girls</a> community, Why are you not sharing your experience with others?</p> <h6 id="proofreaders-kushal-das-dhavan-vaidya-isaul-vargas">Proofreaders: <a href="https://kushaldas.in">Kushal Das</a>, <a href="http://codingquark.com/">Dhavan Vaidya</a>, <a href="https://github.com/Dude-X">Isaul Vargas</a></h6>]]></content><author><name>Jaysinh Shukla</name></author><category term="django"/><category term="python"/><category term="djangogirls"/><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">How to repair a broken GRUB in Ubuntu?</title><link href="https://ultimatecoder.github.io/Blog/2017/08/28/how_to_repair_a_broken_grub_in_ubuntu.html" rel="alternate" type="text/html" title="How to repair a broken GRUB in Ubuntu?"/><published>2017-08-28T08:05:42+00:00</published><updated>2017-08-28T08:05:42+00:00</updated><id>https://ultimatecoder.github.io/Blog/2017/08/28/how_to_repair_a_broken_grub_in_ubuntu</id><content type="html" xml:base="https://ultimatecoder.github.io/Blog/2017/08/28/how_to_repair_a_broken_grub_in_ubuntu.html"><![CDATA[<p><img src="https://ultimatecoder.github.io/Blog/assets/images/how_to_fix_broken_grub/grub_title.png" alt="How to repair a broken GRUB"/></p> <h2 id="background-story">Background story</h2> <p>Yesterday, I was having some free time after lunch. I decided to complete a long term plan of checking the compatibility of few <a href="https://www.gnu.org/philosophy/free-sw.en.html">Freedom Operating Systems</a> with my workstation. From <a href="https://www.gnu.org/distros/free-distros.en.html">this list</a>, I decided to check <a href="https://trisquel.info/">Trisquel</a> OS first. <a href="https://trisquel.info/">Trisquel</a> is freedom clone of world-famous OS Ubuntu. The simplest option was to prepare a live USB drive and boot the <a href="https://trisquel.info/">Trisquel</a> from it. I inserted the USB drive and instructed the <a href="http://gparted.org/">Gparted</a> to format it. Bang! That simple step ruined my entire Sunday evening. Instead of formatting my USB drive, I mistakenly formatted the boot partition! Without putting any extra measures, I formatted my root partition which is also a type <a href="https://en.wikipedia.org/wiki/File_Allocation_Table">FAT</a>. I was lucky enough to identify that I have formatted the partition from my SSD and not the USB drive. After taking advice from the people of <a href="https://freenode.linux.community/">##linux</a> I found, I will not be able to re-boot because the <a href="https://www.gnu.org/software/grub/">GRUB</a> is lost. In this post, I will describe the steps I followed to restore the <a href="https://www.gnu.org/software/grub/">GRUB</a>.</p> <h2 id="procedure-of-restoring-the-grub">Procedure of restoring the GRUB</h2> <p>You can restore your <a href="https://www.gnu.org/software/grub/">GRUB</a> using three methods:</p> <ul> <li> <p>Using GUI utility <a href="https://help.ubuntu.com/community/Boot-Repair">“Boot-repair”</a>. This is the simplest step to follow first. Unfortunately, I was not able to fix my <a href="https://www.gnu.org/software/grub/">GRUB</a> using this method.</p> </li> <li> <p>Boot from a live operating system, mount the infected boot partition and perform the steps of restoring the <a href="https://www.gnu.org/software/grub/">GRUB</a>. Since I identified the problem at an early stage, I didn’t restart my system until I was sure that nothing is broken.</p> </li> <li> <p>Last is to run the steps of restoring the <a href="https://www.gnu.org/software/grub/">GRUB</a> from the command line if you haven’t reboot your system after formatting the boot partition. I will describe the steps of restoring your <a href="https://www.gnu.org/software/grub/">GRUB</a> using this method in this post.</p> </li> </ul> <p>If you had rebooted and are unable to start the system then I will request to follow the steps described at <a href="https://www.howtogeek.com/114884/how-to-repair-grub2-when-ubuntu-wont-boot/">How to geek</a> post rather than continuing here. If you are using Legacy BIOS rather than UEFI type then this post might not work for you. To identify which type your system has booted with, <a href="https://askubuntu.com/a/162896">follow this steps</a>.</p> <h2 id="so-lets-start">So let’s start!</h2> <ul> <li> <p><strong>Identify the type of your boot partition:</strong> You can use GUI utilities like <a href="http://gparted.org/">GParted</a> or any other of your choice. The boot partition is the very first partition of the drive you are using for booting your operating system.</p> <p><img src="https://ultimatecoder.github.io/Blog/assets/images/how_to_fix_broken_grub/gparted_identification_parition.png" alt="Identify boot partition using gparted"/></p> <p>In my case, it is <code class="language-plaintext highlighter-rouge">/dev/sda1</code>. This partition should be either <a href="https://en.wikipedia.org/wiki/File_Allocation_Table#FAT32">FAT32</a> or <a href="https://en.wikipedia.org/wiki/File_Allocation_Table#FAT16">FAT16</a>. If it is anything other than that you should format it to <a href="https://en.wikipedia.org/wiki/File_Allocation_Table">FAT</a> version of your choice.</p> </li> <li> <p><strong>Assert <code class="language-plaintext highlighter-rouge">/boot/efi</code> is mounted:</strong> Run below command at your terminal.</p> <p><code class="language-plaintext highlighter-rouge">sudo mount /boot/efi</code></p> <p>Sample output</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$sudo mount /boot/efi/
mount: /dev/sda1 is already mounted or /boot/efi busy
       /dev/sda1 is already mounted on /boot/efi
</code></pre></div> </div> <p>If it is mounted, it will throw a warning indicating that the partition is already mounted. If it isn’t mounted, then the prompt will come back without any warning message.</p> </li> <li> <p><strong>Next, restore and update the <a href="https://www.gnu.org/software/grub/">GRUB</a>:</strong> Run below command at your terminal.</p> <p><code class="language-plaintext highlighter-rouge">sudo grub-install &amp;&amp; update-grub</code></p> <p>Sample output</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ sudo grub-install &amp;&amp; update-grub
Installing for x86_64-efi platform.
Installation finished. No error reported.
</code></pre></div> </div> <p>If there is any error, I will advise to not move further and try other options I mentioned above for restoring your <a href="https://www.gnu.org/software/grub/">GRUB</a>.</p> </li> <li> <p><strong>Finally, replace the UUID of the formatted partition:</strong> Find the <strong>UUID</strong> of your boot partition. Once you format the partition, the <strong>UUID</strong> of the partition is changed. You have to update the new <strong>UUID</strong> value at <code class="language-plaintext highlighter-rouge">/etc/fstab</code> file. Use below command to get the latest <strong>UUID</strong> of your boot partition.</p> <p><code class="language-plaintext highlighter-rouge">sudo blkid /dev/sda1</code></p> <p><img src="https://ultimatecoder.github.io/Blog/assets/images/how_to_fix_broken_grub/uuid_blkid_shell.png" alt="Identifying UUID of boot efi"/></p> <p>Copy the value of <strong>UUID</strong> which is between the double quotes.</p> <p>Open the <code class="language-plaintext highlighter-rouge">/etc/fstab</code> file with your desired editor and update the value with the existing <strong>UUID</strong> of <code class="language-plaintext highlighter-rouge">/dev/sda1</code>. I am doing this procedure using the <a href="http://www.vim.org">vim</a> editor. You can choose any editor of your choice.</p> <p><code class="language-plaintext highlighter-rouge">sudo vim /etc/fstab</code></p> <p><img src="https://ultimatecoder.github.io/Blog/assets/images/how_to_fix_broken_grub/vim_etc_fstab.png" alt="Updating the UUID to the etc fstab file"/></p> <p>You will require the root privileges for writing to this file.</p> </li> </ul> <p>We are done! Now when you will run <code class="language-plaintext highlighter-rouge">sudo ls -l /boot/efi</code>, you should able to identify the files beneath that directory. It is time to confirm by rebooting your system.</p> <h2 id="vote-of-thanks">Vote of Thanks!</h2> <p>I would like to thank <a href="https://launchpad.net/~di-iorio">ioria</a> and <a href="https://launchpad.net/~ducasse">ducasse</a>, member of <a href="irc://irc.freenode.net/ubuntu">#ubuntu</a> at Freenode, who invested a great amount of time to guide me in fixing this problem. <a href="irc://irc.freenode.net/ubuntu">#ubutu</a> has great members who are always willing to help you.</p> <p><em>Note: While mentioning the GRUB in this post, I actually mean the GRUB2.</em></p> <h6 id="proofreaders-dhavan-vaidya-pentodelinuxfreenode-parsnipemacs-freenode">Proofreaders: <a href="http://codingquark.com/">Dhavan Vaidya</a>, Pentode@##linux(Freenode), parsnip@#emacs (Freenode)</h6>]]></content><author><name>Jaysinh Shukla</name></author><category term="Ubuntu"/><category term="GRUB"/><category term="How-to"/><summary type="html"><![CDATA[Steps to restore your GRUB if you have formatted boot partition mistakenly]]></summary></entry><entry><title type="html">PyDelhi Conf 2017: A beautiful conference happened in New Delhi, India</title><link href="https://ultimatecoder.github.io/Blog/2017/07/21/pydelhi-conf-2017-a-beautiful-conference-happend-at-new-delhi-india.html" rel="alternate" type="text/html" title="PyDelhi Conf 2017: A beautiful conference happened in New Delhi, India"/><published>2017-07-21T12:44:03+00:00</published><updated>2017-07-21T12:44:03+00:00</updated><id>https://ultimatecoder.github.io/Blog/2017/07/21/pydelhi-conf-2017-a-beautiful-conference-happend-at-new-delhi-india</id><content type="html" xml:base="https://ultimatecoder.github.io/Blog/2017/07/21/pydelhi-conf-2017-a-beautiful-conference-happend-at-new-delhi-india.html"><![CDATA[<p><img src="https://ultimatecoder.github.io/Blog/assets/images/pydelhi_conf_2017/group_photo.jpg" alt="PyDelhi Conf 2017"/></p> <h2 id="tldr">TL;DR</h2> <p><a href="https://conference.pydelhi.org">PyDelhi conf 2017</a> was a two-day conference which featured workshops, dev sprints, both full-length and lightning talks. There were workshop sessions without any extra charges. Delhiites should not miss the chance to attend this conference in future. I conducted a workshop titled <strong>“Tango with Django”</strong> helping beginners to understand the Django web framework.</p> <h2 id="detailed-review">Detailed Review</h2> <h3 id="about-the-pydelhi-community">About the <a href="https://pydelhi.org/">PyDelhi community</a></h3> <p><img src="https://ultimatecoder.github.io/Blog/assets/images/pydelhi_conf_2017/pydelhi_community.jpg" alt="PyDelhi Community"/></p> <p class="center"> PyDelhi conf 2017 volunteers </p> <p>The <a href="https://pydelhi.org/">PyDelhi community</a> was known as NCR Python Users Group before few years. This community is performing a role of an umbrella organization for other FLOSS communities across New Delhi, India. They are actively arranging monthly <a href="http://www.meetup.com/pydelhi">meetups</a> on interesting topics. Last <a href="https://in.pycon.org/2016/">PyCon India</a> which is a national level conference of Python programming language was impressively organized by this community. This year too they took the responsibility of managing it. I am very thankful to this community for their immense contribution to this society. If you are around New Delhi, India then you should not miss the chance to attend their <a href="http://www.meetup.com/pydelhi">meetups</a>. This community has great people who are always happy to mentor.</p> <h3 id="pydelhi-conf-2017"><a href="https://conference.pydelhi.org">PyDelhi conf 2017</a></h3> <p><img src="https://ultimatecoder.github.io/Blog/assets/images/pydelhi_conf_2017/t_shirt.jpg" alt="Conference T-shirt"/></p> <p class="center"> Conference T-shirt </p> <p>PyDelhi conf is a regional level conference of Python programming language organized by PyDelhi community. It is their second year organizing this conference. Last year it was located at <a href="http://www.jnu.ac.in">JNU University</a>. This year it happened at <a href="https://www.iiml.ac.in/">IIM, Lucknow</a> campus based in Noida, New Delhi, India. I enjoyed various talks which I will mention later here, a workshops section because I was conducting one and some panel discussions because people involved were having a good level of experience. 80% of the time slot was divided equally between 30 minutes talk and 2-hour workshop section. 10% were given to panel discussions and 10% was reserved for lightning talks. The dev sprints were happening in parallel with the conference. The early slot was given to workshops for both the days. One large conference hall was located on a 2nd floor of the building and two halls at the ground floor. Food and beverages were served on the base floor.</p> <p><img src="https://ultimatecoder.github.io/Blog/assets/images/pydelhi_conf_2017/pannel_disussion.jpg" alt="Panel discussion"/></p> <p class="center"> Panel Discussion </p> <p><img src="https://ultimatecoder.github.io/Blog/assets/images/pydelhi_conf_2017/desk.jpg" alt="Desk"/></p> <p class="center"> Registration desk </p> <p><img src="https://ultimatecoder.github.io/Blog/assets/images/pydelhi_conf_2017/lunch.jpg" alt="Lunch"/></p> <p class="center"> Tea break </p> <h3 id="keynote-speakers">Keynote speakers</h3> <p><img src="https://ultimatecoder.github.io/Blog/assets/images/pydelhi_conf_2017/ricardo.jpg" alt="Mr. Richardo Rocha"/></p> <ul> <li><a href="https://www.linkedin.com/in/ricardo-rocha-739aa718/?ppe=1"><strong>Mr. Ricardo Rocha:</strong></a> Mr. Rocha is a software engineer at <a href="https://home.cern/">CERN</a>. I got some time to talk with him post-conference. We discussed his responsibilities at <a href="https://home.cern/">CERN</a>. I was impressed when he explained how he is managing infrastructure with his team. On inquiring opportunities available at <a href="https://home.cern/">CERN</a> he mentioned that the organization is always looking for the talented developers. New grads can keep an eye on various Summer Internship Programs which are very similar to Google Summer of Code program.</li> </ul> <p><img src="https://ultimatecoder.github.io/Blog/assets/images/pydelhi_conf_2017/chris.jpg" alt="Mr. Chris Stucchio"/></p> <ul> <li><a href="https://www.chrisstucchio.com/"><strong>Mr. Chris Stucchio:</strong></a> Mr. Stucchio is director of Data Science at <a href="https://vwo.com/">Wingify/ VWO</a>. I found him physically fit compared to other software developers (mostly of India). I didn’t get much time to have a word with him.</li> </ul> <h3 id="interesting-talks">Interesting Talks</h3> <p>Because I took the wrong metro train, I was late for the inaugural ceremony. I also missed a keynote given by Mr. Rocha. Below talks were impressively presented at the conference.</p> <ul> <li> <p><a href="https://youtu.be/CwTnUvHo6d8?list=PL3Aq1JLV2oFZFzSGsDUcc6BieBEvUDzJg"><strong>Let’s talk about GIL by Mr. Amit Kumar:</strong></a> <a href="http://iamit.in/">Mr. Kumar</a> discussed various ways to trace threads first and then moved the track towards Global Interpreter Lock. He described why the GIL is important in <a href="https://github.com/python/cpython">CPython</a>.</p> </li> <li> <p><a href="https://youtu.be/QCZ31d9dqF4?list=PL3Aq1JLV2oFZFzSGsDUcc6BieBEvUDzJg"><strong>Concurrency in Python 3.0 world - Oh my! by Mr. Anand Pillai:</strong></a> <a href="https://youtu.be/I41LTEWzluU">Mr. Pillai</a> is well experienced in programming using Python language. I like getting his advices on various programming topics. He explained how <a href="https://docs.python.org/3/library/asyncio.html">async</a> IO can be leveraged to boost your programs. I got few correct references on understanding latest API of the <a href="https://docs.python.org/3/library/asyncio.html">async</a> library.</p> </li> <li> <p><a href="https://youtu.be/n5xUTcsrRns"><strong>Property based testing 101 by Aniket Maithani:</strong></a> I always enjoy chit chatting with <a href="http://www.aniketmaithani.net/">Mr. Maithani</a> during conferences. He has jolly nature and always prepared with one liner. He discussed various strategies for generating demo data for test cases. I was amazed by his references, tips and tricks for generating test data.</p> </li> </ul> <p>I love discussing with people rather than sit in on sessions. With that ace-reason, I always lose some important talks presented at the conference. I do not forget to watch them once they are publicly available. This year I missed following talks.</p> <ul> <li> <p><a href="https://youtu.be/I41LTEWzluU"><strong>Optimizing Django for building high-performance systems by Mr. Sanyam Khurana</strong></a></p> </li> <li> <p><a href="https://youtu.be/xo9QhfaefzY"><strong>Mocking in Python by Mr. Saurabh Kumar</strong></a></p> </li> </ul> <h3 id="volunteer-party">Volunteer Party</h3> <p>I got a warm invitation by the organizers to join the volunteer party, but I was little tensed about my session happening on the next day. So, I decided to go home and improve the slides. I heard from friends that the party was awesome!</p> <h3 id="my-workshop-session">My workshop session</h3> <p><img src="https://ultimatecoder.github.io/Blog/assets/images/pydelhi_conf_2017/talk_2.jpg" alt="Tango with Django"/></p> <p class="center"> Me conducting workshop </p> <p>I conducted a workshop on Django web framework. “Tango with Django” was chosen as a title with a thought of attracting beginners. I believe this title is already a name of famous book solving the same purpose.</p> <ul> <li> <p><a href="https://www.slideshare.net/jaysinhp/tango-with-django-78119081">Slides</a></p> </li> <li> <p><a href="https://youtu.be/jr6LWM7Yquk">Video Youtube</a></p> </li> </ul> <h3 id="dev-sprints">Dev sprints</h3> <p><img src="https://ultimatecoder.github.io/Blog/assets/images/pydelhi_conf_2017/devsprint.jpg" alt="Dev sprints"/></p> <p class="center"> Me hacking at dev sprints section </p> <p>The dev sprints were happening parallel with the conference. <a href="https://youtu.be/I41LTEWzluU">Mr. Pillai</a> was representing <a href="https://github.com/pythonindia/junction">Junction</a>. I decided to test few issues of <a href="https://github.com/python/cpython">CPython</a> but didn’t do much. There were a bunch of people hacking but didn’t find anything interesting. The quality of chairs was so an impressive that I have decided to buy the same for my home office.</p> <h3 id="why-attend-this-conference">Why attend this conference?</h3> <ul> <li> <p><strong>Free Workshops:</strong> The conference has great slot of talks and workshops. Workshops are being conducted by field experts without expecting any other fees. This can be one of the great advantages you leverage from this conference.</p> </li> <li> <p><strong>Student discounts:</strong> If you are a student then you will receive a discount on the conference ticket.</p> </li> <li> <p><strong>Beginner friendly platform:</strong> If you are novice speaker than you will get mentorship from this community. You can conduct a session for beginners.</p> </li> <li> <p><strong>Networking:</strong> You will find senior employees of tech giants, owner of innovative start-ups and professors from well-known universities participating in this conference. It can be a good opportunity for you to network with them.</p> </li> </ul> <h3 id="what-was-missing">What was missing?</h3> <ul> <li> <p><strong>Lecture hall arrangement:</strong> It was difficult to frequently travel to the second floor and come back to the ground floor. I found most people were spending their time on the ground floor rather than attending talks going on upstairs.</p> </li> <li> <p><strong>No corporate stalls:</strong> Despite having corporate sponsors like Microsoft I didn’t find any stall of any company.</p> </li> <li> <p><strong>The venue for dev sprints:</strong> The rooms were designed for teleconference containing circularly arranged wooden tables. This was not creating a collaborative environment. Involved projects were not frequently promoted during the conference.</p> </li> </ul> <h3 id="thank-you-pydelhi-community">Thank you PyDelhi community!</h3> <p>I would like to thank all the known, unknown volunteers who performed their best in arranging this conference. I am encouraging <a href="https://pydelhi.org/">PyDelhi</a> community for keep organizing such an affable conference.</p> <ul> <li> <p><a href="https://www.flickr.com/groups/pydelhi/">Conference Photos</a></p> </li> <li> <p><a href="https://www.youtube.com/playlist?list=PL3Aq1JLV2oFZFzSGsDUcc6BieBEvUDzJg">Talk videos</a></p> </li> </ul> <h6 id="proofreaders-mr-daniel-foerster-mr--dhavan-vaidya-mr-sayan-chowdhury-mr-trent-buck">Proofreaders: <a href="https://github.com/pydsigner">Mr. Daniel Foerster</a>, <a href="http://codingquark.com/">Mr. Dhavan Vaidya</a>, <a href="https://sayanchowdhury.dgplug.org/">Mr. Sayan Chowdhury</a>, <a href="https://www.emacswiki.org/emacs/TrentBuck">Mr. Trent Buck</a></h6>]]></content><author><name>Jaysinh Shukla</name></author><category term="python"/><category term="conference"/><category term="django"/><category term="talks"/><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">goyo-doc: Vim helpfile for goyo.vim plugin</title><link href="https://ultimatecoder.github.io/Blog/2017/04/10/goyo-doc-vim-helpfile-for-goyo-plugin.html" rel="alternate" type="text/html" title="goyo-doc: Vim helpfile for goyo.vim plugin"/><published>2017-04-10T12:21:48+00:00</published><updated>2017-04-10T12:21:48+00:00</updated><id>https://ultimatecoder.github.io/Blog/2017/04/10/goyo-doc-vim-helpfile-for-goyo-plugin</id><content type="html" xml:base="https://ultimatecoder.github.io/Blog/2017/04/10/goyo-doc-vim-helpfile-for-goyo-plugin.html"><![CDATA[<p><img src="https://ultimatecoder.github.io/Blog/assets/images/goyo_doc_plugin.png" alt="goyo_doc_plugin"/></p> <h3 id="what-is-goyo">What is Goyo?</h3> <p><a href="https://github.com/junegunn/goyo.vim">Goyo</a> is the vim plugin which allows writers to focus on their writing while they are writing. The plugin deactivates not required fancy windows which are not useful at the time of using vim for writing. It provides certain customizations too.</p> <h3 id="what-is-missing-in-goyo">What is missing in Goyo?</h3> <p>The main problem with <a href="https://github.com/junegunn/goyo.vim">Goyo</a> plugin is that it carries very weak vim specific helpfile. A vimmer is habituated to find help at vim specific helpfile first. After few attempts, I have decided to write a good helpfile for the <a href="https://github.com/junegunn/goyo.vim">Goyo</a> plugin. I am happy to maintain the documentation I have started with the ongoing development of the plugin until the author of <a href="https://github.com/junegunn/goyo.vim">Goyo</a> is providing any concise helpfile for it. The <a href="https://github.com/ultimatecoder/goyo-doc">goyo-doc</a> is not carrying any source of <a href="https://github.com/junegunn/goyo.vim">Goyo</a> plugin, but only contains documentation for the plugin. I am inviting you to propose improvements if you find any.</p> <h3 id="why-i-decided-to-write-a-separate-plugin-for-documentation">Why I decided to write a separate plugin for documentation?</h3> <blockquote> <p>“Documentation is essential. There needs to be something for people to read, even if it’s rudimentary and incomplete.”</p> <p>– <cite>K.Fogel, Producing Open source software</cite></p> </blockquote> <p>I believe the documentation is the most important part of any software. While I was using <a href="https://github.com/junegunn/goyo.vim">Goyo</a> plugin, I found it is missing the vim specific helpfile. I discussed this issue with the author and offered the help for improving on this. You can read further about early discussions <a href="https://github.com/junegunn/goyo.vim/issues/144">here</a>. I didn’t get any positive response from the author so I decided to write and launch vim specific helpfile for this plugin. With this plugin, I am expecting to provide the solution to those users who are more familiar with vim specific helpfile than a Github wiki or README file of any project. Below are the links for downloading and using the plugin.</p> <h3 id="download-links">Download links</h3> <ul> <li> <p><a href="http://www.vim.org/scripts/script.php?script_id=5546">Vimscript</a></p> </li> <li> <p><a href="https://github.com/ultimatecoder/goyo-doc">Github</a></p> </li> </ul> <h6 id="proofreader-farhaan-bukhsh">Proofreader: <a href="https://farhaanbukhsh.wordpress.com/">Farhaan Bukhsh</a></h6>]]></content><author><name>Jaysinh Shukla</name></author><category term="vim"/><category term="goyo_doc"/><summary type="html"><![CDATA[Goyo is the vim plugin which allows writers to focus on their writing while they are writing. The plugin deactivates not required fancy windows which are not useful at the time of using vim for writing. It provides certain]]></summary></entry><entry><title type="html">Pycon Pune 2017: A wonderful Python conference</title><link href="https://ultimatecoder.github.io/Blog/2017/03/14/pycon-pune-2017-a-wonderful-python-conference.html" rel="alternate" type="text/html" title="Pycon Pune 2017: A wonderful Python conference"/><published>2017-03-14T12:48:02+00:00</published><updated>2017-03-14T12:48:02+00:00</updated><id>https://ultimatecoder.github.io/Blog/2017/03/14/pycon-pune-2017-a-wonderful-python-conference</id><content type="html" xml:base="https://ultimatecoder.github.io/Blog/2017/03/14/pycon-pune-2017-a-wonderful-python-conference.html"><![CDATA[<p><img src="https://ultimatecoder.github.io/Blog/assets/images/pycon_pune_group_photo.jpg" alt="pycon_pune_group_photo"/></p> <h2 id="tldr">tl;dr</h2> <p>The conference is worth attending if you are a student, programmer or a hobbyist. If you are a swag-hungry then don’t expect much as a swag from this conference. If you are a Devsprint lover, then this conference has the coolest Devsprint. A great number of keynote speakers are invited for this conference.</p> <h2 id="detailed-experience">Detailed Experience</h2> <p>Because I was volunteering for this conference I reached Pune one day earlier than the conference days. The volunteer meeting was happening at Reserved-bit.</p> <h3 id="volunteer">Volunteer</h3> <h4 id="reserved-bit">Reserved-bit</h4> <p><a href="https://reserved-bit.com">Reserved-bit</a> is the best hackerspace I have ever come across. It has a large collection of programmable boards. You will find boards like <a href="https://en.wikipedia.org/wiki/Raspberry_Pi">Raspberry Pi</a>, <a href="https://en.wikipedia.org/wiki/Banana_Pi">Bana Pi</a>, <a href="https://developer.qualcomm.com/hardware/dragonboard-410c">Dragonboard</a>, <a href="https://beagleboard.org">Bigalbon</a>, <a href="https://en.wikipedia.org/wiki/Micro_Bit">BBC-microbit</a> and the 3D printer. Furthermore, this space has a great collection of books on Compilers and Embedded programming. I managed to found few on open-source too. The owners are great hackers. You will love to interact with hacker <a href="https://siddhesh.in/">Siddhesh Poyarekar</a>. Hacker <a href="https://twitter.com/nisha_poyarekar">Nisha Poyarekar</a> is volunteering the <a href="https://www.meetup.com/PyLadies-Pune/">PyLadies community</a> at Pune.</p> <h4 id="pune-to-mumbai">Pune to Mumbai</h4> <p>I spent my half day in this space. I got the responsibility of receiving one of the keynote speakers who was landing at Mumbai airport midnight. To be frank, estimation of Google Maps between Pune to Mumbai is wrong. It showed nearly 2 hours but it took almost 4.5 hours to reach Mumbai. It took few more minutes to reach the airport. The road is impressively smooth. You will encounter the beautiful mountains of <a href="https://en.wikipedia.org/wiki/Lonavla">Lonavla</a>. The task of moving from Pune to Mumbai airport, receive Katie and come back to Pune was completed in almost 13 hours. I left from Pune around 4.30 PM and came back at nearly 5 AM next day early morning.</p> <h4 id="illness-during-conference">Illness during conference</h4> <p>Because I did a huge amount of traveling at that night, I was unable to get enough sleep. Such tiredness resulted in an eye infection. I managed to attend the first day of the conference, but I was not in a condition to attend the second day. Treatment from local doctor healed me in two days and then I was able to take part into Devsprint.</p> <h3 id="conference">Conference</h3> <p>The conference was a total of 4 days where the initial two days were for the talks and the end was assigned for a Devsprint. It didn’t overwhelmed me with many tracks but gave the quality talks presented in a single track. The talks were set from 9 AM to 5 PM which was taken little lightly by the attendees.</p> <p>I was pretty impressed with the keynote speakers of this conference.</p> <h4 id="katie-cunningham"><a href="https://twitter.com/kcunning">Katie Cunningham</a></h4> <p>Katie is the O’Reilly author. Her <a href="http://shop.oreilly.com/product/0636920024514.do">book</a> on Accessibility depicts her area of expertise. She is fun to talk to. She likes to listen about developer communities, writing and most importantly computer games. Her broad vision on product development is amazing. She is an avid reader. I enjoyed listening to her experience of being in India for the very first time.</p> <h4 id="honza-kral"><a href="https://twitter.com/honzakral">Honza Kral</a></h4> <p>Honza is the dude who loves contributing to <a href="https://www.djangoproject.com/">Django</a>. He is a core contributor of Django too. He hacks on Python drivers at <a href="https://www.elastic.co/">Elastic</a>. I was impressed with his suggestions on a code design problem I was trying to solve from the past few months. His suggestions on code design are worth noticing. He is a vimmer and maintains little <a href="http://www.vim.org">vim</a> plugins as a part of his interest.</p> <h4 id="stephen-j-turnbull"><a href="https://twitter.com/yasegumi">Stephen J. Turnbull</a></h4> <p>Stephen professes the Dismal Science of Economics. His knowledge is deep-rooted just like his beard. You will enjoy discussing computer science, books and his experience of programming. He is authoring few books written in the Japanese language. Stephen is <a href="https://www.gnu.org/s/emacs/">Emacsite</a>.</p> <p><img src="https://ultimatecoder.github.io/Blog/assets/images/stephen_turnbull.jpg" alt="stephen_turnbull"/></p> <h4 id="terri-oda"><a href="https://twitter.com/terriko">Terri Oda</a></h4> <p>Terri is a security nerd. She spent most of her time exploring tools at Intel. Terri knows how to hide from the spying of the U.S. Government. She is leading <a href="https://summerofcode.withgoogle.com/">Google Summer of Code</a> section from <a href="https://www.python.org/psf/">Python Software Foundation</a>. Terri is PSF community service award winner. If you are a student and want to take part in GSoC choosing PSF as your organization then she is the right person to talk to.</p> <h4 id="florian-fuchs"><a href="https://github.com/flofuchs">Florian Fuchs</a></h4> <p>His knowledge on <a href="https://en.wikipedia.org/wiki/Representational_state_transfer">ReST API</a> construction is the best. He is a <a href="https://falconframework.org/">Falcon</a> nerd too. I enjoyed discussing various authentication mechanisms for ReST API with him. He is a Red Hatter.</p> <p><img src="https://ultimatecoder.github.io/Blog/assets/images/gnu_mailman_team.jpg" alt="gnu_mailman_team"/></p> <h4 id="nick-coghlan"><a href="https://twitter.com/ncoghlan_dev">Nick Coghlan</a></h4> <p>Nick listens more than he speaks. I will advise you to not disturb him if he is coding. He enjoys concentrating while coding. Getting his mentorship was a great experience. He has been contributing to <a href="https://github.com/python/cpython">Core Python</a> for a decade now. You will enjoy discussing on interesting code compositions with him. He is a Red Hatter.</p> <h4 id="praveen-patil"><a href="https://twitter.com/_gnovi">Praveen Patil</a></h4> <p>Unfortunately, I didn’t get much time to talk with Praveen during this conference. He is a math teacher who teaches concepts of mathematics using Python programming language. You should feel confident to speak with him on Python in education and mathematics with him.</p> <h4 id="john-hawley"><a href="https://github.com/warthog9">John Hawley</a></h4> <p>John is the wittiest person that I know. His lines always end with humor. He hacks mostly on hardware and GNU/Linux. Micro Python and GNU/Linux should be considered as part of his interests.</p> <p>I am sad to declare that I was unable to attend any keynote speeches because of the illness. Mostly I rested at the hotel or talked with people during the conference days.</p> <p><img src="https://ultimatecoder.github.io/Blog/assets/images/pycon_pune_2017_keynote_speakers.jpg" alt="pycon_pune_2017_keynote_speakers"/></p> <h4 id="volunteer-party">Volunteer Party</h4> <p>If you are volunteering for this conference, then you will be invited to a volunteer dinner party. We enjoyed party colored disco lights dancing on the bits of the DJ. Punjabi food was served, and if you were above 25 than you were allowed to take a sip of a beer.</p> <h4 id="devsprint">Devsprint</h4> <p>Devsprint happen at the <a href="https://goo.gl/maps/mXeirzQhPFz">Red Hat Headquarters, Pune</a>. I found the building has tight security. You will find an individual pantry section dedicated to each department. We were instructed to hack at a huge cafeteria section. I myself contributed to Core Python. Nick Coghlan was mentoring for Core Python. I reviewed one PR, found one broken test case and wrote a fix of an existing issue with his help. Honza was leading the development of Django web framework. A team of <a href="http://anandology.com/">Anand Chitipothu</a> mentored for <a href="http://www.web2py.com/">Web2py</a>. <a href="https://twitter.com/fhackdroid">Farhaan Bukhsh</a> mentored for <a href="https://github.com/pypingou/pagure">Pagure</a>. John Hawley encouraged contributing to <a href="https://micropython.org/">MicroPython</a>. Terr Oda, Stephen Turnbull and Florian Fuchs mentored for <a href="https://en.wikipedia.org/wiki/GNU_Mailman">GNU/Mailman</a>.</p> <p><img src="https://ultimatecoder.github.io/Blog/assets/images/cpython_devsprint.jpg" alt="cpython_devsprint"/></p> <h4 id="why-attend-this-conference">Why attend this conference?</h4> <ul> <li> <p>This conference has the coolest Devsprint. The organizers understand the value of the Devsprint in a conference. I have never observed such an importance of Devsprint at any other Python conference happening in India.</p> </li> <li> <p>If you are a student, then this is a beginner friendly conference. Don’t be afraid to attend if you are a Python noob. You will receive a student concession for the tickets too.</p> </li> <li> <p>If you are a developer, coming to this conference will inspire you to grow from your present level. You will meet core contributors, lead programmers, owners of startups and project managers. You will find a huge scope of opportunities to network with people.</p> </li> <li> <p>The conference is single track event. This decision helped me to not miss the interesting talks. In my previous experience, parallel tracks forced me to choose between talks when I was interested in both, which killed me.</p> </li> <li> <p>I have never seen such a huge amount of keynote speakers at any conference happening in India. Keynote speakers were the main attraction of this conference.</p> </li> </ul> <h4 id="what-was-missing">What was missing?</h4> <ul> <li> <p>If you are a swag-hungry fellow than attending this conference won’t be worth it. The conference attendees have to be satisfied with the conference T-shirt.</p> </li> <li> <p>I observed there were fewer corporate stalls than at other Python conferences. A stole from Reserved-bit, Red Hat and PSF community stall was there.</p> </li> <li> <p>A workshop section was completely missing. In my opinion, the workshop helps the beginners to start. There were a few topics which can be better represented as workshop rather than a talk.</p> </li> <li> <p>I was unable to observe any dedicated section for an open space discussion. This section is helpful for communities and contributors to discuss interesting problems and think together.</p> </li> </ul> <h6 id="proofreader-benaiah-mischenko-chameleon">Proofreader: <a href="https://benaiah.me/">Benaiah Mischenko</a>, <a href="https://chameleon.kingdomofmysteries.xyz/">Chameleon</a></h6>]]></content><author><name>Jaysinh Shukla</name></author><category term="python"/><category term="conference"/><summary type="html"><![CDATA[The conference is worth attending if you are a student, programmer or a hobbyist. If you are a swag-hungry then don't expect much as a swag from this conference. If you are a Devsprint lover, then this conference has the coolest Devsprint. A great number of keynote speakers are invited for this conference.]]></summary></entry><entry><title type="html">Book review ‘Introduction to the Command Line’</title><link href="https://ultimatecoder.github.io/Blog/book/review/2017/02/28/book-review-introduction-to-the-commandline.html" rel="alternate" type="text/html" title="Book review ‘Introduction to the Command Line’"/><published>2017-02-28T00:00:00+00:00</published><updated>2017-02-28T00:00:00+00:00</updated><id>https://ultimatecoder.github.io/Blog/book/review/2017/02/28/book-review-introduction-to-the-commandline</id><content type="html" xml:base="https://ultimatecoder.github.io/Blog/book/review/2017/02/28/book-review-introduction-to-the-commandline.html"><![CDATA[<p><img src="https://ultimatecoder.github.io/Blog/assets/images/book_image_introduction_to_the_commandline.jpg" alt="introduction_to_command_line"/></p> <h2 id="tldr">tl;dr</h2> <p>Every chapter will introduce a bunch of comands and will point to its respective documentation for further learning. You should expect chapters describing from the <a href="https://www.gnu.org/software/grep/manual/grep.html">grep</a> command to <a href="https://www.gnu.org/software/octave/">GNU Octave</a> which is a scientific programming language. The chapters are independent of each other. The book is must read if you are new to the <a href="https://en.wikipedia.org/wiki/Linux">GNU/Linux</a> command line. If you are at the intermediate level, then too investing time in reading this book will unveil a few surprises for you.</p> <h2 id="detailed-review">Detailed review</h2> <p>The book is community driven and published under <a href="http://flossmanuals.net">FLOSS Manual</a>. It is a collaborative effort of the <a href="http://www.fsf.org/">FSF</a> community. The fun part is you can contribute to this book by adding new chapters or by improving an existing one. I fixed one typo in this book after reading. The best introduction is crafted comparing GUI based image editing tools with the most unknown command <a href="https://linux.die.net/man/1/convert">convert</a>. It conveys the importance of command line well to the reader. Initial chapters will present the overview of various <a href="https://www.gnu.org/software/bash/">GNU/bash</a> commands. From my personal experience, you have to use mentioned commands in this chapter daily. The chapter of Command history shortcuts depicts geeky shell patterns. I will advise not to skip that chapter and read through once. The advanced section was not much advance for me. It demonstrates <a href="https://linux.die.net/man/1/ssh">ssh</a> and related commands like <a href="https://linux.die.net/man/1/scp">scp</a> and more. I appreciated the preference of using <a href="https://www.gnu.org/software/screen/">GNU Screen</a> though I use <a href="https://tmux.github.io/">tmux</a> over it. If you are possessed by moving around on multiple directories simultaneously, then <strong>directory stacks</strong> under <strong>Moving Again</strong> section is worth scanning. This functionality is saving dozens of my keystrokes now. There is one entire division dedicated to various editors. That section is not limited to <a href="https://www.gnu.org/software/emacs/">GNU Emacs</a> or <a href="http://www.vim.org/">vim</a>, but also briefs <a href="https://www.nano-editor.org/">GNU NANO</a>, <a href="http://www.kedit.com/">Kedit</a> and <a href="https://wiki.gnome.org/Apps/Gedit">Gedit</a>. This section does not compare the pros and cons of several editors, but describes basics of each which should be counted as a good part. I skipped this part because I am comfortable with <a href="http://www.vim.org/">vim</a> editor at present and don’t want to invest much in others.</p> <p>The scripting section turned out to be the most interesting division for me. Though I was aware about the tools like <a href="https://www.gnu.org/software/sed/manual/sed.html">sed</a> and language <a href="https://linux.die.net/man/1/awk">awk</a> I was not using them often. Reading their chapters and implementing mentioned examples built little confidence in me. Now I am much comfortable in utilizing them. The irregular <strong>Regular expressions</strong> are everywhere. You should not pass over this section and pay careful attention to various examples. It is worth to invest your time in this segment.</p> <p>This is not the ending. This book presents a glimpse of various scripting level programming languages like <a href="https://www.perl.org/">Perl</a>, <a href="http://python.org">Python</a> and <a href="https://www.ruby-lang.org/en/">Ruby</a>. Because I am a python developer for a few years and I was not much interested in other languages, I skipped this section. A shallow introduction to <a href="https://www.gnu.org/software/octave/">GNU Octave</a> is nice to study if you are interested in knowing a little about this scientific programming language.</p> <h3 id="how-to-read-this-book">How to read this book?</h3> <p>Do not read to read. This book contains nice shell examples. By merely reading, you will end up without bringing about anything meaningful. I will advise you to interpret the description first, observe the examples and then implement them on your own. If you have any confusions, read the example and description again or obtain help from <code class="language-plaintext highlighter-rouge">man</code> or <code class="language-plaintext highlighter-rouge">info</code> are the best options. To remember, I revised the important chapters more than once in a week. It helped me to refresh what I learned before. I will attempt to re-read the important sections once again after a few days to refresh my memory.</p> <h3 id="what-is-missing">What is missing?</h3> <p>Considerably, the book is nicely written, equally distributed and largely acceptable, but I would prefer to have a small set exercises section at the end of each topic. Exercise might help the reader to identify their weak points early and refer on them again if they desire to.</p> <h3 id="typo--mistakes">Typo / Mistakes</h3> <p>I didn’t encounter any sever mistakes except one typo. The section of <strong>Userful customizations</strong> on page number 80 of my printed version, contains following example:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>function manyargs {
  $arg=$1
  shift
  ...
}
</code></pre></div></div> <p>Here, <strong>$arg</strong> is a misprint. A shell variable is never assigned with <strong>$</strong>. It should be <code class="language-plaintext highlighter-rouge">args=$1</code>. I myself has corrected the typographical error in the book. This change will be published maybe in the next release of this book.</p> <p>If you are encountering any mistakes while reading, I request you to fix the change <a href="http://write.flossmanuals.net/command-line/introduction/">here</a>. The interface for editing the book is beginner friendly. It took less than 5 minutes to drive the change.</p> <h3 id="where-to-buydownload">Where to buy/download?</h3> <ul> <li> <p><a href="https://shop.fsf.org/books-docs/introduction-command-line">Buy printed version</a>.</p> </li> <li> <p><a href="http://write.flossmanuals.net/command-line/introduction/">Read Online</a>.</p> </li> <li> <p><a href="http://archive.flossmanuals.net/_booki/command-line/command-line.pdf">Download PDF</a></p> </li> </ul> <h6 id="proofreader-dhavan-vaidya">Proofreader: <a href="http://codingquark.com/">Dhavan Vaidya</a></h6>]]></content><author><name>Jaysinh Shukla</name></author><category term="book"/><category term="review"/><category term="books"/><category term="linux"/><category term="programming"/><summary type="html"><![CDATA[Every chapter will introduce a bunch of comands and will point to its respective documentation for further learning. You should expect chapters describing from the grep command to GNU Octave which is a scientific programming language. The chapters are independent of each other.]]></summary></entry><entry><title type="html">Visit to Indian Linux User Group, Chennai</title><link href="https://ultimatecoder.github.io/Blog/2017/01/22/visit-to-linux-user-group-chennai.html" rel="alternate" type="text/html" title="Visit to Indian Linux User Group, Chennai"/><published>2017-01-22T00:00:00+00:00</published><updated>2017-01-22T00:00:00+00:00</updated><id>https://ultimatecoder.github.io/Blog/2017/01/22/visit-to-linux-user-group-chennai</id><content type="html" xml:base="https://ultimatecoder.github.io/Blog/2017/01/22/visit-to-linux-user-group-chennai.html"><![CDATA[<p><img src="https://ultimatecoder.github.io/Blog/assets/images/ilugc.jpg" alt="Indian Linux User Group Chennai"/></p> <p>Lately I was travelling to <a href="https://en.wikipedia.org/wiki/Chennai">Chennai</a> for some personal work. I was very clear on meeting <a href="http://shakthimaan.com/">Mr. Shakthi Kannan</a>. While travelling to Chennai I dropped a mail inquiring about his availability. He replied with an invitation to attend the Meetup of <a href="https://www.meetup.com/ILUG-C/events/234086665/">Indian Linux Users Group, Chennai</a> scheduled at IIT Madras. I happily accepted the invitation and decided to attend the Meetup.</p> <p>The Meetup was happening in the AeroSpace Engineering department, IIT Madras. The campus is so huge that it took 15 minute bus journey to get to the department. Because I was late, I missed the initial talk on Emacs Org mode by Shakthi. I was lucky enough to attend lightning talk section. When I entered one young boy was demonstrating <a href="http://tools.kali.org/exploitation-tools/beef-xss">BeFF</a>. I was not aware about this tool before his talk. After his words I realized BeFF is a penetration testing tool and now I am confident for switching to its documentation and start going through it. His talk ended with little discussion on doubts. Nearly one hour was still remaining Shakthi came forward and invited interested people to present a lightning talk. That sure rang a bell! I was not sure about attending Meetup and presenting something instantly was looking tough. Mohan moved forward and demonstrated How memory mapping works in GNU/Linux system. During his talk I quickly skimmed on a list of topics I was aware about and I decided to speak on <a href="https://en.wikipedia.org/wiki/JSON_Web_Token">JSON Web Token</a>. I introduced myself and demonstrated ways to generate a secure token. Discussed about architecture a bit and gave few guidelines, points to remember. I ended my talk with comparing <a href="https://oauth.net/2/">Oauth 2.0</a> with JWT. Few interested people asked questions and I was lucky enough to solve their confusions.</p> <p>I realized it is good to have small and interested audience than having large and distracted audience. This group has nice experienced people in the GNU/Linux domain. If Chennai is your town, I will promote you to join this group and get involved.</p> <h6 id="proofreaders-shakthi-kannan-harsh-vardhan">Proofreaders: <a href="http://shakthimaan.com/">Shakthi Kannan</a>, <a href="https://github.com/vharsh">Harsh Vardhan</a></h6>]]></content><author><name>Jaysinh Shukla</name></author><category term="ILUG-C"/><summary type="html"><![CDATA[Lately I was travelling to Chennai for some personal work. I was very clear on meeting Mr. Shakthi Kannan. While travelling to Chennai I dropped a mail]]></summary></entry></feed>