<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Python on Blog - uTIcARdI</title><link>https://blog.gainskills.top/tags/python/</link><description>Recent content in Python on Blog - uTIcARdI</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 04 Aug 2025 18:51:32 +1200</lastBuildDate><atom:link href="https://blog.gainskills.top/tags/python/index.xml" rel="self" type="application/rss+xml"/><item><title>An incompatible issue of xls file</title><link>https://blog.gainskills.top/2019/12/02/pyxlwtdebug/</link><pubDate>Mon, 02 Dec 2019 00:00:00 +0000</pubDate><guid>https://blog.gainskills.top/2019/12/02/pyxlwtdebug/</guid><description>&lt;h4 id="background"&gt;Background&lt;/h4&gt;
&lt;p&gt;An integration project: exporting a csv file from system A, convert the csv file to xls file, and import the converted file into system B (A 3rd party system).&lt;/p&gt;
&lt;p&gt;Environment:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.python.org/downloads/release/python-375/"&gt;Python3.7.5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;xls library: &lt;a href="https://github.com/python-excel/xlwt/releases"&gt;xlwt1.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Developing on Mac 10.15.1 with &lt;a href="https://blog.gainskills.top/2019/11/15/vscode-as-idle-for-django/"&gt;VS Code&lt;/a&gt;, and finally the project will be published to a Docker environment(ritht now, it&amp;rsquo;s &lt;a href="https://hub.docker.com/_/python/"&gt;Python:3.7.5-alpine3.10&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="issue"&gt;Issue&lt;/h4&gt;
&lt;p&gt;The converted xls file, system B doesn&amp;rsquo;t support it. However, the file can be opened in Microsoft Excel, and then system B supports it after the open operation (did nothing, just open it then close)😫.&lt;/p&gt;</description></item><item><title>VSCode as an IDLE for Django</title><link>https://blog.gainskills.top/2019/11/15/vscode-as-idle-for-Django/</link><pubDate>Fri, 15 Nov 2019 00:00:00 +0000</pubDate><guid>https://blog.gainskills.top/2019/11/15/vscode-as-idle-for-Django/</guid><description>&lt;p&gt;This blog is about using MS VSCode as Django IDLE (OS: Mac OX, the steps are referenceable on Linux, Windows).&lt;/p&gt;
&lt;h5 id="1-download-installation-files-and-install-ms-vscode-python-from-following-links"&gt;1. Download installation files and install MS VScode, Python from following links:&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://code.visualstudio.com/download"&gt;MS VSCode&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.python.org/downloads/"&gt;Python3&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Optional:&lt;/strong&gt; On Mac OS, I recommend &lt;a href="https://brew.sh/"&gt;homebrew&lt;/a&gt; for Python Installation because third party libraries&amp;rsquo; dependency will be processed smoothly.&lt;/p&gt;
&lt;p&gt;Install &lt;code&gt;homebrew&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/usr/bin/ruby -e &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Install &lt;code&gt;Python3&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;brew install python@3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;h5 id="2-python-extension"&gt;2. Python Extension&lt;/h5&gt;
&lt;p&gt;Launch VSCode and install the Extension: &lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-python.python"&gt;Python&lt;/a&gt;&lt;/p&gt;</description></item><item><title>os.path.join() or os.sep.join()?</title><link>https://blog.gainskills.top/2019/07/23/path-join/</link><pubDate>Tue, 23 Jul 2019 00:00:00 +0000</pubDate><guid>https://blog.gainskills.top/2019/07/23/path-join/</guid><description>&lt;p&gt;There are two functions join a full path. E.g.: In drive: C:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;|- test
| |- test.xt
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;os.path.join&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-Python" data-lang="Python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; os
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fullpath &lt;span style="color:#f92672"&gt;=&lt;/span&gt; os&lt;span style="color:#f92672"&gt;.&lt;/span&gt;path&lt;span style="color:#f92672"&gt;.&lt;/span&gt;join(&lt;span style="color:#e6db74"&gt;&amp;#39;c:&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;test&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;test.txt&amp;#39;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Output on windows:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-Python" data-lang="Python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c:test\test&lt;span style="color:#f92672"&gt;.&lt;/span&gt;txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Output on Mac OS
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-Python" data-lang="Python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c:&lt;span style="color:#f92672"&gt;/&lt;/span&gt;test&lt;span style="color:#f92672"&gt;/&lt;/span&gt;test&lt;span style="color:#f92672"&gt;.&lt;/span&gt;txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;os.sep.join&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-Python" data-lang="Python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; os
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fullpath &lt;span style="color:#f92672"&gt;=&lt;/span&gt; os&lt;span style="color:#f92672"&gt;.&lt;/span&gt;sep&lt;span style="color:#f92672"&gt;.&lt;/span&gt;join([&lt;span style="color:#e6db74"&gt;&amp;#39;c:&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;test&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;test.txt&amp;#39;&lt;/span&gt;])&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Output on windows:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-Python" data-lang="Python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c:\test\test&lt;span style="color:#f92672"&gt;.&lt;/span&gt;txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Output on Mac OS
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-Python" data-lang="Python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c:&lt;span style="color:#f92672"&gt;/&lt;/span&gt;test&lt;span style="color:#f92672"&gt;/&lt;/span&gt;test&lt;span style="color:#f92672"&gt;.&lt;/span&gt;txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;From the outputs, you can see the difference: &lt;code&gt;os.path.join()&lt;/code&gt; doesn&amp;rsquo;t work as expected on windows.&lt;/p&gt;
&lt;p&gt;Further verification:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-Python" data-lang="Python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;with&lt;/span&gt; open(fullpath) &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; test:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; test&lt;span style="color:#f92672"&gt;.&lt;/span&gt;read()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Run with error:
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-Python" data-lang="Python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;with&lt;/span&gt; open(fullpath) &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; test:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;FileNotFoundError&lt;/span&gt;: [Errno &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;] No such file &lt;span style="color:#f92672"&gt;or&lt;/span&gt; directory: &lt;span style="color:#e6db74"&gt;&amp;#39;c:test&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\\&lt;/span&gt;&lt;span style="color:#e6db74"&gt;test.txt&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;</description></item><item><title>Post a file to Flask by Curl via API</title><link>https://blog.gainskills.top/2019/02/20/post-file-by-curl-to-flask-via-api/</link><pubDate>Wed, 20 Feb 2019 00:00:00 +0000</pubDate><guid>https://blog.gainskills.top/2019/02/20/post-file-by-curl-to-flask-via-api/</guid><description>&lt;p&gt;&lt;a href="https://curl.haxx.se/docs/manpage.html"&gt;Curl&lt;/a&gt; is widely used in command lines or scripts to transfer data.&lt;br&gt;
Different ways to use curl to post a file to a web server with samples (from both client-side and server: &lt;a href="http://flask.pocoo.org/"&gt;Python-Flask&lt;/a&gt; side) will be discussed because it took me a while on the server-side to receiving the data from client.&lt;br&gt;
I would like to add samples of &lt;a href="http://docs.python-requests.org/en/master/"&gt;Python-requests&lt;/a&gt;, &lt;a href="https://www.getpostman.com/"&gt;Postman&lt;/a&gt; later.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;h5 id="started-with"&gt;Started with&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;macOS Mojave&lt;/li&gt;
&lt;li&gt;Python 3.7.2&lt;/li&gt;
&lt;li&gt;Flask 1.0.2&lt;/li&gt;
&lt;li&gt;Flask-RESTful 0.3.7&lt;/li&gt;
&lt;li&gt;curl 7.54.0 (x86_64-apple-darwin18.0)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Flask code:
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-Python" data-lang="Python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Py file name: simple.py&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; flask &lt;span style="color:#f92672"&gt;import&lt;/span&gt; Flask, request
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; flask_restful &lt;span style="color:#f92672"&gt;import&lt;/span&gt; Api, Resource, reqparse
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; werkzeug
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;app &lt;span style="color:#f92672"&gt;=&lt;/span&gt; Flask(__name__)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;api &lt;span style="color:#f92672"&gt;=&lt;/span&gt; Api(app)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;kzwebfile&lt;/span&gt;(Resource):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;post&lt;/span&gt;(self, filename):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;pass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;api&lt;span style="color:#f92672"&gt;.&lt;/span&gt;add_resource(kzwebfile, &lt;span style="color:#e6db74"&gt;&amp;#39;/&amp;lt;string:filename&amp;gt;&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; __name__ &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; app&lt;span style="color:#f92672"&gt;.&lt;/span&gt;run()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;</description></item><item><title>Python operator:single star(*)</title><link>https://blog.gainskills.top/2019/02/09/single-star-zip/</link><pubDate>Sat, 09 Feb 2019 00:00:00 +0000</pubDate><guid>https://blog.gainskills.top/2019/02/09/single-star-zip/</guid><description>&lt;ul&gt;
&lt;li&gt;
&lt;h3&gt;with Zip&lt;/h3&gt;
&lt;p&gt;Read a block of pseudo Python code like
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-Python" data-lang="Python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;comA &lt;span style="color:#f92672"&gt;=&lt;/span&gt; zip(lsA, lsB)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;comB &lt;span style="color:#f92672"&gt;=&lt;/span&gt; zip(&lt;span style="color:#f92672"&gt;*&lt;/span&gt;comA)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;then made a try to see how * works:
&lt;div class="highlight"&gt;&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;3
&lt;/span&gt;&lt;span style="background-color:#3c3d38"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;4
&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color:#3c3d38"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;5
&lt;/span&gt;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;7
&lt;/span&gt;&lt;span style="background-color:#3c3d38"&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;8
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid;"&gt;&lt;code class="language-Python" data-lang="Python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;a &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;b &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;6&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#f92672"&gt;=&lt;/span&gt; zip(a,b)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex; background-color:#3c3d38"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; j &lt;span style="color:#f92672"&gt;in&lt;/span&gt; c:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex; background-color:#3c3d38"&gt;&lt;span&gt;print(j)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;d &lt;span style="color:#f92672"&gt;=&lt;/span&gt; zip(&lt;span style="color:#f92672"&gt;*&lt;/span&gt;c)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; i &lt;span style="color:#f92672"&gt;in&lt;/span&gt; d:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex; background-color:#3c3d38"&gt;&lt;span&gt;print(i)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/p&gt;</description></item><item><title>aiohttp/aiodns-Resolving using custom nameservers</title><link>https://blog.gainskills.top/2019/01/23/try-aiohttp/</link><pubDate>Wed, 23 Jan 2019 00:00:00 +0000</pubDate><guid>https://blog.gainskills.top/2019/01/23/try-aiohttp/</guid><description>&lt;p&gt;&lt;a href="https://github.com/aio-libs/aiohttp"&gt;aiohttp&lt;/a&gt; is an Asynchronous HTTP client/server framework for asyncio and Python&lt;/p&gt;
&lt;p&gt;I tried it because of the features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aiohttp.readthedocs.io/en/stable/client_advanced.html#tuning-the-dns-cache"&gt;Tuning the DNS cache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aiohttp.readthedocs.io/en/stable/client_advanced.html#resolving-using-custom-nameservers"&gt;Resolving using custom nameservers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With this, verifying the CDN&amp;rsquo;s POPs with different ISPs&amp;rsquo; DNS on single a point should be possible.&lt;/p&gt;
&lt;p&gt;Since the code on the official document is simple:&lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;p&gt;from aiohttp.resolver import AsyncResolver&lt;/p&gt;
&lt;p&gt;resolver = AsyncResolver(nameservers=[&amp;ldquo;8.8.8.8&amp;rdquo;, &amp;ldquo;8.8.4.4&amp;rdquo;])
conn = aiohttp.TCPConnector(resolver=resolver)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;
I tried it with following code:

~~~python
import aiohttp
import asyncio
from aiohttp.resolver import AsyncResolver

resolver = AsyncResolver(nameservers=[&amp;#34;114.114.114.114&amp;#34;])

async def dnstesting():
 async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(verify_ssl=False, use_dns_cache=False, resolver=resolver)) as session:
 r = await session.get(&amp;#34;http://google.com&amp;#34;)
 print(r.text)

asyncio.run(dnstesting())
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Run with following error:&lt;/p&gt;</description></item><item><title>get() in get() method of Pyhon dict</title><link>https://blog.gainskills.top/2019/01/19/get-in-dict-get/</link><pubDate>Wed, 09 Jan 2019 00:00:00 +0000</pubDate><guid>https://blog.gainskills.top/2019/01/19/get-in-dict-get/</guid><description>&lt;p&gt;Write down the tip for the practice: &lt;a href="https://www.hackerrank.com/challenges/the-time-in-words/problem"&gt;The Time in Words&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A dict was created for the time in number format to string format:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;intToStrDict &lt;span style="color:#f92672"&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;one&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;two&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;three&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;four&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;five&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;6&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;six&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;7&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;seven&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;8&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;eight&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;9&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;nine&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;10&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;ten&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;11&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;eleven&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;12&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;twelve&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;13&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;thirteen&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;14&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;fourteen&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;15&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;quarter&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;16&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;sixteen&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;17&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;seventeen&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;18&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;eighteen&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;19&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;nineteen&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;twenty&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;30&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;half&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;40&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;fourty&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#ae81ff"&gt;50&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;fifty&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="https://docs.python.org/3.7/library/stdtypes.html?highlight=dict%20get#dict.get"&gt;get()&lt;/a&gt; is a good way get the value of a key from the dict, so I tried following function to convert minute in number format to string format:&lt;/p&gt;</description></item><item><title>AWS S3 Bucket Creation</title><link>https://blog.gainskills.top/2018/12/27/aws-s3-bucket-creation/</link><pubDate>Thu, 27 Dec 2018 00:00:00 +0000</pubDate><guid>https://blog.gainskills.top/2018/12/27/aws-s3-bucket-creation/</guid><description>&lt;p&gt;Try to create a bucket with the Python library: boto3&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-Python" data-lang="Python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; boto3.session &lt;span style="color:#f92672"&gt;import&lt;/span&gt; Session
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;session&lt;span style="color:#f92672"&gt;=&lt;/span&gt;Session(aws_access_key_id&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;key1&amp;#39;&lt;/span&gt;, aws_secret_access_key&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;key2&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;s3 &lt;span style="color:#f92672"&gt;=&lt;/span&gt; session&lt;span style="color:#f92672"&gt;.&lt;/span&gt;resource(&lt;span style="color:#e6db74"&gt;&amp;#39;s3&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;s3&lt;span style="color:#f92672"&gt;.&lt;/span&gt;create_bucket(Bucket&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;kz-testbucket&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;but failed to run the script with errors:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;botocore.exceptions.ClientError: An error occurred (IllegalLocationConstraintException) when calling the CreateBucket operation: The unspecified location constraint is incompatible for the region specific endpoint this request was sent to.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;botocore.errorfactory.BucketAlreadyExists: An error occurred (BucketAlreadyExists) when calling the CreateBucket operation: The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again.&lt;/p&gt;</description></item><item><title>Python operator: double start(**)</title><link>https://blog.gainskills.top/2018/12/27/python-trick-double-stars/</link><pubDate>Fri, 21 Dec 2018 00:00:00 +0000</pubDate><guid>https://blog.gainskills.top/2018/12/27/python-trick-double-stars/</guid><description>&lt;p&gt;Here is the data:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;testdata &lt;span style="color:#f92672"&gt;=&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;a&amp;#39;&lt;/span&gt; : &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;b&amp;#39;&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;There are two ways to pass the data to a function&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Passing the data to the function&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;loop&lt;/span&gt;(data):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; key, value &lt;span style="color:#f92672"&gt;in&lt;/span&gt; data&lt;span style="color:#f92672"&gt;.&lt;/span&gt;items():
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(key, value)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;loop(testdata)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Passing the data with operator: **&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-Python" data-lang="Python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;loopStar&lt;/span&gt;(&lt;span style="color:#f92672"&gt;**&lt;/span&gt;kwargs):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; key, value &lt;span style="color:#f92672"&gt;in&lt;/span&gt; kwargs&lt;span style="color:#f92672"&gt;.&lt;/span&gt;items():
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(key, value)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;loopStar(&lt;span style="color:#f92672"&gt;**&lt;/span&gt;testdata)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Ansible-Access Network via Netconf</title><link>https://blog.gainskills.top/2018/10/11/ansible-access-network-netconf/</link><pubDate>Thu, 11 Oct 2018 00:00:00 +0000</pubDate><guid>https://blog.gainskills.top/2018/10/11/ansible-access-network-netconf/</guid><description>&lt;p&gt;Continue to try ansible with the device which was configure in &lt;a href="https://blog.gainskills.top/2018/10/07/netconf-feature-on-cisco-ios-iosxe/"&gt;netconf feature on Cisco IOS/IOSXE&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ansible Inventory:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;netconf&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;hosts&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;netconfIos&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;ansible_host&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;172.16.254.100&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;ansible_network_os&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;ios&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;ansible_ssh_port&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;22&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;netconfJunos&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;ansible_host&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;172.16.254.9&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;ansible_network_os&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;junos&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;ansible_ssh_port&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;830&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;vars&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;ansible_connection&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;netconf&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;ansible_ssh_user&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;ansible_ssh_pass&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;test123&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ansible_connnection should be ‘netconf’&lt;/li&gt;
&lt;li&gt;Be careful on the netconf port, it should be 22 if you enable netconf over SSH (the default port is 830)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;PlayBook:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;IOS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;hosts&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;netconfIos&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;gather_facts&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;tasks&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Get config for IOS devices&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;netconf_get&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;source&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;running&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;register&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;iosnetconf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Display output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;debug&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;msg&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;{{ iosnetconf.stdout }}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Netconf feature on Cisco IOS/IOSXE</title><link>https://blog.gainskills.top/2018/10/07/netconf-feature-on-cisco-ios-iosxe/</link><pubDate>Sun, 07 Oct 2018 00:00:00 +0000</pubDate><guid>https://blog.gainskills.top/2018/10/07/netconf-feature-on-cisco-ios-iosxe/</guid><description>&lt;p&gt;I tried to see how Ansible works with the netconf feature on Cisco and Juniper in past days: &lt;a href="https://www.juniper.net/documentation/en_US/junos/topics/topic-map/netconf-ssh-connection.html"&gt;Juniper’s official document&lt;/a&gt; is clear and easy to follow. but for Cisco, I followed &lt;a href="https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/cns/configuration/xe-3s/cns-xe-3s-book/netconf-sshv2.pdf"&gt;NETCONF over SSHv2&lt;/a&gt;, unfortunately, I was stuck on it for 6 days.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OS Version&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cisco IOS XE Software, Version 16.04.01&lt;/li&gt;
&lt;li&gt;Cisco IOS Software, Linux Software (I86BI_LINUXL2-IPBASEK9-M), Experimental Version 15.2(20170809:194209) [dstivers-aug9_]&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;NetConf Requests&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tried many requests, all failed:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;The hello (works) request:&lt;/p&gt;</description></item><item><title>Ansible-Access Network via SSH</title><link>https://blog.gainskills.top/2018/09/07/ansible-access-network-via-ssh/</link><pubDate>Tue, 04 Sep 2018 00:00:00 +0000</pubDate><guid>https://blog.gainskills.top/2018/09/07/ansible-access-network-via-ssh/</guid><description>&lt;p&gt;After &lt;a href="https://blog.gainskills.top/2018/09/04/ansible-access-network-via-telnet/"&gt;Telnet&lt;/a&gt;, continue to discuss how to access network device via SSH with Ansible.&lt;/p&gt;
&lt;p&gt;For SSH access, we should consider 3 methods:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Username/password&lt;/li&gt;
&lt;li&gt;Username/Public-Key without password&lt;/li&gt;
&lt;li&gt;Username/Public-Key with password&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Same EVE lab as the Telnet one: The Cisco IOS Router-192.168.1.99 is for SSH&lt;/p&gt;















&lt;div align="center"&gt;
 &lt;figure style="padding: 0.8rem; margin: 2rem 0; border: thin #c0c0c0 solid; border-radius: 10px; width: 2113px; max-width: 88%; "&gt;
 &lt;a href="https://blog.gainskills.top/img/postimgs/2018/09/5-opt_hu_acff4cb47d4a9f39.png" data-fancybox data-caption=Topo &gt;
 &lt;img data-src="https://blog.gainskills.top/img/postimgs/2018/09/5-opt_hu_9eb5bd280204eb4f.png" class="img-responsive img-lazyload" alt=Topo style="height: 350px;"/&gt;
 &lt;/a&gt;
 &lt;figcaption class="text-capitalize"&gt;
 &lt;small&gt;Topo&lt;/small&gt;
 &lt;/figcaption&gt;
 &lt;/figure&gt;
&lt;/div&gt;

&lt;h5 id="enable-ssh-on-the-router"&gt;Enable SSH on the router&lt;/h5&gt;
&lt;p&gt;Jump #1 username/password part to public key configuration, I discussed &lt;a href="https://blog.gainskills.top/2013/11/08/ios-devices-ssh-key-auth/"&gt;how to configure public key on IOS router with Putty&lt;/a&gt; before, instead of windows/putty, openssh is useful for generating keys on MAC OS.&lt;/p&gt;</description></item><item><title>Ansible-Access Network via Telnet</title><link>https://blog.gainskills.top/2018/09/04/ansible-access-network-via-telnet/</link><pubDate>Tue, 04 Sep 2018 00:00:00 +0000</pubDate><guid>https://blog.gainskills.top/2018/09/04/ansible-access-network-via-telnet/</guid><description>&lt;p&gt;I’m learning &lt;a href="https://www.ansible.com/"&gt;Ansible&lt;/a&gt; by reading the official document and some books like &lt;a href="Ansible%E5%85%A5%E9%97%A8"&gt;Ansible入门&lt;/a&gt;. Most of the instructions show you how to deploy or maintain the services on Linux, or file operations. But what I do is trying to explore its capability on network device management automation.&lt;/p&gt;
&lt;p&gt;The most important thing to practice routers/switches/routing protocol is accessing the device and configure it via CLI when I started to learn network, so I start my ansible tour by accessing the network device from CLI too.&lt;/p&gt;</description></item><item><title>Mininet-ImportError: customClass</title><link>https://blog.gainskills.top/2018/07/20/mininet-importerror-customclass/</link><pubDate>Fri, 20 Jul 2018 00:00:00 +0000</pubDate><guid>https://blog.gainskills.top/2018/07/20/mininet-importerror-customclass/</guid><description>&lt;p&gt;I tried to run miniedit.py after I have mininet installed, unfortunately, I got the error:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;ImportError&lt;/span&gt;: cannot &lt;span style="color:#f92672"&gt;import&lt;/span&gt; name customClass&lt;span style="color:#f92672"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;














&lt;div align="center"&gt;
 &lt;figure style="padding: 0.8rem; margin: 2rem 0; border: thin #c0c0c0 solid; border-radius: 10px; width: 593px; max-width: 88%; "&gt;
 &lt;a href="https://blog.gainskills.top/img/postimgs/2018/07/2-opt_hu_6fba2dcf3ba5ef1c.png" data-fancybox data-caption=Error &gt;
 &lt;img data-src="https://blog.gainskills.top/img/postimgs/2018/07/2-opt_hu_44500454d9367a5d.png" class="img-responsive img-lazyload" alt=Error style="height: 100px;"/&gt;
 &lt;/a&gt;
 &lt;figcaption class="text-capitalize"&gt;
 &lt;small&gt;Error&lt;/small&gt;
 &lt;/figcaption&gt;
 &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;Checked the py file: ~/mininet/mininet/util.py and miniedity.py, find nothing is wrong, search on the Internet, got no clue.&lt;/p&gt;
&lt;p&gt;Suddenly I found the version is not the version I wanted to install (I forgot to take a screenshot, the version should be 2.2.2daily something).&lt;/p&gt;</description></item><item><title>Flask, Flask-WTF, Flask-Bootstrap, Select2, jinja2 integration</title><link>https://blog.gainskills.top/2018/04/16/flask-flask-wtf-flask-bootstrap-select2-jinja2-integration/</link><pubDate>Mon, 16 Apr 2018 00:00:00 +0000</pubDate><guid>https://blog.gainskills.top/2018/04/16/flask-flask-wtf-flask-bootstrap-select2-jinja2-integration/</guid><description>&lt;p&gt;I intend to acquire the Python skill on web after years&amp;rsquo; work on data processing, so I started with &lt;a href="http://flask.pocoo.org/"&gt;Flask&lt;/a&gt; by the following Miguel &lt;a href="https://blog.miguelgrinberg.com/author/Miguel%20Grinberg"&gt;Grinberg&amp;rsquo;s instruction&lt;/a&gt;: &lt;a href="https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world"&gt;The Flask Mega&lt;/a&gt;, you can learn how to integrate bootstrap with your project from it.&lt;/p&gt;
&lt;p&gt;After that, you can learn how to integrate select2 with your project by reading &lt;a href="https://blog.csdn.net/zheng_integer/article/details/59507942"&gt;Flask Web开发:用Select2实现类似知乎的标签系统&lt;/a&gt; as a guide.&lt;/p&gt;</description></item><item><title>Python SMTPlib/Email</title><link>https://blog.gainskills.top/2018/02/13/python-smtplib-email/</link><pubDate>Tue, 13 Feb 2018 00:00:00 +0000</pubDate><guid>https://blog.gainskills.top/2018/02/13/python-smtplib-email/</guid><description>&lt;p&gt;I followed the &lt;a href="http://www.runoob.com/python3/python3-smtp.html"&gt;instruction&lt;/a&gt; which is written in Chinese to learn how to send emails by Python, here some tips from my practice:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Name of the attachment is shown as ‘ATT00002’&lt;/p&gt;
&lt;p&gt;The name of the attachment in the receiver mailbox is shown in the format ‘ATT0000X‘ with the code:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-Python" data-lang="Python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;att1[&lt;span style="color:#e6db74"&gt;&amp;#34;Content-Disposition&amp;#34;&lt;/span&gt;] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;attachment; filename=&amp;#34;runoob.txt&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 &lt;div align="center"&gt;
 &lt;figure style="padding: 0.8rem; margin: 2rem 0; border: thin #c0c0c0 solid; border-radius: 10px; width: 173px; max-width: 88%; "&gt;
 &lt;a href="https://blog.gainskills.top/img/postimgs/2018/02/4-opt_hu_9676f6ceeda14331.png" data-fancybox data-caption=Issue &gt;
 &lt;img data-src="https://blog.gainskills.top/img/postimgs/2018/02/4-opt_hu_444778dc6ac8f025.png" class="img-responsive img-lazyload" alt=Issue style="height: 300px;"/&gt;
 &lt;/a&gt;
 &lt;figcaption class="text-capitalize"&gt;
 &lt;small&gt;Issue&lt;/small&gt;
 &lt;/figcaption&gt;
 &lt;/figure&gt;
 &lt;/div&gt;

&lt;p&gt;The issue can be fixed by using .addheader() function:&lt;/p&gt;</description></item><item><title>30分钟上手Python网络爬虫</title><link>https://blog.gainskills.top/2018/01/30/30min-python-web-scrapper/</link><pubDate>Tue, 30 Jan 2018 00:00:00 +0000</pubDate><guid>https://blog.gainskills.top/2018/01/30/30min-python-web-scrapper/</guid><description>&lt;p&gt;原文链接: &lt;a href="https://hackernoon.com/30-minute-python-web-scraper-39d6d038e5da"&gt;https://hackernoon.com/30-minute-python-web-scraper-39d6d038e5da&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;此翻译已经获得作者许可。对原文、本文任何形式的转载、引用，必须知会作者&lt;/p&gt;
&lt;p&gt;我想用Python和&lt;a href="http://www.seleniumhq.org/"&gt;Selenium&lt;/a&gt;做网络爬虫有一会了，但是一直没有实施。几天之前，我决定小试一下。看起来令人望而却步，但实现代码从&lt;a href="https://unsplash.com/"&gt;Unsplash&lt;/a&gt;抓取一些漂亮的图片却是相当容易的。&lt;/p&gt;
&lt;h4 id="简易图片爬虫的食材"&gt;简易图片爬虫的食材&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.python.org/downloads/"&gt;Python&lt;/a&gt;(3.6.3或更新的版本)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.jetbrains.com/pycharm/download/#section=windows"&gt;Pycharm&lt;/a&gt;(社区版就够了)&lt;/li&gt;
&lt;li&gt;pip install &lt;a href="http://docs.python-requests.org/en/master/user/install/#install"&gt;requests&lt;/a&gt; &lt;a href="https://pillow.readthedocs.io/en/latest/installation.html#basic-installation"&gt;Pillow&lt;/a&gt; &lt;a href="http://selenium-python.readthedocs.io/installation.html#downloading-python-bindings-for-selenium"&gt;selenium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mozilla/geckodriver/releases/latest"&gt;geckodriver&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mozilla.org/en-US/firefox/new/"&gt;Mozlla Firefox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;互联网&lt;/li&gt;
&lt;li&gt;30分钟(或更少）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;*译者注：&lt;/p&gt;</description></item><item><title>OverflowError: signed char is greater than maximum</title><link>https://blog.gainskills.top/2017/06/06/overflowerror-signed-char-is-greater-than-maximum/</link><pubDate>Tue, 06 Jun 2017 00:00:00 +0000</pubDate><guid>https://blog.gainskills.top/2017/06/06/overflowerror-signed-char-is-greater-than-maximum/</guid><description>&lt;p&gt;Here the pseudo code about the flow:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; array &lt;span style="color:#f92672"&gt;import&lt;/span&gt; array
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#f92672"&gt;=&lt;/span&gt; array(&lt;span style="color:#e6db74"&gt;&amp;#39;b&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;with&lt;/span&gt; open(file, mode &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;rb&amp;#39;&lt;/span&gt;) &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; f:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; character &lt;span style="color:#f92672"&gt;in&lt;/span&gt; f:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; res &lt;span style="color:#f92672"&gt;=&lt;/span&gt; func(character)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; c&lt;span style="color:#f92672"&gt;.&lt;/span&gt;append(res)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It runs into the error:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;OverflowError&lt;/span&gt;: signed char &lt;span style="color:#f92672"&gt;is&lt;/span&gt; greater than maximum
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;with a special character &amp;lsquo;À&amp;rsquo; which its binary value is 192:&lt;/p&gt;















&lt;div align="center"&gt;
 &lt;figure style="padding: 0.8rem; margin: 2rem 0; border: thin #c0c0c0 solid; border-radius: 10px; width: 75px; max-width: 88%; "&gt;
 &lt;a href="https://blog.gainskills.top/img/postimgs/2017/06/1-opt_hu_d296f5b1185ec01d.png" data-fancybox data-caption=Character &gt;
 &lt;img data-src="https://blog.gainskills.top/img/postimgs/2017/06/1-opt_hu_13f2b29ea9bc2109.png" class="img-responsive img-lazyload" alt=Character style="height: 20px;"/&gt;
 &lt;/a&gt;
 &lt;figcaption class="text-capitalize"&gt;
 &lt;small&gt;Character&lt;/small&gt;
 &lt;/figcaption&gt;
 &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;My way to resolve this error is to update the type code of the array from &amp;lsquo;b&amp;rsquo; (signed char) to &amp;lsquo;B&amp;rsquo; (unsigned char).&lt;/p&gt;</description></item><item><title>Run Ansible on Windows</title><link>https://blog.gainskills.top/2016/11/30/run-ansible-on-windows/</link><pubDate>Tue, 29 Nov 2016 00:00:00 +0000</pubDate><guid>https://blog.gainskills.top/2016/11/30/run-ansible-on-windows/</guid><description>&lt;p&gt;Background:&lt;/p&gt;
&lt;p&gt;Here is a topology about the environment for performance testing, let’s name the servers 1st:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 windows server as the License/Workspace server&lt;/li&gt;
&lt;li&gt;5 windows servers as the Network Server&lt;/li&gt;
&lt;li&gt;5 windows servers as the Automation server&lt;/li&gt;
&lt;/ul&gt;















&lt;div align="center"&gt;
 &lt;figure style="padding: 0.8rem; margin: 2rem 0; border: thin #c0c0c0 solid; border-radius: 10px; width: 476px; max-width: 88%; "&gt;
 &lt;a href="https://blog.gainskills.top/img/postimgs/2016/11/5-opt_hu_fb9d39317589d7fd.png" data-fancybox data-caption=Topo &gt;
 &lt;img data-src="https://blog.gainskills.top/img/postimgs/2016/11/5-opt_hu_7bb2a51c31b7b3fe.png" class="img-responsive img-lazyload" alt=Topo style="height: 300px;"/&gt;
 &lt;/a&gt;
 &lt;figcaption class="text-capitalize"&gt;
 &lt;small&gt;Topo&lt;/small&gt;
 &lt;/figcaption&gt;
 &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;It took us a lot of time to deploy the product and collect logs on all of these servers.&lt;/p&gt;</description></item><item><title>VSCode for Python debug</title><link>https://blog.gainskills.top/2016/11/10/vscode-for-python-debug/</link><pubDate>Thu, 10 Nov 2016 00:00:00 +0000</pubDate><guid>https://blog.gainskills.top/2016/11/10/vscode-for-python-debug/</guid><description>&lt;iframe src="//www.slideshare.net/slideshow/embed_code/key/3GrRaqBAXV9mK" width="668" height="714" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen&gt; &lt;/iframe&gt; &lt;div style="margin-bottom:5px"&gt; &lt;strong&gt; &lt;a href="//www.slideshare.net/69444091/vs-code-debug" title="MS VS Code for Python debug" target="_blank"&gt;MS VS Code for Python debug&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href="//www.slideshare.net/69444091" target="_blank"&gt;k z&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;p&gt;View the article here if the iframe failed to load: &lt;a href="www.slideshare.net/slideshow/embed_code/key/3GrRaqBAXV9mK"&gt;www.slideshare.net/slideshow/embed_code/key/3GrRaqBAXV9mK&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Loop a dict to update the keys</title><link>https://blog.gainskills.top/2016/07/21/loop-a-dict-to-update-key/</link><pubDate>Thu, 21 Jul 2016 00:00:00 +0000</pubDate><guid>https://blog.gainskills.top/2016/07/21/loop-a-dict-to-update-key/</guid><description>&lt;p&gt;Source dict:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{&lt;span style="color:#e6db74"&gt;&amp;#39;keyA&amp;#39;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;keyB&amp;#39;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;&amp;#39;&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Expected dict:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{&lt;span style="color:#960050;background-color:#1e0010"&gt;‘&lt;/span&gt;keyA&lt;span style="color:#f92672"&gt;/&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;keyA&amp;#39;&lt;/span&gt; :&lt;span style="color:#960050;background-color:#1e0010"&gt;’’&lt;/span&gt;, keyA&lt;span style="color:#f92672"&gt;/&lt;/span&gt;keyB&lt;span style="color:#960050;background-color:#1e0010"&gt;’&lt;/span&gt; : &lt;span style="color:#960050;background-color:#1e0010"&gt;‘’&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Code1:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keyPrefix &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;keyA&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; key, value &lt;span style="color:#f92672"&gt;in&lt;/span&gt; Dict&lt;span style="color:#f92672"&gt;.&lt;/span&gt;items():
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    newkey &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;/&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;join([keyPrefix, key])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    Dict[newkey] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; Dict&lt;span style="color:#f92672"&gt;.&lt;/span&gt;pop(key)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Code2:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keyPrefix &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;keyA&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; key, value &lt;span style="color:#f92672"&gt;in&lt;/span&gt; Dict&lt;span style="color:#f92672"&gt;.&lt;/span&gt;keys():
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    newkey &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;/&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;join([keyPrefix, key])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;    Dict[newkey] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; Dict&lt;span style="color:#f92672"&gt;.&lt;/span&gt;pop(key)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Result of code1/code2 is:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{&lt;span style="color:#e6db74"&gt;&amp;#39;keyA/keyA/keyB&amp;#39;&lt;/span&gt; : &lt;span style="color:#e6db74"&gt;&amp;#39;&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;keyA/keyA/keyA&amp;#39;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;&amp;#39;&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It doesn&amp;rsquo;t work as expected, and I found the case only exists when &lt;strong&gt;prefix is the same to a key of the dict&lt;/strong&gt; which means code1/code2 works well when the keyPrefix is neither ‘keyA’ nor ‘beyB’.&lt;/p&gt;</description></item><item><title>Python多版本, Sublime Text, Anaconda指北</title><link>https://blog.gainskills.top/2016/06/07/python-sublimetext-anaconda/</link><pubDate>Tue, 07 Jun 2016 00:00:00 +0000</pubDate><guid>https://blog.gainskills.top/2016/06/07/python-sublimetext-anaconda/</guid><description>&lt;h4 id="介绍"&gt;介绍&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.sublimetext.com/"&gt;Sublime text&lt;/a&gt;是一款很好用的文本编辑器，更是一款先进的代码编辑器，支持通过插件进行功能扩展。在使用过UltraEditor, Notepad++, vim等等编辑器后，感觉sublime text最好用 (Update @ 2019-02-07: 目前由Sublimetext转移至&lt;a href="https://code.visualstudio.com/"&gt;MS VSCode&lt;/a&gt;)。&lt;/p&gt;</description></item><item><title>SNMP simulator installation guide</title><link>https://blog.gainskills.top/2016/01/28/snmp-simulator-installation-guide/</link><pubDate>Wed, 13 Nov 2013 00:00:00 +0000</pubDate><guid>https://blog.gainskills.top/2016/01/28/snmp-simulator-installation-guide/</guid><description>&lt;p&gt;&lt;strong&gt;About SNMP Simulator&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The the SNMP Simulator software is intended for testing SNMP Managers against a large number of SNMP Agents that represent a potentially very large network populated with different kinds of SNMP-capable devices.&lt;/p&gt;
&lt;p&gt;Refers to its &lt;a href="https://github.com/etingof/snmpsim"&gt;project page&lt;/a&gt; for more info.&lt;/p&gt;
&lt;p&gt;Why?&lt;/p&gt;
&lt;p&gt;With SNMP simulator you can simulate a device by the output of SNMPwalk without considering MIB files.&lt;/p&gt;
&lt;p&gt;This article is about how to install SNMP Simulator.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install Python&lt;/p&gt;</description></item></channel></rss>