<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>春江暮客</title>
    <link>https://www.bobobk.com/en/</link>
    <description>Recent content on 春江暮客</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Thu, 04 Jun 2026 10:20:00 +0800</lastBuildDate>
    <atom:link href="https://www.bobobk.com/en/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Codex Project Rules: Use AGENTS.md to Keep AI Coding Consistent</title>
      <link>https://www.bobobk.com/en/codex-agents-md-workflow.html</link>
      <pubDate>Thu, 04 Jun 2026 10:20:00 +0800</pubDate>
      <guid>https://www.bobobk.com/en/codex-agents-md-workflow.html</guid>
      <description>Use AGENTS.md to turn project rules, test commands, and review expectations into instructions Codex loads every time.</description>
    </item>
    <item>
      <title>Python Log Triage: Use rg and uv to Find Nginx 5xx Errors Fast</title>
      <link>https://www.bobobk.com/en/python-log-triage-rg-uv.html</link>
      <pubDate>Wed, 03 Jun 2026 07:50:00 +0800</pubDate>
      <guid>https://www.bobobk.com/en/python-log-triage-rg-uv.html</guid>
      <description>Use rg to filter suspicious lines from large logs, then run a uv-powered Python script to summarize 5xx errors.</description>
    </item>
    <item>
      <title>Connect Codex to LiteLLM with Nginx as One Model Gateway</title>
      <link>https://www.bobobk.com/en/codex-litellm-nginx-proxy.html</link>
      <pubDate>Tue, 02 Jun 2026 13:50:00 +0800</pubDate>
      <guid>https://www.bobobk.com/en/codex-litellm-nginx-proxy.html</guid>
      <description>Use LiteLLM, Nginx, and Codex together so Codex can call multiple model aliases through one HTTPS endpoint.</description>
    </item>
    <item>
      <title>Write Self-Contained Python Scripts with uv and PEP 723</title>
      <link>https://www.bobobk.com/en/self-contained-python-scripts-uv.html</link>
      <pubDate>Tue, 02 Jun 2026 09:20:00 +0800</pubDate>
      <guid>https://www.bobobk.com/en/self-contained-python-scripts-uv.html</guid>
      <description>Use uv and PEP 723 to put Python dependencies inside a script so it can run after being copied to another machine.</description>
    </item>
    <item>
      <title>Build a Sky Flap Browser Game with Phaser: Source Download to Local Run</title>
      <link>https://www.bobobk.com/en/build-phaser-sky-flap-game.html</link>
      <pubDate>Mon, 01 Jun 2026 10:00:00 +0800</pubDate>
      <guid>https://www.bobobk.com/en/build-phaser-sky-flap-game.html</guid>
      <description>Build a Sky Flap browser game with Phaser and Vite, then download the live page source, inspect the entry file, run locally, and publish.</description>
    </item>
    <item>
      <title>Secure Python MCP Server: Add Boundaries to AI Tool Calls</title>
      <link>https://www.bobobk.com/en/secure-python-mcp-server.html</link>
      <pubDate>Mon, 01 Jun 2026 09:05:00 +0800</pubDate>
      <guid>https://www.bobobk.com/en/secure-python-mcp-server.html</guid>
      <description>Build a Python MCP Server with path limits, file size limits, allowlists, and audit logs.</description>
    </item>
    <item>
      <title>2026 Practical Python Workflow: Replace pip, venv, and pipx with uv</title>
      <link>https://www.bobobk.com/en/uv-python-workflow.html</link>
      <pubDate>Sat, 30 May 2026 10:30:00 +0800</pubDate>
      <guid>https://www.bobobk.com/en/uv-python-workflow.html</guid>
      <description>Use one copyable uv workflow to manage Python versions, project dependencies, scripts, CLI tools, and legacy migrations.</description>
    </item>
    <item>
      <title>2026 Practical Guide: Build Your First MCP Server with Python</title>
      <link>https://www.bobobk.com/en/python-mcp-server-quickstart.html</link>
      <pubDate>Fri, 29 May 2026 09:30:00 +0800</pubDate>
      <guid>https://www.bobobk.com/en/python-mcp-server-quickstart.html</guid>
      <description>Build a working MCP Server with Python and FastMCP so AI agents can call your own local tools.</description>
    </item>
    <item>
      <title>rg Tutorial: Why Many Developers Use ripgrep Instead of grep</title>
      <link>https://www.bobobk.com/en/rg-vs-grep.html</link>
      <pubDate>Thu, 28 May 2026 08:30:00 +0800</pubDate>
      <guid>https://www.bobobk.com/en/rg-vs-grep.html</guid>
      <description>This guide introduces rg with practical commands and compares it with grep across speed, ignore rules, recursive search, and day-to-day code searching workflows.</description>
    </item>
    <item>
      <title>2026 Webmaster Playbook: Automate llms.txt for AI Search with Python</title>
      <link>https://www.bobobk.com/en/llms-txt-for-ai-search.html</link>
      <pubDate>Sun, 24 May 2026 08:30:00 +0800</pubDate>
      <guid>https://www.bobobk.com/en/llms-txt-for-ai-search.html</guid>
      <description>Build and maintain llms.txt with a practical Hugo + Python workflow so AI search and answer systems can find your high-value pages faster.</description>
    </item>
    <item>
      <title>Build Your Own Solana Wallet Toolkit (Batch Address Generation / SOL and USDT Transfer)</title>
      <link>https://www.bobobk.com/en/build_own_solana_wallet.html</link>
      <pubDate>Wed, 06 May 2026 10:30:00 +0800</pubDate>
      <guid>https://www.bobobk.com/en/build_own_solana_wallet.html</guid>
      <description>Use 2 Python scripts to cover the common Solana wallet workflow: batch address generation, balance checks, ATA handling, and SOL or USDT transfers.</description>
    </item>
    <item>
      <title>Build Your Own TRON Wallet Toolkit (Batch Address Generation / USDT Transfer / Staking &amp; Voting)</title>
      <link>https://www.bobobk.com/en/build_own_tron_wallet.html</link>
      <pubDate>Fri, 24 Apr 2026 11:07:45 +0800</pubDate>
      <guid>https://www.bobobk.com/en/build_own_tron_wallet.html</guid>
      <description>Three Python scripts covering the TRON wallet core loop: batch address generation, USDT/TRX transfer, staking, unstaking, voting, and energy delegation.</description>
    </item>
    <item>
      <title>M3U8 to MP4 Tutorial: Download and Convert M3U8 Videos Using Python or Static HTML</title>
      <link>https://www.bobobk.com/en/how_to_generate_mp4_from_m3u8.html</link>
      <pubDate>Tue, 27 Jan 2026 13:40:31 +0800</pubDate>
      <guid>https://www.bobobk.com/en/how_to_generate_mp4_from_m3u8.html</guid>
      <description>This guide covers two practical ways to convert M3U8 to MP4: a Python command-line workflow and a browser-based FFmpeg.wasm solution, plus validation and troubleshooting steps.</description>
    </item>
    <item>
      <title>Using Matplotlib&#39;s fill_between for Area Filling in Python</title>
      <link>https://www.bobobk.com/en/748.html</link>
      <pubDate>Wed, 29 Dec 2021 08:47:31 +0800</pubDate>
      <guid>https://www.bobobk.com/en/748.html</guid>
      <description>This guide shows how to use Matplotlib &lt;code&gt;fill_between()&lt;/code&gt; for area fills below a curve, above a reference line, between two curves, and in condition-based highlight regions.</description>
    </item>
    <item>
      <title>Foundations of Data Science: Common Probability Distributions and Their Explanations</title>
      <link>https://www.bobobk.com/en/712.html</link>
      <pubDate>Thu, 09 Jan 2020 11:11:12 +0800</pubDate>
      <guid>https://www.bobobk.com/en/712.html</guid>
      <description>This guide explains the most common probability distributions in data science, including Bernoulli, Binomial, Poisson, Geometric, Exponential, Normal, t, and Chi-squared, with a practical shortcut for deciding when each one is useful.</description>
    </item>
    <item>
      <title>How to Convert Between YAML and JSON (Complete Python/JavaScript Guide)</title>
      <link>https://www.bobobk.com/en/convert-yaml-to-json.html</link>
      <pubDate>Sat, 17 May 2025 08:53:04 +0800</pubDate>
      <guid>https://www.bobobk.com/en/convert-yaml-to-json.html</guid>
      <description>This guide shows how to convert YAML and JSON in both directions with Python and JavaScript, plus validation steps and common parsing fixes.</description>
    </item>
    <item>
      <title>在线YAML与JSON的相互转换</title>
      <link>https://www.bobobk.com/en/yaml_json/</link>
      <pubDate>Sat, 17 May 2025 08:53:04 +0800</pubDate>
      <guid>https://www.bobobk.com/en/yaml_json/</guid>
      <description>&lt;p&gt;本工具用于 YAML 与 JSON 格式的相互转换，支持格式校验与实时预览，基于 JavaScript 实现，无需后端支持，数据不上传，纯前端运行。&lt;/p&gt;&#xA;&lt;h2 id=&#34;使用方法&#34;&gt;使用方法&lt;/h2&gt;&#xA;&lt;h3 id=&#34;yaml-转-json&#34;&gt;YAML 转 JSON&lt;/h3&gt;&#xA;&lt;p&gt;在下方输入合法的 YAML 数据：&lt;/p&gt;&#xA;&lt;div&gt;&#xA;&lt;textarea id=&#34;yamlInput&#34; placeholder=&#39;name: yanzhi&#xA;age: 18&#39;&gt;&lt;/textarea&gt;&#xA;&lt;button onclick=&#34;convertToJson()&#34;&gt;转换为 JSON&lt;/button&gt;&#xA;&lt;p&gt;编码后的JSON为：&lt;/p&gt;&#xA;&lt;pre id=&#34;jsonoutputArea&#34;&gt;{&#xA;  &#34;name&#34;: &#34;yanzhi&#34;,&#xA;  &#34;age&#34;: 18&#xA;}&lt;/pre&gt;&#xA;&lt;script&gt;&#xA;function convertToJson() {&#xA;  const input = document.getElementById(&#34;yamlInput&#34;).value;&#xA;  const output = document.getElementById(&#34;jsonoutputArea&#34;);&#xA;  try {&#xA;    const obj = jsyaml.load(input);&#xA;    const json = JSON.stringify(obj, null, 2);&#xA;    output.textContent = json;&#xA;  } catch (e) {&#xA;    output.textContent = &#34;❌ YAML 解析错误: &#34; + e.message;&#xA;  }&#xA;}&#xA;&lt;/script&gt;&#xA;&lt;/div&gt;&#xA;&lt;h3 id=&#34;json-转-yaml&#34;&gt;JSON 转 YAML&lt;/h3&gt;&#xA;&lt;div&gt;&#xA;&lt;input type=&#34;text&#34; id=&#34;jsonInput&#34; oninput=&#34;convertToYaml()&#34; placeholder=&#39;{&#34;name&#34;: &#34;yanzhi&#34;, &#34;age&#34;: 18}&#39;/&gt;&#xA;&lt;button onclick=&#34;convertToYaml()&#34;&gt;转换为YAML&lt;/button&gt;&#xA;&lt;p&gt;编码后的YAML为：&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Improve Website Indexing Speed with IndexNow</title>
      <link>https://www.bobobk.com/en/how-to-improve-index-speed-by-indexnow.html</link>
      <pubDate>Wed, 07 May 2025 10:26:16 +0800</pubDate>
      <guid>https://www.bobobk.com/en/how-to-improve-index-speed-by-indexnow.html</guid>
      <description>In current SEO practices, rapid indexing of pages by search engines is a key concern for webmasters. Traditional search engines rely on crawlers to periodically fetch website content, resulting in low indexing efficiency. IndexNow is a proactive submission protocol that allows websites to notify search engines of content updates in real-time, significantly improving indexing speed. This article will explain how to use IndexNow for efficient indexing.</description>
    </item>
    <item>
      <title>Automatically Publishing Articles to WordPress Using a Python Script: A Complete Workflow Analysis</title>
      <link>https://www.bobobk.com/en/python-wordpress-workflow.html</link>
      <pubDate>Mon, 21 Apr 2025 08:25:00 +0800</pubDate>
      <guid>https://www.bobobk.com/en/python-wordpress-workflow.html</guid>
      <description>When building content sites or AI content distribution projects, how can you efficiently batch publish generated content to WordPress? This article will share how I used a Python script to build an automated content publishing process that does not rely on the WordPress backend, does not require XML import, and directly connects to the database for maximum efficiency.</description>
    </item>
    <item>
      <title>Python: Creating Beautiful Lollipop Charts</title>
      <link>https://www.bobobk.com/en/955.html</link>
      <pubDate>Fri, 31 May 2024 10:03:32 +0800</pubDate>
      <guid>https://www.bobobk.com/en/955.html</guid>
      <description>This guide shows how to create a clear and attractive lollipop chart with matplotlib, including when to use it, what to customize, and how to check the final output.</description>
    </item>
    <item>
      <title>Downloading m3u8 Streaming Media Using Python and Embedding into AMP Webpages</title>
      <link>https://www.bobobk.com/en/892.html</link>
      <pubDate>Tue, 01 Aug 2023 09:02:57 +0800</pubDate>
      <guid>https://www.bobobk.com/en/892.html</guid>
      <description>This guide shows how to download m3u8 streaming segments with Python, merge them into MP4, and embed the final video into an AMP page for playback.</description>
    </item>
    <item>
      <title>Managing Long-Running Tasks on Unix-like Systems</title>
      <link>https://www.bobobk.com/en/861.html</link>
      <pubDate>Fri, 21 Jul 2023 14:47:07 +0800</pubDate>
      <guid>https://www.bobobk.com/en/861.html</guid>
      <description>This guide shows how to move an already-running foreground task into the background on Unix-like systems and keep it running after logout with &lt;code&gt;Ctrl+Z&lt;/code&gt;, &lt;code&gt;bg&lt;/code&gt;, and &lt;code&gt;disown&lt;/code&gt;.</description>
    </item>
    <item>
      <title>ChatGPT Automatically Generates Web Pages</title>
      <link>https://www.bobobk.com/en/762.html</link>
      <pubDate>Thu, 16 Feb 2023 16:57:33 +0800</pubDate>
      <guid>https://www.bobobk.com/en/762.html</guid>
      <description>This article uses a simple text-counter example to show what ChatGPT can generate with HTML, CSS, and JavaScript, and why a basic word counter works for English but needs extra handling for Chinese text.</description>
    </item>
    <item>
      <title>How to Build a Debian Mail Server with Postfix, Dovecot, MySQL, and Roundcube</title>
      <link>https://www.bobobk.com/en/675.html</link>
      <pubDate>Sat, 18 Jun 2022 19:41:47 +0800</pubDate>
      <guid>https://www.bobobk.com/en/675.html</guid>
      <description>This guide walks through a practical Debian mail-server setup with Postfix, Dovecot, MySQL, and Roundcube, including preflight checks, validation steps, and the common outbound-mail limitation.</description>
    </item>
    <item>
      <title>SomaticSignatures Tutorial: Analyze Tumor Mutation Signatures from TCGA Data</title>
      <link>https://www.bobobk.com/en/871.html</link>
      <pubDate>Sat, 09 Apr 2022 11:41:37 +0800</pubDate>
      <guid>https://www.bobobk.com/en/871.html</guid>
      <description>This guide shows how to reshape TCGA MAF mutation data into SomaticSignatures input and then use R to assess mutational signature counts, run NMF decomposition, and visualize the results.</description>
    </item>
    <item>
      <title>Designing Baidu SEO Click Software with GUI using PyQt6</title>
      <link>https://www.bobobk.com/en/763.html</link>
      <pubDate>Wed, 30 Mar 2022 08:39:43 +0800</pubDate>
      <guid>https://www.bobobk.com/en/763.html</guid>
      <description>For webmasters, improving search engine rankings through website SEO and attracting more organic users is crucial for continuously increasing website traffic. In addition to improving the quality of their own website content, simulating searches and clicks on search engines is a complementary method. After comparing various existing Baidu and Sogou click software, designing a customizable SEO click software of one&amp;rsquo;s own seems very challenging and meaningful. Recently, I&amp;rsquo;ve also been learning PyQt6 as a GUI programming package, which is perfect for this task.</description>
    </item>
    <item>
      <title>How to Install Old Version R Packages in R</title>
      <link>https://www.bobobk.com/en/326.html</link>
      <pubDate>Tue, 15 Mar 2022 09:01:38 +0800</pubDate>
      <guid>https://www.bobobk.com/en/326.html</guid>
      <description>This guide shows how to manually install older R packages from source when a newer R version cannot install packages like &lt;code&gt;qvalue&lt;/code&gt; or &lt;code&gt;clusterProfiler&lt;/code&gt; directly.</description>
    </item>
    <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>Drawing Raincloud Plots with Python</title>
      <link>https://www.bobobk.com/en/791.html</link>
      <pubDate>Tue, 11 Jan 2022 15:56:31 +0800</pubDate>
      <guid>https://www.bobobk.com/en/791.html</guid>
      <description>This guide shows how to create a Raincloud plot with Python, what the layered structure means, and what to adjust before exporting the figure for reports or papers.</description>
    </item>
    <item>
      <title>Introduction to Canonical Correlation Analysis and Python Implementation</title>
      <link>https://www.bobobk.com/en/581.html</link>
      <pubDate>Wed, 29 Dec 2021 14:01:33 +0800</pubDate>
      <guid>https://www.bobobk.com/en/581.html</guid>
      <description>This guide explains what Canonical Correlation Analysis (CCA) is, how it differs from PCA, and how to run and interpret a simple CCA workflow in Python with sklearn.</description>
    </item>
    <item>
      <title>Calculating Confidence Intervals with Bootstrapping: A Python Resampling Example</title>
      <link>https://www.bobobk.com/en/838.html</link>
      <pubDate>Tue, 28 Dec 2021 10:19:45 +0800</pubDate>
      <guid>https://www.bobobk.com/en/838.html</guid>
      <description>This article explains confidence intervals and shows, with a Python bootstrap example, how to repeatedly resample data, visualize the resulting statistic, and estimate a 95% confidence interval.</description>
    </item>
    <item>
      <title>How to Choose Preprocessing Methods: MinMaxScaler, StandardScaler, RobustScaler, and Normalizer</title>
      <link>https://www.bobobk.com/en/981.html</link>
      <pubDate>Sun, 26 Dec 2021 15:43:24 +0800</pubDate>
      <guid>https://www.bobobk.com/en/981.html</guid>
      <description>This article explains several common preprocessing methods in sklearn, including MinMaxScaler, StandardScaler, RobustScaler, and Normalizer, and shows when each one is a better fit.</description>
    </item>
    <item>
      <title>The c-index and Its Application in Survival Analysis</title>
      <link>https://www.bobobk.com/en/592.html</link>
      <pubDate>Thu, 23 Dec 2021 17:06:46 +0800</pubDate>
      <guid>https://www.bobobk.com/en/592.html</guid>
      <description>The concordance index, or c-index, is a common survival-analysis metric for ranking quality. This guide explains what it measures, how to compute it with Python &lt;code&gt;lifelines&lt;/code&gt;, and why ordering matters more than exact values.</description>
    </item>
    <item>
      <title>Python Native Lists vs. NumPy Arrays</title>
      <link>https://www.bobobk.com/en/321.html</link>
      <pubDate>Wed, 22 Dec 2021 09:49:00 +0800</pubDate>
      <guid>https://www.bobobk.com/en/321.html</guid>
      <description>This article uses small examples to compare Python lists and NumPy arrays, focusing on what they do differently in summation, products, and numeric computing workflows.</description>
    </item>
    <item>
      <title>K-Means Clustering and Implementation with sklearn</title>
      <link>https://www.bobobk.com/en/902.html</link>
      <pubDate>Mon, 20 Dec 2021 08:19:34 +0800</pubDate>
      <guid>https://www.bobobk.com/en/902.html</guid>
      <description>Cluster analysis allows us to find groups of similar samples or features, with stronger correlations among these objects. Common uses include grouping samples by different gene expression profiles or grouping genes by classifications of different samples.</description>
    </item>
    <item>
      <title>迅雷链接解析</title>
      <link>https://www.bobobk.com/en/thunde_parse/</link>
      <pubDate>Tue, 14 Dec 2021 09:30:38 +0000</pubDate>
      <guid>https://www.bobobk.com/en/thunde_parse/</guid>
      <description>&lt;p&gt;此工具是用于解析迅雷链接真实地址及编码。&#xA;已更新为javascript版本，无需后端支持。&lt;/p&gt;&#xA;&lt;h2 id=&#34;使用方法&#34;&gt;使用方法&lt;/h2&gt;&#xA;&lt;p&gt;1.解码迅雷：填写迅雷链接地址。完整的包含thunder://的地址&lt;/p&gt;&#xA;&lt;p&gt;&#xA;&lt;input type=&#34;text&#34; id=&#34;de_thunder&#34; name=&#34;thunder_address&#34; oninput=&#34;decodethun()&#34; placeholder=&#34;thunder://QUFodHRwczovL3d3dy5ib2JvYmsuY29tL2Zhdmljb24uaWNvWlo=&#34;/&gt;&#xA;&lt;p&gt;解码后的地址为：&#xA;&lt;label id=&#34;decoded&#34;&gt;&lt;a href=&#34;https://www.bobobk.com/favicon.ico&#34;&gt;https://www.bobobk.com/favicon.ico&lt;/a&gt;&lt;/label&gt;&lt;/p&gt;&#xA;&lt;script&gt;&#xA;function decodethun(){&#xA;var rawcode = document.querySelector(&#34;#de_thunder&#34;).value.substring(10);&#xA;var decodedadd = window.atob(rawcode);&#xA;var decodedadd = decodedadd.substring(2,decodedadd.length-2);&#xA;document.querySelector(&#39;#decoded&#39;).innerHTML = decodedadd;&#xA;}&#xA;&lt;/script&gt;&#xA;&lt;/p&gt;&#xA;2.编码迅雷：填写链接地址。编码后获得thunder://的地址&#xA;&lt;p&gt;&#xA;&lt;input type=&#34;text&#34; id=&#34;en_thunder&#34; name=&#34;raw_address&#34; oninput=&#34;encodethun()&#34;  placeholder=&#34;https://www.bobobk.com/favicon.ico&#34;/&gt;&#xA;&lt;p&gt;编码后的地址为：&#xA;&lt;label id=&#34;encoded&#34;&gt;thunder://QUFodHRwczovL3d3dy5ib2JvYmsuY29tL2Zhdmljb24uaWNvWlo=&lt;/label&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Four Plotting Tips in Python</title>
      <link>https://www.bobobk.com/en/469843.html</link>
      <pubDate>Mon, 13 Dec 2021 18:25:17 +0800</pubDate>
      <guid>https://www.bobobk.com/en/469843.html</guid>
      <description>When visualizing data, it&amp;rsquo;s common to plot multiple charts in a single figure. For example, visualizing the same variable from different perspectives like side-by-side histograms and boxplots for numerical variables is useful.</description>
    </item>
    <item>
      <title>Using Docker to Render JavaScript Web Pages via Browser from Command Line</title>
      <link>https://www.bobobk.com/en/525.html</link>
      <pubDate>Wed, 08 Dec 2021 08:58:40 +0800</pubDate>
      <guid>https://www.bobobk.com/en/525.html</guid>
      <description>When using scrapy to crawl web pages, many websites render content with JavaScript, so directly fetching the source code will not get the needed content. In this case, using selenium to drive a browser to get the rendered content is very suitable.</description>
    </item>
    <item>
      <title>Accelerating pip and anaconda in China</title>
      <link>https://www.bobobk.com/en/833.html</link>
      <pubDate>Mon, 06 Dec 2021 09:23:35 +0800</pubDate>
      <guid>https://www.bobobk.com/en/833.html</guid>
      <description>Since the default addresses for pip and anaconda are very slow to access in China, adding domestic mirrors for acceleration is necessary.</description>
    </item>
    <item>
      <title>Hands-on Implementation of Random Forest Algorithm with Python</title>
      <link>https://www.bobobk.com/en/621.html</link>
      <pubDate>Mon, 28 Dec 2020 14:04:47 +0800</pubDate>
      <guid>https://www.bobobk.com/en/621.html</guid>
      <description>This tutorial shows how to build a random forest regression workflow with Python and sklearn using Shanghai weather data, covering setup, cleaning, feature engineering, training, evaluation, and prediction.</description>
    </item>
    <item>
      <title>Python String Splitting Guide: split, rsplit, splitlines, partition, and re.split</title>
      <link>https://www.bobobk.com/en/852.html</link>
      <pubDate>Mon, 09 Nov 2020 10:46:15 +0800</pubDate>
      <guid>https://www.bobobk.com/en/852.html</guid>
      <description>This article summarizes the 6 most useful Python string splitting methods, including split, rsplit, splitlines, partition, rpartition, and re.split, with practical examples and usage notes.</description>
    </item>
    <item>
      <title>Python Script to Query Recently Expired Domains</title>
      <link>https://www.bobobk.com/en/731.html</link>
      <pubDate>Tue, 22 Sep 2020 12:02:10 +0800</pubDate>
      <guid>https://www.bobobk.com/en/731.html</guid>
      <description>This article shows how to inspect Aliyun&amp;rsquo;s domain-reserve requests with Python and automatically collect candidate lists of recently expired .com domains for later manual review and registration.</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>This article explains what logic is, how categorical syllogisms work, and how to quickly spot common logical fallacies such as ad hominem, circular reasoning, straw man arguments, and hasty generalization.</description>
    </item>
    <item>
      <title>Python3 Solution to LeetCode Medium Problem 468: Validate IP Address</title>
      <link>https://www.bobobk.com/en/671.html</link>
      <pubDate>Wed, 29 Jul 2020 09:54:36 +0800</pubDate>
      <guid>https://www.bobobk.com/en/671.html</guid>
      <description>This guide explains how to solve LeetCode 468 in Python by combining the &lt;code&gt;ipaddress&lt;/code&gt; module with the stricter problem-specific rules for IPv4 and IPv6.</description>
    </item>
    <item>
      <title>How to Properly Make Venn Diagrams Using Python Packages</title>
      <link>https://www.bobobk.com/en/523.html</link>
      <pubDate>Wed, 08 Jul 2020 10:06:56 +0800</pubDate>
      <guid>https://www.bobobk.com/en/523.html</guid>
      <description>In Venn diagrams of two sets, there can be two (or more) overlapping circles representing sets of different sizes, but the circles are the same size. Actually, the circles should be proportional to the size of the sets, and the overlapping area should also be proportional to the data overlap.</description>
    </item>
    <item>
      <title>Calculating the Gini Coefficient and Plotting the Lorenz Curve with matplotlib</title>
      <link>https://www.bobobk.com/en/521.html</link>
      <pubDate>Sun, 31 May 2020 19:22:50 +0800</pubDate>
      <guid>https://www.bobobk.com/en/521.html</guid>
      <description>The Gini coefficient and Lorenz curve are widely used to represent data inequality, especially wealth inequality. However, currently in Python, there isn&amp;rsquo;t a very good function to directly plot the Lorenz curve. Since the current project requires it, this article records how to use numpy, pandas, matplotlib, and other packages to calculate the Gini coefficient and plot the Lorenz curve for practical use.</description>
    </item>
    <item>
      <title>Bayesian Theory and Practical Python Applications</title>
      <link>https://www.bobobk.com/en/823.html</link>
      <pubDate>Sun, 31 May 2020 11:58:57 +0800</pubDate>
      <guid>https://www.bobobk.com/en/823.html</guid>
      <description>Bayesian theory provides a principled method for calculating conditional probabilities. With it, we can easily compute conditional probabilities for events where intuition often fails.</description>
    </item>
    <item>
      <title>Fetching Stock Data Using Python&#39;s yfinance Package</title>
      <link>https://www.bobobk.com/en/512.html</link>
      <pubDate>Sat, 09 May 2020 08:54:26 +0800</pubDate>
      <guid>https://www.bobobk.com/en/512.html</guid>
      <description>Historical stock data is a very important kind of time series data, playing a significant role in data science. Let&amp;rsquo;s start learning how to handle time series data, preparing for future stock prediction and analysis.</description>
    </item>
    <item>
      <title>Using folium to Draw a COVID-19 Pandemic Map</title>
      <link>https://www.bobobk.com/en/624.html</link>
      <pubDate>Sun, 03 May 2020 08:28:47 +0800</pubDate>
      <guid>https://www.bobobk.com/en/624.html</guid>
      <description>This guide shows how to use Python &lt;code&gt;folium&lt;/code&gt; to build a global choropleth map from public COVID-19 data, including WHO data loading, country-code mapping, and log-based styling for better readability.</description>
    </item>
    <item>
      <title>Mounting Oracle Object Storage using s3fs-fuse</title>
      <link>https://www.bobobk.com/en/724.html</link>
      <pubDate>Fri, 01 May 2020 08:51:28 +0800</pubDate>
      <guid>https://www.bobobk.com/en/724.html</guid>
      <description>This guide shows how to mount Oracle Object Storage on Linux with s3fs-fuse, including namespace and region lookup, credential setup, the mount command, and a simple post-mount verification step.</description>
    </item>
    <item>
      <title>Efficient Ways to Check If a List or Tuple Is Empty in Python</title>
      <link>https://www.bobobk.com/en/814.html</link>
      <pubDate>Tue, 28 Apr 2020 07:26:37 +0800</pubDate>
      <guid>https://www.bobobk.com/en/814.html</guid>
      <description>In Python, to check whether an array or tuple is empty, there are three methods: comparing with an empty list, checking the length, and using an if statement.</description>
    </item>
    <item>
      <title>Deploying a Flask Docker App Using Okteto’s Free Container</title>
      <link>https://www.bobobk.com/en/810.html</link>
      <pubDate>Mon, 27 Apr 2020 10:04:37 +0800</pubDate>
      <guid>https://www.bobobk.com/en/810.html</guid>
      <description>I just saw a post on the forum about Okteto&amp;rsquo;s free containers, and since I hadn&amp;rsquo;t registered before, I decided to deploy my site&amp;rsquo;s Flask app using Okteto&amp;rsquo;s free container. Okteto&amp;rsquo;s free Kubernetes plan offers generous resources: 4-core CPU, 8GB RAM, 10GB SSD — basically a great VPS for free. Here&amp;rsquo;s how to deploy using Okteto.</description>
    </item>
    <item>
      <title>Confusion Matrix in Machine Learning: TP, TN, FP, FN, Precision, and Recall</title>
      <link>https://www.bobobk.com/en/932.html</link>
      <pubDate>Sun, 26 Apr 2020 20:30:36 +0800</pubDate>
      <guid>https://www.bobobk.com/en/932.html</guid>
      <description>This article explains the confusion matrix in machine learning classification, clarifies TP, TN, FP, and FN, and shows how to calculate precision, recall, accuracy, and F1.</description>
    </item>
    <item>
      <title>Compiling Custom LEDE Firmware for K2 Router Using GitHub Actions</title>
      <link>https://www.bobobk.com/en/562.html</link>
      <pubDate>Mon, 16 Mar 2020 13:37:38 +0800</pubDate>
      <guid>https://www.bobobk.com/en/562.html</guid>
      <description>I’ve been using LEDE OpenWRT firmware as my router’s firmware. Due to version updates, some software is missing in older versions, so I decided to compile a custom firmware containing only the needed software for my Phicomm K2 router.</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>Use Python to set image background color to transparent</title>
      <link>https://www.bobobk.com/en/421.html</link>
      <pubDate>Sun, 12 Jan 2020 16:10:01 +0800</pubDate>
      <guid>https://www.bobobk.com/en/421.html</guid>
      <description>Since the original logo has a white background, and we need to change the white background to transparent, here we use the versatile Python tool for image conversion, specifically the pillow package’s Image.</description>
    </item>
    <item>
      <title>Application of Python Implementation of Gradient Descent in Practice</title>
      <link>https://www.bobobk.com/en/648.html</link>
      <pubDate>Wed, 08 Jan 2020 14:04:06 +0800</pubDate>
      <guid>https://www.bobobk.com/en/648.html</guid>
      <description>This tutorial uses a simple quadratic function to explain the core idea of gradient descent, including the gradient direction, learning rate, stopping condition, and a step-by-step Python implementation.</description>
    </item>
    <item>
      <title>Mining Monero on MinerGate Pool Using CPUMiner-Multi on CentOS7</title>
      <link>https://www.bobobk.com/en/973.html</link>
      <pubDate>Tue, 07 Jan 2020 11:22:10 +0800</pubDate>
      <guid>https://www.bobobk.com/en/973.html</guid>
      <description>Too many idle servers collecting dust. Here is an option to make use of idle VPS. Today I will teach you how to use CPUMiner-Multi on CentOS for mining and earn some cryptocurrency. Monero is currently the most profitable cryptocurrency, so we choose Monero.</description>
    </item>
    <item>
      <title>git push Rejected: How to Fix &#39;Remote Repository Contains Commits Not Present Locally&#39;</title>
      <link>https://www.bobobk.com/en/937.html</link>
      <pubDate>Mon, 06 Jan 2020 15:58:15 +0800</pubDate>
      <guid>https://www.bobobk.com/en/937.html</guid>
      <description>This article explains why git push is rejected with a “remote contains work that you do not have locally” or “fetch first” message, and shows a practical way to fix the common non-fast-forward error with git pull &amp;ndash;rebase.</description>
    </item>
    <item>
      <title>Decision Trees in Machine Learning and Python Examples</title>
      <link>https://www.bobobk.com/en/912.html</link>
      <pubDate>Sat, 04 Jan 2020 10:49:02 +0800</pubDate>
      <guid>https://www.bobobk.com/en/912.html</guid>
      <description>A tree in real life has many branches and leaves. In fact, the concept of trees is widely used in machine learning, covering classification and regression. In decision analysis, decision trees are used to visually represent and make decisions. As the name implies, a decision tree is a tree-shaped decision model.</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>The Mathematical Principles Behind PCA and Python Example Demonstration</title>
      <link>https://www.bobobk.com/en/811.html</link>
      <pubDate>Fri, 03 Jan 2020 14:35:46 +0800</pubDate>
      <guid>https://www.bobobk.com/en/811.html</guid>
      <description>This article introduces a very important dimensionality reduction method in machine learning—Principal Component Analysis.</description>
    </item>
    <item>
      <title>Explanation of bit, byte, Bps, bps, Gbps, pps, and Other Network Units</title>
      <link>https://www.bobobk.com/en/653.html</link>
      <pubDate>Thu, 02 Jan 2020 15:01:36 +0800</pubDate>
      <guid>https://www.bobobk.com/en/653.html</guid>
      <description>This guide explains the difference between bit, Byte, bps, Bps, Gbps, and pps, with practical conversion rules for bandwidth, download speed, and switch throughput.</description>
    </item>
    <item>
      <title>Statistical Skew Distributions Reveal Statistical Traps in Life</title>
      <link>https://www.bobobk.com/en/638.html</link>
      <pubDate>Fri, 27 Dec 2019 16:06:04 +0800</pubDate>
      <guid>https://www.bobobk.com/en/638.html</guid>
      <description>This article shows how skewed distributions can make the mean and the median tell very different stories, and why that difference often creates misleading “above average” claims in real life.</description>
    </item>
    <item>
      <title>Command-line UI tool for monitoring computer CPU: s-tui</title>
      <link>https://www.bobobk.com/en/615.html</link>
      <pubDate>Mon, 23 Dec 2019 14:26:01 +0800</pubDate>
      <guid>https://www.bobobk.com/en/615.html</guid>
      <description>s-tui is a free and open-source command-line UI tool for monitoring computer CPU. It can monitor CPU temperature, frequency, etc. in real-time and display it graphically. This is a Python tool that can be installed via pip, but requires root permissions. It can be used via SSH login to monitor CPU status graphically.</description>
    </item>
    <item>
      <title>Installing ffmpeg on CentOS 7 and Streaming Movies on Douyu</title>
      <link>https://www.bobobk.com/en/557.html</link>
      <pubDate>Mon, 09 Dec 2019 17:39:34 +0800</pubDate>
      <guid>https://www.bobobk.com/en/557.html</guid>
      <description>Getting back on track, today&amp;rsquo;s tutorial by Chunjiang Muker shows how to automatically stream Douyu live on CentOS 7 to achieve 24/7 uninterrupted streaming.</description>
    </item>
    <item>
      <title>How to Use Tongji University Public Mirror for CentOS</title>
      <link>https://www.bobobk.com/en/556.html</link>
      <pubDate>Sun, 08 Dec 2019 20:21:22 +0800</pubDate>
      <guid>https://www.bobobk.com/en/556.html</guid>
      <description>A few days ago on WeChat, I discovered that Tongji University actually has its own open source software mirror site. Our lab servers are still using Alibaba Cloud&amp;rsquo;s CentOS 7 mirror. Wouldn&amp;rsquo;t it be much faster if we switched to the university&amp;rsquo;s mirror? So how to change CentOS 7 public repo to Tongji University&amp;rsquo;s mirror?</description>
    </item>
    <item>
      <title>Predicting Virmach Black Friday VPS Prices Using sklearn Linear Regression and Alerts</title>
      <link>https://www.bobobk.com/en/480.html</link>
      <pubDate>Wed, 04 Dec 2019 20:14:26 +0800</pubDate>
      <guid>https://www.bobobk.com/en/480.html</guid>
      <description>Virmach&amp;rsquo;s Black Friday machines appear and disappear rapidly. For hosting enthusiasts, constantly checking current VPS prices and deciding whether to buy is troublesome. This article lists Black Friday machine configurations using sklearn and predicts VPS prices with machine learning to alert users if prices are cheap.</description>
    </item>
    <item>
      <title>VPS Performance and Network One-Click Test Script</title>
      <link>https://www.bobobk.com/en/466.html</link>
      <pubDate>Mon, 02 Dec 2019 09:04:01 +0800</pubDate>
      <guid>https://www.bobobk.com/en/466.html</guid>
      <description>During the recent Black Friday sales, I grabbed a special machine from Virmach, so I thought of testing its performance by running some VPS performance and network tests since the machine looks pretty good.</description>
    </item>
    <item>
      <title>Using find and sed to Batch Replace Strings in Text</title>
      <link>https://www.bobobk.com/en/458.html</link>
      <pubDate>Sun, 24 Nov 2019 16:11:25 +0000</pubDate>
      <guid>https://www.bobobk.com/en/458.html</guid>
      <description>How to batch replace strings in Linux? At first, I thought about using sed with -r or some iterative method, but found sed doesn&amp;rsquo;t support iteration parameters. So, I use find to get files and sed to replace strings.</description>
    </item>
    <item>
      <title>Manually Create Custom System Service on CentOS7</title>
      <link>https://www.bobobk.com/en/457.html</link>
      <pubDate>Sun, 17 Nov 2019 16:11:25 +0000</pubDate>
      <guid>https://www.bobobk.com/en/457.html</guid>
      <description>During Linux system development, sometimes your program might crash or be stopped. To keep it running continuously, adding the program to the service list is a very good practice.</description>
    </item>
    <item>
      <title>Solving Expert-Level Sudoku Puzzles Quickly Using Python&#39;s Backtracking Algorithm</title>
      <link>https://www.bobobk.com/en/756.html</link>
      <pubDate>Mon, 11 Nov 2019 16:11:25 +0000</pubDate>
      <guid>https://www.bobobk.com/en/756.html</guid>
      <description>This article explains how to solve a 9x9 Sudoku puzzle in Python with backtracking, including board representation, empty-cell search, candidate filtering, validity checks, and recursive backtracking.</description>
    </item>
    <item>
      <title>Reducing /home partition size and increasing /root space in CentOS 8</title>
      <link>https://www.bobobk.com/en/745.html</link>
      <pubDate>Sat, 02 Nov 2019 16:11:25 +0000</pubDate>
      <guid>https://www.bobobk.com/en/745.html</guid>
      <description>This guide shows how to shrink &lt;code&gt;/home&lt;/code&gt; and grow &lt;code&gt;/root&lt;/code&gt; on CentOS 8 with LVM, with practical notes on backup, filesystem expansion, and the final &lt;code&gt;/etc/fstab&lt;/code&gt; check after recreating &lt;code&gt;/home&lt;/code&gt;.</description>
    </item>
    <item>
      <title>Configuring IPv6 Passthrough for Padavan Router to Enable IPv6 for All Internal Hosts</title>
      <link>https://www.bobobk.com/en/743.html</link>
      <pubDate>Fri, 01 Nov 2019 00:00:00 +0000</pubDate>
      <guid>https://www.bobobk.com/en/743.html</guid>
      <description>This guide shows how to enable IPv6 passthrough on a K2 router running Padavan firmware, including WAN IPv6 settings, the startup script, and quick checks on the client side.</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>This light post collects a few classic 1024 Programmer&amp;rsquo;s Day jokes and one-liners, while also explaining why 1024 became such a recognizable symbol in programmer culture.</description>
    </item>
    <item>
      <title>Using requests and multiprocessing for multi-threaded brute-force cracking of default lnmp mysql password</title>
      <link>https://www.bobobk.com/en/739.html</link>
      <pubDate>Wed, 23 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://www.bobobk.com/en/739.html</guid>
      <description>My blog used the lnmp program to build the web environment, but when I needed to use mysql, I found that the lnmp installation log file was missing and the mysql root password was forgotten. I remember that the lnmp was installed by pressing Enter all the way, and the default lnmp password is lnmp.org# plus 5 random numbers, with only 100,000 possibilities. In this case, brute-forcing 100,000 times will definitely find the password.</description>
    </item>
    <item>
      <title>Deploying an SSH Honeypot with Docker to Record SSH Login Passwords</title>
      <link>https://www.bobobk.com/en/613.html</link>
      <pubDate>Mon, 21 Oct 2019 16:11:25 +0000</pubDate>
      <guid>https://www.bobobk.com/en/613.html</guid>
      <description>This guide shows how to move the real SSH service to a new port and deploy a Docker-based SSH honeypot on port 22 to collect brute-force logs for defensive analysis.</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>This guide shows how to prepare Oracle Cloud free-instance parameters, configure OCI CLI, and use scripts to retry VM or ARM instance creation when popular regions are capacity-constrained.</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 guide shows how to install TigerVNC and a desktop environment on CentOS 7 running on Alibaba Cloud ECS, then verify the VNC service and open only the required security-group rule.</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>10 Tips to Improve Your Python Data Analysis Skills</title>
      <link>https://www.bobobk.com/en/385.html</link>
      <pubDate>Mon, 08 Jul 2019 04:34:47 +0000</pubDate>
      <guid>https://www.bobobk.com/en/385.html</guid>
      <description>This article collects 10 practical tips for Python data analysis and Jupyter Notebook workflows, including dataset profiling, interactive plotting, notebook magics, debugging, and a few time-saving shortcuts.</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>This guide shows how to enable IPv6 on Alibaba Cloud ECS with Tunnelbroker, including the kernel settings, tunnel setup, connectivity checks, and the Nginx listener changes required to serve traffic over IPv6.</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>Serialization and Deserialization in Python</title>
      <link>https://www.bobobk.com/en/361.html</link>
      <pubDate>Mon, 01 Jul 2019 10:36:01 +0000</pubDate>
      <guid>https://www.bobobk.com/en/361.html</guid>
      <description>This article explains the basics of Python serialization and deserialization with &lt;code&gt;pickle&lt;/code&gt;, including file-based examples, &lt;code&gt;dumps()&lt;/code&gt; and &lt;code&gt;loads()&lt;/code&gt;, and one important safety warning for real-world use.</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>This article collects several practical Python tips for daily coding, including dictionary and set comprehensions, &lt;code&gt;Counter&lt;/code&gt;, pretty JSON output, and a lightweight XML-RPC example.</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>This article introduces inheritance, polymorphism, &lt;code&gt;isinstance()&lt;/code&gt;, and duck typing in Python with a simple &lt;code&gt;Animal&lt;/code&gt; and &lt;code&gt;Dog&lt;/code&gt; example.</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>This article explains Python process pools, thread pools, and coroutines from a practical concurrency angle, with examples of synchronous calls, asynchronous calls, and callback usage.</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>This article summarizes common &lt;code&gt;zipfile&lt;/code&gt; usage in Python, including how to read ZIP archives, inspect &lt;code&gt;ZipInfo&lt;/code&gt;, extract files, write archives, and build ZIP files in memory.</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>This article summarizes common Python 3 &lt;code&gt;print()&lt;/code&gt; usage, including basic output, old-style formatting examples, floating-point formatting, and output control with &lt;code&gt;end&lt;/code&gt; and &lt;code&gt;sep&lt;/code&gt;.</description>
    </item>
    <item>
      <title>Python Data Visualization - The Post-2000 Gaokao Generation</title>
      <link>https://www.bobobk.com/en/320.html</link>
      <pubDate>Sat, 01 Jun 2019 17:50:52 +0000</pubDate>
      <guid>https://www.bobobk.com/en/320.html</guid>
      <description>This tutorial uses Gaokao exam data to build bar charts, line charts, and a China map with Python, giving a practical starter workflow for &lt;code&gt;charts&lt;/code&gt; and &lt;code&gt;pyecharts&lt;/code&gt;.</description>
    </item>
    <item>
      <title>Parallelism in One Line of Python Code</title>
      <link>https://www.bobobk.com/en/318.html</link>
      <pubDate>Sat, 01 Jun 2019 17:47:59 +0000</pubDate>
      <guid>https://www.bobobk.com/en/318.html</guid>
      <description>This article shows how Python &lt;code&gt;map&lt;/code&gt; combined with thread or process pools can make simple parallelism much lighter for everyday scripts, especially with &lt;code&gt;multiprocessing.dummy&lt;/code&gt; for IO-bound work.</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>This article shows how to terminate a specific GNU Screen session from outside the session and clarifies the difference between detaching from a session and actually ending it.</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>This guide shows how to fix &lt;code&gt;yum update -y&lt;/code&gt; when Linux reports &lt;code&gt;rpmdb open failed&lt;/code&gt; or runs out of disk space, including rebuilding the RPM database and cleaning old kernels.</description>
    </item>
    <item>
      <title>Decoding Xunlei Thunder Links: Python and JavaScript Conversion Examples</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>This article explains the conversion rule between ordinary URLs and &lt;code&gt;thunder://&lt;/code&gt; Xunlei links, and gives both Python and JavaScript examples for encoding and decoding.</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>This article explains why Conda commands often fail inside ordinary Windows batch files and shows a practical &lt;code&gt;activate.bat&lt;/code&gt; pattern you can reuse.</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>This article introduces how Numba can speed up Python code with JIT compilation and gives a practical overview of where &lt;code&gt;@jit&lt;/code&gt;, &lt;code&gt;@njit&lt;/code&gt;, &lt;code&gt;@vectorize&lt;/code&gt;, and GPU-related features are most useful.</description>
    </item>
    <item>
      <title>Longest Palindromic Substring Algorithm - Manacher</title>
      <link>https://www.bobobk.com/en/291.html</link>
      <pubDate>Thu, 28 Mar 2019 07:17:29 +0000</pubDate>
      <guid>https://www.bobobk.com/en/291.html</guid>
      <description>This article explains Manacher&amp;rsquo;s algorithm for the longest palindromic substring problem, including the transformed string idea and the &lt;code&gt;Len&lt;/code&gt; array that allow it to run in $O(n)$ time.</description>
    </item>
    <item>
      <title>Finding Common Values in Two Python Lists</title>
      <link>https://www.bobobk.com/en/289.html</link>
      <pubDate>Fri, 08 Mar 2019 08:23:32 +0000</pubDate>
      <guid>https://www.bobobk.com/en/289.html</guid>
      <description>This article compares several common ways to find shared values between two Python lists and explains which methods remove duplicates and which ones preserve list order.</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>This article explains binary representation and common bitwise operations in Python, including left shift, right shift, AND, OR, XOR, and NOT, with a practical example based on Hamming distance.</description>
    </item>
    <item>
      <title>Python Implementation of Classic Sorting Algorithms (1)</title>
      <link>https://www.bobobk.com/en/275.html</link>
      <pubDate>Tue, 29 Jan 2019 07:29:52 +0000</pubDate>
      <guid>https://www.bobobk.com/en/275.html</guid>
      <description>This article introduces five classic sorting algorithms in Python, including bubble sort, selection sort, insertion sort, shell sort, and merge sort, with code examples and complexity-oriented explanations for beginners.</description>
    </item>
    <item>
      <title>Faceswap Training Resource Acquisition and Processing</title>
      <link>https://www.bobobk.com/en/271.html</link>
      <pubDate>Wed, 23 Jan 2019 14:19:38 +0000</pubDate>
      <guid>https://www.bobobk.com/en/271.html</guid>
      <description>Following the previous article, &amp;ldquo;Faceswap Deep Learning AI for Video Face Swapping Explained,&amp;rdquo; everyone has learned how to perform face replacement in videos using AI through model training.</description>
    </item>
    <item>
      <title>Detailed Examples of Seaborn Plotting Kernel Density Curves</title>
      <link>https://www.bobobk.com/en/263.html</link>
      <pubDate>Sun, 20 Jan 2019 11:41:58 +0000</pubDate>
      <guid>https://www.bobobk.com/en/263.html</guid>
      <description>&lt;p&gt;In a frequency distribution histogram, when the sample size is sufficiently enlarged to its limit, and the bin width is infinitely shortened, the step-like broken line in the frequency histogram will evolve into a smooth curve. This curve is called the density distribution curve of the population.&lt;/p&gt;&#xA;&lt;p&gt;This article walks through how to use Seaborn with the Iris dataset in Pandas to plot several common kinds of kernel density curves.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-basic-density-curve&#34;&gt;1. Basic Density Curve&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:#f92672&#34;&gt;import&lt;/span&gt; seaborn &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; sns&#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; pandas &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; pd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sns&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;set(color_codes&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sns&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;set_style(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;white&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    df &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pd&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;read_csv(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;iris.csv&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sns&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;kdeplot(df[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;sepal_width&amp;#39;&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/01/basic_kdeplot.webp&#34; alt=&#34;‘Detailed Examples of Seaborn Plotting Kernel Density Curves’&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;To plot a kernel density curve using Seaborn, you only need to use &lt;code&gt;kdeplot&lt;/code&gt;. Note that a density curve only requires one variable; here we choose the &lt;code&gt;sepal_width&lt;/code&gt; column.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;2-density-curve-with-shading&#34;&gt;2. Density Curve with Shading&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:#f92672&#34;&gt;import&lt;/span&gt; seaborn &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; sns&#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; pandas &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; pd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sns&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;set(color_codes&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sns&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;set_style(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;white&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    df &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pd&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;read_csv(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;iris.csv&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sns&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;kdeplot(df[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;sepal_width&amp;#39;&lt;/span&gt;], fill&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&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/01/shadow_kdeplot.webp&#34; alt=&#34;‘Detailed Examples of Seaborn Plotting Kernel Density Curves’&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Detailed Explanation of Faceswap Deep Learning AI for Video Face Swapping</title>
      <link>https://www.bobobk.com/en/258.html</link>
      <pubDate>Fri, 18 Jan 2019 09:29:15 +0000</pubDate>
      <guid>https://www.bobobk.com/en/258.html</guid>
      <description>Chunjing Muke will introduce the super popular black technology application deepfake, an app that achieves face swapping in images and videos.</description>
    </item>
    <item>
      <title>Drawing a Stunning &#34;Dream of the Red Chamber&#34; Word Cloud with Python 3</title>
      <link>https://www.bobobk.com/en/252.html</link>
      <pubDate>Thu, 17 Jan 2019 03:21:06 +0000</pubDate>
      <guid>https://www.bobobk.com/en/252.html</guid>
      <description>&lt;p&gt;Word clouds, which I&amp;rsquo;m sure you&amp;rsquo;ve all seen, are created using &lt;strong&gt;wordcloud&lt;/strong&gt;, a famous Python library. This article will detail how to use &lt;strong&gt;wordcloud&lt;/strong&gt; to create a word cloud for &amp;ldquo;Dream of the Red Chamber,&amp;rdquo; one of China&amp;rsquo;s Four Great Classical Novels.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;1-preparation&#34;&gt;1. Preparation&lt;/h1&gt;&#xA;&lt;p&gt;This involves three parts:&lt;/p&gt;&#xA;&lt;h4 id=&#34;1-install-wordcloud-and-jieba&#34;&gt;1. Install &lt;strong&gt;wordcloud&lt;/strong&gt; and &lt;strong&gt;jieba&lt;/strong&gt;&lt;/h4&gt;&#xA;&lt;p&gt;You can install them with &lt;code&gt;pip install wordcloud&lt;/code&gt; and &lt;code&gt;pip install jieba&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;2-prepare-a-chinese-font-file&#34;&gt;2. Prepare a Chinese font file&lt;/h4&gt;&#xA;&lt;h4 id=&#34;3-prepare-the-text-file&#34;&gt;3. Prepare the text file&lt;/h4&gt;&#xA;&lt;p&gt;The &lt;code&gt;.txt&lt;/code&gt; file and the font file are bundled so this example is easier to reproduce.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;2-drawing-the-dream-of-the-red-chamber-word-cloud&#34;&gt;2. Drawing the &amp;ldquo;Dream of the Red Chamber&amp;rdquo; Word Cloud&lt;/h1&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s the code directly:&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;from&lt;/span&gt; wordcloud &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; WordCloud&#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; jieba&#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; matplotlib.pyplot &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; plt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    text &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;join(jieba&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;cut(open(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;红楼梦.txt&amp;#34;&lt;/span&gt;)&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;    wordcloud &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; WordCloud(font_path&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;kaibold.ttf&amp;#34;&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;generate(text)&#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;# Display the generated image:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    plt&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;imshow(wordcloud, interpolation&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;bilinear&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    plt&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;axis(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;off&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    plt&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;margins(x&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, y&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;    plt&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;show()&#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/01/wordcloud_raw.webp&#34; alt=&#34;《Drawing a Stunning “Dream of the Red Chamber” Word Cloud with Python 3》&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python Generators and yield</title>
      <link>https://www.bobobk.com/en/248.html</link>
      <pubDate>Tue, 15 Jan 2019 12:26:07 +0000</pubDate>
      <guid>https://www.bobobk.com/en/248.html</guid>
      <description>This article explains Python generators and &lt;code&gt;yield&lt;/code&gt; with practical examples, including how generator execution pauses and resumes, when generators are useful, and a few common mistakes beginners hit.</description>
    </item>
    <item>
      <title>TypeError: ufunc &#39;isnan&#39; not supported for the input types - Solution</title>
      <link>https://www.bobobk.com/en/245.html</link>
      <pubDate>Mon, 14 Jan 2019 12:42:00 +0000</pubDate>
      <guid>https://www.bobobk.com/en/245.html</guid>
      <description>&lt;p&gt;Today, while using Python&amp;rsquo;s &lt;strong&gt;Seaborn&lt;/strong&gt; to plot a heatmap (clustermap), I kept encountering this error. My data seemed perfectly fine, and a Google search didn&amp;rsquo;t yield any good solutions. After some exploration, I&amp;rsquo;m sharing the final solution here.&lt;/p&gt;&#xA;&lt;p&gt;Although the error appears inside Seaborn, the more common root cause is that the DataFrame being passed into plotting has become &lt;code&gt;object&lt;/code&gt; dtype instead of a numeric dtype.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-generating-the-dataframe&#34;&gt;1. Generating the DataFrame&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:#f92672&#34;&gt;import&lt;/span&gt; pandas &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; pd&#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; numpy &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; np&#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; matplotlib.pyplot &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; plt&#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; seaborn &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; clustermap&#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; seaborn &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; sns; sns&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;set(color_codes&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    df &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pd&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;DataFrame([[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;b&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;c&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;d&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;e&amp;#34;&lt;/span&gt;,&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;f&amp;#34;&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;,&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;6&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;,&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;7&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;,&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;]],  columns&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;list(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;ABCDEF&amp;#39;&lt;/span&gt;))&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;T&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    df&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    g &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; sns&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;clustermap(df&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;iloc[:,&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;:],cmap&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;PiYG&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After generating and transposing the &lt;strong&gt;DataFrame&lt;/strong&gt;, a &lt;code&gt;TypeError&lt;/code&gt; occurs: &lt;code&gt;TypeError: ufunc &#39;isnan&#39; not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule &amp;quot;safe&amp;quot;&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.bobobk.com/wp-content/uploads/2019/01/isnan_error.webp&#34; alt=&#34;《TypeError: ufunc ‘isnan’ not supported for the input types solution》&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python Implementation for Kugou Music MP3 Download</title>
      <link>https://www.bobobk.com/en/234.html</link>
      <pubDate>Sun, 13 Jan 2019 14:45:59 +0000</pubDate>
      <guid>https://www.bobobk.com/en/234.html</guid>
      <description>&lt;p&gt;After implementing &lt;a href=&#34;https://www.bobobk.com/216.html&#34;&gt;python for Qianqian Music mp3 download&lt;/a&gt;, some users found that many songs couldn&amp;rsquo;t be searched on Qianqian Music. So today, Chunjian Muke extended the download functionality to Kugou Music, with source code provided.&lt;/p&gt;&#xA;&lt;p&gt;Using the same approach, first search for a song directly on the Kugou official website. Then, open the network monitor in Google Chrome and search for the same keyword again. You&amp;rsquo;ll then be able to find the API information (Note: It&amp;rsquo;s best to view the network requests during the second search to filter out unnecessary information).&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-analyzing-search-api-information&#34;&gt;1. Analyzing Search API Information&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.bobobk.com/wp-content/uploads/2019/01/kugou_search.webp&#34; alt=&#34;《Python Implementation for Kugou Music MP3 Download》&#34;&gt;&#xA;With only 4 network requests, it&amp;rsquo;s easy to identify that the first request genuinely returns song information, so we can construct this request.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.bobobk.com/wp-content/uploads/2019/01/kugou_search_response.webp&#34; alt=&#34;《Python Implementation for Kugou Music MP3 Download》&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Drawing NetworkX Network Graphs in python3</title>
      <link>https://www.bobobk.com/en/229.html</link>
      <pubDate>Sat, 12 Jan 2019 01:58:34 +0000</pubDate>
      <guid>https://www.bobobk.com/en/229.html</guid>
      <description>This tutorial shows how to draw basic network graphs with Python &lt;code&gt;NetworkX&lt;/code&gt;, style edges by weight, and adjust background appearance for cleaner relationship visualizations.</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>This article shows the practical difference between Matplotlib &lt;code&gt;hlines&lt;/code&gt;, &lt;code&gt;vlines&lt;/code&gt;, &lt;code&gt;axhline&lt;/code&gt;, and &lt;code&gt;axvline&lt;/code&gt;, so you can add horizontal or vertical reference lines to plots more reliably.</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;In practice, this kind of problem usually has two steps: first confirm whether Linux can still see the disk device, then decide whether you can mount it directly or need to rescan the bus so the device appears again.&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, so I can identify it as &lt;code&gt;/dev/sda1&lt;/code&gt;. Then I can mount it with &lt;code&gt;mount&lt;/code&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Drawing Violin Plots with Seaborn</title>
      <link>https://www.bobobk.com/en/206.html</link>
      <pubDate>Fri, 04 Jan 2019 12:02:11 +0000</pubDate>
      <guid>https://www.bobobk.com/en/206.html</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;A violin plot is used to display the distribution and probability density of multiple data groups. Similar to a box plot, it offers a better representation of data density. Violin plots are particularly useful when dealing with very large datasets that are difficult to display individually. Python&amp;rsquo;s Seaborn package makes it very convenient to create violin plots.&lt;/p&gt;&#xA;&lt;p&gt;If you only need the median and quartiles, a box plot is often enough. If you also want to see whether the data looks skewed, wide, narrow, or even bimodal, a violin plot is usually more informative.&lt;/p&gt;&#xA;&lt;h2 id=&#34;parameters&#34;&gt;Parameters&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.bobobk.com/wp-content/uploads/2019/01/violin.webp&#34; alt=&#34;Drawing Violin Plots with Seaborn&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The parameters corresponding to each position in a violin plot are shown above. The middle line represents the box plot data, specifically the 25th, 50th (median), and 75th percentiles. The thin lines indicate the 95% confidence interval.&lt;/p&gt;&#xA;&lt;h2 id=&#34;drawing-violin-plots-with-seaborn&#34;&gt;Drawing Violin Plots with Seaborn&lt;/h2&gt;&#xA;&lt;h3 id=&#34;single-variable-data&#34;&gt;Single Variable Data&lt;/h3&gt;&#xA;&lt;p&gt;While a box plot would suffice for a single variable, a violin plot can certainly be used as well:&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;The important point is that this does not mean “turning security off.” It means replacing password-based login with SSH key-based authentication, which is usually a better operational choice when your private key is handled properly.&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;</description>
    </item>
    <item>
      <title>The difference between shallow copy and deepcopy in Python</title>
      <link>https://www.bobobk.com/en/200.html</link>
      <pubDate>Sat, 29 Dec 2018 02:22:22 +0000</pubDate>
      <guid>https://www.bobobk.com/en/200.html</guid>
      <description>&lt;p&gt;In Python, copying objects is common, and a lot of “why did both variables change?” bugs come from mixing up three different operations: assignment, shallow copy, and deep copy.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.bobobk.com/wp-content/uploads/2018/12/ctr_v.webp&#34; alt=&#34;“The difference between shadowcopy and deepcopy in python”&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Among assignment (&lt;code&gt;=&lt;/code&gt;), shallow copy (&lt;code&gt;copy&lt;/code&gt;), and deep copy (&lt;code&gt;deepcopy&lt;/code&gt;), the most confusing part is usually not assignment vs. copy, but whether a shallow copy still shares nested mutable objects.&lt;/p&gt;&#xA;&lt;p&gt;Assignment does not copy an object. It only binds another variable name to the same object. Because of that, changes seen through one variable are still changes to the same underlying object.&lt;/p&gt;&#xA;&lt;p&gt;A shallow copy duplicates the outer container, but nested mutable objects may still be shared. A deep copy recursively duplicates nested objects too, so it is usually more isolated.&lt;/p&gt;&#xA;&lt;p&gt;A practical rule of thumb is:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use assignment when you only want another name for the same object.&lt;/li&gt;&#xA;&lt;li&gt;Use shallow copy when copying the outer container is enough.&lt;/li&gt;&#xA;&lt;li&gt;Use deep copy when nested lists or dictionaries also need to be independent.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Below is a practical code example illustrating the differences among the three.&lt;/p&gt;</description>
    </item>
    <item>
      <title>python3 requests module usage examples</title>
      <link>https://www.bobobk.com/en/198.html</link>
      <pubDate>Fri, 28 Dec 2018 04:57:52 +0000</pubDate>
      <guid>https://www.bobobk.com/en/198.html</guid>
      <description>This article explains common Python requests usage through examples including GET, POST, headers, authentication, file download, upload, and cookies, with a couple of practical habits that make real scripts more reliable.</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>This article explains Python magic methods through object lifecycle, operator overloading, and &lt;code&gt;__call__&lt;/code&gt; examples, with a beginner-friendly view of what they do and when they are worth implementing.</description>
    </item>
    <item>
      <title>文献下载</title>
      <link>https://www.bobobk.com/en/download_paper/</link>
      <pubDate>Mon, 24 Dec 2018 02:19:31 +0000</pubDate>
      <guid>https://www.bobobk.com/en/download_paper/</guid>
      <description>&lt;p&gt;还在为不会登学校的VPN下载文献或者不知道如何使用sci-hub下载文献吗，这里提供最简单的文献下载服务sci-hub的接口连接。&lt;/p&gt;&#xA;&lt;h2 id=&#34;使用方法&#34;&gt;使用方法&lt;/h2&gt;&#xA;&lt;p&gt;1.找到文献所在杂志对应的页面。&lt;/p&gt;&#xA;&lt;p&gt;比如今天的cell最新文章Tac1-Expressing Neurons in the Periaqueductal Gray Facilitate the Itch-Scratching Cycle via Descending Regulation。到cell上搜索这篇文章。&lt;figure class=&#34;wp-block-image&#34;&gt;&lt;/p&gt;</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>This article introduces the Linux command-line tool boxes, shows how to generate ASCII text borders quickly, and highlights a few practical places where it works well in help output, comments, and terminal UI text.</description>
    </item>
    <item>
      <title>sgRNA接头添加</title>
      <link>https://www.bobobk.com/en/sgrna_jietou/</link>
      <pubDate>Thu, 20 Dec 2018 11:02:59 +0000</pubDate>
      <guid>https://www.bobobk.com/en/sgrna_jietou/</guid>
      <description>&lt;p&gt;此工具是用于设计好的sgRNA的接头添加。&lt;/p&gt;&#xA;&lt;h2 id=&#34;使用方法&#34;&gt;使用方法&lt;/h2&gt;&#xA;&lt;p&gt;1.填写此sgrna名称。后面加好接头后的sgRNA的名字使用的是此处填写的名称。&lt;/p&gt;&#xA;&lt;p&gt;2.添加sgRNA的序列。将用各种工具设计好的sgRNA序列填上。&lt;/p&gt;&#xA;&lt;h3 id=&#34;exe打包&#34;&gt;exe打包&lt;/h3&gt;&#xA;&lt;p&gt;如果flask程序停止的话，也可以直接下载打包好的可执行程序直接按说明运行&lt;/p&gt;&#xA;&lt;p&gt;下载地址：&lt;a href=&#34;http://www.bobobk.com/sg.zip&#34;&gt;sgrna接头程序&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;接头添加&#34;&gt;接头添加&lt;/h2&gt;&#xA;&lt;iframe src=&#34;https://tool.bobobk.com/sgjietou&#34; width=&#34;100%&#34; height=&#34;500&#34; allowfullscreen=&#34;true&#34; webkitallowfullscreen=&#34;true&#34; mozallowfullscreen=&#34;true&#34;&gt;&lt;/iframe&gt;</description>
    </item>
    <item>
      <title>VIP视频解析</title>
      <link>https://www.bobobk.com/en/vip_parse/</link>
      <pubDate>Thu, 20 Dec 2018 02:07:01 +0000</pubDate>
      <guid>https://www.bobobk.com/en/vip_parse/</guid>
      <description>&lt;p&gt;此页面为&lt;a href=&#34;https://www.bobobk.com/81.html&#34;&gt;python获取vip解析网站视频地址&lt;/a&gt; 建立起来的解析网页。&lt;/p&gt;&#xA;&lt;h2 id=&#34;使用方法&#34;&gt;使用方法&lt;/h2&gt;&#xA;&lt;p&gt;1.在下面的输入框内输入需要解析的视频地址，比如https://v.qq.com/x/cover/rpup19lfbuf2skc/z0029e7ieor.html&lt;/p&gt;&#xA;&lt;p&gt;2.点击提交就可以了。&lt;/p&gt;&#xA;&lt;div onload=&#34;onload()&#34;&gt;&#xA;                                &lt;select name=&#34;jx&#34; size=&#34;1&#34; onchange=&#34;fnChange()&#34; class=&#34;form-control&#34;&gt;&#xA;                                    &lt;option value=&#34;https://www.1717yun.com/jx/ty.php?url=&#34; selected=&#34;&#34;&gt;【线路一】&lt;/option&gt;&#xA;                                    &lt;option value=&#34;https://www.ckplayer.vip/jiexi/?url=&#34; selected=&#34;&#34;&gt;【线路二】&lt;/option&gt;&#xA;                                    &lt;option value=&#34;https://jx.618g.com/?url=&#34; selected=&#34;&#34;&gt;【线路三】&lt;/option&gt;&#xA;                                    &lt;!-- &lt;option value=&#34;https://jx.elwtc.com/vip/?url=&#34; selected=&#34;&#34;&gt;【线路四】&lt;/option&gt; --&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;option value=&#34;https://qimihe.com/?url=&#34; selected=&#34;&#34;&gt;【线路四】&lt;/option&gt;&#xA;                                    &lt;option value=&#34;https://jx.quanmingjiexi.com/?url=&#34; selected=&#34;&#34;&gt;【线路五】&lt;/option&gt;&#xA;                                    &lt;option value=&#34;https://z1.m1907.cn/?jx=&#34; selected=&#34;&#34;&gt;【线路六】&lt;/option&gt;&#xA;                                    &lt;option value=&#34;https://api.653520.top/vip/?url=&#34; selected=&#34;&#34;&gt;【线路七】&lt;/option&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;option value=&#34;https://api.jiexi.la/?url=&#34; selected=&#34;&#34;&gt;【线路八】&lt;/option&gt;&#xA;                                    &lt;option value=&#34;https://jx.ab33.top/vip/?url=&#34; selected=&#34;&#34;&gt;【线路九】&lt;/option&gt;&#xA;                                    &lt;option value=&#34;https://www.ckmov.vip/api.php?url=&#34; selected=&#34;&#34;&gt;【线路十】&lt;/option&gt;&#xA;                                    &lt;option value=&#34;https://17kyun.com/api.php?url=&#34; selected=&#34;&#34;&gt;【线路11】&lt;/option&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;option value=&#34;https://parse.123mingren.com/Bei/?url=&#34; selected=&#34;&#34;&gt;【接口12】&lt;/option&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;option value=&#34;https://vip.bljiex.cc/?v=&#34; selected=&#34;&#34;&gt;【接口13】&lt;/option&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;option value=&#34;https://vip.2ktvb.com/player/?url=&#34; selected=&#34;&#34;&gt;【接口14】&lt;/option&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;option value=&#34;https://123.1dior.cn/?url=&#34; selected=&#34;&#34;&gt;【接口15】&lt;/option&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;option value=&#34;https://jx.rdhk.net/?v=&#34; selected=&#34;&#34;&gt;【接口16】&lt;/option&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;option value=&#34;https://jx.xiaolangyun.com/?url=&#34; selected=&#34;&#34;&gt;【接口17】&lt;/option&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;option value=&#34;https://www.nxflv.com/?url=&#34; selected=&#34;&#34;&gt;【接口18】&lt;/option&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;option value=&#34;https://www.33tn.cn/?url=&#34; selected=&#34;&#34;&gt;【接口19】&lt;/option&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;option value=&#34;https://vip.laobandq.com/jiexi.php?url=&#34; selected=&#34;&#34;&gt;【接口20】&lt;/option&gt;&#xA;                                    &lt;option value=&#34;https://jx.parwix.com:4433/player/?url=&#34; selected=&#34;&#34;&gt;【稳定通用】&lt;/option&gt;&#xA;                                    &lt;option value=&#34;https://okjx.cc/?url=&#34; selected=&#34;&#34;&gt;【高速稳定】&lt;/option&gt;&#xA;                                &lt;/select&gt;&#xA;                            &lt;/div&gt;&#xA;&lt;div class=&#34;col-md-6 col-sm-6 col-xs-12&#34;&gt;&#xA;        &lt;input type=&#34;text&#34; name=&#34;vipurl&#34; id=&#34;vipurl&#34; size=88 value=&#34;https://v.youku.com/v_show/id_XNDkwOTIxOTIyNA==.html&#34; class=&#34;form-control&#34;&gt;&#xA;&lt;/div&gt;&#xA; &lt;!-- 视频地址结束 --&gt;&#xA;                        &lt;div class=&#34;col-md-2 col-sm-2 col-xs-6&#34;&gt;&#xA;                          &lt;input type=&#34;button&#34; value=&#34;播放&#34; onclick=&#34;onPlay()&#34; class=&#34;btn btn-success&#34; style=&#34;width: 100%;&#34;&gt;&#xA;                        &lt;/div&gt;&#xA;                            &lt;div class=&#34;col-md-2 col-sm-2 col-xs-6&#34;&gt;&#xA;                                &lt;input type=&#34;button&#34; value=&#34;清除&#34; onclick=&#34;onClear()&#34; class=&#34;btn btn-danger&#34; style=&#34;width: 100%;&#34;&gt;&#xA;                            &lt;/div&gt;&#xA;&lt;script language=&#34;JavaScript&#34;&gt;&#xA;function onload() {&#xA;            var obj = document.getElementById(&#39;jx&#39;);&#xA;        }&#xA;&lt;pre&gt;&lt;code&gt;    function fnChange() {}&#xA;&#xA;    function onClear() {&#xA;        document.getElementById(&amp;quot;vipurl&amp;quot;).value = &amp;quot;&amp;quot;;&#xA;    }&#xA;&#xA;    function onPlay() {&#xA;        var oJK = document.getElementById(&amp;quot;jx&amp;quot;);&#xA;        var sJK = oJK.options[oJK.selectedIndex].value;&#xA;        var sVipUrl = document.getElementById(&amp;quot;vipurl&amp;quot;).value;&#xA;        var oWin = document.getElementById(&amp;quot;play&amp;quot;);&#xA;        if (sVipUrl.length &amp;gt; 0) {&#xA;            oWin.src = sJK + sVipUrl;&#xA;        }&#xA;    }&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;/script&gt;&lt;/p&gt;</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>This article shows how to generate strong random passwords with Python and JavaScript, and explains why security-sensitive cases should prefer &lt;code&gt;secrets&lt;/code&gt; or the browser Web Crypto API instead of ordinary random functions.</description>
    </item>
    <item>
      <title>Kaggle Local Dog Breed Recognition</title>
      <link>https://www.bobobk.com/en/127.html</link>
      <pubDate>Sat, 15 Dec 2018 10:36:29 +0000</pubDate>
      <guid>https://www.bobobk.com/en/127.html</guid>
      <description>This article shows how to run local dog-image prediction with a pretrained ResNet50 model, covering image preprocessing, model loading, prediction decoding, and the files needed for local inference.</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>This guide shows how to use Prism.js for code highlighting in WordPress, including plugin installation, the correct Custom HTML block markup, and quick checks when highlighting does not appear.</description>
    </item>
    <item>
      <title>Introduction to Artificial Neural Networks</title>
      <link>https://www.bobobk.com/en/90.html</link>
      <pubDate>Mon, 10 Dec 2018 05:27:33 +0000</pubDate>
      <guid>https://www.bobobk.com/en/90.html</guid>
      <description>This article gives beginners a quick introduction to artificial neural networks through basic concepts, a house-price prediction example, and a simple overview of common AI application scenarios.</description>
    </item>
    <item>
      <title>Recursively download files python</title>
      <link>https://www.bobobk.com/en/85.html</link>
      <pubDate>Sat, 08 Dec 2018 06:42:32 +0000</pubDate>
      <guid>https://www.bobobk.com/en/85.html</guid>
      <description>This article shows how to use Python and requests to recursively download all files and subdirectories from a directory index page, which is useful for simple website backups or directory mirroring.</description>
    </item>
    <item>
      <title>Python Converts All Site Images to WebP Format</title>
      <link>https://www.bobobk.com/en/78.html</link>
      <pubDate>Tue, 04 Dec 2018 15:32:34 +0000</pubDate>
      <guid>https://www.bobobk.com/en/78.html</guid>
      <description>This guide shows how to use Python and Pillow to convert JPG, JPEG, and PNG images to WebP, including single-image conversion, batch conversion, and a small compatibility note for newer Pillow versions.</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>This article records a legacy Ubuntu 18.04 TensorFlow GPU setup based on Anaconda, CUDA, and cuDNN, with extra notes on version compatibility and quick checks after installation.</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>scrapy crawl subtitle group today&#39;s updated movies - with source code</title>
      <link>https://www.bobobk.com/en/43.html</link>
      <pubDate>Wed, 21 Nov 2018 04:23:53 +0000</pubDate>
      <guid>https://www.bobobk.com/en/43.html</guid>
      <description>Because I like watching American TV shows, and the subtitle group&amp;rsquo;s resources update very quickly, and I have written many scrapy spiders, and I also maintain a small movie site for friends to download, I wondered if I could use a script to realize daily updates and crawling of subtitle group movie resources.</description>
    </item>
    <item>
      <title>Drawing a Circle with Squares Using Turtle</title>
      <link>https://www.bobobk.com/en/39.html</link>
      <pubDate>Mon, 19 Nov 2018 04:38:15 +0000</pubDate>
      <guid>https://www.bobobk.com/en/39.html</guid>
      <description>I recently discovered a very interesting Python drawing library called Turtle. Here, I&amp;rsquo;ll briefly explain the idea behind using the Turtle library to draw a circle with squares.</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>
    <item>
      <title>Drawing the Butterfly Curve with Python</title>
      <link>https://www.bobobk.com/en/24.html</link>
      <pubDate>Wed, 07 Nov 2018 08:03:32 +0000</pubDate>
      <guid>https://www.bobobk.com/en/24.html</guid>
      <description>&lt;p&gt;The butterfly curve, discovered by Temple H. Fay, is a beautiful curve that can be expressed using a polar coordinate function. Because of its elegance, I wanted to use it as my blog&amp;rsquo;s favicon.ico. Here, I&amp;rsquo;ll use Python&amp;rsquo;s &lt;strong&gt;matplotlib.pyplot&lt;/strong&gt; package to draw the desired butterfly curve. First, let&amp;rsquo;s admire the beautiful butterfly curve.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.bobobk.com/wp-content/uploads/2018/11/butter.webp&#34; alt=&#34;butter&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-first-we-need-to-define-the-mathematical-expression-of-the-butterfly-curve&#34;&gt;1. First, We Need to Define the Mathematical Expression of the Butterfly Curve&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://wikimedia.org/api/rest_v1/media/math/render/svg/92e1ec07900777c282b5c379b0877906f4594727&#34; alt=&#34;math&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://wikimedia.org/api/rest_v1/media/math/render/svg/3c9b54f7112ec2abd4125ef9b52aa55a9b8470ea&#34; alt=&#34;math2&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;It can also be expressed using spherical coordinates:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://wikimedia.org/api/rest_v1/media/math/render/svg/5b9bff8d319e4fd55de4eb7685d9aa06b40fcfa9&#34; alt=&#34;math3&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;2-choosing-matplotlibpyplot-as-the-plotting-tool-in-python&#34;&gt;2. Choosing &lt;code&gt;matplotlib.pyplot&lt;/code&gt; as the Plotting Tool in Python&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-first-import-the-necessary-python-packages&#34;&gt;1. First, import the necessary Python packages&lt;/h3&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;import&lt;/span&gt; numpy &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; np&#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; matplotlib.pyplot &lt;span style=&#34;color:#66d9ef&#34;&gt;as&lt;/span&gt; plt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;2-set-the-parameter-values&#34;&gt;2. Set the parameter values&lt;/h3&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;t &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;arange(&lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;12&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;pi, &lt;span style=&#34;color:#ae81ff&#34;&gt;0.01&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;x &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sin(t)&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;(np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;e&lt;span style=&#34;color:#f92672&#34;&gt;**&lt;/span&gt;np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;cos(t) &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;cos(&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;t)&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sin(t&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;12&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;**&lt;/span&gt;&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;y &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;cos(t)&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;(np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;e&lt;span style=&#34;color:#f92672&#34;&gt;**&lt;/span&gt;np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;cos(t) &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;cos(&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;t)&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;np&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;sin(t&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;12&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;**&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;h3 id=&#34;3-according-to-the-formula-use-numpy-functions-with-plt-to-draw-the-required-image&#34;&gt;3. According to the formula, use &lt;code&gt;numpy&lt;/code&gt; functions with &lt;code&gt;plt&lt;/code&gt; to draw the required image&lt;/h3&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;plt&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;figure(figsize&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;plt&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;axis(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;off&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;plt&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;plot(x,y,color&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;blue&amp;#39;&lt;/span&gt;,linewidth &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;2&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:#75715e&#34;&gt;#plt.show()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;plt&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;savefig(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;butter.jpg&amp;#34;&lt;/span&gt;,dpi&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;400&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/2018/12/image-1.webp&#34; alt=&#34;butter_fly&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;4-use-pillow-to-resize-the-image-to-an-appropriate-size-for-a-favicon&#34;&gt;4. Use &lt;code&gt;Pillow&lt;/code&gt; to resize the image to an appropriate size for a favicon&lt;/h3&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;from&lt;/span&gt; PIL &lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; Image&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;im &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Image&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;open(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;butter.jpg&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;favicon &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; im&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;resize((&lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;,&lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;favicon&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;save(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;favicon.ico&amp;#34;&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/2018/12/image.webp&#34; alt=&#34;image_ico&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于</title>
      <link>https://www.bobobk.com/en/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.bobobk.com/en/about/</guid>
      <description>&lt;p&gt;我是春江暮客。&lt;/p&gt;&#xA;&lt;p&gt;平时喜欢折腾，各类服务器，平时学习也经常使用R，PHP,MySQL,，但是还是最喜欢python，非常方便，什么库都有，&lt;/p&gt;&#xA;&lt;p&gt;人生苦短，快用Python。&lt;/p&gt;&#xA;&lt;p&gt;自己经常使用Python做些好玩的事情，像什么画画图，爬虫爬取电影看啊，做个贪吃蛇小游戏啊什么的小项目。不过着重web方面，机器学习，深度学习。&lt;/p&gt;</description>
    </item>
    <item>
      <title>归档</title>
      <link>https://www.bobobk.com/en/archives/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.bobobk.com/en/archives/</guid>
      <description></description>
    </item>
  </channel>
</rss>
