<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Miscellaneous on 春江暮客</title>
    <link>https://www.bobobk.com/en/categories/miscellaneous/</link>
    <description>Recent content in Miscellaneous on 春江暮客</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Fri, 25 Feb 2022 08:41:44 +0800</lastBuildDate>
    <atom:link href="https://www.bobobk.com/en/categories/miscellaneous/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>The Lion and the Wolf</title>
      <link>https://www.bobobk.com/en/842.html</link>
      <pubDate>Fri, 25 Feb 2022 08:41:44 +0800</pubDate>
      <guid>https://www.bobobk.com/en/842.html</guid>
      <description>&lt;p&gt;God placed two flocks of sheep on the grassland, one in the east and one in the west. God also assigned two kinds of natural enemies to the sheep: lions and wolves. God said to the sheep, ``If you want wolves, you get one, which can bite you at will. If you want lions, you get two, and you can choose one of the two lions at any time and also switch between them whenever you want.&#39;&#39;&lt;/p&gt;&#xA;&lt;p&gt;(So, would you choose a wolf or a lion?)&lt;/p&gt;&#xA;&lt;p&gt;The eastern flock thought: lions are much fiercer than wolves, so it&amp;rsquo;s better to have a wolf. So they asked for one wolf. The western flock thought: although lions are fiercer than wolves, we have the choice right, so we want lions. So they asked for two lions.&lt;/p&gt;&#xA;&lt;p&gt;After the wolf entered the eastern flock, it started eating sheep. The wolf was small and had a small appetite, one sheep could feed it for several days. Thus, the sheep were hunted only once every few days.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Benefits of Trade</title>
      <link>https://www.bobobk.com/en/890.html</link>
      <pubDate>Sat, 22 Jan 2022 12:40:24 +0800</pubDate>
      <guid>https://www.bobobk.com/en/890.html</guid>
      <description>Recently, I have been reading Gregory Mankiw&amp;rsquo;s &amp;ldquo;Principles of Economics&amp;rdquo; and found it quite interesting. Here, I share one example that trade can benefit both parties, creating a win-win situation rather than one winner and one loser.</description>
    </item>
    <item>
      <title>What is Logic and Common Logical Fallacies?</title>
      <link>https://www.bobobk.com/en/682.html</link>
      <pubDate>Mon, 21 Sep 2020 20:57:02 +0800</pubDate>
      <guid>https://www.bobobk.com/en/682.html</guid>
      <description>Logic is used in most intelligent activities, but it is mainly regarded as a discipline in psychology, learning, philosophy, semantics, mathematics, inferential statistics, brain science, law, and computer science.</description>
    </item>
    <item>
      <title>FREENOM Free Domains Can No Longer Be Successfully Registered</title>
      <link>https://www.bobobk.com/en/924.html</link>
      <pubDate>Fri, 13 Mar 2020 18:04:03 +0800</pubDate>
      <guid>https://www.bobobk.com/en/924.html</guid>
      <description>Since the original domain registered on freenom expired and could no longer be used, I chose to go back to freenom to register a new domain for fun, but found that due to technical issues, the registration kept failing, and the domains below would be canceled.</description>
    </item>
    <item>
      <title>Differences and Use Cases of Normalization and Standardization</title>
      <link>https://www.bobobk.com/en/828.html</link>
      <pubDate>Sat, 04 Jan 2020 10:13:57 +0800</pubDate>
      <guid>https://www.bobobk.com/en/828.html</guid>
      <description>The term &amp;ldquo;normalization&amp;rdquo; is an informal expression in statistics, so the phrase &amp;ldquo;normalized data&amp;rdquo; can have multiple meanings. In most cases, normalizing data eliminates units of measurement, making it easier to compare data from different sources.</description>
    </item>
    <item>
      <title>1024 International Programmer&#39;s Day: One Sentence to Prove You&#39;re a Programmer</title>
      <link>https://www.bobobk.com/en/740.html</link>
      <pubDate>Thu, 24 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://www.bobobk.com/en/740.html</guid>
      <description>Today, October 24th, is International Programmer&amp;rsquo;s Day, a holiday recognized by many tech companies and software businesses globally. The origin of this festival is 1024, or 256, because it&amp;rsquo;s 2 to the power of 8, and computers store data in binary, thus becoming Programmer&amp;rsquo;s Day.</description>
    </item>
    <item>
      <title>Grabbing Free Oracle Cloud Servers and Automating Deployment with Scripts</title>
      <link>https://www.bobobk.com/en/612.html</link>
      <pubDate>Thu, 19 Sep 2019 16:11:25 +0000</pubDate>
      <guid>https://www.bobobk.com/en/612.html</guid>
      <description>Oracle Cloud recently opened registration for free usage of 2 1c1g cloud servers, databases, and other services. I registered immediately and chose Korea as the main region. Access speed from Shanghai is very fast. This post records the automation process for deploying servers using the OCI CLI.</description>
    </item>
    <item>
      <title>Seamless Migration from WordPress to Fully Static Hugo Website</title>
      <link>https://www.bobobk.com/en/555.html</link>
      <pubDate>Thu, 12 Sep 2019 18:57:32 +0000</pubDate>
      <guid>https://www.bobobk.com/en/555.html</guid>
      <description>When evaluating the website, I found that a large portion of js, css, and other content was not fully utilized, but I didn&amp;rsquo;t know how to efficiently combine or remove them. I also wanted to try a static blog, so I decided to migrate to a completely static blog system. Here, I chose Hugo as the new system.</description>
    </item>
    <item>
      <title>Scraping Emojis with Scrapy and Building a Search Website Using Flask</title>
      <link>https://www.bobobk.com/en/471.html</link>
      <pubDate>Thu, 05 Sep 2019 09:12:25 +0000</pubDate>
      <guid>https://www.bobobk.com/en/471.html</guid>
      <description>Today I chatted with a friend who said he bought emoji packs from Taobao. I don’t have many myself, but there are tons of emoji websites online — why not scrape them and build my own emoji search engine?</description>
    </item>
    <item>
      <title>The Risky Experience of Using Baidu Cloud Acceleration and Cloudflare Together</title>
      <link>https://www.bobobk.com/en/467.html</link>
      <pubDate>Mon, 02 Sep 2019 06:20:39 +0000</pubDate>
      <guid>https://www.bobobk.com/en/467.html</guid>
      <description>Considering that Cloudflare’s free sites are really slow in China, and Baidu Cloud Acceleration in China uses Cloudflare technology, I thought using Baidu CDN would speed up domestic access to the site.</description>
    </item>
    <item>
      <title>Customize, Modify, and Upload Your Own Docker Image</title>
      <link>https://www.bobobk.com/en/459.html</link>
      <pubDate>Thu, 22 Aug 2019 03:28:13 +0000</pubDate>
      <guid>https://www.bobobk.com/en/459.html</guid>
      <description>Dockers can package applications along with their virtual containers and dependencies, allowing them to run on any Linux server. This helps achieve flexibility and portability, enabling applications to run anywhere, whether on public cloud, private cloud, or standalone machines.</description>
    </item>
    <item>
      <title>Deploy Flask Python Web Service in Production Environment Using Gunicorn</title>
      <link>https://www.bobobk.com/en/456.html</link>
      <pubDate>Tue, 20 Aug 2019 04:33:25 +0000</pubDate>
      <guid>https://www.bobobk.com/en/456.html</guid>
      <description>Today I logged into the server and found python using a very high percentage of CPU, then discovered it was caused by some small web tools made with Flask on this site. Finally understood why Flask warns not to deploy directly in production.</description>
    </item>
    <item>
      <title>Enable DNSSEC for Aliyun Domain to Prevent DNS Hijacking</title>
      <link>https://www.bobobk.com/en/444.html</link>
      <pubDate>Tue, 13 Aug 2019 05:39:07 +0000</pubDate>
      <guid>https://www.bobobk.com/en/444.html</guid>
      <description>While using Cloudflare daily, I found the free &lt;em&gt;DNSSEC&lt;/em&gt; under DNS was not enabled. How can that be? Let&amp;rsquo;s first see what DNSSEC is.</description>
    </item>
    <item>
      <title>Use Cloudflare Workers to Free Accelerate WordPress Blog</title>
      <link>https://www.bobobk.com/en/434.html</link>
      <pubDate>Mon, 05 Aug 2019 02:33:54 +0000</pubDate>
      <guid>https://www.bobobk.com/en/434.html</guid>
      <description>To improve user experience, websites always try to speed up loading times at all costs. Google launched AMP, Baidu launched MIP, but both require deploying a separate set of website code, which is complicated and increases development costs.</description>
    </item>
    <item>
      <title>How to fix Google AdSense warnings about revenue loss risk due to ads.txt issues</title>
      <link>https://www.bobobk.com/en/425.html</link>
      <pubDate>Thu, 01 Aug 2019 07:44:18 +0000</pubDate>
      <guid>https://www.bobobk.com/en/425.html</guid>
      <description>Recently, AdSense has been warning about revenue loss risk - you need to fix some ads.txt file issues to avoid serious income damage. Although it’s just a small amount, seeing this prompt makes it necessary to fix it properly.</description>
    </item>
    <item>
      <title>Nginx reverse proxy TCP/UDP requests to map remote servers</title>
      <link>https://www.bobobk.com/en/422.html</link>
      <pubDate>Fri, 26 Jul 2019 10:28:37 +0000</pubDate>
      <guid>https://www.bobobk.com/en/422.html</guid>
      <description>Nginx is a high-performance HTTP server and reverse proxy server, as well as an IMAP/POP3/SMTP server. Since version 1.9.13, Nginx supports port forwarding.</description>
    </item>
    <item>
      <title>Install VNC Server on Alibaba Cloud centos7 for Graphical Access</title>
      <link>https://www.bobobk.com/en/414.html</link>
      <pubDate>Sat, 20 Jul 2019 05:13:29 +0000</pubDate>
      <guid>https://www.bobobk.com/en/414.html</guid>
      <description>This article introduces how to use tigervnc-server and Server with GUI to access the graphical interface of Linux centos7. All operations were completed on Alibaba Cloud ECS with centos7 installed. Follow the steps to add a graphical interface to centos7.</description>
    </item>
    <item>
      <title>Using Google Chrome to Test Interface Techniques</title>
      <link>https://www.bobobk.com/en/410.html</link>
      <pubDate>Wed, 17 Jul 2019 08:32:49 +0000</pubDate>
      <guid>https://www.bobobk.com/en/410.html</guid>
      <description>When writing web scrapers, manually modifying headers and cookies often causes headaches and errors. Here, a very convenient method using Chrome’s built-in tools to generate Python requests is introduced.</description>
    </item>
    <item>
      <title>How to Enable IPv6 Access on Alibaba Cloud ECS</title>
      <link>https://www.bobobk.com/en/377.html</link>
      <pubDate>Fri, 05 Jul 2019 02:17:44 +0000</pubDate>
      <guid>https://www.bobobk.com/en/377.html</guid>
      <description>&lt;p&gt;By default, the CentOS image on Alibaba Cloud comments out IPv6. Enabling it requires using a dual-stack IPv4 and IPv6 network, which needs to be applied for under beta testing—this isn’t very convenient. Instead, we can use an IPv6 tunnel provided by &lt;a href=&#34;https://tunnelbroker.net&#34;&gt;tunnelbroker.net&lt;/a&gt; to enable IPv6 access. Also, if you’re on campus and using China Telecom, you can get an IPv6 address directly. So, if the Alibaba Cloud server supports IPv6, you can browse the web for free.&lt;/p&gt;&#xA;&lt;h1 id=&#34;1-enable-ipv6-access&#34;&gt;1. Enable IPv6 Access&lt;/h1&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vi /etc/sysctl.conf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Uncomment the following three lines and change the value from &lt;code&gt;1&lt;/code&gt; to &lt;code&gt;0&lt;/code&gt;, as shown below:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.bobobk.com/wp-content/uploads/2019/07/ipv6.webp&#34; alt=&#34;ipv6&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Then reload the configuration with:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sysctl -p&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;IPv6 should now be supported.&lt;/p&gt;&#xA;&lt;h1 id=&#34;2-get-an-ipv6-address-via-tunnelbroker&#34;&gt;2. Get an IPv6 Address via Tunnelbroker&lt;/h1&gt;&#xA;&lt;p&gt;Go to &lt;a href=&#34;https://tunnelbroker.net&#34;&gt;https://tunnelbroker.net&lt;/a&gt; and register for an account. Make sure your password is complex enough or the registration may fail.&lt;/p&gt;&#xA;&lt;p&gt;After logging in, go to the bottom left and select &amp;ldquo;Create Regular Tunnel&amp;rdquo;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Soft-EtherVPN to Set Up OpenVPN to Bypass Webpage Authentication</title>
      <link>https://www.bobobk.com/en/365.html</link>
      <pubDate>Wed, 03 Jul 2019 03:26:21 +0000</pubDate>
      <guid>https://www.bobobk.com/en/365.html</guid>
      <description>Campus network requires phone number authentication, but since SIM cards are expensive and discontinued, the login page redirects to recharge. Although free IPv6 is available, most of the internet lacks IPv6 access capability.</description>
    </item>
    <item>
      <title>Build a Google Mirror Site Using Docker</title>
      <link>https://www.bobobk.com/en/354.html</link>
      <pubDate>Thu, 27 Jun 2019 08:28:59 +0000</pubDate>
      <guid>https://www.bobobk.com/en/354.html</guid>
      <description>&lt;p&gt;Due to a new environment where the router does not support installing Shadowsocks or V2Ray, accessing Google to search vast technical content in English is not possible. Here, we use the official Google mirror container to build a Google mirror site and map it to our existing domain.&lt;/p&gt;&#xA;&lt;h2 id=&#34;requirements&#34;&gt;Requirements:&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A VPS such as Vultr, etc.&lt;/li&gt;&#xA;&lt;li&gt;A domain name. In this case, we use &lt;code&gt;google.bobobk.com&lt;/code&gt; as the Google mirror domain.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;i-chose-an-amazon-vps-since-i-couldnt-find-a-good-centos-image-i-used-ubuntu-as-the-operating-system&#34;&gt;I chose an Amazon VPS. Since I couldn&amp;rsquo;t find a good CentOS image, I used Ubuntu as the operating system.&lt;/h2&gt;&#xA;&lt;p&gt;Steps to build the mirror site:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Set domain DNS to point to your VPS&lt;/li&gt;&#xA;&lt;li&gt;Add the site to your nginx server. I used the BT (BaoTa) panel, which is quite convenient.&lt;/li&gt;&#xA;&lt;li&gt;Modify the config file to set up a reverse proxy to Docker&amp;rsquo;s mapped port&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;1-set-domain-resolution&#34;&gt;1. Set domain resolution&lt;/h3&gt;&#xA;&lt;p&gt;Since I use Cloudflare CDN, I’ll use it as an example.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Extracting Free High Anonymity Proxies with Python3</title>
      <link>https://www.bobobk.com/en/352.html</link>
      <pubDate>Tue, 25 Jun 2019 04:41:34 +0000</pubDate>
      <guid>https://www.bobobk.com/en/352.html</guid>
      <description>&lt;p&gt;Writing web crawlers often leads to problems like IP bans or rate limits. Having an efficient IP proxy pool is quite important. Here, we introduce how to extract valid IPs from public proxy sources and build your own efficient crawler proxy pool.&lt;/p&gt;&#xA;&lt;h2 id=&#34;main-modules&#34;&gt;Main Modules:&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Use &lt;code&gt;requests&lt;/code&gt; to crawl proxies&lt;/li&gt;&#xA;&lt;li&gt;Update and check available proxies&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;crawling-proxies-with-requests-using-xici-as-an-example&#34;&gt;Crawling Proxies with &lt;code&gt;requests&lt;/code&gt;, using xici as an example&lt;/h2&gt;&#xA;&lt;p&gt;Anonymous proxy page: &lt;a href=&#34;https://www.xicidaili.com/nn/&#34;&gt;xici&lt;/a&gt;, inspect elements.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.bobobk.com/wp-content/uploads/2019/06/xici.webp&#34; alt=&#34;xici&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Each proxy is contained in a &lt;code&gt;tr&lt;/code&gt; under the element with id &lt;code&gt;ip_list&lt;/code&gt;, and detailed info is under &lt;code&gt;td&lt;/code&gt;. Therefore, the CSS selector can be&lt;br&gt;&#xA;&lt;em&gt;content.css(&amp;quot;#ip_list&amp;quot;).css(&amp;ldquo;tr&amp;rdquo;)&lt;/em&gt;, then extract the 1st and 6th elements.&lt;br&gt;&#xA;Later, we add IP availability checking logic, and store successful ones into a JSON file. After that, available proxy information can be accessed via HTTP.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/root/anaconda3/bin/python&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; scrapy.selector &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; Selector&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; redis&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; requests&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; json&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; requests&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;from&lt;/span&gt; requests.packages.urllib3.exceptions &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; InsecureRequestWarning&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;requests&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;packages&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;urllib3&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;disable_warnings(InsecureRequestWarning)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; random&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;get_headers&lt;/span&gt;():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    USER_AGENT_LIST &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; 360SE)&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; 360SE)&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#34;Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    USER_AGENT &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; random&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;choice(USER_AGENT_LIST)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;User-Agent&amp;#39;&lt;/span&gt;:USER_AGENT}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;get_random_proxy&lt;/span&gt;():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    https_pro&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;[i &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; pro &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; i]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; len(https_pro)&lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; https_pro[random&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;randint(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,len(https_pro))] &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;crawl_ip&lt;/span&gt;():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; range(&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        rand_ip &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; get_random_proxy()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; rand_ip:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            r &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;requests&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://www.xicidaili.com/nn/&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;format(str(i&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)),headers&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;get_headers())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            r &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;requests&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https://www.xicidaili.com/nn/&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;format(str(i&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)),headers&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;get_headers(),proxies&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;proxies_ip(rand_ip))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        content &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Selector(r)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ip_list &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; content&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;css(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#ip_list&amp;#34;&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;css(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;tr&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; ip_list[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;:]:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            info &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; i&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;css(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;td::text&amp;#34;&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;extract()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            ip &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; info[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            protoco &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; info[&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;]&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;strip()&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;lower()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; protoco&lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;or&lt;/span&gt; protoco&lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https&amp;#34;&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                url &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; protoco &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;://&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; ip &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;:&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; info[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;] &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                url &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;http://&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; ip &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;:&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; info[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            validate_ip(url)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;proxies_ip&lt;/span&gt;(url):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; url:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        proxies&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;{&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;http&amp;#39;&lt;/span&gt;:url}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        proxies&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;{&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;https&amp;#39;&lt;/span&gt;:url}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; proxies&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;validate_ip&lt;/span&gt;(url):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    proxies &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; proxies_ip(url)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; url &lt;span style=&#34;color:#f92672&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; pro:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        bobo_url&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;http_url&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; url:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            bobo_url&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;https_url&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            r &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; requests&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get(bobo_url, headers&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;get_headers(), proxies&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;proxies, timeout&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            pro&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;append(url)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;ip &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;%s&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt; validated&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; url)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;except&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Exception&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; e:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;cant check ip &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;%s&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt; url)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;check_current_ip&lt;/span&gt;(): &lt;span style=&#34;color:#75715e&#34;&gt;# Update and check usable proxies&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    curr &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; open(JSON_PATH)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;read()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; curr&lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; url &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; json&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;loads(open(JSON_PATH)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;read()):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            validate_ip(url)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; __name__ &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    http_url &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://www.bobobk.com&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    https_url &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://www.bobobk.com&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    pro &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; []&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    TXT_PATH &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/www/wwwroot/default/daili.txt&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    JSON_PATH&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/www/wwwroot/default/daili.json&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    PROXYCHAIN_CONF&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/www/wwwroot/default/proxy.conf&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    check_current_ip()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    crawl_ip()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;with&lt;/span&gt; open(JSON_PATH,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;w&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; fw:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        fw&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;write(json&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;dumps(list(set(pro))))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    fw&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;close()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;with&lt;/span&gt; open(TXT_PATH,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;w&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; fw:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; i &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; set(pro):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            fw&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;write(i&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;n&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    fw&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;close()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;update-and-check-usable-proxies&#34;&gt;Update and Check Usable Proxies&lt;/h2&gt;&#xA;&lt;p&gt;Before each page fetch, the script checks for usable proxies, and automatically uses them to fetch new ones. This setup can run stably.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sharing These Python Tips</title>
      <link>https://www.bobobk.com/en/349.html</link>
      <pubDate>Mon, 17 Jun 2019 15:27:15 +0000</pubDate>
      <guid>https://www.bobobk.com/en/349.html</guid>
      <description>&lt;p&gt;Despite having programmed in Python for many years, I&amp;rsquo;m still amazed by how clean the code can be and how well it adheres to the DRY (Don&amp;rsquo;t Repeat Yourself) programming principle. My experience over the years has taught me many small tricks and pieces of knowledge, mostly gained from reading popular open-source software like Django, Flask, and Requests.&lt;/p&gt;&#xA;&lt;p&gt;Here are a few tips I&amp;rsquo;ve picked out that are often overlooked, but can genuinely help us in daily programming.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-dictionary-comprehensions-and-set-comprehensions&#34;&gt;1. Dictionary Comprehensions and Set Comprehensions&lt;/h2&gt;&#xA;&lt;p&gt;Most Python programmers know and use &lt;strong&gt;list comprehensions&lt;/strong&gt;. If you&amp;rsquo;re not familiar with the concept of list comprehensions, it&amp;rsquo;s a shorter, more concise way to create a list.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; some_list &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; another_list &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [ x &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; x &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; some_list ]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; another_list&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Since Python 3, we can use the same syntax to create &lt;strong&gt;sets&lt;/strong&gt; and &lt;strong&gt;dictionaries&lt;/strong&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python Class Inheritance and Polymorphism</title>
      <link>https://www.bobobk.com/en/334.html</link>
      <pubDate>Mon, 03 Jun 2019 14:29:00 +0000</pubDate>
      <guid>https://www.bobobk.com/en/334.html</guid>
      <description>&lt;p&gt;In Object-Oriented Programming (OOP), when defining a class, you can inherit from an existing class.&#xA;The new class is called a &lt;strong&gt;Subclass&lt;/strong&gt;, and the inherited class is called a &lt;strong&gt;Base class, Parent class, or Super class&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;format&#34;&gt;Format:&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SubclassName(ParentClassName):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;pass&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;usage-example&#34;&gt;Usage Example&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Animal&lt;/span&gt;(object):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;run&lt;/span&gt;(self):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Animal is running...&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Dog&lt;/span&gt;(Animal):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;pass&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Dog1&lt;/span&gt;(Animal):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;run&lt;/span&gt;(self):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Dog is running...&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;run_twice&lt;/span&gt;(animal):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    animal&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;run()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    animal&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;run()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dog &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Dog()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dog&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;run()    &lt;span style=&#34;color:#75715e&#34;&gt;# Output: Animal is running...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dog1 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Dog1()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dog1&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;run()    &lt;span style=&#34;color:#75715e&#34;&gt;# Output: Dog is running..., executes the subclass&amp;#39;s own method&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;run_twice(Animal())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Output: Animal is running...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Output: Animal is running...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;run_twice(Dog1())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Output: Dog is running...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Output: Dog is running...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Add a new subclass Tortoise, then call the run_twice function, it still works&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Tortoise&lt;/span&gt;(Animal):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;run&lt;/span&gt;(self):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Tortoise is running slowly...&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;run_twice(Tortoise())    &lt;span style=&#34;color:#75715e&#34;&gt;# Calling run_twice function, it still works, just ensure the passed object has a run() method&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Output: Tortoise is running slowly...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Output: Tortoise is running slowly...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://www.bobobk.com/wp-content/uploads/2019/06/class_exam.png&#34; alt=&#34;class_exam&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Process Pools, Thread Pools, and Coroutines in Python</title>
      <link>https://www.bobobk.com/en/337.html</link>
      <pubDate>Sun, 02 Jun 2019 21:18:38 +0000</pubDate>
      <guid>https://www.bobobk.com/en/337.html</guid>
      <description>Neither threads nor processes can be opened indefinitely; they will always consume and occupy resources. Hardware has limited capacity. While ensuring high-efficiency work, hardware resource utilization should also be guaranteed. Therefore, an upper limit needs to be set for hardware to alleviate its pressure, which led to the concept of pools.</description>
    </item>
    <item>
      <title>Python zipfile Module Instantiation and Parsing</title>
      <link>https://www.bobobk.com/en/325.html</link>
      <pubDate>Sun, 02 Jun 2019 16:37:00 +0000</pubDate>
      <guid>https://www.bobobk.com/en/325.html</guid>
      <description>The zipfile module in Python is used for compressing and decompressing files in the common ZIP format. Since ZIP is a very common format, this module is used quite frequently.</description>
    </item>
    <item>
      <title>Summary of Python3 print function usage</title>
      <link>https://www.bobobk.com/en/323.html</link>
      <pubDate>Sat, 01 Jun 2019 17:53:38 +0000</pubDate>
      <guid>https://www.bobobk.com/en/323.html</guid>
      <description>&lt;p&gt;Python 3 makes the &lt;code&gt;print&lt;/code&gt; function more explicit compared to Python 2.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-outputting-strings-and-numbers&#34;&gt;&lt;strong&gt;1. Outputting Strings and Numbers&lt;/strong&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;print(&amp;quot;runoob&amp;quot;)&lt;/code&gt; # Outputs string runoob&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;print(100)&lt;/code&gt; # Outputs number 100&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;str = &#39;runoob&#39;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;print(str)&lt;/code&gt; # Outputs variable runoob&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;L = [1,2,&#39;a&#39;]&lt;/code&gt; # List&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;print(L)&lt;/code&gt; &lt;code&gt;[1, 2, &#39;a&#39;]&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;t = (1,2,&#39;a&#39;)&lt;/code&gt; # Tuple&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;print(t)&lt;/code&gt; &lt;code&gt;(1, 2, &#39;a&#39;)&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;d = {&#39;a&#39;:1, &#39;b&#39;:2}&lt;/code&gt; # Dictionary&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;print(d)&lt;/code&gt; &lt;code&gt;{&#39;a&#39;: 1, &#39;b&#39;: 2}&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;2-formatted-integer-output&#34;&gt;&lt;strong&gt;2. Formatted Integer Output&lt;/strong&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Supports parameter formatting, similar to C language&amp;rsquo;s &lt;code&gt;printf&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;str &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;the length of (&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;%s&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;) is &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;%d&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;runoob&amp;#39;&lt;/span&gt;,len(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;runoob&amp;#39;&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;print(str) &lt;span style=&#34;color:#75715e&#34;&gt;# the length of (runoob) is 6&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Python String Formatting Symbols:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;** Symbol**&lt;/th&gt;&#xA;          &lt;th&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;%c&lt;/td&gt;&#xA;          &lt;td&gt;Formats character and its ASCII code&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;%s&lt;/td&gt;&#xA;          &lt;td&gt;Formats string&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;%d&lt;/td&gt;&#xA;          &lt;td&gt;Formats signed decimal integer&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;%u&lt;/td&gt;&#xA;          &lt;td&gt;Formats unsigned decimal integer&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;%o&lt;/td&gt;&#xA;          &lt;td&gt;Formats unsigned octal number&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;%x&lt;/td&gt;&#xA;          &lt;td&gt;Formats unsigned hexadecimal number (lowercase)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;%X&lt;/td&gt;&#xA;          &lt;td&gt;Formats unsigned hexadecimal number (uppercase)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;%f&lt;/td&gt;&#xA;          &lt;td&gt;Formats floating-point number, precision can be specified after decimal point&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;%e&lt;/td&gt;&#xA;          &lt;td&gt;Formats floating-point number in scientific notation (lowercase &amp;rsquo;e&#39;)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;%E&lt;/td&gt;&#xA;          &lt;td&gt;Same as %e, formats floating-point number in scientific notation (uppercase &amp;lsquo;E&amp;rsquo;)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;%g&lt;/td&gt;&#xA;          &lt;td&gt;Shorthand for %f and %e&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;%G&lt;/td&gt;&#xA;          &lt;td&gt;Shorthand for %f and %E&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;%p&lt;/td&gt;&#xA;          &lt;td&gt;Formats variable&amp;rsquo;s address in hexadecimal&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;&lt;strong&gt;Formatting Operator Auxiliary Directives:&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Closing a Screen Session from Outside the Session</title>
      <link>https://www.bobobk.com/en/310.html</link>
      <pubDate>Tue, 21 May 2019 10:52:13 +0000</pubDate>
      <guid>https://www.bobobk.com/en/310.html</guid>
      <description>&lt;p&gt;&lt;strong&gt;Screen&lt;/strong&gt; is an excellent tool for running programs in the background. Typically, you can connect to a session using &lt;code&gt;screen -r&lt;/code&gt; and then close the session with &lt;code&gt;Ctrl + C&lt;/code&gt;. However, if you&amp;rsquo;ve implemented exception handling (like &lt;code&gt;try-except&lt;/code&gt;) in your Python scripts, you&amp;rsquo;ll find that this only breaks out of the loop and doesn&amp;rsquo;t terminate the entire session. In such cases, directly closing a specific session from outside the session is much more convenient.&lt;/p&gt;&#xA;&lt;p&gt;The command to do this is:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;screen -XS test quit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here, &lt;code&gt;test&lt;/code&gt; is the name of your session. Of course, to view all active sessions, you can use:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;screen -ls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here&amp;rsquo;s an example sequence of commands:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;screen -S test python test.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;screen -ls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;screen -XS test quit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;screen -ls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://www.bobobk.com/wp-content/uploads/2019/05/screen_test.webp&#34; alt=&#34;screen_test&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Yum Update Error &#39;rpmdb&#39;, Insufficient Space</title>
      <link>https://www.bobobk.com/en/305.html</link>
      <pubDate>Tue, 21 May 2019 02:07:30 +0000</pubDate>
      <guid>https://www.bobobk.com/en/305.html</guid>
      <description>Logged into Linux and encountered an &amp;lsquo;Error: rpmdb open failed&amp;rsquo; when using &amp;lsquo;yum update -y&amp;rsquo;.</description>
    </item>
    <item>
      <title>Decoding Real Addresses from Xunlei Thunder Download Links</title>
      <link>https://www.bobobk.com/en/299.html</link>
      <pubDate>Fri, 17 May 2019 14:30:26 +0000</pubDate>
      <guid>https://www.bobobk.com/en/299.html</guid>
      <description>Students who frequently download videos and games often encounter Xunlei download links starting with &amp;rsquo;thunder://&amp;rsquo;, but are often unable to download due to copyright issues. Here, we will explain the conversion between regular download URLs and Xunlei download links.</description>
    </item>
    <item>
      <title>Running Conda Command-Line Scripts on Windows</title>
      <link>https://www.bobobk.com/en/297.html</link>
      <pubDate>Fri, 17 May 2019 03:35:33 +0000</pubDate>
      <guid>https://www.bobobk.com/en/297.html</guid>
      <description>&lt;p&gt;I needed to remotely update website content from my Windows machine at home, and while I have Conda installed on Windows, I found I couldn&amp;rsquo;t directly write and run scripts. I could only launch Conda from the Start menu and type commands line by line.&lt;/p&gt;&#xA;&lt;p&gt;After some searching and learning, I finally found a solution.&lt;/p&gt;&#xA;&lt;p&gt;The reason you can&amp;rsquo;t directly write and run &lt;code&gt;.bat&lt;/code&gt; batch files for Conda commands (which use various Python libraries from Conda) is that the default &lt;code&gt;cmd.exe&lt;/code&gt; doesn&amp;rsquo;t activate the Conda environment. Once you add the environment activation command, your scripts will run. You can refer to the original English explanation here: &lt;a href=&#34;https://stackoverflow.com/questions/46305569/how-to-make-batch-files-run-in-anaconda-prompt&#34;&gt;https://stackoverflow.com/questions/46305569/how-to-make-batch-files-run-in-anaconda-prompt&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The final command structure looks like this:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bat&#34; data-lang=&#34;bat&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;call&lt;/span&gt; &amp;#39;G:/conda/Scripts/activate.bat&amp;#39; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;scrapy crawl dou&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;python tupian.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;python post.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Accelerating Python Code with Numba to C&#43;&#43;-like Speeds</title>
      <link>https://www.bobobk.com/en/313.html</link>
      <pubDate>Wed, 15 May 2019 00:00:00 +0000</pubDate>
      <guid>https://www.bobobk.com/en/313.html</guid>
      <description>&lt;h2 id=&#34;1-introduction&#34;&gt;1. Introduction&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Numba&lt;/strong&gt; is a &lt;strong&gt;Just-in-Time (JIT) compiler&lt;/strong&gt; for Python. This means that when you call a Python function, all or part of your code is converted &amp;ldquo;on-the-fly&amp;rdquo; into machine code, which then runs at the speed of your native machine! It is sponsored by Anaconda, Inc. and supported by many other organizations.&lt;/p&gt;&#xA;&lt;p&gt;With Numba&amp;rsquo;s help, you can accelerate all computationally intensive Python functions (e.g., loops). It also supports the &lt;strong&gt;NumPy library&lt;/strong&gt;! So, you can use NumPy in your computations and speed up overall calculations, as loops in Python are notoriously slow. You can also use many functions from Python&amp;rsquo;s standard &lt;code&gt;math&lt;/code&gt; library, such as &lt;code&gt;sqrt&lt;/code&gt;, etc.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;2-why-choose-numba&#34;&gt;2. Why Choose Numba?&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.bobobk.com/wp-content/uploads/2019/05/numba.jpeg&#34; alt=&#34;《Accelerating Python Code with Numba to C&amp;#43;&amp;#43;-like Speeds》&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;So, why choose Numba when there are many other compilers like &lt;strong&gt;Cython&lt;/strong&gt; and &lt;strong&gt;PyPy&lt;/strong&gt;?&#xA;The reason is simple: you don&amp;rsquo;t have to leave the comfort zone of writing Python code. That&amp;rsquo;s right, you don&amp;rsquo;t need to change your code at all to get a speedup comparable to what you&amp;rsquo;d get from similar type-defined Cython code. Isn&amp;rsquo;t that great?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python3 Binary Number Representation and Bitwise Operations</title>
      <link>https://www.bobobk.com/en/285.html</link>
      <pubDate>Thu, 07 Mar 2019 08:54:12 +0000</pubDate>
      <guid>https://www.bobobk.com/en/285.html</guid>
      <description>&lt;p&gt;In information theory, the &lt;strong&gt;Hamming distance&lt;/strong&gt; between two equally long strings is the number of positions at which the corresponding characters are different. In other words, it&amp;rsquo;s the minimum number of substitutions required to transform one string into the other. If the strings are binary, the Hamming distance can be calculated very simply using a &lt;strong&gt;bitwise XOR&lt;/strong&gt; operation.&lt;/p&gt;&#xA;&lt;p&gt;Here, we will introduce how to use binary representation and perform bitwise operations in &lt;strong&gt;Python 3&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;binary-representation-in-python&#34;&gt;Binary Representation in Python&lt;/h2&gt;&#xA;&lt;p&gt;In Python, binary numbers can be represented by strings prefixed with &lt;code&gt;&amp;quot;0b&amp;quot;&lt;/code&gt; or &lt;code&gt;&amp;quot;-0b&amp;quot;&lt;/code&gt;. We can also use the &lt;code&gt;bin()&lt;/code&gt; function to convert a numerical value into its binary string form.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    print(&lt;span style=&#34;color:#ae81ff&#34;&gt;0b1101&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;#13&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    print(&lt;span style=&#34;color:#ae81ff&#34;&gt;0b11111110&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;#254&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    bin(&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;#&amp;#39;0b101&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;binary-bitwise-operations&#34;&gt;Binary Bitwise Operations&lt;/h2&gt;&#xA;&lt;p&gt;Python provides the following bitwise operations:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt;: &lt;strong&gt;Right shift&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt;: &lt;strong&gt;Left shift&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;|&lt;/code&gt;: &lt;strong&gt;Bitwise OR&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;&amp;amp;&lt;/code&gt;: &lt;strong&gt;Bitwise AND&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;^&lt;/code&gt;: &lt;strong&gt;Bitwise XOR&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;~&lt;/code&gt;: &lt;strong&gt;Bitwise NOT&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s look at them in detail below.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python implementation for Qianqian Music MP3 download</title>
      <link>https://www.bobobk.com/en/216.html</link>
      <pubDate>Tue, 08 Jan 2019 05:31:43 +0000</pubDate>
      <guid>https://www.bobobk.com/en/216.html</guid>
      <description>&lt;p&gt;Entering the Qianqian Music homepage and selecting Jay Chou&amp;rsquo;s &amp;ldquo;Confession Balloon&amp;rdquo; reveals that it&amp;rsquo;s a 2016 song with no preview available, which is sad. Is there a way to get the MP3 file? The answer is yes. A runnable program for music download is available at the end of the article.&lt;/p&gt;&#xA;&lt;p&gt;Without further ado, I opened the charts and chose a new song that could be previewed; &amp;ldquo;Sheng Pi Zi&amp;rdquo; was the first one I could listen to.&lt;/p&gt;&#xA;&lt;h2 id=&#34;python-implementation-for-qianqian-music-mp3-download&#34;&gt;&lt;img src=&#34;https://www.bobobk.com/wp-content/uploads/2019/01/bangdan.webp&#34; alt=&#34;Python implementation for Qianqian Music MP3 download&#34;&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;1-analyze-api-information&#34;&gt;1. Analyze API information&lt;/h2&gt;&#xA;&lt;p&gt;Opening the developer tools, I found that music files are definitely submitted through an API. Among many requests, I found a request that could retrieve music files. See the image below:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.bobobk.com/wp-content/uploads/2019/01/music_net.webp&#34; alt=&#34;Python implementation for Qianqian Music MP3 download&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Check the request details:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.bobobk.com/wp-content/uploads/2019/01/qqyy_request.webp&#34; alt=&#34;Python implementation for Qianqian Music MP3 download&#34;&gt;&#xA;The &lt;strong&gt;songid&lt;/strong&gt; parameter can be found in the current URL: &lt;code&gt;http://music.taihe.com/song/611238837&lt;/code&gt;. It&amp;rsquo;s simple. &lt;code&gt;from&lt;/code&gt; should be &amp;ldquo;web&amp;rdquo; or &amp;ldquo;app&amp;rdquo;, etc. The &lt;code&gt;format&lt;/code&gt; defining the return data type doesn&amp;rsquo;t need to be changed. &lt;code&gt;method&lt;/code&gt; doesn&amp;rsquo;t need to be changed. The &lt;code&gt;_&lt;/code&gt; parameter is a 13-digit timestamp. &lt;code&gt;callback&lt;/code&gt; is the prefix of the returned JSON data. The &lt;code&gt;1546915161467&lt;/code&gt; after the underscore is a 13-digit timestamp, while the preceding &lt;code&gt;17200943498528136486&lt;/code&gt; is unknown. We&amp;rsquo;ll try to use the known parameters to see if we can retrieve information without changing the unknown content.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python implementation for Qianqian Music MP3 download</title>
      <link>https://www.bobobk.com/en/216.html</link>
      <pubDate>Tue, 08 Jan 2019 05:31:43 +0000</pubDate>
      <guid>https://www.bobobk.com/en/216.html</guid>
      <description>&lt;p&gt;Entering the Qianqian Music homepage and selecting Jay Chou&amp;rsquo;s &amp;ldquo;Confession Balloon&amp;rdquo; reveals that it&amp;rsquo;s a 2016 song with no preview available, which is sad. Is there a way to get the MP3 file? The answer is yes. A runnable program for music download is available at the end of the article.&lt;/p&gt;&#xA;&lt;p&gt;Without further ado, I opened the charts and chose a new song that could be previewed; &amp;ldquo;Sheng Pi Zi&amp;rdquo; was the first one I could listen to.&lt;/p&gt;&#xA;&lt;h2 id=&#34;python-implementation-for-qianqian-music-mp3-download&#34;&gt;&lt;img src=&#34;https://www.bobobk.com/wp-content/uploads/2019/01/bangdan.webp&#34; alt=&#34;Python implementation for Qianqian Music MP3 download&#34;&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;1-analyze-api-information&#34;&gt;1. Analyze API information&lt;/h2&gt;&#xA;&lt;p&gt;Opening the developer tools, I found that music files are definitely submitted through an API. Among many requests, I found a request that could retrieve music files. See the image below:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.bobobk.com/wp-content/uploads/2019/01/music_net.webp&#34; alt=&#34;Python implementation for Qianqian Music MP3 download&#34;&gt;&#xA;Check the request details:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.bobobk.com/wp-content/uploads/2019/01/qqyy_request.webp&#34; alt=&#34;Python implementation for Qianqian Music MP3 download&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The &lt;strong&gt;songid&lt;/strong&gt; parameter can be found in the current URL: &lt;code&gt;http://music.taihe.com/song/611238837&lt;/code&gt;. It&amp;rsquo;s simple. &lt;code&gt;from&lt;/code&gt; should be &amp;ldquo;web&amp;rdquo; or &amp;ldquo;app&amp;rdquo;, etc. The &lt;code&gt;format&lt;/code&gt; defining the return data type doesn&amp;rsquo;t need to be changed. &lt;code&gt;method&lt;/code&gt; doesn&amp;rsquo;t need to be changed. The &lt;code&gt;_&lt;/code&gt; parameter is a 13-digit timestamp. &lt;code&gt;callback&lt;/code&gt; is the prefix of the returned JSON data. The &lt;code&gt;1546915161467&lt;/code&gt; after the underscore is a 13-digit timestamp, while the preceding &lt;code&gt;17200943498528136486&lt;/code&gt; is unknown. We&amp;rsquo;ll try to use the known parameters to see if we can retrieve information without changing the unknown content.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python to draw horizontal and vertical lines as dividing lines</title>
      <link>https://www.bobobk.com/en/213.html</link>
      <pubDate>Mon, 07 Jan 2019 14:30:41 +0000</pubDate>
      <guid>https://www.bobobk.com/en/213.html</guid>
      <description>When plotting, you often encounter situations where you need to add dividing lines. So, which functions in Python can conveniently draw horizontal or vertical lines? Below are two functions that can easily add horizontal or vertical lines.</description>
    </item>
    <item>
      <title>Mounting an External Hard Drive in Linux</title>
      <link>https://www.bobobk.com/en/211.html</link>
      <pubDate>Sun, 06 Jan 2019 02:35:21 +0000</pubDate>
      <guid>https://www.bobobk.com/en/211.html</guid>
      <description>&lt;p&gt;After a machine restart, the external hard drive wasn&amp;rsquo;t recognized and needed to be remounted. However, after using &lt;code&gt;fdisk -l&lt;/code&gt;, the external hard drive was nowhere to be found, making it impossible to mount.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.bobobk.com/wp-content/uploads/2019/01/disk.webp&#34; alt=&#34;Mounting an External Hard Drive in Linux&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-to-mount-a-disk&#34;&gt;How to Mount a Disk&lt;/h2&gt;&#xA;&lt;p&gt;First, use &lt;code&gt;fdisk -l&lt;/code&gt; to check the current hard drive status.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ➜  ~ fdisk -l &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Disk /dev/sdb: 320.1 GB, &lt;span style=&#34;color:#ae81ff&#34;&gt;320072933376&lt;/span&gt; bytes, &lt;span style=&#34;color:#ae81ff&#34;&gt;625142448&lt;/span&gt; sectors&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Units &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; sectors of &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; * 512 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; bytes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Sector size &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;logical/physical&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; bytes / &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; bytes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    I/O size &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;minimum/optimal&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; bytes / &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; bytes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Disk label type: gpt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Disk identifier: AF1B577B-830C-4026-AC5F-37870D362B3C&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;#         Start         End    Size  Type            Name&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;          &lt;span style=&#34;color:#ae81ff&#34;&gt;2048&lt;/span&gt;      &lt;span style=&#34;color:#ae81ff&#34;&gt;411647&lt;/span&gt;    200M  EFI System      EFI System Partition&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;        &lt;span style=&#34;color:#ae81ff&#34;&gt;411648&lt;/span&gt;     &lt;span style=&#34;color:#ae81ff&#34;&gt;2508799&lt;/span&gt;      1G  Microsoft basic&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;       &lt;span style=&#34;color:#ae81ff&#34;&gt;2508800&lt;/span&gt;   &lt;span style=&#34;color:#ae81ff&#34;&gt;625141759&lt;/span&gt;  296.9G  Linux LVM&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Disk /dev/mapper/centos-root: 53.7 GB, &lt;span style=&#34;color:#ae81ff&#34;&gt;53687091200&lt;/span&gt; bytes, &lt;span style=&#34;color:#ae81ff&#34;&gt;104857600&lt;/span&gt; sectors&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Units &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; sectors of &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; * 512 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; bytes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Sector size &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;logical/physical&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; bytes / &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; bytes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    I/O size &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;minimum/optimal&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; bytes / &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; bytes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Disk /dev/mapper/centos-swap: &lt;span style=&#34;color:#ae81ff&#34;&gt;3623&lt;/span&gt; MB, &lt;span style=&#34;color:#ae81ff&#34;&gt;3623878656&lt;/span&gt; bytes, &lt;span style=&#34;color:#ae81ff&#34;&gt;7077888&lt;/span&gt; sectors&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Units &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; sectors of &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; * 512 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; bytes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Sector size &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;logical/physical&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; bytes / &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; bytes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    I/O size &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;minimum/optimal&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; bytes / &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; bytes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Disk /dev/mapper/centos-home: 261.5 GB, &lt;span style=&#34;color:#ae81ff&#34;&gt;261468717056&lt;/span&gt; bytes, &lt;span style=&#34;color:#ae81ff&#34;&gt;510681088&lt;/span&gt; sectors&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Units &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; sectors of &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; * 512 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; bytes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Sector size &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;logical/physical&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; bytes / &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; bytes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    I/O size &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;minimum/optimal&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; bytes / &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; bytes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Disk /dev/sda: 1000.2 GB, &lt;span style=&#34;color:#ae81ff&#34;&gt;1000170586112&lt;/span&gt; bytes, &lt;span style=&#34;color:#ae81ff&#34;&gt;1953458176&lt;/span&gt; sectors&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Units &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; sectors of &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; * 512 &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; bytes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Sector size &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;logical/physical&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; bytes / &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; bytes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    I/O size &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;minimum/optimal&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; bytes / &lt;span style=&#34;color:#ae81ff&#34;&gt;512&lt;/span&gt; bytes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Disk label type: dos&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Disk identifier: 0x16f2a91f&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          Device Boot      Start        End    Blocks  Id  System&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    /dev/sda1             &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4294967295&lt;/span&gt; 2147483647+ ee  GPT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Here, my external hard drive is 1TB, which means it&amp;rsquo;s &lt;code&gt;/dev/sda1&lt;/code&gt;. So, I can use the &lt;code&gt;mount&lt;/code&gt; command to mount it:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Five Easy Steps to Achieve Linux Passwordless Login</title>
      <link>https://www.bobobk.com/en/204.html</link>
      <pubDate>Wed, 02 Jan 2019 01:59:12 +0000</pubDate>
      <guid>https://www.bobobk.com/en/204.html</guid>
      <description>&lt;p&gt;SSH, which stands for Secure Shell, is a widely used and reliable program for securely executing commands remotely on Linux systems. SCP, used for secure file transfers, is also based on the SSH security protocol.&lt;/p&gt;&#xA;&lt;p&gt;When you have many servers, frequently typing passwords can be quite troublesome. So, how can you log in without a password while maintaining security? Of course, it&amp;rsquo;s possible. Here, we&amp;rsquo;ll outline five steps to achieve passwordless login for Linux servers such as RHEL/CentOS 7.x/6.x/5.x and Fedora.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.bobobk.com/wp-content/uploads/2019/01/linux.webp&#34; alt=&#34;Five Easy Steps to Achieve Linux Passwordless Login&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s look at the environment:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    SSH Client : 192.168.1.12 &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt; Mac &lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    SSH Remote Host : 192.168.1.11 &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt; CentOS &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This article will demonstrate passwordless login from a Mac to a remote CentOS 7 server.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-generate-ssh-keygen-key-pair-on-your-local-mac&#34;&gt;1. Generate SSH-Keygen Key Pair on Your Local Mac&lt;/h2&gt;&#xA;&lt;p&gt;First, use the following command in your Mac terminal to generate a key pair:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Detailed Explanation of Python Magic Methods</title>
      <link>https://www.bobobk.com/en/194.html</link>
      <pubDate>Wed, 26 Dec 2018 04:15:44 +0000</pubDate>
      <guid>https://www.bobobk.com/en/194.html</guid>
      <description>What are magic methods? Of course, they have nothing to do with magicians. They are everywhere in object-oriented Python. They are special methods that allow you to add &amp;ldquo;magic&amp;rdquo; to your classes. These methods are automatically called during certain operations and represent the wisdom of Python&amp;rsquo;s object-oriented design.</description>
    </item>
    <item>
      <title>boxes: An Interesting Command-Line String Shaping Tool</title>
      <link>https://www.bobobk.com/en/185.html</link>
      <pubDate>Fri, 21 Dec 2018 12:58:56 +0000</pubDate>
      <guid>https://www.bobobk.com/en/185.html</guid>
      <description>When frequently using GitHub, you may notice others&amp;rsquo; repository code help information or website source code always has beautifully shaped patterns made of strings, but your own code lacks these decorations and looks plain. So how can you generate such stylish string shapes? The answer is to use the interesting command-line string shaping tool boxes.</description>
    </item>
    <item>
      <title>Using Python to Get Real Video URLs from VIP Parsing Sites</title>
      <link>https://www.bobobk.com/en/81.html</link>
      <pubDate>Wed, 19 Dec 2018 14:26:16 +0000</pubDate>
      <guid>https://www.bobobk.com/en/81.html</guid>
      <description>There are currently many video sites in China, including Tencent Video, iQIYI, Youku, Bilibili, etc. These sites have many VIP videos that require payment. Recently, there have been a few dramas I wanted to watch.</description>
    </item>
    <item>
      <title>Python Random Strong Password Generator</title>
      <link>https://www.bobobk.com/en/136.html</link>
      <pubDate>Tue, 18 Dec 2018 01:23:13 +0000</pubDate>
      <guid>https://www.bobobk.com/en/136.html</guid>
      <description>Due to security needs, it is recommended that users use different strong passwords on different websites. Setting a strong password every time can be troublesome, so here we write a small Python program to generate strong passwords. In the future, just visit the following website and copy-paste the password.</description>
    </item>
    <item>
      <title>How to Use Prism for Code Highlighting in WordPress</title>
      <link>https://www.bobobk.com/en/115.html</link>
      <pubDate>Thu, 13 Dec 2018 03:21:03 +0000</pubDate>
      <guid>https://www.bobobk.com/en/115.html</guid>
      <description>I&amp;rsquo;ve always admired the code blocks on CSDN for their language-specific highlighting and beautiful rendering. This made me wonder if I could achieve a similar effect on WordPress. Here, I&amp;rsquo;ll detail my process of setting up code rendering in WordPress.</description>
    </item>
    <item>
      <title>Setting up TensorFlow Deep Learning Server Environment</title>
      <link>https://www.bobobk.com/en/70.html</link>
      <pubDate>Fri, 30 Nov 2018 12:55:25 +0000</pubDate>
      <guid>https://www.bobobk.com/en/70.html</guid>
      <description>The lab just got a new server configured with an NVIDIA 1080TI graphics card for deep learning. The first thing after setting up the machine was figuring out how to configure the TensorFlow deep learning environment. Here, I&amp;rsquo;ll document my process of setting up the environment and the issues I encountered, hoping to help others with similar needs.</description>
    </item>
    <item>
      <title>Using Tencent CDN and Cloudflare CDN Services Simultaneously</title>
      <link>https://www.bobobk.com/en/61.html</link>
      <pubDate>Mon, 26 Nov 2018 04:36:50 +0000</pubDate>
      <guid>https://www.bobobk.com/en/61.html</guid>
      <description>For websites providing both Chinese and English services, balancing access speed for domestic and international users is very important.</description>
    </item>
    <item>
      <title>Setting Python 3 as the Default Environment in Baota Panel</title>
      <link>https://www.bobobk.com/en/32.html</link>
      <pubDate>Fri, 16 Nov 2018 02:28:18 +0000</pubDate>
      <guid>https://www.bobobk.com/en/32.html</guid>
      <description>Baota Panel is a management panel that simplifies server administration via a web interface, boosting operational efficiency. It enables easy installation of essential web programs, website creation and management, FTP, database tools, a visual file manager, CPU, memory, and traffic monitoring charts, and scheduled tasks.</description>
    </item>
  </channel>
</rss>
